Are you a Programmer?

Matthias Endler

あなたはプログラマーか?

原文は Matthias Endler により に公開されました。 このブログを購読する

私の地理の先生が、大学での最初の講義のときの話をしてくれたことがある。導入として、教授は学生たちに何も見ずに、できるだけ正確にドイツの地図を描くよう求めたそうだ。驚いたことに、彼女は地図をほとんど詳細に描くことができなかった。国の形さえ曖昧だったという。

何千ものドイツ(彼女の母国だ)の地図を見てきたはずなのに、おぼろげな記憶からそれを再現することはできなかった。結局、調べ直さなければならなかったのだ。

身に覚えがないだろうか。私たちは知識の多くを機械に管理させている。何かを暗記して自分のものにするには、ハードワークが必要なのだ。

プログラマー向けに、同様のテストを用意してみよう。

好きなプログラミング言語を使って、平均計算量が O(n*log n) となる正しいソートアルゴリズム(ヒープソート、クイックソート、バケットソートなど、何でもよい)を、外部ツールの助けを一切借りずに紙に書きなさい。

そして正しいというのは、紙に書いたものをそのまま打ち込んで、一切修正することなくバグなく動くことを意味する。

これをやり遂げることができないプロのソフトウェアエンジニアが驚くほど多いことに、あなたは驚くだろう。

こう反論する人もいるだろう。プログラミング言語の構文の細部なんて知らなくてもいいじゃないか、と。「検索エンジンの使い方さえ知っていれば、細かいことをいちいち覚える必要があるのか? チュートリアルのサンプルをコピー&ペーストして少し修正すれば済むのに、なぜわざわざ白紙から始める必要がある? どうせ数年、あるいは数ヶ月ごとに別の言語の構文を一から覚え直さなければならないんだし」

しかしそれは思い込みだ。たった一つのプログラミング言語でも本当に深く理解していれば――たとえFortranやCOBOLのような古い言語であっても――その知識だけで十分に稼ぐことができる。たとえば1975年にCを始めたとしよう。その構文は今でもほぼそのまま使える。40年近く経った今でもだ。テキストエディタも同じだ。EmacsもVimも、どちらも何十年もの歴史がある。鍛え抜かれてきたツールだ。どちらを好むかは構わないが、人生の大きな時間を道具と共に過ごすのだから、習得に時間を投資する価値はある。

余談だが、何事においても完璧を目指す人はごくわずかであるようだ。多くの人は「まあ十分だろう」で満足してしまう。これにはさまざまな理由があるだろうし、宿題をしていないからといって誰かを責めるつもりはないが、この感覚は私だけではないはずだ。

マニュアルなしで道具を使いこなせなければ、職人としては三流だ。簡単な手紙を書くのにも辞書が必要なら、作家になるのは難しいだろう。優雅で流れるような文章を組み立てること自体がすでに難関なのに、まして読者を引き込む独創的な物語など書けるはずがない。そんな本は読みたくない。

では、何がプログラマーたらしめるのか?

  • 少なくとも一つのプログラミング言語を隅々まで熟知している。
  • ソートや探索といった標準的なアルゴリズムや、木構造や連結リストといったデータ構造を、その場で堅牢かつそこそこ高速に実装できる。
  • 計算量理論や、再帰やポインタといったプログラミングの概念について、少なくとも基本的な理解がある。

だが、良いプログラマーになるには、さらに次のことも必要だ。

  • 少なくとも二つの根本的に異なるプログラミングパラダイム(たとえば宣言型、関数型)でコードが書ける。
  • 大規模なソフトウェアアーキテクチャの経験がある。
  • OSや、好みの高機能なテキストエディタなど、自分のプログラミング環境に精通している。できれば拡張性の高いものが望ましい。

そしてこれは氷山の一角に過ぎない。「学ぶことが多すぎる!」という声が聞こえてきそうだ。ゆっくり始めればいい。Vimを始めるのに最初に必要なコマンドは3つだけだ。iESC:wq。初日はそれだけで十分だ。

こうした必須事項のほとんどは講義では教わらないことも分かっている。その多くは自分で学ばなければならない。だが現実を直視しよう。こういったことを知らなければ、あなたはプログラマーではない。ただの新人だ。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント