読者です 読者をやめる 読者になる 読者になる

give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

これからプログラミングを始める人のベンチマークとして「僕の12年間のプログラマ人生」を振り返ってみた

はじめに:「これは何ですか?」

これは12年前から現在に至るまでの僕のプログラマ人生を振り返ったものです。
また、参考情報としてプログラマ人生が始まる前の中学時代~大学時代の話も載せています。


http://www.flickr.com/photos/31137909@N06/15653275512
photo by Philip Bloom


あ、僕のプログラマ人生はまだ継続中ですので念のため!

「何のためにこれを書いたんですか?」

このエントリを書いた目的は、これから本格的にプログラミングを始めようとしているみなさんのベンチマーク(目標や計画を立てるための参考情報)にしてもらうためです。


最近、「これからプログラミングを始めようとしています」もしくは「最近プログラミングを始めました」という人に出会う機会が増えてきました。
これからプログラミングを始める人は「どうすればプログラミングが上達するのか」「一人前になるまでにどれくらい時間がかかるのか」「どういったキャリアを歩めばいいのか」というイメージが全くわかないと思います。
そこで僕自身のキャリアを「具体的な実例」として見てもらえば、多少なりとも「これから先に起こること」や「これからすべきこと」のイメージが付くかもしれないと思いました。


特に、僕は小さい頃からプログラミングをしていたわけではなく、大学(しかも文系)卒業後、就職して初めてプログラミングを始めた人間です。
同じような境遇にある人にとっては、僕のキャリアが「未経験でもがんばれば何とかなる」という参考事例になるかもしれません。

「読んでみたけど、こんなの自分には真似できない」もしくは「12年もやっててたったこれだけ?」

はい、読む人によって感想は様々だと思います。
「すごい」と思う人もいるかもしれないですし、「全然大したことない」と思う人もたぶんいるでしょう。


自分としてはどちらかといえば、ここまで来るのにかなり時間をかけすぎてしまったかな、という感想を持っています。
うまくやればショートカットを見つけてもっと早くスキルアップできた気がします。
(実際、僕よりももっと速いペースで高いスキルを身につけた人もたくさんいるでしょう)


なので、これからプログラミングを始めようとしている方は、「自分はどうやればこの人(=僕)よりもっと早くスキルアップできるか」ということを考えてみてください。
このエントリはそういうベンチマークとして活用してもらうために書いています。


前書きはこの程度にして、それでは中学時代から現在に至るまでのプログラマ人生(+コンピュータとの関わり)を見ていきましょう。

中学時代(1990-1993)

  • パソコンではなく、実家にあったワープロ専用機をよく使っていた。
  • 当時はかな入力だったが、キーボード入力に親しむぐらいの効果はあったかも。

f:id:JunichiIto:20141119203025j:plain:w200
http://img01.hamazo.tv/usr/salt/100323o.jpg

高校時代(1993-1996)

  • 初めてパソコン(NEC PC-98)を買ってもらった。
  • 当時のOSはMS-DOS。
  • パソコンの利用目的はプログラミングではなく、DTM(Desktop Music)だった。
  • プログラミングやインターネットとは無縁だったが、AUTOEXEC.BATやCONFIG.SYSをいじったりするぐらいのことはしていた。

f:id:JunichiIto:20141119203051j:plain:w250
https://farm4.staticflickr.com/3913/14725396599_80f262df99.jpg

大学時代(1997-2001)

  • 実家で家族用にWindows 98マシンを買った。
  • インターネットが家でできるようになった。
  • 自分のバンドのホームページを作って公開した。
  • ホームページビルダーをよく使っていたが、HTMLタグの基本的な仕組みは理解していた。
  • JavaScriptはあまりよくわからなかったのでコピペ中心だった。
  • CSSもなんとなくしか理解していなかった。
  • KENT WEBから掲示板CGIスクリプトをダウンロードして、プロバイダ提供のWebサーバーに配置したりもしていた。(手順通りにやるだけで、コードの意味はまったく理解してなかった)
  • 本格的なプログラミングとは無縁、学部も文系ということで、プログラマになるつもりは全くなかった(プロミュージシャンに憧れてた)が、「パソコンって面白いな、便利だな」という感想を持つようにはなっていた。

f:id:JunichiIto:20141119203112j:plain:w250
http://h10025.www1.hp.com/ewfrf-JAVA/Doc/images/461/c00008491.gif

