文章 答疑

演进:在工作的前三年里快速成长(练习篇)

工作三年,著有《自己动手设计物联网》、《全栈应用开发:精益实践》。 作为技术专家审阅了《Angular 2 Services》、《Smart IoT》等四本外语书。 在GitHub开源有《Growth:全栈增长工程师指南》等七本电子书,并译有《物联网实战指南》。
文章

有人可以靠中彩票,然后一夜暴富;有人随随便便发几张自拍,就一不小心一夜成名。可技术成长,要一步一个脚印地练习,才能掌握某项特定技术。等到我们掌握了学习的技巧,才能用更短的时间,来掌握某项特定的技术。

而练习,也不是一天里写一万行代码,也不是重复写一百行代码,而是在一百天里,每天写下一百行代码。它需要一定的技巧,不懈的坚持,还有一些休息。因此在这篇文章里,我将分享工作几年里的练习技巧:

  • 基础篇:正确的练习姿势。从程序员的基本技能:盲打,到练习使用快捷键、重构技能等,再到如何使用新的框架练习。

  • 进阶篇:如何通过练习来提高。初学时,我们可以使用 Vue、React去高仿一些项目;有经验以后,高仿应用只会让我们更累。我们便需要一些更高级的练习技巧,从引入别的框架思想,到造各式各样的轮子。

  • 找到合适的时间练习。早上,慢慢进入状态;中午,适合做一些 Review;碎片时候,可以做一些知识的管理等等。

  • 怎样才能持之以恒下去。分享一些制定目标的技巧,及激励自己的方式。

当然,练习有一个大前提是:我们有充足的时间。时间是一种很珍贵的资源,特别是对于长期加班的开发人员来说。因为技术能力不足导致的加班,会变成恶性循环。

如果你还没工作,那么便相当的幸运,你有相当多的时间。工作的时候,大家都忙于实现业务功能,没有时间让你提升自己。如果你已经工作了,那么你需要每天预留一些时间,才有机会去练习。每天会占用一些游戏、看电视时间,哪怕只是半个小时,一周、一个月、一年下来,帮助就很大了。

进行这些练习之前,请不要忘了根本——能熟练地用框架、语言完成工作。完成工作,相当于必须达到的 60 分及格要求。在胜任工作之外,提高能力到 80、90 分,追求更好的技术能力,才是正确的路线。

下面,让我们开始第一部分的内容吧~。

基础篇:正确的练习姿势

编程的时候,我们只是在码字——编码的过程(即思路)实际 上是在脑子里完成的。娴熟的码字能力,可以帮助我们更好地编程。

小学时,自参加了五笔打字比赛之后,便开启了我的编程生涯。可当工作的时候,已经可以熟练的完成工作的我,仍然无法打对每一个字符。有一天,看到了一个名为 Typing 的在线代码打字练习工具。练习了一次之后,发现它会给出一些建议,便开始进行了一些编码练习。但是得到的反馈能表明,在打字这方面,仍然有一些提升的空间:

Typing 错字

我的“自我解释”是:今天的编程语言设计得不合理——使用了各种字符,导致了右手在这方面的负担比较大。在那之后,我便陆续进行了一些基础的练习,并整理他们的因果关系,便有了下面的一些练习项目:

  • 作为经常用电脑的人,应当掌握好打字的基本技巧,比如说采用正确的打字姿势,以及盲打技能。

  • 作为一个程序员,应当“精通”使用手上各式的IDE、编辑器,熟练使用它们的快捷键。

  • 作为一个专业的程序员,我们还要将重构代码、命名等高级的技巧掌握好。

这些练习,可以让我们成长为一个更专业的程序员。

语言与框架的练习

对于语言与框架的练习,算是比较简单的。于我而言,这种练习过程便是:

  1. 买本相关的书籍,或者寻找份教程、官方指南。

  2. 再找个合适的 Demo,熟悉基础概念,并掌握好相关基础。

  3. 在 Demo 的基础上,实现一些业务功能,了解各种功能、特性。

  4. 查看官方文档,查有没有漏掉了什么重要的东西。

  5. 撰写博客、日志来记录这个过程。

因此,只需要找一个合适的网站、APP,作为模仿的对象,一步步往下练习即可。唯一的难点在于,第一次写 Web 应用的时候,可能会多花费更多的时间。新手期的程序员,对很多的概念都不清楚,如若能找到一个新手社区、群体,提高起来就会方便多了。

熟练使用语言或者框架,不能帮助我们成为一个『优秀』的成员。只能带领我们成为一个“胜任”的程序员,即我们可以凭借着这种练习,找到一份养家糊口的工作。

工程实践练习:模仿开源软件

工作的时候,写的都是业务代码,纯技术上的实践并不多。这意味着,多年的工作经验,与技术能力的关系并无太大关联。如果有一天,我们看到几年前写的代码,和今天写的代码并没有太大的区别,那么说明了:我们已然陷入了这样的一个瓶颈。

在学校写的代码,与工作写的代码,最大的区别在于:软件工程实践。单单凭借工作经验,那么在软件工程实践上的提高可能不会太大。受限于上线 deadline 的影响,多数项目的软件工程实践,并不能做到最好,甚至可能很差劲。如我们所见,国内的大部分公司(包括BAT)在这方面的实践也很难做全,更不用说做好。这些实践包括:

  • 使用版本管理。诸如 GitHub 上的项目采用的 Git,基本已经普及。

  • 使用持续集成。它可以为团队协作,提供一个可靠的帮助。

  • 完整的测试用例。编写单元测试、功能测试等等。

  • 代码检视。用于提高整个项目的质量。

  • 等等。

