「プログラミングを初めてみたものの、しばらくしたら分からなくなって挫折した。」
こういう経験を持っている方は結構多いんじゃないかと思います。
今では、日本ならドットインストールやProgate、海外ならCodecademyやCode Schoolなどプログラミンをインタラクティブに学べるサービスは多くありますが、こうしたサイトを利用しても個人的にはほとんど問題は解決してないなという風に感じています。
個人的な挫折経験
僕も実際のところ何度もプログラミングに挫折しています。
僕の場合は高校を卒業して、これからはコンピュータの時代だと思い早稲田大学のCS学科に入りました。(確か第二期生)
しかし、1年で転部して文学部に入り直しました。
転部した理由の一つは、理系の頭でビジネスが分かる人になれば最強だというようなことを考えたからですがもう一つ大きな理由は、
Javaプログラミングでいきなり挫折してプログラミングはあまり向いてないな、と考えたためです。
その後、大学3年時に再度やはりプログラミングは重要だと再認識してRubyやJavaを再度学んでRuby Quizを解いてみたりしていたものの就活時にまた挫折することになります。
今は上場してアプリ開発をしていて、当時から現在まで就活生からの人気も高いあるベンチャー企業(当時はスタートアップという呼び方はしなかった)での最終面接で、当時書いていたプログラミング関係のブログを見たCTOから「これでは使い物にならないね」と言われあっけなく落とされたのです。
また他のベンチャー企業でプログラマとして採用されたのですが、その企業でのインターン中に「あまりプログラムに夢中って感じじゃないし、まだスキルが足りないね」ということで有給インターンから無給インターンとして経験を積むことを指示されたりもしました。
その会社での最終的な職種選択時にプログラマと営業を選べたのですが、結局営業を選びプログラミングをしない期間が数年また積もることになります。この営業を選んだのも自分の頭では「営業は会社の中でしか経験出来ないけど、プログラミングは自分だけでも勉強できるから営業をまずは身につけよう」ということを思っていたのですが、今思うと何度も挫折したためにプログラミングから逃げた部分もあったのかなと思います。
そんなこんなで25歳まではプログラミングを何度も学んでみては途中で挫折するということを繰り返したわけです。
プログラミングが身に付いたのは作りたいサービスがあったから
ですが、現在ではReact.jsとFluxを利用してフロントエンドを開発し、サーバーサイドはRuby on RailsでAPIを開発、サーバー構築も全て自分で行う。という風にそれなりに開発出来るといえるぐらいにはなっています。
で、なぜそういう状態に持ってこれたかというと自社サービスである「リンガルボックス」を開発したからという一点に尽きます。
リンガルボックスは2012年2月頃からRubyを再度勉強し始めて、8月に公開しました。Rubyは就活の時以降触ってないのでほとんど一から学んだ形ですね。
この時ももちろん途中で挫折しそうになったりはしました。独学だったのでRuby on Railsの構造やMVCの概念を理解するのにかなり時間がかかったし、当時のPayPalのサンドボックス(開発者向け環境)は酷い出来で決済を導入するのにも大分時間がかかりました。
それでもどうにかこうにかリリースまで挫折せずにもっていけたのは上記の繰り返しですが作りたいサービスがあったからです。
余談ですが初期のリンガルボックスを開発する上ではRailsCastsがかなり役に立ちました。いまだとGoRailsというサービスがいいかと思いますのでこれからサービスを作るという方は是非使ってみてください。
こうした経験から、これからプログラミングを始めようという方にはプログラミング学習サイトを使ってみるよりもまずは自分が何を作りたいのかということを明確にするのがいいのかなと思います。
作りたいサービスがあることのもう一つのメリット
作りたいサービスがあるということのメリットは挫折するのを防ぐという以外にも大きなメリットがあります。自分に何が必要かが明確になるということです。
例えばリンガルボックスでは現在チャット機能を開発しています。チャット機能を作成する上で僕は現在BEMというCSSの命名パターンを学んでいます。またレイアウトは新たに学んだFlexboxを駆使して作っています。
なぜBEMを勉強したのかというと、今後サービスの規模が大きくなるにつれてCSSがより整理されていることが重要になると考えたためです。以前にもBEMの概念は知っていたし少し学びましたが今回必要に駆られたことで初めてちゃんと身に付いてきていると感じます。
Flexboxについても同様です。Flexboxについては以前Treehouseというプログラミング学習サイトの動画や課題は全てこなしたのですが恥ずかしながら全く身につきませんでした。ただ今回チャットのレイアウトをデザインするにあたってFlexboxが便利そうだと判断したから再度学び今度は身に付いてきています。
簡単にいうと、挫折するような学習の流れでは、
1. 学習サイトや本を上から順番に読む →
2. 覚えることが多すぎて途中で分からなくなる。 →
3. 挫折したと感じて放棄してしまう。
ということが起こるのに対して、作りたいもの起点なら
1. 作りたいものがある。→
2. その作りたいものを実現するために必要なことだけ学ぶ。→
3. 学ぶ分量が少ないのでちゃんと理解出来る。
という風な流れが出来るのです。
また学習サイトなんかだと、学習した割合がパーセンテージ表示されていてちゃんと理解してなくても次から次へと進みたくなってしまったりすることも途中で分からなくなって挫折する一因かと思います。
まとめ
結論を言うと、プログラミングをこれから始めるあるいは前に挫折したけどまたやろうかなという方はまず作りたいサービスを考えるということから始めましょう。また作るサービスを考えたら学習サイトや参考書を一から全部やろうとしたりせずに、実現したいことは何かそれをするには何を学べばいいのかを意識して、そこだけを学習サービスや参考書で学んでいくことが重要です。
参考にしていただけると嬉しいです。
オンライン英会話の「リンガルボックス」は現在も絶賛運営中なので是非こちらもご覧になって下さい。