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

seri::diary

プログラミングのこととかポエムとか

私は如何にして独学プログラミングでウェッブサービスが作れるようになったか

これ読んでて、自分はどういう風に勉強したのかなと思って独学してた頃のtweetやブログ記事を元にまとめてみた。

blog.livedoor.jp

独学以前

ちゃんと勉強を始める前にもコードを書いた経験があった。これがどれくらい影響しているかは分からないが、「やってみたらそこまで大変じゃないな」という感覚はここで得られたと思う。

大学時代(2006年~2009年)

  • C言語の授業でHelloWorldからbubble sortの実装ぐらいまでをやった。農学部なのになぜか必修だった。
  • 卒業前の暇な頃に基本情報の勉強のために「独習C」を最初から半分ぐらい写経した。
    • 何か作りたかった訳じゃないが「SEとして働くための勉強」という目的があったためかそんなに苦ではなかった。

新人SE研修時代(2009年4月~7月)

  • VB.NETで簡単なフォームを作る方法とDBに接続してクエリを発行する方法だけ教わった。
  • 文法の説明はなかったのでサンプルコードを写しまくってあとはカンで書いてた。

php独学時代

2010年2月~

  • 2010年の2月か3月ぐらいからこの本(の古い版)を買って、自宅のwindowsマシンで夜な夜な勉強し始める。
  • 当時のモチベーションはtwittermixiみたいなBtoC系のwebサービスを作れるスキルを身につけてweb系に転職したい、だった。
  • きっかけは伊藤直也氏の講演を聞いたことだったはずなのに、なぜかperlではなくphpを選んだのはphpが当時流行ってたからだと思う。
  • windowsで開発するのがつらいということにしばらくして気づいて、VMware PlayerにCentOS入れて仮想linux環境上でvimで開発するようになる。
    • 当然linuxの操作なんてロクすっぽわからないので、ひたすら「vmware linux php」みたいなキーワードでググりまくってググり力がついた。
    • php, apache, mysqlをsourceからcompileする方法とかが無駄に身についた。

  • 調子に乗って何も作れないクセにこんなことをつぶやき始める。

2010年10月

  • 「技術ブログ」というものの存在を知り、マネしてこのブログを始めた。
  • 初めて書いたまともな技術エントリーはphpではなく仕事で触っていたjavaに関するエントリーだった。

Finallyとreturnの関係 - seri::diary

2010年11月

  • 全然内容わからなかったけど関東php勉強会とかにも顔を出し始めた。

  • そろそろweb画面も作らなきゃな、ということでhtml, javascript, cssの勉強も始める。

2011年5月

  • twitter APIいじりに飽きてしばらく間が空いた。
  • この頃にCakePHP(1.x)で作ったtwitter likeの謎サービスを世の中に公開する。
  • この頃になるとphp、html、js、cssを一通りいじってwebアプリケーションをラクに作れるようになる。

2011年12月

  • SIerを退職して某制作会社に入社し、コードを書くエンジニアとして働き始める。
  • その後なんやかんやあって現在の会社にいたる。

職業エンジニア時代

2011年12月~現在

  • 以下の言語を仕事で触ってきた
  • 最近は趣味でerlangもいじりだした

考察

今にして思うと、周りに誰もphp書ける人がいない、技術に興味がある人もいない、という状況から独学で勉強できた理由としては2点あると思っている。

「ググればわかる」ということを早い段階で理解していた

「ネットに情報は落ちている」ということをかなり早い段階で知っていた。コードは書かなかったにせよ、SIerの現場で先輩社員が一生懸命ググって調べ物をしていたのを見て、「ITってのはググればだいたいわかるんだ」ということを知ることができたのは大きいと思う。

独学初期にお世話になった媒体としてウノウラボというウノウの技術ブログがある。phpの情報そのものだけでなく、「こういう最新の技術情報をまとめたブログがネットにはたくさん存在する」「イケてるweb企業は技術ブログなるものを持っていてそれはとても参考になる」ということを知ることができたウノウラボには今でも感謝している。

作りたいものが明確だった

最初からwebサービスを作るためにプログラミングを始めた。そのため、勉強しなくてはいけない要素が明確にわかっていたのでそれを順々に学んでいくだけ、というレールを最初に設定できた。
これにより、

  • 「基礎は覚えたけど次にどうすればいいか分からない」
  • 「何に使うか分からない勉強をしてもモチベーションがわかない」

というプログラミング挫折者にありがちな問題をうまく回避することができていたのだと思う。

ちなみに、php独学時代に勉強したことをブレークダウンしてまとめるとこんな感じか。今だとgitとかdeploy toolとかCIとかAWSとかも入ってきて覚えることは当時より遥かに多いと思う。

f:id:serihiro:20160213234927p:plain

今でも新しいことを勉強するときは、最初にゴールを設定してそこに行き着くための要素を細分化して各個撃破していくスタイルは変わっていない。趣味で特定の要素を深掘りしていくこともあるが(例えばdockerのファイルシステムの世代管理の仕組みが気になってUnion-type Filesystemを調べた、とか)、大体は何らかの目的を達成するために勉強しているので必要以上の深掘りはしないように気をつけている。