コーディングを学ぶ目的とは?
「かっこよさ」や「報酬」は忘れて、初心に戻ってみよう
Le WagonのCEOであるBoris Papillardが彼の大学生時代の話を交えて、私たちに語ってくれました。
昔は自分でコーディングを独学しようと試みた。当時はエンジニアの学校を卒業したばかりで、数学も苦手だった訳じゃなかったので、コーディングも自分で学ぼうと思っていた。学校で学んでいた量子物理学のように、あまり目的もなかったけど。
私は何から始めればいいのかよく分からなかった。最終的にはHTMLとCSS、Michael Hartl氏の本を読みながらRailsをちょっと触って、Courseraで機械学習をして、少しだけSQLも学んだ。友達から勧められた方法で全て「ちょっとだけ」学んだのだ。言うまでもなく、学校で学んでいた時と同じように私は間違ったアプローチをしていたのだ。
・まず、トピックを選ぶ(例えば量子物理学、機械工学など)
・本やインターネットを使って、コアなコンセプトが理解できるまで勉強する。結果的に、練習問題やテストである程度の点数は取れるようになる。
・そして先生から良い成績🥇をもらい、オンラインコースの練習問題で満点 ✅をもらい、まるで犬がおやつを貰えるように嬉しくなるのだ
この学者向けのアプローチは、プログラミングや実践を兼ねた学習の際にはとんでもなく、苛だたしい。具体的にはこう言う流れに陥ってしまう:
・Pythonのオンラインコースを修了し、Ruby on Railsの本を読み終える
・基本的な概要、考え方は理解できるようになる
・参考書に載ってる練習問題を解き、オンラインコースでもある程度良い点数が出る✅
・そのあとは?
・学校のように実力を試されるテストを受ける必要もないので、それ以上勉強を続けることに関心がなくなる😅
・その後、学んだことが活かされている実感がないので、どこかのタイミングで勉強を諦めてしまう
7年後、私はLe Wagonを運営している。27都市で展開され、2000人以上の卒業生を迎え、世界で一番知られているコーディング・ブートキャンプだ。最終的に落ち着く論点はここにあるだろう。
コーディングを学ぶにあたって、真の目的とは何だろう?
コーディングはプロダクトを作り、問題解決をするためにある
Le Wagonの共同創設者の一人である、私の友人のMathieuが彼のサイドプロジェクトに協力してほしいと声をかけてきた。彼は常に明確な目的を持ちながら、学習に励んでいた。当時のMathieuはモバイルのテキストメッセージからデータを収集し、それを可視化させるプロトタイプに取り組んでいた(TxTo)。
なので、自分の有る限りのプログラミングの知識をかき集め、Mathieuと共にサイドプロジェクトに取り掛かることにした。そこから私は新しい知識を吸収し、素早く学ぶことができた。最も大事なのは、自分の目的が明確になったことだ。そして私は気づいた。コーディングを学ぶ目的は、決して最新のテクノロジーと遊ぶことではない。そして自分のエゴのために難しいコンセプトを理解し自己満足で終わることでもなく、変なシンタックスを学んで人に見せびらかすことでもないと。
コーディングを学ぶことは、自分の中で完結することではなく、何かを作り上げて問題解決をする手段である。
Le WagonのCTOのSebastianの様なデベロッパーは幼少期から、真の目的を知っていた。しかし私みたいな目的や情熱がないコーディング初心者にとっては、驚くべき発見だった。この日以来、私はプログラミングを教えることを通して、実用的なプロダクトを作る人や問題解決に手がける人の手助けをしたいと思った。これがLe Wagon創設のきっかけである。
「どのプログラミング言語が一番良いのか?」、「どのテクノロジーを学べばいいのか?」、「どのプログラムを受講すれば高収入に繋がるのか?」等の最近よく目にする投稿はコーディングを学ぼうとしている人々に間違った動機や見返りを広めてしまっていると思う。
ここからは私がコーディングを学び始めてから、知っておいた方がよかったと思う気付きを書いていこうと思う。これさえ知っていたら、もっと早くコーディングを学ぶ目的を明確に出来たかもしれない。
具体的な目標がなければ、迷子になる
プログラミング、データ・サイエンス、ウェブデベロップメント、UXデザイン、プロダクトマネジメント、グロスマーケティング、AI、機械学習……
あなたが将来的に学べる”テクノロジー”は数えきれないほどある。
Python、ruby、PHP、JavaScript、C++、Rails、node.js、HTML、CSS、React.js、 d3.js…
あなたが遊べるテクノロジーやプログラミング言語も数えきれないほどある。
edX、Coursera、Freecodecamp、Codecademy、Treehouse、Udemy、Lynda、Udacity…
世界中にあるコーディングブートキャンプも数えきれないほどある。
しかしこれを全部学ぶには人生は短すぎる。だからやる気が無くなったり、気掛かり😱😱😱になったりもする。そして自分に問いかけ始める。
・どのテクノロジーと技術を学べばいいのだろう?
・一番正しい学習方法は?何から始めればいい?
・何が一番適切な選択なのか?(オンラインコースなのか、短期集中型のプログラムの受講なのか、など)
・このプログラムを受講したところで仕事に繋がるのだろうか?
まあ、私もあなたも似た者同士。自分の中で明確な目標をたてられていない。変な期待、報酬、そして、時代に取り残される不安などに邪魔をされているのだ。だから一度、初心に戻ってみよう。「何が一番いいのか」「かっこよさ」は全て忘れよう。
自分の心の「ワクワク」に耳を向けよう。
・データを用いて、政治的なツイートからトレンドを予測したり、空港のフライトのスケジュールのパターンを見つけたり、絵から形を導き出したり、メールから感情を抽出したりしたいですか?
・新しいソーシャルプラットフォームや金融業界に新しい風を吹き込む様な新しいツールなどの、人々の問題解決に役立つプロダクトを作りたいですか?
・SQLを用いたり、拡張性のあるアプリケーションに進化した基盤を作り、最終的にGoogleにソフトウェアエンジニアとして入社したいですか?
とにかく、真剣に学ぼう。近道はない。
データの分野で活躍するにしても、プロダクトを作るにしても、エンジニアになるにしても、楽な道はないのだ。
基本を学べ。漏れなく学べ。
例えばウェブデベロップメントに興味があれば、どの言語を使うにしても、良いパフォーマンスを発揮するコーディングを適用し、頑丈なウェブアプリケーションを作れるように学ぶ。1000万人のユーザーが利用するモバイルゲームアプリを作ったり、友達にかっこいいから😎と言って勧められたReact.jsのベテランになるのではなく、まずは基本を熱心に学んだ方がいい。
Le Wagonのコーディングブートキャンプの最初の一週間目の流れを説明したい。
・まずは生徒たちにデータを操作しながら、スクリプトを書く方法を教える。そうすると、プログラミングの軸となる変数、ループ、方法、アサインメント、ファイルの解析の仕組みが理解できるようになる。
・そしてコードを異なるファイルに置き換えて、ソフトウェアの作り方を教える。
・その後、実際のデータベースを用いて、検索要求の示し方をクエリを書きながら学ぶ。
・ここで初めて「ウェブアプリ」に取り掛かる。**というのは、HTTPなどの特定の要求に反応し、データを特定のインターフェース(HTLMとCSSでコーディングされたウェブインターフェース)に差し込むソフトウェアのこと。**
最初に生徒たちに小さいHTMLやCSSウェブサイトのコードを書かせて、自分の成果がすぐに可視化できる方法で学ぶことで短期的に見返りが感じられる方法の方が好まれるかもしれない。しかし、私たちにとってはこれが唯一のプログラミングとウェブデベロップメントを教える適切なアプローチであると考える。
私たちはもう学校に通っている生徒ではない。生徒たちは短期的な見返りを求めてプロダクトの作り方を学びに来ている訳ではない。私たちが提供する学習方法が難しかったり、イライラすることがあっても、生徒たちは徐々にやり甲斐を感じ、ブートキャンプが終わる頃には建設的な方法でコアなコンセプトを教えてくれた事に感謝するだろう。
ブートキャンプの最後になると、最終プロジェクトを完成してから、生徒たちは丈夫な土台を元に自分でプロダクトを作れることが分かり、今後の学習にも繋がるだろう。
それこそが、コーディングを学ぶ事にあたっての「報酬」なのだ。