以前初心者向けプログラミング勉強会を開催した時に
参加者の方の中には最近プログラミングを始めた、
という人も何人かいました。


そういう人にとってはその時用意した問題は
ちょっと難しかったため、ときどき私が

サポートに回って質問に答えたり、

解き方をある程度教えたりしていました。

 


また、話がちょっと脱線して

 

「僕が作ったWebアプリは

大原さんならどれぐらいで作れますか?」

「私はどう勉強すれば早く

現場で働けるようになりますか?」

といった質問を受けたりもしました。
 

 

その中で言われたのが、
「説明されたらわかるけど、

自分一人でこの答えにたどり着くのは無理です」
「えっ、そんな短い時間で作れるんですか」

「えっ、勉強ってそんな風にできるんですね」
といったようなコメントです。

 


そういったコメントを聞くと、

「あー、私にもそんな頃があったわ」

と昔の思い出がよみがえってきました。

 


私は何年かしたら、質問をしてきた初心者さんが

「xxさん、すごいですね」と言われる側に

回ってほしい!と思っています。

 

 

そうなるためにはどうしたらよいでしょうか?

何が必要なのでしょうか?

 


自分の経験や後輩の教育などをふまえて

考えてみたことを今回はお伝えします。

 


相対的心理

 

まず、質問をしてきた初心者さんから見ると、

おそらく私は「大原さんってすごい」と

思われてるんじゃないかなーと思います。

(違ったら恥ずかしいので努力はします)

 


ですが、どの世界にも上には上がいるもので、

私自身も「xxさんってすごい。

どうやったらあのレベルになれるんだ」

と思うような人がたくさんいます。

 


私は初心者さんよりも積み重ねてきた経験や

書いてきたコードの量が多いですし、

私が「すごい」と思ってる人は、私よりも

さらに積み重ねてきた経験や書いてきたコード量が

多いのでしょう。

 


まあ、世の中そんなものです。
誰かが誰かに憧れてしまう

(ときにはすごすぎて絶望してしまう)

のは当然です。

 

 

「すごい人」も

最初からすごいんじゃなくて、

その人ががんばってきた結果

そうなっています。

 


何が言いたいのかというと、

「大原さんってすごい」って今思うかもしれないけど、

努力次第で何とかなるからあなたも頑張って、

ということです。

 

 

プログラマとしてスキルを

上げるための前提条件

 

プログラマとしてスキルを上げるためには、

そもそもの前提条件があります。

 


それは「技術が大好きで、楽しんで学べること」です。
それを判断する方法のひとつは

「プライベートの時間やお金を

つぎ込んでもストレスにならないか?」

と自問することです。
 

 

答えがYESなら大丈夫でしょう。
もし「プライベートの時間に

仕事のことなんて考えたくない」

「本を買ったりするのはお金がもったいない」

と考えてしまうのであれば、

その人はなかなか成長できないと思います。

 


別にこれは「プライベートの時間とお金を使って勉強しろ」

と言いたいのではなく、主体的な学習意欲が

あるかどうかを確認するための質問です。

 


学習意欲があればどんどん成長するし、

なければなかなか成長できません。
これも当たり前の話ですよね?

 

 

私が技術好きになったきっかけ

技術が好きになるきっかけは

人それぞれだと思います。
 

 

ちなみに、私の場合は簡単にいうと

「現場でたくさんの天国と地獄を見てきたから」です。
 

 

つまり、
「なんて読みやすくて作りやすい

コードなんだ!すばらしい!!(歓喜)」
という経験と、
 

 

「なんというヒドいコードだ。。。

超読みにくいし、ちょっとした

改造もひと苦労だ(怒り)」
という経験を

たくさんしてきたのが大きいと思います。
 

 

どうせ仕事をするならラクに楽しく仕事したいので、

作りやすさや開発効率の良さを徹底追求しようと

考えていろんな勉強を始めました。

 

 

なぜなら私はこんなに辛くて楽しくない仕事はない

と最初思っていたからです。

 

 

ですから、現在私は楽をして楽しく仕事をするために

