新卒が入社して一年で学んだこと

あっという間に1年が過ぎ、入社して2年目になってしまった。

MacBookに乗る実家の猫ちゃん f:id:serinuntius:20180404005614j:plain

丁度良い機会なので、自分が1年でどんなことを学び、どんなことを学んで行きたいかを書こうかと思う。

今までと圧倒的に違うのは、プロ(?)としてお金を貰って仕事をしているわけだから、 学生の頃みたいに、飽きたとか、やる気でないとか、テスト書きたくないとか、わからんで終わらしてはいけなくなった。

わからんで終わらせないためにも、英語のドキュメントも読むし、 場合によってはライブラリの中やミドルウェアの中のソースも読まないといけない

これは別に自分一人で解決しなくちゃならない訳ではない。

自分で解決出来なけれ先輩に聞くとかして、とりあえず解決に導かないといけない

なんとかして解決できなければ、いつまでも学生だ。*1

ソースコードリーディング

会社に入ってエンジニアとして働くことになって、他人のコードを読む時間が学生の頃と比べると100倍以上に増えた。*2

まれによくクソコードだなって思ったり、クソコードだと思ってたけど理解したらこうやって書くのもやむなしかみたいに思うこともある。*3

おかげさまで他人のコードを読むということに前以上に抵抗がなくなったので、 疑問に思ったりしたら、わりとラフにライブラリとかミドルウェアとかの中のソースを読むようになった

この習慣を手に入れたのはデカい。

テストとCI

この2つの重要性に気づかされた1年だった。

サービスとかゲームとか長期運用前提で改修も入れていく系で、 テストが全くない or テストが死んでいる のは超ツラいってわかったので、異動、転職のときは

「テストありますか?」

って聞いてみようって思った。 テストないってことは、

そういう文化がない or アプリケーションの寿命が短い

ってことだと思うので、プロジェクトの特性がどんなものなのかがわかる気がする。

テストがないって、ヘルスチェックをサボるロードバランサーみたなもんなんだよな〜

AWS

学生の頃は、さくらとかのVPS借りてゴニョゴニョとかHerokuにPushみたいなことしかやったことなかったけど、 仕事でAWSとか使うようになって、マネージドなDBとか、LBとか、CDN、サーバレスとか触るようになって世界が広がった。

個人でも頑張れば結構なリクエスト数捌ける気がする!*4

触れたサービスはこのぐらいかな〜

  • EC2
  • Elastic Beanstalk
  • S3
  • CloudFront
  • RDS
  • Lambda
  • DynamoDB
  • API Gateway
  • CloudWatch Logs
  • Data Pipeline

負荷試験

学生のことはabぐらいしか、負荷試験の仕方を知らなかったけど、 JMeterで負荷試験するようになって、ちゃんと負荷をかけることができるようになってボトルネックの調査ができるようになった。

infrastructure as code

Chef & Capistrano

案件で自分が実際に使うことはなかったけど、ちょっと使えるぐらいにはなった

Docker

ゲームの部署に異動して、docker-compose.yamlが用意してあって初めてのDockerだったけど感動した。

GoとDockerの相性が最高に良いな〜と感じている今日このごろ。

シングルバイナリっていうのと、マルチステージビルドでビルドしたバイナリだけをalpineとかにコピーしたら Imageの容量めっちゃ減らせる。

Kubernetes

Dockerに入門して、勢い余ってKubernetesにまでツッコんでしまった。

まだ、趣味の領域でしかないけど、 GKEでk8sクラスター作って便利だな〜と感動した。

早くAWSにEKSが来て欲しい。 自前でクラスターを運用する気はあまりない。

言語

今思うと、言語なんてわりとどうでも良くって、

  • ある程度読める
  • ある程度書く人が世の中にいる
  • ある程度生産性がある(パフォーマンスじゃなくて)

この条件が満たせるならある程度なんでも良い気がしてきた。*5

で、パフォーマンスが必要な場合は硬めの言語で書いたらいい。

たぶん日本語とか英語と違って、ベースのロジックとかアルゴリズムさえ理解してれば、 プログラミング言語乗り換えるなんてそんなに難しいことじゃないし、必要になれば勉強すればいい。

Ruby

研修が終わって、配属されたWebの受託の部署で8ヶ月ほど書いた。

Rubyというより、Railsなんだけどw

mapとかの存在を知って、良い感じに書けるようになった。

やっぱり、自分の中で一番サクッと書けるので、ちょっとしたツールとかをサクッと作りたいときに使うかな。

Node.js

コールバックの仕組みが苦手でずっと避けていた言語だった。

自分が理解できない仕組みがあって、理解できない自分を認めるのが怖くて、 〇〇クソみたいなこと言いがちだけど、ほんと辞めようと思った。

AWS LambdaやAPI GatewayやDynamoDBを利用したサーバーレスの構成のときに非常に便利なので頑張って勉強した。

Promiseの仕組みがわかって書けるようになれば、特に躓くことはなかったかな〜。

Serverless Frameworkめっちゃ便利で好きだったな〜。

Perl

ゲームの部署に異動になり、Perlを書くようになった。歴は3ヶ月ほどかな。

あんなに書きたくないと思っていたPerlだけど、*6、ちゃんと書いてみるとそんなにダメな言語だとは思いませんでした。

周りがDisり過ぎてるから、そういうレッテルを貼ってしまっていた感じがする。

少なくとも今僕が携わっているプロジェクトの中では、Perlだからといって困ることはない。 いろいろな書き方ができると言われているPerlで、ここまで体裁を整えたソースコードを残してくれた先輩方に感謝ですかね〜。

Go

RubyPerl->Goって学んだから、ポインタとかが分かりやすかった気がする。

GolandっていうIDEで書いてるけど、コードを追いやすくて神。

困ったら⌘ + B

MySQL

学生の頃は、インデックスとか全く気にしたことなかったし、クエリの数とかもあまり気にしたことなかった。

技術部研修のときに、DBの講座があったんだけど、あのときは

「なんで先輩はそこにインデックス張るってわかるんや」

みたいな気持ちで一杯だったけど、今は少しどこにインデックス張るべきかわかった気がする

今年は

GoとDB(MySQL)とインフラに強くなりたいな〜と。

個人的なプロジェクトのk8sの運用も引き続きやってくぞ

まとめ

まさかの1年もせずに異動したりで、学んだことが多かった。

リストアップするとめっちゃあってびっくりした。 1年濃すぎやろ〜

今年もいろいろ学んでいくぞ!!!!!1

*1:あくまでも個人的な意見です

*2:冗談抜きでそれ以上に増えてると思う

*3:俺がクソコードを書いているというケースももちろんある

*4:捌けるとはいってない

*5:学習曲線みたいな話はもちろんあるけれど

*6:3年の頃にインターンさせてもらってPerlなんて嫌いだって言って社内のエンジニアを賑わせてすみません。あのときは若かった🙇🏻