mmyoji's diary

プログラミングとか日々のどうでもいいこととか

プログラミング始めてから丁度2年過ぎたので振り返り

2013年12月5日にプログラミングを始めて、大体2年が過ぎたので適当になんか残しておきます。

(ガーっと書いてみて思ったんですが、プログラミングのことより人生のことを綴った感じになったので、「ほんとインターネットにゴミを残してすいません」という気持ちでいっぱいです。)

特に校正とかしてないので話めちゃくちゃかもですが、半分嘘くらいに思いながら読んでくださいmm

プログラミングに興味を持ったきっかけ

ハッキリとは覚えてないですが大学の頃、軽音サークルに所属してたのですが、情報科学/工学寄りの学科の先輩が比較的いて、プログラミングできる人が多かったので「俺もできるようになりたい!」みたいなのは漠然とありました。

で大学2年くらいの頃にC言語の授業があったので興味本位でとってみましたが、ひたすら数式を解く授業でプログラミング以前の問題だった気がします。

#include <stdio.h> は「おまじない」と言われたのも苦い思い出ですw

ですぐに授業行くのやめたので、それが一回目の挫折?ですかね。

プログラミング再チャレンジ

一気に2013年まで飛びますが、4月に新卒で入った会社を8ヶ月で辞めて、11月半ばから2週間ほどニートをして、その間に「よし、IT系で起業するぞ!」とわけのわからないことを考えてプログラミングの勉強を始めました。

CodeAcademyとかそこらへんのサイトでHTML, CSS, JS, PHPあたりを勉強して、勉強したタイミングでは理解できても次の日には忘れてたり「じゃあ何が作れんの?」って自問するとまったく手が動かなかったりで悶々とした日々を送ってました。

バイトしながらプログラミングを学べるチャンス到来

新卒で貯蓄も全然なかったので「とりあえず何かしないと死ぬ!」となり、職種にこだわらず適当に求人サイトを見てたら某スタートアップの「修行僧募集!」という求人を見つけて、「なにこれ面白そう。ダメ元で申し込むか」となって申し込んだら「当日簡単なテストするからJS勉強してきて」と言われ、ドットインストールを教えてもらい、JSの文法やらを一通り勉強して面接?に行きました。

でどんな問題が出るかなーと思ったらFizzBuzz問題が出されて、当時はその言葉も知らなかったのでどういうものを指してるのか聞き、挑戦。 ホワイトボードがあってそこに手書きでコードを書くというなんとも言えない感じのあれでしたが、さっぱりでした笑 何から手をつければいいのか、2週間何を勉強してきたのかほんとうにわけがわかりませんでした。

で質問したりヒントをめちゃくちゃもらいながら何とかそれっぽいものができて、とりあえず試験は終了という感じでした。(覚えてないですが大体30分~1時間くらいかかった気がしますw)

「これはさすがに落ちたな」と思いながらそのあとCEO, CTOと面接(というか雑談)して、CEO氏が「おっけーでしょ?もう合格でいいよね?」とCTO氏に言って、「まぁいいんじゃないですかね」とかって雑な感じで採用(バイトですが)が決まって、翌週から働くことに。

web系なのに体育会系のノリでしごかれる

晴れてアルバイト先が見つかり12月の頭から早速働くことになったんですが初日から「じゃあ環境作ってRails Tutorial一通りやって。1週間ぐらいあれば終わるよね?」と言われて無事撃沈。

初日の環境構築で死ぬほどつまづいて、MySQLが入らなかったりRubyのinstall方法がわからなかったりで散々だったのですが、教育担当をしてくださったベテランエンジニアの方(当時はほんとに怖かった)にキレられながら手伝っていただきなんとかセットアップ。(ちなみにその方とは退職後に会う機会があったのですがまるで別人かのような菩薩ぶりでにやけがとまりませんでした。「教育する際はわざと冷たくするようにしている」と言われてまんまと騙されました。めっちゃ良いお兄さん。)

「1週間で終わらせないとまた無職になる。というか死ぬ。」という危機感と、日々先のエンジニアの方にキレられる恐怖のおかげで、文字どおり朝から晩までPCに向かう毎日を送り、結局8~9日ほどかかってなんとかRails Tutorialを終わらせました。

ただほんとに終わらせただけでした。

OJT

そこからは普通にHotfixや機能開発を振られるようになり、最初の2~3ヶ月くらいはほんとに何もできてなくて「お前Rails Tutorialほんとにやったのか?正気か?」的なことを毎日言われてた気がします。悔しさと怒り駆動で当時は生きてました。

