独学で稼げるプログラマーになるための具体的な勉強法【プログラミング入門】

どうも、前職プログラマーのドラゴン忍者だ!

独学でプログラミングを学んで、一定のレベル(普通に稼げるくらい)まで行きたい人のための記事を書いた。

プログラミングを仕事にして最低でも月35万円を稼ぎ出すことができる」くらいの基準を念頭に置いている。

知識がまったくゼロの状態から、どうすれば「稼げるプログラミング」を独学で身につけ、エンジニアとして就職できるのかを、かなり丁寧に解説していく。

もし「プログラミングを仕事にしたい」「プログラミングでキャリアアップしたい」と考えている人がいたら、ここに書いてある内容は役に立つ可能性が高いはずだ。

なお、今回は「背景知識がゼロ」を前提としている。「パソコンやITにまったく詳しくない人が、どう勉強すればプログラマーとして食っていけるまでになるのか?」がテーマなので、すでにプログラマーとして仕事をしている人が読んでも得るものはあまりないだろう。

完全に初心者・未経験者向けに書いているので、記述がやや冗長になっているのは許してもらいたい。

 

まったくのゼロの状態から、3ヶ月で稼げるプログラマーになる

この記事の趣旨をもう少し明確に定義しておくと、「プログラミングやパソコンに関しての知識がほとんど無い状態から、1日10時間、3ヶ月の勉強で、で月35万円以上の仕事ができるプログラマーになる」、ということになる。

月35万は、現実的過ぎてあまり夢がないが、とりあえずは生活していける金額だし、もちろん半年、一年と続けていけば、どんどん給料が上がっていく。(キャリアアップしやすいのがプログラマーのメリットの一つだ。)

「知識がほとんど無い」というのは、

  • インターネットはWEBブラウザくらいしか使ったことがない
  • スマホがどういうふうに動いているのか検討がつかない
  • ウェブやSNSがどういう仕組みになっているのか正直わからない
  • タッチタイピング(ブラインドタッチ)ができない
  • パソコンの基本操作などにもつまずくことが多い
  • コンソール系のソフト(ターミナルなど)を使ったことがない

などに当てはまる人のことだ。

このような人でも、1日10時間プログラミングに打ち込んで、この記事に書かれていることをちゃんとやれるなら、3ヶ月で職業プログラマーになることは十分可能だと考えている。

ちなみに、「1日10時間3ヶ月」が無理なら、1日5時間で半年」と考えて欲しい。「1日2時間半なら1年」だ。ようするに900から1000時間くらいを目安にしているということ。

当然だが、楽な道のりではない。

しかし、3ヶ月か半年の努力で、人生が変わるような結果を得られるのだとしたら、決して悪い話ではないだろう。

 

まずは自分の強みを把握しよう〜価値のあるプログラマーになるために〜

いきなり自己啓発っぽいことを言って申し訳ないが、「知識ゼロからプログラミングを身につける」アナタは、自分なりの強みを意識する必要がある。

プログラミングに関しては、趣味でやってたのがいつの間にか仕事になってたりする人もいる。そういう「一日中プログラミングをやっているような人間でないとプログラマーにはなれない」という考え方は根強い。しかし、これはプログラミングに関する間違った印象の典型的なものだ。

プログラミングが大好きなプログラミングオタクが、優秀なプログラマーであるとは限らない。プログラミングとはあくまで目的のための手段であり、手段にこだわりすぎる人は往々にして生産性を逆に下げてしまうことがよくあるからだ。

今からプログラミングを勉強しようとする人の強みは、「もともとプログラミングが特に好きではなかったが、短期的な努力でプログラミングを身につけた経験を手にしている」ことにある。

プログラミングの仕事は「純粋にマシンに向き合い続ける」というイメージが強いが、実は、プログラマーもコミュニケーション能力はかなり重要である。もちろんここで言っているのは、営業マンや飲み会を盛り上げる的なコミュ力ではなくて、相手の意図を把握してそれをシステム(プログラミング処理)に落とし込めるコミュニケーション能力だ。

「コードを書くのが早い人」や「プログラミング言語のマニアックなところを知ってる人」が、大きな成果を挙げられるとは限らない。ほとんどの場合プログラミングでは、凡庸な技術を適切に使えば、それで十分に効果があるからだ。

休日もコードを書いているような「プログラミングに没頭する人」は、一般的な感覚と解離してしまっていることが多い。プログラミング実装はできるものの、その上流は考慮できず、大きなコミュニケーションコストになることがよくある。

だからこそ、プログラマーでありながら、「一般的な感覚」を持っている人は強い。

これから短期間でプログラミングを身につける人は、「ITが苦手な一般的な人」と「プログラミングを知っている人」の両方の視点を手に入れることができる。

