2020荐书:软件设计的哲学

2020年必读书籍推荐:软件设计的哲学(A Philosophy of Software Design),本书190多页,豆瓣的点评分在9分以上,目前只有英文版本,中文版还未上市,英文好的同学建议去直接阅读原版。

内容简介

书中讨论了软件设计的主题:如何将复杂的软件系统分解成可以相对独立实现的模块(如类和方法)。这本书首先介绍了软件设计的基本问题,即管理复杂性。然后讨论了如何处理软件设计过程的哲学问题,并提出了在软件设计过程中应用的一系列设计原则。该书还介绍了一系列标识设计问题的危险提示。你可以应用本书中的思想来最小化大型软件系统的复杂性,这样你就可以更快地编写软件。

作者简介

John Ousterhout是斯坦福大学计算机科学教授。他目前的研究重点是新的软件堆栈层,以允许数据中心应用程序利用具有微秒级延迟的通信和存储技术。Ousterhout之前曾在工业界工作过14年,他在那里创建了两家公司(Scriptics和Electric Cloud),之前在加州大学伯克利分校(uc Berkeley)担任了14年的计算机科学教授。他是Tcl脚本语言的创建者,并以在分布式操作系统和存储系统中的工作而闻名。Ousterhout获得了耶鲁大学物理学学士学位和卡内基梅隆大学计算机科学博士学位。他是美国国家工程院院士,曾获多个奖项,包括ACM软件系统奖、ACM Grace Murray Hopper奖、美国国家科学基金会主席青年研究员奖和加州大学伯克利分校杰出教学奖。

培养优秀的程序员的课程

软件设计的课程:https://platformlab.stanford.edu/Seminar%20Talks/retreat-2017/John%20Ousterhout.pdf

原文地址:https://www.cnblogs.com/peida/p/APhilosophyofSoftwareDesign.html

时间: 2024-10-07 08:13:31

2020荐书:软件设计的哲学的相关文章

软件设计的哲学:前言

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

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

目录 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 模块化设计 在模块化设计中,软件系统被分解成一系列相对独立的模块.模块可以采用多种形式,例如类.子系统或服务.在理想的情况下,每个模块都完全独立于其他模块:开发人员可以在任何模块中工作,

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

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

软件设计的哲学:第十一章 两次设计

目录 设计软件是困难的,所以你对如何构建一个模块或系统的最初想法不太可能产生最好的设计.如果您为每个主要的设计决策考虑多个选项,您将得到一个更好的结果:设计两次. 假设您正在为GUI文本编辑器设计管理文件文本的类.第一步是定义类将呈现给编辑器其余部分的接口:与其选择第一个出现在脑海中的想法,不如考虑几种可能性.一种选择是面向行的接口,它具有插入.修改和删除整行文本的操作.另一个选项是基于单个字符插入和删除的接口.第三种选择是面向字符串的接口,它可以跨行操作任意范围的字符.你不需要确定每种选择的每

软件设计的哲学:增加复杂度的12中危险信号

软件系统的设计和开发过程中,增加系统复杂性的12中危险信号: 危险信号1:浅层模块 浅层模块的接口相对于它提供的功能来说是复杂的.浅层模块在与复杂性的斗争中帮助不大,因为它们提供的好处(不需要了解它们内部如何工作)被学习和使用它们的接口的成本所抵消.小模块往往是浅层的. 危险信号2:信息泄漏 当在多个地方使用相同的知识时,例如两个不同的类都理解特定类型文件的格式,就会发生信息泄漏. 危险信号3:时间分解 在时间分解中,执行顺序反映在代码结构中:在不同时间发生的操作位于不同的方法或类中.如果在不同

软件设计的思想与哲学

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

Autodesk AutoCAD Electrical 2020 Win64 1DVD 3D设计软件

WinCan VX 1.2018.4.1污水管网故障检测分析软件 GeoStru RSL-III 2019.20.5.541 repack 1CD地震响应水平评估 NI Data Management Software Suite 2018 SP1 1DVD数据管理软件套件 Snopsys PrimeTime StandAlone tool vP-2019.03 Linux 1DVD静态时序分析软件 Zuken.CR5000.Board.Designer System.Designer.v12.

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

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