正确才是硬道理?No,KISS!

简介:         最近,看了微软亚洲研究院研究员刘未鹏老师的文章《编程的首要原则》(http://mindhacks.cn/2009/03/09/first-principles-of-programming/),感觉那些答案都蛮有意思的。
        最近,看了微软亚洲研究院研究员刘未鹏老师的文章《编程的首要原则》( http://mindhacks.cn/2009/03/09/first-principles-of-programming/ ),感觉那些答案都蛮有意思的。作为一个准程序员,我也想说两句。

 

        在这篇文章中,作者就“你们认为编程的首要原则是什么?”与网友展开了讨论,共给出了5种答案,包括:获得最多认同的答案;获得第二认同的答案;一些众所不一定周知的答案;一些众所很可能周知的答案和最幽默的答案。其中,“KISS(Keep It Simple Stupid)有意思的,它要求程序要尽量简单,越简单越好。

 

        在有关程序设计语言(像《C程序设计》)和算法(像《算法设计与分析》)这类书上,前辈们总结了好的算法或程序需要具备的几个特性,有:正确性、简明性、效率和最优性,而正确性是排在最前面的。因此,不管怎样,我觉得,“编程的首要原则”是要确保程序的正确性,非简单性。

 

       作为菜鸟级程序员,我们不可能有多么高超的编程技巧,这时首要的就是要保证自己编出来的程序是正确的,要让人能够看懂。在水平有所提升以后,除了正确性之外,再考虑其它方面的东西,像简单或最优等。

 

        大家都经历过很多考试,在考试之前,我们都会接触到很多解题的技巧,都会用好几种方法来解答一道题目。但上了考场之后,才发现时间根本不够用(特别简单的考试除外),做完题都难,还不要说用技巧了,这时就要首先确保正确性,要保证高的正确率。编程也一样,每个人的任务都很多,时间也比较的紧迫,有时能够编出来都难,更不要说要让程序简单、优化了。

 

        因此,正确性才是编程的首要原则!



---------------------------------------------------------------------------------------------

        2015年4月2日修改:

        最近重读了这篇三年多之前写的文章,似乎明白了为什么很多软件产品越做越差,最终走向了“万劫不复的深渊”。因为很多人编写程序的想法和我当时的想法一样:先保证程序正确、功能正常,其它的以后再说。

        在我参与过的软件开发项目中,有些时候,版本的开发时间非常的紧。在最初的会议上,开发经理就明确要求优先保证功能的实现,其它的留待以后优化。而当软件版本发布之后,就再也没有人提程序优化的事情了。下次有新需求的时候,大家才会发现上一个版本的程序写得是多么的糟糕。但没有人想到要先对程序进行优化甚至重构之后再实现新的需求,而是“破罐子破摔”,继续在低质量的代码上编写低质量的代码。如此一个恶性循环,最后的程序是千疮百孔,已无力回天。

        那为什么要提倡“KISS”(Keep It Simple Stupid)呢?“KISS”意味着程序有以下特征:

        1) 排版工整、变量命名规范、注释得当。

        2) 逻辑清晰、接口定义清楚、函数封装得体。

        3) 可扩展性强、便于维护。

       “KISS”同时也是实现程序“正确性”的最佳途径,因为简单意味着无错,或者是即使有错误也能够被及早发现。遵循“KISS”原则,那么设计程序时采用的便是最简单直接的方法,逻辑清晰,不管是对于作者本人,还是对程序进行评审的人而言,都能够迅速理解程序实现的功能,bug很难生存。 

       如何检验一套程序是否是好的程序?我认为,如果一个新手能够很快将程序看懂并理清程序的逻辑,那么这个程序就是好程序。

        “第一次就将事情做好”,每个开发人员都应该将这句话牢记心中。Duang,说起来容易,做起来难。确实,大家在实践中去学习吧。


目录
相关文章
|
域名解析 监控 JavaScript
宝塔面板pm2管理器部署node.js(express框架)sever文件,可以使用域名访问你的后端项目
宝塔面板pm2管理器部署node.js(express框架)sever文件,可以使用域名访问你的后端项目
1465 0
|
消息中间件 存储 缓存
Spring Cloud 分布式实时日志分析采集三种方案~
Spring Cloud 分布式实时日志分析采集三种方案~
Spring Cloud 分布式实时日志分析采集三种方案~
|
存储 JavaScript 测试技术
rpmdb损坏的修复方法
yum强制终止后,提示rpmdb损坏 error: cannot open providename index using db3 - bad file descriptor
9372 0
|
7月前
|
人工智能 自然语言处理 API
Cline:29.7K Star!一文详解VSCode最强开源AI编程搭子:一键生成代码+自动跑终端+操控浏览器...
Cline 是一款集成于 VSCode 的 AI 编程助手,支持多语言模型,实时检查语法错误,帮助开发者提高编程效率。通过智能化手段,Cline 可以生成代码、执行终端命令、调试 Web 应用,并扩展更多功能。
2446 73
|
前端开发 JavaScript 开发工具
前端开发最佳实践与工具推荐
【7月更文挑战第22天】前端开发是一个充满挑战和机遇的领域,掌握最佳实践和高效工具是提升开发效率、保证项目质量的关键。通过遵循版本控制、构建和部署、编写高质量代码、性能优化和安全性等最佳实践,并结合代码编辑工具、版本控制工具、包管理工具、构建工具、调试工具等实用工具,我们可以更好地完成前端开发任务,提升个人和团队的竞争力。
|
搜索推荐 物联网 Linux
鸿蒙OS Next与安卓系统的比较
【6月更文挑战第2天】鸿蒙OS Next与安卓系统的比较
1818 3
|
11月前
|
消息中间件 NoSQL Java
订单出现超时未关闭场景解决方案
订单出现超时未关闭场景解决方案
504 5
|
存储 网络协议 API
HTTPDNS-ios 接入指南|学习笔记
快速学习 HTTPDNS-ios 接入指南
778 0
HTTPDNS-ios  接入指南|学习笔记
|
SQL Kubernetes 安全
国产数据库-技术特性-CloudberryDB
Cloudberrydb基于gpdb,支持PG14内核,有很多GP目前不支持的优秀特性
717 0
|
JavaScript 网络安全 Windows
Nvm的安装及使用(Nodejs版本管理器)
一个电脑,多个版本的nodejs共存。 - 超级详细全面的nodejs版本管理工具NVM的下载安装及使用。 - nvm list 有哪些 - nvm install < version > 下载 - nvm uninstall < version > 卸载 - nvm use < version > 用哪个
700 0
Nvm的安装及使用(Nodejs版本管理器)