これは、これから働いていく上で、確実にアナタの大きな武器になるので、意識しておいて損はない。

「高給取りのプログラマーは高いスキルを持っている」というのは、多くの人が抱きやすい勘違いである。実際は、給料の高い人ほど、あまりコードを書かなかったりすることが多い。「コミュニケーション能力があり、課題を解決する簡単な方法を提示できるプログラマー」は価値が高く、そういう人がますます重用される時流になってきている。

短時間で目指すことが可能な「有能なプログラマー」の条件は

  • プログラミングをできない人の考えがよくわかる
  • 適切なコミュニケーションがとれる
  • 基礎的なプログラミング能力を持っている
  • 問題に対して適切な解決策を考えることができる

となる。

今、素人のふわっとした感覚を、プログラミングの仕様まで落とし込める人には、無限のビジネスチャンスが広がっている。これからの努力でプログラミングスキルを手にした人にとって、「一般人の感覚」は、大きな武器になる可能性が高い。

だから、今から学習を始める初心者は、「自分はこれから新しくプログラミングを身につけるんだ!」という意識を強く持って、それをモチベーションにして欲しい。

必須ではないが、自分の勉強する過程を、「技術勉強ブログ」として公開するものいい。(理由は後述)

 

プログラマーにとって重要な能力ランキング

プログラマーにとっての重要な能力は、優先度順に以下のようなものになる

  1. アウトプットするスキル
  2. 検索のスキル
  3. 論理的思考・プログラミング思考のスキル
  4. 業務に関する知識
  5. プログラミング言語の知識

上から順番に優先度が高い。言語に関する知識は意外と低いのだが、その理由も説明していく。

アウトプットするスキル

まず、プログラマーにとって最も重要なのは「アウトプットする」のスキルだ。

最初にプログラミングを学ぶとき、まず「hello world」を出力するところから始めるだろう。初心者は、「これをやったから何なの?」と思うかもしれない。しかし、「正しい結果が出力される」というのは、プログラミングにおいて最も重要なことなのだ。

「入力に対して、結果が出力され、それを確認する」というのが、プログラミングにおいては決定的に重要。だから言語を学ぶときは、一番最初に「hello world」を出力することが伝統作法のようになっている。

プログラミングは、「問題が与えられて、その中で100点から0点」といった学校のテストとは違う。「何を作るか決めて、それを完成させられるかどうか?」という世界観だ。だから学校的な「お勉強」とはちょっと違う考え方をしなければならない。

「プログラミングの記法や概念を勉強して、なんとなく理解する」というのは、誰だってできるが、それではプログラミングの本質的な技術は身につかない。

プログラミングの特徴は、「成果物が動くかどうかがはっきりわかる」ことにある。「アウトプット」が最も重視される職業なので、「勉強する」ではなく「形にする」という意識が大事だ。

アウトプットするのは、誰だってしんどい。試行錯誤しなければならない段階は絶対にあって、創作の苦しみに近いものがある。しかし、だからこそプログラマーは楽しいし、短期間で高給取りになれる可能性のある職業なのである。

 

検索のスキル

少なくとも初心者においては、プログラミングの作業は、「考えながらやる」よりも、「調べながらやる」が大部分だ。

(例外もあるが、)初心者のプログラミングは、「わからないことがあったらとりあえずググる」を繰り返しながら、少しずつ作りたいと思っているものを形にしていく、といった作業だ。

プログラマーになるには、まず、内部記憶(自分の知識)」ではなく「外部記憶(Web情報やドキュメント)」に頼るという「作法を身につける必要がある。

これは、初めてやる人からすれば、けっこうストレスがかかるものだと思う。しかし、「わからないことはすぐ調べる」に慣れるのは、プログラマーにおいてほぼ必須の訓練だ。

これは、スキルというよりは、価値観に近いものかもしれない。

実は、現代的なプログラミングは、必要なものを一から組み立てるという過程はあまりない。ライブラリやフレームワークを駆使して、既存のものをうまく組み合わせながら、プロダクトを完成させていく。

このような「プログラマーの感覚」は、やってみないとわからないことだし、慣れるしかないのだが、一番上に挙げた「アウトプットする」を苦労してやる過程で、必然的に身につくものだ。

必要なことを上手に調べるには、独特の勘のようなものが必要。ただ、そういうのはやっていくうちにわかってくる。やり始める前から重く考える必要はないぞ。

 

論理的思考・プログラミング思考のスキル

論理的思考・プログラミング的思考も大事だ。プログラミングをやっていると、かならず「バグ」が発生して、それを解決しなければならない。

