仮想サーファーの波乗り

仮想サーファーの日常

プログラミング・エンジニアのスキルアップ・ブログ運営などに関してよく書く雑記ブログ

Python初心者から2年間で読んだ中でオススメの技術書35冊を読むべき順番に並べた


f:id:virtual-surfer:20191222230539p:plain


Pythonの学習を始めて3年間でたくさんの技術書を読んできましたが、自分の技術力のレベルによって読みたい本が変わってしまうので、どの技術書を読めばいいのかがわからなくて本選びに相当な時間をかけたと思います。


今回は、これからプログラミング言語Pythonを学習しようとしている方、Pythonの基礎は勉強したけどもっと踏み込んで学びたい方向けに、ぼくが読んだPythonの技術書の中でこれは読んでよかった!という本を読みたい順番に紹介していきます。


この記事の対象読者

  • 未経験からPythonを学習しようとしていて、どの技術書で学習を進めるべきか悩んでいる方
  • Pythonは少し学習したことあるけど、実践的なWebアプリケーションを開発するときに参考になる技術書を知りたい方
  • Pythonを活用したWebアプリケーションエンジニアになるために必要な知識やスキルを知りたい方


Pythonエンジニアとは?

この記事では、Pythonを活用したWebアプリケーションエンジニアの方に向けたオススメの技術書を紹介していきます。

オススメの本を紹介する前に、「Pythonを使ったエンジニアの仕事内容ってどんなものなの?」がよくわからない方向けにPythonエンジニアの仕事内容の違いに関してざっくりと説明しておきます。

Pythonエンジニアの主要な3種類

Pythonを使って仕事をしているエンジニアの種類は大きく分けると、以下の3つがあります。

Pythonエンジニアの種類

  • Webアプリケーションエンジニア(この記事でメインに扱う)
  • データサイエンティスト/データアナリスト
  • 機械学習エンジニア


Webアプリケーションエンジニア

f:id:virtual-surfer:20191219225923j:plain

Webアプリケーションエンジニアは、Webアプリケーションのサーバーサイド開発を担当する仕事です。

サーバーサイド開発とは、Webサービスの検索処理やユーザー登録処理など、画面から受け取った命令をもとにデータベースにデータやりとりして、画面に結果を返す処理を設計・実装する役割のことを指します。

Webアプリケーションのサーバーサイド開発で採用されることが多いプログラミング言語で、YoutubeやInstagramなどの有名サービスでも利用されています。


データサイエンティスト/データアナリスト

f:id:virtual-surfer:20191219225955j:plain

データサイエンティストとデータアナリストは違う職種のことを指しますが、ここでは一緒に紹介します。

データサイエンティストとは、事業のデータや経営に関するデータを活用して、事業を成長させたり経営方針を決定すること、もしくはそれをサポートする仕事のことです。

膨大なデータから何らかの特徴を読み取って考察をもとに仮説を立てて検証していくスキルや、市場のトレンドや顧客行動の理解、統計の知識とその活用、自社・競合他社の事業数字の理解など、様々なスキルが求められる専門職ですね。

データを分析しやすい形に整理することや、データの分析、データの可視化を行うためのライブラリが豊富なこともあってPythonが利用されることが多いです。


一方でデータアナリストとは、すでに用意されたデータをもとに事業の現状や課題を特定し、解決策を提案することを専門としている仕事内容のことを指すことが多く、データサイエンティストのようにデータの収集・扱いやすいように加工したり、Pythonを活用して高度な分析を行うことは少ないです。


機械学習エンジニア

f:id:virtual-surfer:20191219230015j:plain

機械学習エンジニアとは、機械学習(Machine Learning)技術を活用して、データの解析や生成や分析などを行うプログラムを設計・実装する仕事のことを指します。

機械学習エンジニアは、事業上の問題やプロダクトの課題をもとに、どの機械学習アルゴリズムをいかに活用するを検討し、大量のサンプルデータを用意して機械学習の精度を高めていくモデルの構築や、用意したレコメンドモデルをWebアプリケーションと連携させるAPI基盤を開発する業務などを担います。

機械学習のアルゴリズムを利用できるフレームワークが多いこと、計算処理のライブラリが豊富なこともあってか、機械学習を活用する場合はPythonが活用されることが多いです。


Webアプリケーション開発(Python)とは?

Pythonを活用したWebアプリケーション開発の全体像も紹介しておきましょう。

Webアプリケーション開発の全体像を理解することで、Webアプリケーション開発エンジニアになるためにどんな知識やスキルが必要になるのか理解しやすいと思うので。

