【海外のエンジニアが語る!】未経験からプログラマーになるための完全ガイド
未経験でもこれからプログラマーを目指そうとしている人に非常に役立つ完全ガイドを翻訳しています。どういう道筋でプログラマーというキャリアに至るのか全て網羅されています。プログラミング学習をこれから始めるという人はぜひ参考にしてみてください。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
本稿は、Codementorのブログ記事を、Codementorより了解を得て日本語翻訳し掲載した記事になります。
本記事は、ThoughtWorksに勤務するソフトウェア・デベロッパーの、ナターシャ・ポストロヴスキによって寄贈されました。
また、オンラインのプログラミングスクールTechAcademyでは、未経験でもプログラミングを習得することが出来ます。
今まで以上に多くの人々が、これまでの伝統とは異なるバックグラウンドから、ソフトウェア開発の世界に参入しています。その背景には、コーディングブートキャンプの開催数が増え続けているのです。業界からは、より多様なタイプのデベロッパーを惹きつけるために、大きな後押しもあります。
また多くの会社は、次の世代のシニアデベロッパーを研修して育てる方が賢い方法だと気づき、もはやシニアデベロッパーに集中した採用は行っていません。
ソフトウェア開発は高報酬な仕事であり、業界全体も好景気です。また、ソフトウェアデベロッパーは、他の多くの職種と比べて、かなりの優待遇を受けられます。
しかし、ソフトウェア開発のキャリアに挑戦しようとする多くの人々を惹きつけているのは、よりやりがいのある仕事への探求心ではないかと、私は思います。
もしあなたがこの記事を読んでいるとしたら、キャリアチェンジを考えているかもしれません。
私自身、あなたと同じような状況にあった時から、まだ1年も経っていません。キャリアチェンジは怖くて、しかし良い刺激にも満ちていると思えることも、よくわかります。あなたが何よりも優先して自分自身に問いかけけるべき質問が1つあります。
Q. ソフトウェア開発職に転職したとして、仕事を好きになれるかどうか?
というのも、雇用されることが可能なスキルレベルに到達するまでには、数多くの事をこなさなければならないため、将来性のある現在のキャリアを犠牲にする可能性もあるからです。
ソフトウェア開発の仕事を好きになれるかについて答えが出なければ、コードでモノ作りをしましょう。
- 三目並べのゲームを作成しましょう。
- その他のゲームを作成しましょう。
- 小さなオンラインビジネスを始めて開発を自分でしてみましょう。
- 個人のサイトの構築やデザインをすべて自分でしてみるのもいいでしょう。
- プログラミングの課題を解きましょう。
- オープンソースにも貢献しましょう。
そして、もしあなたがこれらの事を楽しめるとしたら、ソフトウェアデベロッパーの仕事も好きになれる可能性は高いです。
プログラミングを学ぶには何千通りもの方法がありますが、そのルート設計は、あなた自身に最も合う学習法はどれかという視点から考えるのがいいでしょう。
例えば、オンライン講座を受講したり、講師やメンターを見つけたり、YouTubeのビデオ動画を観たり、書籍を読んだり、コンピュータ・サイエンスの学位を取得したりなど様々な方法があります。
私自身は、上記の方法をすべて組み合わせたコード学習を実践しました。しかし、どんな事よりも私を支えてくれた事があります。
目次
- 作りたいと情熱的に思えるものを持っている
- コーディングブートキャンプに参加する
- プログラミング学習者と繋がる
- メンターを見つける
- 集中して学習する
- キャリアチェンジのために投資をする
- Githubに公開する
- ペアプログラミングを経験する
- 模擬面接を行う
- エラー駆動開発を行う
作りたいと情熱的に思えるものを持っていること
ブログでも、ゲームでも、Webサイトでも、SaaSのスタートアップでも、オンラインデーティングサイトでも、家族の家計管理のためのアプリケーションでも、あなたが目的意識をもって立ち上げたいと思えるプロジェクトを持っていることは、プログラミングの勉強が辛くて困難な時にも、あなたを導いてくれる力となるでしょう。
私はコーディングブートキャンプのメンターとして数ヶ月働いたことがありますが、その時に最も学習速度が速かった生徒は、作りたいと強く思えるものを持っている人達でした。その理由は、彼らは学んだことを、彼ら自身のプロジェクトに応用することができたからです。
もし可能なら、もし自分のためになりそうだと思うなら、あなたもコーディングブートキャンプに参加しましょう
私が初めてコードを学び始めた頃、当時住んでいたオーストラリアのメルボルンには、コーディングブートキャンプがありませんでした。
そのためThe Starter Leagueというアカデミーで学ぶために、3ヶ月間アメリカのシカゴに移住するという抜本的な方法を取りました。今思うとこの決断は、私がソフトウェアデベロッパーになるまでの道のりの中での決定打だったと思います。
良いコーディングブートキャンプの特徴としては、集中できる環境と、困った時にサポートも提供してくれるでしょう。初めてコードを勉強する時には、何に集中して学習すればいいのか、範囲を絞るのも難しく思えるかもしれません。一方、コーディングブートキャンプでは、Webアプリケーションを作るために最低限必要な学習範囲に的を絞って、実体験を通しながら学ぶことができます。
また、コーディングブートキャンプは、プログラミングについての事前知識がないことを前提として、あなたが初歩レベルの段階から最終目標まで到達するためのスキルを教えてくれます。この点は、数多くのプログラミングの記事や動画ビデオとは異なります。
コーディングブートキャンプは、費用が高いので万人向きとは言えませんが、もしあなたが投資価値がありそうだと思うなら、私は強くお薦めします。
プログラミング学習を通して他の人とつながりましょう
コードを学習していると時々困難に直面することがあるでしょう。同じ課題を通して、他の人たちとのネットワークを持っておくことは、とても重要です。もし誰も知っている人がいなければ、地域のイベントに参加して人々に話しかけてみましょう。特に、あなたがジュニアデベロッパーに人気のある言語( 特にRubyとJavaScript)を、集中して学習したい場合にはお薦めします。
もしあなたの地域のプログラミングイベントが、初学者のための夜会を時々開催していれば、幸運です。必ず参加してみてください!
業界で働いているメンターを見つけましょう
現役のソフトウェアデベロッパーと交友関係やメンターシップを築くことは、あなたがソフトウェアデベロッパーとなるまでのキャリアチェンジの旅においても、大きな手助けとなるでしょう。彼らは、あなたの地域の業界における面接の文化もよく知っていますし、あなたが行き詰った時にはアドバイスをくれるでしょう。重要なスキルに集中して学ぶことも助けてくれますし、あなたの書いたコードにもフィードバックをくれるでしょう。
あなたが幸運にも、時間を惜しまずに助けてくれるこのようなソフトウェアデベロッパーと出会えたら、何かお礼のお返しもしておきましょう。会った時にランチをごちそうしたりといった、小さな事でもいいでしょう。繰り返しになりますが、イベントはメンターと出会うには素晴らしい方法です。
集中して学習しましょう
もしあなたが、主にバックエンドのプログラミングを行うことを望んでいるとしたら、1つの言語とそれからもし可能であれば、1つのWebフレームワークの学習に集中しましょう。
また、JavaScript、HTML、CSSにも多少慣れ親しんでおくことを目指しましょう。ReactやAngularJSのような、人気の高いJavaScriptのMVCフレームワークを集中的に学習するのもいいでしょう。
キャリアチェンジのための投資に備えましょう
キャリアチェンジのための書籍、受講コースやクラス、スクリーンキャストの購読などにかかる費用を合わせると、月々何百ドルもの総出費が必要となり、多くのブートキャンプには1万ドルを超える費用もかかるでしょう。
プログラマの給料は過大だと言われているかもしれませんが、あなたがジュニアデベロッパーになった際に受け取る初任給は、実際に4~6万ドルにも登るでしょう。サンフランシスコやニューヨークのようなスタートアップの中心地であれば、それ以上の報酬も望めます。
最初は、このキャリアチェンジに見返りのない投資をしているように思えるかもしれません。しかし長期的に見れば、この投資はリターンの望めるものであり、経験を積むに従ってデベロッパーの報酬は、安定して6桁(10万ドル以上)の領域まで上昇します。
あなたのキャリアチェンジの旅が直線コースでなくても、心配することはありません
プログラミングの学習は困難で、時間もかかります。あなたが現在のキャリアや他の約束事と同時並行して行っているとしたら、1週間に数時間でさえ、プログラミングに集中することは難しいかもしれません。
疑念を持ったり、集中力が分散すると、プログラミングの学習を数日、数週間、さらには数ヶ月、停止してしまうこともあるかもしれません。私のケースでは、コーディングブートキャンプに参加してからソフトウェア開発の仕事を得るまでに、約2年間のギャップがありました。本当はもっと早く実現できたのかもしれませんが、日々の生活や疑念が障害となっていたのです。
しかし、ソフトウェア開発があなたの本当にしたい事だとしたら、たとえ途中で道を間違えたり迂回するとしても、最終的には目的地に到着することができるでしょう。
GitHubのプロフィールに表示する情報は選択しましょう
GitHubは、Gitリポジトリのオンラインホスティングサービスのことで、バージョン管理のためのプログラミングプロジェクトというのが最も良い表現でしょう。リポジトリがGitHubで公開されると、あなたのコードは誰でも読むことができます。
採用担当のマネジャーは、応募者がどのようなコードを書くのかを知るために、たとえ誰も見ていないような時でさえ、応募者のGitHubのプロフィールをチェックしています。
また採用担当のマネジャーは、ジュニアデベロッパーの応募者を評価する時に、素晴らしいコードを書けることは重視しない代わりに、熱心さ、物事の処理能力、新しい物事への探求心、遊び心などを求めているかもしれません。GitHubのプロフィールからはこうした要素もアピールすることができますが、採用担当のマネジャーは、ほんの数分間くらいしか、あなたのプロフィールを見る時間を割くことができないということは念頭に入れておくべきでしょう。
こうした理由から、素晴らしいまたは興味深いプロジェクトだけを選択して、公開することがいいアイデアだと言えます。あなたの最高のアピール部分にスポットライトを当てるためには、乱雑に散らかったままのプロジェクトや、講座で触れただけのプロジェクトは、有料でも非公開にしておく方がいいでしょう。
困難に直面した時
ジュニアデベロッパーで、特にソフトウェア業界で過小評価されて目立たないグループ出身の人にとっては、自己への疑念は、よく障害となることもあります。しかし、困難に直面したとしても、それはあなたが不向きだからではありません。:単に学ぶべき事が沢山あったり、取り組んでいること自体が難しいというのが、その理由でしょう。
また、あなたにとって難しい事を他の人が簡単にこなしていると、不安になるかもしれません。その人が、あなたと同じくらいの経験値である場合には、特にそうかもしれません。しかし、彼らを長く観察してみると、おそらく、彼らが苦戦していても、あなたにはいとも簡単にこなせる事もあることに気づくことでしょう。
私たちは皆異なっていて、各自がすでに持っている異なるスキルを提供することになりますし、実践方法も皆異なるのです。プログラミングは他のスキルと似ています。:十分に長い期間継続して、上達することを意識すれば、上手くなるでしょう。 Flatiron Schoolの共同設立者であるAvi Flombaum氏は、”誰もが読み書きできるのと同じように、誰もがプログラミングの方法を学ぶことができると、私は強く信じています。”と述べています。
盲点に注意しましょう
コンピュータやインターネットの外からは見えない仕組みは、特にテクノロジー分野のバックグラウンドを持たない人にとっては、悩みの種となるほどに複雑です。
1つのプログラミング言語と、1つのWebフレームワークと、JavaScript、HTML、CSSを学習するには、あなたの使える全部の時間を要するかもしれません。
しかし、あなたがジュニアデベロッパーとしてスタートした時は、これらはまだ日々の仕事で関わるテクノロジーのほんの小さな部分でしかないことは実感できないでしょう。次の問いへの答えを考えてみてください。
- あなたの書いたコードはどのように実行されるのでしょうか?
- あなたの使用している言語のインタプリタやコンパイラは、構文エラーをどうやって見つけるのでしょうか?
- ブラウザのツールバーにURLを入力したとき、あなたのコンピュータのスクリーンのWebページ上に、どのように反映されるのでしょうか?
- Webサーバーはどのように動いているのでしょうか?
- Webサイトを離れてブラウザを再起動した後でも、ログイン状態が保存されているのはなぜでしょう?
- あなたの作ったアプリケーションはWebサーバー上でどのように動いているのでしょうか?
- あなたのプロジェクトをHerokuやAWS(アマゾンウェブサービス)などでホストするときに、ホスティングサービスの見えない内部では、彼らは何をしているのでしょうか?
- 人々が、あるオブジェクトが”メモリの中”にあると表現するとき、何を意味するのでしょうか?
- SSHのプロトコルでサーバーに接続するには、どうしたらいいでしょうか?
- ビルド・パイプラインを作って利用するにはどうしたらいいでしょうか?
- OSはあなたのコンピュータ上でどのように実行されるのでしょうか?
もちろんこの質問リストは、もっと長くなる可能性もあります。学ぶべき事が、圧倒されてしまうほど沢山あります。良い知らせは、あなたがジュニアデベロッパーとして雇用されるには、これら全ての質問への答えを知っている必要はないということです。
しかし、キャリアを積むにしたがって、これらのことを学ぼうと努めるべきでしょう。日々の仕事で使うツールに対する実用的な理解なくしては、本当の意味での良いソフトウェア開発ができるようにはなりません。理解度を高めることことで、より良い選択をできるようになり、デバッグが上達し、デザインの選択も上手くできるようになるでしょう。
あなた独自のスキルを認識しましょう
もしあなたが、仕事のミーティングへの参加やその企画、対処の難しいフィードバックへの対応、パフォーマンスレビュー、チームを率いた事などの経験があるとしたら、あなたはすでに最近コンピュータ・サイエンスの学士で卒業した人よりも、貴重なスキルを既に持っていることになります。
会社のステークホルダーとのやり取りをそつなくこなせたり、ミーティングや計画や組織化が得意であったり、単に多くの経験を積んでいたりということも、強みとなります。
最も重要なことは、全体を俯瞰する視点を持つことです。もしあなたが以前に手術室の看護師として勤務した経験があれば、製品にバグが発生したような時でも、冷静に落ち着いて集中力を保ちながら対処できるでしょう。結局のところ、ソフトウェア開発では、誰か人が物理的に傷つくようなことはないのですから!
ペアプログラミングを経験しましょう
ペアプログラミングとは、1台のコンピュータを2人のプログラマーでシェアしながら行う共同のコード練習です。1人のデベロッパーがコードを書いている間、もう1人は観察しながら次の事を行います。提案する、質問する、エラーを発見する、書かれているコードをより大きなプログラムに応用するための方法を広い視点から考える。どちらの役もエネルギーを消耗するので、15分~数時間ごとに役交代することが通例です。
ペアプログラミングは、業界でも一般的に実践されている方法で、面接のプロセスでもよく行われます。ペアプログラミングのエキスパートとなる必要はありませんが、初めてペアプロをするときにはおっかなく思えるかもしれません。とりわけ、経験を積んだシニアデベロッパーとペアになって行うときには。
もし可能であれば、あなたも面接の前に、ペアプログラミングの練習をしておくといいでしょう。メンターがいれば、彼らと行いましょう。メンターがいなければ、ハッカソンイベントなどに参加しましょう。
模擬面接をしましょう
プログラマーの面接は、今まで経験した面接とはずいぶん違ったものとなる可能性も高いです。面接にはコーディングの課題がよく含まれ、ホワイトボードに擬似コードを書いたり、ペアプログラミングを行ったり、あなたのコードへのフィードバックがなされたりします。コーディングのある面接については、事前に可能な限りオンラインリサーチをしておきましょう。
リサーチしたら、友人と練習をしましょう。ホワイトボードにコードを書いて、シンプルな問題を解いてみましょう。友人にプログラマの面接での一般的な質問をしてもらうよう頼んでみましょう。友人が技術系の人でなくても問題はないです。
テスト駆動開発の前に、エラー駆動開発を実践しましょう
コードを勉強する時には、エラーが常に伴うでしょう。
エラーでプログラムが動作しなくなったり、多くのエラーメッセージにも出会うこともあるでしょう。かつて技術系ではなかった人々にとっては、エラーメッセージは怖い代物に思えるかもしれません。
コードを勉強する前には、エラーといえば、ゲームをインストールした時にコンピュータが破壊されたというメッセージ、電話のロック解除をしようとしている時に故障したと表示されるメッセージなどを意味していたかもしれません。
プログラミングを行う時の重要なマインドセットは、エラーメッセージは私たちを助けてくれる存在だと考えることです。
エラーメッセージの赤い文字(Ruby on Railsの場合)でスクリーンが埋め尽くされたり、困惑するほど長いスタックトレースがスクリーンに表示されることもあるかもしれませんが、エラーメッセージはあなたを援助するためにそこに存在しているのです。
多くのデベロッパーは、私たちが平手打ちされたかのように反応してしまうエラーメッセージに出会った時でも、ブラウザやシェルウィンドウから離れてナビゲートしながら、私たちが書いたコードを見て、何がコンピュータをそんなに怒らせたのかを理解しようと試みています。
コーディングブートキャンプのインストラクターJeff Cohen氏は、エラー駆動開発を実践することを私たちに薦めてくれました。この方法では、スピードを落としてエラーメッセージを読む代わりに、一連のエラーによって開発を前に進めます。
例えば、存在しないメソッドを呼び出して、”メソッドが存在しません”というエラーを確認した後に、そのメソッドを作るためのコードを実際に書きます。あるいは、存在しないビューを参照して、”ビューが存在しません”というエラーを確認した後に、そのビューを作成します。
エラーを恐れる必要はありませんし、実際にはあなたをナビゲートしてくれるのです。
テスト駆動開発についても学んで実践しましょう(少なくとも少しは)
エラー駆動開発に慣れたら、次のステップはテスト駆動開発です。
TDD(テスト駆動開発)は業界でも需要の高いスキルであり、このスキルに通じていることが雇用条件であるソフトウェア会社もあります。テスト駆動開発とは、あなたの作ったプログラムの作動テストのため、またプログラムをより良く設計するための、コードを書く練習のことです。
あなたがいくつかの機能をプログラムに加えた結果、それ以前には正常に稼働していた何かを壊してしまったとします。これは、テスト駆動開発スキルが役に立つ場面の1つです!
TDDについて解説された初心者のためのプログラミングのリソースはほとんど存在していませんが、それは教えるのが難しい概念だからです。良いテストを書く方法がわからない場合、コードを書くよりもテストを書く方が難しいと思えるかもしれません。
問題を解くためのコードの書き方は知っていても、テストと共にコードを実行する適切な方法がわからないために、それに関するテストをデザインするのに1時間もかかるという状況に遭遇するかもしれません。
TDDを学ぶと、最初は時間もかかりペースが落ちるかもしれませんが、その見返りに自信を持つことができるでしょう。あなたのプログラムが作動するという自信、もし何かが故障しても直ちに知ることができるという自信です。テストは、ジュニアデベロッパーにとって非常に役立つセーフティーネットとなってくれます。
あなたの旅が始まります
あなたはまさに今、最も困難で最も挑戦する価値のある旅に出ようとしています。恐れる必要はありません!最終的に到達できるゴールには、満足できて報いのあるキャリアと、テクノロジーを通じて世界をより良いものにできる機会があります。
決して小さな見返りではありません。
あなたの未来はきっと明るいものでしょう。幸運を祈ります!
まとめ
いかがだったでしょうか。
未経験からプログラマーを目指す道のりはとても長いように感じた方もいるかもしれませんが、人によっては学習を始めてから数ヶ月から半年で職に就く人もいます。
今回挙げた項目で言えば、単純にプログラマーを目指すのであれば「プログラミングスクールに通う」「Githubに公開する」「模擬面接をする」で十分でしょう。
しかし、学習していく中でつまずくタイミングが出るかと思います。そういった場合にモチベーションを維持するためにも「プログラミング学習者とつながる」「メンターを見つける」といったアクションも非常に重要です。
ぜひ優先度を決めて、学習を進めていきましょう。どのタイミングでも未経験からプログラマーを目指すのに遅すぎるということはありません。
[お知らせ]TechAcademyでは初心者でもエンジニアになれるオンラインブートキャンプを開催しています。未経験でもこれからプログラマーとして活躍したいという方はぜひご覧ください!