プログラミングの書き方は、調べればすぐにわかる。しかし、自分が作っているプロダクトにおいて、どこに問題が発生しているかは個別の問題なので、調べても解決策が見つからない場合がある。

そのようなときは、論理的に、どこが間違っているかを類推する必要がある。

エラーの要因がどこにあるかを割り出すためには、大抵の場合、いくつものヒントがある。そのミスは、単なるタイピングミスかもしれないし、自分が根本的に勘違いしているからかもしれないし、プログラミング言語上の仕様の問題かもしれない。

このようなときは、論理的な思考が大事で、パズルを解くように答えを導き出す。

「バグつぶし」というのは、うんざりするような作業に思えるが、実はゲームみたいで楽しく。「ひたすらパズルを解くような作業をするのが好き」というプログラマーは多い。

謎解き系のゲーム、アドベンチャーゲーム、パズルゲームが好きな人なんかは、けっこうプログラミングの適正があるかもしれない。

 

業務に関する知識

業務に関する知識(働く業界の知識)は、実はプログラマーにとってはけっこう大事だ。

例えば、ソーシャルゲームの処理をプログラミングで作る場合、実際にソーシャルゲームを遊んだ経験があったほうがやりやすくなる。

新しくゲームを作るといった場合も、まったくゲームをやったことのない人よりもゲームに詳しい人のほうが、適切な提案ができることは多いだろう。

不動産のシステムを作る場合は、不動産に詳しいと有利。医療系のシステムを作る場合は、医療の現場で働いた経験があると有利。外食、小売、農業、観光、営業など、一見プログラミングに関係なさげでも、特定の業務に関する知識は、実はプログラミングをやる上で大きな武器になる。

だから、前職は別の仕事をしていて、新しくプログラミングを身につけた人の前には、多くのビジネスチャンスが転がっている。

この話に関しては、以下の記事で詳しく書いている。初心者には気が早すぎる話だが、気になる人は是非。

給料の高いプログラマーになりたい人は何をすればいいのか?

2018.06.24

 

プログラミング言語の知識

プログラミングは、記法通りに書かなければ正しくコードが動かない。

だた、「Javaのif文の書き方はこう」とか、「Rubyの配列の書き方はこう」みたいなことを覚える必要は、少なくとも初心者のうちは一切ない。

細かいプログラミングの記法を覚えているかどうかは、プログラミングの能力とはあまり関係ない。

わからないことがあれば「調べれ」ばいいだけのこと。パソコンを使っているのだから、「記法」なんてドキュメントや参考サイトのページを開きながら書けばいい。「丸暗記」に労力を使う必要はどこにもない。

記法を覚えているとスムーズにコードを書くことができ、生産性が向上するというメリットはある。しかし、初心者のうちは生産性よりも、とりあえずプロダクトを形にする作業を一通り経験するほうが先だ。

「記法をしっかり学習する」というのは、学校教育の延長上でプログラミングを捉えている人にありがちな勉強の仕方なのだが、あまりいいやり方ではない。

プログラミングの勉強法は、まずは「作ってみる」ことだ。その過程で、検索能力や、背景知識や、プログラミング言語の知識が身につく。

ただの記法にとどまらず、言語の仕様を深く理解できると、プログラミングの生産性はかなり向上する。しかしそれは、いくつか違う言語でコードを書いてみて、色んなアウトプットをこなした先にある知識なので、いきなり言語の仕様をじっくり勉強しても効率が悪い。

「何かを完成させる」を経験する前からプログラミング言語の知識を勉強しても徒労に終わることが多いし、ここらへんは学校教育とは頭の使い方が違うので、注意が必要だ。

 

プログラミング言語は何がおすすめか?

プログラミングをやり始めようと思っている人にありがちなのは、「プログラミングって最初はどの言語をやればいいの?」ということだろう。

プログラミング言語は、自然言語(英語や中国語など)とは違って、実は習得にそれほど時間を必要としないし、最終的にいくつかの言語をマスターするのは必須だ。というより、複数の言語を書いたみた経験がなければ、言語の良し悪しも判断しようがない。入り口にそれほど大きな違いはないので、メジャーなものであれば何の言語から始めてもいいと思う。

ただ、できれば書きやすくて学びやすい言語がいいし、仕事につながりやすい言語からやったほうがいいだろう。

  • JavaScript
  • Ruby
  • python
  • Java
  • Swift
  • C++
  • C#
  • PHP

といった、わかりやすく需要の多いプログラミング言語から選ぶとよい。

業務の場合、他のプログラマーと共同作業しなければならないので、メジャーな言語を使えるほうが仕事につながりやすい。また、日本人ユーザーが多い言語ほど、日本語で検索したときに出てくる情報が豊富なので、最初は日本人に人気の高い言語を選ぶのが良い。上で挙げたものであれば、すべて条件に当てはまっている。強いて言うなら「Javascript」と「Ruby」。

