聊聊“新技术”

作者: 庄表伟 | 来源:发表于2016-01-25 00:37 被阅读4598次

    缘起

    最近在微博上,有两位我认识的前端界的朋友,吵得不亦乐乎。一位是@尤小右 ,因为收听了一期Teahour的访谈,开始关注vue这个前端开源框架,以及框架背后的作者。另一位是@真阿当,是我在盛大创新院时的老同事,要说这二位的水平高下如何,以我的经验肯定是无法判断的。微博又非常的碎片化,这种技术话题,大家各自断断续续的发表些只言片语,令我们这些看客,看得非常的不过瘾。

    幸好,这两位后来都各自写了一篇长文《真阿当:为这几天前端方向所撕的逼做个大总结》、《尤小右:谈谈前端『新』技术》,让我对于他们的观点,都算是有了较为完整的理解。结果一看之下,竟然都相当认同......还有中间的一些其他朋友的观点,比如@刘骥-JimLiu@张克军的一些看法,我也都很认同。

    那么,问题来了:“你到底有没有底线啊?!个个都认同,你到底是哪边的啊?!”所以,我今天打算好好的表述一下,自己对于“新技术”的看法。

    其实,阿当大概对于我进入创新院之前的经历,也不太了解,所以才会说:“11年你尝试从ror领域扩展前端知识,遇到了一堆坑,然后在知乎上发的贴子,求教前端难点所在的帖子,我还印象很深刻。你是11年那波对前端感兴趣的后端,很有典型性。但你对前端的态度要诚恳得多,点赞。” ps: Web 前端开发面临的挑战主要有哪些?

    其实呢,我大概在2005~2006年的2年里,混过一段时间的前端圈子,能够拿得出手是一篇OpenDoc,名叫《Ajax新手快车道》。还有一次演讲的PPT,名叫《Ajax技术地图》。但是,在10年以后的今天,我必须老老实实的承认,我不懂前端。毕竟,前端技术这个领域,变化太快了......

    不过,当初在《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社区的一个重要原因,就是这个社区,不傲慢,不分裂,绝大多数劲,都往一处使。

    我赞同真阿当的另一个原因,其实还是因为和他一样,见得多了。我有个朋友叫陈黎夫,多年以前曾经费了好大的力气,写了一本ASP.NET的Web Framework的书(书名与具体的技术不记得了),结果书刚刚写完,ASP.NET出新版本了。他写的那本书,几乎就可以扔掉。被坑得欲哭无泪!

    大公司推出的很多新技术,当年吹得天花乱坠,花好稻好,到后来说没了也就没了。你跟得过来吗?(现在还有人知道XUL是啥吗?)现在,大公司也都学乖了,推新技术几乎全部都放在Github上开源,然后接受社区的评判,大家都凭Stars说话。

    举个例子:TypeScript,再如何系出名门,我一看他的Stars,只有8930,还没有vue的多。我必然内心会打鼓:这东西,多半不靠谱吧?!

    3、如何看待新技术

    新技术层出不穷,是IT这个领域的常态。几乎每天都会诞生一种,据说会改变世界的革命性技术。对于程序员来说,终生学习也注定是常态。

    准确判断一个新技术的价值,是一项重要的能力。在没有Github之前,甚至有公司敢于“推出不开源的新技术”。现在这世道比以前好了很多,新技术多半会开源,而且多半会放在Github上开源。我们在阅读一个项目的源代码之前,先看看他的几项基础数据:stars、forks、issues、commits、contributors,就基本可以掌握这个项目的“健康状况”、“活力程度”,再看看issues的内容,了解一下大概存在哪些已知的问题。然后,我可以决定,是否再仔细看看他的文档、代码,试着跑跑demo?

    能够在一个大背景下理解一项新技术,是更加基础的能力。仅仅看stars是不够的,比如js这个领域,这两年非常火,较之其他的语言,starts往往在数量级上就高一级。如果缺乏对这一领域的较为全面的了解,就无法横向比较其优劣。当然,更加重要的,是对于该领域的技术发展趋势,要有自己的看法,某个发展方向是不是有前途?如果没有自己的看法,也只能随波逐流了。

    虽然程序员需要终生学习,但是每个人的时间都非常有限,那么多新技术,怎么学得过来?不被忽悠,少走弯路,节约时间,才是更加高效的学习方案。

    这也是我赞同阿当的根本原因。

    4、如何学习新技术

    关于一个团队,如何引入新技术,如何学习新技术的话题,今天就不聊了。这个话题太大,可以专门写一篇来讨论。

    今天只讨论,个人如何学习新技术?

    我有一个一直以来的观点:“人家的子弟,就是拿来误的。”潜台词是:不要怕误人子弟!

    为啥这么说?因为,回顾自己的成长历程,什么时候经验值涨的最快?一是项目紧张,压力山大的时候;二是掉在坑里,必须自己爬出来的时候。

    对于一个善于学习的人来说,走弯路他也在学习。对于不善于学习的人来说,就算在一条直道上,他也根本就不走啊!

    所以,我想劝劝阿当。你何必担心年轻人被坑?担心他们走弯路?这样才有利于他们成长嘛!当你以一种过来人的眼光,在那里痛心疾首的时候。他们还觉得你倚老卖老,固步自封呢。

    对于年轻人而已,我并不建议他们太过审时度势。听说哪个热门,就去学吧!感觉什么好玩,就去玩吧!再怎么浪费时间,也比浪费在撸啊撸上要好吧!只要不是心猿意马,浅尝则止,总是会有收获的。再说了,那些所谓老家伙的先见之明,也未必都是对的。[嘿嘿]

    不写结束语了,本来也难有啥结论...附赠一段当初写的文字吧


    新手如何上路

    软件开发这个领域,永远都在飞速发展,大家都必须不断的学习新的知识、技能、框架、IDE
    、甚至新的语言。传说中的骨灰级高手们,就像传说中的大侠,任何武器、哪怕是一块木头到了他们手里,也能发挥惊人的威力,人家练了几十年的看家本领,他们随手使来,也竟然像是打娘胎里就开始练了一样。为什么?

    就算不吹那么玄的,平常我们能够碰到的那些老手,在学新东西的时候,也比那些新手学得更快,理解得更深,运用得更熟练。而新手们呢?往往就会漫无头绪,焦头烂额,以一副张着茫然的大眼睛的经典表情,出现在各大论坛的新手求助区里。他们欠缺的,究竟是什么呢?为什么老手学新东西,就没遇到那么多困难呢?

    泛泛地说,自然是经验上的欠缺。仔细地说来,又可以分为三个方面:

    一、本质,一种技术与另一种技术之间,往往会有本质上的相通之处,当你对一种技术的理解与思考越来越深入时,学习一种新技术也会更加容易。触类旁通,举一反三的能力,就是来自于对于技术本质的追寻。

    二、地图,本质上或多或少的相通,也提示着我们技术之间的相互关联,当你了解的技术越多,了解得越是深入,在你的内心,就能建立起越发清晰的技术地图。各种知识都有一个自然、合理的位置。那么当一个老手要学习一门新技术的时候,他其实并非在探索一个全新的、未知的领域,而是有很多脉络可寻,也很多已知可以帮助他们快速了解未知。

    三、技巧,面对同样的未知,面对同样的难题,新手们一筹莫展,而老手们却掌握着更多的技巧和手段,帮助他们试探可能性、缩小问题的范围、迅速定位问题、不犯明显愚蠢的错误、甚至能够列举出更具命中力的搜索关键词,而这些技巧,都帮助老手在前进的道路上,更少跌倒,即使跌倒,也能更快的爬起来。

    作为一本写给新手的入门书籍,我们希望展现给读者的,是一个老手如何学习新技术的过程。我们相信,这样的一个学习过程,对于新手来说,是更具有价值的。

    相关文章

      网友评论

      • 153718fed35d:并不能简单的用star的星星来说明问题,因为vue的作者是Chinese,就像NBA全明星赛林书豪的票数绝对很高但是不代表他真的达到全明星的水平~ (ps:我是vue粉)
        庄表伟:@青笠 我觉得,这并非坏事,或者说:这正是中国开源逐步崛起的征兆。
      • ruben_fu:这“撕逼”就是个坑,跟争论谁是最好的语言有啥区别?
        不过我还是觉得,nodejs、react这些技术真的是很好,创造了良好的前端生态,也确实提高了生产效率。
        nodejs使得前端可以干各种想干的事情,而不总是要看后端的态度。也不用换个团队,面临从语言学习到各种轮子的全部重来。
        angular和react对我最大的触动是:基础很重要,这两个框架的核心,都跟算法有关,反正我是肯定写不出来。只是这些框架,让基础弱的人,有了吹NB的“资本”,但不妨碍其本身很好。
        庄表伟:@ruben_fu 正常的生态,难道不应该都是多语言协作的?样样都想一种语言搞定?
        ruben_fu:@庄表伟 团队协作是一回事,生态是另一回事。
        庄表伟:@ruben_fu 多语种团队协作的能力,也是需要培养的能力之一。样样都想自己搞,不想看人家脸色,其实也是问题。
      • 9079731bfec8:你是不是跟@三重灰太狼 有仇啊... :sweat:
        庄表伟:@张羽 我不认识他
      • Sheepy:不知道是因为这些年前端太火还是写前端的人格外喜欢“社交”,前端圈子总感觉跟娱乐圈一样,各种八卦各种撕逼。

        前辈文章写得挺好啊,我也觉得只要具备基本的计算机素养,对新技术感兴趣大可以都去试试,试多了真会发现好多东西是想通的,而且很多被吹捧得很“前沿”的“新技术”,大都是对一些经典思想的再包装。

        某种技术突然大火,并不见得是它真的多先进,也有可能只是以前的大牛们不屑用的一些使用方便但是影响性能的东西,随着硬件性能的提升和程序员总体水平的下降,被广泛接受罢了。

        要真正将某种“新技术”引入自己负责的商业项目中,开源社区的认同程度是一方面,不过也确实不能光凭别人的一面之词,别人说不定是跟风,甚至是利益相关。总得自己研究一下,保证就算出了什么问题自己也能搞定才行的。
      • 8dd2e55c7b5d:围观。@三重灰太狼 你嘴好脏。我挺 CoffeeScript,但也不能根据 star 数就黑 TypeScript。

      本文标题:聊聊“新技术”

      本文链接:https://www.haomeiwen.com/subject/ikirkttx.html