4 ポイント 投稿者 GN⁺ 2025-10-25 | 1件のコメント | WhatsAppで共有
  • この記事は実在しないが、ソフトウェア開発者が学ぶべき現実的かつ風刺的なコンピュータサイエンスの講義を提案している
  • 各講義は、現代の開発文化の問題点や偏った思考様式を批判的に浮き彫りにする
  • たとえば、オブジェクト指向パラダイムへの盲信、コマンドラインツールのUX軽視、遅い言語の性能に関する誤解などを扱う
  • また、開発者の心理的な執着や非生産的な習慣を扱う科目も含まれる
  • 全体として、コンピュータサイエンス教育の限界と開発文化における自己反省の必要性をユーモラスに提示している

CSCI 2100: オブジェクト指向プログラミングを忘れる

  • この科目は、オブジェクト階層構造に属さない変数と関数という概念を学ぶ講義
    • オブジェクト指向中心の思考から離れ、関数型プログラミングの柔軟性と単純さを探究する
    • 「関数(function)」を「メソッド(method)」よりも一般的で再利用可能な概念として紹介する
  • 履修条件は、「抽象基底クラス(abstract base class)」という用語を使ったことのある任意の授業
  • オブジェクト指向パラダイムへの過度な依存を解体し、プログラミングの本質的な思考を再構築することを目的とする

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

  • 歴史的に重要なソフトウェア製品を分析し議論する授業
    • 扱う例として、VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint などが含まれる
  • 焦点は、ユーザーインターフェース(UI)ハードウェア制約が創造性に与えた影響に置かれている
  • 過去の制約の中で生まれた革新を通じて、現代ソフトウェアデザインの根本原理をあらためて照らし出す

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

  • インタプリタ言語(Python など) でも高性能なコードを書く方法を扱う
    • 高水準で性能分析(performance analysis) を行い、C++水準の効率を達成する戦略を探る
  • コードの脆さの低減と開発の楽しさの維持を同時に目指す
  • 「遅い言語は遅い」という通念を打ち破り、言語設計と実行環境の最適化可能性を示す講義

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

  • コマンドラインベースのプログラムにおけるユーザー体験設計の原則を扱う入門科目
    • 出力の関連性、可読性、最小化を主要テーマとする
  • UNIXの**ls コマンド**を例に、過剰なオプションと複雑なインターフェースの問題を分析する
  • コマンドラインツールにも、グラフィカルUIと同様にユーザー中心設計が必要であることを強調する

PSYC 4410: プログラマーの執着心理

  • ソフトウェア開発者が陥りがちな非生産的な執着や強迫的思考パターンを探究する
    • 例: コード整形、分類体系(taxonomy)、型システム、過度なファイル分割 など
  • 見慣れないシステムに接したときに現れる反射的な批判反応(knee-jerk criticism) を心理学的に分析する
  • 開発者の認知バイアスと完璧主義的傾向を理解し、協業と創造性のバランスを模索する授業

全体的な文脈

  • この一覧は実際の講義計画ではなく、コンピュータサイエンス教育と開発文化に対する風刺的批判として構成されている
  • 各科目は、技術中心の思考の盲点を露わにし、開発者に思考の柔軟性と自己省察を促す
  • 2015年の投稿だが、今日でもなお有効な問題意識を含んでいる

