ガラパゴスタ

楽する。楽しむ。生み出す。

頭が悪いからこそプログラミングをするのだという話

「プログラミングしてます」というと「頭が偉い」人種だと見られますが、僕の場合、頭が悪いからこそプログラミングをしています。プログラミングは頭が悪くても通用する世界です。

どういうかと言うと、プログラミングには「日常生活みたいにモノを扱うのではなく概念を使う」とか「何度もやり直しがしやすい」といった性質があるので、日常生活が苦手な、不器用で要領も悪い、頭の悪い人にも適応できるかもしれない、ということです。

実際、僕はプログラミングが趣味となり、仕事にもなってます。

そんなプログラミングの性質について、いくつか挙げてみます。頭が悪くても取り組みやすい、ということが伝わりましたら幸いです。

一度つくったものを部品化できる

プログラミングは言うなれば数学のようなものです。

数学では、一度苦労して導いた定理(部品)は、以後簡単に使うことができます。定理を組み合わせて、さらなる定理をつくれます。この時、定理をつくった時の過程を気にする必要はありません。利用者は 定理が示す、表面的な事実とルールだけ使えばいい

たとえば 1+2+3+...n の合計は n(n+1)/2 なんです。なぜ n(n+1)/2 なのかという過程なんて覚えなくてもいい。

プログラミングも同じです。「~~という処理を行うプログラム」という部品を一度作ってしまえば、あとは「これは~~を行う部品」とみなして、組み合わせて使うだけで済みます。たとえその部品が、何千行のプログラムコードからつくられたものであっても、使う時は一行です。中がどうなっているかなんて知らなくても構いません。

現実世界の物品ではなく「概念」が使える

プログラミングにおける部品とは、言ってしまえば「~~という処理を行うプログラムコード」に好きな名前をつけるようなものです。付けた名前を記述するだけで、その部品を使うことができます。

もっと言えば 名前だけでアクセスできる とも言えます。

現実だとこうは行きませんよね。モノであればどこに置いているかを覚えておかないといけないですし、「大体この辺にある」とわかっていても、引き出しやら積み上げたものやらと格闘しながら探すことになったりもします。

さらに、見つけたモノを使う時も大変です。たとえば料理ですと、いちいち手で持って、所定の容器に入れて……なんてことが必要です。いわゆる手作業ですね。面倒くさい。原始的です。

加えてやり直しもしづらい。「あ、3 分煮込めばいいのに 10 分煮込んじゃった。元に戻そう」なんてことはできません。

プログラミングだとそんなことはない。 ただ名前を書き並べるだけで済みます。それぞれの名前も、自分が覚えやすいように名付けたものですから、使いやすい。加えて、間違えて書いても、元に戻せます。

名前という概念の記述だけで進んでいけるプログラミング。快適なんですよ。

間違っていたらすぐにわかる

プログラミングが特に優れているところは、間違っていたらすぐわかる ことです。

プログラミングはコンパイルやテストという「書いたプログラムコードの正しさをたしかめる」仕組みがあります。なので、とりあえずたしかめてみて、間違っていたら、そこを修正する。またたしかめて、……というトライアンドエラーを繰り返すだけで済みます。

何十、何百、何千回と「ちゃんと動くかどうか」を調べることができる(どこが違うかも教えてくれる) んですね。これだけ繰り返せば、僕のようなバカでも色々とわかってくる。少しずつ進んでいけます。

現実はそうも行きません。間違っている箇所なんて教えてくれないし、そもそもそんなにたくさんトライアンドエラーもできない。結果として「自分で仮説して、あれこれ考えながら、少ないチャンスを確実にモノにできるよう慎重に行動する」などという、要領がなければできないことが必要です。

僕には無理です。だから恋人もいないし、友達もいないし、小説も、ダンスも、いつまで経っても上手くならない。もしプログラミングみたいに高速でトライアンドエラーできて、フィードバックも得られるのだとしたら、僕はもっと上手くなれるのに……。

論理的に、体系的に、理論的に捉えるということ

僕は不器用で要領も悪いです。

「いや、普通わかるでしょ」

そういうのはわかりません。空気ってなんですか。定義はなんですか。マニュアルを見せてください――そういう人間です。

プログラミングは、そういう世界じゃありません。すべてが論理の上に成り立っている、曖昧さのない世界です。「こういう性質があります」「こういうルールがあります」という前提があって、これを組み合わせることで発展していきます。逆を言えば、その前提――構成される個々のパーツや土台について理解できれば、すべてを掌握できるんです。

世の中、こうはいきません。言葉でノウハウ化できない、感覚的なことばかりだから。そしてそれを理解し、対処するためには、ある種の才能(ここでは器用や要領と呼んでいますが)が必要になる。僕には無いらしい。ホント、何もかもが意味不明で、曖昧で、理不尽です。ちゃんと定義を言えよ。マニュアルを示せよ。空気や感覚じゃなくてさー……怒られ、呆れられる度に、そんな ことを思っていましたね。

プログラミングはひとりでできる

世の中の仕事は「ひとりで作業できる(比率が大きい)もの」とそれ以外とで分けることができます。

僕は頭が悪く、要領も処理能力もホンコツなので、特に多くの人付き合いがからむような仕事は苦手です。一方、プログラミングを使う仕事では、多かれ少なかれ「締切までにこんなプログラムをつくれ」という形態になります。手段は自由です(ここも定められることがありますが)。

最初にゴールさえ認識を合わせてしまえば、あとは自分のペースで進められます。

実際、僕は会社で 一日中、一言も、誰とも喋らないことが割とあります

おわりに

プログラミングの性質についてまとめることで、「プログラミングは頭が悪くても取り組みやすい」ことを示してみました。伝わりましたら幸いです。

もし曖昧でトライアンドエラーもしづらい、この世界に悩んでいる方がいらっしゃれば、プログラミングという道は一種の逃げ道あるいは楽園になるかもしれません。興味が湧いたら、(簡単な道のりではないのですが)ぜひ勉強してみてください。