はじめに
はじめまして!株式会社クルーバーでWebエンジニアをやっております、加藤です!
現在入社2年目で『自動車中古部品ECサイト Croooober.com』の開発、保守を担当しております。
さて、今回の記事では、過去の自分が学びを得た本や「あの時この本を知っていれば...」と感じた本をまとめました。これからエンジニアを目指そうと思っている方、4月からエンジニアとして就職することが決まっている方に向けての記事ですが、自分の過去を振り返り現在地を把握する目的もあります。
少しでも参考になれば幸いです。
- はじめに
- プログラマーとして汎用的な技術、知識
- 低レイヤに対する知識
- UNIX関連
- ネットワーク
- データベース
- 開発手法、設計手法
- コードの書き方
- 生産性、組織改善
- Java
- Ruby & Ruby on Rails
- 最後に
プログラマーとして汎用的な技術、知識
より良いプログラマーになることを目的としており、効率の良い開発やチームでの開発に個人単位で求められるマインドセットなどを学べます。
言わずとしれたエンジニアの入門書ですね。(この書籍が20年以上前に出版されていたのだから驚きです) 直近ですと、翔泳社の「ITエンジニア本大賞 2022」で「技術書部門大賞」という輝かしい賞を受賞しておりました。
専門用語も多々ありますが、IT業界に興味を持っている方なら問題無く読めるレベルだと思います。
この本ではRESTfulAPIはどのように扱うべきか?どのようにデータのやり取りが行なわれるか?等、そのままWebを支える技術を学ぶことが出来ます。
皆さんや私が良く利用している「Web」のバックグラウンドにある技術を学ぶことは、開発を大いに手助けしてくれるでしょう。
今後のIT業界においてWebは切っても切り離せない存在です。
特に「そもそもRESTってナニ?」と思った方は必読です。(私もそうでした)
低レイヤに対する知識
「コンピュータが何故プログラムという命令を理解するか?」ということを、わざわざ進んで理解する人は多くないと思います。
システム開発の業務では「機能の実装」「保守」などのサービス向上のための対応が優先され、高レイヤの部分に注視しがちです。
しかし、コンピュータの基礎となるOS(低レイヤの部分)は、あらゆるアーキテクチャに共通している技術。ここへの理解を増やすことで、新しい技術が出てきた際のキャッチアップを高速化することも可能です。
また、汎用的で枯れた技術ですので、IT業界特有の流行り廃りに振り回される可能性が低く、継続した学習さえ続ければ強力な武器になると思います。
UNIX関連
広義のシステム開発において、Linuxは切っても切り離せない存在です。この本では各種操作コマンドや扱い方、Linuxの元となるUnixの設計思想などを学ぶことが出来ます。
初めてエンジニアになる方の中には「WindowsやMacしか触ったことが無い」という方もいらっしゃると思います。近年のエディタや環境構築の進化は凄まじく、コードを書くだけならGUIのみで完結するかもしれません。
しかし、「不具合発生時の調査」「構築されている環境に変更を加える」など、サーバーの設定の操作が必要になる場合にはLinux&UNIXの知識が必要です。
UNIXコマンドは便利ですが、1発で多くのファイルを削除したり、セキュリティ的に危険な状態に導いてしまう可能性があるため、業務を進めるためにはきちんと理解しておきたいですね!
ネットワーク
AWSの各種サービスや設計思想を学べる1冊です。
AWSは提供しているサービスも多く、どうしても継ぎ接ぎの知識で環境構築しがちですが、体系的に勉強し設計思想を理解することで、より最適な形での構築が可能になります。
近年は環境のクラウド化などによって、ネットワークの設定がある程度ブラックボックス化されていることが多い思います。そのため、知識が無くても開発からリリースまで出来てしまいますが、その根底にはどのような技術があるのか?
難易度は高いと思いますが、中途半端に学習してしまった影響で断片化してしまった知識を整理するためには最適な書籍だと思います。
データベース
データベースに関する基礎知識を会得出来る本です。
近年の各種フレームワークではデータ操作をメソッドに置き換えられていますが、新規開発時の構造の設計や、データの修正を行なうエンジニアにとって、SQLの知識は必ず必要になります。
CRUDは勿論ですが、結合、インデクス、トランザクションなど、体系的に学んでおくと業務中の不安を減らせるでしょう。
開発手法、設計手法
開発手法、設計手法に関する書籍です。
駆け出しの段階だと、いきなり設計に携わることはそう多くないと思います。
ただ「将来設計する際の基礎知識の会得」「様々な手法の特徴や思想を知り、良いところを日々の開発に取り入れる」など、身に付けておけば様々なことにフィードバック出来ると思います。
コードの書き方
コードを書く際やシステムの設計時に考慮すべき規則、考え方が上手くまとまった書籍です。
サブタイトルの「3年目までに身につけたい一生役立つ101の原理原則」と、初心者には特におすすめの1冊です。
「スパゲッティコード」などと悪いコードは槍玉に挙げられがちですが、では"良いコード"とは?
変数名を考えるのが面倒でついつい`num1 = 0`みたいに書いちゃったりしてませんか?
良いコードを書くという点では「プリンシプルオブプログラミング」に近い部分がありますが、こちらはよりコードにフォーカスを置いております。
具体的な実装例などもあるため、イメージしやすいのも本書のメリットです。(挿絵のジョークも癖になります)
個人的には「プログラミングは8割が命名」だと思っていますので、命名の部分は必読です!
上記2冊は弊社の研修カリキュラムにも組み込んでおります。
生産性、組織改善
システム開発では「個人として」「チームとして」の生産性や組織改善が求められます。
開発メンバーとして行動する場合は「個人」の生産性を求められますが、開発チームのリーダーにはより大きな範囲である「チーム」としての生産性が求められます。
「チームという組織を如何に健全に保ち、生産性を高め続けられるか?」ということに興味があれば必見です。
尚「LeansとDevOpsの科学」は、弊社の勉強会用書籍としても採用しております。
Java
Javaの学習入門書籍です。
世の中にプログラミング言語は数え切れないほどありますが、まずは静的型付け言語の代表の1つであるJavaを学ぶことで、データの型やオブジェクト指向に対する理解を得ることが出来ます。
また、オブジェクト指向の学習で躓く方は非常に多いと思いますが、特にこの本は分かりやすく解説されておりますのでおすすめです。
Ruby & Ruby on Rails
弊社では店舗で使用している基幹システムのリプレイスを行なっており、新しいシステムではRailsを用いて開発を進めております。
「チェリー本」として有名な入門書です。「プロを目指す人」と名のある通り、実践技術をメインに学べる本です。
「書き方は色々存在するが、このケースではこう書くと良い」という著者のお勧めに沿ってRubyでの自然な書き方を学べます。また、後述するテストの書き方、デバッグ方法の説明も手厚く書いてあります。読者に寄り添った文体で人気の入門書です。
また、著者の伊藤淳一さんはQiitaにも記事を投稿しており、RSpecの解説記事にはかなり助けられました...
使えるRSpec入門・その1「RSpecの基本的な構文や便利な機能を理解する」 - Qiita
プログラミングの初学者の方にもおすすめなRailsの入門書です。
Ruby及びRailsでよく使用される整数、文字列、配列、ハッシュと言ったオブジェクトの理解にも役立つと思います。
Railsで必要となる知識を学ぶことをゴールにしているので、メソッドやクラス、モジュールの作り方、使用方法など、最低限必要となる知識を効率良く学べます。
また、以前弊社の勉強会でもこちらの本を採用し、勉強会の議論のネタに使わせていただいておりました。
Rubyは国産言語でもあることから、読みやすい本が充実しているのが良いですね〜
最後に
今回紹介した本は、全体的に「ブラックボックス化されている部分を理解する」という書籍の紹介が多めです。
エンジニアにおいて「何故動作しているのか分からないが、動いているので問題無い」というのは、今後不具合などにより損害を生み出す可能性が極めて高くなり、保守の観点における責務を放棄していると言えます。
サービスを「より早くリリース」「より安全に動作させる」「より長く使われる」ことを追求し続ける姿勢を持ち続けることが、チーム、顧客、市場から求められるエンジニアになる唯一の道と思っておりますので、今後も学習を続けていきたいと思っています!
今後も良い本があったら、記事を適宜アップデートしていきたいと思います!