はてなキーワード: 組込みとは
https://anond.hatelabo.jp/20210321032656
の続き。
基本が結局受かっていたので、4月に応用受けました。で昨日、合格してました(午前80、午後79)。せっかくなので、またまとめてみます。
1.やったこと
基本のときには、時間がなくて焦ってあれこれ手を出した結果、散漫になってしまったので、応用に当たっては、
だけを買って通読しました。といっても、あんまりペースがはかどらず、何度か通読するつもりでしたが、それぞれ2回ずつどまり。午前はITパスポート・基本同様、にしむら工房の過去問アプリを繰り返し。
TAC本は、自分には向いてませんでした。この年齢になると暗記力が落ちてるんで、用語がずらずら出てきても覚えられないんですよね。それぞれの経緯とか応用とか、そういったストーリーがないと知識が定着しなくて、でもあまりそういった説明がないんで、読んでも、やった感がある割に残るものがないというか。範囲が広いんで、そんなことまで書いていたら厚さがとんでもないことになるのはわかるんですが(ちなみに723ページ)。結局、Googleで調べなおすことが多かったです。小口本は、過去問解説集なので、試験範囲を網羅しているわけではありませんが、TAC本とは対照的に書いてあることは頭に定着しやすくてよかったです。
なお、基本のときは、参考書はKindleにしていたのですが、合格した後は持っていても無意味なので、今回は紙にして、メルカリに出しました。すぐ売れた。
2.試験(午後)
いわゆる「文系セット」(経営戦略、プロジェクトマネジメント、サービスマネジメント、システム監査)を選択しました。事務屋だけに。小口本で過去問を眺めていた限り、組込みシステム開発の方がこれらより易しかったので、組込み+文系セット中3問選択を想定していたのですが、今回は組込みが難しかった(試験後の関係掲示板でも話題になっていました)ので、この結果に。
選んでおいて言うのもなんだけど、経営戦略って試験には向いてないと思うんですよ。何が正解かについて、まともな基準がないわけで。今回はポーターのバリューチェーンがネタでしたが、バリューチェーン自体、ポーターが「こうやって企業を分析したらわかりやすいんじゃね?」って提唱しているツール以上のものではなく、エビデンスなどで客観的な妥当性が確認されているわけではありません。となると、正解は出題者の頭の中にしかなく、そんなものを聞かれてもなあ、という気分が否めません。個人的には、せめて会計関連のものであれば、会計基準という確立された体系についての理解を問うということで、もう少し納得感があるのですが。
3.これから
だんだん受験が自己目的化しつつあるのですが、せっかくここまで知識を増やしてきたので、秋にはセキスペを受けようかな、なんてことを考えています(午前I免除にもなったし)。TAC本について書いたように、事項の羅列に向き合うのがしんどいお年頃なので、まだ試験までは時間もあるし、ジョン・マコーミック『世界でもっとも強力な9のアルゴリズム』や結城浩『暗号技術入門』など、直接試験対策になるわけではないものの、試験分野の基礎知識が充実しそうな本を読んでいます。夏休みから試験対策を始めようかな。
要約すると、37歳無能正社員の俺が、職業訓練校に通って未経験のIT系に転職できるか、という相談。
俺はクソ弊社の無賃残業にブチ切れてる無能・一応正社員のアラフォー男性・年収300万強
HTML・CSS・JavaScript・PHPの初歩をドットインストールで習い、自分のWordpressをイジった程度で、壁にぶち当たり中。
ならばと方針転換、転職活動中に危険物乙種4類(ガソリン等を扱う初歩的な資格)を取ったので、
シナジーありそうな電気工事士、ボイラー技士などの資格を取って活かせるビルメンテナンス方面での転職を考える。
求人情報で、職業訓練校の講座を受けることで実務経験に近い扱いを得られるケースを知り、職業訓練校の説明会に行く。
職業訓練校の説明を受けた際に、ITエンジニアを目指す講座の存在を知り、その内容に魅力を感じて再び方針転換。
訓練校の担当者さんいわく、講座を受けることは可能だが、技能習得後の年齢の壁は確かに存在すると忠告を受ける。
皆さんにお聞きしたい。
以下の内容を職業訓練校で習得することで、転職に繋がる技術は身につくだろうか。
カリキュラムは要約すると以下の通り
・Java
・リアルタイムOS(RTOS)を使用したマイコン制御システムの作成
・Linuxの基礎
以上の内容で、ソフトウェアとハードウェア両方の知識を身に着け、サーバサイドエンジニアやIoTエンジニアを目指すというもの。
また、JavaScriptは独学での学習を続け、趣味に関するサイトをWordpressで作成し充実させるという目標はそれとは別に進めていくつもり。
訓練校でプログラム言語を体系立てて学べれば、自己学習の進展にも繋がればと思っている。
睡眠障害持ちのため(夜勤の場合でも家で睡眠できれば問題はないが、ビルメンは基本的に職場に泊まるシフトがある場合が多い)
そこがネックになるのではという危惧はある。
ビルメン系の資格+クレーン車等の資格を合わせて、清掃工場などの管理系も考えてはいるのだが…
これ以上は本題がとっ散らかるのでこれくらいにさせていただく。
どうも仕事への熱意が持てなくなったので、気持ちを整理するために増田を書いてみる。
一般的には昇進というものは喜ばしいのかもしれないが、仕事としてプログラミングをする時間はなくなった。
週末に仕事とは関係無いソフトを作ってみたり使ったことが無いプログラミング言語の本を読んだりするような人で
課長になったら何の仕事をするかというと、開発メンバーの状況確認、お客さんと会話して交渉やら受注活動、
お金の計算、社内向けの書類を作成するとかで、どうにもつまらない。
あと、今までとは違うことを求められる感じでストレスがすごい。
組織として課長は誰かがやらないといけない役目だろうと思うし、年齢的に自分がなるのも自然だったし、
やる前から断るのもどうかと思って、課長になってから考えてみようと思ってしまった。
元々、とある製品に関係していたが10年ほど前に市場が崩壊したので違う分野の製品で違う技術の方向の業務になった。
つまり、自分がやりたいと希望した業務というより、市場や会社の方向に流されてやっている業務という感じ。
課長としては、自分でビジネスを考えてやっていくことを求められるが、愛着が無い業務なので、どうもそれができる自信がない。
流されて生きてきたツケですね。
去年の年収は800万円だけど、課長になると1000万円になるらしい。
氷河期世代の40代としては、おそらく、めぐまれている方なんだと思う。
ただ、あと20年くらい今の会社でこの仕事をやることを考えると正直、きびしいと思ってしまう。
転職も考えたけど、今は組込み系で、Web系もアプリ系もゲーム系も何でもやってみたいけど業界を変えたら年収も下がるだろう。
年収800万円を想定して住宅ローンを借りてしまったし、これから子供たちが大きくなってくるし
さらに、40代でマネジメントよりもプレイヤー希望です。っていうおっさんは必要とされないだろう。
と、ここまででザーッと気持ちを書き出してみたけど、
戦略もなく、楽して生きてきたのに楽しい事だけをしようとしているだけのクソ人間やんけ。
そら人生も行き詰まるわ。
前からプロジェクトとしては存在していたPine Tabのことが最近話題になっていて、
https://daily-gadget.net/2020/05/16/post-15100/
なんでいまさら?と思ったら、もうじき出荷開始とのこと、おめでとうございます。
https://www.pine64.org/2020/05/15/may-update-pinetab-pre-orders-pinephone-qi-charging-more/
ブクマのコメントを見ると、特にRAMのスペック不足で使い物にならなそうという意見が多い。このスペックのタブレットにUbuntuを入れるなら、まあそうだよなという感想しかない。
でもあらゆるLinuxディストロがUbuntuみたいにリソースリッチな環境で使うことを前提として作られてるわけではなくて、省リソースと安定性を優先して作られていて組込み用OSに多く使われているArch Linuxのようなディストロもそれなりに大きな勢力として存在してる。
じっさい、Pine TabはArm版のArch Linuxを公式にサポートしてる。
https://wiki.pine64.org/index.php/PineTab
ちなみに、この記事↓の人は開発者で、Raspberry Pi Model 2にArch Linuxをインストールして普段使いデスクトップ環境を構築してる。Raspberry Pi Model 2のRAMは1GB。著者の構築した環境で、RAMの常時使用量は165MB。
https://opensource.com/article/20/3/mac-raspberry-pi
この記事に影響されて自分でも古いThinkpadにArch Linuxを入れて、ストレスなく使える程度にリソースは食う環境を構築してみた。
Firefoxを起動したとたんに使用量が跳ね上がって800 MB-1GBくらい。
なので、RAM 2GBのPine TabにArch Linuxを入れて普段使いや開発環境として使うのは全然ありだと思う。
こういうことを考えるのは面倒くさいし、もっときれいなGUI環境でタブレットを使いたい人は無印のiPadがいちばんスペックとコストのバランスが取れていて手軽なのでは。
他に詳しい人の意見も知りたい。
学生時代からも含めるとトータルで15年プログラムを書いていることになる。
ふと思ってみたのだが、自分自信が欲しいと思うソフトウェアがないし、
唯一買ったことがあるソフトは大昔にWindowsを使っていた頃のウイルス対策ソフトくらいだろう。
今はOSはLinuxなのでソフトには一切金を使っていない。スマホアプリも1回も買ったことがない。
スマホアプリ、WEB、組込み、色んな分野のソフトを作ってきたが欲しいソフトがない。
言語やOS等の技術そのものに興味はあるが作る対象に興味がない。
組込み界では今時のプログラミング界隈の常識の多くが通用しない。最初に..
IT業界の仕組みと偽装請負の闇を分かりやすく解説しよう (1/3):「多重下請け+客先常駐+偽装請負」のコンボで業火に包まれるな - @IT
「プライベートでは一切勉強したくない」と言っていた社員のこと - 株式会社アクシア
つまり、組み込み&下請けはまず止めとけってことだ。なぜならプライベートで勉強するやつが少ないからだ。
あながち間違ってないと思う。
組込み界では今時のプログラミング界隈の常識の多くが通用しない。最初にあなたが相手にするのはRAM 1kB, ROM 4kB、クロック 20MHzなどというMCUである。
使用する言語はC99かアセンブラである。幸か不幸かC++を使わされることもある。既にC++で書かれたプロダクトに係わってはならない。
当然フロントエンド界隈などのようなイミュータブルインスタンスを大量に使い捨てる富豪的な言語やアプローチの採用は難しいだろう。
トラブルが起きたときにプログラムだけでなく回路図を読んでハード側に問題があるこを示せないと極めて立場が悪くなる。
むしろプログラムし易いコンポーネントの選択や回路構成に積極的に口を出していかないと動かない責任だけがソフト担当者に投げられて割を食う。
開発環境はWindows上のEclipseベースの統合環境が使えれば上等であり、運が悪ければMCUメーカーお仕着せのクソIDEを使わせられる。Macで優雅に開発することはまずあり得ないだろう。
底辺企業でバージョンコントロールシステムの導入のための意識改革は簡単ではない。もし強行に導入しようとすればあなたは孤立する。
誰かがIoTだ、機械学習だの言い始めても社全体として主力製品を作るのでなければ本気で取り組んではいけない。あなたがそのテクノロジーを理解していても誰もサポートもメンテもしてくれないのだから。
試験、受けました。
ことさら話題にするようなことでもないかもしれませんが、せっかくなので書きます。
これから受ける人などの参考になれば幸いです。
30代。
製造業。
プログラミング歴は数ヶ月。
それまではExcelWordがちょっと分かるくらいだった。
初受験。
内製のソフトがC++でできていて、これを色々弄くれるようになればあんなところやこんなところまで自動化できるなあ、でも何も知らないまま弄るのはちょっと怖いなあ…
そうだ、勉強しよう!
8月半ば、受験申込期間の締め切りギリギリに試験の存在を知り応募。
勉強期間は2ヶ月ほど。
平日は1日1〜2時間。土日は1日3〜5時間。まったく勉強しなかった日が10日ほど。
最初に、ネットで評価の高かった合格教本という本を買って読んでみた。
基本情報の知識もない状態だと、書いてあることがもうほんとにまったく分からず、挫折しそうになった。
方針を変えて、応用情報技術者試験ドットコムで過去問道場をひたすら回した。
分からない言葉はネットで調べて、これはと思う説明に出会ったらOneNoteにひたすらコピペした。
最後の2週間はドットコムでユーザー登録をし、理解度で問題を色分けするようにした。
最後の1週間でピヨ太くんのサイト(正式名称長い)を見つけ、分からない言葉はまずこのサイトで検索するようにした。
受験前は、
…のどれかを選ぼうかなと考えていた。
いわゆるストラテジ、マネジメント系科目だけで固めても良かったのだけど、組込みなんかは普段の生活からイメージしやすいし、2時間半の長丁場ならテクノロジ系科目を間に挟んだ方がほどよく頭のリフレッシュになるかなーと思っていた。
実際の試験では、
…を選んだ。
机上に置けるような時計は持っていなかったし、まあ午前だけなら時計が無くても大丈夫だろうとタカをくくっていた。
問題を順当に最後まで解いて、全て順番通りにマークされてることを確認してから、手を挙げて外へ出た。
15分ほど余っていた。
さすがに午後は時計が無いとマズイと思い、休憩中に買ってくる。
セキュリティ(必須問題)の設問1で長考してしまい、20分ほど経っても解答用紙の半分が埋まっていない状態。
とりあえず他の問に移り、最後に余った時間でセキュリティに戻る方針にシフト。
経営はぱっと見簿記の知識が生かせそうだと思い選んだのだけど、「固定長期適合率」がどういう計算式なのか見当がつかない。
早々に切り上げる。
組込みの設問1でまたも長考、ほぼ解答を埋められたものの、結局40分ほど費やす。
サビマネ、監査は焦りから問題文の通読ができず、設問を最初に読むようになり、結果読み返しが増えてしまった。
監査を終えたところで5分くらい余ったので、這々の体でセキュリティに戻る。
午前とは逆に、始終時間との戦いだった。
午前は78.75点。
午前は問題用紙に選んだ選択肢に○する余裕があったのだけど、午後はそれがなくなって、問題解くのに必死で自分が何を書いたかしっかり思い出せない。
色々と書いたけれど、そういう訳で正直受かってるかまったく分からない。
配点、部分点次第といったところ。
怖い。
午後の対策が難しい。
午後対策でよく見られるのは「国語の読解力をつける」というアドバイスだが、読解力というのは漠然としていてレベルの向上も分かりづらい。
今の私なら、以下の順番で勉強を進めるかもしれない。
そもそも、「試験に合格するための勉強」に終始して、最初の動機がなおざりになっちゃった感が否めません。
…でもそれらがなんなのかはよく知らない、みたいな。
一つ確実に「分かった」と胸を張って言えることは、
分からないことは、調べればいい。
分かる人に、聞けばいい。
ってことですかね。
受かってなかったとしても、もう受けないかもしれませんね。
はぁ…10万欲しいなぁ…
以上で終わりです。
最後まで読んでいただきありがとうございます。
お疲れ様でした。
まじな話をすると、N予備校のプログラミング入門コースやるのがオススメ。
一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。
月額1000円だけどしっかり勉強すれば一ヶ月の無料期間中に終わると思う。
もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラムで講師曰く去年はこれで二人エンジニア就職を決めたらしい。
内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職に必要な環境構築やセキュリティまでみっちりやる。
で講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。
↓みたいなことが学べる
----
Web ブラウザとは (Chrome, デベロッパーコンソール, alert)
はじめてのHTML (VSCode, HTML, Emmet)
さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)
HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)
はじめてのJavaScript (JS, ES6, エラー)
JavaScriptでの計算 (値, 算術演算子, 変数, 代入)
JavaScriptで論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)
JavaScriptのループ (ループ, for)
JavaScriptのコレクション (コレクション, 配列, 添字, undefined)
JavaScriptの関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)
JavaScriptのオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)
はじめてのCSS (CSS, セレクタ, background-color, border)
CSSを使ったプログラミング (transform, id, class)
Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)
診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)
診断機能の組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)
ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)
LinuxというOS (VirtualBox, Vagrant, Ubuntuのインストール, OS, CUIの大切さ)
コンピューターの構成要素 (ノイマン型コンピューター, プロセス, lshw, man, ps, dfの使い方)
ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)
標準出力 (標準入力、標準出力、標準エラー出力、パイプ、grep)
vi (vimtutor)
シェルプログラミング (シバン, echo, read, 変数, if)
通信とネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)
サーバーとクライアント (tmux, nc, telnet)
HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)
GitHubでウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)
イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)
GitとGitHubと連携 (git, ssh, clone, pull)
GitHubへのpush (init, add, status, インデックス, commit, push, tag)
Gitのブランチ (branch, checkout, merge, gh-pages)
Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)
集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)
アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)
ライブラリ (ライブラリ, パッケージマネージャー, npm)
Slackのボット開発 (slack, mention, bot)
HubotとSlackアダプタ (hubot, yo)
モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)
ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)
同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)
例外処理 (try, catch, finally, throw)
HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsのイベントループ, リスナー)
HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)
HTMLのフォーム (フォームの仕組み, form, input)
HerokuでWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)
認証で利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)
Cookie を使った秘密の匿名掲示板 (Cookie, Set-Cookie, expire)
UI、URI、モジュールの設計 (モジュール設計, フォームのメソッド制限, リダイレクト, 302)
フォームによる投稿機能の実装 (モジュール性, textarea, 303)
認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)
データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)
トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)
削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)
管理者機能の実装 (Web サービスの管理責任, 管理者機能の重要性)
デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)
脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)
XSS脆弱性の対策 (XSS, 適切なエスケープ処理, リグレッション)
パスワードの脆弱性の対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)
セッション固定化攻撃脆弱性の対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)
より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)
安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)
Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)
ExpressのAPI (app, Properties, Request, Response, Router)
GitHubを使った外部認証 (Passport, OAuth)
テスティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)
継続的インテグレーション (CircleCI)
クライアントのフレームワーク (Webpack, Chrome 以外のブラウザでもES6)
DOM操作のフレームワーク (jQuery, jQueryアニメーション, this)
AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)
WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)
RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)
テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)
インデックス (インデックス, 複合インデックス, Bツリー)
集計とソート (SUM, COUNT, ORDER BY, GROUP BY)
「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計、モジュール設計、MVC)
認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)
予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)
予定とユーザーの一覧の表示 (非同期処理, Promise, then)
出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)