仕事をするというなんとも矛盾に満ちた

ことをやっています笑

 

 


「今まではこんなに苦労しながら作ってきたけど、

実はこんなショートカットがあったのか!」

という発見をするのが大好きとい理由で

私は楽しんで技術を学べています。

 

 

ちょっと技術が好きに

なれない方への問いかけ

 

一つ確認してほしいことがあります。

 

それは、プログラミングを学ぶこと

自体が目的になっていませんか

ということです。

 

 

私の場合はそれが原因で嫌いになりかけていました。

というより、嫌いでした。

 

 

ところが、仕事やる時に楽したいから学ぼう

と考えた途端、楽をするためにツールを

個人的に作り、結果プログラミングの

能力が上がるということが起こりました。

 

 

別にあなたに考えを変えろといっているわけでは

ありません。

 

 

しかし、そういう視点もあるということを

知っていただければと思います。

 

 

成長するための方法あれこれ

さて、ここからは初心者さんから

熟練者に成長するための具体的な方法を

あれこれ考えてみましょう。

 

 

独学でコードを書きまくる

コードをたくさん書くことは

非常に良いことです。

 


自分の頭で考え、壁にぶつかり、

問題を解決すれば、

確実に自分の血肉となってくれます。

 

 

エラーの解決しかり、環境構築しかり、

コードの書き方しかり。

 


一方で、時間は非常にかかるので

効率はあまりよくないかもしれません。

 


また、完全独学だと間違った方法に

進んで変なクセが付く恐れもあるので、

注意が必要です。

 

 

そんな時には

そんな時にはメンター(自分の世話をやいてくれる人)

を誰か先輩にしてもらうと良いでしょう。

 

 

先輩というより自分より技術のことを

知っている方ですね。

 

 

自分の勉強している方向性が

間違っていないか、

解決できないエラーは

どこをどう見たら良いのか。

 

どんどん質問してさっさと一人前になるのが

所属する組織のためにもなりますし、

ひいては、どこにいっても生きていくための

あなた自身の力になります。

 

 

技術書を読む

 

技術書には著者が長年かけて習得した

知識や経験が詰め込まれています。
 

 

本を読めば、その知識と経験を

少しのお金と少しの時間で吸収

することができます。

 


また、体系的な知識を身につける

場合にも技術書は最適です。

 


一方、本を読んだだけでいきなり

「できる人」にはなれません。

 


特に、わかりやすい本を読むと

分かった気になってしまい、

「これならできる気がする」と

思ってしまいがちです。

たいていは勘違いですが。

 


自分の手と頭を動かす「実践」を

しないと、自分のスキルになってくれません。

 

 

現場に潜り込む

 

「現場に潜り込む=就職する

(学生の人はインターン?)」ですね。
 

 

未経験者でも何とか採用してもらえれば、

お金をもらいながら(!)技術の勉強をすることができます。
ただし、自分の思い通りに事が進むとは限りません。

 


希望する会社に入れなかった、

希望する現場に配属されなかった、

いざ入ってみたら期待していた環境・待遇と

違っていた、思った以上にブラックだった・・・などなど

 

 

ネガティブな現実が待ち受けている可能性もあるため、

博打的な要素がやや強いかもしれません。

 

 

もちろん合わない環境に長くいるというのは

苦痛でしょうからあなたの判断次第ですが、

そこで自分の技術は成長させられるのか

を問うてみる必要があるでしょう。

 

 

有料のトレーニングを受講する

 

ここまではほとんどお金をかけずに

学習する方法を紹介してきました。

 

 

しかし、お金を使って学習する、

という選択肢も当然あります。

 


独学ではあまりにも効率が悪い、

でも本気でスキルアップしたい、

と考えているのであれば「時間をお金で買う」

という選択肢は別に悪くないと思います。

 


ただし、トレーニングの内容や講師の質は

十分吟味しましょう。

 

 

  • 実践的な内容になっているか(座学中心であればNG)
  • 講師に自由に質問できるか
  • 受講者の評価はどうか

 

といった点を確認する必要があるでしょう。
 

 

