tech
分からないものを勉強するときに、心を前向きにする方法──カーネルハッカー・小崎資広(5)
サイボウズ・ラボの西尾 泰和さんが「エンジニアの学び方」について探求していく連載の第6回(毎週火曜日に掲載、これまでの連載一覧)。
富士通のエンジニアとしてLinuxカーネルの開発に参加されている小崎資広さんへの「インタビュー:その5」。Linuxカーネルという巨大なソースコードと日々戦っている小崎さんのお話は、きっと「エンジニアの学び方」の参考になるはずです。
本連載は、「WEB+DB PRESS Vol.80」(2014年4月24日発売)に執筆した「エンジニアの学び方──効率的に知識を得て,成果に結び付ける」の続編です。(編集部)
今回は、小崎さんが初めてプログラミングを学んだときの話、そして「数の暴力に対する耐性」を身につけるに至った背景を深堀りしていきます。なお、今回から「tech@サイボウズ式」編集部の風穴さんも話に加わっています。
プログラミングは独学
小崎さんがプログラミングを始めたのっていつなんですか?
僕は大学のときかな。でも本格的にやったのは就職してからですよ。
えっ、就職してからなんですか?
子どもの頃からPC-8001とか、そういうのに囲まれてたとか?
ないない、うちの親は機械に理解がなかったので。コンピュータは全然。
友達にもそういう人は?
なかったですね。
じゃあ、周りにそんなにコンピュータの環境はなかった?
なかった、全然なかったです。
そうなんですか。
しかも僕、大学の専攻は物理学科だったんで、プログラミングは完全に独学です。「プログラミング言語C」を生協で買ってきて読んで「ポインタとかまったく分からん」と悩んだり。
やっぱり「すごい人は、小さいときからすごい環境に囲まれてたに違いない」と思っている人も多いです。そして「自分はそうじゃなかったから駄目なんだ」と、自分で壁を作ってしまう人もいます。小崎さんがプログラミングを学んだのは大学に入ってからだ、という事例が出たことで、ちょっと救いの手になるのかなと思います。
数の暴力に対する耐性
そうやって、趣味のプログラムがギリギリ作れるか作れないかくらいのビギナーレベルで就職しました。そして仕事としてやってみたら「数の暴力に耐性がある」っていう意外な適性を見つけてしまった。
「数の暴力」というのはソースコードがでかいということ?
ソースコードの大規模さ。
「数の暴力に対する耐性」という表現、面白いですね。でも数の暴力に耐性がないとLinuxカーネルに手を出そうとは思えないですよね。数の暴力に対する耐性がつくきっかけになったことって、何か思いつくエピソードってありますか? 例えば読書とか。本を読むのって好きですか?
それはだいぶ。
たくさん読む感じですか?
はい。読みまくってた、乱読派だった。
乱読派、なるほど。そういう「ガーッ」と読む経験が耐性の基礎になってるのかもしれない。
たぶんそうですね、本を読むことで集中する訓練が自然にできていたような気がします。
大量のものを前にしてカチッと集中モードに入る訓練?
そう。
集中力は自分のやりたいことで鍛える
今それができてない人に、できる方法を教えようとすると、どう教えます? 教えられない?
集中してる時間を長く保つ訓練をするには、集中する対象が仕事じゃなくてもよい。まずは自分のやりたいこと、例えばコンピュータゲームを遊び倒すとかでもよい。
まず楽しいもので集中力を保つ訓練をしよう、最初はそこからだ、ということですね。なるほど納得。ついつい最初から真面目に仕事や勉強に集中しようとして挫折してしまう人もいますけど。
それは罠で、単に自分が挫折するきっかけ増やしてるだけ。
最初から真面目にやるんじゃなくて、むしろゲームにのめり込むところからスタート。
そうそう。例えばね。
ゲームとかってどうだったんですか、子どもの頃って。
子どもの頃、ファミコンやりまくりました。僕、ファミコン世代。
ファミコン世代。たくさんやり過ぎて怒られたりとか?
よくありましたよ、ファミコンを親に隠されて。「もうお前にはやらさへん」とか。
中学、高校、大学と進んでいくにつれて、ゲームとか読書とかに対する付き合い方っていうのはどう変わりましたか? やっぱりゲームもいっぱいした?
いや、ひとつすごくいい転機があった。大学に入ったときに一人暮らしを始めて、お金がなかったからテレビ買わなかったんですよ。テレビをやめると、いきなり時間が空いて「これ、めっちゃ集中できるやん」ってなった。
その時間で何をしたんですか?
そのときはまだ、コンピュータとかやってなかったから普通に学校の勉強してました。
真面目だ! そうなんですね、そこで何かのゲームを始めるのかと。
ちなみに専攻の物理は、どういう系の物理ですか? 計算するほうなのか、じっと観察するものなのか。いろいろあるじゃないですか。
量子物理系ですね。
数学を頑張る系ですね。
聞いたこともない数学を頑張ろうとした。でも、数学ってね、適性のない人は、完全についていけないんだよね。
量子物理系とか謎の記号がいっぱいありますよね、ブラ、ケット、ブラ、ケット。
そう、量子物理の最大の罠は、数学からいろいろなものを借りてきているから、物理の教科書だけ見てると「なんでこの式が成立しているのか」が分からないことです。じゃあ、ちゃんと分かるようになろうと思って数学の教科書を買ってくると、完全に深淵な闇が広がってるわけですよ。「しまった、俺に分かるようにわざわざcherry-pickで選んでくれてたんだ」っていうのを思い知って叩きのめされるんだよね(筆者注:cherry-pickは、さくらんぼの熟した実をたくさんの熟していない実の中から摘み取ること。転じて、自分に有益なものをちょいちょいと集めることを指す。Gitのコマンドにもなっている)。
点と点が繋がる成功体験
数学や理論系の物理では、他の分野に比べて積み上げの必要性がすごく強いと思います。教科書の後ろのほうを理解するには前半を理解してないといけないですよね。そういう分野に取り組んでいく上で「こうすればいいんだ」と気付いた方法論とかないですか? まずテレビを捨てるというところまでは聞きましたけれども。
実際のところ僕は理論系としてはかなり出来が良くなかったので、あまり成功した方法論がないんだなあ。僕の中で唯一成功した方法論は、本の乱読癖を応用して、分かんないのでもとりあえず勉強してみることです。分からなくても、あとから点と点が繋がることっていうのがありうるんですよ。
例えば?
実際にあった話で言うと、大学のときコンピュータの学科の人に「宿題の数式がまったく分からんから、ちょっと手伝え」って言われて手伝ったことがあるんです。遺伝的アルゴリズムの話だった。教授の意図としては、数学に深入りすると時間内に終わらないので、参考として式は記述するけど重要じゃないから、と式の説明がわざと圧縮してあった。
端折ってあった。
そうそう。当然僕は遺伝的アルゴリズムとか知らなかったんだけども、式を見た瞬間にこれは解けると分かった。なぜかっていうと、遺伝的アルゴリズムでは、フィールドを升目に切って、隣の升との相互作用でだんだん状態が変わっていく、というモデル化をするんです。これは物理の世界の熱力学でだんだん熱が平均化していくときのモデルとまったく一緒なんですよ。
コンピュータサイエンスの友達が抱えていた宿題の問題と、自分が今まで良く知っている物理の問題とが同じ構造をしているということに気付いたということですね。
そうそう。やっぱり、物理屋さんは心に闇を抱えていて、勉強しても役に立つことはないという思い込みがあるんです。しかし「そこらじゅうをつまみ食いしていくと、意外と役に立つときもあるんですよ」という経験ができた。そうすると、分からないものを勉強するときに心が前向きになれる。
直接役に立たないものでも、意外なところで繋がって役に立つことがある。そういう成功経験があると、分からないものに取り組むときに「きっと役に立つこともあるに違いない」という前向きな気持ちになれると。
そうそう。
本はお友達だった
ちなみに「本を乱読」ってどういう感じなんですか? ジャンルとかめちゃめちゃというか、本当にフィクションもノンフィクションもごちゃごちゃに?
そう、そうです。だって、10代の頃はみんなそうだと思うんですけど、まず図書館の本を順番に読むとかやりますよね。
ちなみに一度に1冊ずつ読んでました?
そうですね。
基本はそれは守るんだ。私は結構、何冊も同時に読んで、飽きると別の本へ。
僕は何冊も同時に読むと、スイッチのコストが上がって、腰が重くなっていって、途中から読まなくなってしまうので。
それよりは大き目な時間を確保してその中で集中して読むことでコンテクストスイッチを起こさないようにするほうが好み、と。
あと僕は不眠症の気があったので、本はお友達だった。
眠れないと読んで、読んでると眠れるようになるんですか? それとも朝まで読む?
朝まではなかなかなかったですね。
本を読んでて眠くなってきたら寝るという感じ?
そうですね。
私もとにかく寝るのがもったいなくて、寝る瞬間ギリギリまで1文字でも読んでいたい気持ちがありました。
布団の中でまどろんでる時間が無駄に感じますよね。
分からなくても気にせず最後まで読む
数学や物理の教科書って、乱読でガーッと最後まで読んだとしても、最初のほうを理解するのにそれなりに時間をかけてないと、最後のほうは分からないんじゃないですか?
何回か読むのが前提。最初の1回目はたぶん本気で勉強するときのモチベーションを高める役にしか立ってない。だけど、とりあえず「こういうふうに筋道が進むのね」というのは分かる。純粋数学は違うかもしれないけど物理にはストーリーがあるんですよ。なので、ストーリーを知っておいたほうが勉強はしやすかった。
じゃあ、一歩一歩のステップは詳細に分からなくても、まずは全体のストーリーを知るために通して読んでみる。そのあとでもう一度しっかり読むという感じですか? もう一度と言わず何度もですか?
正直、そこまで何度もは読めなかったね。それよりは新しい本を読みたくなっちゃうので。
分かります。とりあえず最後までストーリーを読んで、必要になったときにまた読もうと思って本棚にしまっておく感じですかね?
そうですね。
どうも数学とか物理の本って、ザーッと読んだら最後のほうがちんぷんかんぷんになる確率が高いように思うのですが。
まあ、なります、はい。
気にしないの?
気にしない。
気にせず読み進めるタイプ?
それいいキーワード。やっぱり、分かんないとやめたくなるんですけども、気にせず最後まで読むっていうのがすごく重要です。分かるところだけ読んでると、いつまでたっても越えられない壁ができてしまう。分からなくても「見たことがある」という状態にすれば、遺伝的アルゴリズムの例のように全然違うところで繋がるときがある。違うところでもらってきた知識と組み合わせると理解できるときがあるんですよ。でも問題があることを知っておかないと組み合わせるところまでいけないんですよ。
「読んだことがない」と「分かる」の間の、「読んだことがある」のところにとりあえず進むって感じなんですかね。
そうそう。
読んでおけばあとから別なところと繋がる可能性があるけど、読んだことがなかったら何も起こりようがない。
そうですね。特に僕は大学時代は知識欲が強かったんで、普通に生協で買える本はどこかのテキストのレベルだから、俺のレベルでもやりゃあできるはずだ、みたいな。
なるほど、手当たり次第にいろんな分野の教科書を読んでいた、と。
そうですね。
本やゲームに集中することが、後々、数の暴力に対する耐性に繋がったのですね。興味深いです。集中力を養う目的のためには、子どもがゲームをしているときに「ゲームばっかりしてないで勉強しろ」と言うのが正しいことかどうか悩ましいですね。
分からなくてもとにかく読み進めると、あとから点と点が繋がって分かるようになる、という考え方も面白いですね。第2回で話題に出た「ストレス発散法として何も考えずにコードを読む」ときも、同じような読み方をしているのかもしれません。
筆者は「あとから点が繋がる」という話を聞きながらスティーブ・ジョブズの講演[1]を思い出していました。「西洋書道の授業を受けたとき、それが人生の役に立つとは思っていなかった。しかし10年経ってMacintoshを設計するときにそれが役に立った。点と点の繋がりを予測することはできない。だから、点が将来どこかに繋がると信じて進むことが大事だ」 という話でした。
次回は、今までと少し毛色が変わって、コミュニケーションに関する話題です。同調圧力の強い人とどう付き合うのか? 議論タイプのリーダーが率いるカーネルコミュニティと同調タイプのリーダーが率いるコミュニティとはどういう違いがあるのか? そういうお話を伺います。(了)
[1]スティーブ・ジョブズ氏が、スタンフォード大学の卒業式で行ったスピーチ。以下のサイトなどで参照できます。
Text of Steve Jobs' Commencement address (Stanford|News)
「ハングリーであれ。愚か者であれ」 ジョブズ氏スピーチ全訳(日本経済新聞)
「これを知りたい!」や「これはどう思うか?」などのご質問、ご相談を受け付けています。筆者、または担当編集の風穴まで、お気軽にお寄せください。(編集部)
謝辞:
◎Web+DB Press編集部(技術評論社)のご厚意により、本連載のタイトルを「続・エンジニアの学び方」とさせていただきました。ありがとうございました。
◎インタビュー会場として、「イトーキ東京イノベーションセンターSYNQA(シンカ)」にご協力いただきました。ありがとうございました。
変更履歴:
2014年9月9日:「時間内に終わらなので、」の脱字を修正しました。
SNSシェア