プログラミングと料理は驚くほど似ている

僕はプログラミングを2年以上、料理を3ヶ月ほど笑、これまでにやってきましたが、この両者は本当に驚くほどよく似ています。

僕はこの記事で何を伝えたいかというと、プログラミングって全然難しくないんだよ、料理と一緒なんだよ、っていうことです。プログラミングができないことと、料理ができないことは、その根元が共通です。すなわち、「やってないだけ」なんだよってことです。

プログラミングも料理も、レシピさえあれば作るのは簡単

料理ってレシピ通りに作りますよね。プログラミングも同じで、レシピ通りに作るんですよ。

この場合のレシピとは、プログラミング言語の文法のことであり、業界内ではデファクトスタンダードとなった設計方法であり、ベストプラクティスでもあります。

料理はレシピさえあれば、作るのは簡単ですよね。もちろん若干のカスタマイズはありますよ。ここでコショウを強めにしとこうとか、麺は固めがいいからゆでる時間を短くしよう、とか。

そこに創意工夫が現れるともいえますが、これもまさしくプログラミングと一緒なんです。

プログラミングも料理もやれば誰だってできるようになる

僕は自分で料理をすることをやめました。

高校を卒業して、一人暮らしをするようになってから3ヶ月ぐらいですかね、その間は毎日自炊をやりまくっていたのですが、これはかかる時間の割に大した成果が得られないわ、と思い、やめました。また料理がやりたくなったらやりますが、それは多分数年後とか数十年後になりそう。まずは事業を立てて成功するほうが先ですね。

それから数年が経ちますが、多分包丁を持った回数は片手の指で数えられるんじゃないかな。料理をしていたのは、遠い昔の記憶です。

しかし、僕は「料理ができない」とは言いません。「やってないだけ」です。

「俺はまだ本気出してないだけ」とか、ニートっぽい響きになるのですが、ほんとにほんとで、料理ができないのは、やってないだけに決まってるじゃないですか

卵がうまく割れないどうしよ〜><、なんて場合も、いや、それ練習すればいいだけだから、となりますよね。

まさしくプログラミングにも同じことが言えて、コードが理解できない、なにをやっているのかさっぱりわからない、という場合でも、やり続けたら誰でもできるようになりますよ。

もちろん、超絶に美味しいミシュランをもらうようにフランス料理を作ります、とかだったら、しんどいかもしれないし、インスタグラムを超えるSNSアプリを作ります、とかだとちょっと現実的ではないですけどね。

ただ、練習すれば誰だってちょっとしたフランス料理は作れるようになるし、インスタグラムとそっくりなアプリを作ることはできます。楽勝です。

原理を理解していなくても、ある程度のレベルまでは全然困らない

エンジニアの間では賛否両論分かれるテーマがあります。それは、「コンピューターの低レイヤー部分の仕組みを理解することは必要か」というものです。

これに対しての僕の回答としては、まさに料理と同じで、「原理を理解していなくても、ある程度のレベルまでは全然困らないが、上に行きたかったら必要」というものです。

僕は一時期ペペロンチーノを研究しまくっていた時期があるのですが、ペペロンチーノを作るとき、パスタの茹で汁をオリーブオイルなどと混ぜますよね。

あれって、ソースを「乳化」させるためにやるんですよ。で、乳化とはなにかを理解するためには、高校の有機化学の知識が必要で、要は無機溶媒(ゆでじる)と有機溶媒(オリーブオイル)って、うまく混ざり合わないんですよ。水と油、という慣用句がありますが、この両者は混ざり合わない。ところが、乳化させると、この両者をうまく混ざることができて、オリーブオイルがパスタに絡んでおいしくなるんですね

そもそもなぜ水と油は混ざり合わないかというと、分子の構造にまでさかのぼる必要があって、要は極性があるかないかなんですね。

この極性というのは、電気的に偏っている、ということだと思ってください。電気的に偏っているってなんやねん!!!という方はすみません。ちゃんと説明するには余白が狭すぎます。

僕は理系だったので、こういう知識を持っている上でペペロンチーノを作っていました。が、別にペペロンチーノを作るだけだったら、乳化の知識なんていらないですよね。

プログラミングもこれと同じで、特に現代はますます技術が発達しているので、そういう低レイヤーの部分を理解しなくても、大体の仕事ができるようになったんですよ。

だからこそ、プログラミングを勉強するにしても、コンピューターの全てをカバーして、抜け漏れがないようにしなきゃ、とか気負う必要は全くないです。必要になったら勉強する、そういうスタンスで問題ありません。

もちろん、分子料理みたいに、科学の最先端の技術を用いた分野などが最近出てきているように、最近の技術、例えばdockerなどのコンテナ技術とか、AWSなどのクラウド技術って、コンピューターの内部の仕組みを理解して初めて生み出せる技術なんですよ。ただ、そこまでのレベルに到達しなくても、全然仕事にはなる、というのがエンジニアのよいところですね。

ただ、原理を理解していると、格段にレベルが上がるし、生産性が上がる

前節で、分子料理を引き合いに出しましたが、原理を理解していると、応用が利く、というのはどの世界でも一緒です。

僕はプログラミングを勉強した当初は、パソコンのことが何もわかってなかったです。今の自分から見たら、カスみたいなレベルでした。ブラウザってインターネットのこと?、みたいなw

そんなレベルからでも、2年も過ぎると呼吸をするようにプログラミングをできるようになりましたし、もっと効率よくパソコンが使えるように、自分で色々カスタマイズする、なんて高等テクもお茶の子さいさいです。

まだプログラミングを初めて約2年ということもあり、プログラミングの上層の部分は大体理解した今になってようやく、コンピューターの内部の仕組みをもっと深く知りたいなと思うようになりました。

低レイヤーの知識はなくても問題ないとはいえ、理解しておいた方がなにかと便利なのは確かです。僕は自分が毎日使っているこの魔法の箱の仕組みをもっと深いレベルで理解したいな、と思い、最近では本を5 ~ 10冊ぐらい買って、勉強中です。

完璧主義に陥るといつまで立っても先に進めない

完璧を追い求めず、不格好だろうが、とりあえず、エンジニアになって、業務を一人前にこなせるようになって、それから、いろいろなことを勉強すればいいんです。

OSの仕組みとか、アセンブリ言語とか、はたまた情報理論だったり、暗号理論・セキュリティ、ブロックチェーンとか、機械学習。勉強しようと思えば、いくらでもテーマには事欠かないのがIT業界です。

ただ、それらをすべて網羅しようとすると、一生かかってしまうので、とりあえず実務レベルで通用する力をある領域で身につけましょう、ということですねー。

カテゴリー