世界を動かす技術を、日本語で。

存在しないが必要なコンピュータサイエンスのコース (2015)

2025年10月24日原文(prog21.dadgum.com)

概要

この記事は、CS分野の複数のユニークな講義内容を紹介。 各講義はソフトウェア開発やプログラミング思考に関する独自の視点を提供。 歴史的なソフトウェア、UX、パフォーマンス、心理的側面まで幅広くカバー。 実践的な事例や具体的なツールを通じて理解を深める構成。 プログラマーの行動や思考パターンまで掘り下げる内容。

CSCI 2100: オブジェクト指向プログラミングの「アンラーニング」

  • オブジェクト階層 に依存しない変数の作成・利用法
  • より汎用的に使える 「関数」 の概念紹介
  • メソッド との違いと応用範囲
  • 前提条件: 「抽象基底クラス」 を扱ったことがあること

CSCI 3300: 古典的ソフトウェア研究

  • VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint など歴史的製品の考察
  • ユーザーインターフェース の進化と創造性の分析
  • ハードウェア制約 が生んだ独自の工夫
  • 歴史的背景と現代への影響

CSCI 4020: 遅い言語で速いコードを書く

  • Python などのインタプリタ言語でのパフォーマンス最適化
  • C++ に匹敵または上回る実行速度の追求
  • 脆弱性の低減 と開発の楽しさの両立
  • 高レベルでの パフォーマンス分析 手法

CSCI 2170: コマンドラインツールのユーザー体験

  • コマンドラインプログラムにおける UX原則 の導入
  • 出力の関連性・可読性・最小化 への注目
  • UNIXの 「ls」ツール を事例に、過剰なオプション問題を分析
  • クラスプロジェクトを通じた体験的学習

PSYC 4410: プログラマー思考の執着

  • ソフトウェア開発者が陥りやすい 周辺的関心事 の特定と理解
  • コード整形・分類体系・型システム・ファイル分割 などへの過度なこだわり
  • 新規システム への拒否反応や批判の心理的分析
  • プログラマー特有の 思考パターン の詳細研究

Hackerたちの意見

クライアントがプロジェクトのゴールを動かし始めたとき、どう反応するかを管理するコースはどこにあるんだろう?ちゃんと指定してない(もしくは全くしてない)若い開発者として、傷もないのに。

いくつかの傷は、得るべきものだよね。

90年代には、ダートマスのCS23ソフトウェア工学コースの一部が実はちょっとした罠だったんだ。成績の半分は、5人グループでのソフトウェアプロジェクトから来ていて、半学期かかるんだよ。もちろん、グループは教授が決めるんだけどね。教授たちは、締切の1週間前(期末試験の直前)に仕様のいくつかの更新を含むメールを送るのが常だった。意外と効果的なコースだったよ。(ダートマスはその後、毎週約10ページの証明を書く必要がある理論コースも続けてた。実践と理論のバランスを取りたかったんだろうね。CSを教えるには悪くない方法だと思う。)

それが(良い)マネージャーの仕事だよ。

テスト駆動開発って呼ばれてるよ。

うちの大学にもそんな講座があったんだよ!でも、事前に何をやるか教えてくれなくて、ほんと最悪だった。教授はみんな大嫌いだったけど、卒業には必須だったから、いろいろな対処法を考えたよ。最後に教授が「おめでとう、これが現実だ!」って言ったんだけど、その時は信じられなかったな。でも、ある意味では彼はもっとひどいことを言うべきだったかも…

CSCI 3300: 古典的ソフトウェア研究 アラン・ケイ、僕のお気に入りの皮肉屋は、70年代後半に解決された概念を何度も再発明していることを思い出させようと何十年も努力してきたんだ。彼は、私たちがそれ以来ずっと同じところを回っていることに失望している。プログラマーのほとんどは、アーティストが芸術の歴史を学ぶように、哲学者が哲学の歴史を学ぶように、コンピュータサイエンスの歴史を学ぶ機会がほとんどないから、彼は今も失望しているんだ。

芸術や哲学の歴史は何千年も続いているけど、コンピューティングの効果的な歴史はせいぜい数十年だよね。両者を比較する意味はないよ。2500年になったら、2100年や1970年に行われたことと現在の計算実践を比較しないことに失望するのも理解できるかもしれないけど、今の時点で私たちが持っているものを「歴史」と呼ぶのは、その言葉の広い意味に対して失礼だと思う。もう一つの問題は、芸術や哲学は物質的な基盤にほとんど依存しないか、全く依存しないことだ。計算は、その物理的基盤の性能に圧倒的に依存している(CPUの速度、メモリのサイズ、永続ストレージのサイズ、永続ストレージの速度、ネットワークの帯域幅、ネットワークの範囲、ディスプレイのサイズ、解像度、入力デバイスの特性、デジタルからアナログへの変換を通じてアクセスできる感覚モダリティなど、様々な指標によって)。1970年に問題が解決された方法が2025年にどう解決するかに劇的な教訓を与えると主張するのは、私たちが実際にコンピュータで何をしているのかを完全に見失っているように思える。

コンピュータ科学者は歴史を土木工学や物理学のように扱うべきだと思う。これらの分野は客観的に進歩していくからね。芸術や哲学は進歩するかどうかわからないし、誰も確実には言えない。あんまり良いお手本じゃないよね。

RITにいた頃(2006年頃かな?)に、計算機の歴史についての選択科目があって、そろばんから始まってメインフレームやネットワーキングまで進んだんだ。教授は何年も前に引退したと思うけど、講義ノートはまだオンラインにあるよ。 https://www.cs.rit.edu/~swm/history/index.html

大学を振り返ると、OSの授業の一環で「歴史についてのエッセイ」を書いたのが一番面白いプロジェクトだったな。OS X(Snow Leopard)を選んで、その歴史を掘り下げることで、ソフトウェア開発やUnix、ソフトウェアの商業化について素晴らしい洞察を得られたよ。Mr. Kayの意見には完全に共感する。

アラン・ケイ、私のお気に入りの皮肉屋は、何十年も私たちに思い出させようとしてきた。 「アラン・ケイが50年間、毎回同じ(ユニークで、彼自身の、悪くない)スピーチをするのは、アラン・ケイが皮肉屋だからじゃない。」 私たちは、70年代後半に考え出された概念を何度も再発明していて、彼は私たちがずっと同じところをぐるぐる回っていることに失望している。 「それはアラン・ケイがぐるぐる回っているということ。」

Hacker Newsで議論の続きを見る