こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.
今回はデータサイエンティストに関わらず,テック業界で働く全てのエンジニアに読んでほしいお勧め本です.
特に,大学でコンピュータサイエンスを学んでいない人は,これらの本を読まずにエンジニアとして働いていると,どこかで必ずボロが出てしまうと思います.
やはり基礎ができてないと,成長も止まるし,わかる人には見抜けられてしまうものです..
ここで紹介する本はどれも私が読んだエンジニアの一般教養を学ぶ上で非常に役に立ったものばかりです.
かくいう私もまだまだ勉強中の身ですので,これからもっといろんな本を読んで「エンジニアの一般教養」を上げていきたいと思います.
目次
これだけは絶対に読んでほしい一冊「リーダブルコード」
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
日本語版
英語版
「もし一冊だけ選ぶ」としたらこの本です.もはや説明不要ですよね.全エンジニアのバイブルだと思います.
もしこの本を聞いたことがないという人は,明日職場の同僚にこの本を知っているか聞いてみてください.おそらくある程度コードが書ける人の多くの人は読んだことがある(最低でも聞いたことある)本であることに気づくと思います.
もし誰も知らなかったら,是非この本を読んで率先してみんなに教えてあげてください.ヒーローになれます.
この本は,「優れたコード」の書き方を教えてくれる本です.「優れたコード」というのは「理解しやすいコード」であり「読みやすいコード」です.
コードは書かれることより,使われることより,読まれることの方が圧倒的に多いです.
初心者がよくやってしまう過ちは,難しい処理を一行にして書いたり,複雑なコードを書いて自己満に浸ってしまうことです.(自分もよくやってました・・・)
難しい処理を一行で書けたり,難しいコードを書くとついつい「俺って天才」感が出てしまいますが,これはよくない行為です.どんなに頭が良くて計算能力が高くてもチームから嫌われるでしょう.
ではどういう風にかけばいいのか?変数名,関数名,コメントの付け方,全て必要なことはこの一冊に書かれています.必ず読んでほしいし,この本を読んでない人とは仕事できないという人は多いです.あなたも読めばそう思うでしょう.そんな一冊です.
もし海外でエンジニアとして働きたいと思っている人はぜひ英語版も合わせて読んでほしいです.本の中身は(シニカルな)イラストが書かれていて面白いんですが,英語で読むとより筆者のノリが伝わりますw 英語が得意な人,海外目指してる人はぜひ英語版で読んでみることをお勧めします!
コンピュータのしくみを学ぶ
これ,あまり勉強してる人すくないんじゃないかなぁ,,,
メモリとかCPUとかハードディスクがなにか,ちゃんとわかってますか〜〜〜って話
コンピュータはなぜ動くのか~知っておきたいハードウエア&ソフトウエアの基礎知識~
かなり優しく,初心者向け(文系出身者向け)にコンピュータの仕組みやプログラムがどう動くのかが書かれています.
おそらく最初の方は軽く読み飛ばしてもいいと思いますが,オブジェクト指向やネットワークの事,普段エンジニアとして働いていても意外にちゃんと理解してないところってありませんか?データベースとか,TCP/IPとか,XMLってなにか説明できますか?
この辺の一般常識を一冊でサーっと学べる良書です.これ読むだけでもITの常識が一通りつきます.
アルゴリズムとデータ構造のお勧め本2冊
コーディングをする上で必ず理解してほしいのが「計算量」です.
自分のコードがどれくらいの計算量なのか,いつも考えながら書いていますか?例えばあるDBやデータ構造からデータを取ってくるとき,それがどれくらい時間がかかるのか,もしデータが100万件あったらどうなるか,これを考えないと怖くて製品開発できません.
普段の開発環境では,せいぜい数百のテストデータでしかコードを実行しませんが,そのサービスがローンチして,ユーザが増えて膨大なトランザクションを生んだとき,自分のコードがそれに耐えうるものになっているのか?それを考えるのが「計算量」です.
プログラミングスクールや独学でプログラミングを学んだ人は,圧倒的にこの分野の勉強が欠けている印象です.もし勉強したことがない人は必ずやりましょう(逆にこの辺の勉強をちゃんとすれば,他の人と大きく差別化できるポイントでもあります.)
この「計算量」を計算できるようにするには「アルゴリズム」と「データ構造」のお勉強が必要です.ここでは初心者向けと中級者向けの本をそれぞれ紹介します.
アルゴリズムを、はじめよう
アルゴリズム学習の導入に最適の一冊です.基本的なデータ構造と基本的なサーチとソートのアルゴリズムを学べます.
これを読むと今までデータにアクセスする際のコードがどれくらいの計算量なのかが気になるようになるでしょうw
また,エンジニアやデータサイエンティストの面接ではよくアルゴリズムの問題が出ます.ホワイトボーディング面接と言って,ホワイトボードに解法を記述していって計算量を答える面接です.この本だけでは対策は万全とはならないと思いますが,全く勉強したことがなければこの本から読むことをお勧めします.
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造
おそらくアルゴリズムとデータ構造の本ではこの本が一番有名なのではないかと思います.「プログラミングコンテスト攻略のための」とありますが,概して一般教養としてエンジニアが知っておくレベルですので全ての人にお勧めします.
本書はAzu online judgeというプログラミングコンテスト(プロコン)を中心に,問題の解法や戦略が書かれています.
大抵この手のプロコンではCPU処理時間やメモリ使用量など,仕様や制限が課せられているので,常に計算量やメモリ消費量を考えながらコーディングすることが求められます.基本的なデータ構造,ソート,探索に加え,ヒープやグラフ問題,幾何学問題や動的計画法など高度なアルゴリズムを扱っており,この一冊読めば学ぶべき必要なアルゴリズムは大抵網羅できると思います.
エンジニアでもデータサイエンティストでも絶対に必要な知識になるので読んでおくことをお勧めします.
内容は難易度高めです.全くの初心者の人は先に紹介した「アルゴリズムを,はじめよう」から読むことをお勧めします.
また,自分の得意な言語で本の内容を実際にコーディングしてみると着実に学べると思います.
なお,私は2冊ともkindle版を購入してます.ふとアルゴリズムを参照する時があるのですが,その時にKindleでもっていると便利です.辞書的に使うケースが多いです.
本だけだとどうしてもイメージするのが難しいアルゴリズムがあります.そういう時はVisuAlgoで動画で理解しましょう.
大量のアルゴリズムが視覚的に理解できます!これめちゃくちゃ便利なので是非活用してください.
〜を支える技術シリーズ
超有名!技術評論社から出ている「〜を支える技術シリーズ」です.
本当に多くの本が出ているのですが,その中でも私がオススメする本を紹介します.
Webを支える技術 -HTTP、URI、HTML、そしてREST
支える技術シリーズでおそらく一番有名なんじゃないかな?この本を読めばだいたい必要なWebの知識は一通りつきます.自分はRESTについてちゃんと理解したくて書いました.
このシリーズ,どの本もそこそこ難易度高いんですが,この本は非常に読みやすく,Webの知識がない人でも読み進められると思います.Web系のエンジニアはもちろん,データサイエンティストも読んでおく必要がある本だと思います.
データサイエンティストって,多くの人が統計学,数学,機械学習の勉強ばっかりしてるんだけど,もし人工知能の開発やアプリにモデルを組み込んだりする場合Webの知識も絶対必要になります.この本一冊でかなりの知識を網羅してるんで,これだけでもいいので読みましょう.
コーディングを支える技術 ~成り立ちから学ぶプログラミング作法
変な名前ですが,プログラミング言語の歴史,基本的な文法やデータ構造,関数,オブジェクト指向や継承について一般的な知識が身につきます.
途中から難しくなっていきますが,もし今後他の言語を勉強したい人や今後もずっとテック業界にいる予定の人は読んだ方がいいです.
他の言語の使い方を学ぶ事で別の言語の理解が深まりますが,本書はそれをもっと効率良く学べるように様々な言語の仕様について触れてくれます.
そもそもプログラミング言語って,なんで世の中にこんなにたくさんあると思いますか?
それはそれぞれ用途が違ったり,思想が違ったり,開発者の思惑や宗教的なものがあるからです.
そのため,「Pythonだとこう書く」「Javaだとこう動く」など,言語毎でお作法が異なります.
この本を読むと開発者の意向がわかってきます.これにより,その意向にそったコーディングができるようになります.
リーダブルコードと合わせて読んでほしい一冊です.
GPUを支える技術 ――超並列ハードウェアの快進撃
入れるか悩みましたが,今後はGPUを使う人増えてくると思ったので入れました.(もはや一般教養的な位置付け)
CPUやメモリについて学べる本は多いんですが,GPUでの並列処理をちゃんと理解できる本は少ないです.本書も最近出版され,私は出版されたその月に買って読みました.
感想としては技術的な内容が淡々と書かれている印象で,ある程度CPUについての知識がないと読み進めるのは難しいです.
最近はGPGPUといってグラフィック処理以外(深層学習等もそうですが)での利用が増えてきました.例えば株価の予測をGPUでしたり,,,
多くのデータサイエンティストは今後GPUを使えることが必須スキルになると思います.
Amazonの評価は決して高くないですが,この本は深層学習どうこうではなく,「GPU」というアーキテクチャについて詳しく書かれた本です.
GPUについてここまで詳しく書かれた本はありません.読むのに一苦労しますが,本棚においておきたい一冊です.
論文書く人向け
理科系の作文技術
超名著です.ベストセラーですね.
広義の意味でのエンジニアというと,論文を書く人もいると思います.データサイエンティストならなおさら論文を書く機会が多いです.
私もよく論文書きます.
すでに論文書くような人は持ってるかもしれませんが,論文の書き方がこの本に凝縮されています.
「理科系」という題名にそぐわず,全く難しくなく,文系出身者でも読めますし,「理科系」に限らず一般的な作文技術として非常に有益な情報ばかりが載っています.
この間日本に帰った時にたまたま見ましたが,漫画版もでてました.ぱらっと見ましたが,良くある「漫画版」です.読みやすいのでまずは漫画から読んでみてもいいかも
まんがでわかる 理科系の作文技術
実は私,理科系の作文技術がこんな名著であることを知りませんでした.大学院の時に教授にスっと渡されてただ読んでいたんですが,気づいたら作文のバイブル的に使ってました.
そしたら妻もこの本をバイブル的に使っていることに気づき,調べてみたらベストセラーだったって感じです.
論文書く人,書きたい人,まずはこの本を読んでみましょう!
海外を目指す人向け(そうじゃない人にもオススメ)
エンジニアとして世界の最前線で働く選択肢 ~渡米・面接・転職・キャリアアップ・レイオフ対策までの実践ガイド
日本HPから米HPに異動して,現在MicrosoftでSr.Software Engineerとして働いている方の,体験談を交えた「米国でエンジニアとして働くには&米国での働き方」を具体的な実践方法を交えて説明している本です.
よくある「アメリカの方がいいからみんなおいで,日本にいても意味ないよ」的なトーンではなく,アメリカのいいところと悪いところをニュートラルな目線で説明してくれています.
私も日本にいたころ,ずっと米国勤務に憧れていたので,この本をくまなく読んでモチベーションをあげていました.
ビザのことやレジュメ,面接の戦略,レイオフされたときどうするかなど,本当に多くの情報が詰まっています.
日本人で米国で働いている人の情報は少ないので,本当に貴重だと思います.
海外就職を目指す人はもちろん,そうじゃなくても,シリコンバレーの最先端のエンジニア事情が垣間見れますし,面接の戦略や他文化の方々との働き方など,日本で働くエンジニアからみても学べることは多いです.
読み物系なので私はKindleで持ってます.モチベーションアップさせたい方は是非!
まとめ
今回はデータサイエンスに限らず,全てのエンジニアにおすすめする本を厳選してみました.
教科書的な本から読み物系まで色々紹介してみましたが,とにかくリーダブルコードが一番おすすめです.(というか必読)
「優れたコード」にはある程度のルールがあります.この本を読んで体系だって学ぶのが一番早いです.
コードを読めばある程度その人のスキルレベルがわかります.「この人リーダブルコード読んでねぇな」っていうのはコードは一目見たらわかると思います.
リーダブルコードを読んでない人は,そう思われてるかも? でも,そんなに難しい本ではないので勉強の合間に休憩がてら読んでみてください.
挿絵も面白いのでw
それでは!!