SIer時代(2003年1月-2007年2月 / 25歳-29歳)

  • 大卒後もやっていたバンドが解散して「そろそろ就職するか。でもやりたい仕事もないんだけど」と思いながら、消去法で選んだのがプログラマの仕事だった。
  • つまり、ここから僕の本格的なプログラマ人生がスタートする。
  • 高校~大学時代にパソコンをよく使っていたので、プログラマの仕事を選んだのはおそらくその延長線上。
  • 就職(中途入社)したのは大阪の中小SIerだった。
  • 最初にやったのはVisualBasic(VB) 5~6の保守開発が中心。与えられた仕様通りに動くプログラムを組むのは、クイズを解くみたいな感覚でまあまあ楽しかった。
    • ただし、プログラム自体はCOBOLをそのままVBに移植したようなひどいロジックだった。(今思えば)
    • 先輩社員が「似たようなプログラムを見つけてコピペすればいいよ」と指導してくるのもひどかった。(今思えば)
  • 入社1年後にStrutsやHibernateを使ったJava案件に参加した。これが自分のプログラマ人生のターニングポイントになった。
    • 「最新のフレームワークやオブジェクト指向プログラミングを活用すると、こんなにラクにプログラムが作れるのか、すげー!!技術って面白い!!」ってなった。
    • 英文のドキュメントを読みこなして、困っている僕を助けてくれる技術リーダーの先輩もすごくカッコ良かった。
  • これ以降、「ラクして楽しく開発する」ために技術書を読み漁ったり、最新の技術動向をチェックするようになった。
  • 英語の勉強をするために英会話のNOVAにも通い始めた。
  • 2005年に結婚、2006年長男誕生。「子育てするなら田舎がいいな」と思い、生まれ育った大阪府豊中市から、妻の実家がある兵庫県西脇市へ移住。
  • 職場は遠いし給料も少なかったので、肉体的にも金銭的にももっといい仕事を求めて地元西脇にあった外資系半導体工場の社内SEに転職した。
    • ちなみに西脇から大阪(高槻)までの通勤時間は片道2時間半。
    • SIerを辞める直前の給料は残業しないと手取り17万、残業と休日出勤しまくって死ぬほど働いても25万だった。。。

f:id:JunichiIto:20141119203138p:plain:w200

外資系社内SE時代(2007年3月-2012年5月 / 29歳 - 34歳)

  • さすが外資系、社内システムやドキュメントも大半は英語だった。
  • 入社した翌日ぐらいに「アメリカのメンバーにメールを送って」と言われて、ドキドキしながら英文メールを書いたりしてた。
  • 毎日のように英文メールを読み書きしていたので、英語のスキルはどんどん向上した。
    • TOEICの点も入社前は660点だったのが、入社後半年で860点になった。(もちろん試験勉強もしたけど)
  • 開発は.NETを使った社内システムの保守や新規開発がほとんどだった。(外注はしていなかったので、自分たちで作っていた)
  • 工場の生産データを分析するためのレポートもよく作っていた。
    • 何億件というデータが格納されているテーブルをいくつもJOINして複雑な計算結果を返す、みたいなレポートをよく作っていたので、SQLにはかなり強くなった。
  • 2009年12月にこのブログを開設。開設当初の目的は技術的なTipsや知識をネット上でシェアすることだった。(今のQiitaみたいな感じ)
  • 休日出勤はしなくなったし、給料もかなり良くなったが、一方で技術的な刺激という面ではSIer時代の方が豊富にあった。
    • 社内SEは使う技術や仕事の内容が大きく変わらないのでマンネリしやすい。
    • SIerは当たり外れが大きいが、「当たりプロジェクト」に参加できるとすごく面白かった。
  • ぼーっとしていると「井の中の蛙」になってしまいそうだったので、資格を取ったり、業務とは全く関係のない技術書を読み漁ったりしていた。
  • 入社当初は景気もまだ良かったが、その後半導体業界の不況とともに情報システム部の予算も絞られていった。
  • いつまで経ってもWindows XPやVisual Studio 2005がアップグレードされないことから、「このままだと技術者として時代に取り残される」という危機感がだんだん強まった。
  • 2011年の春頃に株式会社ソニックガーデン社長の倉貫さんのブログに出会い、「この人、面白いこと言ってるな-」と興味を持った。
  • 危機感が強まっていた時期と、ソニックガーデンが社員募集を始めた時期がほぼ同じだったので、思い切ってソニックガーデンに転職しようと思った。(ちなみにこの時点でRubyやRailsの開発経験はほぼゼロ)
  • 約半年の選考期間(2011年11月-2012年4月)を経て、ようやくソニックガーデンへの転職が決まった。

f:id:JunichiIto:20141119203149j:plain:w200

