缘起
那么,问题来了:“你到底有没有底线啊?!个个都认同,你到底是哪边的啊?!”所以,我今天打算好好的表述一下,自己对于“新技术”的看法。
不过,当初在《Ajax新手快车道》的序言里的一段话,放到今天,我觉得依然是正确的:
AJAX的相关组成技术,每一个都已经出现了N年以上了,对这些技术的组合运用,也远远早于AJAX这个名词出现之前。所以,我真正敬佩的,并非提出AJAX这个缩写的Jesse James Garrett。而是那些早在N年以前,就已经在探索、实践的先者,他们始终在追求的:是更好的用户体验,以及更好的开发体验。这样的精神,才是最可宝贵的,也是最值得我们学习的。许多年过去以后,当我们再回头来看当年的这些热门技术,也许早已经变得老土,变得落伍了。在这样的历程中,哪些人会成长为高手?会成长为大师呢?就是那些永不满足,永远在追求更好的用户体验,永远在追求更好的开发体验的人!
1、为啥我赞同@尤小右
首先是他所说的“对待新事物的态度”。从架构的角度来说,技术选型是永恒的命题,是否选用某种技术,要不要尝试某种新的技术,要不要推动team的小伙伴一起学点新东西,始终是一个架构师需要考虑的首要问题。无论是盲目拒绝,还是盲目追新,都是不可取的。
其次是因为在他的文章里,相当清晰的阐述了近年来前端领域的一些技术发展脉络,为何会出现那些新技术?以及他们分别想要解决什么问题?这令我获益匪浅。
再次,我赞同尤小右还因为vue在github上收到了13191个stars。这绝对是一个了不起的成就,在背后没有大公司的情况下,在前端框架领域,能够超过这个star数量的,几乎一只手就能数得出来!(全世界范围内)虽然阿当一直表现出对于“攒星星”的不屑,但是作为一个对于开源社区较为了解的人来说,有这样一个项目撑腰,他说的话,就得认真听,仔细吸收养分!
2、为啥我赞同@真阿当
首先当然是因为其中的一些观点,比如对CoffeeScript的看法。多年以前,Java社区曾经有一种技术叫GWT(Google Web Toolkit),系出名门啊!他的作用,就是帮助Java程序员,能够在不写JavaScript的情况下,编写Web应用。这种技术,从来就没有流行过。哪怕他背后站着Google。
我一直以来的观点是:如果你连学一门新语言都没兴趣,你怎么就敢贸然进入一个全新的领域?
阿当说这种技术是解决伪问题,我就很认同。虽然我很喜欢Ruby这门语言,但是我并不是一个只会Ruby的程序员。多学一门语言,很难吗?
类似的看法是对于nodejs的。在没有出现nodejs之前,前端程序员,要多学一门PHP或者Ruby/Python,很难吗?
曾经有半年的时间,我也跟过nodejs的风,在一家公司里,用nodesj写了一个消息队列处理的框架。说实话,到后来就会发现,真正需要解决的问题,都不是语言层面的,也不是前端知识领域的。一个曾经的后端程序员,能够用好nodejs。一个专攻前端的程序员,其实用不好nodejs。
但是,在技术圈子里,有太多傲慢的闯入者。面对一个其实存在传统方案的领域,既不愿意深入了解,也不愿意帮助原来的方案一起改进,而是自己再搞一套“新”的。
比如Java的无数种Web框架,有哪一种足够好用到撼动Rails的地位?真!没!有!我喜欢Ruby社区的一个重要原因,就是这个社区,不傲慢,不分裂,绝大多数劲,都往一处使。
我赞同真阿当的另一个原因,其实还是因为和他一样,见得多了。 。他写的那本书,几乎就可以扔掉。被坑得欲哭无泪!
大公司推出的很多新技术,当年吹得天花乱坠,花好稻好,到后来说没了也就没了。你跟得过来吗?(现在还有人知道XUL是啥吗?)现在,大公司也都学乖了,推新技术几乎全部都放在Github上开源,然后接受社区的评判,大家都凭Stars说话。
3、如何看待新技术
新技术层出不穷,是IT这个领域的常态。几乎每天都会诞生一种,据说会改变世界的革命性技术。对于程序员来说,终生学习也注定是常态。
准确判断一个新技术的价值,是一项重要的能力。在没有Github之前,甚至有公司敢于“推出不开源的新技术”。现在这世道比以前好了很多,新技术多半会开源,而且多半会放在Github上开源。我们在阅读一个项目的源代码之前,先看看他的几项基础数据:stars、forks、issues、commits、contributors,就基本可以掌握这个项目的“健康状况”、“活力程度”,再看看issues的内容,了解一下大概存在哪些已知的问题。然后,我可以决定,是否再仔细看看他的文档、代码,试着跑跑demo?
能够在一个大背景下理解一项新技术,是更加基础的能力。仅仅看stars是不够的,比如js这个领域,这两年非常火,较之其他的语言,starts往往在数量级上就高一级。如果缺乏对这一领域的较为全面的了解,就无法横向比较其优劣。当然,更加重要的,是对于该领域的技术发展趋势,要有自己的看法,某个发展方向是不是有前途?如果没有自己的看法,也只能随波逐流了。
虽然程序员需要终生学习,但是每个人的时间都非常有限,那么多新技术,怎么学得过来?不被忽悠,少走弯路,节约时间,才是更加高效的学习方案。
这也是我赞同阿当的根本原因。
4、如何学习新技术
关于一个团队,如何引入新技术,如何学习新技术的话题,今天就不聊了。这个话题太大,可以专门写一篇来讨论。
今天只讨论,个人如何学习新技术?
我有一个一直以来的观点:“人家的子弟,就是拿来误的。”潜台词是:不要怕误人子弟!
为啥这么说?因为,回顾自己的成长历程,什么时候经验值涨的最快?一是项目紧张,压力山大的时候;二是掉在坑里,必须自己爬出来的时候。
对于一个善于学习的人来说,走弯路他也在学习。对于不善于学习的人来说,就算在一条直道上,他也根本就不走啊!
所以,我想劝劝阿当。你何必担心年轻人被坑?担心他们走弯路?这样才有利于他们成长嘛!当你以一种过来人的眼光,在那里痛心疾首的时候。他们还觉得你倚老卖老,固步自封呢。
对于年轻人而已,我并不建议他们太过审时度势。听说哪个热门,就去学吧!感觉什么好玩,就去玩吧!再怎么浪费时间,也比浪费在撸啊撸上要好吧!只要不是心猿意马,浅尝则止,总是会有收获的。再说了,那些所谓老家伙的先见之明,也未必都是对的。[嘿嘿]
不写结束语了,本来也难有啥结论...附赠一段当初写的文字吧
新手如何上路
软件开发这个领域,永远都在飞速发展,大家都必须不断的学习新的知识、技能、框架、IDE
、甚至新的语言。传说中的骨灰级高手们,就像传说中的大侠,任何武器、哪怕是一块木头到了他们手里,也能发挥惊人的威力,人家练了几十年的看家本领,他们随手使来,也竟然像是打娘胎里就开始练了一样。为什么?
就算不吹那么玄的,平常我们能够碰到的那些老手,在学新东西的时候,也比那些新手学得更快,理解得更深,运用得更熟练。而新手们呢?往往就会漫无头绪,焦头烂额,以一副张着茫然的大眼睛的经典表情,出现在各大论坛的新手求助区里。他们欠缺的,究竟是什么呢?为什么老手学新东西,就没遇到那么多困难呢?
泛泛地说,自然是经验上的欠缺。仔细地说来,又可以分为三个方面:
一、本质,一种技术与另一种技术之间,往往会有本质上的相通之处,当你对一种技术的理解与思考越来越深入时,学习一种新技术也会更加容易。触类旁通,举一反三的能力,就是来自于对于技术本质的追寻。
二、地图,本质上或多或少的相通,也提示着我们技术之间的相互关联,当你了解的技术越多,了解得越是深入,在你的内心,就能建立起越发清晰的技术地图。各种知识都有一个自然、合理的位置。那么当一个老手要学习一门新技术的时候,他其实并非在探索一个全新的、未知的领域,而是有很多脉络可寻,也很多已知可以帮助他们快速了解未知。
三、技巧,面对同样的未知,面对同样的难题,新手们一筹莫展,而老手们却掌握着更多的技巧和手段,帮助他们试探可能性、缩小问题的范围、迅速定位问题、不犯明显愚蠢的错误、甚至能够列举出更具命中力的搜索关键词,而这些技巧,都帮助老手在前进的道路上,更少跌倒,即使跌倒,也能更快的爬起来。
作为一本写给新手的入门书籍,我们希望展现给读者的,是一个老手如何学习新技术的过程。我们相信,这样的一个学习过程,对于新手来说,是更具有价值的。