【2021/1/11】2021年版を公開しました
【2020/1/9】2020年版もあります, こちらもよろしくおねがいします!
【2019/8/12】一部書籍のリンクを最新版に更新しました
【2018/12/24追記】最新版を公開しました!「Python本まとめ・2019年版 - Webとデータ分析を初心者が仕事にするまで - Lean Baseball」
機械学習にWebアプリ,そしてFintechと,今年(2017年)は昨年(2016年)以上にPython界隈が賑やかな一年でした.
Pythonでお仕事と野球データ分析を生業としている@shinyorke(野球の人)ですこんにちは.
このエントリーでは,そんなPythonの学び方・本が充実した今年から来年(2018年)に移るにあたり,
最短距離でPythonレベルを上げるための学び方・読むべき本の選び方〜2018
をまとめてみました.
こちらのエントリーの2018年版として読んで頂けると幸いです.
すべて読むのもアリですが,ご自身のレベルに合わせて飛ばし読みすることをオススメします.
なお,Python Advent Calendar 2017 24日目のエントリーでもあります.
大切なので二回いいますが,「ご自身のレベルに合わせて飛ばし読みする」事をおすすめします!(ちょっと長いので)
立ち位置とスタンスをはっきりするため書いときます.
老若男女・プログラマーか否か,などは問いません.興味ある方は皆さん対象です.
混乱を避けるため,このブログでは初心者・中級者・上級者を以下のように定義します.
一番のボリュームゾーン,「プログラミングをやりたい!」「機械学習やるためにPython覚えるぞ!」というあたりの層です.
「自称・初心者*1」を含めると,この辺も多そう.
この道5年以上のベテランや,Pythonを使ったプロダクトを保有している企業で直接技術を見ているCTO・Tech Leadがこの辺に当たります.
Pythonを充分に乗りこなして活用している方々なイメージ.
すべての事は出来ないにしても,多分私がココです.
一枚の絵で描くとこういう感じです.

それぞれのレベル別に学び方・オススメ本・スタンスを挙げていきます.
まずは,プログラミングに必要なもの(パソコン・インターネット)を揃えつつ,
をしていくことが基本かなと思っています.

環境を整えつつ,やるべきことを無理なく継続して続けるのが基本かなと.
本気でプログラミング・Pythonを学んで活かしたい人は避けて通れないところです!
自己学習の場合,お仕事や授業の時間に学ぶことはできない(=基本的な生産活動・学習はサボっちゃダメ)ので,
が必須です.
職場やゼミのパソコンとインターネットを使う方も多いかと思いますが,
Pythonに限らず,プログラミングを学ぶのは地道な作業・勉強の繰り返しなので,時間を有効活用できるよう,環境を整えましょう!
Pythonに限らず,
地道な写経が学習への近道です!
本のサンプルコードをそのまま写し書きして動かす, オンライン学習で課題を解くetc...
学べる時間に地道に行っていく「急がば回れ」が勘どころだと思います.
今活躍している上級エンジニアの人も,(Pythonかどうかは別として)写経を通じて覚えている方が結構います.
本の紹介は次の章に譲るとして,個人的にはブラウザとPCがあれば学べるオンライン学習に投資(月額3,000円前後)してやるのがBestかなと思います.*4
私自身は,(お試しさせてもらった)「PyQ」しか経験ありませんが,大変素晴らしいサービスなので「迷ったらPyQ」で良いと思います!
なお,(手前味噌ですが)利用レポートはこちらにあるので気になる方は是非どうぞ. ※夏じゃなくても,年末年始でもいいんですよ!
これはどちらかといえば都市圏限定のノウハウですが,
初心者〜中級者の内は,コミュニティ内で手を動かす・知見を得る
のが最短距離でPythonを学ぶ方法として有効です.
利点として,
といった利点があるので,土日などを利用できる方は活用すると良いと思います.
なお,首都圏だと,
が人数規模・主催者や講師のレベルが安定していてオススメです.(&キャンセル待ちも多いので参加は計画的に!)
写経の延長戦上で良いかと思いますが,
テーマを決めて,オリジナルの作品を作ってみるとBestだと思います!
Python・プログラミングをやってみよう!と思った動機に近いことを,可能なレベルでやってみると良いと思います.
ここで注意したいのは,いきなり機械学習に手を付けるとか,上級者向けのコンテンツをやると続かなくなっちゃうので,まずは小さく始めることを意識すると良いと思います.*5
写経や基礎学習にオススメな三冊(プラス手堅い本を一冊)ほどご紹介します.
Pythonおよびプログラミング初心者がそのまま写経するのに最適な一冊です!
と最初の一冊として非常にわかりやすい本棚と思います.
詳しく知りたい方は本屋さんで手にとってみるか,私も書評を書いてるのでご参考にどうぞ.

