其实老赵只是把大脑皮层最表面的某些“知识”给倾倒出来一些,我不知道这些内容给您感觉是什么,是不是会觉得很有“高度”。但是老赵觉得,这些东西看起来可能会“过瘾”,但是却毫无营养。其实所谓我们很多草根人士平时在谈论“系统架构”的时候,往往就是把各种产品,原理,实践进行组合拼接,其实说起来和看着市场上产品报价然后攒出一台电脑没有本质的区别。因此老赵现在看到这些东西已经不太感冒了,目前一直在设法研究从某个细节方面真正有效地提高“某个参数”,而不是从一个非常高屋建瓴的方面对整体提出一个所谓的“指导”。
不是每个人都有能力和条件成为邓爷爷那样伟大的改革开放总架构师的。
作为一个普通人,我们很容易对自己不太了解的东西产生一种崇敬之情。例如搞.NET编程的,往往会对“操作系统”,“线程调度”,“文件系统”,“汇编”等名词望眼欲穿,觉得那些才是真正有“技术含量”的东西。其实每个人的工作都是建立在另一批人的抽象之上,然后再这个抽象上产生更多的价值,如果因此对自己产生怀疑,硬要分个高低贵贱三六九等,这估计可以算作一种“妄自菲薄”。而“语言”作为我们技术人员每天都会接触的事物,似乎人人都会,人人都懂,谈了再多也只是一种“低级”的问题。如果还在专注,还在比较,那么“你也只能算是这点高度了”。
我们每个人从接受计算机教育的一开始似乎都会被告知一个正确的道理:“语言只是工具,重要的是能力与思想”。这句话本没有错,但是一句正确的话被强调过渡了可能也会成为一种错误。例如KISS原则的本意是要避免“过渡设计”,而老赵不止一次发现它已经被某些朋友用作“不设计”的理由。语言之余技术人员,就好比兵器之于武林人士。强调“能力”好比强调“武功内力”这不会有错,但是根据老赵多年阅读的没有上百也有数十本武侠小说中,的确没有发现武林人士对神兵利器的品评与追求体现出嗤之以鼻的态度。
很多朋友认为,高手是不会介意语言的选择,而语言也不会影响高手的能力。老赵并不同意这个看法。老赵同意“对于同样的工具来说,能力决定了生产力”,却不同意“有了能力,工具对于生产力的作用微不足道”。在TL上有朋友说了一句老赵认为非常有道理的话:有些武功也必须是有特定的兵器才能修炼的。如果只有汇编语言,那么大部分人都无法突破“子过程”这个抽象级别,更别说“面向对象”了。因为“语言”往往会对“设计”有巨大影响,所以Linus会炮轰C++,Anders Hejlsberg和James Gosling会对语言设计中是否应该有Checked Exception持不同意见。
看大师争论很过瘾,那些总不会是“低层次”的争论吧!
“图灵完备”已经从理论上保证了语言的能力“足够”表现出任何逻辑,但是世界上还是有各种各样的语言层出不穷,在一个又一个地方放出不同光辉。而由于一般的“通用语言”在表现某个特定问题的时候会显得比较“嘈杂(Noise)”,因此现在DSL的概念也愈发蓬勃了起来。老赵怀疑,高手的能力真能忽略语言的特性的不同,得到同样高度的生产力吗?如果真是这样的话,老赵现在所追求的“混合编程”的意义又在哪里?老赵不知道Martin Fowler为什么会说“People may say that Ruby is less noisy than Java, or that external DSLs are less noisy than internal DSLs”。不过我怀疑小李探花手持天机棍2后是否还能在兵器谱上排名第三。
诚然,高手超能力的作用无法被忽视,他们也可以用Java写出流畅的API(fluent interface),正如jMock在为Java平台带来了一股清新的空气。但是Moq使用C# 3.0中引入了Lambda表达式之后,从Rhino Mocks(与jMock的语法类似)手中抢走了大量的市场份额,迫使它也不得不使用Lambda表达式应战。同样,即使C#的扩展方法特性可以在一定程度上改进单元测试的语义,如果您把它和Scala实现的specs,或者F#实现的FsUnit相较“Behavior-Driven Development”,高下立判。今后老赵也会给出自己在混合编程上的探索,您一定可以更明显地发现不同语言在解决相同问题时产生的区别。
“语言只是工具,重要的是能力与思想”。这句话本没有错,但是如果把它作为“轻视语言”的理由,认为“语言”是低层次的东西,那只能说是一种误用了。
最后,老赵再稍微谈一下对另一个观点的看法:“一个好的程序员应该兼容并包,不该有门户之见”。老赵举双手双脚同意这个看法,这也是老赵推崇“混合编程”的原因。但是老赵认为这不代表不能“批评”一个语言,“兼容并包”讲究的是“各取所长”而并非是“各护其短”。老赵不搞“平衡论”,不代表老赵有“门户之见”,不是吗?
就用“门户之见”来结束这篇文章吧:有错误的是“重语言而轻其他”,或者仅从语言来说明事物(例如通过语言来说明程序员能力高低,项目好坏等等)。而研究语言,比较语言,思考语言,谈不上所谓层次浅,高度低——“层次”所指的是“怎么搞”,而不是“搞什么”。否则,不也是一种“门户之见”吗?