没有前九条的第十条编程规则:Greenspun's tenth rule
2016-06-15 15:01
525 查看
1993年Philip Greenspun提出了编程第十条规则:
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
有意思的是,虽然名为“第十条”,但是并不存在相应的前9条,他本人是这么解释的:
Sorry, Han-Wen, but there aren’t 9 preceding laws. I was just trying to give the rule a memorable name.
计算机软件大牛Paul Graham也极力推崇Lisp语言。可见Lisp的确深受黑客的欢迎。如今的现实中,LISP思想常在,但是LISP语言却没有占据主流的编程环境。于是,又有人仿照这种规则格式,写出了如下规则:
Any sufficiently complicated C program contains an ad hoc, informally-specified, bug-ridden, slow, macro-based implementation of half of C++.
但是,显然C++并没有被大批黑客接受,不少大牛如Linus等就对C++嗤之以鼻,C++如今也是在走下坡路,所以有人对上述规则做了补充:
But this prevents people from using the other half of C++ by mistake which is much worse.
至于C++中哪些部分是值得C去模仿的,哪些部分又是让大部分黑客骂娘的,还需要自己在实际的项目中去体会。一般来说,
封装:把数据结构和操作数据的函数进行了绑定封装,这是C++最基本、最有用、最没有争议的功能;
继承:这个是OB和OO的主要不同,好像类继承并没有被广泛认为是普遍适用的;
多态:基于类继承和接口继承两种方式,接口继承更得人心;
函数重载:这种纯粹的语法糖,也是饱受争议;
模板:提供源码级别、编译时的多态,效率、安全性均好于运行时多态,然而其复杂的语法概念却让一般智商的程序员很难灵活自如使用。
标准库:C++标准库非常大,如今的C++11标准库里,连并行编程都囊括其中。STL设计精巧统一,囊括了常见数据结构和算法,然而过于统一的方式却让其API并不太友好,而且STL的模板本质带了调试困难、版本兼容等棘手问题。以至于很多大公司内部明文规定不允许使用STL。
匿名函数:也叫lamda表达式,这个功能非常好用,但是其实现也是用到了模板,所以也有模板的问题。
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
有意思的是,虽然名为“第十条”,但是并不存在相应的前9条,他本人是这么解释的:
Sorry, Han-Wen, but there aren’t 9 preceding laws. I was just trying to give the rule a memorable name.
计算机软件大牛Paul Graham也极力推崇Lisp语言。可见Lisp的确深受黑客的欢迎。如今的现实中,LISP思想常在,但是LISP语言却没有占据主流的编程环境。于是,又有人仿照这种规则格式,写出了如下规则:
Any sufficiently complicated C program contains an ad hoc, informally-specified, bug-ridden, slow, macro-based implementation of half of C++.
但是,显然C++并没有被大批黑客接受,不少大牛如Linus等就对C++嗤之以鼻,C++如今也是在走下坡路,所以有人对上述规则做了补充:
But this prevents people from using the other half of C++ by mistake which is much worse.
至于C++中哪些部分是值得C去模仿的,哪些部分又是让大部分黑客骂娘的,还需要自己在实际的项目中去体会。一般来说,
封装:把数据结构和操作数据的函数进行了绑定封装,这是C++最基本、最有用、最没有争议的功能;
继承:这个是OB和OO的主要不同,好像类继承并没有被广泛认为是普遍适用的;
多态:基于类继承和接口继承两种方式,接口继承更得人心;
函数重载:这种纯粹的语法糖,也是饱受争议;
模板:提供源码级别、编译时的多态,效率、安全性均好于运行时多态,然而其复杂的语法概念却让一般智商的程序员很难灵活自如使用。
标准库:C++标准库非常大,如今的C++11标准库里,连并行编程都囊括其中。STL设计精巧统一,囊括了常见数据结构和算法,然而过于统一的方式却让其API并不太友好,而且STL的模板本质带了调试困难、版本兼容等棘手问题。以至于很多大公司内部明文规定不允许使用STL。
匿名函数:也叫lamda表达式,这个功能非常好用,但是其实现也是用到了模板,所以也有模板的问题。
相关文章推荐
- java连接Access数据库
- eclipse项目!*图标含义
- mac jdk及gradle 配置Android studio
- yii2框架-i18n国际化(十二)
- sturts转换器
- Python os模块常用方法
- 蓝牙 AVDTP 剖析(一) --- 概述
- RFID射频卡超市购物结算系统问题记录--写入卡片时,后台php无法操作数据库
- 聚类算法之BIRCH(Java实现)转载
- C++—文件操作
- Thread Join()的用法--线程同步性
- 一个spring web的配置文件web.xml
- 实例解析Java中的synchronized关键字与线程安全问题
- Java源码打包成可运行JAR:Eclipse实现
- Matlab xml读写
- java 图片上传
- jenkins调整jdk版本不生效的解决办法
- C语言打印当前时间
- eclipse中10个最有用的快捷键
- windows下双击可运行的Java软件打包方案