Webアプリケーションの処理の流れ

f:id:virtual-surfer:20191222140300p:plain

ユーザーが何かWebアプリケーションでボタンを押した場合など、なにかしらのアクションを起こしてから、画面の表示が変わるまでに、上の画像のようにWebアプリケーションは処理を進めています。

エンジニアの種類と役割の違い

エンジニアの種類と役割の違いに関しても、まとめておきます。

フロントエンドエンジニア

f:id:virtual-surfer:20191222141020p:plain

HTMLやCSSやJavaScriptを利用して、サーバーサイドにどんなデータが欲しいかをリクエストして、受け取ったデータを加工し、画面に表示するWebページを作成して画面を描画する部分の開発をメインで担うのがフロントエンドエンジニアですね。

Pythonを学習するサーバーサイドエンジニアでも、Webアプリケーションを開発する上でフロントエンドの開発を簡易的に行ったりすることは多いので、フロントエンド技術も学んでおきたいですね。


サーバーサイドエンドエンジニア

f:id:virtual-surfer:20191222141056p:plain

PythonやJavaなどのサーバーサイド言語を利用して、フロントエンドからのリクエストをもとに、MySQLやRedisやPostgreSQLなどのデータベースにアクセスしてデータの取得や更新を行い、データベースアクセスの結果や加工したデータをフロントエンドに返す役割を担うサーバーサイドエンジニア。

Pythonを学習する場合は、このサーバーサイドエンジニアの領域に関してメインで学ぶことになります。


インフラエンジニア

f:id:virtual-surfer:20191222141125p:plain

Amazon Web ServiceやGoogle Cloud Platformを活用してサーバーやデータベースの構成を管理し、JenkinsやCircleCIを用いてCI/CD環境を構築したり、ログ基盤の設計と実装するなど、基盤部分に関わる開発をメインで担当するインフラエンジニア。

Pythonを学習するサーバーサイドエンジニアは、インフラの開発もできると業務で活躍できる幅が一気に広がりますね。


それでは、Webアプリケーション開発エンジニアの学習すべき順番にPythonオススメ本を紹介していきます。

Python学習 〜1ヶ月目:Python初心者

Pythonの利用用途と基礎的な文法と簡単なプログラムの書き方

プログラミングをしたことがなくて、「そもそもプログラミングってなにするの?」という方には、この本が一番Python理解が進みやすいと思います。Pythonの基本的な書き方と文法がイラスト付きで説明されているので、めちゃめちゃ理解しやすいです。


「Pythonでプログラミングをする方法が少しだけわかったぞ!でも、プログラミングの全体像はまだまだ理解できていないな...」という方にぜひ読んでほしい一冊です。

Pythonを使ってWebアプリケーションを開発するときに必要になる知識がまとめてあるので、今後なにを学んでいけばいいのか見通しがはっきりすると思います。


Python学習 1ヶ月目〜6ヶ月目:Pythonで実践的な開発

Webアプリケーション開発の全体像

これは絶対に読んでおきたい1冊。

「プログラムを書いて動かすことはできるようになったけど、Webアプリケーション開発の全体像が理解できていない気がする...」という方は、この本を読むとHTTP、URI、HTML、RESTなどWebアプリケーションに使われている基本的な技術を学べて一気に視界が広がります。


Webアプリケーションのネットワーク関連の知識が網羅されている入門書です。

イラスト付きで解説されているので、ネットワークに関して単語すら知らないという方でも、なんとなく理解できます。

完全に理解する必要はなくて、IPアドレスや、ネットワークに階層があること、共通鍵と公開鍵、SSL・TLSなどネットワークの用語を一通りなんとなく知っている状態になれればOKです。

Webアプリケーションのサーバーサイドエンジニア1・2年目でネットワークの知識がないと業務で困る!ということはほとんどないはずなので。


Pythonの実践的なプログラムを書く

「Pythonで簡単なプログラムは書けるようになったけど、もっと実践的な役立つプログラムを書いてみたい!」という方に強くオススメしたい一冊。

スクレイピングや外部APIの呼び出し、データベースにデータを登録する方法など、PythonでWebアプリケーションを開発する上で必要になる実践的なプログラムを手を動かしながら学べます。


PythonのWebアプリケーション開発フレームワーク

せっかくPythonを学ぶのであれば、Webアプリケーションを開発できるようになりたいですよね。

Webアプリケーション開発使うフレームワークであるDjangoでWebアプリケーション(簡易的な日記サービス)を開発することができる一冊。

