10倍速プログラミング

By kihara, 2014年12月26日

僕は普通のエンジニアよりプログラミングが10倍速いです。

普通のエンジニアの定義って何だとか、ちゃんと測ったのかとか面倒な事は置いておいて、

これはプログラムを始めて1年後くらいから、15年経った今でもそう思っているし、みんなに言ってます。

 

これまでずっと感覚的に教育をしてきて体系的に整理する事を避けてきていましたが、創業2年目を機に少しでも体系化に近づければと。

あと鈴木健さんにお世辞でスーパーエンジニアと言われて調子に乗ってる面もあります。

完全ノープランなので最後までちゃんと書けるか既に不安です。

 

 

 

 

妄想力

 

エンジニアに最も必要な能力はこれに尽きると思います。

この一つで終わるかもしれません。

あえて想像力ではないのは、リアルに妄想するほどの力が必要だからです。

想像力があるだけでもかなり立派なエンジニアだと思います。

 

人間の行動もそうですが、判断をし続けて生きています。

とりあえず明日の午前中の行動について考えてみましょう。

「早起きして、ジョギングして、朝ご飯はパンで、1本早い電車に乗って、まずは昨日の仕事を1時間やった後に取引先に電話しよう。」こう考えた瞬間、早起きかちょうどかギリギリか、走るか走らないかストレッチだけか、ご飯かパンかコンビニか、電車は何分のか、先に電話するか次の仕事するか、色んな選択肢の中から1つを選択しています。

人間の脳は恐ろしいスピードで判断し、処理しています。

 

優秀なエンジニアはそのスピードを適正にシミュレーションに充てています。

 

想像力のあるエンジニアであれば、プログラムを利用するシーンに想像力を膨らませながら、抜け漏れがないものを作り上げていきます。

 

そして想像力を超えた妄想力があるエンジニアは、実際にプログラムを利用するユーザになりきって、数えきれないくらいのパターンを一瞬でシミュレーションして最短のルートを見つけ出します。不要な物は作らない、ただし将来利用する可能性がありそうなところは作っておく。もし不都合が起きるとしたら大体このあたりだなという、他の人から見ると嗅覚が鋭いと言われるようなことも妄想の上で容易に見つけます。

 

妄想とは、あたかも体験したかのように深く考える事です。

どんな人でも動かないシステムを見れば動かないって分かりますよね。それが事前に分かるようになるという事です。

 

 

 

妄想力があるとどうなるか

 

まず仕様がシンプルに作れます。

普通システムを作る時は、何らかの肝になる仕組みがあるものです。そのシステム特有の、他と圧倒的に差別化できるポイントに絞ってひたすら妄想し、シンプルなものを考え抜きます。

なぜシンプルにするか、なっていくかというと、特にウェブサービスは日々成長するもので、柔軟性や冗長性、保守性を考慮するとシンプルな仕様に尽きるからです。

 

次に、プログラムが動いているところを体験するだけでなく、妄想力によって作る過程も体験できるので、どのくらいで作り終わるかがかなり正確に分かるようになります。

システムの規模次第ですが、世の中の大体のウェブサービスは5人で3ヶ月あれば作れるので、自分を除く4人がどのように動いてどう作るかを妄想するだけです。

 

最後に、バグがでません。もう説明の必要もないかと思います。

妄想しながらプログラミングをしているので、10万行くらい一度も動かさずに一気に書き終わって、特に問題なく動作するという事が普通にできます。

プログラムが動いた時、妄想と現実が完全に一致した時、ものすごく気持ちいいです。

「おれ1回もテストしなくて動いたぜ!」と周囲に言いふらしまくって不評を買います。

 

 

まとめると、早く・確実に・品質が高いシステムが作れるって事です。

 

 

あと細かいですが、お風呂に入っている時とかトイレにいる時に良くバグを見つけます。

そういえばあのロジックはこう通ることを想定してないんじゃ、そういえばあそこは0じゃなくて1って書かないとヤバいな、とかです。これはエンジニアみんなの共通点なんじゃないでしょうか。

 

 

 

どうやって身につけるのか

 

「癖」だと思います。あらゆる事を妄想する「癖」をつける事です。

もしfacebookを自分が作ったら、スマートニュースやSumallyを作ったら、amazonの商品の正規化ってどうやってるんだろうとか、卵を電子レンジであたためるとどうなのかとか(※絶対にやらないでください)、世の中に既にあるものを使って妄想し、実際に作ってみることです。

 

料理とかもいいかもしれません。コンロ3つ、魚焼きグリル、オーブンをフル稼働させて何が作れるかをスーパーでシミュレーションして買い物して、実際に1時間で5品(+サラダ)を同時に仕上げるとか楽しいです。

