25年間ほげほげやってきたエンジニアが、新人に読んでもらっても今さらダメっしょっていうかもう絶版っしょっていうN冊+αを紹介する

昨今は新人にいろんな本を読んでもらってフルスタック的なエンジニアを目指すか何かしてもらいたい系の記事が多いようだ。結構こういうブログ記事や転職サイトの記事も見受けられて、新人なのになんで30冊も読ませるんだよ受託案件の本だのリファクタリングの本だの必携だの必読だの言うんだよっていう噴飯モノも多数見受けられる。そもそもプロ新人なら本読むの当然としてもまず目先のコード読めって話で、コードが読めない奴にコードなんか書けないので「いいコードを読め」が正解なんだけど、まあ本好きな私としても良書の推奨はぜひしたいとは思っている。すいませんタイトルネタはこちらから頂戴。

良書とは

良書の定義なんかない。
はっきり言えば、自分が巡り合って何度読み返してもいい、勉強になるというものが良書だ。
それは人から与えられるものではなく、自分が書店に赴き、紙の重さを噛み締めながら立ち読みを繰り返した挙句に「これは手元に常になければあかんねん」という思いにまで至った本が、良書である。

おっさん推奨本

さて私はおっさんであって、もはや新人の気持ちなどほぼ忘れ去ってしまった。わっはっは。
それはともかく、昔から本が好きだったので(それに今のようにググって何か簡単に即座に技術を知るなんて機会はゼロだった)、何かを学ぶと言ったら、多額のお金をかけて学校に行くか(それにしても私の時代では大学や専門学校以外でそういう場所はほぼなかった)、中・大型書店に行って技術書を探すか(小さい書店にコンピュータ書籍なんか1冊もなかった)、どちらかだった。図書館にも「総記000」の棚1枠にあったぐらいで、ヘタすると教育に力を入れていない市区町村で図書館なんて名ばかりのところだと1冊もコンピュータ書籍なんかない図書館もあっただろう。

そんなノスタルジー汁満載のおっさんが、あえて若者やこれから学ぼうとする初学者に推奨したいけどまず読まない方がいいという本をご紹介したい。
万が一間違って読みたいと思って読んでもらっても全然構わないが、ぶっちゃけこれからの仕事にも学習にもおそらくほぼ役立たないだろうことだけはお伝えしておきたい。げしし。

また、こちらの私の過去記事も参考にされたし、されたし。

書籍紹介

「プログラミング言語C 第2版 ANSI規格準拠」

プログラミング言語C 第2版 ANSI規格準拠

私が中学時代に近所だった埼玉県北本市立図書館でひたすら写経をしていた本、の第2版である。私が写経していたのは初版。
この本がどう凄いのか、読んだことがある人でもうまく語れない人もいると思う。
「プログラミング言語C」は、いわゆるC言語設計者であるブライアン・カーニハンとデニス・リッチーによって執筆されている「バイブル」と呼ばれる本である(その後の言語設計者自身による言語仕様解説書籍を「バイブル」と呼ぶ習慣が定着する)。
まさにこの本は、C言語設計者の手による執筆書籍なのだが、この本だけで、C言語の言語仕様がしっかり解説されている点が、まさに驚きなのだ。
つまり、C言語とは、それほどまでに「だれにでも全容を把握しやすいコンパクトな仕様を持つコンピュータ言語」と言うことができるであろう、ということなのだ(それだけに問題も多くあったし、だからこそその後の規格制定でいろいろ改善されてきた経緯もある)。
この本はA5判340ページ程で収まるものだ。これなら多少大変だが通勤電車でも立ち読みできるサイズなのだ。その程度のサイズに、C言語の仕様がすべて詰まっていると思うと、ぞくぞくするではないか(しない?)。
それはとりあえずさておいても、C言語は、その後に生み出される多くの言語に、良くも悪くも大きな影響を与えたことは、誰も否定できない。C言語を大学で勉強してきた人が、その後サーバ分野ではPHPあたりでC言語のよくない書き方をベースに開発者になったり(よくない!)、C++やJavaにC言語のよくない書き方をベースに開発者になったり(よくない!!)、などなどC言語は多くの影響を与えている。
それだけではない。多くのUNIX系OSはいまだにC言語で記述されている。みんなが仕事で使っている大好き(かどうか知らんけど)なgitだってC言語で作られている。多くの古くから開発されているフリーソフトやオープンソースはC言語で開発されているものも少なくない。
C言語はいわゆるシステムプログラミング言語とも呼ばれることがあるようだ。OSやデバイスドライバ、コンパイラなどのソフトウェアを記述するに十分なスペックと潜在能力を持っていると判断されている。昔は(私の界隈か単なる俗説かもしれないが)C言語は「高級アセンブラ」と揶揄されたぐらいに、高級言語のくせに低レベルプログラミングが可能であったがゆえにOSやコンパイラの実装にも向いているという認識がされていた(と思う)。昨今ではこのシステムプログラミング言語、というかC/C++言語の置き換えを狙ったRustGoなどの新しいパラダイムを取り入れつつ、C言語の古臭いわかりにくい混乱しやすく間違えやすく取り扱いにくい部分を解消した言語が台頭しつつあるようだ。
とまあ、おっさん系だとC言語は語ると酒とつまみと時間がいくらあっても足りないぐらいに語りが長くなるので、もしあなたが若者で、上司が30代後半より上だったら、C言語の話題は絶対に持ち出すべきではないだろう。

