世界的サービスの元エンジニアが明かすプログラミング学習のコツ
昨今のエンジニア不足に加え、最近のリモートワークやテレワークの普及でプログラミングを学習する人・興味を持つ人が増えてきています。
プログラミングを学べるサービスやサイト自体は飽和するくらい沢山ありますが、手段が揃っていても習得に激しい差が出てしまうのがこの世界。習得できたとして、実務で中々思うように開発できず苦い思いをした人も多いんじゃないでしょうか。
英語の情報を覗くと、世界的なサービスを開発しているエンジニアは意外なほど情報発信をしてくれています。スキルは勿論ですが新しい言語を学ぶ上でのコツなんかも、リアルな体験を基に教えてくれたりするのです。
という訳で今回は、FacebookやBooking.comなどのプラットフォームで活躍する現役エンジニアのブログから、プログラミングを学ぶ上で重要なこと・オススメの方法やそれぞれのメリットを紹介したいと思います!
プログラミングの勉強を始めたばかりの方や、新しい言語の学習のコツを知りたい方というは是非是非ご覧ください(=゚ω゚)ノ
(元)Facebookのエンジニアの場合
現在は「Airtable」というクラウドデータベースの開発に携わり、かつてFacebookに所属していたCaleb Meredith氏は、学習者に対して実にシンプルなメッセージを投げています。
とにかく何か作れ
氏曰く『世界中のどんなセオリーも、実践より能力を高めることはない』。時間を掛ければかけるほどスキルは上がるからとにかく作れ、作れ、作れと繰り返しています。
もちろん闇雲に取り組めばいい訳ではなく、『使ったことの無い言語、ツール、プラットフォームに挑戦しながら』『見知った言語に逃げず、ミスは当たり前だと知った上で』やれという話です。
でもそんなの誰だって分かってますよね?Meredith氏は『とにかく作る』ことのメリットを、実に最前線でプロダクトを作るエンジニアらしく挙げてくれてます。
メリット①:スキルが高まる
具体的には次のスキルを挙げています。
・抽象化(効率的な実装)
・複雑なバグが起きた時の対処
・iOS、SQLなどプラットフォームや言語ごとの“癖”の理解
・各ツールのエコシステム
見て分かる通りスクールやオンライン講座で身に着けるのが難しい実践的なものばかりです。特に最初の2つは個人差が出やすいのでそれこそプロダクトを作る紆余曲折の中で身に着ける(知る)のが早い、というかそれしか無いかも。
メリット②:集中出来る状態が見つかる
『自分の知る最高のプログラマーは一日3時間しかコーディングしない』そうで、その3時間の集中力を高めるための“最適な状態”があるのだと話します。要するに作業場とか音楽とかツールとかの作業環境のことですね。
Meredith氏は家で音楽聴きながらやってみ!と言ってますがこれは人に寄り切りかと(;´・ω・)
ただ色んな所でコーディングしてると何が気持ちいい状態か分かるようになる、これは本当だと思います。
メリット③:使えるツールが広がる
ライブラリ、フレームワーク、データベース、コードエディターとプログラミングを進める上で使えるツールは今や無数にあります。それらを使いこなせるという話なのですが、重要なのは沢山のツールを一通り使うことではなく『少ないツールを沢山使い倒す』ことだと話します。
これは教科書にも言えると思うんですが、有象無象のプログラミング教科書を何十冊も読み流すより、数冊を自己流で何十回も使い倒す方が遥かに効果的な気がします(*'ω'*)。結局『実践より能力を高めることはない』のですから。
Booking.comのエンジニアの場合
一方でそうした個人プロジェクトの重要性を認めつつも、『オープンソースプロジェクトに参加すればいい』と話すのがオンライン予約サービス「Booking.com」のエンジニア、Sahil Dua氏。自身DuckDuckGoやGoogle Developers等のコントリビューターです。
ビギナー向けのバグに取り組め
Dua氏は業務でPerlを使っているそうですが、実はこの言語の勉強を始めたのは入社のわずか1カ月前(プログラミングの初心者ではなかった模様)。限られた時間で学習方法として彼が選んだのは、検索エンジンDuckDuckGoのオープンソースプロジェクトでした。
オープンソース、と聞くと一定のスキルや経験が無いと無理なんじゃないかと思われるかもですが、意外と初歩的なバグのフィックスも多く、Dua氏はここで何十ものプルリクエストを提出、何とPerl初心者ながらプロジェクトのメインコンピューターの一人にまでなってしまいます。こうして「Booking.com」で通用するスキルを磨いていった同氏は、入社後も異なる(未経験の)言語についてやはりオープンソースプロジェクトに参画することでスキルを高めていきます。
多くのオープンソースプロジェクトは英語なので(特にプログラミング初心者の)日本人にとってはそこがハードルではありますが、オープンソースプロジェクトに参加するとどんなメリットがあるのでしょうか?
メリット①:質の高いコードに触れられる
オープンソースプロジェクトにはそれぞれガイドラインが存在します。このガイドラインに沿ってコーディングすることで、いわゆるクオリティの高いコードを構築することが出来る、その方法を学べるというメリットがあります。
メリット②:レビューを得られる
プルリクエストをすると各言語のエキスパートからあれこれ評価してもらえます。その内容から言語への理解が進むのも大きな恩恵です。
メリット③:感謝してもらえる
プロジェクトに参画している間、一切の侮辱やネガティブなコメントを受けなかったそう。みんなが感謝し、励まし、助けてくれるのは『開発者として本当に必要なこと』と話す同氏。裏を返せば、プログラミングの学習で重要なのは周りの理解や協力と言えるかも知れません。
Twitterのエンジニアの場合
最後に、学習者向けではないんですがコーディングする上で基本的かつ重要なことを元Amazon.com、現Twitterでエンジニアとして働くYen Huang氏が書いていたので、非常に短いんですが紹介します。
重要なのは“コードのサステナビリティ”
Huang氏はサステナビリティ、つまりコードを様々な変更に耐え持続させる為に必要なことが3つある、としています。そのまま言語の学習やプロダクトを作る際にも当てはまるので、基本的なことですが載せたいと思います。
①コードを繰り返さない
色々なファイル・ソースで同じコードを繰り返さず抽象化すること。これは元Facebookの方が言ってたことと同じですね。
②アーキテクチャ・ファースト
プラットフォームとの連携からテストする時のことまで考え、それらが楽に出来るようコーディングすること。その場しのぎでいい加減にコーディングすれば雪だるま式にバグやトラブルが増えていきます。
③常にテストし、使い続けよ
新しくプログラミングを組んだら、どんなに面倒くさくてもテスト。そして極端なことはしなくていいから、絶えず使い続けること。将来的に内容のアップデートがぐっと楽になります。
一流も初心者も学習環境は同じ
具体的な手段や考え方も紹介したものの、結局世界的なプラットフォームのエンジニアでも言いたいことは『とりあえず手を動かせ』という非常にシンプルなメッセージだったことが分かると思います。もちろんレベルは初心者とは比較になりませんが、彼らがオススメしている学習方法やコツは私たちの環境でも十分実践できます(言葉の壁くらい?)。
いや、手動かせと言われても何を作りたいのすら分からない…という方は、私のNOTEで基本的なプロダクトの記事を公開しているので何かのヒントにしてみてくださいね。そしてちょっとでも慣れてきたら今回エンジニア達がオススメしてきたことに挑戦してみましょう!苦しかったプログラミングが一気に楽しくなるかもしれませんよ。
参照サイト
https://medium.com/@calebmer/tips-for-learning-programming-during-virus-season-f7ece8fa7b28
https://medium.com/@hellomeets/unconventional-way-of-learning-a-new-programming-language-d2bee1fa378a
https://towardsdatascience.com/3-things-i-learned-as-an-engineer-at-twitter-fe9ac352f2eb