1件のコメント

 
GN⁺ 2025-10-25
Hacker Newsの意見
  • CSCI 3300: Classical Software Studies
    Alan Kayが何十年にもわたって強調してきたのは、私たちがすでに70年代後半に確立された概念を繰り返し再発明しているという点である。
    芸術家が美術史を学ぶように、プログラマも計算機科学の歴史を学ぶべきだという彼の失望に共感する。

    • 私がRITに通っていたとき、「History of Computing」という選択科目があった。そろばんからメインフレーム、ネットワーキングまで扱っており、今でも講義ノートが残っている。
    • 芸術や哲学の歴史は何千年にも及ぶが、コンピューティングの歴史は一世代、長くても二、三世代ほどしかない。
      物理的なハードウェア性能に依存するコンピューティングを芸術と比較するのは無理があると思う。
      1970年の問題解決の仕方が2025年にもそのまま当てはまると見るのは、現実を見落としている。
    • GitHubで「これはAnsibleと何が違うんですか?」という質問に、「Ansibleが何なのか初めて聞きました」という返答を見たことがある。
      世代ごとに自分が初めて発見したと勘違いする再発見の反復が興味深い。
    • 創業者たちと働いていると、すでに存在する概念を新しく作ったもののように見せることがよくある。
      過去の問題と解決策を学ぶことは、決して時間の無駄ではない。
    • 大学時代に「オペレーティングシステムの歴史エッセイ」という課題があり、私はOS X(Snow Leopard)を選んだ。
      その過程を通じてUnixと商用ソフトウェアの進化を深く理解するようになり、Alan Kayの言葉に完全に共感するようになった。
  • CSCI 3240: Ignoring Hype
    最新のプラットフォームやライブラリの流行を無視する方法を学ぶ科目である。
    続いてCSCI 3120: Novelty Driven Developmentでは、逆に流行を追いかけながら興味を保つ方法を扱う。
    この2科目は同時に履修できない。
    そのほか、会議術(PSYC 4870)、組織的摩擦の受容(PSYC 5630)といった科目もあり、
    現実的な職場でのコミュニケーションと動機づけを扱う。

  • CSCI 4810: The Refusal Lab
    非倫理的な製品要求や締め切り圧力をシミュレーションし、それを専門職としての基準に従って拒否しなければ合格できない実験科目である。

    • CSCI 4812: The Career Labでは、同僚たちが非倫理的な要求を受け入れて去った後、残された仕事を処理する現実を扱う。
    • 実際、多くの学位課程には倫理関連の授業が含まれている。
    • しかし大学は結局のところ、卒業生の就職可能性を優先する。
  • デバッグ科目の提案
    バグの根本原因を見つけ、さまざまなツールを活用する方法を学ぶ科目があればよいと思う。

    • 化学実験のように、学生にバグだらけのレガシーコードベースを渡し、すべてのテストを通せば授業終了という形がよい。
    • 他人のコードを読み、既存の構造(Chesterton’s fence)をむやみに壊さない方法もあわせて学ぶべきである。
    • 多くのシニアエンジニアでさえ、いまだにprintでデバッグしている。
      インタラクティブデバッグの救世主について語る時間が必要だ。
  • CSCI 0001: Functional programming and type theory
    学界の難解な用語や数式が、関数型プログラミングの普及を妨げてきた。
    いまこそ、なぜモナドが endofunctor の category における monoid なのかを自分で学ぶ番である。

    • 純粋関数はcontext windowの中でも非常に自然に動作する。
  • CSCI 4020: Writing Fast Code in Slow Languages
    遅い言語(VB、Rubyなど)でアルゴリズム複雑性を教え、RubyのO(N)がC++のO(N²)に勝ちうることを示す科目である。

    • 子どものころに読んだ本で、FORTRANのbubble sortとBASICのquicksortを比較していたのだが、
      BASICが意外にも速い結果を見せて驚いた記憶がある。
    • Pythonのループをnumpyのベクトル演算、tensorflowの演算に変換し、その速度差を測る実習をしたことがある。
      PythonがAIで有用な理由を実感できた。
    • 毎日Pythonを使うエンジニアたちが、なぜコードが遅いのかを理解できるようになれば本当に素晴らしいと思う。
    • アルゴリズム複雑性よりも、ハードウェア活用のほうが大きな差を生むことが多い。
      線形メモリ上のベクトル化コードは、ヒープ上に散在したデータよりはるかに速い。
    • 参考図書: Visual Basic Algorithms Ready-to-Run
  • 過去シリーズのまとめ
    “Computer science courses that don't exist, but should”シリーズは、
    2015年版 (247 comments)
    2017年版
    2018年版などへと続いている。

  • 大学時代に受けたSoftware Archaeologyの授業を思い出す。
    1970年代のコンパイラ演習問題を再実装する授業だったが、
    当時は役に立たないと感じたものの、後になってシステム設計の理解に大いに役立った。

    • 実際、デジタル探偵作業は大規模コードベースにおいて非常に重要である。
      古いバグ、Wiki、バージョン履歴、チームの履歴などを追跡する能力が不可欠だ。
  • 今日では多くの計算機科学プログラムが、事実上コーディング職業学校のようになっている。
    学生たちはフレームワークは使えても、言語設計の哲学やシステムの進化を理解していない。
    コンピューティングは実装だけでなく、思想とアイデアの学問でもあることを忘れてはならない。

    • ただし一部の大規模州立大学では、いまだに25年前とほぼ同じ中核科目構成を維持している。
      認証基準のため、カリキュラムを大きく逸脱するのは難しい。
  • CSCI 3210: Modern text encoding and processing
    UnicodeとUTF-8を学び、「1文字 = 1バイト」という概念を捨てる授業である。
    エンコーディングだけでなく、検索、ソート、フォントレンダリング、絵文字処理まで扱う。
    基本的ではあるが、きちんと理解している人は少ない。