Upload
takeo-kunishima
View
24
Download
0
Embed Size (px)
Citation preview
フレッシュマン セミナー
国島丈生([email protected])2010-06-16
自己紹介✦ 名前 Takeo Kunishima/国島丈生
✦ 現在地 Akashi, Hyogo, Japan
✦ Web http://kunishi.blogspot.com/✦ 自己紹介 情報科学分野の大学教員。専門はデータ工学、文書工学、マークアップ言語、Webなど。総社まで遠距離通勤中。BSD/Mac/Ruby/ML/REST/lifelog/iPod/iPhone/合唱/弦楽四重奏/ルネッサンス音楽/フェルメール/女性ジャズボーカル/
UKロック/北欧デザイン/写真/組版/タイポグラフィ/中世文学
Twitter (@kunishi) のプロフィールより
経歴
1985-1994 1994-1997 1997-2010
担当講義✦ 情報通信工学実験IB(2年)
✦ プログラミング言語Ⅱ(2年)
✦ コンパイラ(3年)
✦ プログラミング言語Ⅲ(3年)
✦ 形式言語理論(修士1年)
ソフトに興味あり✦ データベース
✦ テキスト処理、文書(XML)処理
✦ プログラミング言語
✦ Web技術
✦ オートマトン理論
kunishi on Books
kunishi on the web
今日の内容
✦ 高校・大学時代の体験談✦ 高校数学から情報科学へ✦ そしてプログラミングへ
高校・大学時代の 体験談
高校時代は
✦ コンピュータとは無縁✦ 数学が好き
✦ 物理・化学は… (>_<)
✦ 英語や国語の方が得意だったかも
パソコンは高嶺の花✦ CPU 8MHz
✦ HDDなし(FDのみ)
✦ Windows なし
✦ 353,000円(今だと50万円以上?)
NEC PC-9801VX01 (1987年)
関数電卓?✦ ポケットコンピュータ(ポケコン)
✦ メモリ2~16KB
✦ ディスクなし
✦ BASICのプログラムが動いた
Internet 黎明期
✦ 1984 東大、東工大、慶応大
✦ 1988 大学・企業の研究所間
✦ 1992以降 個人へ普及
✦ 1990年代 携帯電話登場
数学を生かしたかった
✦ 当時の京大では選択肢は3つ
✦ 理学部数学科✦ 工学部数理工学科✦ 工学部情報工学科
どう選んだ?
✦ 理学部数学科→就職に困るらしい
✦ 数理工学科 vs. 情報工学科
✦ 違いがさっぱり分からない✦ 偏差値の高いほう(情報工学科)を選択
1985年 京都大学工学部情報工学科入学
誤 算
誤算その1
✦ 物理が結構必要だった…
誤算その2✦ 大学の数学は難しかった…
誤算その3✦ 専門では微積分はあまり使わなかった
✦ 「独特」の理論
✦ ブール代数etc.
✦ パズルに近い
結果オーライ?
✦ もともとパズルは好き✦ 数学よりプログラムの方が合っていたらしい
研究室配属をどうしよう✦ 全部で6研究室…だったのだが
✦ 4年生になる前にソフト系2研究室の教授が退官→研究室配属なし
✦ 残り4研究室は:ハードウェア、論理回路、OS、人工知能
✦ 一番ソフト寄りなのは人工知能だが、教授との相性がイマイチ
どう選んだ?
✦ 教授との相性が一番良かった論理回路講座を選択✦ 研究室選びの際、教員との相性は割と大事です
✦ しかし、やはりソフトへの拘りはありまして…
✦ 講座の中でもソフト寄りのテーマ(グラフィックス)を選択
卒業研究でやったこと
C, C++で1,500行程度のプログラミング
念のため
✦ プログラミングの達人では決してない✦ 同期にももっと凄いのがいた✦ 皆さんの中の凄腕プログラマのほうが実力は私より上のはず
ところで、就職は?✦ 結局、一度も就職活動はしなかった
✦ どういう企業がいいのか、学生時代はイメージが湧かなかった
✦ Webはまだなかった→Web関連の企業もなかった
✦ 大学教員になって後悔してる?
✦ 少なくとも、学生さんの教育は割と合っていると思っているので、後悔はしてません
高校数学から 情報工学へ
情報工学の二面性
ハードウェアを作る
ソフトウェアを作る
物理 連続系の数学
離散系の数学
連続系 vs 離散系
連続した数(実数)
連続しない数(整数, 0/1 etc.)
微分・積分
集合剰余系場合の数数列
数学的帰納法
物理現象
情報数学
情報科学への橋渡し
ケーニヒスベルクの橋✦ 図の7つの橋を各1度ずつ通って元の場所に戻ってくることができるか。ただし、同じ橋を2度以上通ってはならない。
✦ 関連:グラフ理論
参考:増田直紀「『複雑ネットワーク』とは何か」(講談社ブルーバックス)
ハノイの塔✦ 台の上に3本の棒A, B, Cがあり、Aに n 枚の円盤がはまっている。円盤は下ほど半径が大きい。次のルールを満たしながら、円盤をすべてBに移すのに必要な手数を n で表せ。✦ 一度に一枚の円盤しか移動できない✦ 途中で円盤の大小を逆にしてはいけない
✦ 関連:再帰
例:定積分
✦ 人間は不定積分から計算
⇤ 1
0
x2dx =�13x3
⇥1
0
=13
例:定積分✦ コンピュータは不定積分のような式変形は苦手
✦ 区分求積法
n = 1000 で 0.3338335
⌃ 1
0
x2dx ⇥n⇧
k=1
⇤�k
n
⇥2
· 1n
⌅=
1n3
n⇧
k=1
k2
プログラムの例
S = 0;for (k = 1; k <= n; k ++) { S = S + k * k;}S = S / (n * n * n);
⌃ 1
0
x2dx ⇥n⇧
k=1
⇤�k
n
⇥2
· 1n
⌅=
1n3
n⇧
k=1
k2
フィボナッチ数列F0 = 1, F1 = 1, Fn+2 = Fn+1 + Fn
1, 1, 2, 3, 5, 8, 13, 21, 34, …だが一般項は複雑
Fn =1⇥5
⇤�1 +
⇥5
2
⇥n
+
�1 −
⇥5
2
⇥n⌅
プログラム=漸化式
int F(int n) {
if (n == 0) return 1; else if (n == 1) return 1; else {
return F(n-1)+F(n-2); }
}
F0 = 1, F1 = 1, Fn+2 = Fn+1 + Fn
法則を見つける
✦ 今日は日曜日です。100日後は何曜日?
✦ 1日後は月、2日後は火、…100日後は火
法則を見つけよ
✦ 今日は日曜日。1億日後は何曜日?
✦ とても数えられません
✦ 7の倍数日後はいつも日曜日。1億÷7 = 14285714 あまり 2。∴火曜日
法則を見つけよ✦ 今日は日曜日。10100日後は何曜日?
✦ 10100なんて計算できない
✦ 10100を7で割った余りも計算できない
✦ 10nを7で割った余りを、n=1, 2, …で計算してみよう
すると✦ 100 % 7 = 1, 101 % 7 = 3, 102 % 7 = 2,
103 % 7 = 6, 104 % 7 = 4, 105 % 7 = 5, 106 % 7 = 1, 107 % 7 = 3, …✦ %:剰余を表す演算子
✦ 周期6で同じ数が出る(1, 3, 2, 6, 4, 5)
✦ 100 % 6 = 4 ∴木曜日
プログラムにするとvoid nannyoubi(int n) { if (n%6 == 0) { printf(“月曜日¥n”); } else if (n%6 == 1) { printf(“水曜日¥n”); } else if (n%6 ==2) { /* 以下省略 */ }
そして プログラミングへ
前提として✦ 人それぞれ向き不向きはあります
✦ 入試をくぐり抜けてこの場にいる皆さんなら
✦ プログラムが書けるようになる素地が一定程度あるはずです
真似を侮るなかれ✦ インプットなくしてアウトプットなし✦ まずは他人のコードの真似から✦ 単なるコピペにとどまるなかれ✦ 人のプログラムを読んで引出しを増やせ
✦ 読む≠字面を追う、読む=とことん理解する
✦ 少し難しいものを、興味の持てるものを
本を読もう✦ プログラム=プログラミング言語で書かれた文章
✦ 論理の正しさ+分かりやすさ・読みやすさ✦ 経験に基づく仮説
✦ 国語力のある人はプログラミング能力も高い✦ 文章に触れる機会を増やしてください(ジャンルは問いません)
Cと相性が悪くても✦ 世の中には無数にプログラミング言語がある✦ 当然、好き嫌いも相性もあります
✦ プログラミングの根は共通✦ 言語を一つマスターすれば、他の言語にも勘が働くようになります
ここだけの話ですが✦ 正直、Cはそんなに達人ではありません
✦ どっちかというと、めんどくさくて、なるべくなら使いたくない言語です ^^;
✦ でもまあ、ポインタは知っておかねばならないね✦ 本当にプログラミングが好きになったのは、スクリプト言語や関数型言語を知ってからです
✦ 私の講義で一部扱います(Standard ML, Ruby)
プログラミング学習 ≒
語学学習
1章が重要
諸君の健闘を祈る
One More Thing...
※ Googleで “One more thing”で検索してみましょう
何が役立つかは 神のみぞ知る
興味は発散有限オートマトン理論
スクリプト言語による プログラミング
趣味のWebページ作成
データ工学
関数型 プログラミング言語
デザイン
すべてはWebに収斂した有限オートマトン理論
スクリプト言語による プログラミング
趣味のWebページ作成
データ工学
関数型 プログラミング言語
デザイン
何が役立つかは 神のみぞ知る
諸君の健闘を祈る
レポート課題✦ 以下についてA4用紙1~2枚程度にまとめ、6/
22(火)17:00までに提出せよ。(提出場所:2610室)
✦ ケーニヒスベルクの橋、ハノイの塔(最低限どちらか一方、解に至る経過も含めて)
✦ 今日の講義の感想