Python初心者から中・上級者まで使える一冊です!
最初の解説が優しいのと,辞書的にも使えるので使いやすい一冊です.
既に第四版まで出ている老舗の一冊でもあり,古くからのユーザーでも知ってる人が多いのも特徴です.

プログラミング中級者に必要なノウハウ(オブジェクト指向など)も含めて網羅的に扱っている一冊です.
私から言えることはただ一つ,
です.
詳しい内容・レポートは私のエントリーも参考になるかなと思います.

Python以外のプログラミング言語を知ってる方は一冊あるといいかもしれません.
Pythonのパパ,グイド・ヴァンロッサムさんの著書です.
公式サイトの補講,みたいな感じで網羅的に書かれているかつ過不足無いのでオススメです.
途中のイベント・順番はいい感じにすっ飛ばしていいと思います,あくまでも概念的なモノで.

このレベルになると,
とかそんな感じだと思います.
この時期のオススメな過ごし方を簡単にまとめます.
本にしてもオンライン学習にしてもイベント参加にしても,
具体的な領域を決めてやりきる事を目標にすると良いと思います!
Web開発の人はDjangoやFlask等のコア部分を学びつつ,周辺技術(HTML,インフラ,クラウドサービスなど)を学んで,より上級の本を読む・学習.
データ分析系の方はこの時期からPython×機械学習・ディープラーニング本を読む・試しつつ,数学な周辺技術(上に同じく)を学ぶなど.
必要なものは何か,を意識しつつ取捨選択してやりきるようにすると良いでしょう!
また,よく使うOSS(Open Source Software)のフレームワークやライブラリのコードを読む,forkして改造して遊ぶなどしてみるのも自身の特定領域を鍛える意味でも大変有効なのでやってみると良いかなと思います.*6
この頃には,本や学習の中でgitやデータベース,サーバーにクラウドと色々覚えることが出てきます.
具体的には,
これらのプロとまで行かなくても,使えるようになるのは重要なので覚えると良いと思います.
個人的には,他の人達とのコミュニケーションという意味でもgit(Github),何をやってもデータベースは使うと思うのでMySQLあたりは必修かなと思っています.
Python・プログラミングのみならず,他のことも学ぶ最短経路です!
この頃には複数人の知り合いや知ってる人もいると思います.
お時間があるときに,
などしてみると,Pythonやプログラミングのみならず,
といった,メリットがあるのでぜひやってみると良いと思います.
ちなみに,初心者の時にやっても全然OKです!*8
2017年版のエントリーでも触れましたが,
Output & Feedback(覚えたこと・成果は外に出す,フィードバックをもらう)
が一番手っ取り早いと思っています.
アウトプットの手段は,
他にも色々ありますが,いずれの場合も,
といった,フィードバックをもらう事を意識すると良いと思います.*9
分野別のおすすめ本です.
Pythonを実務で使う時のノウハウが集中して掲載されています.
私自身は基本この本を開発時の標準にしています.*10

