見出し画像

そろそろプログラミングの勉強始めようかなって思っている人に、知って欲しいこと (後編)

後編ではメンタリングの時などによく聞かれる質問をまとめてみました。

プログラミングを学ぶ上で必要な学校の勉強は?

まずなんといっても必要なのは、

英語の読解力

だと思います。よく言われているように、プログラミングに関する情報リソースは、ほとんどが英語で書かれたものです。一般には日本語の10倍とか、それ以上とか言われています。例えばプログラミングに関するQ&Aサイト、StackOverflowなんかを見ていると、こんなにマイナーな質問についても回答がつくのか?と言うくらい非常に情報量が豊富です。回答のレベルも高いので、日本のQ&Aサイトは大幅に水をあけられている状況です。英語読解力は優れたプログラマになるためのほぼ必要条件だと思います。

数学はどうでしょう?  コンピュータ=計算機ということで、数学が重要そうなイメージをもたれがちですが、少なくとも初学者の間は必須では無いと思います。これまでの経験でいうと、学校で習う数学として主流の分野である微分・積分や代数・幾何よりも、集合や論理演算の考え方が重要なように思います。これらは学校の数学の延長というより、これらの領域をコンピュータサイエンス基礎の一部として捉えて勉強する方が良いと思います。

(※なお、データ分析や3Dグラフィックス系に興味がある人は代数・幾何は必須なのでしっかり勉強してください。)

プログラマの生産性の個人差が10倍って本当?

本当だと思います。生産性の定義にもよるし、そもそも数値化するのも本当は難しいのですが、体感値で10倍くらいは優にあると思います。

どうしてこういう差が出来るのか、この記事を書くに当たって考えてみたのですが、最初のうちは

生産性=学習効率

であるのかなと筆者は思っています。学習効率に差があると、ちょうど金利の複利計算のようにじわじわと差が広がっていって、気がつくと10倍もの差が付いていた、というイメージです。

学習効率の内訳としては、前編でも説明したように

オペレーションのスキル(アウトプットの能力)

情報収集力(インプットの能力)

が大きく作用していると思います。初学者の段階においては両者を高めれば高めるほど学習効果が上がります。

さらに情報収集力の内訳は

英語読解力

検索力

後者の検索力とは、Google等の検索サイトで検索する際、検索キーワードとして適切なものを選択する能力です。たとえば、GUIのプログラミングで、Xという要素を表示したいとします。

ところが、参考書通り打ち込んだのに、Xが表示されないとします。このとき、Googleの検索窓に

x

とだけ入力するのか、

x missing

とか

x hidden

状況を追加して指定するだけでも、情報の絞り込み度が全く変わってきます。検索キーワードが適切でないと、いつまで経っても必要な情報にたどり着くことが出来ません。ものすごく非効率的、つまり貴重な時間の無駄遣いになってしまいます。

上記は簡単な例ですが、直面している問題を構成するコンテキストを正確に把握することで調査の効率が格段に上がります。こうしたスキルをどう鍛えるかですが、たとえばQ&Aサイトなどで他の人の質問を観察して、

良い回答が返ってきている質問と、そう出ない質問を見比べる

自分で質問してみる

などすると、わからないことは何で、わかっていることは何かを見極める能力が付くのではないかと思います。


そもそも、どのくらい勉強すれば一人前と見なしてもらえるのか?

起業家の鶴田浩之さんがプログラミングスクールを立ち上げ、カリキュラムを検討する際に、必要な勉強時間をこのように見積もっています。

このプログラミングスクールの方針の一つとして、

・Leaning How to Learn、技術の変化が激しい時代を生き抜くための柔軟性を身につけること。答えを教えるコミュニケーションではなく、考え方を養うためのコーチングが主体的であること。

とのことで、職業プログラマーとして活躍できるよう、こうした方針を充足しようとした場合に、

“給与が発生する職業エンジニアとして社会に送り出すために必要な最低学習時間を「1200時間」と見積もった。その人本来の論理的思考力、学習効率、コミットメント力も含めると、個人差はかなりボラが出てくるものであるが、おおむね 1200時間 が中央値となる。毎週50時間のフルタイムコースで入学すれば、24週間コース(6ヶ月間)で達成でき、仕事を続けながら就職を目指す 48週間コース(1年間)であれば、だいたい週20時間を捻出してもらう。”

といっています。

おそらくですが、これからプログラミングを勉強しようとされている方は、思っていたよりも多くの時間が必要なんだな、と思ったのではないでしょうか。逆に現役エンジニアの人は、「まだまだ足りないんじゃないか?」と思った人が多いのではないかと思います。

