初心者の独学エンジニアが陥りがちな習慣

 もしあなたがプログラマなら、プログラミングを始めたきっかけがなにかあるはずです。お金、キャリア、手に職が欲しい、なんか流行っているからなどいろんな理由があるはずです。

目的は様々だと思いますが、プログラミングを学習する者としてはみんな同じですね!

 エンジニア全体の約1/3は、コンピューターサイエンスの学位を取得しているらしいです。逆に言えば、コンピューターサイエンスの学位がなくても、エンジニアとして活躍している人は世の中にたくさんいます。しかも若者は必ずしも賢い人というわけでもない。

コンピューターサイエンスや数学の知識がなくても大丈夫と言いましたが、それらを学習しておいて損になることはないでしょう。

 私自身、独学のプログラマーとして、基礎力が不完全であることは自覚しています。もちろん、正式な教育を受けずに自分自身を学んだ伝説的なプログラマやハッキングの天才もいます。 しかし、あなたが普通の非天才である場合、独学のスキルには巨大なハンデがあることをまず自覚しましょう。 ギャップがあります。 死角があります。 そして、多くの独学のプログラマーは、自分になにが欠けているのかを正確に特定することは困難です。

 そのため、少しでも独学で勉強されている人の役に立ちたいと思い、この記事を執筆いたしました。

 どうすればwebデベロッパーになれるかが知りたい人は、こちら!

わからないことがなにかわかる。わからないことがわからない。

 独学プログラミングの最大の欠点は、自分がなにを知らないことを知らないことです。 無知は例え博士号を取得していても、誰にでも起こる可能性があります。しかし、独学のログラマーはウェブサイトの立ち上げ、アプリの動作、ポイントAからポイントBへのデータの取得など、実用的な目標に執拗に焦点を合わせているため、低報酬の理論的コンテンツをスキップしがちなのです
 独学のプログラマーがおざなりにしがちなトピックは次の通りです。

  • アルゴリズム:プログラミング言語は独自の書き方や検索を実装しているため、独学のプログラマーは、それらがどのように機能するかを学ぶのではなく、それらの使い方にしか注目しない傾向があります。
  • 計算理論:コンピューターが問題を解決する方法と、プログラミング言語を構築する方法についてです。有限オートマトンからラムダ計算まで、重要なトピックが山ほどありますが、これらを勉強しない傾向が独学プログラマには強いです。
  • 数学:従来のコンピュータサイエンスは、線形代数、微積分、確率論、統計など、重要な数学トピックの幅広い分野に及びます。数学がなくてもエンジニアになれた!みたいな話がよく持ち上がるようになりましたが、それは数学をやらなくていい理由にはなりません
  • ビッグ・オー表記:このツールは数学の世界から採用されており、開発者はさまざまなアルゴリズムの全体像を説明(および比較)することができます。

 独学のプログラマーがこれらの自分で学習することができないというわけではありません。しかし、別の新しいJavaScriptフレームワークなどが発表され、そちらの知識を整理する必要がある場合、理論に専念するのは後回しになってしまうでしょう。また、独学のプログラマーは実践的なプロジェクトと作業コードに焦点を合わせているため、実際のコードの表面下にある理論上の氷山にさえ気づいていない可能性があります。

これは致命的です

理論と実践のギャップを埋める

 コンピュータサイエンスの理論はすぐには効果がないかもしれませんが、適切なタイミングで重要になる可能性があります。

アルゴリズム

 デフォルト選択が最良の選択ではない場合があります。よりアルゴリズムを深く理解していれば、エラーの対処にかかる時間を短縮したり、異常な問題を解決する方法を思いついたりするでしょう。

おすすめ本!Algorithms in a nutshell

計算理論

 ほとんどのプログラマーは、独自のプログラミング言語を作ることはしないですよね。 しかし、計算理論は、さまざまな言語がどのように接続されているかを理解するのに非常に役に立ちます。言語を作ってみるのも理解が深まるかもしれません。

 世の中には無料で学習できる動画が腐るほどあります。

 Neso Academyには、このテーマに関する講義シリーズがあり、これはおすすめ。

