知识传播与社区讨论 : 兜售狗皮膏药的"软件先知"
最近这次讨论中, 有些人站在了同一个阵营, 但是希望读者能自己鉴别他们的区别: 实践传播者, 和单纯的传播者.
前者, 无论他传播的理念是否绝对正确, 都会给软件社区带来很多好处. 就如我上面所说. 这些实践者的帖子不是没有有问题的地方, 随着讨论和他自己的实践, 大家和他自己都会一点一点进步. 所以无论是否认同他们的观点, 我都愿意看他们的帖子. McConnell就说过, 尝试过的方法向其它实践者的传播, 对于推动软件开发的实践水平有重要作用.
但是后者不同. 单纯的传播者的一些帖子, 就像很多实践者所表示的(虽然很显然他们不可能在争论中击败传播者), 我个人也认为只有"可笑"能够形容. 这种可笑还表现在: 传播者本人还很委屈的认为, 别人听不进去他们在说什么. 而其实质原因是因为后者说的那些, 往往前者早就思考过, 甚至真正实践过过了, 最后获得了一些负面的结果. 毕竟实践者不可能拒绝提高自身生产力的东西, 这是他们的饭碗啊.
但是作为讨论中找碴者, 传播者比实践者有一个先天的优势, 即传播者往往有更多的时间而且也具备更好的能力去查资料找例子, 找寻有利于他们的说法, 然后继续辩论. 换句话说, 传播者找碴的能力在客观上比对方强. 而对于有很多实践经验的编程者, 让他产生想法的项目或者问题本身涉及的方方面面, 由于内容太多, 也因为其它原因, 不太可能把这些东西作为找传播者的茬的素材, 一一列出.
即使说作为一个找茬者吧, 说实话很多传播者也不够格. 比如一些01年就开始讨论的东西, 某些传播者根本就不知道. 不知道你好歹了解一下吧, 甚至对方给出了链接, 有些人也不去好好看看. 那么如果实践量不够, 阅读量也不够, 仅凭传播者自己知道的那些东西, 也就只能在传播者的认知范围内是绝对正确的. 这就好比一个人说牛顿的万有引力是正确的, 如何如何正确, 绝对有道理, 但是从爱因斯坦的相对论来看, 其实有很多谬误. 人家没时间或者没有表述能力给这个人讲解相对论, 这个人自己还不去看.
这里讨论一下一个普通程序员或者有实践经验的设计者, 与单纯传播者相比, 对于各种概念和方法在话语权重上的问题, 我个人平时的做法也是给了不同的角色不同的权重, 从而更清晰的分辨是非. 换句话说, 一个实践传播者(博客园上很多啦)和一个单纯传播者, 说同样的东西时, 我会更在意前者所说的; 而且往往前者所言也不仅仅是阳春白雪, 还有更多的内容是后者提供不了的. 同时, 这个问题是区分不同的传播者的根本性原因.
大多数实践者因为项目紧任务急, 对一些新的理论知识, 词汇, 没有时间掌握熟练, 再加上没有思归那样良好的环境, 不能很正规的将自己的思考系统化, 规范化, 其中最大的特点就是, 不能通过语言非常好的表述. 因此对于讨论, 大多数人也没有时间针对一些说法, 进行详细的分析和证明, 这就造成了所谓的茶壶里煮饺子, 倒不出来.
不过倒不出来不代表人家就没有真家伙. 我这几天在博客园上看见过的最可笑的话莫过于此: 比如程序员没时间思考, 比如真正熟练的程序员会存在很多需要重新培训加深印象的概念问题. 每一个概念问题都会让一个程序员在日后痛苦不堪, 当他经过长期的实践成为一个熟练者之后, 哪怕对概念的表述不那么正规, 但绝不会比一个一般的培训者差, 恰恰相反, 理解还会更深入.
在我看来, 考虑不考虑只跟个人意愿有关. 针对这些舆论说说我自己的生活, 做个参考: 我一个月写出过1万5千行代码(无生成), 也半年写出过1万5千行代码, 就我的经验来说, 无论是一个月还是半年, 花时间最多的都是思考. 一个月的项目和半年的项目的差别, 完全是因为根本复杂性导致的需要的思考量不同. 即使我每天坐在计算机前面不超过8小时, 我每天睡觉8小时, 另外8个小时(包括吃饭上厕所) + 坐在计算机前面的琢磨的时间4个小时 - 刨除各种不确定的走神2个小时(上了博客园以后就大大增加, 这贴完了我可能会偃旗息鼓一段时间), 每天至少需要思考10小时.
说实话, 我本来不打算跟针对一些人说这么无聊的问题, 也不想证明谁比谁强, 而且我知道每个人即便在网上也有面子, 既然注册了, 得罪人的事就该少做. 不过我请某些人扪心自问, 你每天思考的时间是否能在我之上? 我也请你平心静气的想想, 我也好, 其它程序员也好, 智力水平/性格因素/教育背景, 导致某个人的思考能力和学习能力不如另外一个人的可能性有多高? 还是大家都是普通人, 能力基本相仿?
也许我和一般人比可能算思考的多的, 但即使没有我这么大热情的那些人, 仅仅由于工作需要, 思考也不会比我少到哪儿去. 而且这些从事实际工作的程序员, 往往想的东西更贴近要害. 对我来说, 一个很深刻的体会是, 想的挺好, 一到具体实现时, 总能发现这样那样的需要修正的结果. 需要说明的是, 我并非一个生存压力很大的人, 所以我说需要修正, 往往不是对现实的妥协, 而是同时兼顾解决问题和完美化两个目标. 即使暂时为了实现, 做了一个垃圾的设计, 也属于抛弃原型, 相反这个过程对我的思考会提供更多的原料. 我想博客园上敢于参与讨论的真正的程序员, 都会对我说的感受有所了解.
那么请问某些人, 再算上实践对思考结果的反馈和修正呢? 在这样的情况下, 别人比你认识深的概率大, 还是比你认识浅的概率大?
如果有人问那为什么还有针对在职程序员的培训, 其实这些培训不代表培训者能给程序员带来什么提高, 而仅是帮助程序员熟悉一下平时没有时间熟悉的概念, 这发挥的基本是一个信息收集者对第一线人员的服务作用, 至于掌握和理解, 全靠程序员自己. 甚至拿Martin这个水平说也是这样: 他所讲的东西无论是方法还是概念, 他一定不是掌握的特别好的那一部分人; 他的特色是具有最精通的人所不具有的其它能力. 而一个程序员呢, 超大型项目的代码一般1500行/人年, 他们除了在自己工作所涉及到的知识上学习和思考,还能在干嘛? 练打字玩?
正是因为如此, 我才觉得, 我不得不就这个讨论问题, 针对一些传播者说点看法; 因为如果这样在讨论中凌驾于那些每天都在进行的实践/思考/阅读的程序员之上的单纯传播者越多, 对于初学者的影响就会越坏, 而初学者未来也要进入行业, 成为生产力和我们的伙伴. 这种趋势很可能造成, 如某人所说, "会不会哪天我们凑上去做外包人家都不一定敢要"了, 只是原因不是我们程序员不明白什么, 而是我们象那些单纯传播者一样, 明白的太好了.
就如我过去提到的msolap2所说的, 也如RicCC表达的, 无论对哪个级别的程序员, 意识和真正的实践必须配合起来, 对于初学者, 被很多人这一堆云山雾罩, 本来他们就没经验, 可能反而走了歪路. 这也是我为什么不赞成初学者去参与类似Javaeye上讨论的原因. Javaeye上这几年, 很多讨论中歪的邪的都不少, 即使达成了某种共识, 经常半年后又被另一种共识推翻了, 初学者怎么把握这些?
至于单纯传播者们, 如果真的有志于传道授业解惑, 我有两点建议: 从一般的网络讨论上来讲, 不如去把博客园/Javaeye/其它社区上的老帖子翻翻, 搞清楚来龙去脉, 回来再争论也不迟; 从引用的理论的权威性上讲, 比如领域建模这块, 虽然我个人不喜欢Martin, 但不得不承认, 作为一个出色的传播者, 哪怕就统一讨论时的概念来说, 他的书也是绕不过去的. 如果在讨论过程中不先充实一下自己对这个问题的了解, 甚至讨论领域问题连Martin提出的一些概念都不知道, 在这样的情况下就开始宏图大论, 恐怕不是那么地道. 单纯传播者想要成功, 只有一条路, 通过借助别人的经验向实践传播者转换.
比如最近经常讨论的Book.Save问题, 某些传播者后来又叫苦连天说别人态度怎样, 再我看来简直就是"贼喊捉贼". 我没发现哪个兄弟说Book.Save就一定不行, 只是说这样它就不行了, 那样它就不行了. 并且有些实践者在时间和客观有限制的情况下, 详细说明了他们的看法不说, 甚至也给出了Javaeye上类似争论的例子(其实那些争论里前后翻翻就知道, 不是所有的观点都是有利于实践者这方的), 我也请某些传播者想想你们自己是怎么办的? 再我看来, 这本来是一个更有利于单纯传播者充实自身, 向实践传播者靠拢的良好学习过程(既然一些东西传播者在实践中没有碰到过, 在学习时没有阅读过).
可某些传播者呢, 对这些不是虚心探讨, 而是"看来你XX不懂", 或者"这里我可以XX实现, 明白了吗?", 你真当你说的那些东西, 全天下没几个人知道, 大伙都需要培训哪? 拜托这不是1998年好么, 人家总不能列出一个实践过的技能列表给你看, 先行封住你的嘴吧? 只是因为自己是一个传播者, 就不能把每个人先假设成自己的老师, 再行讨论么? 我倒是觉得, 传播者本身比其它人更需要学习才是. 如果一些人实在不放心对方水平, 那么你可以说"这里这么实现你看能不能解决?", 一切都不一样了. 考虑到实践者没必要成天琢磨表达的问题, 传播者在社区负责的职责本来就应该比其他人多, 争论走向不愉快, 到底是谁的错?
另外, 无论你是一个实践传播者还是一个单纯传播者, 也请注意一下Martin作为传播者中翘楚的表达方式: A可能在1情况下更适用, B可能在2情况下更适用, C到底如何, 还不知道结果, 仅仅作为一种介绍; 经验一来自于某个人, 经验二来自于某个人, 经验三来自于某个项目; 正是因为他这种风格和态度, 所以实际上虽然他说的话比写的代码多, 但仍然更接近于一个实践传播者, 而且成为了一个集大成的方法论宣传者; 即使如此, 因为他的实践相比同水平的人还是更少, 经常说错话, 还戴上了大嘴的高帽. 更成功和经典的作品, 如GoF的DP95, 比Martin还要严谨的多.
我这篇文章确实针对性强了些, 对一些臆测式的想法和不恭, 先表示一下歉意. 说个真心话, 对于任何让别人面红耳赤的行为, 我自己都感同身受, 不舒服. 不是说我没有在辩论中打击对手的欲望, 但我总能Clone出对方的感觉, 从而让自己更加不爽. 只是这种不爽, 对于我的发言带来好处的可能性, 也只能忍受了. 对这些人和社区我到底是好意, 还是恶意的想证明些什么, 比如按照我的说法做, 他们会更成功还是会失败, 讨论是能更好的进行还是相反, 那都自己心里掂量. 评论就暂时关闭了, 以后也不再就这个问题进行议论.
只是对于两种不同的传播者, 当我们作为读者时, 一定要谨慎的区分, 以防不慎进入误区; 当我们作为传播者时, 如果成天轻易的对这个下结论, 对那个下结论, McConnell对这种做法有一个贴切的形容, 叫做兜售狗皮膏药的"软件先知", 我们可以想想, 到最后我们是否能象Martin一样, 赢得一个传播者应有的声誉呢?