本の説明の通りに実装を進めることで、Djangoを使ってWebアプリケーション開発をする方法、Amazon Web Serviceを活用してインターネット上で公開する方法を学ぶことができます。


ソースコードのバージョン管理方法

プログラムを書くなら必ず必要になるソースコードのバージョン管理ができるGitのよく使うコマンドを理解できる一冊。

Git・Githubをなんとなく使っているという方は、一度読んでみてGitのコマンドとできることを頭に入れておくとよいですね。


保守しやすいプログラムの書き方

「動くプログラムを書くことはできるけど、誰が読んでも理解しやすくて、修正も簡単にできるプログラムってどうやったら書くんだろう?」という方に読んでほしい一冊。

プログラムを書く上で、他人や将来の自分が読んで理解しやすいコードはどのように書くのか?を学べます。エンジニアとして働き始めて初期にコードレビューで指摘される内容がほとんど網羅されているので、早めに読んでおきたいですね。

Python以外のプログラミング言語でコードが書かれている箇所も多いですが、なにに気をつけてプログラミングをするべきか観点を学ぶことが大事なので、気にしなくてOKです。


データベースの設計と実装方法

データベースとのデータやりとりをするときに必要になるSQLの基礎をイラスト付きで理解できる本。

SQLに入門する方、SQLはどんなことができるのか、データの登録・保存・更新・参照をするSQLクエリはどうやって書くのか?を最低限理解しておきたい方にオススメです。


Webアプリケーションでデータベースを活用する場合、おそらくRDB(リレーショナルデータベース)のMySQLかPostgreSQLのどちらかを使うことになると思います。

そのRDBに関して、どんな失敗事例があるのかを事前に知っておくことで、RDBの設計と運用でつらい思いをしなくてよくなる本。

ところどころ理解できないところがあったとしても、データベース設計で気をつけるべき観点を学べていればOKです。


Python学習6ヶ月目〜1年目:Pythonエンジニア業務知識

Pythonを書き始めて半年間、何かWebアプリケーションを開発してみたり、業務でPythonを活用している場合は、Webアプリケーションの全体像に関しても、Pythonに関しての知識も付いてきていると思います。

その段階から一歩進んだWebアプリケーションエンジニアになるために学びたい技術に関してです。


フロントエンド開発の基礎

「なんとなくJavaScript書けるよ。仕組みは理解してないけどね。」という方にオススメ。

JavaScriptの技術書を数冊読んでみましたが、この本は体系的にまとまっていて理解しやすくよかったです。

Pythonメインで開発するサーバーサイドエンジニアでも、急にフロントエンド開発を手伝うことになる可能性も多いにあるので、JavaScriptの基礎と基本的な仕組みは理解しておきたいですね。


API設計・実装の基礎

近年のWeb系自社開発会社では、WebAPIをたててフロントエンドでAPI呼び出し、アプリでもAPI呼び出しして、処理を共通化させる開発方針が多いと感じています。

APIをゼロから設計・実装する場合にどういう観点で設計していけばいいのか、AmazonやGoogleやGithubといった有名IT企業の公開されているAPIの仕様も例にしながらベストプラクティスを探っている本なので、API設計時にはぜひ読みたい一冊です。


DjangoでサーバーサイドレンダリングでWebアプリケーションを開発するのでなく、APIをたててフロントエンドからAPIを呼び出すWebアプリケーションを開発したい場合は、この本が一番わかりやすいと思います。

(この本とDjnago REST Frameworkの公式ドキュメントくらいしか、Djnago REST Frameworkの使い方に関する情報がない気がします)


テスト駆動開発/Pythonでの単体テスト

Pythonで書かれたWebアプリケーションにどう単体テストを書くか、テスト駆動で開発を進めるにはどうすればいいかを学べる本。

TDD(テスト駆動開発)を進める上で、どのレイヤーで単体テストを書いて、どの機能に関してはエンドツーエンドテストを書いて保守していくのかなど、テストの方針設計をしてチーム内で共通認識を取ることが大事。

そのTDD全体の中でも単体テストの書き方の部分をメインで学べるので、Pythonで単体テストを書けていない方は読んでおきたいですね。


業務アプリケーションのパフォーマンスを高める方法

Pythonのパフォーマンス(速度)検証の方法と、パフォーマンスを上げるためになにを気をつければいいのかが学べます。

業務アプリケーションを開発・運用していると必ず直面するパフォーマンスの問題に関して、Pythonをメイン言語として扱っている本はこの本しか見つかりませんでした。

ちなみに、本書で扱われているコードはPython2系で書かれているので、適宜3系に読み換える必要はあるので、そこは注意ですね。


