非情報系の学生がゼロから機械学習系の研究をするために勉強した書籍紹介(プログラミング編)

今回は前回の記事の続きで、私がプログラミングの勉強に使った書籍の紹介です。 どの言語でも構いませんが、最初に一般的なプログラミングの概念や文法を理解できるような書籍を選ぶと良いです。 そうすれば他言語の勉強をするときがグッと楽になると思います(公式ドキュメントやネットの記事で理解できるようになる)。

今回紹介する書籍の位置づけ。

  1. PC・サーバ・インフラ
  2. プログラミング関連(今回の記事)
  3. 人工知能関連

最初に簡潔に僕の意見を書いておきます。

プログラミング言語とは(人が理解できるレベルで)コンピュータに指示をするために作られた言語です。 ですが自分で書いたプログラムは(少なくとも最初のうちは)ほとんどの場合、指導教員に見せて想定した動作をするか確認してもらうことになると思います。 なんでこんな話をしたかと言うと、書いたプログラムは機械に正しく指示を出せればなんでも良いというわけではなく、 他人が読んでも理解できるように書く必要がある ということです。

汚いプログラムの代表例を出すとしたら、

  • 変数の役割がわかるよう変数名をつけていない(a, hogeなど)
  • その言語のコーディング規則に従っていない

などです。

汚いプログラムは正常に動作してるかも不明瞭になりがちで、他人に引き継ぐことも実質不可能に近いです。 なので初学者はとにかく最初は「他人が読んでも理解できる・1週間後の自分が読んで理解できる」ようにプログラムを書くことを意識するのが良いと思います。

前置きが長くなりましたが、これ以降で僕が勉強したプログラミングの書籍を紹介していきます。

目次

Python

エディターはなんでも良いと思いますが、初学者はJupyter notebookを使うのがインタラクティブに操作できて良いかなと思います。 慣れてきたらVisual Studio CodeやPyCharmなどを使って書いていくのも良いと思います。

スッキリわかるPython入門 (スッキリシリーズ)

スッキリわかるPython入門 (スッキリシリーズ)」を含め、個人的にこのスッキリわかるシリーズが最初の導入の入門書として気に入っています。 後述のJavaもこのシリーズで勉強しました。 図解もわかりやすく、「なぜ」こうするのかという理由まで解説があるので初学者にはちょうど良いと思います。

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ― ノンプログラマーにもできる自動化処理プログラミング」は大体pythonは理解できたけど、具体的に色々なことに使ってみたいって人にお勧めです。 綺麗なコードではありませんが、パソコンを使った作業の効率化・自動化をする例が豊富にあるので、実践的なプログラミングをして学習していきたい人向けです。 気になった人は目次を見てどんなことが書かれてるのか一度チェックしてみてください。

Fluent Python ―Pythonicな思考とコーディング手法

Fluent Python ― Pythonicな思考とコーディング手法」は普通にPythonのコードが書けるようになってきて、さらにPythonのスクリプトを美しく書きたいって人にお勧めです。 ただページ数がかなり多いので、気になった章をつまみ読みするスタイルが良いかもしれないです。

エキスパートPythonプログラミング改訂2版

エキスパートPythonプログラミング改訂2版」はタイトルの通り、発展的な内容が書かれた書籍です。 普通のコーディングには飽きてきて、ベストプラクティスを求めたくなった人はぜひ一度読んでみてください。 ここら辺まで実践できるようになってくると、普通のエンジニアクラスにはなっていると思います。

Java

JavaはIntelliJやEclipseなどのIDEを使ってプログラミングをすることを強くお勧めします。 じゃないと書くのが(少なくとも僕は)非常に辛いです。。

スッキリわかるJava入門 第3版 (スッキリシリーズ)

スッキリわかるJava入門 第3版 (スッキリシリーズ)」はPythonでも出てきましたスッキリわかるシリーズです。 Javaはこの本と後述の同シリーズ実践編を理解すれば、通常のプログラミングをする分には困らないと思います。

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)

スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ)」は入門と書いてありますが、タイトル通り内容は結構実践的な物も結構多く勉強になります。

Effective Java 第3版

Effective Java 第3版」はある程度Javaを書くようになって、効率的なソースコードを書く必要が出てき際に読むと良いと思います。 内容は結構Deepなものが多いので買う前に自分が必要としているレベルなのかは確認することをお勧めします。

Shell Script

新しいLinuxの教科書

新しいLinuxの教科書」はLinuxの教科書ではありますが、シェルスクリプトを使いこなすためにはLinuxのコマンドを幅広く把握していることが大切なので、ここで紹介します。 初学者はCUIに慣れておらず、シェルの使い方そのものもわからないケースがほとんどだと思うのでこれをまず勉強すると後々が楽になるかと思います。 CUIも臆せず使いたいって人はぜひ買ってみてください。

新しいシェルプログラミングの教科書

新しいシェルプログラミングの教科書」を読めば大体シェルスクリプトでどんなことができるかを知ることができるようになると思います。 正直Linuxのコマンドは奥が深いものが多くフォローするのはかなりしんどいので、必要に応じてそのコマンドについて勉強するとシェルスクリプトでやれることの幅が広がっていくと思います。

R

RStudioではじめるRプログラミング入門

Rに関しては、プログラミング言語としてのRを学ぶという書籍はあまり多くなく、統計学・データサイエンスを通してRを学ぼう、みたいな本がほとんどです。 「RStudioではじめるRプログラミング入門」はR自体を学べる貴重な本ですが、Rが初めて学ぶプログラミング言語ですって人にはちょっとしんどいかもです。 なのでRを学ぶ前に他の言語でプログラミング言語とはというところをある程度理解してからの方が良いかなと思います。 自分はRは基本的には都度やりたいことを調べて書いていくってスタイルです。

プログラミング言語全般に関係するもの

以下の二つの書籍「リーダブルコード ― より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)」、「プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則」はプログラミングがある程度できるようになってから読むのをお勧めします(最初に読んでしまうと意味不明だと思う)。 色々と書かれてますが、「万人が読めるコードを書くため」に必要な概念についてまとめられていると思って読むと理解しやすいかと思います。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則

終わりに

以上、自分が読んできた書籍の中でお勧めのものを紹介しました。 まず初めは書籍でプログラミングの基礎を勉強し、ある程度身についたらネットで調べながら勉強していくスタイルに変えていくと良いと思います。 公式ドキュメント、Stack OverflowやQiita、その他技術系ブログなどネットには素晴らしいサイト・記事が大量にあります。 それらの内容の良し悪しを判断できるようになったら、1人で十分プログラミングができるようになると思います。 そして最後に、とにかく1週間後の自分が読んでも理解できるようなプログラムを書くように日々意識してみてください。