こんにちは。DSOC開発部の湯村です。
私は今年の4月に新卒として入社しました。学生時代はキノコの遺伝子を破壊する研究をしていて、プログラミングは入社する1年半前くらいに趣味で始めた程度でしたが、今はGEESと呼ばれるSansan、Eightから名刺画像をデータ化するシステムをRailsで作っています。
Sansanの社内制度にGeek Seekというものがあり、書籍などの購入費用が補助されます。
入社してからは、業務での経験に加えて、この制度を活用して購入した本を読むことで、エンジニアとしての成長を加速させていきました。
ということで今回は、他の新卒エンジニアと比較しても知識も経験も少ない私が、入社してからの9ヶ月で業務に必要な知識を身につけるために読んだ本を紹介したいと思います。
エンジニアを目指す方にも参考にしてもらえると幸いです。
プログラミングの作法
リーダブルコード
www.oreilly.co.jp
最初のプルリクで変数名やメソッドの粒度についての指摘をもらいました。その時に『リーダブルコード』を読むことを勧められました。
「変数名に情報量の多い単語を使うこと」、「変数名を用いて処理内容を示すこと」、「制御フローの可読性を上げること」などは基本的なことですが、コードの可読性を高めるためにはとても重要だと思います。チームで開発していく上での基本的な作法について学ぶことができました。
テスト
テスト駆動開発
www.ohmsha.co.jp
学生の頃はテストの重要性を理解しておらず、入社してからもテストを書くのが面倒だなと思っていました。そんなタイミングでチームの方に勧められて『テスト駆動開発』を読みました。
この本を読むことでTDDのメリットを感じ、ケースによってはTDDで開発するようになりました。
特にテストを書くことで設計の問題に気付けることは大きな発見でした。
「アサーションの前準備で要するコードが長すぎる場合、そこには別のオブジェクトが存在する可能性がある」とあるように、テストの書きにくさをフックに設計を見直せるのはTDDの大きなメリットだと感じます。
RSpecによるRailsテスト入門
leanpub.com
Railsのテストで使用するライブラリと基本的な書き方について学ぶために読みました。
テストの書き方について網羅的にまとまっていて、DRYに書くための方法についてもとても参考になりました。
SQL
SQLゼロからはじめるデータベース操作
www.shoeisha.co.jp
システムを運用する中で、DBから特定のデータを抽出する必要がありましたが、SQLの読み書きが全くできませんでした。
そこで、基本的な文法から学ぶためにこの本を読みました。
体系的にまとまっていて、基本的なクエリは書けるようになりました。
達人に学ぶSQL徹底指南書 初級者で終わりたくないあなたへ
www.shoeisha.co.jp
運用を進める中で複雑なSQLを書く必要が出てきました。本のタイトル通り初級者で終わらないためにこの本を読みました。
CASE式、ウィンドウ関数の発展的な使い方や、NULLの扱い、パフォーマンスを意識したクエリの書き方などを学びました。
この本を読むことで、複雑なクエリでも一通り書けるようになりました。
データベース
達人に学ぶDB設計 徹底指南書
www.shoeisha.co.jp
入社後3ヶ月程度でDBの設計を行う機会があったので参考にしました。
論理設計の基本的な考え方や、アンチパターンについて学ぶことができました。定期的に読み返しています。
DBの設計をする上でとても参考になりました。
設計
オブジェクト指向設計実践ガイド
gihyo.jp
任せてもらえるタスクも大きくだした頃に、設計の原則について学ぶために読みました。
「単一責任を持つクラスを設計する」、「クラス間の依存関係を整理する」などシンプルですが、重要な設計の原則を学ぶことができました。Rubyを使って説明されているので、どう実装するのかもとても参考になり、何度も読み返しています。
Rubyによるデザインパターン
www.hanmoto.com
設計の原則だけでなく、具体的なデザインパターンについて学びたいと思い読みました。
Procオブジェクトを用いたストラテジーパターンなどRubyならではの書き方もあり、とても参考になりました。
常に机の上に置いていて、コードを書く時は、参考になるパターンがないかを確認することも多いです。
ユースケース駆動開発実践ガイド
www.shoeisha.co.jp
設計の手法について学ぶために読みました。
ユースケースからオブジェクト指向の設計、コードへと落とし込むための方法についてまとまっています。
直近で設計をした時は、この本に書いてあることをかなり参考にしました。設計する対象の規模が大きくなかったのでtoo muchだった気もしますが、ユースケースの書き方、オブジェクトを洗い出す方法などとても学びが多かったです。
最後に
エンジニアとして成長するためには、実務での経験と座学による知識の吸収のバランスが大事だと思います。
書籍購入制度があるため本を気軽に買うことができ、どんどん知識を吸収することができました。
これからも本を読むことでさらなる成長をしていきたいと思います。