序章
暑い日が増えてきましたが、そういう時は外に出ず、
家でひたすら計算機科学を勉強してみるのはどうですか?
もうすぐ夏休みですし!
計算機プログラムの構造と解釈(SICP)
現在はネットで全文が公開されています。書籍を買わなくても勉強できます。
https://sicp.iijlab.net/fulltext/xcont.html
本の特徴
本書は MIT(マサチューセッツ工科大学)の計算機科学の授業で使用されていた教科書です。プログラミング言語の学習本ではありません。また、リファレンス(参考書)的には使えません。初めから順番に読んでいかないと理解できないタイプの本です。登場するコードはすべて、前章や前説の本文内で出てくるものばかりで、いきなり未定義のコードが出てきたりはしません。最初から順番に読んでいけば理解できるでしょう。
本書の読み方
読むだけでは本当の理解はできません。本当の理解は経験から得られます。
本当の理解は経験から得られる。
大事な事なので二度言いました。
掲載されているプログラムは全部手打ち(写経)して、コンピュータで動かしながら読んでください。コピペをしてはいけません。練習問題がたくさんありますが全部解いてください。本文の内容をきちんと理解できていれば難しくありません。練習問題は、本文がきちんと理解できているか確認するためのテストになっていますので、ぜんぜん解き方がわからない!という場合は、もう一度本文をよく読み返してください。「わかったつもり」で流し読みしていると練習問題は解くのは難しいです。
本書で使用しているプログラミング言語は Scheme です。自分が得意な、他のプログラミング言語でも良いですが、翻訳する能力と手間は増えます。それは覚悟してください。個人的には本書と同じ Scheme を使う事をおすすめします。Scheme であればどんな処理系でも大丈夫です。本書のコードは特定の Scheme 処理系に依存していません。
※注意
「図形言語」の部分だけは、本書に掲載されているコードだけでは動きません。使用するプログラミング言語に応じて、各々がいろいろな処理系依存のコード(特にグラフィックAPIを使用する処理)を書く必要があります。
「難しくてわかんねー」となったとき
わからなくても当然です。悲観することは何もありません。すらすら理解できる書籍を読んでも何も得られる事などありません。理解するためにいろいろ調べたこと、努力したことが、あなたの今後に大いに役立つことでしょう。困難に直面して人は悩み、成長するものです。成長のチャンスなのだ、と前向きに考えてください。
問題を正しく捉えることが出来たなら、もう半分解決したも同然である。
なにが理解できていないのか正確に把握できれば、もう問題は半分解けたようなものです。
あと半分は何が必要なのか。それは
やる気
です。「絶対に解いてやるぞ!」という意気込みです。
まとめると、問題解決に必要なのは
・何が問題なのか、何がわからないのか、を正しく捉える能力
・やる気(根性)
この 2 つです。
読み急ぐ必要など無い
本書を読んでいると、いろいろなことを試したくなったりします。読むのを一旦止めて、脇道にそれたりすることがあります。知的好奇心が旺盛な人こそ、そういう傾向にあるでしょう。しかし、読むのを急ぐ必要は何も無いので、気になった事はなんでもコードを書いて検証してみましょう。よくない結果になったとしても、「失敗だった」「間違いだった」という経験は得られます。その経験が大切なのです。
読み終わった時に得られるもの
いろいろな計算機科学の知見も得られますが、最大のものは「自信」です。
例えば技術士試験の専門分野「情報工学」の問題なども、そんなに難しくは感じなくなっているはずです。いろいろな場面で、「なんだ SICP でやったアレの事かー」と思うことがあるはずです。
おわりに
今回は SICP を紹介してみました。
夏休み、外は暑いですし、家にこもって勉強してみるのはいかがですか?