「恋愛観・結婚観」の「Continue reading」を押している
悪い子が多いようですね。困ったもんです(自分で書いているくせに)。

願わくば読んでおられる方が、知り合いではなく、
Facebook、mixiなどから何気なく来られた方であることを祈ります
(じゃあ書くなよ)。

## 講師になったつもりで

私はSFCでコンピュータサイエンスの一部を学びました。
素晴しい講義が多かったわけですが、それでも私が
知りたいことを完全に充足してくれるような科目はありませんでした。

今回は私が講師になったつもりで、その科目を構成してみたいと
思います。

## 科目紹介

この「実用ソフトウエア概論」では様々な実用的なソフトウエアが
どのように構築されているかについて、駆け足で学びます。
言語はCまたはC++その他を使います。
全てを知っている必要はありませんが、
Cのポインタについては習熟しているほうがいいでしょう。
この科目を通じて習熟する、というのならそれでも構いません。
分量の多い、宿題の多い厳しい科目となりますので、覚悟して
受講して下さい。

## シラバス

あなたはエディタ、たとえばGNU Emacsがどのように作られているか
知っていますか? Webブラウザがどういうふうに構築されているか
想像がつきますか?
コンパイラがどのようにして構成されているか知っていますか?
Rubyはどのように動作しているのでしょう。
記号微分のプログラムを書いてほしいと言われたときにどうしますか?
(数値ではなく数式を扱う、ということです)

この科目を通じて、普段使っているようなプログラムがどのように
構成されているかを学びます。本当はソースコードにあたるのが
一番なのですが、それでは時間が足りません。私から大まかに構造を
説明します。それを学んだあなたは宿題で、そのプログラムを
作ってみたり、拡張してみたりして下さい。
開発プラットフォームはLinuxなどのUnix系OSを想定しています。

宿題の出来で成績を付けます。すごいのを数多く作った人にはA、
標準的な拡張だけど、毎回宿題をしてくれた人にはB、
宿題をあまり出さなかった人にはC、となります。
宿題を1回も出さなかった人は残念ながらDとなります。

また、期末の試験は実施しません。

* 第1回: C言語のおさらい (問題を出しますので、それを宿題とします。)
* 第2回: C++言語のおさらい (同上)
* 第3回: 開発のやり方(Makefile, git, autoconfなどなど)
* 第4回: エディタ(1) (GNU Emacsを例にします)
* 第5回: エディタ(2) (vimを例にします)
* 第6回: コンパイラ(1)
* 第7回: コンパイラ(2)
* 第8回: 正規表現
* 第9回: Ruby
* 第10回: デバッガ
* 第11回: IDE(統合開発環境)
* 第12回: Webブラウザ(1)(Mozilla Firefoxを例にします)
* 第13回: Webブラウザ(2)(Mozilla Firefoxを例にします)
* 第14回: メーラ (Mozilla Thunderbirdを例にします)
* 第15回: 数式処理(Schemeを使います)

## 感想

そもそも教えられるのか? というより私が学びたいんですけど。

網羅できているとは言えませんが、「コンピュータプログラムは
言語処理系と見なせる」、スレッドの使い方、通信プロトコル、
オブジェクト指向プログラミング、
理論に基いたプログラミングなどが入っていると思います。

そしてここから漏れた、DBMS、デバイスドライバ、数値計算、
拡張性を盛り込んだプログラム(マクロ、アドオン)、
ワープロ、表計算プログラム、プレゼンテーションプログラム、
画像処理プログラム、ドロープログラムなども勉強したい
ところですよね。