ツナワタリマイライフ

日常ネタから技術ネタ、音楽ネタまで何でも書きます。

よりよいプログラマになりたいから「ベタープログラマ」読んだ

はじめに

読んだ。

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

この手のポエム、読むの好きなんですよね。でも社会人になってはじめて読んだ時と感じることは違うわけで、いろんな名著がありますし、これからも発売されていくでしょう。

原著は2014年発売のよう。

shop.oreilly.com

この本の最後でも語られていますが、何より大事なのはエンジニアの態度なんですね。

ひどいプログラマと優れたプログラマを区別しているものは、態度です。それが、単なる適当なプログラマと並外れたプログラマを区別するものです。態度は、技術スキルに勝ります。プログラミング言語の複雑な知識は、保守可能なコードを保証しません。プログラミングモデルを多く理解したからといって、必ずしも優れた設計を生み出すとは限りません。あなたのコードが優れているかどうかと、あなたと一緒に働くのが楽しいのかどうかを決めるのは、あなたの態度なのです。(p346 結び より)

この手の本は何か1つでも心にひっかかるものがあれば儲けだと思うのです。ぼくは「情熱プログラマー」の"1番の下手くそであれ"を今でも毎日思って仕事をしています。

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

では内容を章ごとに振り返っていきましょう。

第1部 you.write(code)

1部ではコードを書くための心構えが主に書かれています。この手の考え方は何度読んでも読みすぎることはないですね。他にも著名な以下のような本があります。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

Clean Coder プロフェッショナルプログラマへの道

Clean Coder プロフェッショナルプログラマへの道

ここではとりわけ個別のものを取り上げませんが、単純にコオードをきれいに保つこと、シンプルに保つこと、無駄なものは生まないこと、という以前から言われていることに加えて自動ビルド、テスト、バグへの取り組み方など少しモダンな内容までカバーできています。

目次だけおいておきますね。

  • 2章 見かけの良い状態を維持する
  • 3章 少ないコードを書く
  • 4章 取り除くことでコードを改善する
  • 5章 コードベースの過去の幽霊
  • 6章 航路を航行する
  • 7章 汚物の中で転げ回る
  • 8章 そのエラーを無視するな!
  • 9章 予期せぬことを予期する
  • 10章 バグ狩り
  • 11章 テストの時代
  • 12章 複雑さに対処する
  • 13章 二つのシステムの物語

第2部 練習することで完璧になる

この章ではコーディングというところから一歩下がって、ソフトウェア開発、(多くの場合にチームで行われる、大規模な開発)に対する態度を示しています。

ここで1番好きなのは「変わらないものはない」ですね。ソフトウェアとしての性質はもちろんなんですが、もっと、人生観というレベルで、まさに変わらないものなんて、ないんだよなぁ、と思うところで深く共感しました。ソフトウェア開発、あるいはチーム開発であればなおさら、変わらないものがないことはみなさん身をもって知っているでしょう。

僕は変化しないことを恐れています。それは自分自身もそうですし、コードもそうです。変化しないコードは恐ろしいし、変化しない自分自身もまた、恐ろしい。

ここも章タイトルを置いておきます。

  • 14章 ソフトウェア開発とは
  • 15章 規則に従って競技する
  • 16章 単純に保つ
  • 17章 頭を使いなさい
  • 18章 変わらないものはない
  • 19章 コードを再利用するケース
  • 20章 効果的なバージョンコントロール
  • 21章 ゴールポストを抜ける
  • 22章 凍結されたコードの数奇な人生
  • 23章 プリーズ・リリース・ミー

第3部 個人的なこと

ここからがすごく面白くなってきます。(個人的には)

(思いの外アツくなってきたのでここからが個人的なポエムが急に入ります)

というのも、僕は勉強コンプレックスを持っているからです。原体験的には、大学の第一志望に落ちたことなような気もしますが、僕は勉強に取り組むし、時間は費やすものの、それに見合う結果を出せていない、というある種の思い込みを持っています。コンプレックスとも言うでしょう。

