失敗ばかりのプログラミング勉強法を語るので反面教師にしてくれ

5年以上前に「プログラマーになりたい」と思い立ち、業務の後でコツコツとプログラミングの勉強をしてきた。

「自分でアプリケーションを作って、世の中に出せたらどんなに素敵なことだろう」

と夢を見ていた。青雲の志と言ってもいい。

就職前はファイルとフォルダの違いもわからず、WindowsのパソコンのセットアップもできないIT弱者であった私が、ゼロどころかマイナスの状態から、明らかに適正がないのを承知でコツコツと勉強してきた。


...という論調で始まると

「全然ダメだった自分が大逆転を果たすまでの素晴らしい勉強法」

を語るようにも見えるだろう。

ネットでよくある

「借金100万円の落ちこぼれだった僕が年収1億を達成した仕事術」

みたいなやつだ。


この記事でそんな奇跡は起きない。


ここで語られるのはあくまで敗軍の将が語る、自らの失敗談だ。
素晴らしい成功譚ではなく、アンチパターンである。


著名なプログラマーが素晴らしい勉強法を語る記事はウェブの世界に山ほどある。

しかしダメなプログラマーが自分の失敗の原因を分析し、何をしてきたかを語る記事は少ない。

どの世界でも敗者は語らず、老兵は死なず、ただ去るのみだからだ。


私は独学で下手くそな勉強を続けて、たくさんの時間とお金を無駄にしまくってきた。

そんな自分の失敗を振り返り、

「こうすればもっと効率よく、技術を身に付けることができただろう」

という反省と分析を語っていく。


これからプログラミングの学習を始める方は私の失敗を教訓として、同じ轍を踏まないように、他山の石をもって己の糧にしてほしい。

手を動かさずに本を読むだけでできる気になっていた

勉強を始めた頃の私は、受験勉強と同じノリでプログラミングを勉強していた。

これはプログラミング学習において致命的な誤りであった。

プログラミングは資格試験的な勉強よりも、スポーツに似ている。
ルールブックを読むだけでサッカーができるようになる子どもはいない。

自分でボールを蹴って、フィールドを走り、パスをして、シュートを打たなければサッカーは上達しない。

それと同じように、プログラミングは自分で書いて、自分で動かして、失敗の理由を考えてやり直し、再び自分で動かすことを繰り返さなければ上達しない。


本を読むだけでなく、手を動かさなければいけなかった。


本に書いてある答えを読んで理解した気になっていては永遠にコードは書けるようにならない。

たくさん本を読むのはいいが、まずは自分で手を動かして、失敗しながら学ぶべきであった。


学ぶ内容を絞ればよかった

プログラミングの勉強を始めると、次から次へと学びたい内容が出てくる。
新しい技術は次々と生まれてくるし、深く学ぼうと思ったらキリがない。

「あれもやらなきゃ、これもやらなきゃ」と焦りが焦りを生み、『作って理解するOS』とか『CPUの創り方』みたいな本まで買ってつまみ食いしていた。

幅広く学ぶのは大切だとは思うが、初心者が働きながら満遍なく学ぶには、プログラミングの世界は広すぎる。

「色々知ってるけど実用レベルではない知識」ばかりが増えていき、器用貧乏になってしまう。


目的を見失うことなく、自分に本当に必要なものに学習対象を絞るべきだった。


ウェブアプリを作りたいなら、ウェブアプリを作るための技術に集中する。

一つのことが身につくまで、他は捨てる。

ドラッカーが『経営者の条件』で語っている「勇気の話」を教訓にしてほしい。

成果をあげるための秘訣を一つだけ挙げるならば、それは集中である。
成果をあげる人は最も重要なことから始め、しかも一度に一つのことしかしない。

現在集中して取り組んでいる仕事以外のものにコミットしてはならない。

集中とは、「真に意味のあることは何か」「最も重要なことは何か」という観点から事案と仕事について自ら意思決定する勇気のことである。

この集中こそ、時間や仕事の従者となることなくそれらの主人となるための唯一の方法である。

自分にとって本当に大切なことだけに集中して、他は捨てる勇気を持つべきであった。

周りの意見に振り回されなければよかった

インターネットで情報収集すると、知識でマウンティングしてくる人間が目につくだろう。

負けず嫌いな人はインターネットマウンティングマンに馬鹿にされないために、色々と手を広げて勉強したくなってしまうが、あえて言いたい。

「無視しよう」と。

他人の目を気にしすぎてしまうと、自分にとって大切な仕事に集中できなくなるからだ。

自分が能動的に取得した情報を信じる一方で、

「何の責任もなく一言物申してくる奴は全員無視する」

と決めておいた方が結果的に得るものは大きい。

赤の他人に馬鹿にされないために、重要でない勉強に時間を使うわけにはいかない。

時には「自分の専門外の分野は知らない」と開き直る勇気も必要だ。

目的と手段を間違えてしまっていた

プログラミングの勉強をしているうちに、

