I am うるぞー

エンジニアが楽しくラクして稼ぐ方法

プログラマーが成長する瞬間は2つしかないと思う

f:id:uruoikun:20171111123730j:plain

どうも、うるぞーです。
最近は一日10~12時間くらいプログラミングをしているのですが、日々昨日の自分より成長しているなぁと実感します。

自分の成長を実感するたびに、つくづくプログラマーが成長する瞬間って2つしかないなと思うんです。

その二つとは、

  • 壁にぶつかった時
  • 素晴らしいコードに出会った時

です。説明していきます。

プログラマーとして成長したい

説明を始める前にちょっと前置きを。

「プログラマーとして成長したいんですが、どうしたら良いのかわからなくて・・・」

よくこういった質問をもらいます。僕もプログラマーとしてもっともっと成長したいと思っているので気持ちはよくわかります。

結論から言うと、ただ淡々とやるしかないんです。日々ひたすらコードを書くだけ。

そんなこと、みんな言われなくてもわかっている。

わかっているのにも関わらず、なんでこういう質問が多いのかを僕なりに考えていて、最近気づいたんです。

自分が成長するイメージ(ポイント)が湧かないのではないかと。

例えば、どういった局面で成長するのかということがわからないので、ただやるだけと言われてもフワフワしていて不安で行動に移せないのではないかと思うんです。
僕も昔は「やるっていったって、どうやればいいのかよくわかんないわボケっ!」と思ってました。

そこで、コードを書いている『どの瞬間』に僕が成長していると感じているのかをお伝えすれば、具体的なイメージが湧いて「なるほどね、じゃあ淡々とやってみます!」と素直に受け入れて、楽しんでプログラミングできるのではないかと思ったわけです。

今回の記事はそんな人たちに向けての内容です。
ではいきましょう。

1. 壁にぶつかった時

これまでにプログラミングを勉強してきた人は以下のような経験はありませんか?

むむ!?なんだこのエラーは!意味わかんねぇ!

いろいろ試したけど解決方法がわからん!イラつくなぁ

いい加減にしろよ、シンタックスエラー!

僕がプログラミングを学び始めた頃、エラーが出るたびにこんなこと言ってました。

こういうエラーや目的を達成するためのコードの書き方がわからないことを『壁』とします。

僕はつくづく『プログラマーとして成長する=壁にぶつかって乗り越える』なのではないかと思うのです。
今年でプログラミングを始めてから6年が経つわけですが、今でもたくさんのエラーと遭遇します。
で、そのエラーを乗り越えるたびに成長を感じます。

どういうことかというと、エラーを解決するたびに「このエラーはこうすれば解決できる」という知識がどんどんと溜まっていくからです。

例えば、プログラミング初心者のうるぞーくんが

合計金額(total)を人数(people)で割って、一人当たりの支払い金額を出力したい!

と思い、プログラムを書いたとします。(Rubyで記述しますが、どのプログラミングでも基本一緒です)

total = 10000
people = 4

puts total/people # => 2500

ここで、bの値を0にして処理をしてみます。

total = 10000
people = 0

puts total/people # => `/': divided by 0 (ZeroDivisionError)

エラーが発生してa/bの結果を見ることができませんでした。
これは「0で割ることはできませんよ」とエラーです。

こうやって自分でコードを書いてエラー(壁)と遭遇できたことで

あ、何かを0で割ることはできないんだ。

と知ることができました。
一度出会ったエラーは基本的には忘れないので、次回同じエラーと遭遇してもすぐに対処することができます。

これが壁とぶつかって、乗り越えた時に得られる「成長」です。
プログラマーとして成長するためにはこのように壁にぶつかって、乗り越えていく必要があります。

次にうるぞーくんは

peopleに0が入らないようにすれば良いのはわかったけど、もし入っちゃったらどうしよう?

と考えました。0が入るたびにエラーが出ていては使い勝手が悪いです。
そこで、

peopleが0だったら計算できないことを伝えてあげよう!

と思い、検索してみると「if文」というものの存在を知ります。
if文の使い方を調べて使用してみます。

total = 10000
people = 0

if people == 0
  puts 'オイオイ、0人で食事に行くことはないだろ、不可能だぜ!'
else
  puts total/people
end

こうして「peopleが0だったらどうしよう?」という新たな疑問(壁)と出会い、乗り越えたおかげでif文の使い方を知ることができました。
このように『疑問→解決』を繰り返していくことによってプログラミングの知識と経験がどんどんと溜まっていき、気づけばスキルがついています。

自分がやりたいことを好奇心持ってトライし、壁にぶつかり続けることが成長の近道です。

2. 素晴らしいコードに出会った時

壁にぶつかり続けて、どんどんと成長していくと大体自分がやりたいことは書けるようになります。
『こうしたいときはこうする』の組み合わせでプログラムは出来上がるからです。

しかしここで気をつけなければいけないのは、既存の知識だけでプログラムを書くのではなく、日々勉強し続けることを忘れないようにするということです。
ある程度経験を積んで、その経験に縛られてコードを書いてしまうと『もっと良い方法』を知らずにプログラミングを続けてしまう可能性があります。

ここに成長はなく、ただの『作業』になってしまうのです。

僕は昔「自分がやりたいことができるようになればいい!」という考えで、より良い方法を探すことを怠ってしまうことがありました。

例えば先ほどの一人当たりの金額を出力するプログラムではif文を用いて回避しましたが、通常は例外処理を行うことが多いと思います。
例外処理とはエラーが発生した際にどう対応するか?ということです。

total = 10000
people = 0

begin
  puts total/people
rescue ZeroDivisionError => ex
  puts "エラーが発生しました: #{ex}" # => エラーが発生しました: divided by 0
end

このくらいシンプルなプログラムであればif文で処理するのでも問題ないかもしれませんが、大規模なサービス開発になると苦しくなってきます。

こういった『気づき』を得るためにはチーム開発をされることをオススメします。
できれば自分よりも優秀なプログラマーがいるチームにジョインすることが大切です。

チームで開発をすると「コードレビュー」と言われる、自分の書いたコードを他のプログラマーがチェックをしてくれるというメリットがあります。
ここで自分が知らなかった書き方や、こうした方が良い書き方というものを知ることができます。

優秀なプログラマーは自分よりも圧倒的に経験値が高く、自分が今まで使ったことがない方法でコードを記述していることが多いです。 今回の例でいうと『今までif文しか使ったことがなかったけど、例外処理で対応することができることを知る』といったような気づきを得ることができます。

チームに属して開発をする以外にも、勉強会に参加したり技術書を読むことで得られることがたくさんあります。
評判の良い書籍は自分の殻を大きく破ってくれることが多いです。

ただ、僕は一番手っ取り早いのはチームに入っちゃうことだと思います。
それが何より刺激を受けるから。

ある程度プログラミングの基礎がわかるようになって、書けるようになってきたなと実感できたら企業なりコミュニティーなりでコードを書くことをオススメします。

【まとめ】2つの成長サイクルを回し続ける

毎日コードを書いていると、ほぼ必ず『壁』にぶつかるし『素晴らしいコード』に出会います。
そのため毎日がプログラマーとしての成長です。
知的欲求が満たされて、毎日が楽しいです。(辛いときも多いけど)

今回はプログラミングをこれから学ぼうと思っている人、学び始めた人向けに書きました。
ぜひこの好循環にハマってプログラミングにのめり込んでもらいたいです。

  • 壁にぶつかり、乗り越える
  • 良いコードに出会い、吸収する

お伝えしたかったことは以上です。

この記事が未来のプログラマーの背中を押せたら幸いです。