プログラミング言語の良し悪しは、わりと好みの問題だ。

例えば、「静的型付き言語」と言われるJavaやCなどのプログラミング言語は、決まりごとが多くて書くのが面倒くさいが、エラーチェックをしやすく保守性や拡張性に優れている。「動的プログラミング言語」は、コンパイルをせずスラスラ書けて気持ちいいがそれがデメリットになる場合もある。どの案件にどういうプログラミング言語が向いているかはケース・バイ・ケースとしか言いようがない

プログラミング言語はどれでも良いと言った手前申し訳ないが、この記事では、俺の独断と偏見で、これからアナタが学ぶおすすめの言語をはっきり断言しまいたいと思う。(何もわからないうちからどれかを選べと言われても戸惑うだけだろうから。)

初心者であるアナタが学ぶべき言語は、「JavaScript」と「Ruby」の2つだ。

「JavaScript」は、ウェブプログラミングをやる上では必須で、環境構築とアウトプットがしやすいので、初心者が学ぶ言語としては鉄板。

「Ruby」は、「Ruby on Rails」という、ウェブアプリケーションを作る上では鉄板のフレームワークを有していて、日本人の「まつもとゆきひろ」氏が開発した言語なので、日本語の情報がウェブ上に豊富。

エンジニアを目指す上で、この2つをちゃんとやれれば、仕事には困らないだろう。

そのため、「JavaScript」と「Ruby(Ruby on Rails)」の2つを身につけることを前提に、これからの話を進めていく。(ウェブアプリを作るためには、ごく初歩的な「HTML」と「CSS」の知識も必要なので、それも勉強する。)

 

まずはウェブアプリケーションのバックエンドを身につける

アプリケーションには、大まかにわけて「フロントエンド」と「バックエンド」という概念がある。

  • 「フロントエンド」は、表側の処理で、例えばウェブページに出てくるクリックできるボタンなどを言う。
  • 「バックエンド」は、サーバーを通した処理で、送られてきたurlに対して最適な反応を返す。

「フロントエンド」と「バックエンド」は繋がっていて、「ボタンが表示され、それを押すと画面が切り替わる」というのは、そのフロントとバックの相互作用によって行われる。しかし大まかに、フロントエンドを担当するプログラマーと、バックエンドを担当するプログラマーは別れていることが多い。

今からプログラミングで稼ぎたいプログラマーは、「バックエンド」の技術をメインに習得するべきだ。なぜならバックエンドのほうが汎用性が高いから。

「フロントエンド」は、ウェブとアプリによって使う言語が違う。ウェブアプリケーションの場合は、「HTML」「CSS」「JavaScript」だが、スマホアプリの場合は「Swift」や「Java」を使う。言語が違っても考え方は共通しているが、やはり大変であることは否めない。フロントエンドは技術の移り変わりが激しく、初心者がいきなりやると破綻するリスクが高い。また、デザイン的な視点も入ってくるので、汎用性のあるプログラミングの能力を身につけるためには、最初にフロントエンドはあまりおすすめできない。

「バックエンド」は、ウェブアプリであろうとスマホアプリであろうと、サーバーを通す処理の部分は変わらないので、汎用性は高いと言える。また、需要があるので、基礎的なことができるだけでも仕事を見つけやすい。。

つまり、バックエンドのスキルは比較的手堅いものであるということだ。これからプログラミングを身につけて収益を上げたいのであれば、まずはバックエンドが無難だ。

さらに、バックエンドの技術がベースにあれば、そこからフロントエンドに行くにも、他のシステム開発やゲーム開発などに行くにも、スムーズに移行しやすい。最初のプログラミングの勉強をバックエンドに費やす価値は十分にある。(実際には、バックエンドの勉強と言えども、「基礎的なWebの知識」と「フロントエンドの知識」も学ぶことにはなるが。)

「Ruby on Rails」というフレームワークを駆使してウェブアプリケーションを作ることができれば、すぐにでも仕事がある。

 

具体的なステップ

具体的には

  • 基本的なPC操作を覚える
  • ウェブに関する基礎的な知識を身につける
  • ウェブプログラミングの基礎を学び、実際にコードを書いてみる
  • 何か作るものを決める
  • 完成させて公開する

という手順でやる

 

基本的なPC操作を覚える

パソコンの操作って「何が基本なの?」と思うかもしれない。

OSやそのバージョンごとにパソコンの操作はそれぞれ違うので、「これを覚えればパソコンをマスターした」と言える特定の技術はない。

