《编写可维护的JavaScript》

书籍 guokai 发表于 4 年前最后回复来自 qq2850071112 1 年前

预售中,预计到货时间为2013-03-25

图书预订地址:http://product.china-pub.com/3022596

译者序

在我的编程生涯中,曾遇到过各种各样的开发者,他们的编程风格天马行空,有时甚至让人哭笑不得。有一种风格被称为“霰弹枪编程”,例如某个方法调用出错了,我尝试将参数0改为'0'、NaN甚至false,直到试出能“正确”运行的参数为止。当你和这种人组成团队一起编程时,你会发现你的智商变得很低。

比“霰弹枪编程”更温柔一点的编程方式是“撞大运编程”,就是我根本看不懂程序到底在干嘛,但确实能正常运行,这往往是因为这些程序中有很多错误成对出现,于是就负负得正,看起来就正确了,这种程序实在是“动弹不得”,只能重构。当你和这种人组成团队时,上帝都会同情你。

当然,当渐渐意识到这类随意编程风格带来的危害时,很多人开始思考什么才是“好”的编程风格。不少人开始向高手学习,尽管有时并不知道高手为什么要把代码写成这个样子。于是越来越多的hack代码出现了,那些看起来晦涩难懂、短小精悍却又暂时行之有效的代码片段越来越流行,尤其是在处理浏览器兼容性问题时,这种情况更甚。有些人会在这些hack代码片段旁边打上记号,以便以后有问题时能留意到此。这时,问题又出现了,不同人做记号的方法又不一样,我的天哪!

如果你自诩为一名有能力有良知的程序员,遇到这种“烂”代码时往往将之重构,为了修改几个拼写错误的bug,而修改10个类,并且重构与这10个类有关联的另外20个类,甚至修改了打包脚本以及部署配置文件。这就是一种有着代码洁癖的人很“青睐”的编程风格—“屠宰式编程”。

霰弹枪式、撞大运式、不求甚解式、屠宰式……

编程是一项复杂的工程,却又如此充满喜感,让人又爱又恨。但有一点确定无疑,即这些风格因为缺少基本的约束,会导致团队协作效率低下,甚至影响产品的存亡。而对于Web开发领域最为流行却有着先天设计缺陷的语言JavaScript来说,情况更加糟糕。一直以来都缺少宏观的设计模式和微观的编程风格的指导,从而导致JavaScript编程始终没有权威和统一的指导思想和方法论。因此,大部分Web前端团队依然将很大精力放在解决注入代码冲突、命名规范性、代码复用模式等团队编程最基本的问题上。迟迟走不上创新、高效的快车道。

我们很欣喜地看到,在设计模式领域,《JavaScript设计模式》(JavaScript Design Patterns)和《JavaScript编程模式》(JavaScript Patterns)两本书填补了这方面的空白,而在编程风格领域,这本《编写可维护的JavaScript》(Maintainable JavaScript)真可谓姗姗来迟。

本书正是向开发人员阐述如何在团队开发中编写高可维护的JavaScript代码,涵盖了编码风格、编程技巧、自动化、测试等几方面,不过,同样的原则也适用于其他任何语言。本书作者是大名鼎鼎的Nicholas C. Zakas。他曾是Yahoo!的首席前端开发工程师,在完成了从一名独行侠到团队精英的蜕变后,他站在前端工程师的角度为我们提炼出许多的最佳编程实践,其中包括很多来自工业生产的最佳法则。应用这些技巧和技术,可以使你的团队编程从侠义的个人偏好的阴霾走出来,走向真正的高效和高水准。

本书由淘宝北京前端团队翻译,在翻译过程中,我们始终保持一种学习的心态,因为正像前面提到的,作者给出的很多经验正是我们手头工作中不在意却又至关重要的,这种学习心态也让我们在这次翻译过程收获颇丰。我们尽最大的努力,力求翻译后的表述在还原作者原意的同时又不失中文的流畅。但难免由于译者水平有限而有所纰漏,还请各位高手多多批评指正。

