ここまでの流れ

学生や新卒の人と話したりするときに、これまでエンジニア的にどうやって今の状態になったかみたいな話を何度もする機会があって、 その度に色々思い出しながら話してたんだけど、自分用に整理したかったのでついでにオンラインでアクセスできる場所に置くことにする。 なにか新たに思い出したり思い出補正が発覚したりしたら適宜修正していく。

小学生くらい (- 2002)

学校に自由に使える PC があって、卒業するくらいの時期には古いやつと新しいやつの2つがあって、新しいやつのほうに入っていたタイピングゲームで主に友人の K 君と遊んでいた記憶がある。 もう全然覚えてないけど、時期的には古いほうが Windows 95 で新しいほうが Windows 98 だろうか。 自宅にも PC があって、麻雀ソリティアで遊んでいた記憶がある。 PC に初めて触れたのはこのくらい。タイピングゲームに熱中したおかげで、タッチタイピングはこのへんで習得していた *1

中学生くらい (2002 - 2005)

自宅にインターネット回線や Windows 98 のラップトップがきた。もちろんラップトップは家族共用。 このへんでインターネットにはまり始めて、ゲームの攻略サイトの掲示板とかによく書き込んでた。 あと K 君が自分でちょっとしたゲームを作っていて、僕も気になったので HSP で何か書いてみていた。 プログラミングというものを初めてやったのがこれで、なんとなく楽しんでいた気がする。 ただ、そんなに長続きはしなかったと思う。 HSP については今は文法すら覚えてない。

高校生くらい (2005 - 2008)

高校進学と同時に自分用の Windows XP のラップトップを買ってもらい、インターネットにがっつりはまった。 というかだいたい 2ch を見ていた。 2ch にいるような人だとプログラマの割合が高めで、そういう人たちと話しているうちに、HSP の経験や PC というのに興味を持ち始めていたこともあって、何か作りたいものがあったわけじゃないけど C 言語に入門した。 猫でもわかるC言語プログラミング のサイトやそこの本を主に読んでた。 最初は Borland C++ Compiler を使っていたけど、cmd.exe にも多少慣れてきてから cygwin をメインで使うようになって gccコンパイルしていた。 エディタも TeraPad とか Notepad++ をメインで使いつつも、cygwin の中で Vim を使い始めていた。 cygwin もそうだけど、EmacsVim を使ったほうがプロっぽいみたいな風潮があって (?)、最初は Emacs にチャレンジしたんだけど小指を痛めて挫折し、一方 Vim のほうはそういうことがなかったので当時は謎の操作に戸惑いながら無理して Vim を使っていた。

C/C++ の初心者本に載ってるようなことはなんとなく分かるようになって、その後 C に構文が似ているらしいという理由で Perl も勉強し始めた。 CGI とかも書いてみてはいたけど、LWP でインターネットから情報を簡単にとってこれることに感動して、今でいうとスクレイピングみたいなことをよくやっていた。 HTML を DOM としてパースするみたいな発想は全くなくて (というかそもそも HTML/XML というフォーマットや DOM というものについて知らなかったと思う)、ひたすら正規表現だけでがんばっていた。 おかげで正規表現は覚えた。

このへんでプログラムを書くのがすごく楽しくて好きになっていた。 リアルでプログラムを書く仲間みたいなのはいなかった (K 君は別の高校に進学して疎遠になっていた) けど、2ch のプログラム板とかはよく見ていて、大学生の宿題の丸投げスレの問題に解答したり、コードゴルフというものを知って POJ で勝手にコードゴルフにチャレンジしたりしていた。 この頃 Java も少し書いてみたりしていたけど、あまり興味を持てず勉強はしていなかった *2Win32 API とか Swing とかで GUI を書いてみようとしていた時期もあったけど、めんどくさすぎるわりに大したものができなくて、ターミナルで満足していた。

大学生くらい (2008 - 2014)

進学と同時に MacBook を買って、cygwin から開放されて普通のターミナルの使いやすさに驚いた。cygwin ではビルドできなかったり動かなかったりした CLI ツールも動いてすごく便利に感じた。 その結果、色々なプログラミング言語を試せるようになって、Ruby とか Python とか Haskell とか Lisp とか色々入門していた。 その中でも RubyHaskell は手になじんで、その後もしばらく使い続けて、Haskell は最近はもう全然書く機会がなくなってしまったけど Ruby は仕事で毎日使うようになった。 あと大学の図書館で エキスパートCプログラミング という本に出会って、これが本当に面白くて、C を理解する上で大いに参考になっただけではなく、プログラミング言語そのものやランタイムやツールチェインに興味を持つきっかけの一つになったと思う。 そんな流れでもっとマイナーな言語を使ってみたりしつつ、プログラミング言語への興味が高まってそれ系の研究室に所属することになったりした。

この頃からインターネットの中心 (?) が 2ch から Twitter にシフトしていきつつ、はてなダイアリーに何か書いたり、GitHub に dotfiles や雑コードを上げるようになったり、勉強会的なものに少し参加してみたりするようになった。 リアルのほうでも情報系の学科にいったので、プログラムの話をできる友人ができた。 Twitter がきっかけで B2 の後半くらいから学内の ICPC の練習会にも参加するようにもなった。 技術的な成長は B1 から B3 あたりの時期が際立っていたと思う。 色々な言語の仕様を読んだり処理系の一部を読んでみたり、ちょっと背伸びして公開されている論文を読んでみたり、なにかコードを書くアイデアが出たらあえてマイナーな言語で書いてみたり *3。 まぁ競技プログラミングに関しては全然強くはなれなかったけど……

B3 の頃からデスクトップ環境を Linux にしたり、Linux サーバで PT2 でアニメ録画をし始めたりして、Linux とかサーバ管理について少しずつ学んでいった。 Web アプリケーションに興味を持ち始めたのはたぶん B4 の後半か M1 の前半くらいで、sinatraRails に入門しつつ VPS を借りて nginx とか使い始めた。 GUI アプリケーションを書くより HTML を書くほうが圧倒的に楽だと感じて、ここから徐々に sinatraRails を使うようになっていた。 といっても不特定多数の人が使う (使える) ようなものではなく、ただ自分だけが使うツールの GUI として使っていた。 研究室に所属してからは同じ研究室の同期を始めとして同じフロアの人たちに恵まれて、似たような興味分野の人同士で色々話したり聞いたりできて本当に楽しかった。

現在

社会人になってからだいたい何してたかは書き残しているのでそっちに http://eagletmt.hateblo.jp/entry/2015/12/31/212651Rails とかインフラにちょっと詳しくなったりした。

プログラミングは手段でしかなくてゲームを作りたいとかサービスを作りたいとかそういう目的があってプログラミングを学んだり仕事にしたりする人もいると思うんだけど、僕は全くそんなことはなくてただ単純にコードを書くこと自体が面白くて楽しくて書き続けてきた。 なので宿題丸投げスレや競技プログラミング、そして仕事みたいに課題を与えてくれるものがあると助かっていた。 面接とかで今まで何作りましたかとか今後何作りたいですがみたいなことを聞かれても困ることが多かった。まぁこれは今もわりとそうな気がする。 コードを書くのは今では仕事になっているけど趣味でもあり続けている。

*1:これ以降、タイピング速度は今に至るまで上がってない気がする……

*2:そして今に至るまで真面目に書いたことはない

*3:なおこの頃書いたコードは後でほとんど Ruby で書き直された