"機械学習","信号解析","ディープラーニング"の勉強

読者です 読者をやめる 読者になる 読者になる

"機械学習","信号解析","ディープラーニング"の勉強

"機械学習","信号解析","ディープラーニング"について、それぞれ勉強しながらブログにまとめていきます。テーマは気分によってバラバラかもしれません。

書評:プログラムはこうして作られる

雑談 雑談-書籍紹介

 プログラムはこうして作られる

プログラムはこうして作られるプログラマの頭の中をのぞいてみよう

プログラムはこうして作られるプログラマの頭の中をのぞいてみよう

 

 

この本はセガでゲーム開発をしている方が「プログラムを考えだす能力」を身につけてもらうことを目指して書いた本です。有名なゲーム「テトリス」を題材に、これを実装していく過程を考え方と共に丁寧に解説していきます。

 

プログラミングをしようというときの「姿勢」や「考え方」が身につく素晴らしい本です。

 

本の特徴

考え方中心

この本の特徴は、なんと言ってもプログラムを作るときの「考え方」を意識していることです。従来のプログラミングの教科書は、とあるプログラミング言語を取り上げて文法やライブラリの使い方を解説するものが中心となっています。あるいは、データ構造とアルゴリズムと言った理論的な話を展開する本もあるでしょう。

 

そんな中、この本は実際にゲームプログラミングを通して、開発の過程でどういうことを考え、どういうふうに実装していくのかということを中心に書いています。

このプログラミングの考え方は、言語や実装しようというものに関わらず身につけておくといいものばかりです。

 

ときには回り道をする

ある機能を実装しようというときに、それを実装するコードを思いついたままに書いてみます。しかし書いているうちに、違う方法の方が良いと思いつくことも出てきます。

大抵の教科書では、既に適切な方法があたかも当たり前かのように記述されており、「そんな方法思いつかないよ」と思ってしまいがちです。

 

この本では、その方法を思いつく過程を、少々泥臭い方法で実装を行ってから順を追って解説していきます。まさにゲーム開発をしている人の頭の働き方を追体験しているかのようです。

 

プログラムを最初から最適な形で書ける必要などありません。まずはとりあえず動く形で、そしてあとからそれを洗練させていけばいいのです。そして慣れてきたら、ある程度適切な形を最初から書けるようになってくるはずです。徹底的に初心者の気持ちで、そこに至るまでの道を示してくれます。

 

そしてデバッグというプログラミングには必須であるが、特に解説されることのないテーマも常に意識して書かれています。著者はわざと初心者がやりがちなミスというルートも本書の中に折込、それをデバッグするという作業も経験させているのです。

これによって、プログラムが思い通りに動作しない場合に、どこが間違っているのかの検討をつける術を身につけることができるでしょう。

 

 

特定の言語に捕われない

文法というものは言語が変われば変わってきます。

それでも大枠はある程度共通しているところもあり、どれかのプログラミング言語を触っていれば、他の言語を始めるときでも習得は早いです。手続き型やオブジェクト型、関数型などの様々な言語(あるいは実装の指針)がありますが、そうだとしても、本書で取り扱われるプログラマーの考え方はどこでも通用するはずです。

そしてこの本では、本書内でゲーム開発をするための専用の言語「Sunaba」を使います。

Sunabaは、構文において日本語が使えるように設計されています(普通の英語表記も使える)。従って、プログラミング言語を一度も触ったことがない完全なる初心者でも始めることができます。

 

この本で使われる「Sunaba」がプログラミング最初の言語になっても良いでしょう。

 

メモリの概念

pythonなどの言語は、メモリというものを基本的に意識しません。

例えばデータ構造として「配列」では隣り合ったメモリに格納されますし、「リスト」ならば不連続なメモリに格納され、その格納されたメモリのアドレスを互いに指定して繋がりを保つという事実がありますが、速度をよほど気にしない限りはそんなことを意識する機会は殆ど無いでしょう。

コンピュータのどこに保存されていようが、機能として何らかの処理が達成できればお構いなしです。しかし、組み込みソフトなどのようにコンピュータのパワーが期待できない場合は、メモリのことを意識してプログラムをする必要もあります。

 

本書では、様々な値が、とあるメモリに格納されているというのを明示的に意識するところから始まり、それを意識する必要がない場面において抽象的な「変数」という概念を与えるという順番になっています。これは本来のプログラムというものを考える上では、正統派な手順だと思います。

 

大げさに言えばC言語で言うところのポインタを使ってプログラムを書くというのがスタートなのです。小難しそうに見えますが、本書ではそんな難しさを感じさせないところがすごいところです。

 

 

本書の対象者

基本的には全くの初学者から初心者に向けて

本書は冒頭に全くプログラミング経験がないという仮定をしていると書いてあります。なので、本書の内容は基本的には何も知らない人でも1から始められるように丁寧に記述されてます。

 

少しプログラミングの経験がある人にとっては、ついつい読み飛ばしたい部分もあるかもしれません。それならば、自分の裁量で読み飛ばしてしまっても構わないでしょう。

 

初心者以外の対象者

これは全く個人的な意見ですが、「ゼロベースでの開発」経験が無いならば、この本は十分に得るものがたくさんあるだろうと思われます。

例えば、機械学習などの応用分野では、プログラミングは高度に抽象化されており、大抵はライブラリの使い方を学ぶという形になってきます。すると、実はプログラミング自体をゼロベースでやった経験というのは意外にもなかったりするでしょう。

 

何かをゼロベースで開発することなんていまどき無いかもしれません。

既に存在する資源をどんどん活用すればいいのです。しかし本当に理解を深めたいのならば、一度勉強という形で何かゼロベースでやってみるのも良いでしょう。

 

以前以下の書籍を紹介しました。

 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 

s0sem0y.hatenablog.com

 

記事も大盛況を頂きました。

深層学習のライブラリは様々でていて、実用的なニューラルネットを構築したいと思うのであれば、ライブラリを使ったほうが現実的です。しかし、深層学習のプログラムに対する理解を深めるためには、一度自分で実装してみるのが一番だということを述べました。

 

今回紹介する書籍も、Sunabaという言語は決して他で使うものでもありませんし、テトリスを作るということも今後無いでしょう。それでも、プログラムの作成をするということを理解するためには、その過程を一度経験してみるのが一番理解が早いのです。

(この本は決してテトリスのことを詳しく解説している本ではありません。作るものなんてのは本当は何でもいいのです。大事なのは思考の過程です。)

 

 

最後に

是非、プログラミングを1からやってみたいという方がいらしたらチャレンジしてみてください。

 

プログラムはこうして作られるプログラマの頭の中をのぞいてみよう

プログラムはこうして作られるプログラマの頭の中をのぞいてみよう