SICP 第1章に関するまとめ

images

ようやくSICPの第1章が終わったので、これからSICPの勉強を始められる方に向けて, SICPの第1章に関する個人的なまとめをおくりたい。

SICPの第1章を学ぶ上で必要になるもの

・1ページ1ページしっかり理解しながら進む忍耐力。数ページ 飛ばし読みするだけで分からなくなるので注意( 特にExcerciseは 問題を理解する手助けになる上, 前のExcerciseで定義した手続きが後のExcerciseで何回も出て来たりするので, 1章に関しては全ての問題を飛ばさずにやることをオススメする. 実際、1章に関しては後述の高校数学の基本的な計算さえ理解していれば、「どうあがいても絶対にできない」というような絶望的な問題は存在しない )。「ん?ちょっと雲行きが怪しくなってきたな…」と感じ始めたら迷わず一度戻って勉強し直した方がよさげ。

・高校数学。所々に複雑に見える数式があるけど, シグマ計算、対数関数、指数関数、定積分、微分などの基本的な計算ができれば臆することは無い。数学それ自体の難しさというよりは、SICPの内容( 抽象化の方法論など )をいかに具体的なコードで実現するかという部分から来る難しさが多い。場合によっては理解するのに数時間かかるような節もあるけれど、飛ばすと後々分からない事がどんどん積み重なって詰むので、諦めずに問題に取り組むことをオススメする。

SICPの第1章で得られるもの・メリット

SICPを勉強している当初、とにかく時間がかかってしまって(4ページ進むのに10時間近くかかった所もあります)、「こんだけ時間をかけて得られるものって何なの?」って不安になることが何度もあったので、同じように不安を感じる人のために SICPの第1章で得られるもの・メリットをリストアップしておきたいと思う。

再帰がどのように広がるか・実行されるか・どのような結果が得られるかイメージが持てるようになる

・必要に応じて再帰を組み立てられるようになる

あるコードがどういう計算量になるか予測を立てられるようになる

より良い「抽象化」の訓練になる。Schemeという言語の性質上、問題を解きながら読み進めているうちに 頭で考えている内容をほぼノイズ無しにコードで表現できるようになるので「プログラミング言語」というドメイン固有の制約に縛られることなく純粋な抽象化のトレーニングができる。

・問題を解きながら進めているうちに, ニュートン法, パスカルの三角形, ユークリッドのアルゴリズム, 不動点探索, 区間二分法, Fermatテスト, 反復改良法 あたりの数学チックに問題を解くための方法も学べる。特に不動点探索と反復改良法には結構お世話になる。

「何度も予測を立てて近似値をとる」という考え方・解き方に慣れる。

・世の中に存在する「暗号」の一部がどういう風に実現されているか学べる( Fermatテストあたりの所 )。

lambda式による計算に慣れる

より高次の抽象へと引き上げられる喜びを実感する(ある具体化された方法論を学び、さらにはそれらに共通する抽象を学び、それをまた抽象化していく…等 )。

・諦めずにちゃんとやると一つの問題を解き続けるための忍耐力・集中力がつく(割とガチ)。

仲間ができた!(勉強会や読書会を開催されている方が沢山いらっしゃるので、近い所を勉強されている方と協力するのも良いかも)

第二章に行ける!!!!!!!(今からもうワクワクしてます)

どうしても全体的にメリットがフワフワしてしまうけど、僕はいわゆるアウトプット至上主義によってベース部分のインプットが軽視されるべきではないと思うし、こういうコンピュータサイエンスのベース部分を常識として身につけておく事はより良い知見で物事を観察する上での血肉になる(スポーツでいう基礎体力になる)と信じています(´・ω・`)

何より個人的には勉強していてめちゃくちゃ楽しいから個人の趣味と考えればいいかなと思う。

SICPの第1章 理解度チェック

・自由に演算ができるか。

・任意の手続きを自由に定義できるか。

・プリミティブな手続きを理解し、必要に応じて使用できるか( floor、even?、 remainder、 display、 newline、cos など)。

・手続きを組み合わせてより複雑な手続きを実現できるか。

・複数の手続きに共通する処理から抽象を抜き出し、手続きとして定義できるか。

線形再帰プロセス線形反復プロセスの違いを理解しているか( 再帰がどのように広がるかをイメージできているか )。

・上記の二つのプロセスを理解する上で、「ステップ数」と「記憶域」という二つのリソースを理解しているか。

・線形再帰プロセスを線形反復プロセスに変換できるか( 「記憶域」というリソースの観点で重要。SICP第1章の問題では, 線形再帰を線形反復に書き換える問題が度々出てくるので, 丁寧に解いて変換に慣れることをオススメする )。

不動点探索を理解し、定義できるか。

予測値を立てて改善を続け近似値を取るプロセスを理解し、定義できるか。

lambda式を使用して手続きを定義し、抽象を構築できるか。

コミュニティ

先日より sicp-reading に参加させていただきました。現在、大体一週間に一度のペースで勉強会を開催されている模様です。

なお、こちらのコミュニティでは Githubにで各節の内容、解答・解説を公開中のようです。

https://github.com/sicp-reading

補足

実は先日より以下のブログにて水面下で解答・解説をまとめていたので、こちらも参考までに( ポストで取り扱っている問題が若干飛ばし飛ばしになっておりますが、ご了承ください )。

http://science.kinokoru.jp/

Written by Nisei Kimura ( 木村 仁星 )

- Sponsored Links -

<<

Top

>>