最后,我要感谢人民邮电出版社信息技术分社的陈冀康老师的信任和鼓励,宁愿让我们多花些时间来保证质量,同时感谢我的同事魏凡哲(陶清)、贺亮(完真)、杨翰文(地极)、王保平(玉伯)参与本书的试读和审校。如果要提交本书的勘误和建议,请在本书的介绍页面留言(http://jayli.github.com/maintainable.javascript)。

李晶(拔赤),郭凯(流火),张散集(一舟)

2013年1月

序言

由于前端工程师的成长道路自成轨迹,这让(Web前端技术)这个专业看起来是如此的与众不同,甚至诸如Yahoo!这种大公司里的很多前端工程师也多是靠自身野蛮生长,我行我素地写着各种hack! 。或许你曾经也是一名小公司里的“页面仔”(the web guy),那时的你几乎什么都干。当大公司开始利用这些之前未被发掘的资源时 ,团队协作的环境短时间内吸纳了很多“hacker” ,这时这些hacker碰到了各种条条框框。单兵作战再也没了优势,所有那些自学成才和以自我为中心的人都不得不开始思考如何才能在团队环境中生存下来。

我是在20世纪90年代末开始学习JavaScript的:靠的是自学。因为当时的JavaScript还很新潮,学习资料很少。和其他很多开发者一样,我通过不断钻研IE和Netscape Navigator来自学。我做各种尝试、梳理我所掌握的知识,我一遍遍反复试验,直到搞清楚其工作原理。幸运的是,这份好奇和勤勉为我带来了第一份工作。

在我职业生涯的第一个五年中,我是一个“脚本仔”。在我最早呆过的两家公司里,没有人比我更了解JavaScript和Web开发。所有问题,不管是非常简单的还是非常复杂的,我都能搞定。我刚刚从学校毕业,是一名初出茅庐的小伙子,却有着一种危机感。因为我找不出能和我产生思想碰撞的人,并且在我遇到问题时也没有人能为我解难。我力争做到最好,因为我知道我是唯一能做到这样的人。

在这五年之中,我不断磨炼我的技能。我让我的做事方式和工作流程更为合理。我不用担心其他人去研究我的代码,因为别人都没有能力给我做代码评审(review)或为我的代码提交bug修复。我是一个纯粹意义上的hacker:我行我素地写着代码,而且不用担心它会被修改。

在我职业生涯的第六年,我换了工作,加入了一个团队,在这个团队中,每个人都会为项目的各个方面贡献代码。我的主要精力不再是JavaScript和Web开发,而是大部分时间在写后端代码和SQL。同时,传统的后端工程师却开始被迫写前端(页面)代码。这种体验真正让我大开眼界:我之前写代码的方式和团队其他人实在是格格不入,这是一个大问题。

我很快意识到要想更高效地参与团队开发,我写代码的方式必须和团队保持一致。后台代码和SQL对我来说有点陌生,因此我采纳了身边一些有头脑的人写代码的模式。与此同时,我开始与其他工程师讨论我们应当采纳何种HTML、CSS和JavaScript的编程模式。我甚至在编译阶段加入了JavaScirpt语法检查来强制推行标准—这也是我第一次在公司做 Web 代码的检查。不久以后,这个团队就像上了润滑油的机器一样高效。

我在2006年加入了Yahoo!。我一到Yahoo!就发现几乎所有工作都和相互协作有关。整个团队就像把不同的动物纠集在一起。我所加入的第一个团队是My Yahoo!团队,这个团队非常庞大,比我之前工作过的任何团队都要大。团队里也有很多成型的编程指南,我有很多需要学习的东西。新技术、新流程以及新工具一股脑地展现在我面前。我花了大量的时间来学习这些新环境,吸收新知识,而这些知识是我从大学里接触不到的。在这里我完全沉浸在知识的海洋里,感觉自己像被重塑了一般。

几个月后,我开始遇到一些问题。我所习惯的开发流程并不是总能好好工作。有不少人以不同的方式来做事,这导致了很多bug。我的主管发现了这一苗头,一天他把我叫到一边,告诉我他希望我来负责梳理我们的开发。现在回想起他的话依然是那么鼓舞人心:“你写的代码都可以运行得很好,很少出bug。我希望其他人都像你一样写代码。”就这样,我打算着手为My Yahoo!前端开发团队注入一些结构和规范。

我为My Yahoo!团队做的工作非常成功,最终我被遴选为2008年Yahoo!新版首页的首席前端工程师。这次委任让我有机会将代码组织和测试高质量代码的技巧,应用于一个拥有20名前端工程师的团队,让这20名工程师只开发一种(风格的)代码。通过几个月的学习和调整,这个团队的生产效率和产品质量达到了一个很高的水平,让很多人叹为观止。不管是谁写的代码,它们都看起来像出自一个人之手,此外,多数工程师都可以快速地接手别人的工作来修复bug或开发新功能。在此期间,作为一个工程师团队所产出的业绩,在过去的几年里一直是我职业生涯的最大亮点。

我在Yahoo!的这段时间都是在参与大型的团队开发,我将在此期间积累的所有经验和方法整理出来成书于此。所讨论的主题也体现了我的这种蜕变,我从一名我行我素的独行侠,蜕变为一名软件工程师,一名团队协作者,我放弃了我身上固有的侠气和个性,来让整个团队以更高的水准运作。这正是这本书的内容:如何站在团队的角度去写JavaScript代码。

开发者最不容易理解的事情是,我们为何需要花这么多时间来“维护”代码。很少有人会打开一个文本编辑器从头开始写代码。大多数时间里,你面对的都是已经写好的代码。以一种可维护的方式来写代码,可以让你和协作者很容易就知道上段代码写到什么地方什么程度。正如我在Yahoo!时常说的:“当你开始工作时,你不是在给你自己写代码,而是为后来人写代码。”

本书收集了很多关于JavaScript编程规范的讨论。“Java语言编码规范”(Code Conventions for the Java Programming Language) 是当前最流行的关于编码规范的文档之一,它指出编码规范如此重要的几个原因。

软件生命周期中80%的成本消耗在了维护上。

几乎所有的软件维护者都不是它的最初作者。

编码规范提高了软件的可读性,它让工程师能够快速且充分地理解新的代码。

如果你将源码作为产品来发布,你需要确保它是可完整打包的,且像你创建的其他产品一样整洁。

这些原因在今天看来依然适用。本书所讨论的编程规范也是着眼于帮助你和你的团队写出高效的JavaScript代码。

因为你正在阅读这本书,你需要对本书提到的一些建议保持开放的心态。要知道这里说的很多技术,真正的目标是解决多人开发的环境中很多工程师如何书写统一风格的代码的问题。作为团队的一员,意味着做出这种决策不仅对个人有好处,对于团队也同样有好处。对于个人来说,需要在一定程度上牺牲个人偏好、个人观点甚至个人英雄主义。你所收获的是一个能做大事的高效的团队,我希望这本书可以帮助你做到这一点。

共收到7条回复
ihuguowei 4 年前 #1

老大的书,哇偶~~

shenli 4 年前 #2

不错

aisin 4 年前 #3

支持楼主, 已购买, 等待上市收获 😊

daxiong123 2 年前 #4

支持一下

addbook 2 年前 #5

顶顶更健康

think2011 2 年前 #6

挖坟呢....... 好早之前就看完了,需要看第二遍的书。

iamjiuye 2 年前 #7

bachi送了一本,还少了你的签名,哈哈~

登录后即可参与回复