「インターネットの起源」

インターネットの起源

はやくもコンピュータ言語から逸脱したが、いまや仕事でもプライベートでも欠かすことのできないインターネットなるものが、はたしてどのように成り立っていったのかを、まさに作ってきた人々の歴史をたどりながら知ることのできる一冊である。インターネットが軍事利用から派生したというのは誤解であるという、いわゆるネット界隈でも話題となった議論だが、そういうことも含めて、インターネットとはなんぞやという歴史が理解できる一冊である。
もちろん、インターネットの歴史を知ったところで、よきインターネットの利用者になれるか、あるいは、よきインターネットを活用した開発者になれるか、とは異なる。しかし歴史を知るというのは、その道のプロとしては不可欠な事項でもあると思っている。自分がいま使っている道具の生い立ちを知らずして使っていて、何がプロかということもある。キョービ、アイドルですら狩人を宣言する時代ですよ。IT技術者が本業たる己のツールの由来を正しく理解せずして恥ずかしい以外の何がありますか、ってことなんだよね。まあ、この気持ちが理解できない人は、たぶん読むべきではない種類の本ではあろう。これを読まずともエンジニアはできるし、プログラミングもできるし、ネットワーキングもできる。
だが…まあ、これ以上の議論は、やめておこう。

「新The UNIX Super Text 上 改訂増補版(上・下)」

新The UNIX Super Text 上 改訂増補版新The UNIX Super Text 下 改訂増補版

もう笑っちゃうぐらい、いまさら感のある本だが、これはかなりベストセラーだった書籍。ここで紹介しているのは「新」「改訂増補版」だが、これの前に出ていた初版本もかなり売れた。
そもそもUNIX系の本なんていまでこそ普通に多数出版されているが(といってもLinux系ばっかりだが)、昔はUNIX系の書籍でコマンドから中身までしっかり解説している本は数少なかった。だって、売れないんだもん。売れない本なんか多く出版されない。
その中でもベストセラーとなったのは、この本である。
ちなみに私は改訂増補版は持っていなくて、しかも初版本は上下とも持っていたが、昔の職場に置き去りにしたままなくしてしまった。もったいない。
まあ、1996年、私が23歳の頃に初めて携わったUNIXとネットワーク管理の仕事で、右も左もわからず、先輩に聞いても自分で調べろと怒鳴られる古き良き(悪しき?)UNIX文化で育ってきた私にとってこれはUNIXの勉強をするための必携の書でもあったし、同時に世の中の多くの初学UNIXerの必携書でもあったようだ。
もはや中身を開いて確認することは私にはかなわないが(買い直せばいいだけだが)、内容の多くはいまだ有効であると思う。もちろんUNIX系で今でも十分に(技術的にも精神論的にも)学ぶことができる書籍はいくつかまだ現存するが、より技術面で多くの学びがいまだにある書籍の1つではないかと個人的には思っている。

