不要追求最新的技术
有人说微软的技术更新快,有人说快才爽。但是我觉得问题并不在这里,如果一个技术是你的主力技术,你当然希望它更新快点好,因为技术就是工具,高效的工具帮助你节省时间。
但是很多新技术并不能帮你节省空间,反而浪费你学习的时间,最终效果让你非常不满意。
说那么多,不管技术更新快还是慢,关键还是看你是否适用,是一个如何取舍的问题。
为什么不追求所谓新的技术,在于新技术未必适合你。我认为一个技术是否适合你,首先要看你需要怎样的技术,并不是所有技术对你都有帮助,有些技术对你根本无用。
要记住,做什么都有选择成本,你花精力进去这里,自然就会减少另外一个地方的精力,总精力是有限的。
要怎样的新技术才算理想,我认为是能够最大化的保证你以往技能的技术,如果一个新技术出来,要完全否定你的旧技术,这等于做加法,又做减法,加上你花费的学习时间,最终效果未必如你所愿。
而事实上,大多新技术都要求你做减法,把你以往学到的东西抛弃掉,因此那些忙于追逐新技术的人,反而碌碌无为,只有功力扎实的,才能巩固技术更新中那些很少变化的东西,才能避免做减法的时候,把以往的东西都牺牲掉。
在学习新技术的时候,如果你发现你以往学到的东西都作废,那么你真的需要好好反省一下自己有没有必要去追逐新技术,因为以你学习的深度来说,很难积累有价值的东西。如果你发现更新技术后,以往大部分的东西都能保留,那么证明这个新技术还是比较适合你的。
这是自我选择的情况。
有些时候你被迫作出牺牲,放弃固有的知识,比如你要从windows转到linux,从c#转到java,这是工作需要,没办法。不建议你自己去经常转换,但是如果要真的转换,那就要好好衡量新技术是否“代表先进生产力发展的方向”。这个我称之为技术的更换,技术的革命。怎样可以称之为革命,在于设计思维的根本性转变,比如从面相过程转化到面向对象,从拉控件到mvvm之类的玩意。这些技术之间有一条鸿沟,结果是:这根本是两种技术,而不是一种新和旧的技术。不管新技术多么伟大,也无法完全战胜旧技术,因为旧的技术有自己适用的市场。就如c++无法代替c,java无法代替c++,用java的观点,c一无是处,但是用c的观点,c更加敏捷,轻巧。就如vb.net 包装如此完美,却无法战胜vb6,因为vb6有他自己的市场定位,反而vb.net放弃了这种定位,在vb6的用户看来不伦不类。
要做选择,当然是你希望往哪个方向去发展,而并不是对技术本身做宗教式的评判。没有最好的技术,只有适合你的技术。
在追逐新技术的时候,聪明人懂得取舍,不聪明的人就看什么新的出来就赶紧扔掉所学的一切扑过去学。微软不停地推出新技术,但是大多数技术都是革命性的,比如.net相对winapi,这么多年了,你看过几个.net的桌面程序?难道这就是希望看到的结果?当初你还不是以为.net一统江湖,很多时候我们会犯判断的错误,就在于对技术有着宗教式的信仰,而没有看到技术革命的代价,只要旧技术还有土壤,还有生存的必要,那么它就会一直兴旺,而所谓新的东西,未必如你所想活得那么潇洒。
我并不否定微软推出新技术,但是我极力反对微软去葬送那些旧技术,旧技术也要持续的推动,在旧技术思维的框架内做更新,就如不应该认为windows桌面要取代html,就把ie6 拖了几年不更新,这样代价是很大的。不能因为觉得.net一统江湖,就把c++凉在一边,幸好微软最近醒悟到,这些旧技术也有更新的必要,也还是有自己的市场存在。自从有了vb.net,微软就完全停止更新vb6,自从有了看上去很闪亮的这个模式,那个模式,就忘了拖控件一族。微软的毛病,在于它想去控制技术的发展,而不是让市场选择技术的发展,这导致自己眼光的短浅,导致了走弯路。因为毫无疑问,.net 是个完全失败的革命,微软一手包办的发展方向,并不适应市场的需要,虽然.net是个有价值的技术,但是也只是其中一种技术而已。现在,微软醒悟到自己的好大喜功,终于感觉到应该融合各种技术,而不是建立革命性的技术去取代旧技术,win8就是融合的最好典范。新一代vs2012加强了.net,也加强老掉牙的c++,虽然vb6还是没有复活,新c++融合了.net的很多思想,也更加重视html + js的组合,只有支持不同的技术相对独立,又相互融合的发展,才能建立一个保证程序员投资的可持续发展模式。