Are you a Programmer?

Matthias Endler

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

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

彼女は何千ものドイツ(母国)の地図を見てきたはずなのに、ぼんやりとした記憶から再現することはできませんでした。結局、調べ直さなければなりませんでした。

身に覚えがありませんか。私たちは知識の多くを機械に頼って管理しています。何かを暗記するには地道な努力が必要なのです。

プログラマー向けに、似たようなテストを用意しました。

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

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

これをやり遂げられないプロのソフトウェアエンジニアが驚くほど多いことに、きっと驚かれるでしょうやり遂げられない

プログラミング言語の構文の細部を知っていることは重要ではない、と主張する人もいるかもしれません。「検索エンジンの使い方が分かれば、細かいことまで覚える必要はないだろう。チュートリアルのサンプルをコピー&ペーストして直せばいいのに、なぜ白紙から始める必要があるのか。どうせ数年、あるいは数ヶ月ごとに別の言語の構文を学び直すことになるのだから」というわけです。

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

余談ですが、何事においても完璧を目指そうとする人はごくわずかのようです。多くの人は「まあ十分だろう」というところで満足してしまいます。これにはさまざまな理由があるでしょうし、誰かが努力を怠っていると非難するつもりはありません。ただ、そう感じているのは私だけではないかもしれません。

マニュアルなしで道具を使いこなせなければ、職人としては未熟です。簡単な手紙を書くのにも辞書が必要なら、流麗で洗練された文章を組み立てること自体が難しく、ましてや魅力的で独創的な物語を書くことなど望むべくもありません。そんな本は読みたくないものです。

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

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

しかし、良いプログラマーになるためには、

  • 宣言型や関数型など、根本的に異なる2つ以上のプログラミングパラダイムでコーディングできます。
  • 大規模なソフトウェアアーキテクチャの経験があります。
  • オペレーティングシステムや、高機能でできれば拡張性の高いお気に入りのテキストエディタといった、プログラミング環境に習熟しています。

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

これらの必須事項のほとんどは講義では教わらないことも承知しています。多くは自分で学ばなければなりません。しかし率直に言えば、こうしたことが身についていなければ、あなたはプログラマーではなく、まだ初心者なのです。

原文は Matthias Endler により に公開されました。

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