29
SICPの紹介 SICPについて全く知らない僕が社内の人とSICPの勉強会をせんがために色々調べてみた~

SICPの紹介

Embed Size (px)

DESCRIPTION

SICP(計算機プログラムの構造とプログラム)についてざっくばらんに調べたものを紹介。

Citation preview

Page 1: SICPの紹介

SICPの紹介~SICPについて全く知らない僕が社内の人とSICPの勉強会をせんがために色々調べてみた~

Page 2: SICPの紹介

このプレゼンの目的

____ / \

/ _ノ ヽ、_ \/ o゚((●)) ((●))゚o \ SICPやりたいんだお… | (__人__) | \ `⌒´ /

Page 3: SICPの紹介

このプレゼンの目的

____ / \

/ _ノ ヽ、_ \/ o゚⌒ ⌒゚o \ でもド文系だし一人で| (__人__) | SICPやるのこわいお…\ `⌒´ /

Page 4: SICPの紹介

このプレゼンの目的

____ /⌒ ⌒\

/(●) (●)\/::::⌒(__人__)⌒:: \ だから他の人巻き込んでやるお!| |r┬-| | \ `ー'´ /

Page 5: SICPの紹介

自己紹介

Twitter: @irration

Blog: http://kinokoru.jp/

Page 6: SICPの紹介

SICPの概要と実績

Page 7: SICPの紹介

SICPとは

Structure and Interpretation of Computer Programs( 日本語版は『計算機プログラムの構造と解釈』 )

またの名を「魔術師本」。

1985年に出版された計算機科学の教科書。

Page 8: SICPの紹介

実績

・コンピュータサイエンスの入門書としてMIT(マサチューセッツ工科大学)の一年次講義で使用。

・約30年間にわたり絶版になることなく現在も生き残り続けている。

Page 9: SICPの紹介

Amazon.comにおけるレビュー(1)

・Peter Norvig( 人工知能のウィザード的な人 )

・「例えばもしSICPが自動車について書かれた本だとしたら、”それがどうして動くのか、どのようにできているのか、そして21世紀の乗り物をどうやって設計していくか”を知りたい人向けの本といった所かな」To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century.

・「SICPは原則に基づいた素晴らしいアプローチを提供してくれるよ」SICP gives you an approach that will succeed, but it is an approach based on principles and wisdom, not on a checklist.

Page 10: SICPの紹介

Amazon.comにおけるレビュー(2)

・Paul Graham( 「ハッカーと画家」著者 )

・「コンピュータ科学の最高の古典の一つだよ」This is one of the great classics of computer science.

Page 11: SICPの紹介

なんでSICPを学ぶの?

Page 12: SICPの紹介

より効率的に考えるため

コード書く量を減らしてよりパフォーマンスの良いコードを書くための考え方を提供してくれる。

(ただしSICPはプログラミングやアルゴリズムを勉強するための本ではない)

Page 13: SICPの紹介

良い仮説をたてるため

「過去に似たような原理を取り入れた技術があったけど、それに基づいて考えると、これってこういうことなのかな?」

普遍的な原理・原則がわかれば裏でどういうことをしているかわかる。

車の例で言うと、例えば車が故障した時に、その内部構造を知っていれば

なぜ故障したのか ある程度の仮説をつけられる。

Page 14: SICPの紹介

新しい技術を生み出すため

1985年に生まれて、技術が目まぐるしく変化していく中でも絶版にならず生き残っており、

現在でも広くSICPの愛読者が存在する。↓

激動する技術の中でも変わらない普遍的な体系が存在しており、

その習得に適している↓

新しい技術を生み出す上でのベースとなる思考を育む

Page 15: SICPの紹介

純粋な「考え方」を教えてくれる

言語にはSchemeを使用しているけれど、使用している文法はほんのちょっとだけ。

進めていくうちに、日本語を書くように自然とプログラムを組めるようになってくる。

プログラミングが持つ固有のクセ等が混ざらず本質的な問題にのみフォーカスすることができる。

Page 16: SICPの紹介

長所だけ紹介するのもアレなので短所も紹介しておきます

Page 17: SICPの紹介

具体的な効果が見えにくい

「SICPを学んだことで具体的にどんなメリットがあったか」「SICPで学んだことがどんなシーンで役に立ったか」

を定量化しづらい。(実際にWebでSICPを終えた人の記事を見ても

「以前より効率的なコードが書けるようになった」など、その成果が漠然としている)

Page 18: SICPの紹介

数学の勉強も必要

微積とかシグマ計算とか。しかも章を追うごとに段々難しくなり、

2章までで脱落する人が大半を占める印象。

「SICPをやる」と心に決めた際には複雑な数式に立ち向かう覚悟が必要。

Page 19: SICPの紹介

それなりの期間を投資する必要がある

個人のブログを見ていると、全て終えるまでに約半年~一年ぐらい。

Page 20: SICPの紹介

モチベーションを維持しにくい

・成果が見えにくい・数学的な複雑さ

・長期間の投資が必要

などの要因が相まって、個人でSICPに立ち向かうと

闇に葬り去られる可能性がある。(実際に葬られた人間の数は数知れず)

Page 21: SICPの紹介

実用面での技術体系の学習とは別軸で考える必要がありそう。例 特徴

実用面における技術体系

・特定のプログラミング言語・フレームワーク・○○駆動開発・○○指向

・目的がはっきりしている・導入したことによる成果が見えやすい・時代によって移り変わるため、マスターしている技術体系が別の技術体系にシフトすると実用として使えなくなる・導入して効果を実感するまでそんなに時間がかからない

SICP - ・時代を超えた普遍的な技術体系を身に着けることができる・新しい技術やパラダイムを習得する上での助けになる・新しい技術やパラダイムを考える上での助けになる・良い仮説を立てる力を育む・学習したことによる具体的・定量的な成果が見えにくい・学習に時間がかかる

Page 22: SICPの紹介

普通に勉強して具体的な成果が見えにくいのであればSICPまるまるやった所で時間的なムダも多いだろうし、原理的な部分も「遅延評価勉強法」で学べばよくね?

Q1

Page 23: SICPの紹介

遅延評価勉強法

問題が発生した時、または必要になった時初めて深く勉強する方法。

「何かを解決する」という目的が先行するため効率が良くスンナリ頭に入りやすい。

良いハッカーがよくやっているという声がWeb上でちらほら。

勉強が苦手な人向けの「遅延評価勉強法」 - nanapi社長日記http://blog.livedoor.jp/kensuu/archives/50555054.html

Page 24: SICPの紹介

(遅延評価勉強法で)何より得難いものというのは、異なるものを学ぶことによって得られる、普遍的な知識です。複数の異なるタイプの言語を学ぶことで得られる「プログラミング 言語というもの」に関する知識、様々な仮想化技術を学ぶことで得られる「コンピュータ・OSとはなんなのか」という感覚、組み込み・スマホ・ブラウザ・サーバサイドと見ることで身につく「ソフトウェアを提供する」という仕事、webアプリ・APIサーバ・バッチ処理・ジョブキューといった「コンピュータ に仕事をさせる」方法論、ステートレスなアプリケーションやデータをロスしてはいけないデータ

ベースを通じて学ぶ「データやプロセスのライフサイクル」などなど。

遅延評価勉強法だと得られなかったもの – As a Futurist…からの引用http://blog.riywo.com/2014/01/08/233316

Page 25: SICPの紹介

遅延評価勉強法も銀の弾丸じゃなさそう。

Page 26: SICPの紹介

始めたいとは思うけどSICPってお高いんでしょう?

Q2

Page 27: SICPの紹介

本で買えば5000円近くするけど、最近SICPの日本語訳(非公式)がPDFで出たらしい!

非公式PDF版SICPの全訳を公開しましたhttp://d.hatena.ne.jp/minghai/20140402/p1

Page 28: SICPの紹介

以上です

Page 29: SICPの紹介

ありがとうございました