ただ日数が経つにつれて教育担当の方のキャラがわかってきて僕も冗談を言えるようになったり、ピコハンやハリセン、時々グーで殴られるのも慣れてきました。

3~4ヶ月くらいの頃には時間はかかってましたがある程度一人でコードを書けるようになっていた気がします。

オブジェクト志向がちょっとずつわかってくる

半年ぐらい経ったころでしょうか。僕と歳の近い先輩エンジニアの方とペアプロをすることになり、その頃ただ動けばいいだけのコードを書いていた僕に一つの転機のようなものが訪れました。

何回かオブジェクト志向の話を聞いていたのですが、いまいち実装にどう活かすかがその頃は全然わかっていなくて(今も完璧とは言えないですが)、手続き型のようなコードを量産してましたが、「デザインパターン」という何やらオシャンティーなワードを授けていただきました。

色々と教えてもらって、その人のコードを見て感動したりしたのですが、すぐには自分でコードに落とし込めず、ちょいちょいペアプロをお願いしてたように記憶してます。

それから徐々に「クラスってこういうことか!」とかデザインパターン、良い設計などについて調べたり意識するようになって、「今まで自分が書いたコードはクソ!」ということに気づけるようになりました。ちなみに今でも毎日「昨日書いたコードまじクソだな」と思いながら仕事してます。(成長してない)

プログラミング始めてから半年~1年

そこからはバリバリ?コードをかけるようになって、サクサク仕事を進められていたようにも思います。 半年ちょっとぐらい経ってから正社員にもなり、人間として東京で最低限の暮らしができるレベルまで持っていけるようになりました。基本、もやし or 豆腐しか食ってなかったですが。

で僕と同時期に入った別のバイトの子がいて(1個下のはず)、その子がフロント寄り、僕がサーバーサイド寄りみたいなセグメント分けがされていたのですが、その子が辞めることになり、「これは俺もフロントできないとやばいな?」と思うようになり、当時あまり好きじゃなかったJSに手を出すことになります。Backbone.jsという今ではオワコン?のフレームワークを使っていたのでそれを勉強してたのですが、なんだかさっぱりわからず度々挫折してました。ただいつだったか覚えてませんが、CoffeeScriptに出会ったタイミングで急にJSが好きになりました。毎日 coffeescript.org の try coffeescript で遊んでました。

それからなんでもかんでもCoffeeに書き換えたがる病にかかり、昔書いてたコードや練習がてら社内ドキュメント共有用のアプリを作る際などにもjsはCoffeeだけで書いたり、好き勝手やってました。

それからJSの本を何冊か読んだりして、素のJSにも興味が移りしばらくJSばっかり触ってたように思います。Vue.jsは当時はそこまで触ってなかったかな...

あとEmacsを使い始めたのも大体これぐらいの時期だったような気がします。Vimにしなかったのは社内にEmacs使って10年とかのベテランの方がいたので何かあったら聞けばいいと思ってたのと、Vimのモードが当時よくわからなかったのが原因な気がします。

今でも全然つかいこなせていませんが、当時はもっとひどくて、カーソルの移動に矢印キー使って、単にターミナルで作業がしたいという理由だけでEmacsを使ってました。

話は変わりますが、働いていた会社では副業が認められていたので、プログラミング始めてから1年が経つか経たないかぐらいの頃に「もっと勉強したい」という思いから他所でも働こうとスタートアップを何社か回ったりしてました。

初めての業務委託

とあるスタートアップで「勉強したいのでとりあえず1ヶ月無給で、仕事見てもらっていいですか?」と言ったら「いいですよ〜」となったので週1で開発に関わることになりました。そこでもRailsで、最初はテストが全然なかったのでモデル層のテストを書いていくことに。

当時は知らなかったんですが、割と有名な方が開発に関わってて、どんなコードかな?と見てみると信じられないくらい汚く、その時に「有名だからコードが綺麗とは限らないんだなぁ」と悲しい思いをしました。態度もあまり良くなく、障害が発生しても3~5日くらいSlackに現れないこともザラにあって、CEO氏は結構苦労されてるようでした。

1ヶ月後に再度CEO氏と面談をして、「契約しましょう!」という風に言っていただけたのでそこからは機能開発に入るかな、と思いきや「2週間でこういうwebアプリ作ってもらえますか?」と言われ「おぉ...」となりましたが「ミニマム要件でサッと作って、特に広告も打たずにリリースするから大丈夫!」と言われ軽い気持ちでokし、要件をなんとなーく聞いて取り掛かりました。