Webアプリケーションの発行するSQLクエリのどこに問題があるのか、パフォーマンスの問題となりにくいクエリはどんなクエリなのかを学ぶことができるSQLの中級者向けの良書です。

業務でSQLを扱ったことがある前提で説明されている箇所が多いので、業務でSQLを扱っていてパフォーマンスチューニングがしたくなったタイミングで読むと良いと思います。


Webアプリケーションのセキュリティ

Webアプリケーションのセキュリティを考える上で必ず読んでおきたい良書。

本当はWebアプリケーションの実装においてセキュリティ面で脆弱なコードを仕込んでしまっては取り返しがつかない事態になる危険があるので、Webアプリケーションエンジニアになってすぐに読みたい本。

なのですが、Webエンジニアになってすぐのタイミングだと読んでも理解できない部分が多いと思うので、実務経験を少し積んでからさーっと全体を眺めて、とくに知らなかったセキュリティ知識に関してしっかり読み込む形式で読みたいですね(一から精読しようとすると、果てしない分量に心が折れます)。


エンジニアの効果的な学習方法と習慣づくり

エンジニアの成長に直結するけど業務では教えてもらえないことが多い、業務外で技術学習をする方法や、技術的なアウトプットを継続するために注意するべきことが具体的に書かれた良書。

この本もできればプログラミング学習をはじめてすぐに読みたい本ですが、実務をある程度こなせるようになってきて週末などに落ち着いた時間を取れるようになってから自分の学習習慣を振り返りつつ改善するために使うとより効果的です。


Python学習1年目〜2年目:中級Pythonエンジニアへ


Webアプリケーションのインフラの基礎

DockerとKubernetesを業務で運用する上で必要な考え方と活用方法が学べる本です。

Web系自社開発会社であれば、インフラはAmazon Web ServiceかGoogle Cloud Platformを利用して、Dockerでコンテナ化している開発環境で働くことになるWebエンジニアがほとんどでしょう。

エンジニアとして業務経験が1年程度あれば、Dockerの基本的な使い方は公式ドキュメントを読めば理解できるけど、業務でどうやって運用するのかがわからない。そんな方にオススメの本ですね。

基本的なLInuxコマンドがその仕組みと使い方がセットで一通り紹介されていて、シェルスクリプトの書き方と扱い方も解説されている。それでいて説明がとても理解しやすい良書。

WebエンジニアでもLinuxコマンドやシェルスクリプトを使って簡単なファイル操作やサーバー内部でコマンドを実行する機会は多いので、どんなコマンドがあるのか一度目を通しておきたいですね。


オブジェクト指向/デザインパターン

オブジェクト指向の基本的な考え方が学べる良書です。

オブジェクト指向がなぜ生まれたのか、それまでのプログラミング言語はどのような特徴を持っていたのか、オブジェクト指向の背景から理解できるのが嬉しい本ですね。


PythonでGoFのデザインパターンとその他よく使われるデザインパターンを活用してWebアプリケーションを開発する方法が紹介されている本です。

Pythonでデザインパターンを学ぶことができるおそらく唯一の技術書ですが、中級者向けの本になっているので、Pythonの基本的な文法の理解と業務経験を摘んでから読むと理解しやすく業務でも活用できると思います。


アルゴリズム

基本的なアルゴリズムに関して、Pythonのプログラムで解説されている本です。

AtCoderに取り組んでみて、ちゃんとアルゴリズムの勉強をしようと思ったら学習のとっかかりとして読むとよいですね。

練習問題もあるので、手を動かしながらアルゴリズムを理解できます。


通称アリ本。

AtCoderなど競技プログラミングで結果を出したい方や、アルゴリズム力をしっかりつけたい方が取り組むと良い本ですね。

プログラムはC++で書かれているので、Pythonのプログラムではどう書くのか読み換える必要はありますが、アルゴリズムの問題に取り組む中で、解法(問題の解き方)自体は変わらないので、Pythonエンジニアでもアルゴリズムにしっかり取り組むなら読みたい。


機械学習/データ分析入門

機械学習技術を活用して簡単な機能を開発することができるサンプル集が載っている本です。

機械学習の理論よりも先に、実践の中から何ができるのか体感したいという方にオススメ。


機械学習を活用したデータ分析やレコメンドシステムを、Webアプリケーションにどうやって組み込むかなど、業務アプリケーションで機械学習を活用するときに必要になる知識がまとめられている本です。

機械学習を活用している開発組織や、これから機械学習を活用する可能性があるプロダクトの開発に携わっているなら一度は読みたいですね。


