最近読んで良かった本(技術書編)

会社で技術書や自己啓発書はタダで買ってもらえることになってるので、それを利用して読んだ本たちです。
何冊かそれを利用せずに自腹で買って読んだ本もあります。
書いてる順番はオススメ順でも読んだ順でもないです。適当。 なお、紹介してる本が手元に無い(会社に寄贈した)ので、メチャクチャ詳しい内容についてまでは書けてません。 書評に移る前に、僕の現状について一応書いておきます。どんな立ち位置の人が読んでるのかというのがわかったほうがいいと思うので。

筆者について

兵庫県にある美容学校を卒業した後、美容師にはならず数年間アルバイトした後に声優のイヴェントに行きたいからと言って都内のIT企業に未経験で就職したオタク。
その時に就職した会社は数年でやめて転職して今に至ります。今でも東京で働いてます。
詳しくは26歳フリーターから正社員になった時の話で詳しく書いてます。
  • IT系の会社で働き始めてからは5年くらい
  • プログラミングを使って仕事してるのは多分ここ3年くらい?正確には覚えてない
  • プログラミングの学習はほとんど全て独学
    • プログラミングスクールや情報系の学校で勉強した経験は無し。
  • 独学で上坂すみれの洋服データベースを開発した。

なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング

この本は、Javaでトランプゲームをオブジェクト指向で実装してみて、その過程でオブジェクト指向で用いられるインターフェースやカプセル化やポリモーフィズムが何故ソフトウェア開発で役に立つのかということを学んでいく本です。 僕が良かったと思う点は以下です
  • 名前や概念だけ知ってても役に立たないカプセル化やポリモーフィズムの利点を実装しながら知ることが出来る
    • 僕も最初はカプセル化はまだしも、インターフェースって何のためにあるのか全くわからなかった
  • 本自体が面白く、図やコードの割合が多く読みやすい
  • サンプルとなっているトランプゲームが多くの人に馴染みがある上に具体的でわかりやすい
    • よくあるオブジェクト指向の解説で動物クラスのようなものをよく使ってるけどあれは抽象的すぎてわかりにくいと思う
僕がイマイチだと思う点は以下です
  • Javaという言語がそもそも今風じゃないと思われそう
  • 本が古いので、Java8以降で追加された機能が一切解説されていない
以下を満たす人にはオススメだと思います
  • Javaの文法は知ってるけど、それ以上のことを勉強したい
    • 全くプログラミングやったことないレヴェルの初学者にはオススメ出来ない
  • カプセル化とかポリモーフィズムって何の役に立つのか、それをソフトウェア開発にどうやって活かすのかを知りたい

リーダブルコード

定番中の定番ですね。
ラノベで言うと、禁書とかハルヒとかそのへん。
アニメで言うとまどマギとかシュタゲとか(原作ゲームだけど)そのへん。

他の人が読んでわかりやすいコードを書くための本です。その「他の人は」1週間後の自分も含まれます。
この本を読んでから、少なくとも変数の命名にはかなり気を使うようになりました。

僕が良かったと思う点は以下です
  • 本自体も読みやすい
    • コードを改善するための本にもかかわらず、図解がとても多くて理解の助けになった
    • 前後の章に関係が無いのでどこから読んでも良い。読み返したくなった時に気楽に読み返せる
    • むしろ、この本を紹介してるこの記事が読みづらい
  • 内容が言語によらない
    • 例えば、サンプルコードがPythonだったとしても、Javaでも同じような手法でコードを読みやすくすることが可能だったりする
  • 明日すぐ使える内容である
    • そんなに高度なことが書かれてるわけではないが、言われないとわからないようなことだったりする
  • 自分がコードを書くためだけではなく、会社の人とかに読んでもらうのにも有用
    • ここに書かれてることを守ったコードをみんなが書くみたいな意識付けのためとか
僕がイマイチだと思う点は以下です
  • 列を揃えるのは個人的にやりすぎ感があって好きじゃないかな……
    • 個人の好みだと思う
    • もしかしたら、列を揃えてる気配りはあるけどその他の部分が絶望的に読みづらいコードを読んだことがあるからかもしれない

UNIXという考え方

UNIXというOSがあるんですけど知ってますか?
昭和終わり~平成1,2年生まれくらいのインターネットのオタクは「かなり昔2chの危機を救った人がいたのがUNIX板の住人だっけ」とか思い出す程度の印象しか無いかもしれません。

いや、この記事をここまで読み進めてる人が知らないわけないんですが。
内容自体はプログラミングと関係ないので、プログラミングをやったことない人でも読めると思います。
単純に読み物としてとても面白かったです。というか、読み物として面白くない技術書が読めなくて困ってます……。

この本の第4章で、移植性を軽視したプロダクトの末路が書かれていたのですが、これを読んだ瞬間「ファミコンのFF3かよ……」と思ったのは僕だけじゃないはず。
いや、FF3が移植できなくて失敗したのは発売した時から考えるとだいぶ未来の話ですが。

僕が良かったと思う点は以下です
  • 面白い
    • まぁもしかしたらUNIXやLinuxやソフトウェア開発に興味ない人が読んでも面白くないかもしれませんが……
  • それでいて、ソフトウェア開発に関して役立つことが書いてある
    • 「できるだけ早く試作する」や「1つのプログラムは1つのことをうまくやらせる」についての話はかなり開発の助けになりました
    • YAGNI(Yout ain’t gonna need it→必要になるまで開発しない)って考え方がとても好きで、音ゲーにも応用してます
  • 古い技術の話だが、今でも役に立つ普遍的な話が多い
僕がイマイチだと思った点はありません。単純に内容が面白くて役に立つ本だったので。