上周我们的product刚刚release了一个新的version.看了change log.大概有一半都是砍feature,砍configuration option.
我们一直都是用XP开发,但是回过头来,我们的configuration的确太麻烦。我的新版本的installation guide从原来的10 page缩减成1 page。虽然颇有成就感,但是不时地要反省一下 一开始我们为什么要那么做。
归其原因不外乎
1。现在砍feature是因为customer的无知(我们不是真的customer, 是proxy customer 这个东西本事就是个自欺欺人的名词 更多的可看我的另一篇讨论 自欺欺人的proxy customer
)
2。现在砍configuration是因为developer误解了什么是The Simplest Thing That Could Possibly Work
.
那我们现在就来说说2吧,当初有这样一个requirement
Story 1: I want a module that can read all the property files in a particular location (file system). And return a Map<String, Properties>. The Key will be the file name, and the value will the properties in the file.
developer拿到之后,simple design吗,那我就设计一个 PropertyLoader 吧。于是就有了下面这个class
public Class PropertyLoader{
String[] files;
public Map<String, Properties> loadProperties(){
//....
// for each files, read the properties files content and put them to the map
// return ..
}
// setting injection the location of files
public void setPropertyFileLocations(String[] files){
...
}
}
这段代码够简单的了,也很明了,PropertyLoader 有一个setter 可以inject所需要load的configuration file. 如果我们用spring 这可以extract到一个configuration file里面,最后的结果是我们有一个configuration property
filesToBeLoad=c:/config/config1.properties, c:/config/config2.properties,c:/config/config3.properties
在intial 测试中都没有什么问题,我们顶多也就是有3-4个file要去load。 developer觉得简单,customer也满意。结果一旦deploy, 问题来了,1. 经常有人拼错文件名, 2. 大小写敏感(windows working, linux not working)。 而且随着业务量的增加,要load的file超过了10个。
当这个class最初设计的时候,我提出过auto load, 也就是说你给我一个directory, 我去读file system。 但是写code得人认为他们应该simple design, 所以就没有这么做。
经过这个小故事,我们应当反省一下什么是简单,简单(
The Simplest Thing That Could Possibly Work
)决不仅仅是你的code要简单,而是从整体
上而言,包括配置,UI, 使用 都要简单。 为了追求code简单而去牺牲配置的简单是不可取的。我虽然少写了10行code, 而配置文件多了容易出错的1行, 都是要不得的,去remove那多余的一行configuration的cost 要比你当初多稍微的“复杂化”以下你的code的cost多很多。
分享到:
相关推荐
电子课件-《自我管理》(第五单元第一课保持自我反省)-8.pptx
这篇文档主要涉及的是学生在课堂上违规使用手机被老师发现并受到惩戒后,学生写下的反省书。反省书中包含了以下几个关键知识点: 1. **自我反思与责任感**:学生认识到自己的错误,表达了对自己违反校规的悔恨和...
2. 自我反省与自我批评:作者能够深入分析成绩退步的原因,如粗心大意、不认真审题、阅读题目不仔细,以及对待学习的态度不端正等,并对自己的错误进行了深刻的反省。 3. 考试技巧与复习策略:检讨书中提到,学生...
在Windows XP操作系统中,微软提供了一个内置的软件卸载工具,名为"添加或删除程序"。这个功能在处理一些顽固的或者无法通过常规方法卸载的第三方软件时显得尤为重要。下面将详细介绍这个工具以及如何使用它来解决...
- **自我反省**:深刻认识到自身存在的问题,不仅仅是表面上的错误,还要挖掘背后的思想根源。 - **责任担当**:勇于承认错误,并愿意为此承担责任。 #### 2. 问题描述 - **具体化**:准确描述问题,避免含糊不清...
文章中的第一篇作文提到,在家庭和学校生活中,我们常常在犯错误后被责备,但真正进行深度反省的情况并不多见。反省不仅仅是对错误的承认,更是对自我行为的反思和对责任的认识。例如,与父母顶嘴可能被认为是不尊重...
这体现了反省对于个人成长的持久影响,不仅仅是解决眼前问题,更是塑造个人价值观和世界观的过程。 总的来说,这篇文章揭示了反省作为一种内在的力量,如何帮助个体更好地理解自我,理解他人,以及如何通过这种理解...
【自我批评与反省】 在个人成长和发展中,自我批评与反省是极其重要的环节。通过自我反思,我们可以识别自身的不足,从而有针对性地改进,提升自我。本文将深入探讨自我批评与反省的意义,以及如何进行有效的自我...
自我反省.exe
为什么越打折,顾客越少、越还价-该反省了!.doc
【中考语文满分作文“携反省一起上路”】是一篇以个人成长和自我提升为主题的作文。反省,作为文章的核心概念,被描绘成一种能够引导我们走向成功、和谐和自我完善的工具。作者通过反省来理解生活中的各种关系和经历...
【中考语文满分作文“反省”帖子ABC】是一个讨论反省这一主题的资料,通过不同历史故事和现实案例,展示了反省在个人成长和社会生活中的重要性。文章以一位初三毕业生周周的求助贴开场,引出“反省”的话题,随后...
工作反省.doc
他认为,人们的思维容易受到先入为主的观念影响,未经训练的思维可能产生错误或有害的信念。因此,教育应当引导学生对既有知识和信念进行深入反思,以发展他们的批判性思维和解决问题的能力。 在训练反省思维的态度...
在不断变化的IT行业中,我们需要不断地反省自己,以便适应新技术、新理念的涌现。正确认识自我,不仅包括理解自己的技术强项,也包括识别自身的不足,这样才能有针对性地提升个人技能,更好地应对工作中的挑战。 ...
2. 学习态度的调整:检讨书中提到,大学生容易在丰富多彩的校园生活中迷失自我,忽视了学习的初衷。这强调了保持明确学习目标和良好学习态度的重要性。 3. 时间管理:大学生应该学会合理安排时间,平衡学习与课外...
【标题】"初中语文文摘历史善于反省的第五伦"主要讲述的是东汉时期的廉吏第五伦的故事,他是如何通过自我反省保持公正无私的形象。第五伦的清廉和正直在当时得到了广泛的赞誉,被人们与西汉的贡禹相提并论。他的事迹...
1. 工作检讨书的重要性:工作检讨书是一种个人反思和改进的工具,当出现工作失误时,通过书写检讨书能够帮助员工深入分析错误原因,进行自我反省,从而避免类似错误再次发生。 2. 责任心的培养:检讨书中强调了责任...
反省自己的名言.doc