正文
作者/分享人:Phodal,全栈增长工程师。工作三年,著有《自己动手设计物联网》、《全栈应用开发:精益实践》。 作为技术专家审阅了《Angular 2 Services》、《Smart IoT》等四本外语书。 在GitHub开源有《Growth:全栈增长工程师指南》等七本电子书,并译有《物联网实战指南》。
有人可以靠中彩票,然后一夜暴富;有人随随便便发几张自拍,就一不小心一夜成名。可技术成长,要一步一个脚印地练习,才能掌握某项特定技术。等到我们掌握了学习的技巧,才能用更短的时间,来掌握某项特定的技术。
而练习,也不是一天里写一万行代码,也不是重复写一百行代码,而是在一百天里,每天写下一百行代码。它需要一定的技巧,不懈的坚持,还有一些休息。因此在这篇文章里,我将分享工作几年里的练习技巧:
基础篇:正确的练习姿势。从程序员的基本技能:盲打,到练习使用快捷键、重构技能等,再到如何使用新的框架练习。
进阶篇:如何通过练习来提高。初学时,我们可以使用 Vue、React去高仿一些项目;有经验以后,高仿应用只会让我们更累。我们便需要一些更高级的练习技巧,从引入别的框架思想,到造各式各样的轮子。
找到合适的时间练习。早上,慢慢进入状态;中午,适合做一些 Review;碎片时候,可以做一些知识的管理等等。
怎样才能持之以恒下去。分享一些制定目标的技巧,及激励自己的方式。
当然,练习有一个大前提是:我们有充足的时间。时间是一种很珍贵的资源,特别是对于长期加班的开发人员来说。因为技术能力不足导致的加班,会变成恶性循环。
如果你还没工作,那么便相当的幸运,你有相当多的时间。工作的时候,大家都忙于实现业务功能,没有时间让你提升自己。如果你已经工作了,那么你需要每天预留一些时间,才有机会去练习。每天会占用一些游戏、看电视时间,哪怕只是半个小时,一周、一个月、一年下来,帮助就很大了。
进行这些练习之前,请不要忘了根本——能熟练地用框架、语言完成工作。完成工作,相当于必须达到的 60 分及格要求。在胜任工作之外,提高能力到 80、90 分,追求更好的技术能力,才是正确的路线。
下面,让我们开始第一部分的内容吧~。
基础篇:正确的练习姿势
编程的时候,我们只是在码字——编码的过程(即思路)实际 上是在脑子里完成的。娴熟的码字能力,可以帮助我们更好地编程。
小学时,自参加了五笔打字比赛之后,便开启了我的编程生涯。可当工作的时候,已经可以熟练的完成工作的我,仍然无法打对每一个字符。有一天,看到了一个名为 Typing 的在线代码打字练习工具。练习了一次之后,发现它会给出一些建议,便开始进行了一些编码练习。但是得到的反馈能表明,在打字这方面,仍然有一些提升的空间:
我的“自我解释”是:今天的编程语言设计得不合理——使用了各种字符,导致了右手在这方面的负担比较大。在那之后,我便陆续进行了一些基础的练习,并整理他们的因果关系,便有了下面的一些练习项目:
作为经常用电脑的人,应当掌握好打字的基本技巧,比如说采用正确的打字姿势,以及盲打技能。
作为一个程序员,应当“精通”使用手上各式的IDE、编辑器,熟练使用它们的快捷键。
作为一个专业的程序员,我们还要将重构代码、命名等高级的技巧掌握好。
这些练习,可以让我们成长为一个更专业的程序员。
语言与框架的练习
对于语言与框架的练习,算是比较简单的。于我而言,这种练习过程便是:
买本相关的书籍,或者寻找份教程、官方指南。
再找个合适的 Demo,熟悉基础概念,并掌握好相关基础。
在 Demo 的基础上,实现一些业务功能,了解各种功能、特性。
查看官方文档,查有没有漏掉了什么重要的东西。
撰写博客、日志来记录这个过程。
因此,只需要找一个合适的网站、APP,作为模仿的对象,一步步往下练习即可。唯一的难点在于,第一次写 Web 应用的时候,可能会多花费更多的时间。新手期的程序员,对很多的概念都不清楚,如若能找到一个新手社区、群体,提高起来就会方便多了。
熟练使用语言或者框架,不能帮助我们成为一个『优秀』的成员。只能带领我们成为一个“胜任”的程序员,即我们可以凭借着这种练习,找到一份养家糊口的工作。
工程实践练习:模仿开源软件
工作的时候,写的都是业务代码,纯技术上的实践并不多。这意味着,多年的工作经验,与技术能力的关系并无太大关联。如果有一天,我们看到几年前写的代码,和今天写的代码并没有太大的区别,那么说明了:我们已然陷入了这样的一个瓶颈。
在学校写的代码,与工作写的代码,最大的区别在于:软件工程实践。单单凭借工作经验,那么在软件工程实践上的提高可能不会太大。受限于上线 deadline 的影响,多数项目的软件工程实践,并不能做到最好,甚至可能很差劲。如我们所见,国内的大部分公司(包括BAT)在这方面的实践也很难做全,更不用说做好。这些实践包括:
而对于一个优秀的开源软件来说,为了保证好项目的质量。拥有者往往付出了很多的精力,在提高软件工程的实践上。因此,对于软件工程实践来说,最好的练习,便是模仿开源软件,并自己去创造一些轮子。以 React 为例,其在首页拥有下面的几个徽章(badge):
分别是:
Circle CI,即持续集成,诸如测试是否都通过、部署是否成功等等。
Travis CI,同上。
Coverage,代码的测试覆率,81%。
npm,当前的版本号。
PRs welcome,即欢迎来 Pull Request。
那么,我们在实践的时候,就可以模拟这样的项目组成,一步步往下实践:
为项目添加测试框架,如 Java 里的 JUnit,Node.js 里的 Mocha 等等。
添加自动化测试脚本,如 Java 里的 Gradle,Node.js 里的 Grunt、Gulp、NPM 等等
添加测试覆盖率工具。
添加持续集成,如 Travi CI 或者 Circle CI。
添加代码质量分析工具,如 Code Climate。
制定目标,并完成。
最难的实际上是最后一步,制定一个目标并实现。它可以是测试覆盖率要达到 90% 以上,这就需要一步步的来完成。如先将目标放到 60%,再慢慢地往上提升,直到 90%,甚至 100%。在这个过程中,会不断地遇到一些挑战,如难以测试的代码,为了编写测试而修改功能代码等等。但是,它能确确实实地帮助我们提高工程能力。
基础练习:从码字到盲打
编码的时候,如果我们心里想输入的是一个print,结果打下的字符是 oront,那么我们就需要删了重来。又或者是小心翼翼地,边看键盘边输入一个个字符。虽说,编码只是一个打字的过程,但是很多时候,经常出现的错字会中断我们的思路。因此,盲打应该成为程序员的基本技能。而这里的盲打,指的并不是我们可以闭上眼晴打字聊天,而是可以完成编程工作,即能盲打下 26 个字母,及各种字符,还有各种功能键。
而在进行这一类练习的时候,我们经常会遇到的一个障碍:度量。即以某种方式来衡量练习的成果,我们做了很多的练习来提高自己,但是没有数据来支撑。它不像编码,我们写了几行代码,完成了一个功能,那么写下的这些代码的价值就是可以衡量的。因而练习的时候,我们可以寻找一些合适的工具,如 Typing.io、Keybr.com 这一类工具。如 Typing 使用的是真实的代码片段,它能帮我们发现真实场景下:我们容易打错哪些字,容易按错哪些键,我们的打字速度是多少等等的内容。
对于可以衡量的打字练习,我们可以订下每天十几分钟的时间,一段时间要提升到什么水平的目标。这样它便能满足SMART原则,就能让我们看到我们在这段时间内的提升。
当时,我拿 Typing 练习的时候,差不多练习了一个月,每天大概半小时左右。因为打字的速度比较快,所以容易出错,所以便将注意力放在减少错误上。而对于有些人来说,则是相反的,即打字速度比较慢,但是准确率比较高。而这个练习的主要目的是,能熟练地做到盲打,不让它影响我们的效率。
掌握了熟练开关机、键盘上的各种按键后,我们就在使用工具上做一些效率的提升。
基础练习:掌握开发工具
刚工作的时候,发现每个有经验的程序员,几乎可以不用鼠标编程。熟练的使用各种快捷键,进行代码重构、打开新页面、开启新窗口等操作。慢慢的,我觉得自己在这方面上有相当大的提升空间……
(本文还有6480字)
本文节选自演进:在工作的前三年里快速成长
预订本场 Chat,即可阅读全文、参与交流
更多精彩 Chat,等你来发现!