質問: 質問が悪く申し訳ありません。 「この言語は求人が少ないし将来性も低いからしないほうがいい」ではなく、 「優れたプログラマはこういった経験をしているから、こういったことができる。だからこれを勉強したほうがいい。」または、 「私はこういう勉強をしたから、今役立ってる。今そのレベルなら次はこれを勉強するといい。」といった感じのことを教えていただきたい。といった意味の質問でした。 何かやっておいてよかったもの等あればぜひ教えてください。
回答: こんにちは。 > > ハードウェアやC、Linuxを初めて、基礎を固めるのがいいかなと・・ > > > 「コンピュータの仕組みを把握すれば、様々なプログラミングをする際に応用が効き、より優れたプログラムを開発できるのではないか?」とのお考えでは? 「より優れたプログラム」は2つの方向性があると思います。 1よりユーザの作業を、省力化したり信頼性を上げたり簡単化したりするプログラム 2より省資源でより高速に動作するプログラム 日本では(残念ながら)1の方が需要は多く給料も多いようですが、2も重要でこれを置いてけぼりにすると悲惨なことになります。両者のバランスを取ることが大事です。 1についてはIT企業に属している限り逃れられないと思います。特に優秀な人にはそのような仕事の機会が嫌でも回ってきます。 2については自分から求めて学習しないと置いてけぼりです。ここはお金になりにくいせいと思いますが、この分野の教育に熱心な会社は多くはないように感じます。 そして、コンピュータの仕組みを把握していると2にたいへん有用です。特にマルチ・スレッドや排他制御の経験があると、性能と開発工数のバランスの取れたプログラムを設計できるようになります。(この辺を知らないと、コールバック地獄か、再現性のないバグに悩まされることが格段に増えます。) ここを学習するには、非常に単純なコンピュータ(マイコンと呼ばれるようなもの)で、アセンブラ、もしくは、C言語で低レベルな割り込み駆動プログラムの開発経験があると強いです。特に割り込みが頻発するようなものならば、排他制御不具合が再現しやすいので効果的に学習できます。 更に、ごく簡単で十分ですのでスレッド切り替えの開発経験があると非常に力強いです。(これは割り込みの延長線にあり、仕組みは極簡単です。レジスタを退避して、スタックを切り替えてreturn。) ラズパイも良いのですが、マルチ・コアですしlinuxが稼働してますし既に「複雑」なコンピュータに該当します。もし、アセンブラを多少なりとやってみようと言う気概があるのでしたら、AVRはお薦めです。個人負担できる価格帯ですし、自作派の方々が多数の情報を公開されています。C言語も無償のものがありました。たぶん今もあると思います。(私は業務で使ったことありますが、無償Cコンパイラでも十分でした。) プログラミング言語の学習で手一杯で、コンピュータの仕組みを理解しようと言う気概を持っている人はあまり多くはないように感じます。ここは直接お金に結びつきにくいですが、縁の下の力持ちになるスキルですので是非頑張って下さい。