いずれにしても、多くのプログラミングスクールでは、もっと簡単にスキルが習得できると謳っているようで、このあたりの理想と現実のギャップはしっかりと認識しておいた方が良いと思います。

パソコンは何を買えば良いのか? Mac、Windows?

当然ですが、用途によって向き不向きがあります。もしどんなジャンルを勉強したいかがはっきりしていない場合はMacを買った方が対応できる範囲が広いので、やりたいことを探しやすいと思います。

ITエンジニア志望者の中で人気が高いWebアプリケーション開発の分野は、UnixというOSをベースに開発されてきた長い歴史があるので、Unixを源流としているOS上でスムーズに学習環境を整えることが出来ます。現在Unixの流れを受け継ぐOSとして、一般的に利用しやすいものとしては、Macで動作するMacOSと、サーバ機器をはじめ、さまざまなコンピュータで用いられているLinuxがあります。Linuxを一般的なWindowsPCにインストールして使用することも出来ます。ただこの方法は初心者には少しハードルが高いと思います。周りにLinuxに詳しい人が居て、いつでも聞けるという方でなければおすすめできません。

初学者は、プログラミング言語の文法などといった技術的な本質よりも先に環境構築でつまずくことが多いです。こうしたことで学習の土俵にも立てずに挫折してしまうことをさけるため、Unixをベースとしているうえに、強力なGUI操作も備えたMacOSで開発することをおすすめします。

なお、Windows環境でも大抵の言語は動くように出来るのですが、Unixに似せた環境を作ってから動かすという二重の手間が発生し、なおかつWindowsとUnixという全く毛色の違うOSの操作・設定などの知識をある程度持つ必要があります。

ただし、Windows上でLinuxを動作させるWSL2という技術が急速に整備されてきており、今後一般的なWebアプリケーション開発を学ぶ環境として一般的になる可能性があります。

また、ゲームプログラミング、3Dグラフィックスに興味があるという場合はWindowsのゲーミングPCが良いと思います。

勉強したいジャンルはどうやって決めたら良い?

まずは出来るか出来ないかに関係無く、作りたいものを見つけましょう

作りたいものを実現するにはどうすれば良いかを調べたり聞いたりする過程で、IT技術の全体像、各種技術の守備範囲や長所・短所などが見えてくると思います。作りたいものが作れなかったとしても無駄ではありません。

調べていくうちに、作りたいものはどうやら自分の今のスキルでは難しいということがわかってくることが多々あると思います。そのときはそのときまでに知ったことで、新たに目標を設定して進めば良いと思います。

勉強したいジャンルは決まった。まず何をすれば良い?


その技術の公式ドキュメント(サンプルコード)

書籍

の順に勉強すれば良いと思います。なんだかんだいって公式ドキュメントを勉強するのが効率が良いことが多いです。なぜならその技術の開発者が書いているため、開発思想や設計方針に裏打ちされた形でドキュメントが書かれているので、わかりやすく、本質に迫っているものが多いです。

筆者が10年前、iOS(当時はiPhoneOSという名前でした。)が出たとき、書籍はもちろん公式ドキュメントもそれほど充実していない状況でした。当時はiOSの開発には厳しいNDAが課せられていたためネット上にも情報は皆無です。

公式サイトにサンプルプログラムだけはそこそこ豊富だった(おそらく社内エンジニアの間でも技術をキャッチアップする必要があったのではないかと想像します)ので片っ端からサンプルプログラムをダウンロードして、少し改造しては動かすという形でスキルを身につけていきました。

次に書籍です。技術によっては公式のドキュメントの構成が入門者には取っつきにくいこともあります。とっかかりの部分を易しく解説している本に恵まれている技術もあります。書籍の場合も、開発者、もしくは開発者に近い人が書いた本をおすすめします。

あと、技術書についてはお金を惜しまないように、複数買った方が良いです。いくら優れた本でも一冊の本ですべてをカバーすることは不可能で、ある本では全然わからなかったこと、他の本を参照したら一発で解決した、なんてこともざらです。

これからプログラミングを学ぼうとする人は、キャリアアップが目的の人も多いと思います。したがって経済的な余裕が無い状況からのスタートの方もいらっしゃるかと思いますが、本代はケチらないようにしてください。スクールに高いお金を払うよりも、よっぽど高い対投資効果が得られます。良い技術書を見分けるスキルも長く使えるエンジニアのスキルの一つです。身銭を切ってこうしたスキルも磨いてください。

最後に宣伝ですが、どうしても行き詰まってしまったり、もう少し具体的に自分の事情に即したアドバイスが欲しい方はこちら経由で一声かけて頂ければと思います。


この記事が気に入ったらサポートをしてみませんか?