你成就的所有事情,首先就是做了一个小小的决定,然后伴随着一个又一个的决定,每个决定又跟着一些要完成的动作或任务,一段时间以后,神奇的事情就发生了。
所有伟大的,看起来不可能的事情都是这样实现的,就是由一个个细小的决定组合而成。这是前两天我从偶然看到的一个 TED 演讲中得到的启发,我觉得我们 “英雄” 所见略同:)
其实古人早就已经给我们总结了这个方法,“不积跬步,无以至千里;不积小流,无以成江海。”,上学的时候我们都读过这句话,只不过只是把它当作一句普通的话,其实这就是成就所有事情的秘籍。
我们认为难做的事情,难学的东西,可能不是因为事情难做,东西难学,而是一种捷径心理。我们都希望能通过某种方法或捷径,一下子就把事情做成了,一口气就把东西学会了。比如用一道公式解决英语学习。
有时候我们是被事情本身吓到了,如果把它当作一个整体来看,的确挺吓人的。但是,当把它分解成一块一块的小任务,每个小任务全都可执行,这样就没那么可怕了,因为你知道,只要一个一个的把这些小任务全部都完成就行了。整体可怕,小块可行。
介绍
最近我们将组织一次服务端应用开发的训练营,去试验一下上面提到的这种 “小块任务” 学习方法。将在本周六开始,到六月底结束。
这次训练营我们要完成的是一个基于 Node.js 的服务端应用。Netflix、Uber,还有国内很多厂商都广泛地在它们提供的服务里应用了 Node.js。 Netflix 提供了流媒体订阅服务(类似爱奇艺、小米电视等等),全球有 1 亿的付费订阅用户,你多少都听说过或看过它们出品的几部美剧。Uber(类似滴滴出行)提供的是打车服务,现在已经上市了。
在众多创建服务端应用的方法中,基于 Node.js 是其中的一种方法。在 Node.js 的生态圈(社区)里提供了大量的可以直接使用的功能模块(Package),还提供了很多应用框架(Framework),我们在训练中介绍使用的是一个叫 Nest.js 的服务端应用框架。
服务端应用可以为前端、小程序、移动端应用等等提供后台服务,就是为这些客户端提供了数据存储、处理的能力。比如一个人在我们的移动端应用上提交了注册请求,这个请求会由服务端应用来处理,比如把请求注册的用户名与密码存储在应用的数据库里,给用户填写的邮件发送一封邮件,或者给用户填写的手机号上发送一个通知短信等等。
在这次训练中,我们只专注于开发服务端应用。会去建一些功能的接口,这些功能接口可以供各种不同的客户端使用,比如浏览器(前端 )、小程序、移动端应用等等。在训练中调试、测试使用这些功能接口,会用到一款名为 Insomnia 的桌面版客户端软件,通过这个客户端软件去请求我们开发的服务端应用的接口。
在你了解了前端、小程序、移动端应用的开发以后,就可以利用我们在这次训练中开发的服务端应用接口了。
日期
2019/6/15 — 2019/6/30
2019/7/15 — 2019/7/30(第二回)
任务
这次训练营就是把一个开发技能切成小块的可完成的任务。正式训练内容有 6 万中文字,5 千英文单词,如果跟你说,你要做的就是理解这 6.5 万个字,这听起来有点可怕。不过我们可以把它切成小块的任务,每天完成一些。
6.5 万字分成了 1600 个段落,这些段落平均在了 160 个任务上,这些任务平均在 16 天完成,每天完成 10 个左右,这听起来就可行了。每天的训练内容大部分以视频的形式体现,时长大概是 20 分钟。
不过也不要认为这是很轻松的事儿,你一定会有头脑 “炸裂” 的感觉。我每次学习新东西的时候,总是有一个阶段有这种感觉,往往过了这个阶段再往后就会轻松很多,我想这可能是头脑的工作方式吧,先打乱,然后重新组合,让之前认为模糊的没意义的东西变得清晰有意义。
6/15 — 6/30 要完成的训练任务:
每一组训练里面包含了 10 个左右的任务,跟着训练视频一步一步完成,然后提交完成的代码。
- 6/15:准备训练 Prepare
- 6/16:请求与响应 Request Response
- 6/17:核心组件(一)Core
- 6/18:核心组件(二)Core
- 6/19:核心组件(三)Core
- 6/20:数据库 Database
- 6/21:数据操作 Data Manipulation
- 6/22:用户 User
- 6/23:身份验证 Authentication
- 6/24:内容关系 Relationships
- 6/25:内容分类 Category
- 6/26:内容标签 Tag
- 6/27:评论 Comment
- 6/28:分页与排序 Pagination & Sort
- 6/29:权限控制 Authorization
- 6/30:文件上传 Files
目标
6/15 — 6/30,目标就是完成所有的训练动作,就是只要你能跟着训练视频,把视频里所有代码敲一遍,并且能够得到同样的结果,就这算完成了训练动作。
在训练过程中,能够理解多少动作就理解多少,把不能够理解的动作记录下来,我会提供辅助,如果能即时解决最好,不能即时解决也没关系,等所有训练完成以后再去解决它们。
准备
训练准备是 6/15 要做的任务,主要是准备好训练中使用的工具,这就是你平时真正做开发的时候用的工具。另外还要准务一下应用需要的开发环境。训练营成员可以在 nnc2019.ninghao.co 的 prepare
频道里下载到所有需要的工具。
工具
在训练中主要用到了 5 个工具,这些工具都会是以后你在做真正的开发的时候要用到的工具。
- 命令行界面:终端 / Cmder
- 代码编辑器:VSCode
- HTTP 客户端:Insomnia
- 数据库客户端:TablePlus
- 源代码管理:Git
所有这些工具,不需要单独学习,训练中用到什么再学什么就可以。除了 Git 以外,大部分工具的用法都很直观。Git 也只需要理解几个关键概念,会用几个命令就完全可以开始使用了。
环境
在训练中开发的是一个基于 Node.js 的服务端应用,所以在本地开发的时候,要准备一个运行 Node.js 应用的开发环境。只需要下载安装一个 Node.js 就行,另外应用使用了 MySQL 数据库系统存储应用里的数据,所以我们还需要在本地安装运行一个 MySQL 数据库管理系统。
- Node.js(v11.3)
- MySQL(v5.7)
在做数据库相关的训练中,我们会一起用 Docker 在本地创建一个 MySQL 数据库服务。如果你在本地运行 Docker 有问题,可以考虑其它的方法,比如直接下载并安装 MySQL。
其它
你可以在自己平常用的浏览器上打开训练网站,观看任务视频,如果你发现不能控制视频的播放进度,可以换用 Firefox 浏览器。或者直接把视频下载到本地电脑上,使用 VLC 媒体播放器进行播放。
- Firefox 浏览器
- VLC 播放器
训练
训练营场地是用一个开源的 Node.js 即时协作应用搭建的,运行在一台 2G 内存的阿里云 ECS 服务器上。有时需要重启服务器或应用服务来释放一下内存。
训练营成员的邮箱里会收到一封包含了 用户名/密码 的邮件(邮件已发送,如果没在收件箱找到,可以检查一下垃圾箱)。如果没收到邮件或登录时遇到问题,请加微信:wanghao_8088,或发邮件至:mail2019@ninghao.net 。
网站
App
iOS 用户可以在 App Store 里搜索并安装 “NinghaoCamp”。
方法
1、获取每天的训练任务
在 nnc2019 的网站与 App 上可以查看当天或之前的训练内容。在频道目录里面,你会看到公开的频道列表,在里面你可以找到当天或之前的训练频道,打开以后,点击 “加入” 就可以了。每天在北京时间 00:00 将会发布当天的训练频道。
2、参与训练完成任务
每天在当天的训练频道里要做一组训练,每组训练里有 10 个左右的任务。跟着任务视频或文字完成了任务里的每一个动作,敲入每一行代码,并且得到了同样的结果,这就算完成了任务。
你可以在 nnc2019 网站或 App 上观看训练任务的视频。不过要注意,如果你用的是 Chrome 浏览器,不能控制任务视频的播放进度,你可以下载 Firefox 浏览器或者使用 Safari 浏览器,在这些浏览器上都可以控制视频的播放进度。另外你也可以把任务视频下载到本地,然后使用本地电脑上的视频播放器播放任务视频,比如使用 VLC 播放器。
每个任务视频的下方会包含在视频里说过的每一句话的文字版本。如果你对视频中的某句话有疑问,或遇到了障碍,可以找到对应这句话的文字,然后点击右侧的竖着的三个点小图标,这会打开一个菜单,然后选择 “回复主题”,然后在页面下方的信息框里输入文字描述清楚遇到的问题或记录你的疑问。
选择 “回复主题”,输入你要发布的信息,发布之后这段文字就会变成一个 “主题”,这样大家都可以在这个主题的下面留下自己的回应。
3、提交完成的训练任务代码
6/15 — 6/30 这期间,不会公开训练任务中的代码,也就是训练任务中的每一行代码,你都需要亲手敲上去,这非常非常重要。每完成一个任务做一次提交,完成当天的所有任务以后,要把代码推送到你在 github.com / coding.net 上为应用创建的远程仓库的上面,我们最终会用你提交的代码来判断你是否完成了所有的训练任务。
关于如何提交训练任务代码的具体操作流程、相关的概念可以关注后续发布的宁皓网博客。
联系
- 网站:nnc2019.ninghao.co
- 邮件:mail2019.ninghao.net
- 微信:wanghao_8088
- 报名:https://ninghao.net/signup
评论
才看到啊!哎,错过了
5 年 5 个月 以前