您精通XXX吗?那么就来谈谈它的缺点吧
2010-05-06 15:31 by 老赵, 5693 visits“精通”这个词已经被用滥了,当年招人时收到过无数简历,继而发现,似乎简历上面不写几个“精通”还真对不起咱这张脸。那么到底啥叫精通呢?应该是对某样东西无比了解,不能再了解的程度吧——不过地球人都知道,简历上的“精通”已经算不得数了。那么,如果我们真要考察一个人(比如自己)对某件事情是否“精通”,又有什么合适方法呢?我觉得有个方式比较靠谱,那就是谈谈这东西的缺点。
不过咱先说点废话吧,比如谈谈耍流氓——呃,不,搞对象吧。比如您看上一个妞,面容姣好,身材窈窕,气质温文尔雅,不错挺好挺心动,那就上吧。吃过几顿饭,搞过几次活动,小手牵牵小腰搂搂,成了。您那心里乐得欢呀。不过日子长了,您会发现,咦怎么好象矛盾慢慢多起来了呢?比如每个月总有几天会让您觉得无理取闹,谈一些正经话题却也话不投机,性格好象也不是那么合拍……更关键的是您忽然发现对方不化妆的时候咋就看上去有些……异样涅?废话,人姑娘和您熟了而已。您自己追求人姑娘时会带人去听音乐会,送花送礼物,现在呢?您追求人姑娘时衣衫整洁装模作样,现在不还拉里邋遢的……对了,居然还抖腿!别走,说得就是你。
其实道理也都是一样的,任何东西在初期总是显得特别美好。比如您要搞一门技术,去书店找书看,哪本书不是说它优势的?又有多少书是在谈它缺点的呢?技术推广者或拥护者基本也只会不断地宣传技术的优点,否则谁会来跟进这门技术?因此,了解技术的优点很容易,但是想要知道它的缺点就困难了。如果一个人能谈论这门技术的缺点,并进行有效的分析,我更愿意相信他对这门技术是有深入研究的。而且在很多时候,对这门技术越是了解,那么发现的缺点也会更多,因为熟悉了呗。没有什么技术毫无缺陷,有缺点不是问题,关键是怎么去解决,如何去扬长避短。事实上,一个看不到OO缺点的人,真能算是了解面向对象,真能做出良好的设计吗?
更关键的是,想要了解一门技术的缺点并不容易,这需要更广阔的眼界。而且在这方面工具只能起到“辅助”作用,起关键性作用的还是人的态度。就好比推特,应该说是个打开眼界的好去处吧?我倒觉得……未必,还要看您怎么用。推特需要您去特意“追随”一些人,才能看到那些人的消息。笑来老师昨天谈到“有时候,真相比谣言更难传播的原因,主要在于人们只传播自己认同的东西。”因此,您看到的消息,其实很可能也是您“愿意”去看到的东西——您不想看的人,不想去关注的消息,您完全可以不去订阅嘛。就比方说,我就被一些人给Block了,这样他们看不到我说的任何东西——比如F#或.NET的优势是什么。他们不愿听,因此就能听不到。
比如,要了解.NET的缺点,把视野放在.NET社区是远远不够的。此时您要去关注其他社区里的人是怎么说的(通过订阅博客或是在推特上关注相关的技术人员)。例如在Java社区中,他们就会谈到Java目前的发展状况及优势是什么,甚至会直接谈到.NET的缺点。此时就是个更进一步了解和反思.NET自身的契机。对方的优势是否就是我的缺陷?我在对方眼中的问题,是否真的是我的短处?如果真是缺陷或短处的话,那么我又可以怎么去弥补?
不过问题在于,国内技术社区的眼界总体是封闭的,即便是所谓开放社区的群众也会盲目排斥微软技术,更别说大大方方承认自己的缺陷了。不久之前Oren Eini写了一篇文章,谈到“缺少编译期检查会不容易重构”,我在推上表示赞同。但就是这么一个普通的说法,还是有同学反驳我说“除非完全不需要(反射等)动态特性,不然编译检查靠不住”,因此编译期检查毫无意义。也有人说重构用正则替换即可,或是重构不易是因为代码写的不好,有Bad Smell的缘故——是不是偏激了点?似乎在某些技术人员的眼里,自己使用的技术不会有任何缺点,否则自己会随着技术本身而掉价——其实这又何苦,为什么不能大方的接受对方的优势,再想办法去弥补自己的缺陷呢?比如,不是有人说Ruby重构不方面吗?那么,您可以为它编写一个辅助工具嘛(而且又不是没有现成的)。
我一直很乐意承认对方的优势,例如我承认Rails框架——或者说工具集的生产力很高,有很多值得ASP.NET学习的地方,我在开发项目时也从中吸取了不少优势,也对我长进很大。我深刻体会到吸取别人长处是促进自己进步的有效方式。因此,在六月份举办的.NET技术会议上,我也打算请人来讲一场关于Rails的话题。同时,以后每次技术会议上,我都会邀请其他社区的高手来讲解相关技术,希望可以以此打开.NET社区技术人员的眼界。
好像有些偏题?嗯,就是这样。
又有沙发.先坐再看完.