『コーディングを支える技術』の西尾泰和と考える、エンジニアが学ぶべき技術の原理原則

名著として知られる『コーディングを支える技術』を著者の西尾泰和さんと、現役エンジニアの池田惇さんが読み解きます。成長を続けるために必要な「インプットの深度」を探ると、エンジニアとしての生存戦略が見えてきました。

『コーディングを支える技術』の西尾泰和と考える、エンジニアが学ぶべき技術の原理原則

数多くの開発者から支持を受け、読み継がれてきた名著。そこには読み継がれる理由があります。名著には、内容・ボリュームともに充実した書籍が多く、概要に目を通しただけで本を読んだつもりになっていたり、腰を据えて読む時間がなく「積ん読」してしまいがち。「エンジニアが絶対読むべき書籍●選」といった記事をブックマークするだけで読んだつもりになっていないでしょうか。ポイントを押さえつつ内容を深掘りし、名著の根底に流れるエッセンスを開発に活かしましょう。

エンジニア向け名著を読み解いていく当企画。第5回に取り上げるのは『コーディングを支える技術――成り立ちから学ぶプログラミング作法』。プログラムを巧みに使いこなすためには、プログラミング言語を成立させる基礎概念が「なぜ」存在するのかを知る必要がある、という点にフォーカスした1冊です。

著:西尾泰和 刊:技術評論社 初出:2013年5月

2013年の発表以降、多くのエンジニアから支持を集め続ける1冊ですが、今回は同書の著者である西尾 泰和さんにお話を伺い、執筆の背景や若手エンジニアが学び“続ける”ための秘訣を探っていきます。聞き手はアプリエンジニアの池田です。

西尾 泰和(にしお・ひろかず) 1@nishio (写真・左)
2006年、24歳で博士(理学)取得。2007年よりサイボウズ・ラボにて、チームワークや知的生産性を高めるソフトウェアの研究に従事する。著書に『コーディングを支える技術(技術評論社)』『word2vecによる自然言語処理(オライリー・ジャパン)』など。2014年技術経営修士取得。2015年より一般社団法人未踏の理事、2018年より東京工業大学の特定准教授を兼任。
池田 惇(いけだ・じゅん) 2@jun_ikd (写真・右)
スマートフォンアプリエンジニア。iOS・Androidのアプリ開発を行いながらPMや開発チームリーダーを経験。エンジニアとして技術を学び続け、プロダクトマネジメントや人材育成でも活躍したい。

多くのエンジニアの「モヤモヤ」を解決し、多くの人に長く読まれる本を目指した

池田 僕がこの本を初めて読んだとき「プログラミングに初心者だったあの頃に知りたかった!」という項目が並んでいるなと思いました。多くのエンジニアがつまずきがちな要素が正確にピックアップされていますが、どうやってこういった要素を抽出したのですか?

西尾 自分のまわりのエンジニアや、大学生などプログラミングに詳しくない人に「プログラミングを初めて学んだときにつまずいたところは何ですか?」と、実際に悩んでいたことは何かをヒアリングしたんです。

C言語を始めたばかりの人は「for文とwhile文の違いが分からない」、すでに経験が長い人でも「オブジェクト指向が何か分かるまですごく時間がかかった」というようにエンジニアが抱えがちな課題を解決する、というコンセプトの本にしています。

池田 「はじめに」でも「本書の目的はみなさんの『なぜ?』を解決することです」と書かれていますよね。プログラミング言語の概念を幅広く網羅されていて、初心者から中級者の境目にいる方にフィットしそうな内容かなと思ったのですが。

 読者のみなさんは、きっと今までにいろいろな本を読んで「なぜ?」と思ったことがあるでしょう。本書の目的はみなさんの「なぜ?」を解決することです。

(『コーディングを支える技術』p.iii はじめに より)

ご執筆時にも、初心者から中級者の方を読者として想定していましたか?

西尾 想定読者、という考え方はあまり好きではないんです。ターゲットを絞ってしまうと、「このレベルの人はこの知識を学ばないだろう」という決めつけになってしまう。例えばエンジニア2~3年目の方向けの本では、for文とwhile文の違いは割愛されるでしょう。

プログラミングに触れた期間が同じでも、人の知識レベルは違うもの。それなのに、「想定読者」として知識に境界線を引くことにあまり意味はありません。実際の反響を見ても「自分が初心者の頃にこの本があればよかった、後輩に勧めよう」という人がたくさんいる反面、「これは初心者向きではない」という人もいる。このように、「初心者」という言葉のイメージも、人によって異なります。

僕はとにかく、この本を長く読まれる本にしたかった。あえて想定読者を作らないことで、簡単なところから難しいところまでくまなく伝えられるだろうと考えたのです。

10年たっても読まれる本にしたかった

西尾 長く読まれる本にしたい、と考えたのは、処女作『Jythonプログラミング』での、ある苦い経験があったからです。実は本の執筆中にJython処理系のバージョンが上がり、急いでサンプルコードを書き直したんですよ。出版後も言語のバージョンは上がるから、日を追うごとに情報が陳腐化してしまう。古い情報の本だと思うと恥ずかしくて、人には「僕が書いた本だよ」と見せられませんでした。せっかく時間をかけて書いた本なのに。

だから次の本は、5年、10年と時間がたっても陳腐化しないことを目指しました。

3
『コーディングを支える技術』は中国と韓国でも出版されました

池田 確かに、技術書を買う側としても、いつ発行された本なのかはチェックしてしまいます。