Pythonではじめるデータラングリング ―データの入手、準備、分析、プレゼンテーション
Pythonでデータを扱う・駆使する人は必読!といい切って良いくらいの名著です!
データの入手〜前処理〜分析〜可視化まで,ハマる所・必要なことが網羅的に記載されています.
詳しい書評はこちらに書いてるので気になる方はぜひご覧ください.
私が実際役立てているorこれはいい本!と思ったものを紹介します.
Pythonで基礎的なデータ分析・可視化をする人は必読です.
Pythonでデータを扱う・分析する人がほぼ使うJupyterおよび周辺技術(pandas・matplotlib・bokehほか)の本.
機械学習本を本格的に読む前に慣れておくと◎
個人的に,この本のノウハウでやったことのまとめはこちらとこちらにあるのでご参考にどうぞ.
「私のプロジェクト,ホントに機械学習必要かしら???」を明確にしつつ,事例も掲載されている良著です!
機械学習やディープラーニングを使うプロジェクトは投機性が高い!という事実を知ってから学ぶとより実践的になれるので仕事で使おうと思ってる方は必読です.*11
![Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド](/image.pl?url=https%3a%2f%2fm.media-amazon.com%2fimages%2fI%2f41VimzqqXAL.jpg&f=jpg&w=240)
Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド
Pythonを使ったWebスクレイピングについて詳細に載っています.
特にScrapyの部分は読み応えがあり,実際に使えるノウハウいっぱいあります.
このブログでも実践例を紹介させてもらいました.
また,スクレイピングの基礎・注意すべきポイントをしっかり学びたい方はこちらの本もオススメです.

ここは私も知見がないので教えてくださいorググってください(._.)
中級者レベルだと,Pythonの本を読んでるだけでは済まないので,必要そうな本を.
まずは避けられないgit/Githubは定番のこちら.

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
データベースは最近読んだMySQL本(5.7,現時点の最新)が良かったのでこちらをオススメします.

詳解MySQL 5.7 止まらぬ進化に乗り遅れないためのテクニカルガイド
SQLそのものはこちらが読みやすいかつ実践的で◯でした.
Linux/Windows Serverは特に本を読んでいないのですが,LPIC本とかが良さ気だと思います(特にオススメはない).
また,AWSはこの辺が定番です.

Amazon Web Services パターン別構築・運用ガイド 一番大切な知識と技術が身につく
また,AWSやGCPでアプリを作ったりすると,コンテナベースの仮想化技術「Docker」は避けて通れない必修科目となりつつあるのでこのタイミングで学ぶと◎だと思ってます.

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
Python本だとやはりEffective Pythonですかね.

Effective Python ―Pythonプログラムを改良する59項目
これは中級者じゃなくても必読ですが,リーダブルコードもこのタイミングかなと思います.

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
上級者は「道を極めし剛の者」の手前なのでサクッと行きます.

