プログラミングは独学で学習する、というのがぼくの持論です。
独学するには以下の素質・能力が必要だと思うので列挙して説明してみます。
プログラミング勉強以前の能力
プログラミング初心者に必要な独学で必要な力(能力)は、以下の3つだと思っています。
分からないことを分からないと判断できること(説明できるまで分かったと言ってはいけない)
検索力(全く知らない概念に対して、適切な単語を切り出して正確な情報を探し当てることができる)
知らない概念をゼロから組み立てて体系的にまた正確に理解できる読解力
フロントエンド、バックエンド、デザイン、ネットワーク、サーバー、データサイエンスどの分野でも必要な初歩的な能力です。
ググってでてきた記事が100%正しいとは限りません。古い記事で最新の仕様でなかったり(ときにそれが致命的なバグだったりします)、間違った理解をして記事にしているひともいます。検索力はあとで説明します。
プログラミングを仕事とするとき
加えてエンジニアとして仕事をするならば、
無知であるという自覚(謙虚さ)
できるエンジニアほど「プログラミングが簡単だ」と言っていない。某広告で○○えもんが言っていることは信じてはいけない。
クリーンアーキテクチャ
SOLID原則
要件定義
アンチパターン
アルゴリズム
現実のプログラムは本当に難しい。
素早く新しい技術を呼吸をするようにキャッチアップできる
学習する習慣をもつこと。
休日を休みとか思わず、わからないことや知りたいことを探求していく好奇心があること。
英語が読める
本当の最新技術はぜんぶ英語。
英語が読めなくても翻訳してでも読もうとする気があるか。
責任を果たす
嫌になってプロジェクトを途中で突然離任や退職したりしない。
バックレるなんてももっての他。論外。
コードに責任を持つ
6000万ドルのbreak文事件(1990年AT&Tで実際に起きた損害賠償金)など、たった一行の間違いで大損害を起こします。
自分が書いたそのコードに責任を持てること。賠償責任能力ではなく、なぜこの実装をしたのか/検証(テスト)したのかが説明できればよいと思います。
複雑さを手懐ける
実際のコードは本や動画で勉強したコードよりもっと複雑に作用している。
仕事を楽しめるか
難しいことでもチャレンジできる、分からないことだらけでも問題を解決することを喜びに感じないと長続きしないです。
結局プログラミングを好きになれないのであれば別の職業を選択することをおすすめします。
専門性を極める
プログラマ、エンジニアは高度で専門的な技術職です。
アメリカだと弁護士や医者と同じくらいの地位にある職業です。
覚えるべき概念が多すぎます。わからないことだらけで、毎日勉強していてもまた新しい技術が湧いてきます。そこで嫌になってしまうなら向いていないので、別の業界へ行くことをおすすめします。
検索について
間違った記事が世の中に溢れていると言いましたが、どうしたらいいでしょうか。
結論から言うと、その答えは公式サイトや審査を受けて公開された論文を読むことです。
1次情報、2次情報、3次情報というのがあります(詳しくは自分でぐぐってください)。1次情報を基本的に信用しましょう。
Natureが発行する論文やAWS/Reactなどの公式サイトが1次情報です。公式が1番です。
(ただ、公式も間違っていることが少なかれ存在します。AWSの公式には書いてない仕様が存在したり。。。)
Qiitaや個人ブログなどで書かれている情報は公式から部分的に抜き出して書かれた情報の塊です。
読みやすかったり、わかりやすいのがメリットですが、古かったり主観的な情報で間違っていたりアンチパターンが平気で書かれている場合があります。
読んでもいいのですが、読むときは必ず1次情報までさかのぼりましょう。記事の最後に参考文献/Referenceと書かれていると思います。リンクをクリックして引用元を確認する癖をつけておくとよいです。
重要なのは、自分が読んでいる情報がどういう性質のものかを見極めることが大事です。
意見
ぼくはプログラマ/Webアプリ開発エンジニアとして10年の経験があり、現在はスタートアップで新規事業のプロダクションの開発を担っています。
この記事はぼくの経験に基づくプログラマの実態の一部分を紹介しました。
プログラマとして働くことはとても楽しいものです。新しいことを覚えてそれを実際に実装してユーザに使ってもらう、このワクワク感がやみつきです。
分からないコードが分かった時やバグが潰せた時、その爽快感がたまりません。10年やってても毎日成長している実感がもてます。
プログラミングに興味がある方へ
ぜひチャレンジしてください。正直、優秀なエンジニアが不足しています。助けてほしいです。
いまプログラミングを勉強中だという方へ
ぜひエンジニアとして働けるようにがんばってください。
ぼくは高卒で独学で勉強してITの世界へ飛び込みました。最初は何がなんだか分からずがむしゃらにインフラ、アプリ開発、デザイン、IoT機器の開発、マネジメントなど勉強していろいろな経験して3年くらいやって一人前になれました。いまはフリーランスとして活動していて、ベンチャー企業の新規事業で開発をやっています。10年経っても毎日が新しいことだらけです。
プログラミングは独学でしか学べない
教室へ行ってもいいし、実際にエンジニアに指導してもらうのもよいです。ですが、最後は自分で調べて理解しないといけないです。
教えているひとも最低限ここは知っているというバイアスがあると思います。教えてもらって全部理解できるほど、ITの世界は甘くないです。専門的な用語がたくさんあり、IT企業ごとに習慣があり、毎日新しい技術が発表されてそれについていかないとエンジニアとして終わります。
独学でも十分に一人前のエンジニアになれます。ただし、積極的な自主学習と自分のレベルに合ったプロジェクトで経験を積むことが大事です。
そして、ITの技術は数学の勉強と同じで、本(やネットの記事)を読んで理解することは不可能です。
自分で実際にコードを書いて実装しないと理解することができないからです。
エンジニアが専門職であるという理由がここにあります。自分の目の前にある技術が、誰にでも理解できる技術であるとは限らないです。自分でなんとか理解して使いこなせるようにならないといけないです。使いこなすには作るしかないです。失敗して、失敗して、失敗して、そしてうまくいく。うまくいったらどうして動くのかがわかるようになる。この繰り返しです。数学は自分でたくさん問題を解いてレベルアップする、プログラミングも同じです。
なのでもっとも大事なのは説明できることです。なぜこの方法で実装したのか、ブラウザのレンダリングコストやパフォーマンス、可読性、セキュリティ、あらゆる要素を考慮してコードを実装して、レビューした時最悪バグが起きたときに説明できるようにならないといけないです。細かいところまで気を配る必要があります。
↧