エンジニアになろう!

エンジニアになろう

エンジニアとプログラマの違い

プログラマとはプログラムを書く人です。
対してエンジニアはプログラムを使って課題を解決する人です。

似ているようですが、プログラマはインプットに対するアウトプットを出すのに対し、エンジニアはそのインプットとアウトプットの背景を理解して最短のルートを見つけて解決に導きます。

どちらが優れているかはないですが、年収が2倍程度異なるのでエンジニアの方が需要がある事は確かです。

また、あくまで呼び名なので色々と分類はありますが、エンジニアを課題解決型プログラマと呼んでいた時期もあります。逆にプログラムを書かずにただ頭数としているだけの人をシステムエンジニアと呼んでいた時期もあります。
みんなで力を合わせないと世界と戦えない時代から、インターネット上で個人が活躍できる時代になっています。
プログラムを学びエンジニアとなる事で1人で世界に進出できるので、是非このチャンスをつかみましょう。

エンジニアになるには

第0歩:1万時間

何かを極めるには人間は1万時間が必要とされています。真意について色々な意見がありますが自分の経験からすると実にしっくりとくるものでした。

最初の会社で3年、仕事を受けるのが楽しく無謀にも大量に受けてしまい平均で月に450時間働いていました。週に2,3回家に帰るような生活です。

なかなかうまくいかないので時間がかかり、常に仕事がたまっていたのですが、3年目に急に仕事が片付き始めて売上も給与もかなりアップ。

2年×12か月×450時間=10,800時間、2年で1万時間に達していたんです。なのでこの1万時間の法則というより自分の尺度として信じています。もっと言うと自分にとってエンジニアは1万時間でプロになれる、という事実があります。

その後は経営や資金調達、管理職的なこともしていたので今現在は5万時間くらいやっていると思います。もちろん単純に1万時間の5倍ではなく掛け算で経験を積んでいるのでもっと効率よく精度高くなっています。最近は衰えも感じていますが。。。

第1歩:就職する、転職する

心構えが出来たら仕事でプログラムを書きましょう。学習サイトが王道のように言っている人が多いですしやっている人も多いです。

ただ1万時間やろうと思うと継続する力が必要になります。強い意思を持っている人は良いですが、なかなか自分自身との約束は守れないものです。その点仕事であれば仕事相手との約束なので守る動機が生まれます。意思が弱くても約束を守ろうとすれば自然と続けられます。

もう一つ、就職にあたって気をつけないといけない大きな問題があります。

それは「就職してもプログラムが書けない」会社に入らない事です。

大企業を否定するわけではないですが、新入社員はとりあえず人が足りてないところに回されます。例え募集要件がプログラマーでも平気な顔で研修などと言って他の部署に行かされます。また、プログラムが書ける部署に入ってもまずは誰でも出来るテストや検証をやらされたり、サーバを監視するだけ、カスタマーサポートで応対業務などプログラムが書けない状況になります。しかもそこで頑張ったりするともれなく延長となるので難しいところです。運良くそれが天職ならいいですが、なかなかそうはいかない。

その点、組織全体が分かるような小さい会社は狙い目です。教えてくれる人がいないなど不自由な面もありますが少なくともプログラムが書ける状況かどうかは応募や面接時に確定できます。また、伸び盛りや立ち上げ期だと山ほどやる事が出てくるのであっという間に1万時間いきます。あんまり働きすぎると体も心も病むので注意ですが。

第2歩:どう過ごすか

1万時間をいかに効率的にこなしていくかを考えます。

もし毎日8時間、プログラムに没頭出来るとして、月に160時間、年に2,000時間、5年で1万時間です。今の歳にプラス5歳したらいっぱしのプログラマになれます。
ただ会社というものは会議やら雑用やらで時間を奪われます。ひどい会社だとずっと会議、会議、会議、、、会議をする事が仕事だと思っていたり、電話をする事が仕事だと思っていたりする上司がいると半分くらいの時間になります。
そうなると10年、今の歳プラス10歳した時に達成します。
僕は幸い?休むことを知らずに仕事をしていたので1日15時間×30日、月450時間、年5,000時間、2年で達成しました。

逆にスクールに週2時間なら100年です。これがスクールで大したことになれない理由です。もちろんキッカケにはなりますが、スクールにさえいけば大丈夫というわけではありません。

もう無理だと思ったあなたに秘策を授けます。

