ポエム
概要
本日の議題は
コンピューターサイエンスを知らない人間が商用ソフトウェアのコードを書くことの違和感
です。
例えば電気技師は取得した資格のレベルによって扱える電圧が決まるし、医師はご存知のように所定の機関で研修を終えて医師免許を取得する必要がある。
一方、コンピューターというのは開かれた世界だ。
間口はとても広い(若しくは広くあるべきだ)し、沢山の人に色々な使われ方をするのがこの業界の発展に於いてはとても重要であると思う。
しかし、これがお金の絡んでくる商用ソフトウェアを書く プログラマー となると話は変わってくる。
プログラマーは、時に複雑に相互作用しながら動作するコンピューター群と、それを制御するためのソフトウェアを記述・管理・運営する役割を担っている、いわば専門職である。
専門職であるにも関わらず、巷ではあたかもプログラマーは誰にでもなれて簡単にお金が稼げる 美味い 職業だと思われている。
今回は、なぜプログラマーは専門職であると思うのかという僕の持論と、そこから「文系プログラマーはどうして信頼できないのか」という表題の件の問いの答えまでを書いていこうと思う。
なぜプログラマーは軽く扱われがちなのか?
一言で言えば、道具を揃えるだけであれば誰にでもできるからである。
例えば先程上げた電気技師や医師などは、当然技能訓練のための環境・教師・その他個人ではなかなか手に入らないハードウェアが必要であるが、プログラマーはパソコンとそこそこの速度のインターネットと、あと何か知識を一通り得るためのプログラミング入門の本さえあればなれてしまう。
しかし、もう少し視野を広げてみるとこれは別に「プログラマー」に限った話ではないことが分かる。
例えばスポーツ選手。
陸上競技の選手であれば、広いグラウンドと靴さえあれば理論上はスポーツ選手になることができる。でも、だからといってそこからお金を稼げるほど成長できるかと言ったらそうではなく、その人の努力と生まれ持った環境次第であるということは誰もが知っていることだ。
ここの「プログラマー」と「スポーツ選手」の差に僕は強烈な違和感を覚える。
当然だがスポーツ選手は比較対象として想定しやすいから挙げただけである。そこに他意はないし、スポーツ選手でもジムに通ったり細かい体調管理が要るだろというような話は本筋ではない。あくまで「その職業に就く過程の話」である
プログラマーは"専門職"である
コンピューターサイエンスとはどういう学問なのか、実は意外と知られていない気がした。
簡単に言えば、コンピューターに関する知識の全てである。
中央処理装置、主記憶、副記憶、入出力装置といったハードウェアに関する分野から、アルゴリズムやデータ構造といった数学的な理論をコンピュータで扱えるように落とし込む方法を考えるソフトウェア的な分野までの、とても広い内容を扱う。
これを知っている人間と知らない人間とでは、書くコードの説得力が大きく変わってくると個人的には思う。
よく「別に細かいパソコンの動作を知らなくてもプログラムは書けるし、何よりまずは動くものを作るのが正義」と言われたりする。
それについては半分同意で半分反対という立場を表明したい。
まず、動くものが正義なのは賛成である。動かないプログラムなど無価値のゴミにすぎない。価値があるとすれば、それは書いた本人の満足感だろうか。まあ、そういう一見ビジネス的価値のないものこそ大事にするべきだと僕は思うが。
次に、じゃあ動くからと言って必ずしも正義かと言ったらそれは全面的には賛成できない、気持ちとしてはむしろ否定の部分のほうが大きいぐらい。
例えば、作ったソフトウェアに脆弱性を残したままリリースして顧客に多大な損害を与えた場合、これは果たして「動くから正義」と言えるだろうか。
セブンペイが死んでそろそろ一周忌になるが、あれも関わっていた技術者全員が「何かがおかしい」と気づいていたらあそこまでひどいことにはならなかったのではないだろうか。
どうして「文系プログラマー」は信頼できないのか
さて、話を少し戻していく。
いわゆる「文系プログラマー」は、前述したコンピューターサイエンスの学習過程をまるまるすっ飛ばして、取りあえず動くものが作れたから「私はプログラマーです」と名乗っている人が多いように思う。
基本情報技術者取ってるからセーフとか、まあそういう基準ももしかしたらあるかもしれない。自分は基本情報技術者を持っていないので、そのへんの人にとってはむしろ情報系大学を出ているだけの僕のほうがよほど信頼できないのかもしれない。
この業界は残酷なことに、思考回路のセンスが全てのパラメータを司っている。その点で言えば自分は平凡以下だと思っている。
「文系プログラマー」の中にはそのパラメータがすごい人もいて、業界を引っ張っていくほど影響力のある人も中にはいるし、そういう人の存在を否定するつもりはさらさらない。ましてや自分のような大きな実績のない人間がそこに文句を付けたらただのクソ野郎である。自分より実力のある人には最大のリスペクトをするべきだ。
しかし、そういった人はごく一部であるし、そういう人はもう「専門家」なのである。
仮に「Ruby on Railsで○○っていうウェブアプリ書いて月に何万View達成して何万円の利益を得ました!」という人間でも、書くコードは見るに堪えないクソコードだったりするなんてことはよくある話なのではないだろうか。(スタートアップが初リリースの数年後に技術的負債で苦しんでるのは大体このパターンだと思っている)
そして、そのクソコードを直すのは、情報系大学を出てきちんとコンピューターサイエンスを学んだ、いわゆる「即戦力」の新卒の人たちだ。ちなみに僕もその一人である。
その「文系プログラマー」が生み出したツケは果たして何人の人間を犠牲にしたのだろうか。
とはいえ、コンピューターサイエンスを学んだからといってクソコードを産まないかと言ったら決してそうではなく、この辺りは悲しいことに個々人のセンスがすべてであると思う。
ただ、コンピューターサイエンスを学んだ人間には、少なくともコンピューターそのものやその業界に対する一定のリスペクトがあるので、わざわざ自分のことを「理系プログラマー」だと名乗って出てくる人はいないのだろうと思っている。
終わり
はー、マジでクソコード書くやつ死んでくれねえかな。