普通程序员和优秀程序员的距离究竟有多大?
点击上方“CSDN”,选择“置顶公众号”
关键时刻,第一时间送达!
一夜暴富不容易,但一夜间改变自己成为一名更优秀的程序员还是可以的。
Recurse Centre 是纽约市程序员的一个校友社区,在全球拥有 1200 多名聪明、热情、乐于助人的程序员。本文的作者 Henry Stanley 是 Recurse Centre(简称 RC)的一名学员,在 RC 的第一周,工作人员就教育他们要克服所有困难,成为一名更好的程序员。本文就来一探究竟。
以下为译文:
在 RC 学习的第一周,工作人员想让我们做一件很重要的事情——那就是克服所有困难,成为一名更好的程序员。
这是什么意思?一夜之间变成更好的程序员究竟指的是什么?
我总结了几个程序员应该努力改善的方面,并且提出了几种处理这些问题的方法,如果你有更好的建议,也欢迎留言评论。
▌直接学习技能
表面上看起来,初级技能似乎在应用上相对狭隘,比如我为什么要学Haskell或Go呢?除非我的工作中需要用到它们。
但是编程知识需要相互结合。你所学的每个额外的东西都不是独立的,它们会以你可能想不到的方式与其他知识点融会贯通。
掌握Go语言罕见的并发模型,也许与你的日常工作没有直接关系,但是可能当你在其他语言中遇到棘手的并发问题时,对你所有启发。
当你想办法用一种动态语言写代码的时候,Ruby的元编程可能会很有用。
技能选择指南
选择与你日常工作紧密相关的知识点。例如,如果你是一个Ruby开发人员,那么花费五分钟了解一下如何使用PRY调试器,会让你受益良多。
从这个角度来说,你应该提高常用的技能,比如掌握操作系统、版本管理软件、文本编辑器以及快捷键等。
还有一些知识点可能与你的专业领域相距甚远,但仍然高度相关(可能间接地通过其他知识点)。这就解释了为什么一种与你经常使用的语言不同的语言也会非常有用:这些语言介绍的高层概念也可以运用到其他领域。
之前就有一个RC其他班的人发现尝试用Idris和类型驱动开发,不仅十分有趣,而且可以学习类型的基本理论,而该理论也适用于很多其他语言。
已知的未知领域
随着学习技能的增多,你不仅可以建立自己所学的知识库,而且也会在意未涉足的领域。这些已知的未知领域至关重要,因为你知道自己接下来想学什么,并且在解决问题的时候知道从哪里寻找解决方案。
识别已知的未知领域也是很重要的。描绘更为完善的一门学科的知识图(理想情况下应当包含不太了解的领域),还可以通过阅读学科相关的文章或与专家合作,将你的知识点扩展到这些未知领域。
▌学习软技能
还有一些软技能你可以学习:这些技能能帮助你更好地提升自己。
学习方法:刻意练习
虽然‘学习风格’(例如视觉、听觉或动觉的学习者)这个观念似乎有点神秘,但是无疑在学习方式上大家有各自的喜好。花点时间尝试不同的方法,然后评估哪个才最适合自己,所谓工欲善其事必先利其器。
但是搞清楚该领域的哪种方式才是你最感兴趣的也不是一件易事。想想看很多人虽然每天都在打字,可还在用二指禅。重复性并不能保证掌握一项新技能,你需要勇于挑战自己。这当然很痛苦。
这个技能可以在反复的练习中不断提高。
James Clear写了一篇非常棒的文章,指导大家如何进行刻意的练习:https://jamesclear.com/beginners-guide-deliberate-practice;
一般来说,你需要尝试挑战并得到反馈:
尝试挑战意味着你需要做非常艰难的事情,并测试你能力的极限,而不仅仅是重复旧知识。如果你非常熟悉一门编程语言,那么就尝试一种新的语言。你的本能可能会告诉你使用一门不熟悉的语言会有多难,但这是好事。
获取反馈的方式有:让别人审核你的代码、结对编程、有时编译器说你的代码糟透了,但是拥有一个反馈回路,这可以督促你前进,这非常关键。
识别常见的错误
对于网球爱好者来说,并不是谁技高一筹谁就可以取胜。相反,比赛看的是谁犯的错少。
当然,成为专业选手是一个长期努力的过程,比赛中犯错的选手会被淘汰出局。一旦教练看到选手出错,就会马上帮他们纠正。业余爱好者不必经历这个淘汰的过程……
因此,每个人的策略应该是逐步确认并克服这些巨大且代价昂贵的新手错误。这远比加快速度、加大打球的力度、或偶尔打个漂亮球来得更重要。
通常我们可以通过反思做到这一点。如果你对自己很诚实,那么你可能已经知道问题所在了。也许:
你放弃了项目,或者学习新技能的方式太快了;
你每天要在手机或社交媒体上闲逛,白白浪费大量时间;
你的睡眠不充足,充足的睡眠可以让你更高效;
你从不寻求帮助,结果所有的项目花费的时间都比预期长。
事实上,这些方法我都有试过(我在努力改正!),只要改正以上任何一条,都会大幅提高你的效率。
深入工作
对程序员来说,深入工作是最重要的软技能之一。
深入工作是纽波特(Cal Newport)为专注复杂的工作起的名字。学习技能和刻意练习都是深入工作的例子。
与之相对的是浮浅工作(Shallow work),很无聊,工作内容非常简单,对个人发展没有任何好处。回复邮件、查看消息、做日程计划等等,这些工作都很简单,老板给你发工资并不是为了让你干这些(尽管你要是不做这些工作的话,压根别想领工资)。
能够深入工作似乎是一种可以学习的技能。如果说我从 RC 学到了什么的话,那可能就是长时间的注意力集中、更加了解自己的弱点和容易分心,以及完成深入学习的规则。
更多深入的工作包括有:
读书(或者只读总结);
我发现番茄工作法(选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事,直到番茄时钟响起)十分实用,它会为你的一天设好一定的节奏,而且看到一个个完成的深入工作非常鼓舞人心;
建立深入工作时间表;
在 RC,每天早上 10 点左右我会进入深入工作,并在午饭前完成 2-3 个小时的深入工作。
Azeria实验室的Maria Markstedter在博文中(https://azeria-labs.com/the-importance-of-deep-work-the-30-hour-method-for-learning-a-new-skill/)建议,要学习一门课程你至少需要投入 30 个小时(每次 4 小时,一共 7 次)的深入学习。在真正了解你是否喜欢这门课程前的 1-2 个小时你很容易放弃,提前做承诺会让你很有动力。
意志力是可以被耗光的资源,确认你没有在琐事上消耗意志力。
关掉手机,以免分心;
关闭电脑上容易让你分心的应用,例如短信、邮件、设计媒体客户端等。
▌写在最后
最后,我想澄清下,如果你讨论的是某个具体的主题,那只是初级的讨论。如果你讨论的是事实的变化无常,那是软技能。
我们可以引用Richard Hamming《你与你的研究》中的一段话来表示(https://www.cs.virginia.edu/~robins/YouAndYourResearch.html):
知识和生产性就像复利。假设有两个人的能力差不多,其中一个人工作的时间比别人多 10%,那么他的产能可能是另一个的两倍。你知道的越多,学习的就越多;你学到的越多,那么能做的就越多;你能做的越多,那么得到的机会就越多——这就像复利一样,可以利滚利。
原文:https://recurse.henrystanley.com/post/better/
作者:Henry Stanley
译者:弯月,责编:郭芮
征稿啦!
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。
————— 推荐阅读 —————
点击图片即可阅读