通过「刻意练习」,你才能成为顶尖的程序员
作家格拉德威尔在《异类》一书中指出:
人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成超凡的必要条件。
他将此称为「一万小时定律」。
要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。
如何打破无休止的加班?
在中国,IT 行业普遍加班严重,先不说行业特征与企业文化。
就我最近面试的经验来看,很多程序员的开发效率实在是低到不忍直视。
所以「效率」是一个导致加班的重要因素。
如果你效率高,但迫于企业有加班的文化,你完全可以用加班的时间来学习一些新的技术,进一步提高自己的效率。
效率低会引起下图的怪圈:
效率低 -> 无法按时完成工作 -> 加班 -> 没有时间练习 -> 效率越来越低。
要打破怪圈,有效的办法就是「刻意练习」,从此进入一个正向循环:
效率高 -> 提前完成工作 -> 练习提升 -> 效率越来越高。
别把工作当练习
演员在台上的表演算是练习吗?球员在比赛场上算练习吗?不算。
那么对程序员而言,工作上做项目算刻意练习吗?
我以前以「能边学边做」为荣,API、语法之类的没必要看,反正我们有 Google 和 Stack Overflow 嘛。
直到我参加了 Hackthon 之后改变了这个观点。在极短的时间内,要把一个创新的想法,用技术手段实现出来。
这个时候如果你还在查某个接口应该怎么用,某个语法应该怎么写,能竞争得过别人吗?
现实工作中何尝不是如此?商业竞争如此激烈,假设你要做个推荐系统,你是找做过的来做,还是边学边做?
所以我认为练习应当发生在工作之外,一旦上了战场,不是你死就是我活。
怎样练习才有效?
并不是所有的练习都是有效的,没找准地方,只是在浪费时间。
比如,我用吉他弹一首曲子时,某个小节老是弹不好,我就会单独把这一个小节拿出来重复练习,而不是把整首曲子一遍一遍地重复练。
专家研究表明,只有在「学习区」练习才最有成效。
我们应当走出舒适区,多在学习区练习,将其变成舒适区;
接触恐慌区,将其慢慢变成学习区。
这样才能避免原地踏步,持续提高。
程序员怎么练习
走出自己的舒适区
首先要走出自己的舒适区,接触一些不熟悉的技术领域。比如后端很熟悉了,去写写前端试试。Web 很熟悉了,去写移动端试试。
业务开发很熟悉了,去研究一下搜索,推荐系统,大数据试试。OO 很熟悉了,玩 FP 试试。
老守着自己会的那点儿东西,总有一天会坐吃山空。
发现自己的不足
有以下方式:
录视频
Code Review
结对编程
参加编程道场
没有对比,很难发现自己的不足,所以把自己的代码和编码过程展示出来,一定会发现许多可以改进的地方。
只有菜鸟才会觉得自己特别牛,因为物以类聚,他的圈子里全是菜鸟。
你越牛,接触的圈子也越牛,你越会觉得自己渺小。
程序员练什么?
程序员要练习东西很多,一些基本功如下:
打字
编程语言
编程范式
编辑器
快捷键
TDD
Clean Code
重构
...
没时间不是借口
我第一次组织 Code Retreat 的时候,到 QQ 群里宣传活动,结果得到的是嘲讽:
周末还在写代码,肯定是屌丝。
很多人没有时间练习,却有大把的时间打 LOL,大把时间在群里吹水,大把时间讨论楼市股市。
当然,人都有选择自己生活方式的权利,并没有谁对谁错。
说这么多,只是希望真正热爱编程的同学们知道,只有通过刻意练习,才有可能成为顶尖的程序员!
在 CodingStyle.cn 这个社区里,我们会组织 Code Review,Code Retreat,Coding Dojo。
希望我们一起成长,成为顶尖的程序员!
「软件匠艺社区」旨在传播匠艺精神,通过分享好的「工作方式」和「习惯」以帮助程序员更加快乐高效地编程。