あえて身につけるべき技術は

  • タッチタイピングができる
  • 内部記憶ではなく外部記憶に頼る習慣を身につける

の2つだ。

タッチタイピング(ブラインドタッチ)

プログラミングをする上で、できるまで練習したほうがいいのはタッチタイピング(ブラインドタッチ)だ。入力速度が遅いと、途中で嫌になって挫折してしまう確率が高くなるので、タイピングだけは最初にできるようになったほうがいい。

タイピングは、速度よりも「視線」が大事だ。自己流でものすごく早くキーボードを打てる人はいるけど、画面と手元のキーボードを目が往復していたら意味がない。タッチタイピングというのは、画面を見たままタイプすることを言う。

視線を往復させてないことで目の疲労を防ぐのがタッチタイピング。もちろん、いちいちキーボードを見ないほうがタイピング速度は最終的に早くなる。

正しいタイピングを身につければ、キーボードを一切見ずにすべてのキーをタイプすることができるので、変な癖がついてしまっている人はこれを機に矯正しよう。

正しいタイピングポジションは、左手人差し指を「Fキー」に、右手人差し指を「Jキー」に置く。

以下のサイトに詳しく書いてあるので参考にしてみてくれ。

myTyping

「どの指でどのキーを打つか」は決まっていて、それはなるべく矯正したほうがいい。自己流でやっていた人にとってはストレスの溜まる訓練になるだろうが、正しいタイピングができるかどうかは、長期的な作業効率に大きく影響してくるので、苦労してでも直すことをおすすめする。

正しいキーボードの打ち方を意識しながら、寿司打などのタイピング練習ゲームで練習しよう。

スピードは一定基準まであれば、そこまで意識する必要はない。「寿司打」基準で言うなら、「お勧め」コースで損にならない程度の速さがあれば十分だろう。

「タイピング」は、早く打とうとするよりも、正しいキーの押し方を意識しながら、手元を見ないで打つことを意識する。

面倒くさがらずに、1日2時間を2週間ほど続ければ、ある程度はできるようになるので、苦手な人はまずそこを克服しよう。

あと、タイピングはけっこう奥が深く、e-typingなどのサイトで、タイピングの速度をひたすら競い合っているクラスタもいる。

内部記憶ではなく外部記憶に頼る習慣を身につける

「パソコンを使う上で最低限必要な基礎知識は何か?」と聞かれても、なかなか難しい。

「パソコン初心者の基礎知識」といったサイトなどで、基礎的な情報を勉強することはできる。しかし、パソコンはOSによっても、そのバージョンによっても、細かい付き方は違うし、単なる仕様の問題といったことも多いので、体系的な勉強は難しい。

パソコンが得意になりたいなら、パソコンを使って仕事をすればいい。プログラミングの勉強をする過程で、自然とパソコンは使えるようになっていくだろう。

しかし、その際に重要なのは「外部記憶に頼る習慣」だ。「わからないことがあればすぐに検索する」という習慣(スキル)が、パソコンを使いこなすうえで重要。逆に言えば、その行動パターンが身についていさえすれば、すでに十分にパソコンを使いこなせる状態だと言える。

例えば、「コンソール系ソフト」や「Linux」や「ターミナル」を、体系的に一から勉強する必要はない。必要に駆られたときや、わからないことがあったときに、「ターミナル ファイル検索 コマンド」などとGoogleで検索する行動パターンが身についていればそれでいいのだ。(何を言っているかわからない人、わからない単語があった人は、「Linuxとは?」「ターミナルとは?」などとすぐにググってみよう。面倒くさがらずにそれをやることが大事なのだ。)

もちろん、「上手にググる」ためにも知識やスキルは必要になるのだが、それはやっていくうちに自然と身につく。

 

ウェブに関する基礎的な知識を身につける

「すぐにググる」というのは、プログラミングをする上で最も重要なスキルなので、わからないことがあればググりながらやる。

しかしここでは、ウェブに関する知識がまったくない初心者を想定している。ある程度の知識や、その分野に関する語彙がなければ、「ググり方」もわからないといった状況に直面するだろう。

その場合は、書籍で、体系化された知識を学ぶ必要がある。

「HTML」「CSS」「サーバー」「データベース」「Cookie」など、ウェブやITに関する基礎知識に自信がないのであれば、

を読むといい。初心者にもわかりやすく、「常識的」な知識をしっかり解説してくれてる本だ。これを一冊読めば、なんとなくの概念はつかめる。

まったくわからない初心者のうちは、書籍として体系化されている知識にアクセスしたほうが、学習効率は良くなると思う。

本を呼んでいるとき、わからない言葉や納得できない概念があれば、ググッて調べてみることが大事だ。

