雑なメモ

学びを記す

プログラミング未経験の元SIerがWebエンジニアの世界に飛び込んで1年が経った話

はじめに

この記事はフィードフォースエンジニア Advent Calendar 2015 - Adventarの25日目の記事です。 前回は hoshinotsuyoshi さんの 私の:santa:アイコンと、おすすめのクリスマスの過ごし方、あるいは新しいrubyのリリースを祝いつつgitのbranch名に:santa:をつける風習とそのせいでCapistranoでのデプロイに失敗するという事象 - Qiita でした。
今回は、プログラミング未経験の元SIerだった私が、Webエンジニアの世界に飛び込んで1年が経った話をしたいと思います。

自己紹介

  • ゆきやん
  • 24歳
  • 社会人3年目
  • 2013〜2014 SIerでエクセル芸人をやってた
  • 2015〜 feedforceに転職し、Software Engineerになる
  • 今年から初めて仕事でコード書き始めたので、エンジニア歴もうすぐ1年です。

入社時の歓迎会で発表したスライド 自己紹介

俺のエンジニアスキル

なんにもなかった。AWSナニソレ感。ググりながらじゃないと1行もコード書けなかった。
ほんの少し独学してたが、ほとんど熱意で拾っていただいた。
というか多分、中途採用でこれほどまでの未経験者を採用した例は私が初な気がします。
ホント感謝しかないです 🙏

俺の職務

Rubyとか書いたりCSVと戦ったりしている。
最近はBigQueryのクエリをよく書いてる。

日報で振り返る1年

feedforceではQiita:Teamで日報を書く文化が根付いています。
そして、僕はネット上では強気でして、感情のブレーキも壊れているので日報に不満日々思ったことを素直な気持ちで書き綴っています。
そこで、ざっと1年分の私の日報を目grepして、その時の感情を思い出しながら振り返ってみました。

1月

  • 1/5が入社日だった。年末年始はずっと緊張とワクワクでおかしくなってた気がする。
  • 環境構築術が足りず、自分の情弱さに絶望していた。よくある環境構築スクリプトとか組んでおけばよかった。(brewまわりとかよく知らずここで学んだ)
  • 自分が携わるプロダクトのコードを読んでメンターに説明するということをやっていた。
  • プロダクションコードを読んでいるのに、公式マニュアル以外の情報(個人ブログ等)だけで理解を進めてしまうことがあった。独学者特有のあれです。ブログの情報は参考程度に留め、最終的には公式リファレンスで裏を取るようにするということを学んだ。
  • 昨日読めなかったコードが翌日には読めるようになったりして本当に楽しかった。
  • 開発環境のモダンさが素晴らしくて、エンジニアとしての欲求が予想以上に満たされて感動してた。
  • 「感動ばかりしてないで、より良い環境を目指す。」とか意識高めなこと言ってた
  • この頃はsublimeユーザだった
  • 自己紹介プレゼンでぶちかました(上記のスライド)
  • MTGでは高度な話題についていけず消耗する。
  • chefやAWS関連の話題についていけず消耗する。
  • 日々身につくRuby力が大きいし、読むスピードも少しずつ上がっていっている。なので、余裕がなくても焦らず読んでいくのが今大事なことだと思う。変に「もしかしてめっちゃ簡単なところで時間かけてるかもしれない、急げー」とか「みんな大変そうなのに俺だけコードリーディングしてる」みたいな思考回路を持たない。とか言ってた。
  • Rails力不足で困ったりしていた。Railsが頑張ってくれてることがよくわかってなかった。「requireしてないのになんでこいつが見えてるんだ」とか。
  • リーダブルコードを勧められたので読み始める。
  • chefについてペアプロしてもらったりする。
  • 僕のチームには新卒がいて、その方も色々教えてもらったりしてる様子だったので横目で見ながら全てを盗んだ。
  • Rubyの動的型付けに惑わされ、脳内スタックが頻繁に崩れることが多々あって慣れるまで大変だった。
  • 「長い処理を追う→あれ、ここなにやってたんだっけ→また戻って読み直す」の繰り返しになって自分の脳内スタックの無さに絶望する
  • 自分が雑魚エンジニア過ぎて燃える。劣等感駆動開発。
  • 独学上がりなので知ってて当たり前な知識を一足飛びにしてきた感が否めないという気がしてLinuxコマンドや開発環境まわり(zshとか)について学び始める。
  • 「コードリーディングすごく疲れるけど、毎日おもしろいくらい学びがあって楽しい。こういう経験ができることにずっと憧れてた。」とか言ってた
  • 不意にBigQueryを触れる機会が訪れ、興奮して調べまくる。
  • コードリーディングが終わり、TDDでの本格的な開発に加わる。
  • Gitは気合で身につけた。山のようにPocketしていたGitのコミットメッセージ集とか奥義を読み漁ったりしていた。
  • Serverspecを初めて触る。
  • glibcの例のGHOST対応を行った。苦手なchef業をペアプロしてもらいながら少し理解した。
  • 「こんなに手厚く教育していただくとは夢にも思ってなかった。」と感動しはじめる。

2月

  • 24歳になった。
  • 本格的にプロダクト開発に関われるようになり、GitHubを使った開発フローにも慣れ始める。
  • Object#eql?Object#equal?の違いについて、懇切丁寧にPRコメントで教えていただけて感動したのを今でも覚えている。(初PRだったかもしれない)
  • direnvというのを知ったり、bundle exec付けなくてもよくなる方法とか教えてもらったりして知見だーとか喜んでたりした。
  • 急な障害が起きてもなにもやれることが無くて反省したりしていた。
  • BigQueryについて本格的に学び始める。初めて読む英語リファレンスの洗礼を受ける。
  • OSSに人生初コントリビュートした。
  • 生意気にissueも書いたりした。
  • BigQueryというか新しいこと(流行の技術)を仕事で使えて学べるのが楽しすぎて毎日テンションがおかしくなってた。
  • わからないことが多すぎて、「あとで深掘りして調べてみる」というタスクが無限に増えて消化スピードが追いつかず、もがいたりしていた。