「プログラミング技術に精通すること」

が目的になってしまっていた。

自分でアプリケーションを作るために勉強していたはずなのに?

これもインターネットで色々な人の意見を目にしてしまった影響だが、著名プログラマーに憧れると初心者は詰む。

「すごいプログラマーになりたい!」と夢を持ってしまった瞬間に、あれもこれも勉強しなくてはいけなくなってしまう。

職業プログラマーであれば、すごいプログラマーを目指すといい。

でも「アプリケーションを作りたい」とか、「スマホアプリをリリースしたい」という目標があるならば、プログラミングはあくまで手段であるべきだ。

プログラミングの実力で成り上がるのが目的ではなく、プログラミングを利用して何かを作ることが目的だったはずだ。

手段と目的の境目がだんだんと曖昧になってきたら要注意だ。

自分は何のために時間を費やしているのか、常に自問するべきだった。

学んだ内容を発信すればよかった

勉強した内容は発信したほうが頭に残りやすい。

わかりやすく誰かに伝えることで、世の中の誰かのために役に立つこともできるだろう。

WordPressで自分のブログを作ってもいいし、QiitaやMedium、はてなブログで情報発信するのもいい。

情報を発信することで知識の整理になるし、技術ブログは自分の名刺にもなる。

オープンソースの開発経験は「世の中の役に立つ」という崇高な目的だけでなく、「就職に有利になる」とか「業界でのプレゼンスが上がる」みたいな、副次的な効果もあるという。

学んだ内容は自分の中に閉じ込めておかずに発信するべきだった。


英語で検索すればよかった

発信と同じくらい検索も重要だ。

検索せずにプログラミングする人はほとんどいないと思う。

これまで色々と検索してきた経験から、プログラミングの情報は日本語より英語の方が充実していると断言できる。


日本語でヒットする記事は無駄に長かったり、調べたい内容に直結していないものが多い。

最初から英語で検索すればよかった。

言語を英語に設定したGoogle検索をブラウザにブックマークしておき、プログラミング関連のキーワードを検索するときは、英語で検索するといい。

英語の方が流し読みになりがちな分、大事な内容に集中できて無駄な時間が省ける気もする。


英語で検索する時のURL:https://www.google.com/webhp?gl=us&hl=en&gws_rd=cr&pws=0


もっと「なぜ」を深堀りするべきだった

プログラミングを勉強していると、

「どうやってその処理を実装するか(how)」

「何をすればその処理が実装できるか(what)」

の情報はよく見つかるが、

「なぜそのように実装するのか(why)」

「そう書けば、どうしてそのように動くのか(why)」

についてはあまり深堀りしてこなかった。

「なぜそうなるのか」を腹落ちさせないと、いざ自分で何かを作る際に知識を応用できない。

「なぜ」を調べるのは時間がかかるが、もっと丁寧に「なぜ」をもっと追いかけるべきだった。

ウェブで勉強してもよかった

「勉強するなら書籍がいい!」と思い込んでいた。

公式ドキュメントが充実しているのに、「とにかく本だ!本で勉強するんだ!」と意固地になって、大量の本を買って失敗してきた。

まずは公式のドキュメントやチュートリアルを読み込むべきだった。

教科書を無視して勉強するよりも、まずは教科書から読み込んだ方が効率がいい。
プログラミングも、まずは公式ドキュメントを読み、開発者の想いを汲み取るべきだった。


ウェブにも良い情報は転がっている。

Qiitaのトレンドを眺めていれば、今の流行がなんとなく見えてくる。

TechCrunchを眺めていれば、スタートアップの動向もなんとなく見える。

これらはプライベートの勉強時間に見てしまうと大きな時間を喰ってしまうが、退屈な会議中に読むにはものすごく有用だ。

オンラインのプログラミング学習

raywenderlich.comがすごくよかった。

基本的には文字での勉強する方が好きなのだが、動画も悪くないと思えた。

おっさんが程良いテンションでiOSアプリ開発の解説をしてくれる。

f:id:hideyoshi1537:20200117220632p:plain
raywenderlich.comのおっさん

英語のスクリプトも表示されるため困ることなく学習し、英語の勉強にもなる。
そして太っ腹なことに無料だった。

raywenderlich、恐るべし。


AtCoderの「C++入門 AtCoder Programming Guide for beginners (APG4b)」も面白かった。

ブラウザ上で実行できて、C++の基礎の勉強ができる。

僕の本来の目的である「ウェブアプリを作りたい」からは外れてしまってはいたが、本を読んで写経するよりもAtCoderで問題を解きながら勉強した方がずっと楽しかった。


社会人の勉強は楽しくないと続かない。


paizaラーニングでもブラウザ上で実行しながら勉強できる。


f:id:hideyoshi1537:20200116181923p:plain
paizaラーニングのスクリーンショット

ドットインストールやProgateも流行っているようだ。

動画で学ぶことに抵抗がない人はこれらの動画学習教材を活用するのもいいかもしれない。