飲み込みの遅い人でも、調べる時間も含めて、35時間あれば全ての内容を理解できるだろう。1日5時間やるとして、1週間もあればウェブの基礎知識が身につく。(もちろん、読むのが早い人や集中力のある人はもっと早く読み終わる。)

あと、すべての知識をちゃんと覚えないといけないわけではない、読んで「なるほど〜」と思うくらいで大丈夫だ。基礎知識にそこまでの労力は割かずに、最終的な成果物を作り上げることが最も重要であることを認識しよう。

 

ウェブプログラミングの基礎を学び、実際にコードを書いてみる

ウェブに関しての大まかな知識を身につけたのであれば、実際にコードを書いてみよう。

何もわからない初心者のうちは、書籍で基礎的な知識を学び、まずは「写経」をしたほうが効率が良い。「写経」とは、本に載っているサンプルコードを書き写して動かしてみることを言う。

ウェブアプリケーションを作る場合は、

  • 「HTML」「CSS」「JavaScript」の基礎的な知識
  • 「Ruby」の基礎的な知識
  • 「Ruby on Rails」の知識
  • 「SQL」「Git」「Heroku」「AWS」の知識

が必要になる。

それぞれ学びやすい書籍を紹介すると

の順番でやろう。3冊しっかりやるだけで、グッとプログラマーに近づける。

どれも良書なので、基本的に本に書かれている指導通りに進めればいい。

 

なお、プログラミングを学ぶための優良書籍は、以下の記事にまとめている。(基本的には上で紹介した4冊だけで十分。)

初心者がプログラミングを学ぶためのおすすめ入門書

2018.06.26

 

「書籍でプログラミング勉強するときのコツ」は、本に書いてあることのみで理解しようとせずに、わからないことや気になることを積極的にググりながら読み進めていくことだ。また、出てくるコードは、必ず自分の環境で動かしてみよう。

1冊に70時間必要と想定して、1日5時間やるなら1ヶ月半、1日10時間やるなら3週間で終わる。

「SQL」「Git」「Heroku」「AWS」などに関しては、本で勉強することはおすすめしない。基本的なところは「Ruby on Rails」の講義に含まれるし、必要になったらその都度調べよう。

プログラミングを学べるウェブサイトは、ドットインストールがとても人気だ。1回3分程度の動画なので見やすく、言語ごとの記法を学ぶことができる。月額約1000円のプレミアム会員になると、閲覧できるコンテンツが増えて、ソースコードを閲覧できるようになる。

ドットインストールは素晴らしいサイトだが、これを視てもプログラミングができるようにはならない。いくら言語の記法を確認しても、それだけでプログラミングができるわけではないからだ。ただ、なんとなくの手順を確認したり、さらっと言語の予習や復習をする上では、かなり有用なサイトだ。

オンライン学習を安く済ませたいのであれば「Udemy」の講義がおすすめだ。これはオンライン学習動画を格安で購入できるサイトで、一つの講義がだいたい1000円から5000円くらい。「学びたいコースを検索」ができるので、「Ruby on Rails」と打ち込んでみよう。有料だが、ドットインストールのコンテンツよりも「Udemy」のほうが実践的な内容のものが多い。動画と同じアプリケーションを自分で打ち込んで作ってみれば、書籍で「写経」するのと同じ効果が得られる。動画なら、復習や写経の時間を合わせても、20時間以内に終わる。

動画コンテンツは、紙のコンテンツと比べて一覧性がなく復習しにくい一方で、集中力を維持しやすいというメリットがある。積極的に使っていくのも手。

これは、お金を出せる人限定だが、「TechAcademy」や「CodeCamp」といった、「オンラインプログラミング教室」に通うと、成功率がかなり高まる。プログラミング教室は、メンターに質問しながら、カリキュラムをこなし、WEBサービスを開発していくというサービス。

独学する場合に一番の課題になるのは、メンターがいないことだ。初心者のうちは、ちょっとしたことに躓いて、それをなかなか解決できなかったりする。基礎知識も検索力も身についていない状態だと、ささいなバグや不具合に対応できなくなり、心が折れてしまう。プログラミングを勉強しようと意気込んだけど挫折してしまう人の大半が、初歩的なバグを解決できず、プログラミングが嫌になってやめてしまう。

最初の環境設定などがうまくいかなかったり、知識と経験がないゆえに簡単なところでハマってしまうというのは、誰にでもある。根性がある人は、それでもなんとか調べながら乗り越える。ただ、そこに気力と時間を使ってしまうのは、あまり効率的とは言えない。プログラミングが得意な知り合いや、メンターがいれば、プログラミング学習はかなり有利になる。オンラインのプログラミング教室は、適切なカリキュラムとメンターを購入するサービスとも言える。規定の時間内であれば、わからなくなったところをテキストチャットやライブチャットで質問することができる。しかし、料金は高いのがネック。スキルのある講師に時間を割いてもらうので、どうしても価格は高くなる。

