Tcl 和 Raft 发明人的软件设计哲学

John Ousterhout(斯坦福大学教授,Tcl 语言、Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A Philosophy of Software Design」。
首先,John 问了大家一个问题,什么是计算机科学里最重要的事情?下面有回答 Abstration 的,有回答 Complexities 的,有回答 Testing 的。他还问了 Donald Knuth(高德纳,程序员应该都认识吧),Kunth 说是 Layer of Abstration,而 John 的答案是 Problem Decomposition。

John 认为,很不可思议的是,在计算机科学的教育里面,没有任何课程是真正教学生软件设计的。所以他在斯坦福开设了一门课程,在这门课里,John 会教学生一些设计方法和原则,同时让学生做一个比较大的项目。然后 John 会 Review 学生的代码,上课讨论,从而让学生掌握软件设计的方法和原则。
John 提出了一个战术编程(Tactical Programming)和战略编程(Strategic Programming)的概念。战术编程就是没有太多设计,简单粗暴快速实现;战略编程则是需要做良好的设计,为长远考虑。

Original 章烨明 杏仁技术站

原文地址:https://www.cnblogs.com/doit8791/p/10049289.html

时间: 2024-08-27 18:37:55

Tcl 和 Raft 发明人的软件设计哲学的相关文章

2020荐书:软件设计的哲学

2020年必读书籍推荐:软件设计的哲学(A Philosophy of Software Design),本书190多页,豆瓣的点评分在9分以上,目前只有英文版本,中文版还未上市,英文好的同学建议去直接阅读原版. 内容简介 书中讨论了软件设计的主题:如何将复杂的软件系统分解成可以相对独立实现的模块(如类和方法).这本书首先介绍了软件设计的基本问题,即管理复杂性.然后讨论了如何处理软件设计过程的哲学问题,并提出了在软件设计过程中应用的一系列设计原则.该书还介绍了一系列标识设计问题的危险提示.你可以

软件设计的思想与哲学

以下是从比较经典的书籍中摘录了的几条跟软件设计相关的原则和思想,这些思想不仅可以帮助你在设计软件.编写代码时有用,而且正如Mike Gancarz的<Linux/Unix设计思想>的译者序的作者漆犇所说"如果用"武侠"来作一个类比,这本书就好像是一部教你修炼内功的秘笈,无论新手老手,修炼基本内功都是一件必须持之以恒甚至可以毕生研习的事情,而同时我们也要知道,有时候优秀程序员和普通程序员水平差距的关键也正在于此". 摘自Robbins和Beebe的<

软件设计的哲学:前言

01 前言 80多年来,人们一直在为计算机编写程序,但令人惊讶的是,关于如何设计这些程序或什么是好程序的讨论却少之又少.关于软件开发过程(如敏捷开发)和开发工具(如调试器.版本控制系统和测试覆盖工具),已经有了相当多的讨论.还广泛分析了编程技术,如面向对象编程和函数式编程,以及设计模式和算法.所有这些讨论都是有价值的,但是软件设计的核心问题在很大程度上仍然没有触及.David Parnas的经典论文“关于将系统分解成模块的标准”发表于1971年,但是在随后的45年里,软件设计的技术水平并没有超过

软件设计的哲学: 第十章 定义不存在错误

目录 10.1 异常增加复杂性的原因 10.2 例外情况太多 10.3 定义不存在的错误 10.4 示例:在Windows中删除文件 10.5 示例:Java子字符串方法 10.6 屏蔽异常 10.7 异常聚合 10.8 事故? 10.9 设计不存在的特殊情况 10.10 做过了头 10.11 结论 异常处理是软件系统中最糟糕的复杂性来源之一.处理特殊情况的代码天生就比处理正常情况的代码更难编写,而且开发人员经常在定义异常时没有考虑如何处理它们.本章讨论了异常对复杂性的不成比例的贡献,然后展示了

软件设计的哲学 第五章 隐藏信息

目录 5.1 信息隐藏 5.2 信息泄漏 5.3 时间分解 5.4示例:HTTP服务器 5.5 示例:类太多 5.6 示例:HTTP参数处理 5.7 示例:HTTP响应中的默认值 5.8 隐藏在类中的信息 5.9 不要过度隐藏 5.10 结论 第四章论述了模块的深度.本章以及随后的几章将讨论创建深度模块的技术. 5.1 信息隐藏 实现深度模块最重要的技术是信息隐藏.这种技术首先由David Parnas描述.基本思想是每个模块应该封装一些知识,这些知识表示设计决策.该知识嵌入到模块的实现中,但不

软件设计的哲学:第四章 深度封装模块

目录 4.1 模块化设计 4.2什么是接口? 4.3 抽象 4.4 深度模块 4.5浅模块 4.6 类拆分 4.7示例:Java和Unix I/O 4.8 结论 管理软件复杂性最重要的技术之一是系统设计,这样开发人员在任何时候都只需要面对总体复杂性的一小部分.这种方法称为模块化设计,本章介绍其基本原理. 4.1 模块化设计 在模块化设计中,软件系统被分解成一系列相对独立的模块.模块可以采用多种形式,例如类.子系统或服务.在理想的情况下,每个模块都完全独立于其他模块:开发人员可以在任何模块中工作,

zz从面向对象的设计模式看软件设计

原贴:https://coolshell.cn/articles/8961.html 前些天发了一篇<如此理解面向对象编程>的文章,然后引起了大家的热议.然后我在微博上说了一句--"那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来实现罢了--OO的设计模式思想和Unix的设计思想基本没什么差别",结果引来了一点点争议.所以,我写下这篇文章把我的观点说明一下.我希望这样可以让大家更容易地理解什么是设计模式.我顺便帮OO和 Unix/Linux搞搞基. 什么是模式

2015软件设计论点总结

这篇随笔将提出两个设计上的论点,其实这两个论点在之前的随笔中已经有提及,只是未明确指出. 提出这两论点,也希望软件设计思想的哲学有更进一步的发展. 一个项目,两种数据访问 软件架构设计中,使用持久化的话,一个项目通常需要两种数据访问机制,业务流程使用实体映射的数据访问机制,查询列表和报表使用传统原生数据库查询语句的数据访问机制. 设计模式,分为架构模式和业务模式 随着时代发展,进入互联网时代,软件系统日益庞大,程序员之间也开始出现分工合作,使用同一种程序语言的程序员也可能在技术方向上有很大的差异

2015年第10本:《简约之美,软件设计之道》

<简约之美>这本书是够简约的,100页,还有不少的留白处.现在的出版商流行<xxx之美>之风,看过了<数学之美>.<架构之美>.<数据之美>……好几本这样名字的书.这本书一开始好像在从哲学的角度来分析软件设计中什么才是最重要的,想把软件设计纳入科学的领域.书中新的内容不多,但有几个观点还是给我留下了深刻的印象,更多地是强调软件维护的重要性. “花更多的时间把程序写简单,相比一开始随意拼凑些代码再花大量的时间去理解,要快得多.” 所以需要不断地重构