Lean Baseball

No Engineering, No Baseball.

Pythonの学び方と,読むべき本を体系化しました2018〜初心者から上級者まで

【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年版として読んで頂けると幸いです.

shinyorke.hatenablog.com

すべて読むのもアリですが,ご自身のレベルに合わせて飛ばし読みすることをオススメします.

なお,Python Advent Calendar 2017 24日目のエントリーでもあります.

サクッとまとめると

  • 初心者は本を読むと同時にオンライン学習などで写経をしたり,コミュニティに参加してみましょう
  • 中級者はPythonを学ぶ目的に合わせて本・勉強会(コミュニティ)を選び,その道のプロになってみましょう
  • 上級者は...もう言うことは無いので信じる道を行きましょう.

おしながき

大切なので二回いいますが,「ご自身のレベルに合わせて飛ばし読みする」事をおすすめします!(ちょっと長いので)

免責事項

立ち位置とスタンスをはっきりするため書いときます.

  • あくまでも個人(shinyorke)の私的見解です,この内容が正解・銀の弾丸ではありません.
  • 世の中にある全てのPython本・イベントを網羅しているモノではありません.「取り上げられていない書籍/イベントがダメ」ということではありません.
  • 公平を期すため,私(shinyorke)が読んでいない本・使ったことが無いサービスについてはコメントしません.
  • 所属企業・組織および,参加している団体・組織は一切関係ありません.
  • 選ぶ・選ばない,信じる・信じないは読み手の皆さま次第です!

このエントリーの対象読者と,初心者・中級者・上級者の定義

老若男女・プログラマーか否か,などは問いません.興味ある方は皆さん対象です.

混乱を避けるため,このブログでは初心者・中級者・上級者を以下のように定義します.

初心者

一番のボリュームゾーン,「プログラミングをやりたい!」「機械学習やるためにPython覚えるぞ!」というあたりの層です.

  • プログラミングがはじめての方
  • Pythonがはじめてかつ, 他の言語(PHPでもJavaでもRubyでも)を触れる方
  • わからない・困ったときに何から手を付ければいいかわからない

中級者

「自称・初心者*1」を含めると,この辺も多そう.

  • 仕事やプライベートでPythonを活用している方
  • 初心者向けの本やコンテンツがだいたいわかる方
  • わからない・困ったときに自分なりに調べる方法があったり,聞ける人がいる

上級者

この道5年以上のベテランや,Pythonを使ったプロダクトを保有している企業で直接技術を見ているCTO・Tech Leadがこの辺に当たります.

Pythonを充分に乗りこなして活用している方々なイメージ.

  • 本を書いたり,自身の事例を元に登壇したりしている剛の者(ツワモノ)もしくはそこに近しい方
  • ブログなどでPythonに関する技術Tipsを公開したり,イベント・勉強会のメンターをやったり
  • わからない・困ったときの調べる方法・聞ける人がいるのはアタリマエ,時折その解法を作っちゃう

すべての事は出来ないにしても,多分私がココです.

全体像(学びのフロー)

一枚の絵で描くとこういう感じです.

f:id:shinyorke:20171223232606p:plain

初心者

  • オンライン学習で写経
  • コミュニティに参加してみる
  • まずは基礎を学べる本から,ちゃんと基礎を固める

中級者

  • 特定領域(Web・データ分析etc...)のプロを目指す
  • コミュニティのスタッフとしてデビューしてみる
  • 特定領域と共に,周辺技術(インフラ・数学etc...)を知る本を読む

上級者

  • 特定領域のプロとしてリードしましょう
  • コミュニティの主催や協力(スタッフに加えスポンサーなど)してみましょう
  • 登壇・ブログ・本なんでもいいのでプレゼンテーションしまくりましょう(&プレゼン技能を鍛える)

初心者・中級者・上級者ごとの学び方・オススメ本

それぞれのレベル別に学び方・オススメ本・スタンスを挙げていきます.

初心者

学習フロー

まずは,プログラミングに必要なもの(パソコン・インターネット)を揃えつつ,

  • 写経
  • 基礎学習

をしていくことが基本かなと思っています.

f:id:shinyorke:20171223172746p:plain

学び方

環境を整えつつ,やるべきことを無理なく継続して続けるのが基本かなと.

