エンジニアとして今の自分を形成した本

※以下、エンジニア=ウェブアプリケーションエンジニアとして書いています

エンジニアとして今の自分を形成した本を5冊紹介するという記事を読み、自分だったらどの本を選ぶかなと考えてみた。

この記事を読んでみた感じ、名著が多いな〜という印象を受けた。対象読者に関しては、

独学でプログラムを書き始めた人やエンジニアスクールを卒業したばかりの方というよりは、実務経験を1~3年くらい積んでいるけど次に何を学べば良いかわからず、自分でイマイチ伸び悩んでいると感じている人

と著者も書いている通りちょっと実務経験のある人になっているので確かにそういう人達には丁度良さそうだなと思う。

自分もこのブログの著者が書いているようないわゆる名著の部類に入る本をそういう時期にいくつか読んではいるが、それらはタメになった本ではあるものの"今の自分を形成した"とまではいえないよなーと思う。

本というのは読むタイミングが大切だ。プログラミングを始めたての頃にClean Architectureを読んだ時の感想(ふーんとしかならなかった)と負債に塗れたプロジェクトをくぐり抜けた後に読んだClean Architectureへの感想では全く異なるはずである。

またいくら名著といっても時間と共に古くなってしまう考えや方法が出てきてしまう。技術書であればなおさらだ。よくこういう記事で挙げられる「UNIXという考え方」もその一つで、名著「UNIXという考え方 - UNIX哲学」は本当に名著なのか? 〜 著者のガンカーズは何者なのかとことん調べてみたという記事ではこの本の今では古臭くなってしまっている箇所などを丁寧に検証してくれている。

古くなってしまったからもうその本は読む必要がない、というわけではないからこそ名著であるというのもまた事実である。現代に至るまでの歴史の中で今を振り返るために、また未来を見据えるために重要なヒントをくれたりする。

では"自分を形成した"本とはどういう本なのか、それはこの道へのめり込むきっかけや感動を得た本ではないかなと思う。

それが結果的に名著と呼ばれる本であることも多いが自分にとってはどちらかというとスキルが圧倒的に未熟な頃に読んだ本、いわゆる入門書のようなものがそれにあたるのではないかと考えた。今風にいうと"駆け出しエンジニア"のようなスキルレベルの頃に読んだ本である。

未熟な頃に感動した思い出があるからこそ今もエンジニアとして仕事を続けられていると思う。なのでそういう思い出が詰まった本、思い出補正全開本を"自分を形成した本"として5冊選んでみた。思い出補正全開ゆえ今回選んだ本は決して全てがおすすめできるわけではないので悪しからず。

初めてのRuby

Ruby1.8と1.9に対応している。現在3.1とかを使っていることを考えると感慨深い...。この本を読んだのは大学卒業~新卒入社した位のタイミングだ。当時の会社ではPHPでウェブアプリケーションを(なんとなく)書いていた。しかし世間はどこもかしこもRuby on Railsを使っておりミーハー心からRubyについて学ばねばな〜などと思い手に取った本だ。

完全な初学者が手を出すとわからないかもと思えるような一見無味乾燥な本ではあるけど解説がとても丁寧なので当時の自分くらいのレベルでも理解できた。この本を読み切れたことで技術書を読むことのハードルが下がった。またRubyという言語の面白さとかスピリットみたいなものが垣間見えた気がしている。と同時に各種一般的なプログラミングに関する用語についての理解も深まったのでPHPを書く時やドキュメントを読む時の理解力も上がったという副次効果もあった気がする。

対応Rubyバージョンを見て貰えば分かるとおり今読むべき本ではないとは思うけどあのぐいぐいと引き込まれる体験は確実に今の自分を形成するスタート地点になっていると思う。

Rails3レシピブック

RailsといえばRuby on Railsチュートリアルである。ウェブアプリケーション開発者においては言わずと知れた当時の神サイトだ。当時はまだ全て無料で閲覧できたのでその点もありがたかった。

このサイトでTwitterもどきを作ったり、このRails3レシピブックと睨めっこしながら粛々と自分の考える最強のwebサービスを開発するみたいなことを毎日やっていた。その開発体験から派生してすぐあとに起業することになるわけであるが、その時も開発時にいつも横にはRails3レシピブックがあった。

これまた対応Railsバージョンを見て貰えば分かるとおり今読むべき本ではないものの、当時の自分にwebサービス開発の楽しさを教えてくれた気がするので個人的に思い出深い本であることは確かである。

リファクタリング: Rubyエディション

起業してから一人で我流でwebサービス開発を続けていく中でコードが肥大化していきどうしたもんかね...となってしまう時期がきた。恥ずかしながらこの頃はDone is better than perfectよろしく、動けば良い、さっさとリリースじゃ!とガンガン積み木を重ねていくようにコーディングをしていた。実際自分以外に誰もコードを触らないわけなのでなんとかなっていたわけであるが、それなりにコードが大きくなると自分一人でもこれは不味いなと感じるようなコードが増えてきた。その時に手に取ったのがリファクタリング: Rubyエディションである。