手を動かしながら、機械学習の中でも深層学習に関してメインに理論も学べる良書。

機械学習のチュートリアル的な本としては一番人気なのでは?と思いますね。


PythonでPandasを活用してデータ分析、Matplotlibを活用してデータの可視化など、データの分析を行う上で必要になる技術に入門できる本です。

よく使うライブラリに関して一度理解しておくことで、データ分析が必要になったときに覚えてなくても公式ドキュメントをググりながら実装できるようになります。


Webアプリケーション開発手法

事業環境の変化の激しいWeb系事業会社であれば、アジャイル開発がメインになってきていると思いますが、そのアジャイル開発に関して要点がまとまっている良書。

業務で実際に運用する上でどんなことに注意して、どんな問題にはどう対応するといいかなど実践的な内容がまとまっているので、参考になる部分が多いです。


アジャイル開発を採用している組織において、どのようにアーキテクチャを設計し、運用していくべきかが説かれている本です。

アーキテクチャを考える上での実例をもとに、どんな観点でアーキテクチャ設計をするとよいのかがまとめられているので、アーキテクチャ設計や運用に少しでも関わるようになったら読みたいですね。


エンジニアキャリア/エンジニア組織の問題解決

エンジニア社員からテックリード、CTOになるまでのキャリアパスと、そのそれぞれの役割で何が求められるかが説明されたエンジニアキャリアに関しての気づきが多い本です。

エンジニアとして技術面での貢献だけでなく、チームをまとめる役割や、人をマネジメントする立場を任されることになったときに、具体的に何を期待されていて、何をする必要があるのか参考になるので、エンジニア初期の頃には必要がなくても手元においておきたい一冊ですね。


エンジニアが働く上で考える必要があること、人生で直面するライフイベントやそこでの選択について書かれている全エンジニア必読のキャリア本。

これからエンジニアとして成長していく上で、業務内外で何を意識してどんな行動をすればいいのか、具体的な方法が簡潔かつ幅広く紹介されているので、事前になにを用意しておくべきなのか考えるとっかかりになります。


エンジニア組織が直面する不確実性とどう向き合うかについて説かれた本。

どんなエンジニア組織にも共通する問題と、その問題に対して取り組む際の考え方が書かれているので、抽象的な説明になってしまっていて実務で活用する実践的な知識として噛み砕くのは少し難易度が高いですね。

実務経験がある程度たまり、エンジニア組織の直面する課題のケースが身にしみた段階で読むと理解が深まります。


Webアプリケーションの業界動向と歴史

GoogleとMicrosoftでエンジニアをされていた及川さんのITエンジニア業界の動向、ソフトウェア産業の現状に関しての本。

ソフトウェアを事業の根幹にした経営をすべきだと考えているが、移行できていない経営者に向けた本になっていますが、エンジニア視点で読んでも発見が多い本。

とくに、GoogleとMicrosoftでのエンジニアリング組織のあり方考え方とIT業界の歴史の部分は知らない話が多かったので学びが多かったです。


現代のIT産業がどのように生まれたのか、1800年代のパンチカードの時代までさかのぼって通史として解説されているIT業界で働くエンジニア全員必読の書。

シリコンバレーの歴史や、ソフトウェア産業のなりたち、現代に通ずる情報産業革命がどのような形で生まれたのか、誰か一人にフォーカスをあてるのではなく、200人余りの登場人物の考えや行動に触れられた壮大なドラマになっています。

ちなみに、この作品は2冊で完結なのですが、2冊目の方が現代のGAFAに直結する産業史が解説されていて興奮します。


まとめ

以上、初心者から2年間のPythonエンジニアの学習オススメ本を読みたい順にまとめでした。

まとめ始めたら楽しくなってしまって、35冊ものオススメ本を紹介してしまいました...。しかもPythonに関係ない本も結構ありますね。


プログラミング初心者の方は、「え...。これ全部読まないといけないの...??」と驚いたかもしれませんが、全部完全に理解する必要はないので安心してください。

Pythonエンジニアとして働き始めて、業務で出てきたり必要になった(けど知らなかった)タイミングで業務に必要な知識だけを本から拾っていく形で学ぶことで、効果的に学習を進めることができます。

逆に、「業務で必要とされてないけど、勉強しておいた方がいいよね...」というモチベーションで本を読むと、頭に残らないので非効率です(ぼくは完全にそうでした)。


一気に学ぼうとするのではなく、必要になったタイミングで必要な技術知識が解説されている本を参考に学んでいくスタイルで学習を継続できるとよいかと思います。


では!