半年前,JoelOnSoftware和CodingHorror合搞的stackoverflow.com刚上线不久,我兴冲冲地跑过去扔了一个问题:
你们认为编程的首要原则是什么?
作为我的学习原则的一个实践:
8. 学习一项知识,必须问自己三个重要问题:1. 它的本质是什么。2. 它的第一原则是什么。3. 它的知识结构是怎样的。
5个月过去了,这个问题到现在还有人回复,我得到了一大堆有意思的答案,忍不住翻译过来与大家分享:
1. 获得最多认同的答案:
KISS - Keep It Simple Stupid
DRY - Don't Repeat Yourself
一点不感到意外吧?
注:DRY原则倒是比较好理解和实践的。但KISS原则则是看上去直白,其实实践起来不那么容易的一个原则,因为simple和stupid的定义并不是每个人、在每个场景下都是一致且明显的,一个人的simple可能是另一个人的stupid,一个人的stupid可能是另一个人的unnecessary。一旦一个标准取决于具体场景,事情就不那么简单了。所以我们经常要说“It depends”。
2. 获得第二认同的答案:
写代码时时刻设想你就是将来要来维护这坨代码的人。
在这个答案后面有人添加到:
最好设想你的代码会被一个挥着斧头的精神病来维护。
有人接着又YY道:
而且这个挥着斧头的精神病还知道你住在哪儿。 (( 事实上后面有人指出这是 Martin Golding 的一句名言 ))
注:其实这个原则在设计API时也有用:
写API时时刻设想你就是要去使用这坨API的人。
3. 一些众所不一定周知的答案:
先弄清你的问题是什么!
弄清问题永远是问题解决过程中的第一步和最重要的一步。
代码只是工具,不是手段。
不知道怎么最好地解决你手头的问题(注:需求、架构、算法,技术选型,etc..),写上一万坨代码也是浪费比特。
知道什么时候不该编码。
(类似条目:YAGNI——“你并不需要编写这坨代码!”,针对你的需求编码,“写你所需”,别做“聪明事”,为一个不确定的未来编码。同时也注意模块化设计,以便能在未来新增需求时无痛扩充系统)
永远不要假定你已经了解一切了!
不作没有证据的推论。
想清楚了再编写。类似条目:如果方案在你脑子里面或者纸上不能工作,写成代码还是不能工作。
4. 一些众所很可能周知的答案:
越懒越好。
过早优化是一切罪恶的根源。
不要重新发明轮子。
测试通过前说什么“它可以工作”都是纯扯淡。
了解你的工具。
一切以用户需求为导向。
利用分治、抽象,解开子问题之间的耦合。
5. 最幽默的答案:
咖啡进,代码出。(Coffee in, Code out) (( 参见 Garbage in, Garbage
out. ))
最后,整个问题的 thread 在这里。
分享到:
相关推荐
1. **原则1-1**:编程的首要目标是为了让人理解,而非机器。这意味着代码应当清晰简洁,便于其他开发者阅读和维护。 2. **原则1-2**:避免复杂的编程技巧,保持代码的简单和直观。虽然某些技巧可以使代码看起来...
在数控铣削编程中,安全措施是首要关注的。操作者需穿着符合安全标准的衣物,长发应盘起并佩戴安全帽,确保单人单机操作,专心听从教师指导,避免进行与实训无关的活动。理解并遵循这些规则能够保证在操作过程中的...
电子商务系统设计与分析涉及到多个方面的知识点,包括电子商务的定义、系统平台、生命周期、系统设计原则、网站目录结构、面向对象设计、动态网页编程技术、系统开发标准、UML建模语言、系统安全协议以及程序编写...
在设计PLC应用系统时,首要遵循的原则是满足控制需求,确保系统简洁、经济且易于操作,同时保证安全性和可靠性,并为未来可能的扩展预留空间。设计内容涵盖技术条件的拟定、传动形式和执行机构的选择、PLC型号的确定...
综上所述,三菱数控系统MELDAS 6060S系列MELDASMAGIC64程序说明书(L系列)是一个包含了编程、操作、安全和特定系统功能介绍的详细技术文档。熟练掌握本手册的内容,对安全高效地使用该数控系统至关重要。
总结来说,学习51单片机不应急于求成,应遵循逐步深入的原则,从理解硬件结构、掌握基本编程开始,逐步过渡到编写实际应用的程序。同时,了解不同单片机的特性,选择适合的开发工具,将有助于提高学习效率和成果。在...
首要原则是符合目标消费群体的消费行为习惯,确保陈列的位置、方式能引起他们的关注。同时,陈列的目标应是提升销量和品牌形象。这里引入了5P法则:位置(Positioning)、产品系列(Product Range)、区域化...
衡量系统开发质量的首要标准是满足用户需求,而非技术指标或其他设计者的个人要求。 结构化开发方法强调自顶向下的设计原则,这有助于系统分析和设计的逐步细化。UML(统一建模语言)是面向对象设计中的重要工具,...
结构化程序设计是编程中的另一项基本原则。这种设计遵循自顶向下和分而治之的策略,将复杂问题分解为多个简单的子问题。结构化设计的一个重要特征是模块化,每个模块都有独立的功能,模块间的接口应当简洁明了。此外...
在编程实践中,务必遵循这些指导原则,以防止潜在的问题。同时,可以查阅CFC Library的在线帮助或访问西门子服务网站获取更详细的信息,以确保最佳实践的执行。通过了解这些注意事项,可以有效地避免在使用CFC编程时...
网上订餐系统数据库设计是现代餐饮业为了提升竞争力和管理效率的重要工具。在这个系统中,数据库扮演着核心角色,它存储...关键词包括:网上订餐、订餐系统、订餐管理、数据库设计、B/S架构、Java编程、Oracle数据库。
计算机二级等级考试试题涵盖了许多IT基础知识,主要涉及编程语言、操作系统...以上内容详细解释了计算机二级等级考试中的部分知识点,涵盖了编程语言的语法、网络协议、数据库操作、软件开发原则和网页制作等多个领域。
2. 静态变量:fun() 函数中的 static int x=1 表示 x 是静态变量,其值在多次调用中会保留,因此程序运行后 s 的值为 4。 3. 最小事件集:所有类都可识别的最小事件集包括 Init、Destroy 和 Error 事件,这些是对象...
在这个项目中,需求分析是首要任务,包括收集和理解用户(学校相关部门)对系统功能的需求,如毕业生信息录入、就业状态追踪、统计分析等。此外,还需要考虑系统的易用性、可维护性和扩展性。 其次,开发技术方面,...
在设计原则方面,首要的是确保数据库能真实全面地反映出旅行代理的服务流程。这涉及到消费者认证后的服务提供,如旅行安排、保险、航班、住宿等,以及根据消费者需求进行的查询、安排和调整。其次,系统需要易于理解...
首先,算法设计的正确性是首要标准,确保算法能正确解决问题。其次,可读性至关重要,便于其他开发者理解和维护。健壮性是指算法对异常输入的处理能力,应能稳定运行不受错误数据的影响。效率和存储量需求是评价算法...
避免运行来自不可信来源的程序是首要原则。此外,保持操作系统和安全软件的最新状态也是至关重要的,因为这样可以确保用户的计算机对已知威胁有所防御。 除了网络安全,"让人关机的小程序"还涉及到计算机知识的其他...
在计算机科学领域,数据安全至关重要,尤其是在网络通信中,保护数据的隐私和完整性是首要任务。VC++(Visual C++)是一种广泛使用的编程环境,它允许开发者创建高性能的应用程序,包括用于数据加密和解密的程序。在...