だからこそ、入社して、自分が1番同期でもできない。社内、部内でもできないのだから、誰よりも勉強しないとダメだ、という、お前、そういうとこだぞ、的な考えてやっぱりガムシャラに勉強をしてきました。

丸3年がすぎて、そのやりかたは間違ってなかった、少なからず、それをしなければ僕は今の何分の1の技術・知識しかなかったと思う。今でももちろん足りないけれど、それでも自分が得意なこと、自分がまわりよりできることは見えてきた。

何より、僕が今、成長できていると、あるいは強みになっているなと思う点は、メンタリティ、本書でいうところの"態度"がもたらす点が大きいと思った。

僕はまわりの同僚より技術力はない、だけど。。。 * 何でも試してみることはできる * 勉強会を主催して、すごいひとに喋ってもらうこともできる * 新しいものを試して、使ってみて、感想とともに広めてみることはできる

自分が学んだことを、こんな風にブログに書いて伝えることもできるし、 メールで部内に情報発信することもできる。

仕事の態度で言えば、属人化を何よりも嫌い、すべての情報をgitlabに置くスタイルにした。 メンバー内のレビューはすべてgitlabのMRで行うようチームへ啓蒙したし config変更の手作業を行わない、行っても気づけるよう技術を導入して推進した。

本当はすごいみなさんを巻き込んで、ほんとうはすごいみなさんが、忙しすぎてできないことを吸い上げて、僕が実現できた。

たぶんね、そこが自分が1番したいことで、1番得意なところなんだろうなあ、

でもそれをするためにはすごくならなきゃ、だから、技術を、学びを、絶対にやめちゃダメだ。続けるんだ。


(ここまでアツいポエム)

というわけで、"学びを愛して生きる" "学ぶことを学ぶ"というのは自分にとって一大テーマなわけです。

そしてもう1つ、前の章でも話しましたが、変化しないことを僕はもっとも恐れています。それは停滞でしかありません。

あぁ、このままでも、多分やっていけるんだろうな、楽だなあと思ってしまえば、それは停滞で、それは死です。

それだけは、常に変わり続けること、常に変化を求めること、常に新しいものに手を伸ばすことだけは、失わないようにします。

章タイトルです。

  • 24章 学びを愛して生きる
  • 25章 試験に基づく開発者
  • 26章 チャレンジを楽しむ
  • 27章 停滞を避ける
  • 28章 倫理的なプログラマ
  • 29章 言語への愛
  • 30章 プログラマの姿勢

第4部 成し遂げる

まさに僕は一生懸命になるしか脳がないのですが、それでも賢くあろうという視点は失ってはいけない。本当にそれはやる必要があるのか、やる必要があることだけやるようにしたい。

そして、何をもって物事を完了させるかということはとても重要だと思う。どこがゴールなの?この問いは絶対やめちゃいけない。終わらせることはとても重要だ。いつまでに、どこまでやるのか。

  • 31章 一生懸命ではなく、賢く
  • 32章 完了したときが完了
  • 33章 今度こそ分かった

第5部 人々の営み

意図を持って、優れたプログラマと一緒に働いてください

これは冒頭で述べた"1番の下手くそであれ"と近いんだよなぁ。今の職場にも優れたプログラマはたくさんいます、いや、全員が僕より優れたプログラマです。恵まれた環境です。

その中で、周囲の優れたプログラマ1人1人の、このひとのこの点がいいよねと、常に考えています。いいとこ探しは得意なんです。いつかそう思われる側になるぞ!

  • 34章 人々の力
  • 35章 原因は思考
  • 36章 遠慮なく話
  • 37章 多くのマニフェスト
  • 38章 コードへの叙情歌

おわりに

何と訳者の柴田芳樹氏は大学の(遠い)先輩でした。著者紹介であったけど私的な時間に技術書の翻訳してるってすごいなあ。。。

ついでにいうと著者のPete Goodliffは音楽家でもあるんだ、すごい。。。

途中エモい話はさみましたが、ソフトウェアエンジニアは態度が大事、技術を示すにはコードが大事。あるべき態度で、コードを書いて、コードで語ろう。そんなエンジニアになります。