匠の相駕籠

ソフトウェア開発者の日常とオピニオン - メメントモリ公式ブログ 匠の相駕籠(たくみのあいかご)

2018年、どこまで低レベルを学ぶべきだろうか

妻が防災に関する DVD を持ってきたので、

子どもたちを寝かしつけつつ、それを見ていた。

 

2時間ちかくもある長い映像だったが、

わたしの印象に一番残ったのは、

「仕組みを知らなければ、応用が効かない。

 みなさん普段使っているものの、仕組みを知りましょう。」

という言葉だった。

 

例えば、被災したときに、

幼児のオムツがない。ナプキンがない。

 

こういった市販製品は、

内側に吸水素材、外側に防水素材を使っている。

そういった仕組みをわかっていれば、

タオルをビニール素材でくるむなどして、

簡易なオムツが自作できる。

 

 

このような話を聞きながら、

私はソフトウェアエンジニアの端くれとして、

やはり仕事に結びつけて考えてしまった。

 

私たちが使っている日用品は、

過去の先人たちが、いろいろと知恵を絞り、

豊かに生活できるように生み出してくれたものだ。

 

こういったものは、

仕組みを知らなくても使えるから、

私たちは、そういったことに時間をかけずに、

別の問題に集中することができるのだ。

 

 

ソフトウェアの世界にもこういうものはある。

多種多様なライブラリ、オープンソース、ツール類。

オペレーティングシステムだってそう。

 

私たちはフレームワークと呼ばれるものを使うことで、

すべてをイチから自作することなく、

一定の品質のものを、素早く開発することができる。

 

 

では、いまからプログラミングの世界に入ってくる人は、

どこまで低レベルな(より機械に近い概念の)ものを

学ばなければいけないのだろうか?

 

 

例えば、Trello や Stack Overflow のファウンダーとして

著名な Joel Spolsky 氏は、

2001年にこう言っていた。

 

人々が犯す大きな誤りの中には、たとえそれが最も高いアーキテクチャレベルのことであっても、最も低いレベルの単純な事柄に対する貧弱な理解や破綻した理解が原因で生まれているものがある、というのが私の考えだからだ。あなたは素晴らしい宮殿を立てたが、その土台はめちゃくちゃだ。しっかりとしたセメントの代わりに、瓦礫が敷かれている。だから、宮殿は素敵に見えるけど、ときどきバスタブが風呂場の床を滑ることがあり、あなたには何が起こったのか見当もつかない。

Joel Spolsky, 第2章 基本に帰れ, Joel on Software

 

ソフトウェアの世界には有名な議論として、

『車輪の再開発』というのがある。

 

『車輪の再開発』とは、

人が一度作ってくれた「車輪(部品)」を、

もう一度、自分の手で作り直すことだ。

 

一般的には『車輪の再開発』は悪いものだ。

自分がスクラッチで書き上げたプログラムよりも、

多くのひとに使われて、

長い間メンテナンスされてきたプログラムを再利用するほうが、

多くの場合は、楽だし、早いのだ。

(注意:クソみたいな車輪の場合もあるが、その場合の議論はここでは置いておく)

 

この考え方で問題になるのは、

みんな「車輪」を使っているだけになってしまうと、

「車輪」の使い方はわかるが、

「車輪」の作り方はわからなくなってしまうということだ。

 

 

最初の防災の話でも出てきた、

仕組みを知らなければ、応用が効かない、

という状況になりえる。

 

 

Joel 氏が基本に帰れといったのは、2001年。

いまは 2018 年に突入した。

AI の時代に突入し、

これだけ複雑化したソフトウェアの世界を網羅することは、

どんな偉人にも出来ない規模になった。

 

誰か人が作ったものを、組み合わせることで、

新しいものを作ることができる。

フレームワークを使えば、

ツルツルとした美しいアプリケーションを、

手軽に作ることができる。

 

 

私はいま 32 歳。

 

一番最初に学び、身につけたプログラミング言語は C だった。

C 言語を通して、コンピューターの動作を学んだので、

いまの若い人が C 言語を書けないというと、

大丈夫か?と思ってしまう。

 

けれど、私がプログラミングを学んでいた時は、

先輩からアセンブリも書けないのかと言われてたのだ!(デジャヴ!)

 

 

私は正直なところよくわからない。

 

人が作ったものを再利用することは、

それは良いことだ。

 

自分よりも先に、自分よりも賢い誰かが、

すでにその問題を解決してくれていて、

それをただ使えば良いという風にしてくれているのだ。

 

それによって、私たちは別の問題に集中することができる。

 

 

しかしある日やってくるかもしれないのだ。

何故か書いたコードが動かない。

パフォーマンスが著しく低い。

そういう時、低レベルな世界まで降りていかなければならなくなる。

 

 

トレードオフがある。

どこまでが知るべきことなのか、

そして、どこまでは古いシキタリなのか。

そのバランスが、とっても難しい。