【重要】自由に使えるパソコンとインターネットが無いとはじまらない

本気でプログラミング・Pythonを学んで活かしたい人は避けて通れないところです!

自己学習の場合,お仕事や授業の時間に学ぶことはできない(=基本的な生産活動・学習はサボっちゃダメ)ので,

  • 自分が自由な時間・タイミングで使えるパソコン
  • 自宅・寮・(職場・学校以外での)外で自由に使えるインターネット

が必須です.

  • 持ち運べる大きさのノートPCを用意.OSは使いなれているモノ*2, 予算が許す限り良いスペックのPC*3がBest(Windows・Mac・Linuxなんでもいい)
  • 自宅インターネットorモバイルWi-Fiの準備

職場やゼミのパソコンとインターネットを使う方も多いかと思いますが,

  • 平日夜や休日といった,「学びやすい時間・シチュエーション」で何も出来ない
  • (職場・学校のルール的にOKなら良いが)本来はNGな行為 ※ご自身の環境・ルールを確認!

Pythonに限らず,プログラミングを学ぶのは地道な作業・勉強の繰り返しなので,時間を有効活用できるよう,環境を整えましょう!

本もしくはオンライン学習で写経をする(オススメはPyQ)

Pythonに限らず,

地道な写経が学習への近道です!

本のサンプルコードをそのまま写し書きして動かす, オンライン学習で課題を解くetc...

学べる時間に地道に行っていく「急がば回れ」が勘どころだと思います.

今活躍している上級エンジニアの人も,(Pythonかどうかは別として)写経を通じて覚えている方が結構います.

本の紹介は次の章に譲るとして,個人的にはブラウザとPCがあれば学べるオンライン学習に投資(月額3,000円前後)してやるのがBestかなと思います.*4

私自身は,(お試しさせてもらった)「PyQ」しか経験ありませんが,大変素晴らしいサービスなので「迷ったらPyQ」で良いと思います!

なお,(手前味噌ですが)利用レポートはこちらにあるので気になる方は是非どうぞ. ※夏じゃなくても,年末年始でもいいんですよ!

shinyorke.hatenablog.com

もくもく会などのコミュニティに参加してみる(まずは手を動かす)

これはどちらかといえば都市圏限定のノウハウですが,

初心者〜中級者の内は,コミュニティ内で手を動かす・知見を得る

のが最短距離でPythonを学ぶ方法として有効です.

利点として,

  • ランチや成果発表,雑談を通じて職場や学校では教わる機会が無いような強者(上級者)と話・質問ができる.
  • 本やブログ,面白い発表をしているホンモノの人と話せる
  • 同じような初心者とつながることにより,「孤独との戦い」から解放される

といった利点があるので,土日などを利用できる方は活用すると良いと思います.

なお,首都圏だと,

が人数規模・主催者や講師のレベルが安定していてオススメです.(&キャンセル待ちも多いので参加は計画的に!)

写経のあと,テーマを決めて何かを作ってみる

写経の延長戦上で良いかと思いますが,

テーマを決めて,オリジナルの作品を作ってみるとBestだと思います!

  • 天気予報のWebサイトをスクレイピングしてみる
  • Django(Webフレームワーク)のチュートリアルをやってみる
  • 普段Excelでやってる集計や分析をPythonでやってみる

Python・プログラミングをやってみよう!と思った動機に近いことを,可能なレベルでやってみると良いと思います.

ここで注意したいのは,いきなり機械学習に手を付けるとか,上級者向けのコンテンツをやると続かなくなっちゃうので,まずは小さく始めることを意識すると良いと思います.*5

初心者向けのオススメ本

写経や基礎学習にオススメな三冊(プラス手堅い本を一冊)ほどご紹介します.

スラスラわかるPython

スラスラわかるPython

スラスラわかるPython

Pythonおよびプログラミング初心者がそのまま写経するのに最適な一冊です!

  • Hello Worldから最後のモノ作りまでのストーリーが読みやすい
  • ハマりどころへのヒント(Python以外も含む)が優しく解説されている
  • 中級者になるための道筋にも触れている

と最初の一冊として非常にわかりやすい本棚と思います.

