11月1日
に書いたことにしとこう。
内定もらったのがちょうど去年の10月28日(火)23:22。電話にて。条件付きではあったものの、ただただ嬉しくて師匠にすぐ連絡した気がする。
それはおいといて、そこから実務でエンジニアとしてやっていくための準備が始まりました。
それまではCakePHPとjQueryとRailsをほんの少し触っていたものの、いざ業務となると話は別です。
内定もらってすぐ会社に行って、こんな本読んだらいいよ!みたいなのを教えてもらって修行が始まりました。
いわゆるfreeeへの闘争というやつです。
前職では引継ぎや挨拶回りした後有給に突入し、それから入社まで大体の時間は課題図書を読んだり、ものをつくったりして過ごしました。
今回はこの1年で
・どんな勉強して(何読んで)
・何ができるようになって
・何ができてないのか
を書きたいと思います。業務より少し広い範囲でエンジニアとしての道のりを定点観測する大事な時期だったり。
入社前の課題(11月〜1月半ば)
内定とほぼ同時に言い渡された(表現的に受け身ですがとてもとてもありがたかったです)課題図書、3ヶ月でマスターしようシリーズ。
毎週会社に報告に行ってKPTを振り返り、今週はこんだけやります!って宣言してまた次の週、みたいなのを繰り返してました。
そのときの内容、Evernoteに「精神と時の部屋@freee」ってタイトルで丸々残っててそっ閉じせざるをえなかったです。
Webサイト
Railsチュートリアル4.0版
jnchitoさんのRspecに関するQiitaまとめ
Railsガイド
書籍
ものづくり
・二次会会場検索
・端末管理システム
・書籍管理システム
まず最初の1週間でRailsチュートリアルをやりました。実質4日くらいでひーひー言いつつ…。
途中から全然わからなくなってきて、でもこれ次行くときまでに最後まで動かせんかったら未来はないと思え…みたいなテンションでとりあえず出てくるエラーを潰しつつ最後までやりました。
結局半年くらいで4周写経しました。
1周の写経と写経の間にいろんな知識が身についてて(Rspec勉強する時期がったり、都度Rubyのメソッド調べたり)、やるたびに理解は深まってるのを感じたものの、最後に写経したとき、最後の方やっぱ難しいと思った覚えがあります。
1周目で
・マジRspecわかんねぇ
・RailsとRubyの境目どこだよ…
って思ったので、次に
jnchitoさんのRspecに関するQiitaまとめを読んだ上でEveryday Rails(Rspecのチュートリアル的な本の邦訳PDF。先に書いたjnchitoさんが翻訳)とパーフェクトRubyをやるという流れです。
こんな感じで特にわからないと感じた部分に関連する関連書籍を週3冊程度、それぞれ100〜250pずつくらい読み進めました。
11月末からは社内の端末を管理するシステムを設計して作り、Rspecも足してみるというのをやり、正月には書籍管理システムと作りながら年越しました。
バーコードリーダーでISDN読んで楽天APIをたたいて書籍名を引いてくる、というのをどうしてもやりたくて(こんくらいできないと未来はないと思えと思いながら)必死だった気がします。
1月からは業務も始まりつつということで、12月までに大体読み終えて(わからんものはわからんと割り切って)入社という形になりました。
当時通っていたプログラミングのスクールは年末でゼミが終わるということで卒業制作に勤しんでました。
こっちはこっちで必死で、
・食べログAPI
・GooleMapAPI
・ページ下部でクリックしたら上部まで戻るjQuery
・非同期通信
・UIの何かしらのライブラリ
をなんとか使いたくて、これはやる!って言ったものはとりあえず全部動かしたと思います。
結果できたのが、現在の近くにある飲み屋さんをマップ上に表示しれくれる、二次会会場検索サービス各参(かくさん)。※ふりではない
Qiita teamとか振り返ってみると、なんかすごい遠慮してる感じ…(1月半ば〜3月)
入社してすぐはあまりにもコード書けなくて、このままではあれですね的な面談を受けつつ社内向けの機能をリリースしたりしてた気がします。
private APIをいじって、クライアントも準備してみたいな感じでチームをまたぐ開発をしました。一歩一歩調べつつ。
コードの実行を途中で止めてデバッグする、というのを最初に教えてもらっていっぱい止めて動きを追いかけてました。
一方でどういう書き方がいいものか他社のコーディング規約を読んだりしたり、リファクタリングの本読んだりしたものの、
・cookpadコーディング規約
周りの人に相談してやっぱ手動かさないとどうにもならんよねってことで基礎振り返りつつとにかく写経してたっぽい。
・パーフェクトRuby(再)
・楽しいRuby
・パーフェクトRuby on Rails
あと、メタプログラミングRubyとか読んでて、よくわからんかった。
2015年10月10日に新版発売。
転職3ヶ月経った直後の記事、こちら。
ただ、なんかこの辺りのQiita teamの記事1つ1つに空回り感というか、できない負い目みたいなのを感じられて胸がすごい苦しくなった。
まわりを頼れ!!!(4〜5月)
上でも触れたものの、なんかこうできない自分の負い目で過度に遠慮してまわりにあまりもの聞けないみたいな時期があって。
もちろんコード書くのはまだまだだったものの、それ以上に仕事のスタンスとしてある程度調べてわからなかったら周りに頼って聞く。自分で調べてどうにかするのが大事なんじゃなくて、ちゃんとリリースすること、聞くことを通じて爆速で成長することが大事やから!っていう話をしてもらった。
その流れもあって全社の朝会と社内イベント企画みたいの担当させてもらうことになった。
そこから少し肩の力が抜けて変わり始めた気がします。
この時期は
・Railsチュートリアルもう1周
・リファクタリング案件向けにEveryday Railsもう1周
・Code SchoolのRubyシリーズ講座毎晩
・お決まりの書き方が知りたくてRails3レシピブック
・Growing Rails Applications in Practice訳して読んだ
をやってました。
やることががらっと変わる(6〜8月)
紆余曲折を経てチームが変わりました。それまで馴染みのあまりなかったseleniumをたくさんたくさんたくたくさん触って、コードを書く量は少し増えたと思います。
それにプラスして、同じ技術を使って他のチームをサポートするコードを完全に自力で書き、その過程で技術選定もやってみました。
それまでは既存のコードに足して機能を追加したり、リファクタリングしたり、バグ直したり、調査したりと一から書くことはあまりなかったのでものすごい勉強になりました。
通常業務にもだいぶいい影響があったり、もう少しインフラ周りも勉強しないとと実感したり。
そのとき一番お世話になったのがこの本でめちゃくちゃ面白かったです。
それと、Railsチュートリアルよりももう少し実践的で具体的なサンプルあるもの写経したいと思ってこの本やりました。
プロジェクトでも目にするような設計になぜなっているのかシンプルな作りのものを作り変えながら進めていくのですごいよかったです。これはもう2周くらいしたい。
続編はKindleのみ。
あとseleniumの基礎とQAについて。
自分が主に育てていく領域をもつ(9〜10月)
新しいチームにも漸く慣れ始めてきたとき、それまで使ったことのない、型のある言語でクライアントアプリを書くことに。
わからないながらも短期間であほほど調べて何とかリリースを重ねるうちに、いつの間にがこれまでで一番大きな開発をやることになっていました。
まだ出たばかりのものを引き継いで、単にコード書くだけでなく拡張性を考慮して設計したり、修正のフローやサポートのしかたを考えていく楽しいプロジェクトです。
周りには何年もプログラミングを経験している人がいる中で思い切った開発させてもらうにはきっと社内に知見がそんなにない分野でもオーナーシップをもって諦めずにやりきるしかなくて、チャンスがあれば食い気味に案件取りに行くしかないと思っています。
そうやってもらった案件には愛着しかなくて毎日楽しいです。
最近はこの本も読んでて、本当に楽しい。
ある程度馴染みのある分野ならなかなか手を出せなかったJavaScriptとも仲良くなれるかも…という淡い期待があるからこその楽しみですが、QA的な分野にも活かせたらなぁなんて思っています。
ただ、やっぱりJavaScript書くならがっつりフロントやりたくてまだまだ距離あるなぁと感じつつ。
今の案件だとそこまでフロント書く感じではないですが、apiがっつり触れるタスクやらせてもらって詳しくなった上で、それ使いこなしてフロントへ…みたいな流れになるようお仕事もらおうと企んでます。
そういう意味だと.NETのWPFがけっこうイベントイベントしているので前よりは理解しやすくなってるのではとも期待しています。
身に付いたこと
という流れでこの1年で何が身についたんでしょう?
Rubyの基礎
・とりあえず今やりたいことは普通に調べて出てくる程度のメソッドでやりくりできる程度。
・メタメタしていると一切理解不能。
Railsの基礎
・処理の流れはbinding.pry挟みながら何とか追える程度。
・Railsコミュニテイで盛んな設計(formとかpresenterとかserviceとか)は何となく真似する程度。
・いやでも画面とかフロントエンド絡むと途端に手止まるなぁ…
まとめると、処理の流れは何とか追って既存のコードの真似して何とかコード書いているものの、設計思想とかパターンへの理解が曖昧で書くのも読むのもいまいち確信が持てない状態。
フロントはからっきしダメ。
直近身に付けたいこと
オブジェクト指向
・C#書いててどかっと新しい機能足すときに「ザ・オブジェクト指向」なところで完全に手が止まる。
設計
・こういうときはこういう設計するよね、みたいなの知りたい。
・なんでこういうフォルダの切り方するの?みたいなの普通によくあるデザインパターンだったみたいな事例があった。
フロントエンド
・この期待感を形にする
まとめると、少し実装は追えるようになったきたからこそなぜそうなっているのかを理解して自由度を上げたい。
身につけるべきこと
あれもこれも多すぎてもはや分野列挙することしかできない…
・CSS
・テスト
・SQL
・UNIX
・DB、モデリング
・git
・コンピュータのしくみ
・セキュリティ
・ネットワーク
・サーバ、インフラ
うわぁ…テストとCSSはさすがに情けなくなってきたので早めに…
まとめ
できるようになってきたかも…!みたいに思い始めてきたことって単にひたすら似たようなこと繰り返してるだけで以上でも以下でもないです。
だからこそ特定の分野は割り切ってその期間ひらすら没頭して成果を上げて、新しいことできる機会があれば絶対逃さないの繰り返しの気がします。
なんとなく全体感の中で足りないこと、足らせたいことは意識しつつ。
結局最高に気持ち良く没頭できることがしたい、できるようになって気持ちよくなりたいに尽きる。