自身が技術的な学びをつづける理由

凄い才能を持ってるわけじゃ無い凡人プログラマの自分が以下の問いを受けた時

なぜ自分の時間でより多くの技術的な学びをつづけるのか?
(技術書を読むも含む)

この問いに対する答えは簡単で、目の前の仕事をこなすだけでは「動くから問題ないじゃん」レベルの低品質のソースコードしか書くことが出来ないから。

プログラムに求められる指標は沢山ある。
自分がプログラミングをきちんと学んだころより今の方が増えているだろうとも思う。

  1. 正確性(正しい入力に対して、正しい結果が出ること≒バグの無いロジックであること)
  2. 拡張性(機能追加が容易であること)
  3. 保守性(不具合の修正などが容易であること)
  4. 堅牢性(誤った入力に対する備え)
  5. 実行時性能

自分が新人研修や社内勉強会などでプログラミングを教える場合には、この程度の指標を示すことが多い。
納期のプレッシャーがきついプログラマにとって、もっとも重要なことは正確性である。そして、正確性が担保出来た状態が最低の品質ではあるにも関わらず、それが完成だとされるケースも実際には多いだろうと思う。
品質はともかく早く納品することに最大の価値がある場合は、それはそれで正しい。例えば、営業デモ用アプリなど。

どうにかこうにか動くことが最低レベルと思っているエンジニアであれば、実際に動くことは当然としてリリース可能な品質のソースコードとはどうあるべきかと言う視点が生まれる。それは低品質の設計・実装に対する単体テストがオールグリーンであるだけでは無い、保守性(修正容易性)や拡張性ときには可読性(直観性・理解容易性)にもつながると思う。
妙にトリッキーで複雑なロジックになってるコードってのは、やはりバグが潜んでる可能性が高いし修正するのが非常に困難だったりする。
そういう時に安易にコピペして A から A' を生み出すことに罪悪感を感じない、「動くから問題ないじゃん」ほかにやること山積みなのに!って免罪符が頭に浮かぶ人は一度思い出して欲しい。なぜ、ほかにやること山積みになっちゃってるのか。

「動くから問題ないじゃん」と考える人はもしかするとリファクタリングする時間が無駄だと思っているのかも知れない。
動くから問題ないソースコードを作り直したり、カイゼンするコストがもったいないのかも知れないし。
他人が書いた保守性も可読性も無いダメコードに一度も出会ったことが無い幸運な人なのかも知れない。

でも、本当は「動くから問題ないじゃん」と考える人なんて居ないんじゃ無いかと思ってる。
みんな罪悪感を抱えてると思うのな、本当はもっと良いコードを書きたいと思ってるし、バグが無くて保守性も拡張性も堅牢性も兼ね備えた高品質なコードを書きたいと願ってる。ただし、納期のプレッシャーが無いのであれば。

納期のプレッシャーの中で学ぶ時間が取れないのであれば、自分の時間を使うしかない。
それが将来の自分を助け、プロジェクトを助けることになるのであれば当然そうなる。
会社が社員に給料を支払うために売上を確保する日々の業務が、エンジニアの会社での仕事であるとするならば、
直接売上には繋がらない社員教育や技術に対する投資が、エンジニアの自助努力だろうと思う。
日々の会社での仕事で疲弊しきって、家ではそれを回復するための時間しか無いという状況であれば、それは負の連鎖。

ブログでテクニカルなことを堂々と書いてる人ってすげー技術力のある人ばっかりなんで、多くの普通のプログラマはググってコピペとか、へーとかなるほどーとか思った後でそっとブラウザを閉じることも多いと思うけど、そこで踏みとどまって今は読めないレベルのエントリやけどいつかすらすら読める!読める!ってなるのが成長だと思うのな。

自分の仕事を楽しく変えるってのは、そういうことの積み重ねの先にあると思うんだよね。