在经过了漫长的创作、审校过程之后,《JavaScript 全栈开发》终于迎来了在各大平台上正式出版的日子,以下是这本书的基本信息:

这本书作为我人生第一部成为了印刷品的原创作品,于我个人来说,自然是意义非凡,毕竟著书立言一直以来都是许多读书人毕生追求的理想之一。而作为一个自认为非常老派的读书人,在理想达成之日当然也免不了要俗套地撰文一篇,以表纪念。

此时此刻,不禁想起了早年间的求学之路。作为一个无生活自理能力的小脑瘫痪患者,我的本科专业基本是靠远程教育的形式完成的。在这一路上,我深受一大批中文优秀计算机专著作译者的恩惠。例如。我永远都记得阅读 K&R 的《C程序设计语言》时那种醒醐灌顶的感觉,读 Scott Meyers 的 Effective 系列时得到培育的专业素养。我也永远要感激侯捷老师那些译笔生辉的作品,除此之外,吴军博士的《浪潮之巅》、《硅谷之谜》等系列著作也帮助我打开了视野,找到了自己的人生定位。当然,受人恩惠,当求回报,我在日常写代码以求糊口之余,也一直希望自己有朝一日能追随这些前辈的垂范,著书育人,践行科学之信仰,弘扬实干之风气,如真能为当下技术土壤的培育尽到丝毫责任,此生可不虚此行了。