パスタ(沸騰5分、茹で8分、ソース5分)、ステーキ(焼4分、蒸らし6分)、アクアパッツァ(捌き5分、焼10分、オーブン20分)、ドリア(ソース10分、直火焼き10分)、唐揚げ(仕込み5分、揚げ5分、ついでにコーンも混ぜる)、サラダ(仕込み5分、盛りつけ5分)、これを組み合わせるとコンロが重なることなく、同時に仕上がります。

プログラムが動いた時、妄想が現実と一致した時、に似てます。

 

全く悪意なく、誤解を恐れずに言うと、オタクっぽい人は妄想力が高いのでエンジニアにとっても向いていると思います。

僕はオタクではありませんが、ワンピースの台詞をほぼ覚えているくらいのオタク度合いです。

 

 

 

ツール・環境

 

他にもありました。妄想力が人との差のほとんどだと思いますが、

まだ開発環境を整えていない人は単純にお金を投資するだけで伸びます。

 

・デュアルディスプレイ(タブレットでも可)

コードを書きながら他の事ができます。デュアルにしてない人は時間の無駄なので1番安いものでいいのですぐに買いましょう。もちろんデザイナーはもっと良い物を。

これには、どれだけ効率化を訴えても通じず、結局はエンジニア個人個人が自腹で購入したという苦い思い出があります。ほんと素晴らしいメンバーですね。

というか年間1,500億も利益があるIT業界の先駆けが4:3の15インチモニタ1台だけだったのが衝撃的でした。今は社長も替わってみんなデュアルになってますが。

仕事は道具じゃないという人がいたとしたら、すっぽんぽんで顔隠して口をふさいで仕事をしてみてもらいましょう。エンジニアの命は開発環境です。

 

・開発ツール

僕はレガシーなものが好き(仕事のスタイルを変えたくないだけ)なので、MIFESという素晴らしいエディタとSCPソフト、エクスプローラーからSVNって感じで開発していました。

が、今はAptanaという統合開発環境を利用しています。

単純に、ショートカット一つでサーバに上げて下げて、Gitにコミットしてプッシュ、ツール入れればPHPもブレークポイントつけてデバッグ、Javaは保存の度に自動コンパイルしてデプロイみたいなのが一つのツールで実現出来ます。

画面切り替える必要がないだけで圧倒的にスピードアップできます。もはや使っていないウェブエンジニアは罪なくらいです。

 

・イス

ずっと座ってると死ぬ確率が上がるという研究結果があります。

でもそれって悪いイスなんじゃないのかなと思います。

前職でかなり安いイスに3年、いいイスに3年座ってましたが、前半の3年で僕も含めて同僚の複数名(30%くらい)が「逆流性食道炎」もしくはそれに近い症状が出ていました。もちろん全く断定はできませんが、確率的にそうなのかと思わざるを得ない結果でした。

「確率を超えた偶然には意味がある」って誰が言ったか忘れましたが好きな言葉です。

 

ちなみに弊社ではこのイスを使ってます。机は1万円くらいなのでPCに次ぐ投資です。

 

・スペックのいいPC

説明を省きます。

 

 

 

姿勢

 

まだありました。3つ目なのでもう力尽きてもよさそうです。

 

「10分悩んだら人に聞く」

これは社会人1年目の15年ほど前に先述の鈴木さんに言われた事で、実践し続けている事です。

当時と今では検索して出てくる情報に差がありますが、10分悩むような事は30分、1時間でも悩む事が多いと感じます。そして悩んだ事は決してアウトプットが高くない結果に終わるとも思います。

もちろん周りに聞く人がいないケースもあったり、自力で理解した方がいいという主張もあったり、人それぞれかもしれません。

ただ、プログラムは所詮人が作ったもので、自ら答えを紡いだところで深い意味はなく、それより幅広い知識を身につけた方が圧倒的にスピード・品質が上がるという経験をしてきています。

 

 

以上3つです。

 

プロジェクトマネージやプログラムを教えた事はあっても、10倍速で仕事ができるように教育できた事はありません。

人口オーナス期を迎えた今、圧倒的な効率化をもって仕事に取り組みたいところです。

 

ちなみに効率化しすぎると失業者が増えるという論調がありますが、僕が行ってきた効率化(他部署含む)では、時間が余ると新しい価値を産み出す仕事に当たっていたのを目の当たりにし続けていたので全くもってそう思いません。もしそうなったら家で妄想力を鍛える事です。

 

今あるものを10倍にするとものすごい事が起きるんだって禿げた人がいってました。

 

 

 

VFA-83 flies over Naval Air Station Oceana. / usnavy

このエントリーをはてなブックマークに追加