プログラムを書いていない間でも、頭の中でプログラムを書いてください。$なんたらとか具体的に書くのではなく、今日できなかったものや明日やる予定のものを想像して考えることです。
そうするとアイデアが浮かんできます。スマホで検索するのもいいですね。明日これを試してみようと思えるようになったらその時間もカウントされます。
良いプログラマは日常的にお風呂やトイレに入っている時に書いたバグに気づいたり、難しいプログラムが思いついたりしています。想像する癖がついています。

1日8時間働いて、ご飯食べながら、飲みながら4時間考えて、土日も日常的にプログラムの事を考えれば3年待たずに1万時間に到達します。

これで晴れてプログラマーです。まだエンジニアじゃないです。

第3歩:本質を理解する

第3歩ですがエンジニアにとっての1歩目です。

「なぜこの仕事をしているのか」を考えてみてください。「なんでこんなクソ会社で働いているんだ」という事ではなく、「この仕事は何の役に立っているんだろう」と考えることです。
プログラマ時代に既に考えている人もいるでしょう。それをもっと広げていってみてください。必ずそのあなたが作ったものを使う人に辿り着くはずです。エンドユーザと言います。
そしてその人の事を想像し、直接聞けるのなら聞きましょう。
そういう環境の会社にいる人は当たり前に出来ているので超ラッキーです。

例えばある案件でポイントにマイナス値を入れたいという要望がありました。何も考えなければマイナスを入れるようにして終了なのですが、現場の方にヒアリングしたところ、退社した方のポイントを消滅させる機能として利用したいという事が分かり、ポイントの有効期限を変更する機能をつける事になりました。もしそのままマイナス値を入れていたら無駄なデータが増えていましたが、有効期限を設定(短く)する事でデータ量も変わらず、将来的に退職したから有効期限が切れたという判断もしやすくなりました。

他にもあるECサイトで送料が変わるため売上を修正したいという要望がありましたが、数十万を費やして新たな機能を作るのではなく、カード決済を保留状態に留めて料金確定後に決済をするように業務フロー自体を変更して対応しました。この場合は売上はゼロなので儲かりませんが、無駄なものを作らない事でみんなが幸せになるパターンです。将来を見通し、今さえ良ければいいという判断をしません。

もちろん逆もあって作ったけど使われないというのも多いです。未来予知が出来ない限りなくならないけど出来るだけないように想像力をフルに使う。エンジニア的には使われないと分かった時点で全部消すのが理想的です。使わない機能がたくさんあると何か新しい機能を追加する時に手間がかかってしまいます。

第4歩:売上を作り出す

自分が作るサービスを使う人の事まで考える事が出来れば、あとはその人がどうすればもっと使いやすくなるかを考えてみましょう。

あたな自身、「登録しようと思ったけどエラーで進めない」「表示が遅すぎてストレス」「ここで買うならポイントがあるいつものところで買おう」
こんな経験はないでしょうか。

これは機会損失になるわけです。まずこれを最大限になくす事を考えてプログラミングをするとそれだけで売上が伸びます。カイゼンというものの1つです。

つぎに新しい売上を作りだす事。ついでに買ったり、退会を考え直させたり、アクションに対する後押しをしたり、ECではクロスセルやアップセルと呼ばれる手法や、レコメンドなどでサイト内をぐるぐる移動させて滞在時間を伸ばす方法など、常套手段が多々あるのでそれを作って試して検証してを素早く繰り返します。
ここまで来たら作って終わりなんて考えている人なんていませんよね?ウェブサービスは成長する事が生命線です。やりきったと思った瞬間からピークアウトしていきます。改善をし続ける事で圧倒的なポジションを作れます。これって技術と同じですね。

最後に、横展開など新規事業を立ち上げる事。会社に属していれば自分がリードしなくてもいいです。横展開が出来るような仕組みが作れそうとか、こんな技術を持ってますと経営陣や周りに伝える事でそのポジションにいる企画や営業などのアイデアの源泉にしましょう。
そしてこれも作って試して検証しての繰り返し。

ウェブっていいですよね。タダで世界中の人に対して問いかける事が出来るんです。

最終歩:次世代を育てる

エンジニアになって早くて10年は経っていると思います。事業会社でコマとしてエンジニアを育てるのではなく自分と同レベルのエンジニアを育てる事に焦点を当てています。自他共に認めるエンジニアの自覚があれば読み進めてください。

能力プラス経験で人は形作られます。ただ能力は圧倒的な経験を積む事によって鍛えられるので、単に経験をさせればいいのです。その経験とはもちろんあなた自身がこれまでしてきた経験です。ただ、そのまま伝えても同じ時間がかかってしまうので、本当に必要だった経験と無駄だった経験を仕分けし体系化し体験してもらいます。

