Preface
前言
在极客时间成立四周年之际,笔者在该平台上分享过这样一段话:
我是一个砌石阶的人。2021年国庆节我在赶书稿时,看着最终敲定的复杂代码,突然确信—我所撰写的这套技术图书对读者来说是有价值的。其价值就在于整套书都在写一个PBL(Project Based Learning,项目引导式学习)实战案例,从最开始的3行代码,到最终的几万行代码。试想一下:如果要求学习者直接以结果代码为模板进行练习,那肯定不太友好;但如果是让学习者跟着笔者讲解的节奏,从基础代码一步步修改得到结果代码,那他应该会很有成就感吧。
学编程就像登山,只要一步一个脚印坚持往上爬,就可以到达山顶。泰山虽高,但只要一步一级台阶,终可看到山顶无限风光;而如果有人不走台阶,从荒山野岭中攀爬,那他将很难爬上去。
这本书及它的姊妹篇《微信小游戏开发:前端篇》就在这种指导思想下完成了。
很多程序员坦言,他们的编程技能并不是在大学里学到的,而是在走向工作岗位以后练就的。在IT公司中,新人成长最快的方式就是有人带,师傅带着徒弟做一个项目,等到项目完成时,徒弟也就将编程技能掌握得差不多了。笔者希望以书面的形式带领读者来学习,就像公司里老人带新人一样,通过一个PBL实战项目,系统地学习与前后端相关的所有知识点和技能点。
为什么要这样学习呢?下面先看一下新人学习编程一般需要经历的5个阶段。
初学者进入一个行业,首先要学习基础知识。有了基础知识,才能通过实践不断积累经验和技能;有了积累,最后才有可能顿悟。这个过程涉及5个阶段,这5个阶段可以用我国的古代典籍《易经》中的描述来概括。
初九,潜龙勿用。
九二,见龙在田,利见大人。
上六,龙战于野,其血玄黄。
九五,飞龙在天,利见大人。
上九,亢龙有悔。
这里的五段爻辞分别对应着编程学习的以下5个阶段。
❑“潜龙勿用”指的是神龙潜伏于水中,暂时还发挥不了作用。此时学习者刚学会了一点皮毛,不要着急应用。
❑“见龙在田,利见大人”指的是神龙已出现在地面上,才干已经初步显露出来,利于被伯乐看到。此时学习者已经习得了一些本领,但根基尚不牢靠。
❑“龙战于野,其血玄黄”指的是神龙战于四方,天地亦为之变色。此时学习者已经通晓了面向对象、模块化、设计模式等基础编程技能,可以独立负责一个项目或维护一个开源软件了。
❑“飞龙在天,利见大人”指的是神龙飞上天空,象征德才兼备的人一定会有所作为。此时学习者的知识已经具备相当的深度和广度,知识结构更加完善。
❑“亢龙有悔”一般意为居高位的人要戒骄,否则会因失败而后悔。这里指的是神龙飞得过高,可能会发生后悔的事。虽然此时学习已经基本结束,但是不要觉得学完了就万事大吉,有些内容需要反复温习,经过长期积累才能顿悟,产生新的认知。
了解了这5个阶段以后,有的读者可能会问,我们在学习编程时,是应该先学习基础知识再学习具体的开发技术,还是应该先学习一门具体的开发技术再在工作中夯实基础呢?这是一个老生常谈的问题。
关于如何学习编程,一直有自下而上与自上而下的方式之争。自下而上的学习方式,指的是先学习计算机基础知识,再学习具体的某项技术;自上而下的学习方式则是反过来,指的是先学习某项具体的技术,再在工作中夯实基础。
笔者的主张是,运用PBL教学思想,在一个虚构的实战项目中将理论与实践相结合,同时学习基础知识与具体的技能。
2020年由北京市十一学校牵头,北京怀柔九渡河小学做了一次PBL教学实验。九渡河小学远离城区,师资力量薄弱,学校就地取材,从附近村民中招揽了40余位传统手工艺人,让这些手工艺人教学生们磨豆腐、剪纸、糊灯笼等传统手艺。学校老师则把1至6年级需要学习的所有知识点打散,然后全部融入这些传统的手工艺实践活动中,让学生在实践活动中学习。教学实验非常成功。
在编程这个领域,学习者根本不需要考虑应该自下而上学习还是自上而下学习。以往旧的学习方式,无论是在学校里按部就班地学习基础,还是在社会培训机构里实践应用技能,都存在一定的偏差。最好的编程学习方式是在一个PBL教学案例中,既学习基础知识,又锻炼必要的技能,这也是最接近于公司里老人带新人的学习方式。
关于这套书
笔者撰写的这套“微信小游戏开发”系列图书共包含两本:一本是《微信小游戏开发:前端篇》,主要通过一个小游戏实战项目,带领读者从3行代码开始,一步步学会JavaScript(下文简称JS)语言、模块化重构、面向对象的软件设计技巧及常见设计模式的实际应用技巧;另一本就是本书,主要内容包括小游戏常用本地功能优化、广告组件与社交营销排行榜、云函数与云数据库、后端接口程序及后台Web管理系统等。前面提到的5个学习阶段—潜龙勿用、见龙在田、龙战于野、飞龙在天和亢龙有悔,前4个阶段正好对应这两本书中的四篇内容。其中:《微信小游戏开发:前端篇》含潜龙勿用、见龙在田、龙战于野这三篇,共11章,32课;《微信小游戏开发:后端篇》即飞龙在天篇,共7章,18课。亢龙有悔篇作为番外篇,在笔者公众号“艺述论”中回复关键字10000即可看到。
微信小游戏是当下最适合新人学习的编程技术,所以笔者选择它作为本套书的练习项目。表面上读者学习的是微信小游戏项目开发,但实际上却是在系统学习编程语言、技巧及思想,小游戏项目仅是作为一个最适合新人的学习形式而存在的。
两本书的讲解风格、写作指导思想是一致的,内容是连贯的,练习的也是同一个项目,对于编程初学者而言,宜先阅读前端篇,再学习后端篇。
本书主要内容
后端开发是全栈开发中非常重要的一环,不可或缺。本书主要讲解微信小游戏后端开发实战,共7章。
第1~3章 本地功能
这3章主要介绍在微信小游戏开发中常用的本地功能。学习微信小游戏开发,离不开学习平台组件和接口。通过这3章的实践,我们将能使小游戏项目在本地功能方面更加完善,同时进一步了解微信小游戏的平台能力,为以后自学全部平台组件及接口打下基础。
第4、5章 云开发
云开发可以显著降低开发者的运维成本和运维复杂度,对于独立开发者来说尤为适合。云开发技术一直在快速进化,不断有新能力、新接口出现。在这两章中,我们将进行基础云开发(云函数、云数据库、云存储)方面的实践,了解其运行机制,这样无论以后云开发技术如何推陈出新,我们都能快速掌握和运用。
第6、7章 后端
这两章主要讲解如何编写后端程序,是重中之重,我们尽量将实践内容简化,同时保持技能实践的全面性。我们将用两种常用的后端技术Node.js和Go编写同一套接口,实现相同的后端程序功能。Node.js是“后端的JS”,好入门、易上手、应用广泛,值得学习;Go语言天生支持高并发,被称为“互联网时代的C语言”,是全栈工程师必学语言之一。
读者对象
每一本书都有它特定的读者,本套书面向编程新人,主要包括以下人群。
❑大中专院校的在校学生及编程培训机构的初学人员。
❑准备转型开发的运维人员和产品经理。
在阅读过程中如果感到吃力,可以先学习番外篇中的计算机基础、JS语言语法和Go语言语法等内容。这些内容在笔者公众号“艺述论”中回复相应关键字即可看到。
如何学习本书
本书基于PBL教学理念撰写,以一个小游戏项目贯穿始终,内容由易到难,建议初学者按部就班地从前向后依次学习。为了启发读者思考,书中特意增加了以下两类内容。
❑原因探索引导。读者在书中可能会看到一些运行错误,这些错误是我们在实际开发中经常会遇到的,这时适合停下来,想一想为什么会出现这样的问题,应该如何解决。
❑拓展内容。书中凡标题中带有“拓展”字样的小节都属于实践拓展内容,这些内容与当前的实践密切相关,有助于加深对当前实践主题的理解。
本书附有随书示例源码供读者下载,关于源码的使用,有以下两点说明。
❑示例源码是分目录独立放置的,各目录下的示例互不影响。代码顶部一般都附有源码文件的相对地址,另外当某课内容涉及代码运行及测试时,也会提示示例的相对目录,读者只需查看对应的示例即可。
❑对于不同语言的示例源码,需要使用不同的测试方式。如果是JS代码,可以使用Node.js或babel-node测试;如果是小游戏项目源码,则需要通过微信开发者工具测试。具体如何使用,书中都有详细讲解。
如何获取更多资源
为方便读者学习,本套书为读者提供以下额外资源。
项目源码与读者交流群
关注笔者的微信公众号“艺述论”,回复关键字10000即可下载所有随书示例源码。同时,还能看到读者交流群的入口。欢迎所有读者进群交流。
为了避免因为软件版本差异给读者带来不必要的使用困惑,笔者将书中用到的所有软件也放在了源码包中,下载后在software子目录下即可看到。
勘误与支持
限于笔者水平,书中难免会存在一些错误或者不准确的地方,你在阅读过程中如有发现,欢迎来信告知。笔者邮箱是9830131@qq.com,请在来信标题中注明“小游戏勘误与建议”。另外,也欢迎你提出其他任何批评及改进建议。
致谢
感谢一直支持我的家人和朋友,感谢每位读者,真诚希望每个人都能学有所成。