プログラマなら当然知ってるよね?でもぼくは知らんので振り返りしてみた

anopara.net

↑元ネタ。

この手の話は定期的にあがり、そしてだいたいGW前後に発生してそのたびに「あーこれぼく知らないな…」とかよく思ってたんだけどとりあえず「これ読んどけば頭の片隅にはある」レベルを目指すというめちゃくちゃ志の低いやっていきと今何を理解してるのか振り返りとして書き出して来年どうなってるか計測しようと思って書き出した。

あともしこのエントリをみて「これ読んどけ」みたいなのあれば教えてくれると助かります。 他にも海外版これ読んどけがあったのでそれもあわせて読んでおけばだいたいのところはカバーできるんじゃあないかという目論見です。

medium.freecodecamp.org

プログラマだったら当然知っててほしいと思う知識

データ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

ブログなどでよく見かけるシリーズ。未読。 当たり前なんだけどデータ構造、だいたいアルゴリズムとセットで書籍として語られることが多いのでこれが一番いいというわけではないが以前なにかで紹介されていて気になって積読リストにいれたところで止まってる。

計算量(計算複雑性)

正直よくわからない。 専門学校で習った気はするんだが改めてこれを勉強し直そうと思ったときに必要な書籍ってなんだろう?ってなった。 数学とかCSあたりの書籍を当たればいいのだろうか?

おすすめあれば教えてください。

アルゴリズム

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)

定本 Cプログラマのためのアルゴリズムとデータ構造 (SOFTBANK BOOKS)

アルゴリズムと聞いて思い出す1冊なんだがよく紹介されているという覚え方で読んだこと無い。 最近よくアルゴリズム関連の書籍がいっぱい出ていたのでこれがいいというのが変わってそうな気もする。

数値計算

おすすめあれば教えてくださいシリーズ。

これは技術書というより数学的分野かなと思うので高校数学とかの教科書読めばいいかも?

グラフ理論

おすすめあれば教えてくださいシリーズ。

有向・無向グラフ、木、ループ、カット、彩色、結婚定理とかの基礎の理解

とあるので多分そういう名称だと知らずに認識している(Not理解)可能性がある。 グラフ理論、データ構造とかの亜種というかそういう話の流れで語られてそう。

理論計算機

おすすめあれば教えてくださいシリーズ。 正規表現に関しては使っているし列挙されたなかでは理解できる。 他は名前聞いたことあるレベルからそもそも知らないまで幅広すぎるので正規表現以外知らないといってしまっていいかも。

セキュリティ・暗号化

歴史的経緯とかどういう理屈で暗号化されているのか?などが非常にわかりやすかった。 専門職でないのでわからないけどぼくが暗号化で上げるとしたらこれが一番最初にあがる。

プログラミングパラダイム

それぞれのパラダイムには理由があるので1冊でざっくり知るのが難しそう。 Clean Architectureにそれぞれの歴史的経緯とか書かれていたのでニュアンスとしては1冊選ぶならそれかも?

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Clean Architecture 達人に学ぶソフトウェアの構造と設計

並列・非同期処理の基礎

以前いた職場でJavaだし、古いけどめちゃくちゃいい本だよとおすすめされた本。未読。

できれば知っておいたほうが良いと思う知識

ソフトウェア工学

DDDの文脈だとこれらが定番なのかな。エリック・エヴァンスのほうは読んだ。実践ドメイン駆動設計は未読。

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

実践ドメイン駆動設計 (Object Oriented SELECTION)

実践ドメイン駆動設計 (Object Oriented SELECTION)

DDDではないがユースケース駆動開発実践ガイドを以前ビブリオバトルで紹介されたのでいれるとしたらここかなと思って追加した。

ユースケース駆動開発実践ガイド

ユースケース駆動開発実践ガイド

最近読んだ本で良書だなと思ったのがClean Architecture。 ただ一部納得いってないのと飲み込みきれてない感じがすごくするのでまた再読する予定、一応読了済み。

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Clean Architecture 達人に学ぶソフトウェアの構造と設計

現代コンピュータの性能

正直詳しくないのでどれくらい知ってることが効果的なのか?とかよくわからない。 マルチコアとシングルコアによる違いとかはTechブログなどで「○○だと1コアしか使わないのでマルチコアを活かしきれない」みたいなのを呼んでるくらいのざっくりした認識でしかないのでなにか読んだらまとまった知識が手に入る…みたいなのあれば知りたい。

CPUの仕組み

CPUの創りかた

CPUの創りかた