詳しく知りたい方は本屋さんで手にとってみるか,私も書評を書いてるのでご参考にどうぞ.

みんなのPython

みんなのPython 第4版

みんなのPython 第4版

  • 作者:柴田 淳
  • 発売日: 2016/12/22
  • メディア: 単行本

Python初心者から中・上級者まで使える一冊です!

最初の解説が優しいのと,辞書的にも使えるので使いやすい一冊です.

既に第四版まで出ている老舗の一冊でもあり,古くからのユーザーでも知ってる人が多いのも特徴です.

独習Python入門

独習Python入門――1日でプログラミングに強くなる!

独習Python入門――1日でプログラミングに強くなる!

  • 作者:湯本 堅隆
  • 発売日: 2016/08/05
  • メディア: 単行本(ソフトカバー)

プログラミング中級者に必要なノウハウ(オブジェクト指向など)も含めて網羅的に扱っている一冊です.

私から言えることはただ一つ,

プログラミング教育のプロのござ先輩を信じろ

です.

詳しい内容・レポートは私のエントリーも参考になるかなと思います.

shinyorke.hatenablog.com

Pythonチュートリアル

Pythonチュートリアル 第3版

Pythonチュートリアル 第3版

  • 作者:Guido van Rossum
  • 発売日: 2016/03/24
  • メディア: 単行本(ソフトカバー)

Python以外のプログラミング言語を知ってる方は一冊あるといいかもしれません.

Pythonのパパ,グイド・ヴァンロッサムさんの著書です.

公式サイトの補講,みたいな感じで網羅的に書かれているかつ過不足無いのでオススメです.

中級者

フロー

途中のイベント・順番はいい感じにすっ飛ばしていいと思います,あくまでも概念的なモノで.

f:id:shinyorke:20171224091549p:plain

中級者なりの学び方

このレベルになると,

  • 公私問わず,Pythonで何かしらのモノ作りや分析をしている
  • 仕事で部分的な機能開発や小さめの分析をしている
  • コミュニティ活動(もくもく会やイベントに参加)に複数回参加

とかそんな感じだと思います.

この時期のオススメな過ごし方を簡単にまとめます.

特定領域(Web・データ分析etc...)の勉強に集中

本にしてもオンライン学習にしてもイベント参加にしても,

具体的な領域を決めてやりきる事を目標にすると良いと思います!

Web開発の人はDjangoやFlask等のコア部分を学びつつ,周辺技術(HTML,インフラ,クラウドサービスなど)を学んで,より上級の本を読む・学習.

データ分析系の方はこの時期からPython×機械学習・ディープラーニング本を読む・試しつつ,数学な周辺技術(上に同じく)を学ぶなど.

必要なものは何か,を意識しつつ取捨選択してやりきるようにすると良いでしょう!

また,よく使うOSS(Open Source Software)のフレームワークやライブラリのコードを読む,forkして改造して遊ぶなどしてみるのも自身の特定領域を鍛える意味でも大変有効なのでやってみると良いかなと思います.*6

git,データベース,サーバー,クラウドetc...「必要なことを学ぶ」

この頃には,本や学習の中でgitやデータベース,サーバーにクラウドと色々覚えることが出てきます.

具体的には,

  • gitコマンドを使ったリソース(主にソースコード)の管理. 特にOSSと付き合う上で,Github(Gitのクラウドサービス)の利用は避けられない.
  • データベースを使えるようになる.少なくともRDBMS(リレーショナルデータベースマネジメントシステム)のどれかは使うし,RedisやMongo DBといったNoSQLも含まれる.
  • サーバーOSを使えるようになる.後述するクラウドサービス上でWebアプリを公開したり,データ分析環境を作る際にLinuxやWindows Serverなどが必修項目となる.
  • AWS(Amazon Web Service),GCP(Google Cloud Platform)などのクラウドサービス. Webアプリ公開でAWS EC2を使う,データ分析のバックエンドでGoogle BigQueryを使うetc...

これらのプロとまで行かなくても,使えるようになるのは重要なので覚えると良いと思います.

個人的には,他の人達とのコミュニケーションという意味でもgit(Github),何をやってもデータベースは使うと思うのでMySQLあたりは必修かなと思っています.

コミュニティのスタッフとしてデビューしてみる