受講料の高い・安いはあまり関係ありません。
 

 

安くても内容が悪ければ、時間とお金のムダですし、

高くても有益な内容であればお金を払った価値があります。

 


お金をかけたとしても、そのコストを短期間で

回収することができれば、投資としては「勝ち」に

なります。

 

 

「絶対に元を取ってやる!」という

気概で参加するのが良いと思います。

 

 

ブログに技術記事を書く

 

インプットすることだけがスキル習得の唯一の方法ではありません。
アウトプットすることもまた、自分のスキル習得に有効です。

 


ブログに技術記事を書くと、

そのアウトプットをまとめていく過程で

自分の知識が整理されていきます。

 

 

理解していないことがあれば、

当たり前ですが、書くことができませんから

理解しているつもりの箇所の

洗い出しをできることでしょう。

 


また、ブログで適当なことを書くと

上級者から厳しいコメントが飛んでくる

こともあります。
 

 

そうならないように記事やスライドの内容を

ブラッシュアップしていくと、

それ自体がいい勉強になります。

 


また、厳しいツッコミが入ったとしても、

その指摘が適切なものであれば

自分の勉強になります。
 

 

いいアウトプットをすると

ネット上で話題になり、

あなたの知名度や評価が上がります。

 


うまくいけば、それがいい会社に

転職できるきっかけになったりします。

 


ただし、アウトプットでスキルを向上させるためには、

それなりのクオリティに仕上げることが重要です。

 


「自分用メモ」みたいな形でサンプルコードを

貼り付けるだけでは、スキル向上には役立ちません。

 


その知識を知らなかった「2ヶ月前の自分」を

想像して、その自分が泣いて喜ぶような説明の仕方を

考えてください。

 

 

いろんな方法をバランス良く組み合わせる

 

ここまでいろいろとスキル向上の方法を

紹介してきました。

 

 

しかし、当然「どれかひとつを選べ」

と言っているわけではありません。
むしろ、いろんな方法をバランス

良く組み合わせるのが大事です。

 

 

  • 本を読みながら、自分でコードも書く
  • 新しく学んだことがあれば技術記事にまとめる
  • 現場でコードを書く
  • 週末は勉強会に参加する

・・・といったふうに、特定の方法に

偏らない勉強法を考えてみましょう。

 

 

時間の目安は「3年」

 

スキルを習得するための効率は

ある程度までなら上げることができますが、

放物線を描くように急上昇することはありません。

 


絶対的な時間はかかるものです。
私は今年でプログラマ歴4年になります。

 


いっぱいコードを書いたし、

いっぱい本を読んだし、

いろんな現場を体験したし、

大変な苦労もいっぱいしました。

(もっとそういう思いをしたからもいるわけです)

 


その経験を経ているのでプログラミングを

始めて間もない人から見れば

「大原さんってすげー」と思われても、

なんら不思議ではないでしょう。
 

 

(私自身が生まれながらの天才ではない、

凡人プログラマだったとしても)

 


ただし、こうやって書くと「うわあ、

先は長いんだな。大変そうだな・・・」

とビビってしまう人も出てきそうなので、

目安となる数字をあげます。
 

 

3年です。
プログラミングに限らず、

どんな技芸でも完全未経験の初心者から

「他人から認めてもらえるレベル」に

達するには3年あれば何とかなります。

 


私自身も「会社外から評価された」

と思えたのは3年目ぐらいです。


ただし、そのためには並々ならぬ努力が必要です。
ぼーっと続けて3年、ではなく、

必死でやり続けて3年、だと思ってください。

 


そして、そのために必要なのが、冒頭に挙げた

「技術が大好きで、楽しんで学べること」

という前提条件です。
 

 

大変だけど楽しい、大変だけど好き、

という感覚がないと「必死で3年」を

続けることはできないと思います。

 

 

オールマイティを目指すとしんどい

PHPなどをやっていてときどき思うのは

勉強しなければいけない技術分野が

非常に幅広い、むしろ幅が広すぎる!

ということです。

 

 

もちろん、なんでもできるのが理想的ですが、

