私が新人エンジニアの頃に読みたかった書籍5選

new-engineer-books-min

 

私はエンジニアになってまだ1年程度ですが、当時読んでいれば今頃もっとスキルも伸びてただろうなあという本がたくさんあります。当時はProgateばかりしていて、「プログラミング言語だけ」を勉強していました。実際にエンジニアなって思うことは、言語の勉強はたいして重要ではないということです。

 

これからエンジニアになろう、という方がいらっしゃれば、覚えておいてほしいことは、「エンジニアの仕事はプログラミングだけではない」ということです。実際にコードを書く以外に設計を考えたり、技術選定をしたり、チームでコミュニケーションをとることもとても大事なことです。

 

エンジニアが増えていくこれからの時代に、もっと強くなるために早い段階で読んでおくとスキルの伸びしろがぐーんと増える、そんな本をご紹介します。実際に私も読んでいますし、先輩エンジニアからもオススメされたものばかりです。ぜひ書店などで手にとって読んでみてください!

 

もはや鉄板!『リーダブルコード』

はじめの頃は「どんなコードを書いたらいいか?」に迷ってしまうことがよくありました。先輩方のコードを読んで参考にしつつも、コードレビューで指摘されては直すということばかりで、単にコードを書くということだけではない難しさを知りました…。

 

人が書くコードにはその人のクセのようなものがありますが、それでも「いいコード」「悪いコード」は存在します。例えば

 

  • この変数名が何を意味しているのか分からない
  • 何度も同じような処理を書いている
  • メソッドの責務が単一ではない
  • 逆に長過ぎて読みにくい
  • コメントが多すぎて読むのが面倒…

 

などなど。

優秀なエンジニアが毎回いいコードを書くとは限りませんが、すくなくともこれらのような「悪いコード」を書くことはほとんどありません。ただ新人のうちはとにかく動くことを目指すあまり、人から見て読みにくいコードを書いてしまうものです。

 

プログラミング学習中に『リーダブルコード』を読んでおけば、日々の勉強のなかで「良いコード」を書くことを意識できるようになります。

変数名はこっちのほうが分かりやすいかな?

とか

このメソッドは切り出して、こっちで定義してみよう

など、自分の中で読みやすいコードの例を知っておけば「悪いコード」を書いてしまわないようになります。

 

意外と理解してない?『Webを支える技術』

いま学習中の言語や技術は何ですか?プログラミングさわりたての方はHTMLやCSSなどでしょうか。私も当時はHTMLやCSSをたくさん勉強していましたが、今になって思うことは「それらは大して重要ではない」ということです。

 

もちろんWeb制作などのHTMLやCSSを頻繁に扱う職種であれば別ですが、サーバーサイドエンジニアはもちろん、フロントエンドエンジニアでさえもHTMLやCSSを触ることはあまりありません。たとえそのあたりのコードを書くとしてもそこまで深い理解は必要ありません。最低限かければいいというラインです。

 

最初のうちはそれよりもWebの技術に関して知っておくと便利です。例えば、HTTPってなに?という疑問に対して即答できないとそれこそ仕事で詰みます。調べれば一瞬でわかりますが、HTTPリクエストの仕組みやURLってなに?みたいな基本的な仕組みを理解していないと気付かない落とし穴があったりします。

 

「分かってないのに書く」ことのリスク

新人エンジニアでこのあたりのWebの基礎を理解せずにコードを書いていくことにはリスクもあります。例えば致命的な脆弱性につながるようなコードを書いてしまい、それが運悪くコードレビューで見つけられないまま世に出てしまえばあなたが引き起こした脆弱性とみなされます。

 

エンジニアとしてコードを書くということは、会社の製品をつくる一人になることです。いわば会社の顔になる、といっても過言ではありません。コードを書けること以上に、理解して書くということがとても大事になります。プログラミング学習中のうちに、Webの基礎くらいは理解してからエンジニアとしてのキャリアを始めましょう!

 

SQLよりもまずは『データベースのきほん』

