书呆子的复仇
- 软件业有场永不停息的战斗,书生气的开发者与官僚主义的经理之间总是发生冲突。
- 经理,《呆伯特》,a)对技术一无所知;b)对技术有强烈的个人观点。他要求你一定要使用某种语言进行开发。
- Lisp语言,1958年约翰.麦卡锡提出,他的学生史蒂夫.拉塞尔实现。
- Lisp语言的9个思想:
- 条件结构
- 函数也是一种数据类型
- 递归
- 变量的动态类型
- 垃圾回收机制
- 程序由表达式组成
- 符号类型
- 代码使用符号和常量组成的树形表示法
- 无论什么时候(读取器,编译器,运行期),整个语言都可以使用。
语言设计的思想逐渐在向Lisp靠拢
- 使用不常见的语言的三个问题:1.程序可能无法很好地和使用其他语言写的程序系统工作。这个问题取决于你能否控制整个系统。把软件运行在服务器端可没有估计地使用最先进的技术。随着软件从桌面端向服务器端转移,这种限制将越来越少。2.可能找不到很多函数库。函数库的重要性取决于你的应用程序。规模越大的项目,语言本身编程能力的强大,比是否有方便的函数库更重要。3.可能不容易雇到程序员。这个问题不存在,少于10个人的团队最适合开发软件。如果10个人都找不到,那是选错了成立软件公司的城市。
- 衡量语言的编程能力的最简单的方法可能就是看代码数量。(这不同于衡量程序员的编程能力)
- 经理不会考虑选择不当的编程语言而导致项目失败的可能性,他关心的是不承担失败的责任,对他而言最安全的做法就是跟随大多数人的选择,即“业界最佳实践”
- 2个重要结论:1.不同的语言的编程能力不一样。2. 大多数经理故意忽视第一点。
- 格林斯潘第十定律:任何C或Fortran程序复杂到一定程度之后,都会包含一个零食开发的,只有一半功能的、不完全符合规格的、到处是bug的、运行速度很慢的Common Lisp实现。
- 解决一个难题,若干个因素同时发挥作用:1. 使用一种强大的语言;2. 为这个难题写一个事实上的解释器; 3。你自己变成这个难题的人肉编译器。当我在自己的程序中发现用到了模式,我觉得这表明某个地方出错了。程序的形式应该仅仅反应它索要解决的问题。代码中其他任何外加的形式都是一个信号,(至少对我来说)表明我对问题的抽象还不够深,也经常提醒我,自己正在手工完成的事情,本应该写代码通过宏的扩展自动实现。