オンラインプログラミング教室の利点は、学習を進めやすくしてくれるのみならず、後の「何か作るものを決める」「完成させて公開する」、そして「就職先を見つける」というステップもサービスに含まれていることだ。カリキュラムだけじゃなく、プロダクトに対してメンターのアドバイスを仰ぐことができるので、何かを作ろうとしていて、どうしても解決策がわからなくなってしまったときなどは助かる。また、「TechAcademy」などのサービスは、未経験からの転職支援もしっかりやっているので、最初の就職先を探すのがとても楽になる。(市場価値が高いウェブプログラマーが前提なので、IT土方と言われるようなシステム開発に放り込まれることはない。)

オンラインのプログラミング教室には

  • 指導を受けながら専用のカリキュラムをこなし、効率よく学習できる
  • 初心者がハマって挫折しやすいところを乗り越えやすくなる
  • 現役のエンジニアや元エンジニアにメンタリングしてもらえる
  • 規定の時間内にメンターが常時待機していてチャットサポートしてくれるので、熱心に勉強しているほサービスを使い倒すことができてお得
  • お金を払うことで逃げ道がなくなり、意思の力が強まる

というメリットがある。

おすすめのプログラミングスクールは「TechAcademy」と「CodeCamp」の2つ。特に「TechAcademy」はがっつり無料体験できるので、わからないところがあれば質問してみるといい。

プログラミングスクールは安くないが、自分の努力次第で大きなキャリアアップの道が開けるのなら、課金でブーストをかけるのは十分にアリだ。純粋な独学でもプログラミングは十分に身につけることができるが、メンターをつけたほうが成功率は高くなるので、お金が払えるのであれば投資したほうがいい。

注意点としては、オンライン教室をだらだらやっていればプログラミングが身につくわけではないということだ。「あくまで自主的に勉強しながら、オンライン教室で効率良く問題を解決する」という意識があってはじめて、サービスの恩恵を十分に受けることができる。

オンライン教室は、無料で体験レッスンやメンターサポートのお試しを受けることができるので、一度受けてみてエンジニアに相談してみるという使い方もできる。料金を支払ってサービスを受けるかどうかは、必ず無料体験でメンターが信用できるかどうか判断してからにしよう。遠慮なくどんどん質問を投げていくといい。

 

何か作るものを決める

基礎的な学習を終えたら、「自分のプロダクト」を作ってみることステップだ。

「基礎をしっかり固めてからオリジナルへ」という考え方をせずに、「基礎は手早く終わらせて、すぐに自分のプロダクトを作り始める」という意識を持つのが大事。

最初に言ったが、プログラミングは、実際に試行錯誤しながら動くものを作ってみることで、多くのことが身につく。技術をそれ自体として学ぶのではなく、「何かを作って形にした経験」を手に入れるべきなのだ。

「じゃあ何を作ればいいんだよ?」と思うかもしれないが、それが正常な人の反応だ。まっとうな感性をしている人間は、特にプログラミングで作りたいものなどない。それが普通なのだ。

現役エンジニアの多くは「モチベーションが大事」と言う。プログラミングを仕事にしたい人は、寝食を忘れて自分のプロダクトに没頭する必要があるんだ、と主張する人もいる。実はこれには一理ある。プログラミングを身につけるのは簡単ではないが、「作りたいもの」がある人は、そのために努力しやすく、結果的にスキルも身につきやすいからだ。

だが、「プログラミングに対する熱意がないとダメだ!」という類の主張は聴くに値しない。手段に拘泥したり、自分のこだわりを押し通したりすることで、社会に多くの損害をもたらしてきたエンジニアは数多くいる。(しかも彼らは、自分を有能だと思っていて、失敗の責任はすべて上司や経営者にあると考えているから手に負えない。)

「熱意があればプログラミングを身につけやすいが、熱意があったからといって有能なプログラマーになれるわけではない。」これは非常に重要な視点である。

「プログラミングは稼げる職業なので、技術には特に興味がないけどプログラマーになりたい」というモチベーションでプログラミングを学ぶのは全然アリだし、むしろそういう人のほうが仕事はちゃんとできそうだ。(そもそも仕事なんてどれもイヤイヤやるものだ。)

何が言いたいかと言うと、「心の底から作りたいものがなかったとしても、プログラミングを諦める必要は一切ない」ということだ。

