梦断代码 读后感(III)远虑和近忧

2024-03-23 21:20

本文主要是介绍梦断代码 读后感(III)远虑和近忧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

梦断代码 读后感(III)远虑和近忧

原文地址:http://yishan.cc/blogs/xin/archive/2008/11/18/iii.aspx

[part 3]

几个星期前,我给《现代软件工程》课的每一个团队都发了一本 《Dreaming In Code》的中文版 《梦断代码》,要求写读后感。这本书讲了这样的故事:一群很有经验的代码牛人在先进软件开发模式的指导下,没有资金压力,在更多大牛的带领下,原计划用一到两年的时间开发出一个备受期待的个人信息管理软件(PIM),后来花了七年时间才完成这一创举,但是已经无人喝彩。我是9月份读的英文版,后来又翻阅了中文版,也有一些感想如下。

Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software

Kapor 的团队看起来非常重视“远景”, 他们似乎没有近忧 - 这也许是致命的。

他们对于软件的基本架构/infrastructure 非常关心,例如对于存储系统,它们提出了下列需求:[p103]

  1. it has to make life easy for the Python programmers
  2. it has to operate efficiently over a network
  3. it needs to be able to handle very large individual date items and very large numbers of items
  4. it has to be reliable, using database "transactions."
  5. it has to support searching and indexing
  6. [0] User experience  //Kapor 后来加上去的,似乎不相干的一条远景。

后来对于Data Storage,又有如下构想:[p109]

  1. Provide programmers with as revolutionary a data model as users
  2. data can live anywhere.
  3. Data is safe from corruption.
  4. Data is quick to get.
  5. Data can be large.

非常令人佩服的远虑。 如果一个项目能同时实现其中3个目标,就已经能实用并吸引客户,开始赚钱了。 但是Chandler 项目的同志们不满足于只实现两三个,他们要实现全部5个梦想。

一群牛人在 “没有近忧,只有远虑” 的条件下讨论问题,最后只能议而不决。 在一次次延续到深夜的讨论中,有人感慨 - "How is this night different from all other nights?" //[p110]

没有近忧,或者说不用为近忧而负责 - “我们这个月的目标没完成不要紧,但是我们的远景一定要讨论好”。 导致了项目不能收敛 - 一个项目的一个里程碑中,不确定的事情应该越来越少,bug 也越来越少,直到产品发布。

Making firm technical choices was hard in the absence of a settled design, and settling on a design was hard in the absence of a technical roadmap. [p150 - 151]

正因为大家没有近忧,所以大家可以继续等待,设计要等技术决定后才好做,而技术的选择要等设计决定后才好开始。就这样,大家折腾到2005年的时候,他们才从高瞻远睹的远虑的云端中下来,有了第一个脚踏实地的计划:

But for the first time, at least, they could see they had a plan grounded in reality, rooted in estimates that ... [p232]

Kapor 毕竟是聪明人,很多年以后,他说到了教训:

We've consistently overinvested in infrastructure and design... [p342]

收敛的另一个特点是 - 做过了的决定,就要执行,不要反复。事实上,Chandler 团队在很多决定上摇摆不定。 架构师Hertzfeld 度假回来,发现他带领其他同事奋战一个夏天得到的 Document Architecture 被扔到一边,原来 Kapor 决定 “We'll have to come back and realign things”  [p168]。 如果你是做义务劳动的 Hertzfeld,你还能做下去么?

回到 “远景”, 我相信几乎没有合适的解决方案能满足“远景” 中的所有要求,很难找到 “多快好省” 的解决方案(书中提到 fast|cheap|good 不能兼得,这也是MSF 中 time | resource | feature 三个元素的矛盾)。但是往往存在若干方案,从不同的角度逼近最优,但是有各自令人讨厌的缺点。我们能否有智慧来选择这样一个方案,把近忧,远虑都慢慢解决?

我自己在微软正在做一个创新项目,前几天一位加入这个项目不久的优秀的开发人员对我说,我们去年设计的数据库问题太多了,如果我们早就像我这样设计,估计会好很多。我不是数据库的专家,我只能对他说,如果我们当时坚持要做到今天这样才发布,这个项目也许就做不到今天了。

换句话说,正是因为早期那些不完美,但是及时的设计,让后来者有挑剔这些不完美的奢侈机会。

我们每个人在使用这些不完美的软件(Windows, Outlook, 甚至Linux)的时候,都应该感谢当初设计者做出了正确决定,而那些坚持完美设计远景的项目,它们都到哪去了?

这篇关于梦断代码 读后感(III)远虑和近忧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/839553

相关文章

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

D4代码AC集

贪心问题解决的步骤: (局部贪心能导致全局贪心)    1.确定贪心策略    2.验证贪心策略是否正确 排队接水 #include<bits/stdc++.h>using namespace std;int main(){int w,n,a[32000];cin>>w>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+n+1);int i=1

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此,掌握生信编程技能,成为每一个生物信息学研究者的必备能力。 生信代码入门,旨在帮助初学者从零开始学习生物信息学中的编程基础。通过学习常用

husky 工具配置代码检查工作流:提交代码至仓库前做代码检查

提示:这篇博客以我前两篇博客作为先修知识,请大家先去看看我前两篇博客 博客指路:前端 ESlint 代码规范及修复代码规范错误-CSDN博客前端 Vue3 项目开发—— ESLint & prettier 配置代码风格-CSDN博客 husky 工具配置代码检查工作流的作用 在工作中,我们经常需要将写好的代码提交至代码仓库 但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的 所

Unity3D自带Mouse Look鼠标视角代码解析。

Unity3D自带Mouse Look鼠标视角代码解析。 代码块 代码块语法遵循标准markdown代码,例如: using UnityEngine;using System.Collections;/// MouseLook rotates the transform based on the mouse delta./// Minimum and Maximum values can