3月

  • RSpecに苦戦し始める。mockとかstubとか。
  • ある程度コードが書けるようになったが、まだまだバグがあったりスマートじゃなかったりしてダメダメで悪戦苦闘してた。
  • BigQueryで使うための川のようなクエリを書きまくってた。全くSQLの知識がないので勉強になった。
  • RubyのThreadを学んで、むずかしいなあとか言ってた。
  • たまたまシェルコマンドを多用する場面が多かったせいか、非常に勉強になって吸収しまくった。やはり何事も業務で使うと吸収力が断然違うと感じた。

4月

  • 社会人3年目に突入した。
  • その割りにポンコツだと思った。でも後ろを見る時間なんて無駄でしかないから今と前を見る。とか言ってた。
  • 素朴な疑問をslackに投げると反応がドドドッと返ってきて喜んでた。
  • CSVファイルの一般的書式 (RFC4180 日本語訳)を読んで戦う準備をしていた。正しいCSVと不正なCSVの定義を理解するために(闇深)。
  • RSpecですごい難しいインテグレーションテスト書いてて消耗しまくってた。

5月

6月

7月

8月

9月

  • PRの内容を見ないでマージするという話から岡島の投球フォームの話になった。オカジマージ誕生の瞬間である。(滅多にしてはいけない)
  • 毎日のようにSQL書きすぎて病み始める。
  • 夏休みで10連休くらいとって休んだりしてた。
  • CSVの闇と戦ってた。

10月

  • 色々考えてコード書けるようになってた。
  • privateメソッドのテストがダメな理由とか調べたりしてた。テストすべきこと・すべきではないこととか抽象的なこととか考えられるようになってた。
  • すっごい難しいSQL書いてて鬱になってた。
  • すっごい難しいコード読んでて鬱になってた。
  • 日報がめちゃくちゃ暗い
  • Dockerに入門し始める。
  • 社内勉強会でDockerについて発表した。初LTである。

Introduction to Docker

11月

  • 色々助けてもらい精神が回復し始める
  • 進んで止まって、止まって進んで。人はそれを歩みと呼ぶのだ!とか言ってた
  • SQL書きすぎてSQL神と憑依合体したい。とか言ってた
  • 色々あって、組織改善について自分の意見を言えるようになろうと、組織論に興味を持ち始めた。組織に属する人間の一般教養として身につけたほうがいいかなとか思い書籍を漁る。
  • 組織論読みながら、エンジニアによくある負の感情とかとっくに学術的に体系化されてて面白い。早く達観したいとか言ってた
  • 1.5日で800行くらいSQL書いてた。
  • オフィスが移転して心機一転した!
  • StackShareのおかげで弊社のハ イ ブ リ ッ ド ク ラ ウ ド環境が知られ、優越感みたいなものに浸れて嬉しかった。

12月

  • いろいろあってインフラエンジニアと関わることが多くなりEC2とかEBSに詳しくなった。

feedforceで1年働いた感想

何もスキルが無くて不安だったのですが、質問すると懇切丁寧に教えてくれる環境なので安心感がありました。
あと、ちゃんとメンター制度があるのでその間にがっつり教え込んでもらえます。
Web系はなんとなく「できて当たり前、知らないことは勉強しろ」というイメージが強かったのでこの制度には驚きました。
slackも導入してるので、コミュニケーションコストが小さく、気兼ねなく非同期に質問できてありがたかったです。
ペアプロもたくさんしました。そもそもペアプロは初心者だけのものではなく、必要であればいつでもします。
CircleCIやcapistranoを使った継続的デリバリー、DockerによるサーバCIなど当たり前のように行っていてモダンな環境に興奮したし、逆に辛い部分も学べたりしました。
正直、いるだけで成長できます。とはいえ、業務外でもスキルアップに励む人が多く対抗意識が燃える環境でもあります。
純粋にプログラミングが好きな人がほとんどです。
成長中のベンチャーなので、もちろん辛い場面もありますが面談等があるので吐き出す場所が確保されてます。
吐き出せばちゃんと対応してくれます。どうすれば解決できるか真摯に向き合ってくれます。
超楽しい日が多いし、勇気を出して転職して本当に良かったです。

f:id:yukiyan_w:20151225014908j:plain f:id:yukiyan_w:20151225014926j:plain

【オマケ】今年読んだ本

ちゃんと身についてるかどうかは別として、エンジニア1年目として奮闘していく中でいくつか本を読んだので参考までにご紹介します。
じっくり読むのは大変なので、業務しながら「あっこれ、あの本に書いてた、あとであのページ読み直そう」とハッとできるくらいの理解度でいいと思います。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)

正規表現技術入門 ――最新エンジン実装と理論的背景 (WEB+DB PRESS plus)

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

Effective Ruby

Effective Ruby

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

Webエンジニアの教科書

Webエンジニアの教科書

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Google BigQuery

Google BigQuery

世界で闘うプロダクトマネジャーになるための本 ~トップIT企業のPMとして就職する方法~

世界で闘うプロダクトマネジャーになるための本 ~トップIT企業のPMとして就職する方法~

組織デザイン (日経文庫)

組織デザイン (日経文庫)

リーン・スタートアップ

リーン・スタートアップ