私ができてることとそうでないことあるので,ふりかえりと自戒の念を込めて書きます.
CTOでもテクニカルリードでもエバンジェリストでも,
持っているモノ・思ったことを伝えることができなければ,どんなに高い技術力があっても活かしている!とは言えないと思っています.
ここで言うプレゼンテーションは「話す」「人前に立つ」という意味だけでなく,
プレゼンテーション (英語: presentation) とは、情報伝達手段の一種で、聴衆に対して情報を提示し、理解・納得を得る行為を指す(宣伝等)。
本来の意味合いである,
事を指します.
現状やっていること,得意不得意もあるかと思いますが,最低でも「書く」「話す」のどちらか,理想は両方を鍛えて「理解」「納得」に繋ぐべきかなあと思っています.*12
これは私個人が今年実践したのですが,
スポンサーをやると,Python・エンジニア(&コミュニティ界隈のこと)が色々と分かってオススメです!
上級者レベルの人は,
とかそういう方が多く,Pythonや仕事以外の事も知らないと回らないことも増えるので経験としてできる方はぜひやってみると良いと思います.
私自身の実践の歴史は前回のエントリーに載せたので迷ってる方はぜひお読みいただくとうれしいです.
自分で作ったものをOSSにする,メンテと布教を続けて使ってもらう,本を書くetc...
ここまでやれたらホント強いと思います.
私は部分的にできてないので,2018年は頑張りたいですね.
自分で本を書こうな!(自戒の念)*13
以上.
初心者・中級者・上級者向けで本や学び方,過ごし方を体系化しつつ色々と述べましたが,大切なことはただ一つで,
地道に活動・練習を続けてコツコツと1%を積み上げ続けられること!
これに尽きます.
そう思ったのが最近読んだこちらのエントリー
日々の地道な仕事や根気といった「下向きの力」をかけ続けることにより,「ティッピング・ポイント」が近づき,いつの日か「上向きの力」に乗れる.
その間の「タイムラグ」は苦しいものがあるかと思いますが,1%の力をかけ続けてとんでもない遠いところまで行ける.
Python・プログラミングに限らず,地道にやっていくこと(=やり続けられる程度のパワーで長く続けること)が大切ですよ!
という事でこのエントリーを締めさせてもらいます.
長文にお付き合い頂きありがとうございました!
すでに前の記事に乗ってる本でもあります.
ここまでの記事の文脈は無視しています笑
気になる方はぜひご一読を!
※特に順番はありません

Pythonではじめるデータラングリング ―データの入手、準備、分析、プレゼンテーション

Essential SQLAlchemy: Mapping Python to Databases (English Edition)
なお,SQLAlchemy本は仕事でハマったので買って読みましたw*14
*1:自ら「俺、中級者(もう初心者とはいえない)」を言うのは難しい気持ちはわかる.が勇気を持って名乗るといいかなって思う.
*2:ここで下手に「カッコイイからMac」とか,なれないOSにするとPython・プログラミングを覚える以前に「新しいOSに慣れる」という本質から離れる労力を使うことになるのでここは慣れたOSがBestです.使いたい・カッコイイパソコン・OSは基礎を学び終えてお仕事やモノ作りが出来るようになってから買いましょう
*3:個人的にはローンを組んででも良いスペックにすべきだと思います,結果的に経済的かつ,覚えるためのモチベーションにもなります
*4:ブラウザで完結するぶん,学ぶ前にハマりがちな「環境を作る」所を回避できるのは大きいです.月額数千円と,環境でドハマリして一日消えるのとでは投資対効果的には月額数千円の方が大抵の場合コスパ良いはず
*5:ローマは一日にして成らず,小さいことをコツコツ重ねるのが大切です.
*6:Webの人はDjangoやFlask,データの人はpandasあたりを読むと面白いかも.
*7:つまり,転職・給料アップの為の武器ができます
*8:初心者全員にこれを薦めるのは酷だと思い,中級者の所に書きましたが,個人的な見解としてはレベル関係なく早めにやっておくと良いかなと思ってます
*9:ちなみに,フィードバックを受け入れる・入れないは個人の思想次第で良いと思います,受け入れるべきフィードバックもあればどうでもいい(ry的なのもあるのでそこを選択できるように日々鍛えましょう!
*10:こだわりある手法やプロセスはそっちを使いますが,特にこだわり無い時はPyプロ本に頼ってます
*11:大げさな話,この本一冊のノウハウで無駄なことをしなくて済む→数百〜数千万の損失を抑えられるかもしれません(仕事上ね)
*12:このクラスの人たちは「書く」「話す」を通じて「理解」「納得」を促すことがそもそもの仕事である場合が多い、ちなみに「書く」はコードそのものでも良いと思う
*13:来年かどうかわかりませんが,やりたいことリストに常に入ってます
*14:予約導線をささえるPython製バックエンドをLuigi+pandas+Scrapyで作ったハナシ,こちらのバックエンド開発中にSQLAlchemyのコネクション周りにハマってました...
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。