文章摘要
文章提出了几门现实中不存在但值得开设的计算机科学课程,包括:摆脱面向对象编程思维、研究经典软件的用户界面与创意、用慢语言写出高效代码、命令行工具的用户体验设计,以及探讨程序员常见的强迫症行为。这些课程旨在弥补传统计算机教育中的空白。
文章总结
那些本该存在却未开设的计算机科学课程
CSCI 2100:解构面向对象编程
探索如何创建和使用不依附于对象层级的变量。学习"函数"这一比方法更具普适性的工具。选课前提:任何提及"抽象基类"的课程。
CSCI 3300:经典软件研究
深入剖析具有历史意义的软件产品,包括VisiCalc电子表格、AppleWorks办公套件、Robot Odyssey游戏、Zork文字冒险和MacPaint绘图工具。重点研究硬件限制下催生的用户界面创意。
CSCI 4020:用慢语言写出快代码
通过高层次性能分析,编写性能媲美(甚至超越)典型C++代码的Python解释型程序,同时保持代码更强的健壮性和开发乐趣。
CSCI 2170:命令行工具用户体验
将UX设计原则引入课程项目中的命令行程序开发。聚焦输出内容的相关性、可读性与简洁性,以UNIX系统冗余的"ls"命令开关作为反面案例。
PSYC 4410:程序员心理执念研究
解析开发者常见的思维偏执:代码排版、分类学、类型系统、过度拆解项目文件等。包含对陌生系统条件反射式批判行为的专题研究。
(本文最初发表于2015年9月10日,2016年11月22日重新发布)
评论总结
以下是评论内容的总结,平衡呈现不同观点并保留关键引用:
1. 对传统软件开发的推崇
- 支持者认为古典软件研究(如BASIC编程)能锻炼创造力(评论1:"Go write a game in 64kb of RAM in BASIC")
- 历史课程应像艺术史一样被重视(评论6:"very few programmers are ever introduced to the history of computer science")
2. 对现有教育体系的批评
- 缺乏实用技术教学(评论5:"no course... spent any time on CI/CD")
- 课程应减少机器学习重复内容(评论3:"Not yet another machine learning set of lectures")
3. 关于OOP编程的争议
- 反对者认为需要"反OOP"课程(评论10:"Unlearning Object-Oriented Programming")
- 支持者指出Python等语言证明OOP价值(评论10:"everything is an object in python")
4. 实用技能课程需求
- 应增加调试课程(评论15:"how to dive deep into figuring out root cause")
- 命令行工具用户体验需改进(评论20:"class should study openssl")
5. 工程伦理与管理
- 需模拟处理不合理需求(评论11:"Simulate increasingly unethical product requests")
- 开发者常过度关注代码而非团队问题(评论18:"distraction from... people/team/process problems")
6. 学科定位争议
- 部分认为这些属于工程非科学(评论9:"the name of science will not be so besmirched")
- 承认实用性但非传统CS范畴(评论17:"Not really 'computer science' topics")
关键引用保留: - 评论1(英文):"write a game in 64kb of RAM in BASIC" - 评论6(英文):"disappointed we've been running in circles ever since" - 评论10(英文):"everything is an object in python" - 评论15(英文):"how to dive deep into figuring out root cause" - 评论18(英文):"distraction from... people/team/process problems"