「はじめて読む8086」「はじめて読む486」

はじめて読む8086―16ビット・コンピュータをやさしく語る (アスキーブックス)はじめて読む486―32ビットコンピュータをやさしく語る

ほーらきたきた、おっさん色満載の書籍。アスキー出版局なんてもうカドカワに吸収されてないもんね。
っていうのはさておき、いわゆる今でもまだまだ台頭中のPC・サーバ用プロセッサメーカーであるIntelの代表的なプロセッサの解説本である。
8086はMS-DOSなんていう、若者的には「DOSプロンプト」「コマンドプロンプト」という名でしか知りようのないものがかつてOSとして呼ばれて(おい誤解を招くぞ(笑))いた時代に跋扈していたCPUである。
486は、その後のコンピュータ社会を作る上で大きな礎となった80386(386)というCPUの上位互換CPUで、より完成されたものという位置付けである。このプロセッサの次に生まれたのがPentiumというプロセッサで、それ以降のIntelのプロセッサ技術や販売戦略は多岐に分かれ、486以前までの漠然とした直線的プロセッサシリーズのリリースではなくなっていく。そういう意味でも486というCPUは大きい位置づけを持っていたのではなかろうか。
とはいえ486プロセッサが持つ能力はいまのInetlのプロセッサも当然持ち合わせている。というか、その拡張でしかない。つまり、486を学ぶことで、それ以降のIntel CPUの技術の基礎は理解できるということである。
Intel CPUの技術は、昔のPDPのようなワークステーション系のマイクロプロセッサではないコンピュータシステムで採用されていたアーキテクチャをベースにしている部分もあり、一時期はCISC/RISCという位置づけで世間的に優劣論争もあったほどのRISCアーキテクチャも吸収して生き残ってきた。いわば多くのプロセッササバイバルに勝ち残ってきた強者であるとも言えるのではないだろうか。
その基礎部分を学ぶには、良い本ではないかと思われる。ちなみに私が「はじめて読む486」を読んでいたのは20歳の頃である。486のSONY Newsマシンが出たという雑誌記事を読んでいたのは高校生の時にバイトをしていた「すかいらーく」のまかない飯を食ってるときであったのは今でも忘れない。ああおっさんだなぁ…。

「詳解UNIXプログラミング 第3版」

詳解UNIXプログラミング 第3版

私が持っているのは第3版ではないが、著者のリチャード・スティーブンス自身が第3版というものを書いたわけではなく、最新版と原著のエラッタを吸収した再翻訳版のようだ。UNIXプログラミングをする者なら読んでいて当然の本である。
リチャード・スティーブンスによる書籍は数多いわけではない。が、彼の書籍はすべてがUNIX系OSの開発者にとってのバイブル的書籍になっている。彼は20世紀末に惜しくも亡くなったが、技術系メーリングリストなどでその訃報はすぐに流れ、当時勤務していたところで上司が「おい、リチャード・スティーブンスが…」と入ってきたので「亡くなっちゃいましたね…」と私がすかさず相槌を打ったのは今でも忘れない。

「はじめてのコンパイラ」

はじめてのコンパイラ - 原理と実践

この記事で紹介する中では10年前(2007年)に出版された書籍であるため、もっとも新しい書籍の紹介となるのではなかろうか。
昔からコンパイラに興味があって、コンパイラの作り方の本はいろいろ読んできた(のに何でコンパイラを作らないのかは聞かないでほしい…(苦笑))。
その中でも何度か繰り返し読んだ本でもある。また、巻末にTiny-Cのコンパイラ全ソースリストが掲載されている(出版社サイトからソースはダウンロード可能)。そういう意味で大きな価値のある書籍ではあるだろう。ただし大学の授業の教材的な感じの書籍であるため(そうでもないか)、読み進めるには困難がある人もいるだろう。
OSやコンパイラの自作はエンジニアなら一度は夢見ると言われる2大システム系ソフトウェアだが、OSよりはコンパイラの方が作りやすいだろう。が、理解しがたい部分も当然多く、その基本はやはりコンピュータサイエンスに依る部分も多いわけで、そこに技術的興味や好奇心が向かなければ、単に夢として終わるにとどまるであろう。かく言う私も20歳でZ80アセンブラで逆ポーランド記法プログラムを書き、10年ぐらい前にCで四則演算の構文解析を書いたぐらいで先に進んでないという情けない状況だが、コンパイラはそのうち必ず作りたい。そうだ、明日作ろう(ぉぃ)。