言葉では簡単ですが、これまでのエンジニア人生を振り返って正確に言語化するのは正直しんどいです。1人目からいきなりうまくいかないと割り切って試行錯誤しましょう。経験を凝縮する事に対する試行錯誤です。

Webエンジニアはまだ20年の歴史しかなく、優秀なエンジニアこそいますが書籍化されているのは大した内容ではないです。1つの仕事を極めるのに数十年、それを伝承して次世代が育つのに数十年、短くとも30年はかかります。いま出ている書籍は恐らくそうだろう、そうなって欲しい、単なる自分の経験談というレベルです。経営者と違い、中学生スーパーエンジニアなどが出る時点でまだこの業界は途上なんです。

なのでこの答えは僕も模索している最中です。ただ教育を始めて2人目と3人目(1,4,5は失敗。インターン6名も恐らく失敗)が20台で年収1,000万を目指せるようになっているのである程度の体系化は出来ているのではないかと思っています。残りの人生であと何人育てる事が出来るか分かりませんが世の中の発展の一助になりつつ、迷える若者が稼げる若者になるよう努力し続けていきます。決意表明みたいになりましたがここの域までいっている方にとって多少でもアドバイスになれば。むしろ意見交換したいです。

エンジニアのキャリア論

ずっとエンジニア

とにかくプログラムが好きでたまらない人は永遠にエンジニアをやっていけば良いと思います。自分もそうです。ある程度出世すると管理や判断ばかりになってプログラムを書く暇がなかったので35歳で会社を立ち上げてプログラムを書き続けています。

ただし、フリーや起業でうまくいくのは10人チームで作るより1人でやった方が早いレベルの人くらいです。そうでない人は会社に属してやっていった方がいいです。スピードと品質が抜群であれば紹介だけで受けきれないくらいの案件が来ますが、そうでない同業他社は案件の獲得にとても苦労しています。

そしてどちらでも共通して言える事は、ベストな技術を採用する事です。それしか出来ないから、過去にやったからというだけではダメです。ベストな技術とは何かを判断できるようあらゆる技術を身につけましょう。

チームマネジメント

チームマネジメントとは何か、リーダーであれば単に業務遂行能力で引っ張ればいいのですが、メンバーが50人ほどになった時に何をすべきか必死に考えた時期がありました。

結論としてはメンバーが快適に迷いなく仕事が出来るように環境を整え、迷ったら即時判断する事に辿り着きました。そのために日中は出来るだけ席にいて質問をいつでも受け付けて判断をしていく必要があります。メンバーは会議ゼロに近づけ可能な限り自分が代行し業務に集中させてあげます。
メンバーの力をフルに発揮させる事。これがチームマネジメントの極意だと思ってます。自分のやりたい事は早朝深夜か土日にやってました。

その上で「ずっとエンジニア」と同じレベルを保てればベストですが、難しいと感じていればマネジメントだけでも生きていけます。むしろエンジニアでマネジメント出来る人は貴重です。

事業部長

事業を任されるということは超優秀なエンジニアである事は間違いないでしょう。プログラム技術のみならず、先述のチームマネジメントに加えて売上と利益を作っていく必要があります。

さて、周りを見渡したり本を読んだりして同じことをやってもいいですがエンジニア出身の事業部長として何が得意分野か今一度振り返りましょう。

そうですね。システムについてダントツで知ってますよね。数々の企画を試す際に、最も効率的な開発で売上になるかどうかを判断できるところが強みです。非エンジニア出身の事業部長には真似できません。システムにとって最短ルートで売上を作る事ができます。これをひたすらにやっていきましょう。まっとうなIT企業であれば利益は伸びていくはずです。

他方、事業部内の営業やバックオフィスなどにも目を向けてみましょう。非効率的な業務が存在するはずです。それを徹底的にシステム化し、場合によっては人員配置の変更などで事業部をスリム化し高利益体質にします。人は今までの無駄なものがなくなると新たに創造的なものをやり始めます。それでもできない人はカットしてしまいましょう。BPOなんかも使います。

事業計画およびKPIの策定、そのKPIを達成するための手段を社外のサービスを含めて検討し実践し伸ばしていきましょう。時には大胆に。過去に月売上3,000万円の事業部で月3,000万の広告を展開した事があります。結果的に成功でも失敗でもなかったのですが、利益が出る広告を選別する事が出来ました。SEOにも月300万を1年かけつづけて1億の売り上げを獲得した事もあります。広い視野、大きな予算で行きましょう。

CTO

執筆中