多くのエンジニアがデータベース(DB)と接しながら仕事をします。サーバーサイドエンジニアはもちろん、フロントエンドエンジニアやWeb制作でさえDBをいじる機会があります。

 

よく「データベースの勉強 = SQL」と勘違いされがちですが、SQLはあくまでリレーショナルデータベース(RDBMS)の操作をする言語です。つまり、操作方法は学んだとしても、操作する対象であるデータベースがなにか?を理解しておかないと十分とはいえません。

 

テーブル設計も大事!

少し発展的ですが、テーブル設計をはじめとするDBに関する知識はとても奥深く、エンジニアになっても日々格闘しています。正解はないのですが、データベースについて、そして設計について知っておくと他のエンジニアと同等に議論することができます。

 

特に大きなサービスになればデータベースの設計はとても大事で、後々の保守のことを考えなければいけません。また、ゼロからの開発の場合データベースシステムに何を使うか?というインフラ的な知識も重要になってきます。最近ではNoSQL(SQLを使わないKVSのDB)も注目されていますが、多くの現場ではRDBMS(リレーショナルデータベース)がまだ使われています。

 

データベースやSQLの歴史はとても古く、HTMLやJavaScriptよりも古くから存在しています。そんなデータベースについて深堀りすることは直接コードに影響しなくてもとても興味深いものがあります。

 

『エリック・エヴァンスのドメイン駆動設計』

Webの裏側やDBについて知ることと同様に大事なことの一つに「設計」があります。コードを書くことよりも大事といっても過言ではありません。「設計」がしっかりしていれば、コードを書く時間も、サービスを保守する工数も改善されます。逆にいえば、「設計」が不十分だと無駄なコード、工数が必要になります。

 

設計に関する本はたくさんありますが、DDD(ドメイン駆動設計)はその基礎でもあり、様々な現場で使われている設計手法の一つです。ただし、人によって考え方は様々なので、DDDが絶対というわけではありません。ただし一度設計ってこんなことなのか!という入り口に読んでおいて損はありません。

 

設計パターンを知って、小さく使えると便利

設計パターン、デザインパターンと言われるものがいくつかあります。それらをいくつか知っておいて、ミニサービスの開発に役立てることができると便利です。例えば、「この部分はXXを使って書いていこう」というかたちで日々の業務で使うことができます。さらに、チームのなかでも「ここはXXよりYYがいいんじゃないですか?」という共通言語で会話することができます。

 

デザインパターンについては「Java言語で学ぶデザインパターン入門」がオススメです。比較的わかりやすく、網羅的にデザインパターンが書かれています。Javaを読めないとちょっとつらいですが、テキスト部分だけでも読んで勉強になります。

 

一つ上のエンジニアを目指す『数学パズル』

え、プログラミング関係なくない?!

と思われるかもしれませんが、数学的思考力やアルゴリズムはプログラミング力に大きく関係します。もちろん初めの「書けること」や「動くこと」を重視する際にはあまり意味がありませんが、「より良いコード」「より良いシステム」」を作るにあたってはこうしたスキル、知識はとても大事になってきます。

 

この本は基礎の基礎から数学パズルやアルゴリズムを教えてくれます。言語はRubyやJavaScriptで、基礎文法さえ知っていれば誰でも読みすすめることができます。主に競技プログラミングなどで使われるアルゴリズムですが、これを知っておくと日々書くコードにも生きてきます。特に初めのうちにこうした素地があると、成長スピードも早くなります。

 

エンジニア転職においてもこうしたプログラミング以外の数学的思考力や、アルゴリズムの知識などは高く評価されます。特にプログラミングスクールでは教えない内容、かつ現役のエンジニアでも知らない、書けない人が多くいます。差別化を図るためにもこうした数学的思考力を身につけるための第一歩としてはとてもいい本だと思います。

 

 

人気記事【2019年最新版】Twitterで評価の高いスクール5選

 

人気記事【未経験あり】いまWEBエンジニアに人気転職サイト4選