見出し画像

元建築学生/現エンジニアが感じる、ソフトウェア開発の「ものづくり」と比べた難しさ

僕は、「ものづくり」の領域の一つである建築学に6年間片足を突っ込んだ後、VR関連の企業でソフトウェアエンジニアをやっています。
4ヶ月くらい、iOSのクライアント開発、少しだけバックエンドもいじったりしています。

ソフトウェアの領域に飛び込む少し前は、上のようなことを考えていました。

そんな、ソフトウェアエンジニアとしてまだまだ駆け出しの自分が、まだ「ものづくり」の領域出身者の視点が残っている間に、ソフトウェア業界に入って感じたことを記録しておこうと思いました。

・「ものづくり」の領域からソフトウェア業界に飛び込もうと考えている人
・ソフトウェア業界に長くいて、「外」の人から見た視点が欲しい人

に向けて書きます。

ソフトウェアは下手するとタイヤをナイフとして使ってしまう

物理的な「モノ」の場合、すべての人が物理法則と生まれた時から付き合っているので、そのカタチを見て、手に取って重さや硬さを感じるだけで多くの人が使い方や性質を感覚的に理解することができます。

例えば、ナイフを初めて見た子どもでも、
「これは尖っているから人にぶつけたら危ないし、食べ物でもなく、乗り物でもない」
ということが瞬時に、なんとなくわかります。
また、モノ同士の主従関係や依存関係も感覚的に分かります。(タイヤは車の部品・一部で、タイヤが無いと車は走らない、とか)

公園の遊具の使い方を言葉で教えなくても、子どもが遊べるのは、こう言う「全員が生まれた時から共有している物理法則」があるからだと思います。(物理法則に根ざしたアフォーダンス)

しかし、ソフトウェアの場合、全てが抽象概念で、その概念毎のローカルな物理法則のようなものがあるので、物理世界のような「日常生活で蓄積された経験知」を利用することができません。

なので、僕も含めた初心者は、

・ナイフを食べる
・カタチが似ているので、ジャンボジェットの羽にナイフを使う
・タイヤの部品として車を使い、それをナイフとして用いる

のようなことができてしまうし、やりがちで、コンパイルエラーやバグが出ます。
(仕事を初めて4ヶ月くらいした今では、このレベルの間違いは侵さなくなりました。)

どのようにしてソフトウェアの世界に慣れていっているか

「クラス」、「デリゲート」、「バンドル」、「バイナリー」、「ラッパー関数」、「サーバー」、こういった抽象的な概念を、子供が公園の遊具と遊ぶように、手触り感を持って理解するには、それを使って実装を繰り返していくしかないんだろうな、と思います。
で、慣れてくると物理的なナイフを初めて見て、スムーズにリンゴを切る、さらには、ナイフの種類を見て「これはノコギリではなく果物ナイフなのでリンゴを切るのに使うのだな」みたいなことがソフトウェアエンジニアリングでもできるんだろな、と思います。

ソフトウェアの世界は、突き詰めると「言葉」の世界なのでは

今の僕のずっと先のレベルにいる、周りの優秀なエンジニアの人は、ソフトウェアの機能、自分が今やろうとしている処理、問題点を正確に表現する言葉を沢山持っているな、と感じました。
ソフトウェアの世界は、徹底的に抽象的な概念が先行しているので、「ものづくり」の世界よりも、「言葉」で世界を表現していくことが重要なのだな、と言う気がしています。(もう少し深く掘るにつれてこれは変わるかもしれません。)
つまるところ、処理を記述する「コード」も、コンピュータにして欲しいことを伝える「言葉」なんだな、と今の段階では思っています。

建築模型や、金型をゴリゴリ手で削って作る、非言語的な創造、一方で、Houdiniのように、アルゴリズム(≒言葉)により形態を記述していく言語的な創造。ソフトウェアの領域は後者で、それ故誰が何百回、何億回やっても同じ処理が可能で、複製が非常に簡単で、故に世界に広がっていく。
最終的には、非言語的な直感で、ゴリゴリ削ったり、貼ったり、折ったりして生み出した不思議な物体・空間・体験を、ソフトウェア的に再現性を持つ形で記述し、世界に広げるようなことができれば楽しいな、と思っています。


よろしければ記事購入経由でサポートをよろしくおねがいします!僕のタバコ代になって、クリエイティブが加速します!タバコはハイライトメンソールです!