id:r7kamuraのプログラミングこうやって覚えたの記事とかに触発されて、自分もこれまでの自分とプログラムの関わりについて書きたいと思った。いい機会だし、書いて見てる。
中学生のころ
僕とPCの出会いは中学生のころ。windows 98を買ってもらったので、ひたすらゲームするってことをしてた。
優秀なエンジニアの人は結構子供の頃のどこかの段階でプログラムとかに興味を持ちはじめてるみたいだが、僕自身も何らかのことがきっかけでプログラミングという言葉を知り、興味を持ち始めた。ただし、僕自身は中学生の頃はまるで続かなかった。プログラミングというものにまるで面白さを感じることが出来なかったし、そもそも理解できなかった。いろんな人が経験するように、ポインタの部分でやる気が無くなってやめた。なんの言語をやっていたかさえ覚えていない。
そのあとは結局ゲームするだけになった。
大学の実験で
中学から高校まで、PCには触っていたけれど、プログラムには全く触れて来なかった。その次に触りだしたのは、大学で情報学科に入り、実験をやったころだ。2回生の時である。この時に最初に触れた言語はC言語である。
実験で最初にやったことはいろいろなソートを実装すること。バブルソート、挿入ソート、クイックソートとかを実装した記憶がある。全然プログラムやったことなかったし、最初の実験の授業で「プログラムの基本的なことは出来る前提で話をするので、分からない人は勉強してきてください」って言われて、ひどいきつい思いをしたことを覚えている。1回生のときに言っておいてくれれば勉強してきておいたのに。
結局実験では下のようなことをした。
- 2回生前期でソートの実装
- 2回生後期でクライアント・サーバの実装と簡単な素子を使った電子回路の実験
- 3回生の前期でコンパイラの実装と回路シュミレータを利用したCPUの実装
- 3回生の後期でロボットプログラミングとエージェントプログラミング
- ただしこれは選択式で、他の選択もあった
この頃は徐々にプログラミングって面白いと思い始めてきてた。でもどうやって自分の生活で実用的に利用するのかよくわからなかったし、趣味でやろうと思うくらいには楽しさを感じてなかった。正直この頃はプログラムより寮の運営とかの方が興味があってそっちをやっていた。
はじめてのエンジニアとしてのバイトで
3回生の後期くらいから初めてエンジニアとしてバイトをした。京都にあるKNDBという会社で。
この頃は実用的なプログラミングというものをまるで知らなかったので、最初はサーバの簡単な管理から教えてもらった。やったことは非常に簡単で、サーバにlinuxをインストールしたり、iptablesをちょっとだけ設定してみたり、mysqlをインストールしたりなどといったことをした。これまでlinuxなんて殆ど触ったことなかったし、普通によくわからなかった。それでもこの作業は新鮮なことをたくさん学ばせてもらい、とにかく楽しかった。
このような作業をプログラミングというのかはわからないけど、この時にようやくプログラミングの楽しさを学んだ気がする。全然理解できなかったので、家でlinuxの使い方とかmysqlの使い方、webアプリケーションの作り方などの初心者向けの本を買いあさって、自発的に勉強するようになった。それまでは勉強する意欲がなかったので、ここが一つの転換期だと思う。
さらにその後少しずつ分かるようになってからは、実際にwebアプリケーションの構築の仕事をすることになった。この時の言語はPHP。フレームワークはsymfonyというのを使っていた。この時が初めてプロダクトになりうるコードを書き始めた時期だと思う。
実際には受託の作業として、これまでphpを素で使い書かれていたwebアプリケーションを、symfonyに載せるということをしただけだった。もともとあったコードはひどいコードばかりだったし、自分もあまりにも未熟だったので非常にひどいコードを書きまくった。でもこの時はできる限り良いコードを書こうと心がけて、わからないことは適当にやるのではなく、とにかく調べたりほかの人に聞くということを心がけていた。このやり方はその後良い方向に働いたと思ってる。
このバイトはプログラミングの楽しさというものを教えてくれた。そこは本当に良かったと思う。ただ結局いろいろあって、この会社は辞めることになる。その後にはてなにアルバイトとして採用してもらった。
はてなエンジニアバイトとして
4回生の前期からは、はてなでバイトをし始めた。このころは大学を休学していたため、週に4日くらいのペースでバイトに行っていた。
それまではちょっとコードを触っていた程度であったが、このころから本格的にプログラミングを始めることになった。正直perlもjavascriptもわからなかったし、フレームワークについてもよくわかっていなかった状態で、はてなに入ることになり、まるでついていけなかった。最初の研修は全くわからないままid:ninjinkunさんに助けられながらコードを書いてたし、最初の半年間はランチの時に話す技術的な話が全くわからなかった。自分で適当にwebアプリケーションを作ってみたいと言ったときに、みんながまずはフレームワークを作るところからやったらいいんじゃないって話になって、どうしたらいいのか分からない感じになったりもしてた。この頃は自分の無知さが本当に悔しかった。
この時の悔しさをばねにとにかく勉強した。perlやjavascript、webアプリケーション、mysql、サーバなどそのあたりのことが書かれている本を買って、勉強しまくった。それで勉強したことはあとからも参照できるよう、ブログに書きまくった。これをしているうちに日々の生活で生かせるようなものも作れることに気づき、プログラミング自体に大きな楽しさを感じるようになった。
また、仕事の一貫としてid:antipopさんにCPANモジュールを書いたらいいって言われて、初めてCPANモジュールを書いた。この時に自分が作ったものが全世界に発信できるということを知った。
上記の、「実生活へのプログラム利用」の気づきと、「自身のプロダクトの発信の容易さ」ことへの気づきがあってからは、特に苦労せずにプログラミングの勉強をすることが出来た。とにかくやりたいことに対して、学ぶというサイクルを繰り返すだけでよくなったからである。自分の生活を便利にできるようなものをいくつか作るようになったし、それらは全て公開するようにした。
どこが転換期となったか
これまでを振り返ると、今のようにプログラムを勉強するために、どこが転換期になったのか知ることが出来た。
一つ目の転換期は初めてエンジニアバイトをし、プロダクトになりうるコードを書くことになったことにより、プログラミングに対して漠然とした楽しさに気づいたところである。その前まではプログラミングに対して自分の時間を使ってまで勉強する気にはならなかった。だがその後からは、何をしたらいいかわからないながら、勉強をするようになった。
二つ目の転換期は、はてなエンジニアバイトとして「実生活へのプログラムの利用」に気づいたときである。その前まではプログラミングに対して何を勉強すればわからないけど、とにかく勉強するようにしていた。その後からは自分の生活に関係して何を作るか決め、それに必要な勉強をするようになった。適切にinputとoutputが出来るようになり、技術が身につくようになった。
この二つの転換期がなければ、今このようにしてプログラムを書いていることも無いと思う。
これからは
これからはプログラミングというものが仕事になっていく。これまでの「気づき」を意識しながら、仕事に取り組み、仕事から得たことを趣味のプログラムに生かし、趣味から得たことを仕事のプログラムに生かす事によって、良い循環を作っていきたい。