Python・プログラミングのみならず,他のことも学ぶ最短経路です!

この頃には複数人の知り合いや知ってる人もいると思います.

お時間があるときに,

  • コミュニティのスタッフとして手伝いをしてみる
  • 所属企業・団体で会場貸しができる時は手を挙げてみる

などしてみると,Pythonやプログラミングのみならず,

  • エンジニア界隈の人脈が広がる(自分の顔が知られるようになる)
  • Python・プログラミング以外の知見が得られる
  • 故に,人生に必要な選択(特にお仕事)で選択肢が広がる*7

といった,メリットがあるのでぜひやってみると良いと思います.

ちなみに,初心者の時にやっても全然OKです!*8

成果をアウトプットしてフィードバックをもらう(ブログ・LT・登壇など)

2017年版のエントリーでも触れましたが,

Output & Feedback(覚えたこと・成果は外に出す,フィードバックをもらう)

が一番手っ取り早いと思っています.

アウトプットの手段は,

  • ブログに書く
  • イベントでLTや10分程度の発表をしてみる
  • 勇気を持ってPyCon JP等の大きいイベントで発表・LTしてみる

他にも色々ありますが,いずれの場合も,

  • SNS(Twitterなど)でエゴサーチして反響をみる
  • イベント参加者や主催者に感想を聞いてみる

といった,フィードバックをもらう事を意識すると良いと思います.*9

中級者オススメ本

分野別のおすすめ本です.

Web開発

Pythonプロフェッショナルプログラミング(第三版)

Pythonを実務で使う時のノウハウが集中して掲載されています.

  • Django/Flaskでのアプリ開発
  • チーム開発ノウハウ
  • 実務で使える便利なライブラリ

私自身は基本この本を開発時の標準にしています.*10

データ分析屋さん必読「Pythonではじめるデータラングリング」

Pythonでデータを扱う・駆使する人は必読!といい切って良いくらいの名著です!

データの入手〜前処理〜分析〜可視化まで,ハマる所・必要なことが網羅的に記載されています.

詳しい書評はこちらに書いてるので気になる方はぜひご覧ください.

shinyorke.hatenablog.com

その他のデータ分析本(実務上,約立つモノ)

私が実際役立てているorこれはいい本!と思ったものを紹介します.

Pythonで基礎的なデータ分析・可視化をする人は必読です.

Pythonでデータを扱う・分析する人がほぼ使うJupyterおよび周辺技術(pandas・matplotlib・bokehほか)の本.

機械学習本を本格的に読む前に慣れておくと◎

個人的に,この本のノウハウでやったことのまとめはこちらこちらにあるのでご参考にどうぞ.

仕事ではじめる機械学習

仕事ではじめる機械学習

www.oreilly.co.jp

「私のプロジェクト,ホントに機械学習必要かしら???」を明確にしつつ,事例も掲載されている良著です!

機械学習やディープラーニングを使うプロジェクトは投機性が高い!という事実を知ってから学ぶとより実践的になれるので仕事で使おうと思ってる方は必読です.*11

Pythonを使ったWebスクレイピングについて詳細に載っています.

特にScrapyの部分は読み応えがあり,実際に使えるノウハウいっぱいあります.

このブログでも実践例を紹介させてもらいました.

shinyorke.hatenablog.com

また,スクレイピングの基礎・注意すべきポイントをしっかり学びたい方はこちらの本もオススメです.

PythonによるWebスクレイピング 第2版

PythonによるWebスクレイピング 第2版

  • 作者:Ryan Mitchell
  • 発売日: 2019/03/26
  • メディア: 単行本(ソフトカバー)

その他分野

ここは私も知見がないので教えてくださいorググってください(._.)

周辺技術(Python以外の本)

中級者レベルだと,Pythonの本を読んでるだけでは済まないので,必要そうな本を.

まずは避けられないgit/Githubは定番のこちら.

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

  • 作者:大塚 弘記
  • 発売日: 2014/03/20
  • メディア: 単行本(ソフトカバー)

データベースは最近読んだMySQL本(5.7,現時点の最新)が良かったのでこちらをオススメします.

SQLそのものはこちらが読みやすいかつ実践的で◯でした.

ビッグデータ分析・活用のためのSQLレシピ

