半年前,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 在这里。

from: http://mindhacks.cn/2009/03/09/first-principles-of-programming/

编程的首要原则(s)是什么?相关推荐

  1. 编程的首要原则是什么?

    编程的首要原则是什么? 学习一项知识 1. 它的本质是什么.2. 它的第一原则是什么.3. 它的知识结构是怎样的. 1. 未雨绸缪: 写代码时时刻设想你就是将来要来维护这坨代码的人.写API时时刻设想 ...

  2. 面向对象编程,设计原则,设计模式

    2019独角兽企业重金招聘Python工程师标准>>> 面向对象编程,设计原则,设计模式 面向对象编程 面向对象编程与面向过程编程的区别 面向对象软件开发的优点 面向对象编程语言 C ...

  3. 【Computer Organization笔记07】实验课:可编程逻辑器件介绍,硬件编程方法与原则,硬件编程流程

    本次笔记内容: P13 计算机组成原理(13) P14 计算机组成原理(14) 本节课对应幻灯片: 组成原理52 verilogHDL 组成原理53 fpgahardware 本节课内容为" ...

  4. 嵌入式编程规范与原则

    嵌入式编程原则和规范 编程规范 编程原则 编程思想 架构思想 IDA分层思想 函数编写原则 模板示例 编程规范 1.文件名尽可能以模块名命名,统一小写(根据个人风格调整).如led模块led.c.le ...

  5. 软件开发编程规范及原则

    推荐 分享一个大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:h ...

  6. (转)OOP(面向对象编程)的几大原则

    文章转载自:http://blog.csdn.net/anders_zhuo/article/details/8949566 设计模式遵循的一般原则: 1.开-闭原则(Open-Closed Prin ...

  7. NASA关于编程的十条原则

    https://www.rankred.com/nasa-coding-rules/ 原则1 – 简化控制流程(Simple Control Flow) 使用尽可能精简的控制流程构造编写程序 -- 不 ...

  8. NASA顶级程序员编程十大原则

    2019独角兽企业重金招聘Python工程师标准>>> 导读 引言: 你知道 NASA 顶级程序员如何编写关键任务代码么?为了确保代码更清楚.更安全.且更容易理解,NASA 的喷气推 ...

  9. 【设计原则】面向对象编程的六大原则

    参考文章: http://blog.csdn.net/wangjunkg/article/details/3762132   一.单一职责原则: 全称:"Single-Responsibil ...

最新文章

  1. Python基础03-运算符
  2. 【LINUX】Oracle数据库 linux磁盘头数据损坏修复
  3. java web转码_web/java实现多种格式视频上传、转码、截图、播放、下载等功能附源码(详细)...
  4. Android事件处理之多点触摸与手势识别
  5. 除了 Python ,这些语言写的机器学习项目也很牛
  6. k8s 手动恢复redis 集群_高工面试之:redis的几种集群方式你都熟悉吗?
  7. NBA Top Shot巨鲸17.5万美元购买的球星卡目前已值2000万美元
  8. 一条长为L的绳子,一面靠墙,另外三边组成矩形,问此矩形最大面积能是多少?...
  9. LCA在线算法ST算法
  10. c语言程序报告的前言,C语言 程序代码编写规范前言
  11. php 7.x memcache.dll nts,vc15等下载
  12. python物性库能调用哪些物质_Python 调用 CoolProp 计算介质的物性
  13. 【悟空云课堂】第七期:不安全的反射漏洞(CWE-470: Use of Externally-Controlled Input to Select Classes or Code)
  14. python online json editor_python+django常用富文本插件使用配置(ckeditor,kindeditor)
  15. Day021 - HTML基础
  16. CRM一站式管理,助力健身会所C位出道!
  17. 团队协作工具--worktile
  18. 在Ubuntu KyLin 16.04上安装g2o
  19. 如何选择合适的渗压计?
  20. python查看显存占用情况以及使用numba.cuda释放显存

热门文章

  1. 马云:新型企业想要保持创新力 规模要在60人以内
  2. python 读写utf8文件_Python关于 文件读写的总结
  3. 转载:谢谢原作者:块设备驱动实战基础篇三 (BIO请求回调机制)
  4. Apache Kafka-AckMode最佳实践
  5. 实战SSM_O2O商铺_28【商品】商品添加之Dao层的实现
  6. Spring-属性文件自身的引用03
  7. C++五子棋(六)——游戏结束
  8. android开发计算器微积分,不到1M的良心之作!连微积分都能算的计算器APP_TOM科技...
  9. android系统的手机目录
  10. 基于python的移动物体检测_感兴趣区域的移动物体检测,框出移动物体的轮廓 (固定摄像头, opencv-python)...