西尾 技術は移り変わるもので、情報の陳腐化は避けられません。でも『コーディングを支える技術』は2013年に発売されてから5年近く(2018年4月現在)たっても高く評価されています。

さまざまな反響を感じますが、多くの人に刺さった理由は、技術そのものの解説でなく、「この概念は実際のところ何なんだろう?」という多くの人が抱えがちな疑問にフォーカスしていたからでしょうか。それらの中でも、特に陳腐化しにくい部分を言語化したのです。『コーディングを支える技術』には、情報が古くなることを避けるためのこだわりがあるんですよ。例えば、IBM、HPという略語が読者に伝わらなくなってしまう可能性を想定して注釈を書いた部分もあります。

4

略語を避けた理由は、前例があるからです。僕がこの本を書くときに調査した80年代の文献にはよく「RR」という略語が出てきたのです。レミントンランドという会社です。当時のレミントンランドは、略語で書いても伝わる超有名なコンピュータメーカーでしたが、今知っている人は少ない。こうした知識の風化が当たり前にあるんです。

技術の本質を知るべし

池田 『コーディングを支える技術』は言語をまたぐ原理原則を紹介しています。

特に12章「継承」にある知識は、現場で役立つなと思いました。継承は正しく使えばコードを整理できますが、「なぜ?」を理解しないまま乱用してしまうと逆にメンテナンスを難しくしてしまいますね。

原理原則を知る必要はあるのか?

池田 しかし、エンジニアになりたての頃の自分がこの本を読んでも「この知識、いつ役に立つのかな?」と感じたんじゃないかなと思います。実際に、ライブラリを使ったりコピペをするだけでも最低限動くものは作れるようになる。 エンジニアが知識・技術力を身に付けなくても、ある程度のアウトプットを出せるようになった今、原理原則を学ぶ意義をどのように考えますか。

西尾 技術が進歩すれば、原理原則を知らなくてもよくなります。例えば今の時代に、トランジスタの仕組みを知らなくてもコンピュータを使って仕事ができますよね。

ではいま現在、オブジェクト指向や継承を知らなくても仕事ができるでしょうか。まだ「知らなくても問題ない」と言えるほどには技術が進んでいない。もっと文明が進むと、誰でも適当に書くだけできれいなコードが生成されるようになるかもしれませんが、それはまだ先の話なのです。

池田 原理原則という意味では、「型」の章ではメモリ上での表現方法とそれに伴うデータ保存の効率など、これまで意識していなかった点を学べました。

 本章では、型とは何なのか、どうして必要となったのかを学ぶために、まず数をどうやって表現するかについて学びました。

(中略)

 コンピュータの中の値が整数なのか浮動小数点数なのか、どんな種類の値なのか。この情報をコンピュータに管理させるために、型が生まれました。当初、型には値の種類の情報だけを入れていますが、やがて多種多様な情報を型に入れるようになりました。たとえば、その値に対してどんな操作が可能か、この関数はどんな例外を投げるのか、などの情報を型に入れるようになりました。

今では、静的型付けと動的型付けのように、情報の場所や使われるタイミングが違うものまで含めて「型」と呼ぶようになり、型が何であるかのイメージがつかみにくくなってしまったように思います。どんな情報がどこにあって、どういうタイミングで使われるか、と言う視点で見るとわかりやすいのではなないでしょうか。

(『コーディングを支える技術』p.133-134 8.7)

しかし、知識をいかに実務で活用するかというイメージができにくい章でもありました。なぜ『コーディングを支える技術』では型を取り上げたのですか?

西尾 ここ10~20年ぐらいは型を強く意識しないプログラミング言語がブームでした。PythonやRubyが盛り上がってきたのもこの頃です。しかし今は揺り戻しが起こり始め、Closure CompilerのようにJavaScriptに型情報を付けたり、TypeScriptのように静的型付けの言語で実装してJavaScriptに変換したり、という動きが盛んです。

型というと「CやJavaだと宣言しないと変数が使えなくて不便、なんで宣言が必要なの?」という疑問を持つ人がいます。このように「型があると面倒くさい宣言が必要」といった表面的な理解では、なぜ型を取り戻そうとしている人たちがいるのかを理解できません。

そこで、型とは何かを根本から説明することにしたのです。

コピペだけでは生き残れない

池田 「概念としての型」のように、技術の本質を知っていれば、変更に強くて堅牢なコードを書けるようになれますね。こうした原理原則や概念を知っているかどうかで、エンジニアの成長速度は変わると思いますか。

西尾 成長速度に違いがあるどころか、コピペする“だけ”の仕事はどんどん価値を失います。Google検索するだけで問題の解決方法が見つかり、それをコピペで多くの問題を解決できるようになりました。この流れは今後も進み、コピペだけでできることはどんどん増えるでしょう。

コピペの進化を個人の成長と考えるのは大きな誤解です。誰もが同じように底上げされています。もし、エンジニアがキャリアを重ねてもコピペすることしかできないままだったら、キャリア初期と問題解決能力が大差ないことになる。

だからこそ、検索して答えが見つからない問題を解くことが大切なんです。成長とともにその能力を身に付けていかなければ、情報集積と検索のシステムが進歩するにつれて個人の価値がどんどん下がっていくでしょう。

どうしたら変化に適応できるか、という問いの答えは「新しいことを学び続ける」になるんじゃないでしょうか。

5

どうやって学び続ければいいのか

自分がやりたいと思える分野を突き詰めよう

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く