「プログラマー」と聞くと、どんな姿を思い浮かべますか?一日中パソコンに向かい、黒い画面に緑の文字をカタカタと打ち込み続ける…そんなイメージをお持ちの方も多いかもしれません。しかし、そのイメージ、実は仕事のほんの一面に過ぎないとしたらどうでしょう?
この記事では、多くの人が誤解しているプログラマーの仕事の「本質」を、誰にでも身近な「カレー作り」を例に紐解いていきます。この記事を読み終える頃には、あなたのプログラマーに対する見方が180度変わっているかもしれません!
【この記事から得られること】
プログラマーという職業への誤解が解け、その面白さや思考法に触れることができます。IT業界に興味がある方はもちろん、日常や仕事で物事を効率化するヒントが欲しい方にも、きっと役立つ発見があるはずです。
【見どころ5段階評価】
- プログラマーのイメージ崩壊度:★★★★★
- 「カレー作り」で学ぶ思考法:★★★★☆
- 仕事に役立つ「ライブラリ」の概念:★★★★★
あなたの「プログラマー」のイメージ、実は間違っているかも?
「プログラマーって、ずっとパソコンで謎の文字列を打っている人ですよね?」
これは、多くの人が抱く典型的なプログラマー像ではないでしょうか。あるいは、クライアントからの急な仕様変更に振り回され、苦労している…そんなドラマや漫画のような姿を想像する人もいるかもしれません。
確かに、コードを書くことはプログラマーの仕事の一部です。しかし、サッカー選手を「シュートを打つ人」とだけ説明するのが不十分なように、「コードを書く人」という説明だけでは、プログラマーの仕事の全体像を捉えることはできません。
実は、彼らが最も多くの時間を費やしているのは、コードを書くこと「以外」の作業なのです。その驚きの実態を探るために、少し面白い思考実験をしてみましょう。
もしコンピュータに「カレー作り」を命令したら?
ここに、超高性能ですが、一切の曖昧さを許さない「コンピュータ」という名のシェフがいるとします。彼に美味しいカレーを作ってもらうには、どんな指示を出せばよいでしょうか?
人間には簡単、でもコンピュータには超難解な「指示」
「よし、じゃあカレーを作って!まずは人参、ジャガイモ、カボチャ、お肉、カレールー、福神漬けとご飯を揃えてください!」
一見、完璧な指示に見えますよね。しかし、融通の利かないコンピュータシェフは、こう問い返してくるでしょう。
- 「『揃えてください』とは具体的にどういう行動ですか?」
- 「『買ってくる』という行動の定義を教えてください。玄関のドアを開けるところからですか?」
- 「スーパーマーケットはどこにありますか?どの道順で行けばいいですか?」
- 「そもそも『ニンジン』とは何ですか?」
そう、コンピュータは私たちが無意識に理解している「常識」や「文脈」を一切持ち合わせていません。すべての行動を、原子レベルまで分解して、具体的かつ明確に指示しないと動けないのです。
「玄関のドアノブを右に45度回し、手前に引く。右足を一歩前に出し…」なんて指示をしていたら、カレーが完成するのは一体いつになるのでしょうか。「もう自分で作った方が早い!」と思ってしまいますよね。
20億行の指示書…プログラマーは魔法使いじゃない!
コンピュータは1秒間に20億回もの簡単な計算をこなすことができます。しかし、それは逆に言えば、その20億回分の命令をすべて人間が書かなければならないということ。これは現実的ではありません。
では、プログラマーは一体どうやって、この途方もない作業を乗り越えているのでしょうか。その答えこそが、プログラマーの仕事の「本質」に繋がります。
プログラマーの仕事の「本質」とは?
先ほどのカレー作りの思考実験。プログラマー的な正解の返し方は、実はこうです。
「カレーの作り方を教えてください」
え、質問で返すの?と驚かれたかもしれません。しかし、これこそがプログラマーの思考法なのです。なぜなら、彼らはまず「すでに存在する便利なもの」を探すからです。
正解は「ググる」こと!?最強の武器「ライブラリ」
プログラミングの世界には、プログラミング言語の本質である「まとめて簡単にする」という考え方が深く根付いています。毎回ゼロからすべてを作るのは非効率極まりない。だから、先人たちが作った便利な機能の「まとまり」を再利用するのが基本なのです。
【豆知識】ライブラリとは?
「ライブラリ」とは、特定の機能を実現するためのプログラムをまとめた、便利な部品箱のようなものです。例えば、「画像を表示するライブラリ」を使えば、複雑な処理を自分で書かなくても、たった1行の命令で画像を表示できます。これは、先人たちが残してくれた知恵の結晶であり、プログラマーはこれらの部品を巧みに組み合わせて新しいものを作り上げていきます。
つまり、プログラマーの仕事の大部分は、コードを書く時間ではなく、「最適なライブラリを探す時間(ググる時間)」や「見つけてきたライブラリを自分の目的に合うように改良する時間」なのです。実際のコーディング時間は、業務全体の1割程度ということも珍しくありません。
「カレー作りライブラリ」があれば、それを呼び出すだけ。「カレー作りライブラリ」がなくても、「野菜を切るライブラリ」や「煮込むライブラリ」を組み合わせれば、カレーは作れます。この「探して、組み合わせて、改良する」能力こそが、プログラマーに求められるスキルなのです。
命令の「階層構造」が世界をシンプルにする
この「まとめて簡単にする」という考え方は、命令の階層構造を生み出しました。
- レベル1:「大胸筋に0.1秒、電流を流す」(0と1の世界)
- レベル2:レベル1の命令を大量に束ねて、「腕を伸ばす」という命令を作る
- レベル3:レベル2の命令を組み合わせて、「物を投げる」という命令を作る
このように、原始的な命令をどんどんまとめて、より高度で人間に分かりやすい命令へと進化させてきたのが、プログラミング言語の歴史です。現代のPythonなどのモダンな言語では、「タマネギを切る」といった非常に高度なレベルの命令が、最初から用意されていたりします。
【豆知識】アセンブリ言語って何?
コンピュータが直接理解できるのは「0」と「1」の数字の羅列(機械語)だけです。しかし、人間がそれを書くのはあまりに大変。そこで、機械語と一対一で対応する、少しだけ人間に分かりやすい記号(ニーモニック)を使った「アセンブリ言語」が生まれました。これは、現代のプログラミング言語と、コンピュータの心臓部である0と1の世界をつなぐ、重要な橋渡し役と言えるでしょう。
プログラマーあるある?「車輪の再開発」のワナ
プログラミングの世界には、「車輪の再開発」という有名な言葉があります。これは、すでに存在する便利なもの(車輪)に気づかず、わざわざゼロから同じものを作ってしまう、非効率な行為を指す言葉です。
なぜこんなことが起きてしまうのでしょうか?
「カレー作りライブラリ」を探している時に、それを見落とすことは少ないかもしれません。しかし、「ハヤシライスライブラリ」を少し改良すればカレーが作れる、という事実に気づくのは、意外と難しいのです。あるいは、「野菜スープライブラリ」がカレー作りに応用できると発想できるかどうかは、その人の知識や経験、応用力にかかっています。
この「車輪の再開発」を避ける能力、つまり既存の技術をいかに上手に見つけ出し、応用するかという視点は、優れたプログラマーの条件の一つと言えるでしょう。
上級プログラマーは「辞書」を通読する?
プログラマーの仕事が「調べること」であるなら、彼らと「辞書」の関係も面白いものがあります。実は、プログラマーのレベルと調べ方には、辞書好きの人の行動パターンと似た傾向が見られるのです。
- 初級者:わからない機能や書き方が出てきたときに、その都度調べる。(辞書を必要な時にだけ引く人)
- 中級者:「この機能は、なぜこういう仕様になっているんだろう?」と興味本位で仕様を調べ始める。(辞書を暇なときにパラパラめくる人)
- 上級者:言語全体の設計思想を理解するために、仕様書(分厚いマニュアル)を通読する。(辞書を頭から通読するのが好きな人)
もちろん、すべてのプログラマーが通読するわけではありませんが、深い知識を求める探求心が、より良いプログラムを生み出す原動力になっていることは間違いありません。
プログラマーの仕事は「創造的な問題解決」である
いかがでしたでしょうか。プログラマーの仕事は、決して単調なタイピング作業ではありません。それは、世の中に存在する無数の道具(ライブラリ)の中から最適なものを見つけ出し、組み合わせ、時には改良を加えながら、目の前の問題をいかに賢く、効率的に解決するかという、非常に創造的な営みなのです。
彼らはコードを書いているのではなく、巨大なレゴブロックのセットを前にして、最高の作品を作るための設計図を描き、最適なブロックを探し出している建築家のような存在なのかもしれません。
次回は、さらに一歩踏み込んで、「プログラミング言語は、果たして我々が使う “言語” なのか?」という、さらに深いテーマに迫っていきたいと思います。お楽しみに!
コメント