数学

多くのプログラマーは、プログラマーに限らずですが、数学に触れることなく仕事をしていると思います。ただし、機械学習、自然言語処理、データ分析、またはソフトウェア開発の最前線に関するその他のトピックのいずれかに関わっている場合は数学が不可欠です。

ビッグ・オー表記

 優秀な開発者であるためには、仲間とのコミュニケーションを円滑にするために、速記を持っていると良いでしょう。ビッグ・オー表記を頻繁に使用することはありませんが(おそらくこれまでにないだけかもしれません)、複雑な分散システムの最適化について考えるときに必要かもしれません。

 独学のプログラマーの場合は、例えば学習時間の5%とかを、より理論的な部分の学習に割り当てるなどしていくと良いと思います。理論は日常業務で直接使用しなくても、視野を広げ、好奇心を育み、コンピュータサイエンスのより深い謎を理解するのに大いに役立ちます。

自信をどうやってつけるか

 独学でプログラミングを勉強していると、どこまで勉強すればいいかわからなくなると思います。
 独学でエンジニアを目指すときに重要な点は、コンピュータサイエンスについて学ぶことではなく、自分自身をどう評価していくかだと思います。

 そのために、できるだけ多くの会話を色々な人としていくことはスキルアップに大切な行動です。ソフトウェア開発のすべてを研究することは大変ですが、できるだけ多くの異なるタイプのプログラマーとコミュニケーションをとることで、視野を広げることができます。

  • 地元の交流会に行く: ハッカソンまでじゃなくても(ハッカソンがあるなら参加した方がいいですが)、経験豊富なプログラマーは驚くほど社交的で知識を共有することに熱心です。
  • カンファレンスに参加する: 余裕があれば、興味のあるテーマを中心に開催されるカンファレンスに参加しましょう。これは、ソフトウェアフレームワークを使用したスピードデートのようなものです。 また、「熱量を感じる」ことで多くのことを学ぶことができます。つまり、カンファレンスのプレゼンテーションやワークショップへの反応は、どの技術がその背後にあるコミュニティの熱意を持っているか、どのような新しいプロジェクトが成功する可能性があるかを知ることができるのです。
  • オープンソースプロジェクトに参加する:コーヒーを飲んで人の話を聞くだけでなく、実際にコードを書く必要あります。というか書け! 単純なプロジェクトでも他のプログラマーと対話することで、コードの一部を取得し、異なる視点から見れるようにトレーニングできます。

上記のもの以外でも何か参加できるようなイベントなどがあったら、積極的に参加すると良いですね!SUNABACOにはそのような参加すべきイベントがたくさんあります!是非参加してみてください!

結局独学

 働くプログラマーを調査したものの結果によると、独学のプログラマーが少数派であることが報告されています。しかし、別の方法で調査すると、状況が変わりました。

 ハッカーランク調査結果を見てみましょう。こちらの調査では、学校と独学の両方を組み合わせた開発者の割合が、38%近くにのぼっています。

 これは驚くことではなくて当たり前の話なのです。急速に変化するソフトウェア開発の世界では、自分で継続的に学習する必要があるということです。

学校で受けたコンピュータサイエンス教育は資産である。しかし、自分で学習を続ける能力はもっとも必要なことである。

 学校でコンピュータを勉強した人たちが独学する能力がないということではありません。基礎をしっかり勉強していることを考えれば、独学プログラマよりも有利な立場にいるかもしれません。一方で、独学のプログラマーは厳しい試練に直面しています。なにをどう勉強すべきなのか、勉強方法があってるのか間違っているのかの評価がわかりにくく、とりあえず好奇心と野心だけで必要なものを学んできたと思います。

 挫折したくなるかもしれません。でも、そうやって自ら学習してきたことはきっと資産になり、キャリアにもなることなので、自信を持っていいと思います。

SUNABACOプログラミングスクールは、達成率99%以上の2ヶ月短期集中のスクールです。もしも、少しでも他の人と一緒に勉強したい、仕事の取り方がわからない、と感じている方は、一度相談してみましょう。いつでもお待ちしております!