インフラからフロントエンド、Webデザインまで

全部完璧に一人でこなすのはほぼ不可能です。

 


最初からそこを目指すと燃え尽きて

しまいそうになるので、自分の好きな分野・得意な分野

と自分の苦手な分野を自覚するようにしましょう。

 


そして、好きな分野・得意な分野を伸ばす方に

注力した方が技術者として評価されやすくなるはずです。
苦手な分野・不得意な分野は得意な人に手伝って

もらった方が、全体で見たときに効率が良くなります。

 

 

5年後、どうなっていたいかを考える

 

あと、やみくもに「スキルを上げたい!」

と考えていても、進むべき方向が

いまいち定まりません。
 

 

そういう場合は5年後の自分を

想像してみるのがオススメです。
 

 

  • 5年後、自分はこんなことができるようになっていたい
  • こういう現場で働けたら楽しそう

 

と想像してみると、

「じゃあそのためにはこんな努力がいるな」

という具体的なイメージがわいてきやすいです。
 


社会人になりたての人は想像しにくいかもしれませんが、

働き始めて2~3年ぐらいすると、いろいろと

現実が見えて「こういう仕事が好き」

「こういう仕事はイヤ」というのが

よく見えてくると思います。

 


そんなタイミングで「自分の5年後」を想像すると、

なかなかよい思考実験になります。

まだ新卒の方はそれまでに基本的に

作りたいと思うものを常に探し続けて

作っていくと良いでしょう。

 

 

スキルを上げると待遇も上げやすい

 

プログラマの仕事はまさに

「手に職」が付けられる仕事です。
スキルを上げれば上げるほど、

お給料が増えたり、

転職しやすくなったりします。

 


うまくいけば私のように好きな場所に

住みながらリモートワークすることも

できる時代です。
 

 

もちろん全員が全員そうじゃないです。

頑張ってるけど報われない、というケースもあります。

私はこれまで自分の努力を待遇面に

還元できていると感じています。
 

 

なので、それが「もっとスキルを上げよう」と

考えるモチベーションの一つになっています。

理系文系は関係ない。必要なのは論理的に考える力。

 

 

プログラマは理系じゃないとできない仕事だと

思われがちですが、別にそうではありません。

 


私は何年かプログラマをやっていますが、

プログラミングで微分積分や難しい物理の公式が

必要になったことは今のところ一度もありません。

 


たとえば、ECサイトの在庫管理や料金計算システムを

作るぐらいであれば、中学校数学の知識で十分です。

(ヘタしたら算数レベルかも??)

 


もちろん、これはプログラミングの対象分野によります

 


たとえば、宇宙科学関連のプログラミングをするのであれば、

理系の知識は必要になってきそうです。

(実際にやったことはないのでわかりませんが。。)

 


じゃあ誰でもできるのか?というと、

そうとも言い切れません。
プログラマとして最低限持っておきたい素質は

「論理的に考える力」です。

 


「AだからB、BだからC。つまり、AだからC。」

という理屈を当たり前と思えて、なおかつ自分で

導き出せるかどうかが重要です。

 


この力が無いと自分で複雑なロジックを組み立てたり、

自力でデバッグをやったりすることができません。


とはいえ、これを「理系にしかない能力だ」と

言い切ってしまったら、「そんなわけはない」

ってみなさん思うでしょう?
 

 

えっ、思わないですか??
おかしいはず。。。

私は経営学部出身なんですが。。。

 

 

まとめ

 

  • 技術が本当に好きか自問する
  • いろんな学習方法を併用する
  • 3年必死で続ける
  • 5年後の自分を想像して頑張る
  • コツコツ続ける。
  • すぐにできないからと腐らない

 

その昔、
「説明されたらわかるけど、自分一人でこの答えにたどり着くのは無理です」
「えっ、そんな短い時間で作れるんですか」

「何もわかりません。」
と言っていた私が言うんだから、たぶん大丈夫です!

 

ということで。

 

そんな方は私が相談に乗ります。

私は相談に乗っていただいた側なので

それを誰かに還元できればと思っています。

 

友だち追加