而对于一个优秀的开源软件来说,为了保证好项目的质量。拥有者往往付出了很多的精力,在提高软件工程的实践上。因此,对于软件工程实践来说,最好的练习,便是模仿开源软件,并自己去创造一些轮子。以 React 为例,其在首页拥有下面的几个徽章(badge):

React Badge

分别是:

  1. Circle CI,即持续集成,诸如测试是否都通过、部署是否成功等等。

  2. Travis CI,同上。

  3. Coverage,代码的测试覆率,81%。

  4. npm,当前的版本号。

  5. PRs welcome,即欢迎来 Pull Request。

那么,我们在实践的时候,就可以模拟这样的项目组成,一步步往下实践:

  1. 为项目添加测试框架,如 Java 里的 JUnit,Node.js 里的 Mocha 等等。

  2. 添加自动化测试脚本,如 Java 里的 Gradle,Node.js 里的 Grunt、Gulp、NPM 等等。

  3. 添加测试覆盖率工具。

  4. 添加持续集成,如 Travi CI 或者 Circle CI。

  5. 添加代码质量分析工具,如 Code Climate。

  6. 制定目标,并完成。

最难的实际上是最后一步,制定一个目标并实现。它可以是测试覆盖率要达到 90% 以上,这就需要一步步的来完成。如先将目标放到 60%,再慢慢地往上提升,直到 90%,甚至 100%。在这个过程中,会不断地遇到一些挑战,如难以测试的代码为了编写测试而修改功能代码等等。但是,它能确确实实地帮助我们提高工程能力。

基础练习:从码字到盲打

编码的时候,如果我们心里想输入的是一个print,结果打下的字符是 oront,那么我们就需要删了重来。又或者是小心翼翼地,边看键盘边输入一个个字符。虽说,编码只是一个打字的过程,但是很多时候,经常出现的错字会中断我们的思路。因此,盲打应该成为程序员的基本技能。而这里的盲打,指的并不是我们可以闭上眼晴打字聊天,而是可以完成编程工作,即能盲打下 26 个字母,及各种字符,还有各种功能键。

而在进行这一类练习的时候,我们经常会遇到的一个障碍:度量。即以某种方式来衡量练习的成果,我们做了很多的练习来提高自己,但是没有数据来支撑。它不像编码,我们写了几行代码,完成了一个功能,那么写下的这些代码的价值就是可以衡量的。因而练习的时候,我们可以寻找一些合适的工具,如 Typing.io、Keybr.com 这一类工具。如 Typing 使用的是真实的代码片段,它能帮我们发现真实场景下:我们容易打错哪些字,容易按错哪些键,我们的打字速度是多少等等的内容。

对于可以衡量的打字练习,我们可以订下每天十几分钟的时间,一段时间要提升到什么水平的目标。这样它便能满足SMART原则,就能让我们看到我们在这段时间内的提升。

当时,我拿 Typing 练习的时候,差不多练习了一个月,每天大概半小时左右。因为打字的速度比较快,所以容易出错,所以便将注意力放在减少错误上。而对于有些人来说,则是相反的,即打字速度比较慢,但是准确率比较高。而这个练习的主要目的是,能熟练地做到盲打,不让它影响我们的效率。

掌握了熟练开关机、键盘上的各种按键后,我们就在使用工具上做一些效率的提升。

基础练习:掌握开发工具

刚工作的时候,发现每个有经验的程序员,几乎可以不用鼠标编程。熟练的使用各种快捷键,进行代码重构、打开新页面、开启新窗口等操作。慢慢的,我觉得自己在这方面上有相当大的提升空间。

这意味着,我要学习、探索开发工具的功能,也要能使用快捷键来控制。尽管在日常结对编程、代码检视、交流的时候,可以请从别人身上学习。但是理想的方式,还是应该自己去练习。

对于大部分的开发工具,它们都有对应的手册、Keymap 或者 cheatsheet,即“作弊表”。如下是 Intellij Idea Keymap 的截图。

Intellij Idea Keymap

上面列出了其可用的快捷键,及其相应的用途。因而只需要打印好,放在眼睛能看到的地方,就能有效的改善。除了打印成纸质资料,他们还可以有不同的形式,如鼠标垫、杯子的形式。需要的时候,便可以一眼看到;平常多看到几次,也能多多少少的多记住一些。

需要注意的是:对于开发工具而言,没有必要掌握所有的快捷键,而是只掌握常用的功能。我曾陷入了一个误区,练习使用快捷键的时候,边练习一些重构的技巧,同时也花费了时间在练习一些『屠龙之术』上——一些非常少用的功能,除了炫耀,也没有什么用。时间一久,我便忘了很多的快捷键。

再举些例子:如 Vim,对我而言,一般用于服务器维护及 Git 修改。因此,主要使用的功能便"

"
即可阅读全文

打开微信"扫一扫",将本文章分享到朋友圈

快给朋友分享吧!

收藏 收藏

1236人已收藏