というより、多くの人は、仕事をして知識が増えていく過程で、なんとなく作りたいものが出てきたりする。

ただ、「何かを作って初めてプログラミングが身につく」というのも事実。だから、これからプログラミングを身につけたいと思うなら、無理矢理にでも作りたいものを決めて、それを頑張って完成させよう。

 

完成させて公開する

プログラミングの経験値は、何かを完成させた段階で入ってくる。それはちょうど、RPGなどのゲームで、敵を倒したときに経験値が手に入るのと同じだ。途中で挫折して(負けて)しまえば、経験値は一つも入ってこないものだと思ったほうがいい。

最後まで完成させるのとさせないのとでは、それくらいの差がある。

簡単なものでいいから、「作りきる」ことが大事。

「作りたいもの」は、凡庸でつまらないものでいい。

初心者が目指す「Ruby on Rails」のプロダクトの例を挙げるなら、

  • SNSっぽいWebアプリ
  • スケージュール管理システムっぽいWebアプリ
  • Webアプリケーション要素のあるゲーム
  • Webアプリケーション要素のある便利アプリ

あたりが鉄板。別になんでも構わない。

とにかく一度「完成」させてみれば、今までとは違った景色が見えてくるだろう。

個別のプログラミング言語の知識や論理的な思考力とは別に、「何かを完成させる」というメタスキルが存在する。やってみるとわかるが、何かを製作しているときは、最後の詰めの部分にかなりの労力を持っていかれる。「勉強しかけ」とか「作りかけ」は簡単だけど、「完成させる」のはものすごく大変だ。そこには、まさに「0」と「1」の違いがある。

だから、目標は、「プログラミングを身につける」ではなくて、「オリジナルのアプリケーションを完成させて公開する」にしなければならない。

そして、作った作品は公開して、誰もが見て触れる状態にするべきだ。それが就職をする際の履歴書になる。

未経験でも、プロダクト(ポートフォリオ)さえあれば、わりと簡単にプログラミング職の面接を突破できる。

まともなプログラマーほど、完成させて動かすことの重要さを知っている。どれだけ凡庸なアプリであっても、自分の手で完成させて公開しているなら、絶対に評価される。(それが評価されないような職場では、プログラマーは働くべきではない。)

 

プログラミングには多くの可能性がある

長くなったが、ここで書かれたことを実践すれば、3ヶ月で35万円以上の仕事をとれるプログラマーになることは、かなり現実的なラインだ。

しかもプログラマーは、他の職業よりもずっとキャリアアップしやすい業種なので、30代の未経験から始めて年収1000万も夢ではない。

医者になるには、難関試験を突破し、医学部に6年在籍し、さらに専門の経験を積まなければならない。弁護士になるには、司法試験に合格してから、さらに下積みの期間を経なければならない。大企業の会社員は、難関採用の倍率をくぐり抜けた後、所属する企業に一生忠誠を誓い続けなければならない。

その点を考えるなら、たった数冊の本と、オンラインの講義と、ウェブ上の情報だけで、実践的な仕事が可能になる「プログラマー」という職業は、ものすごくお得と言える。なぜプログラミングにそれだけの可能性があるかと言うと、純粋に需要があるからだ。今の世界はプログラマーなしには維持できない。そして、プログラマーの重要度は、これからも高まっていく。

プログラミングには独特の大変さがあるのも事実だ。しかし、情熱がある人とか、センスがある人でないとプログラミングができない、というわけではない。

「プログラマーという生き方に漠然とした憧れがある」という程度の意識の人でも、十分にプログラマーを目指すに値する。入り口なんてだいたいそんなもんだ。

プログラマーは、勉強して考えれば考えるほど、自分のスキルと待遇が上がっていく。「スキルを身につける」「手に職をつける」というのは、それ自体が人生を支えてくれるほどの価値を持つ

今の時代の仕事は、「くだらない雑務を、漠然と将来への不安を抱えながらこなす」という種類のものが多すぎる。そういう仕事に従事している人にとっては、プログラマーという選択肢は大きな希望と言えるだろう。

プログラマーはそれほど楽でもないし楽しいことだらけでもないが、総合的に考えて、とても素晴らしい仕事の一つだと俺は思っている。

日本はアメリカなどから大きく遅れをとって、プログラマーが不足している。だから義務教育にプログラミングが導入されたりもしている。今がプログラミング学習の始めどきとも言えるかもしれない。これを呼んでいる人の状況は様々だろうが、今からプログラマーを目指せばいいじゃないか!

1 個のコメント

  • すごくいい事を書いてるなーと
    思いました!

    プログラミング初心者ですが
    すごくやる気が出ました!

    これからもブログ頑張ってください!

  • コメントを残す