この本はリファクタリング 既存のコードを安全に改善するというオリジナルのRuby版である。元の本の方はJavaで書かれているのだが、PHPとかJavascriptとか当時のweb開発の言語しか触っていなかった自分に敷居が高く感じられた。一方Ruby版の方はすでに慣れ親しんだ言語で書かれているということで臆せず読み始められた。

デザインパターンやOOPなどの実装テクニックについて見聞きしたことはあっても実際にどう使えばいいのかというのがいまいち理解できずにいたが、これを読んで腑に落ちた。実際のコードベースに取り入れやすいという環境やタイミングがぴったり合ったというのも大きいがそれにしても学んだ概念がすぐに実践で活用できたというのは気持ちよかった。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

ある程度webサービスなどが作れるようになるともっとコンピュータの仕組みとか低レイヤーについても知りたくなった。こういうことは本来大学でCSを学んできている人には素地としてあるのかもしれないが自分には全くその手の知識がなかった。

巷でおすすめされている本やいわゆる名著というものを手に取って読んだりはしてみたが難しいしピンとこないものが多かった。元来頭が良くなくて抽象化能力とか理解力が低いという自覚はあったので理論が延々と続くようなちゃんとした教科書が得意ではないのである。

そんな時に手に取ったのがコンピュータシステムの理論と実装 ―モダンなコンピュータの作り方だ。これはNANDという電子素子から始まり、CPU、OS、コンパイル、VMと実装していき最終的にはNAND Tetrisと呼ばれるゲームまで作ろうという本。作ると言っても物理的に回路を構築したりするわけではなくHDLや好きな言語(自分はPython)でコードを書いて組み上げていくという流れになる。とはいえ本格的に論理回路から順に組み上げて一応は一通りのコンピュータがどうやって動いているのかを手を動かしながら知れるのでコンピュータへの解像度が爆上がりして感動した。

OSとか言語を作る部分は流石に全然物足りないのだけど低レイヤーを理解するための足がかりにはなるはず。この本はすでに名著の部類に入ってるし今でも十分おすすめできる。From Nand To Tetrisや巷にすでに実装を行なっている人たちのコードがGitHubやQiitaやZennにたくさんあるのでそれらを参照しながら挑戦すると良いと思う。

Writing An Interpreter In Go

上記の本を読み始めたのと同じ理由でこの本を読んだ。タイトルの通りGolangでインタプリタを書く本である。プログラミング言語を作ってみるというのは誰もがやってみたいことの一つではあると思うが、いきなりドラゴンブックを読めるわけはないのでどうしたもんかと思っているような人に丁度良い本。

これまた解説メインではなくLexer・Parser・Evaluatorを実際に手を動かしながら順を追って解説してくれるのが嬉しい。プログラミング言語を作るっていうのはこういうことなのかと膝を叩く経験ができる。

今だと日本語版でGo言語でつくるインタプリタという本になっているので手に取りやすそう。同じ著者がこの本のコンパイラ版も出しているのでそちらも読むとさらに理解が深まると思われる。

よく考えると最初から最後までしっかりと読み込んだ洋書はこれが初めてだったかもしれない。そういう意味でも自分の身になった良い本だったなと思う。

最後に

エンジニアとして今の自分を形成した本を5冊紹介するという記事を読み、自分にとっての5冊を選んで書いてみた。

今の自分を形成した本というのは必ずしも万人にとって有益な本ではないかもしれないが、その人の人生を垣間見ることができるという意味で酒のつまみにはなるようなネタだなと思った。他の人(もっと自分より年季の入った人)の経験も読みたい。

わからない概念だったものが腑に落ちて一段解像度が上がる体験をすると感動してしまうタイプの人間なので分からないことだらけのエンジニア初期の頃に読んだ本の方が贔屓目で見てしまう。新卒の彼らに技術書をお薦めする時は慎重を期して選出するのだけどある意味おじさんの自分語りのようなレベルならばこういう少し偏った選び方もありだと思う。

そういえばこれを書くために今までどんな本を読んできたかなと振り返ってみたが、圧倒的にインターネット上の記事やドキュメントなどのコンテンツを読んでいる方が多いと思った。

今は当時にも増してweb上のコンテンツがテキスト・動画問わず溢れているので「おすすめの本」というのを挙げることにそんなに意味はなくなっていくのかもしれない。とはいえ媒体が変わっても初心者が成長していく過程でブレークスルーのきっかけとなった思い出の"何か"はあるわけでそれを共有して感慨に浸っているのをみるのはまぁまぁ面白いと思う。

最後に自分がプログラミングで万能感を得た最古の原体験として、このゆーすけベーさんのブログ記事が出発点だったなと思い出したので貼っておく。一人部屋にこもってこの記事を読みながらクローラを書いていた、フォルダに溜まっていく大量の画像を見つめながら万能感に浸っていたのがめちゃくちゃ懐かしい...

tweet
tweet

おすすめ

  1. アニメを観なくなった
  2. 鑑賞が出来ない
  3. 「作るのにどれくらいかかりますか?」と訊かれるとイラッとしてしまう