具体到《JavaScript 全栈开发》,整个创作过程最初的起心动念来自于某年某月某日在 Facebook 上看到的一张名为“如何成为全栈工程师”的图,图中堆叠着一摞足足半人多高的书籍,其中除了最基本的、与 HTML、CSS 相关的书籍之外,还有介绍浏览器端编程的 JavaScript 语言及其框架的书若干本,在服务器端使用的语言(例如 Java、C# 等)及其框架的书又是若干本,最后再加上关于 MySQL、SQLite3 这类数据库的以及关于 Apache 服务器的书,一共十几本,颇为壮观。总而言之,那张图无看起来无论如何都不想像是要鼓励初学者的样子。问题是,这到底是想吓唬谁呢?

诚然,时下的全栈工程师确实是一个要求不低的热门职业。该职业要求程序员们必须了解一个互联网应用从前端(包括浏览器及其他客户端)到后端(包括 HTTP 服务、数据库等)涉及到的所有技术栈。但“全栈”并不一定等同于“全能”。在大多数情况下,全栈工程师在职场中的优势并不在于他一人能干完所有的事,这在现代互联网应用项目的开发中几乎是不可能的,做几倍的 996 工作量都不现实,毕竟这类项目的开发通常是一个非常复杂的系统工程,需要团队合作。而学习过软件工程理论读者一定都知道,项目的规模越大,沟通成本就越高,全栈工程师真正的优势是他的技术视野。这其中的道理很简单,大型开发团队的沟通成本是非常巨大的,如果隶属于不同技术栈的程序员彼此不能理解对方的技术问题,各说各话,前端和后端是一定会掐架的。而如果团队之中存在着几位全栈工程师,这个问题就可以得到很好的解决,因为他们懂产品、懂设计、懂前端、懂后端,自然彼此都能听得懂。而且,全面的技术视野也有助于做出更加全面客观的技术架构和决策,从而对所在组织产生很大的正面影响。

所以,要想成为全栈工程师,最重要的任务是要扩展自己了解的技术栈,而不是去成为一个事必躬亲的全能超人。至少在我个人看来,在 Node.js 运行平台成功地将前端领域的王者 —— JavaScript 语言扩展到后端之后,之前图中所罗列的那些书中至少有一半与编程语言相关的问题完全是可以用一本全面介绍 JavaScript 的书来解决的。为了验证这一设想,我尝试着开始了之后长达十个月的创作。从 2019 年 9 月 16 日动笔,到 2020 年 7 月 22 日完成初稿,我自己也没想到写这样一本小书竟然花了近一年的时间,以及需要花费我如此之多的体力,背伤如影随形,汗水日日如雨,实现理想之路从来不会畅行无阻,今日回首,一切依然都是值得的。毕竟在我把自己关在家里埋头写作的这段时间里,外面的世界发生了如此巨大而剧烈的变化,暴虐的自然,丑陋的世界让人感慨万千。我应该庆幸自己选择了“读书写作”这条通往桃花源的小径,“问今是何世,乃不知有汉,无论魏晋”某种程度上真是何等的幸运,不然,请抬头看看如今世上有那么多莫名其妙的愤怒和亢奋。在那经历了无数分岔的小径尽头,我们能听到陶渊明、博尔赫斯那轻声细语的传世之言。惭愧呀!在大师面前,我依然是何等的浮躁,何等的肤浅,何等的不自信。

幸运的是,由于之前参与过十本计算机英文著作的翻译工作,也参与审阅过别人撰写的相关作品,我对计算机专著该有的样子并不陌生。撰写这类作品的最重要之处在于如何在细节严谨性与教学引导性之间找到合适的平衡点。如果没有教学引导性,缺乏轻重缓急的内容安排和一个循序渐进的过程,初学者就很可能会不得其门而入。而如果缺乏足够的、可以立刻上机测试的代码实例细节,也很可能会让初学者觉得兴趣黯然,导致学习过程形同嚼蜡。这就需要作者有丰富的教学经验以及带队经验。有了前者,我们就能熟悉教学心理,知道先教什么,后教什么,之间如何承前启后,将人一步一步引入到这么技术的运用中来。而有了实际带队经验我们就会知道新手在具体实践中会遇到那些情况,并且能准确的预料到学生在运行什么代码时会遇到什么问题,而在这种情况下往往是一点就通,不用长篇大论,事倍功半。

同时做到以上两个方面并不容易,我也只能尽力而为,并为此做了两项安排:

  1. 尽可能用单一项目的成型过程贯穿全书,通过项目本身的开发实践来引导读者循序渐进地学习JavaScript 的标准语法及其在浏览器端、服务器端的开发思路、设计理念。目的是鼓励读者在实际项目需求的驱动之下亲手将书中的示例代码输入到计算机中,并逐步修改它们,同时观察代码的执行过程,验证其结果是否符合预期。如果符合预期,就总结当下的经验,如果不符合预期,则去思考应该做哪些调整来令其符合预期。如此周而复始,让学习达到事半功倍的效果。
  2. 让这本书只专注于讨论如何使用 JavaScript 语言本身与其宿主环境提供的接口,不过多地涉及时下琳琅满目的开发框架。这样做主要是基于两个方面的考虑:第一,介绍 JavaScript 语言及其宿主环境本身就已经足以撑起一本结构完整、内容丰满的书了。如果再加上众多开发框架的介绍,只会冲淡这本书的主题,并使其臃肿不堪。第二,JavaScript 社区的开发框架不仅琳琅满目,选择众多,而且新陈代谢极为快速。这意味着,即使这本书介绍了客户端的 React 框架、服务端的 Express 框架、桌面端的 Electron 框架,很有可能等到这本书写完并最终出版之时,开发者们已经有了更好的选择。所以授之以鱼不如授之以渔,我们真正应该让读者掌握的是“快速学习新框架”的能力,这需要我们了解这些框架的设计思路,理解为什么决定开放那些接口给用户,为什么对用户隐藏那些实现,这就需要读者自己具备开发框架的能力。

以上安排也意味着读者在阅读这本书之前应该要具备一些与 HTML 与 CSS 相关的基础知识。并且最好能对基于浏览器/服务器架构的应用程序的设计原理、最底层 API 的使用方式、前后端的分工原则有着刨根究底的好奇心和一定的耐心。事实上,编程这件事无非就是使用编程语言表达自己的意图罢了,我们在学会基本单词,语法之后,对着名家名作模仿学句即可,正如在学习汉语时说的“读书破万卷,下笔如有神”,积少成多,不断顿悟,悟道为所用,如此坚持下去,久而久之,自然会驾轻就熟,行文如流水,自成风格了。到了那时候,我们哪还会在乎什么招式,格式,最后都是无招胜有招了。当然,这不是不讲规矩,而是我们的任何想法,写法都很自然地落在规矩之内。

王国维说过:“出乎其外,别有高致,进乎其内,固有生气”,读书学习求一乐,潇洒应对,亦可穿越于世间,求得一席之地以安身立业。我由衷地希望这本书能为读者日后进入更为深入的开发领域创造一个良好的开端。

我的第一部原创《JavaScript 全栈开发》正式上市了!的更多相关文章

  1. 急速JavaScript全栈教程

    3 天前  ·  3k 次阅读 急速JavaScript全栈教程 javascript node.js  mongodb 140 自从一年前发布了Vuejs小书的电子书,也有些日子没有碰过它们了,现在 ...

  2. JavaScript 全栈工程师培训教程(来自阮一峰)

    来源于:https://twitter.com/ruanyf http://www.ruanyifeng.com/blog/2016/11/javascript.html 全栈工程师培训材料,帮助学习 ...

  3. JavaScript 全栈工程师培训教程 - 阮一峰

    http://www.ruanyifeng.com/blog/2016/11/javascript.html https://github.com/ruanyf/jstraining 我现在的技术方向 ...

  4. “云”端的语雀:用 JavaScript 全栈打造商业级应用

    作者|  不四(死马)蚂蚁金服 语雀产品技术负责人 语雀是什么? 语雀是一个专业的云端知识库,面向个人和团队,提供与众不同的知识管理,打造轻松流畅的工作协同,它提供各种格式的在线文档(富文本.表格.设 ...

  5. Python全栈开发记录_第一篇(循环练习及杂碎的知识点)

    Python全栈开发记录只为记录全栈开发学习过程中一些难和重要的知识点,还有问题及课后题目,以供自己和他人共同查看.(该篇代码行数大约:300行) 知识点1:优先级:not>and 短路原则:a ...

  6. JavaScript全栈教程

    这是小白的零基础JavaScript全栈教程. JavaScript是世界上最流行的脚本语言,因为你在电脑.手机.平板上浏览的所有的网页,以及无数基于HTML5的手机App,交互逻辑都是由JavaSc ...

  7. 老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)

    点击了解更多Python课程>>> 老男孩python3.5全栈开发第9期+课件笔记(1-15部全 共125天完整无加密)大小:236G 此课程为老男孩全栈开发最新完结课程,适合零基 ...

  8. Sentry 监控 - 全栈开发人员的分布式跟踪 101 系列教程(第一部分)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  9. 一文读懂NodeJS全栈开发利器:CabloyJS(万字长文)

    目录 0 修订 0.1 修订说明 0.2 修订历史 1 基本概念 1.1 CabloyJS是什么 1.2 CabloyJS核心解决什么问题 1.3 CabloyJS的开发历程 2 数据版本与开发流程 ...

随机推荐

  1. C#-DUP

    void jianting() { int port = 8888; UdpClient udpclient = new UdpClient(port); IPEndPoint ipendpoint ...

  2. SpringBoot项目启动后自动打开浏览器

    编写一个类,注册为Spring的Bean,然后实现CommandLineRunner接口,重写run()方法即可 @Component public class OpenBrowser impleme ...

  3. [bug] jupyter notebook:服务在阿里云上启动,本地浏览器无法访问

    问题 在阿里云上装了个jupyter,服务正常启动了,但网页上无法访问 排查 安全组已经设置过了,7777端口 在宝塔面板查看,发现7777端口并没有开,打开就可以访问了 原来阿里云的安全组和防火墙是 ...

  4. [bug] C:error: initializer element is not constant

    参考 http://codingdict.com/questions/45121

  5. [DB] CDH集群规划

    配置 三台机器:node01.node02.node03 node01:6G+60G node02:2G+40G node03:2G+40G 组件 Cloudera Managerment Servi ...

  6. 用python输出未来时间,递增

    输入当前时间,之前与之后的365天时间日期 按格式化输出 #!/usr/bin/evn python # -*- coding: UTF-8 -*- # import time import date ...

  7. vipivp常用linux命令

    基础安装 # CentOS sudo yum install epel-release 命令行Tips 进程及端口 # 查看端口占用情况 netstat -ap | grep 端口号   # 查看某一 ...

  8. Linux_防火墙与SElinux

    一.防火墙与SElinux 1.防火墙和selinux 防火墙 iptables          默认允许所以 firewalld         默认拒绝所有 ebtables 不认识,不管 se ...

  9. 012.Python的字典和集合的相关函数

    一 字典的相关函数 1.1 增函数 dictvar = {"a":1,"b":2} dictvar["c"] = 3 print(dictv ...

  10. 5.1-5 uname、hostname、dmesg、stat、du

    5.1 uname:显示系统信息     uname命令用于显示系统相关信息,比如内核版本号.硬件架构等. -a    显示系统所有相关信息 -v    显示内核版本 -m    显示计算机硬件架构 ...