「C言語による最新アルゴリズム事典」

C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)

アルゴリズムに関する書籍は昔から多く出版されている。多く、といっても本当に多数っていうわけではないが、なんだかんだでトレンドの言語をサンプルコードに使ったアルゴリズム解説本は登場している。
そんな中で私がアルゴリズムというものに興味を抱き深く知るきっかけになった、LaTeXで有名な三重大学の奥村晴彦先生による書籍だ。まだ当時は高校の先生をされていたと思うが、圧縮展開プログラムのアルゴリズムを始め各アルゴリズムに精通し書籍を執筆されている。というか、数学者でもあるのでアルゴリズムとの深い関わりはなんら不思議ではないだろう。
執筆者はともかくとして、アルゴリズムとはプログラミングと切っても切り離せないものである。逆に、プログラミングだけできる人は多いが、アルゴリズムをしっかり理解した上でコードを記述できる人が多いかというと疑問であろう。かく言う私もその一人かもしれないが、アルゴリズムや計算量について意識を向けられるエンジニア・プログラマであるかどうかは、かなり大きな違いがあるのではなかろうか。
ここに挙げた書籍はいま入手しにくいものなのだが、アルゴリズムは(流行り廃りはあるかもしれないが)時間を経ても使えるものが数多い。だからこの本に書かれていることを、いま新たに執筆されたアルゴリズム本で読めば、同じことか、それより改良されたよいアルゴリズムが紹介されていることだろう。アルゴリズム本は、1冊は持っておく方がいい。できれば疑似コードでもいいのでサンプルコードが載っているほうがいいかもしれない。

「詳解TCP/IP〈Vol.1〉プロトコル」

詳解TCP/IP〈Vol.1〉プロトコル詳解TCP/IP〈Vol.2〉実装詳解TCP/IP〈Vol.3〉トランザクションTCP、HTTP、NNTP、UNIXドメインプロトコル

さて、おっさんホイホイ記事の最後を飾るのは、さきほど登場したリチャード・スティーブンスの名著である。
ソケット通信などの基本をC言語でがんがんばりばり解説してくれている名著である。Vol.1だけでも十分すぎる内容で、きっと普通の人のならVol.1だけで足りる。私も全部持ってるけれどちゃんと読んでるのはVol.1だけだ。Vol.1ですら、しっかり読めている自信がない。必要になったら読もうと思って、読まずに置き去りの章が多数ある。
インターネットとはTCP/IPが基本にある。が、案外開発者でもこれを理解している人は少ないようだ。
私が4〜5年前に出会ったサーバプログラマはHTTPしか知らず「HTTPよりも、TCPっていうもっといいプロトコルがあるんだって」っていう、普通に聞いたら赤面するような発言をした若者がいた。そのぐらい、インターネットとは身近でありながら、HTTP以外は深く知られていないという裏返しなのかもしれない。
いまでこそWebSocketなるものが登場しているが、これとて単にHTTPを別の通信規約に置き換えるだけのものでTCP/IPを理解したことにならない。本来我々が恩恵を受けている技術基盤をプログラミングの観点から理解するためにも、この本は非常に貴重である。この本はもはや手に入れるには困難か高価になってしまったかもしれないが、これに代替する書籍はまだあるかもしれない。ただ、これほど詳細には書かれていないだろう。もっとも、そこまでの書籍がなくても一般の開発者は通信系のアプリケーションが普通に実装できる時代である、という哀しくも切ない裏返しなのかもしれない。

ということで、おっさんしか喜べない技術書紹介をしてきたけれど、機会があれば次回は本当に若者に役立つであろう、というか最近の書籍で私が有用で勉強になったものを紹介してみたい。
まあ、これこそ、巷で紹介されている「新人に読んでもらいたい999冊」的なブログと重なる記事になるかもしれないけれど。

コメントを残す

メールアドレスが公開されることはありません。