Web系プログラマ時代(2012年6月-現在 / 34歳 - 37歳)

  • 今までの職場とはいろいろな意味で変わった。
    • 開発するシステムが社内システム系からWeb系(社内LANではなくインターネット上で公開されるWebアプリケーション)に変わった。
    • 自宅でリモートワークするようになった。
    • 大人数でピラミッド型の組織から少人数でフラットな組織に変わった。
    • ウォーターフォール中心のプロセスから「納品のない受託開発」に変わった。お客さんと直接やりとりしながら、毎週どんどんコードやテストを書いていけるようになった。(ドキュメントを書かなくてよくなった)
    • 古くて貧弱な開発環境から、新しくてパワフルな開発環境に変わった(好きなPCやモニタを会社で購入してもらえるようになった)。
    • 周りのメンバーがみんなスキルフルなメンバーだけになった。
  • 技術者として幸せな環境であることは間違いないが、一方で大変な面もある。
    • 求められる仕事のレベルが以前の職場よりも格段に上がった。
    • 以前は上から言われたことをこなせば評価される環境だったが、ソニックガーデンでは自分で考えて行動に移すことが求められる(セルフマネジメント)。
    • 「コードはきれいで当たり前」なので、「きれいに書けるだけ」では周りのメンバーと差別化ができなくなった。
    • お客さんに素早く価値を届けることが求められるので、開発の効率が今まで以上に重要になった。
    • 納期がないので「納期直前に大炎上」みたいなことはなくなったが、ある意味「大きな一つの納期」が「小口化された毎週の小さな納期」に変わったようなものなので、毎週全力で走り続けている感はある。(週刊誌に連載を持つ漫画家みたいな感じ??)
    • 周りのメンバーが勉強熱心なので、なかなか簡単に追いつけない。
  • 「Railsが手に馴染んできたかな」と思えるようになるまで1年ぐらいかかった。
  • 「Railsの開発スキルや"納品のない受託開発"を回すスキルが他のメンバーに追いついたかな」と思えるようになるまで2年ぐらいかかった(つまりつい最近)。
  • 技術知識は多い方だと思っていたが、「知識があるだけでは実務レベルのコードは書けない」ということを思い知った。
    • そういう意味では「技術書を読むだけ」の勉強方法はあまり意味がないということがわかった。
    • 本当のスキルを身につけるためにはインプットだけでなく、アウトプットも重視しなければならない。
  • そういったこともあって、前職、前々職時代に比べて技術書を読む量が圧倒的に減った。また、使う技術がどれも新しすぎて最新の情報はネットからしか入手できない、という理由も大きい。
  • 2012年7月、Qiitaへの投稿を開始。これ以降、技術的な小さなTipsはブログではなくQiitaに書くようになった。
    • Qiitaを使うようになったきっかけはIncrementsの@yaottiさんや@tatata111さんと直接お話する機会があったから。
  • 2014年2月、訳書「Everyday Rails - RSpecによるRailsテスト入門」を公開。
  • 2014年11月現在、株式会社ソニックガーデンのRailsプログラマとして引き続き活躍中。

f:id:JunichiIto:20141119203204p:plain:w150
 

まとめ

いかがだったでしょうか?
淡々と箇条書きで表面的な内容をなぞっていっただけですが、SIer、社内SE、ソニックガーデンと、3つの職場でどんな経験をしてどんなことを感じていたのかが、多少なりとも伝わっていると嬉しいです。


コンテキストは人それぞれ、千差万別です。
僕と全く同じ人生を歩む人はこの世に誰もいません。
あなたがこれから歩むプログラマ人生も、僕が経験してきたそれと全く異なるはずです。


しかし、プログラマという技術職でご飯を食べていくのであれば、全く同じではなくても部分的に参考になる部分が出てくると思います。
特に、「この先、プログラマという仕事をしたときに何が起きるのかまったくわからない」と不安に思っている人に対して、「なるほど、こんなふうにキャリアを積んだ人もいるのか」と、目の前の暗闇に小さな灯りをともすことができたらいいなあと思っています。


ご参考までに!

あわせて読みたい

SIerや社内SE時代に読んだ「今でも使える知識を身につけた技術書」を紹介しています。
【執筆裏話】
実はもともと、今回のエントリのオマケとして「役に立った技術書」を紹介しようと考えていたのですが、メインのコンテンツがなかなかまとまらなかったので先に技術書のまとめを公開しました。


ソニックガーデンに転職する際の、応募から入社に至るまでの選考期間(約半年!)の話をまとめています。


今回のエントリの内容と重複する部分も多いですが、自分の生い立ちやキャリアを振り返ったエントリが他にもあります。



「ソニックガーデンって何?」「納品のない受託開発って何?」という方は、こちらの書籍を読むとよくわかります。

「納品」をなくせばうまくいく ソフトウェア業界の“常識

「納品」をなくせばうまくいく ソフトウェア業界の“常識"を変えるビジネスモデル