ビッグデータ分析・活用のためのSQLレシピ

Linux/Windows Serverは特に本を読んでいないのですが,LPIC本とかが良さ気だと思います(特にオススメはない).

また,AWSはこの辺が定番です.

また,AWSやGCPでアプリを作ったりすると,コンテナベースの仮想化技術「Docker」は避けて通れない必修科目となりつつあるのでこのタイミングで学ぶと◎だと思ってます.

[asin:B0191B5FE4:detail]

もっときれいなコードが書きたい

Python本だとやはりEffective Pythonですかね.

これは中級者じゃなくても必読ですが,リーダブルコードもこのタイミングかなと思います.

上級者

上級者は「道を極めし剛の者」の手前なのでサクッと行きます.

フロー(想像)

f:id:shinyorke:20171223200406p:plain

上級者の過ごし方

私ができてることとそうでないことあるので,ふりかえりと自戒の念を込めて書きます.

【超重要】プレゼンテーション力を鍛える(書く・話す)

CTOでもテクニカルリードでもエバンジェリストでも,

持っているモノ・思ったことを伝えることができなければ,どんなに高い技術力があっても活かしている!とは言えないと思っています.

ここで言うプレゼンテーションは「話す」「人前に立つ」という意味だけでなく,

プレゼンテーション (英語: presentation) とは、情報伝達手段の一種で、聴衆に対して情報を提示し、理解・納得を得る行為を指す(宣伝等)。

Wikipedea「プレゼンテーション」より引用

本来の意味合いである,

  • 情報を提示する(書く・読んでもらう・話す)
  • 理解・納得を得てもらう

事を指します.

現状やっていること,得意不得意もあるかと思いますが,最低でも「書く」「話す」のどちらか,理想は両方を鍛えて「理解」「納得」に繋ぐべきかなあと思っています.*12

コミュニティのスタッフだけでなく,スポンサーもやってみる&回してみる

これは私個人が今年実践したのですが,

スポンサーをやると,Python・エンジニア(&コミュニティ界隈のこと)が色々と分かってオススメです!

上級者レベルの人は,

  • 自社組織の中でエバンジェリスト
  • CTOだったりTech LeadやEngineering Managerだったり
  • フリーランスの方だと息を吸う用にお仕事・依頼がくる

とかそういう方が多く,Pythonや仕事以外の事も知らないと回らないことも増えるので経験としてできる方はぜひやってみると良いと思います.

私自身の実践の歴史は前回のエントリーに載せたので迷ってる方はぜひお読みいただくとうれしいです.

shinyorke.hatenablog.com

成果を公開する・世間の方に共有して使ってもらう

自分で作ったものをOSSにする,メンテと布教を続けて使ってもらう,本を書くetc...

ここまでやれたらホント強いと思います.

私は部分的にできてないので,2018年は頑張りたいですね.

オススメ本

自分で本を書こうな!(自戒の念)*13

以上.

結び〜大切なこと

初心者・中級者・上級者向けで本や学び方,過ごし方を体系化しつつ色々と述べましたが,大切なことはただ一つで,

地道に活動・練習を続けてコツコツと1%を積み上げ続けられること!

これに尽きます.

そう思ったのが最近読んだこちらのエントリー

shacho.beproud.jp

日々の地道な仕事や根気といった「下向きの力」をかけ続けることにより,「ティッピング・ポイント」が近づき,いつの日か「上向きの力」に乗れる.

その間の「タイムラグ」は苦しいものがあるかと思いますが,1%の力をかけ続けてとんでもない遠いところまで行ける.

Python・プログラミングに限らず,地道にやっていくこと(=やり続けられる程度のパワーで長く続けること)が大切ですよ!

という事でこのエントリーを締めさせてもらいます.

長文にお付き合い頂きありがとうございました!

【オマケ】2017年,私(@shinyorke)が読んで「これは!」と思ったPython本5冊

すでに前の記事に乗ってる本でもあります.

ここまでの記事の文脈は無視しています笑

気になる方はぜひご一読を!

※特に順番はありません

仕事ではじめる機械学習

仕事ではじめる機械学習

Pythonエンジニア ファーストブック

Pythonエンジニア ファーストブック

なお,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のコネクション周りにハマってました...