それまではアプリケーションしか触っていなかったので、前述した方とは別の業務委託のエンジニアがインフラ/フロント要員で入っていただけることになりました。

週1という契約だったのですが当然間に合うはずもないので、その頃は多分週3分くらいは稼働していて、本業と合わせても休みなく仕事していたように思います。ただ0から書けるのは楽しかったので突然の仕様変更以外は楽しくお仕事させていただきました。

またインフラ/フロント要員で入っていただいた方が「これぞフルスタック!!」と呼べる人材でコードを読んでいて「うおぉぉ...」となることが多々あり、とても勉強になり、満足いく経験ができました。その時にいろんなgemを教えてもらったような気がします。

結局3週間ほどかかってリリースをして、特に大きい障害も出なかったのがよかったです。

それからすぐその優秀なエンジニアの方に「一度お会いしてみたいです!」と言っていただき、「そんなそんな...僕みたいな小物...///」となりつつもお茶することになりました。

コードを見ていてもすごかったのですが話をしてみると、もっとすごいことに気づき、「今度うちの会社に遊びに来ませんか?」と言っていただき、二つ返事で「行きます!」と言いました。ただそれがこの業界の採用文句だとは当時全然思っておらず「わーい他のオフィス遊びに行けるのたのしみ〜」くらいにしか思っていませんでした笑

エンジニアとして初めての転職

見出しに結論書きましたが、遊びに言ったらオフィスがめっちゃ綺麗でフロントに受付嬢いるし「やべぇ」となり、CEO氏と二、三回会ったりしてトントン拍子で転職が決まりました。給料も200万ほどアップしたので迷いはなかったです(守銭奴

で働いてたところには「俺より強い奴に会いにいく」と言い、退職。

で実際に入ってみると「おぉ、こんな薄いController初めて見た...」「model層ってこう書くんだ...」「git全然使えてなかったな...」と何かと感動することが多く、今まで書いてたRailsが全然Railsじゃなかったことにも気づき愕然としました。

そこではサーバー・インフラ寄りのことをしてほしいと言われてて、インフラ知識が全然なかったので誘っていただいた方に丁寧にインフラ周りのこと、設計のことについて教わりました。

あとは一緒に働いていた業務委託のRailsエンジニアの方がめちゃくちゃ綺麗なコード、綺麗なコミットをする方で、仕事もありえないくらい速く、圧倒的成長環境としてはかなり恵まれていたと思います。

それまではあまり本で勉強するということをしてなかったのですが、「この本は絶対読んだ方がいい!」と何十冊もおすすめ本を紹介していただいたので、それから(活字離れが進んだ若者でしたが)がんばって本を読むようになりました。それと同時に「どうしてこの本もっと早くに読んでおかなかったんだ...」と後悔もしました。書籍学習めちゃくちゃ良い。

で色々なことを学ばせていただいたのですが、pivotや、それに伴いメンバーがどんどんいなくなっていく中で、仕事の進め方に関してCEO氏と意見が合わないことに気づき、入社して半年ほどで退職しました。

ただ退社して2週間後くらいに「清算したらしいよ」と別の会社の社長から聞き、辞めても残っても大差なかったなぁという感じでした。そしてそうなったのも割と納得できた(そういう雰囲気があった)ので、そこまで驚くこともなかったです。

フリーランス ~ 現在

でエンジニア的話というより人生の話が多かったのですが、今に至ります。

「俺はもう会社に属するのは無理だ。死のう」というネガティブな部分がないわけではないですが、業務委託でも全然仕事もらえるというのと、「色々なところで働きたい」「色々な会社にばらまかれたクソコード群を撲滅したい()」という思いの下、しばらくはフリーランスでいいかなぁという感じで働くことにしました。

(クソコードに関しては僕が偉そうに言える立場にありませんが、どこに行っても綺麗なコードを見れることがほんとうにないので、多少なりとも綺麗にできればいいなぁという程度です)

年内は退職後最初に決まったスタートアップで週5, 11月からは別のUSでサービスをlaunch予定のスタートアップで週1で仕事しています。後者はCEO, CTOが日本人じゃないため基本英語でやりとりするのが楽しいです。英語使う機会 is 大事。

年明けからの契約は特に決まってないですが、今上記の会社以外で4社ほど話をしているので、体制とか給与がいいところで働ければなぁーとか思っています。山にこもっていろんな本を読んだり、今まで触ってこれなかった言語とかツールも触りたいなぁと思いますが、仕事を頂ける間はがんばって走ろうと思います。

てな感じでダラダラと書きましたがおわり。あと1年経ったら色々とできることが増えてることを願って。