古い本だけどこれがいいと聞いたことがある。 正直ハードウェア周りは疎いのでわからない。

OSの仕組み

30日でできる! OS自作入門

30日でできる! OS自作入門

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

両方とも読みたいとは思うもののなかなか読み出すきっかけがつかず積読になってる。 読んだ人の評価などをみてるとどちらも良さそうな雰囲気は感じる。

ネットワーク(7階層モデル, IP, TCP, UDP, HTTP, HTTPSなど)

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

昔そーだいとか言う人に雑に「なんかおすすめのこれ読んどけ!みたいな本あります?」って質問したら3冊くらいタイトルが返ってきた唯一未読な本。 未読なので当然読めてない、ごめんなさい。

セキュリティ

防ぎ方、というよりはどういう攻撃経路があってなんでそれが可能なのか?みたいなところっぽいので前述のセキュリティーとは多分違うコンテクストっぽいんだけどあってるかわからん。

あとは気になってるレベルだけどこの2冊が良さそう。

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習

ハッカーの学校

ハッカーの学校

統計・データマイニング機械学習系の基礎知識

正直全くわからない。 ここ数年?機械学習系の書籍が大量出版されているせいでどれがいいとか悪いとかすら判断がつかない。

手元にあるのはこれだけ、これだって数学的知識の欠落が激しくてなかなか読み進められていない。

その他シリーズ

海外版これ読んどけシリーズにリストアップされてたけどどこに入れればいいのかわからなかったやつら。

Clean Code アジャイルソフトウェア達人の技

Clean Code アジャイルソフトウェア達人の技

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

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

Robert.C.MartinのCleanシリーズ。未読。 Clean Architectureが良書だったのでそのうち買って読もうと積読リストの上位に追加した。

Refactoring: Improving the Design of Existing Code (2nd Edition) (Addison-Wesley Signature Series (Fowler))

Refactoring: Improving the Design of Existing Code (2nd Edition) (Addison-Wesley Signature Series (Fowler))

去年?だかに英語で第2版が出て話題になったやつ。日本語版出たらそっちを買う予定なので当然未読。

オブジェクト指向における再利用のためのデザインパターン

オブジェクト指向における再利用のためのデザインパターン

これ読んどけと紹介されたが日本だと↓のほうがよく紹介されている気がする&Java言語で学ぶ〜のほうは購入済みなので読むならそっちかな。

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

明確にこっちのほうがいいとかあればコメントかブコメで指摘をお願いします。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

読む人によって感想が違うのが面白いが個人的にはそういう生き方はあっていいと思うがぼくにはあわなさそうという感想を抱いて途中で読むの辞めた。

The Effective Engineer: How to Leverage Your Efforts in Software Engineering to Make a Disproportionate and Meaningful Impact

The Effective Engineer: How to Leverage Your Efforts in Software Engineering to Make a Disproportionate and Meaningful Impact

完全に知らないやつ。 ちょっと興味があるんだけど英語だし、どうもプログラミングに関係するというよりはSoft Skillsっぽい雰囲気を感じているのでそうすると英語で読みきるのが難しそうだなと感じて尻込みしている。

新装版 達人プログラマー 職人から名匠への道

新装版 達人プログラマー 職人から名匠への道

購入はしたんだけどまだ未読。

まとめ

海外でも名著と呼ばれるものはさほど差がないのが面白いなと思ったのとCSを学んでおらず実践でそのばその場で知識のつまみ食いをしてきたのでやはり不足している知識が広範に渡っているのが見える化されたのが厳しい。

来年の今頃までにいくつかの書籍を読んで少なくとも「頭の片隅にはある」という状態にレベルアップしておきたい。

あと日本だと定番のパール本が海外だと上がっていなかったのが少し面白いというか不思議に思った。未読だけどいい書籍らしいといろんな人がいうので当然リストアップされているだろうと思ったらなくてビックリした。

珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造

珠玉のプログラミング 本質を見抜いたアルゴリズムとデータ構造

追記分

みんなのコンピュータサイエンス

みんなのコンピュータサイエンス

目次見たかんじおっしゃる通り満遍なくフォローしてくれてそう。 ざっくり理解するのには良さげ。

更に追加情報をもらえたので追記。

詳解 システム・パフォーマンス

詳解 システム・パフォーマンス

詳解システムパフォーマンス、各社の輪読会とかで話題になりますね。ぼくが観測した範囲だとHatenaさんとかMisocaさんとか良さそうという気持ちはありつつあの厚みに心砕けそうです。