本文转载自公众号“读芯术”(ID:AI_Discovery)。
新年伊始,人们总会为自己立几个flag。然而一月已经过去了,很多人已经放弃了自己的目标,打算明年再做打算。是因为缺乏动力、没有时间来完成这些目标吗?大概率都不是。
与计划去健身房、健康饮食、一年读52本书或是任何常见的新年目标相同,编码也是一种需要养成和坚持的习惯。新年目标注定失败的原因之一即为:没有养成习惯。不仅如此,很多人无意识地中断坚持还会阻碍其实现目标。
培养编码习惯也是如此,也会有与其他习惯一样坚持不了的问题。有一些方法可以养成编码习惯并获得可持续的成果。引用Zulie Rane的话(这是我读过的关于培养习惯的最佳语录):“培养好习惯不需要21天、不需要神迹、不需要效率大师的祝福。”
将编码与兴趣结合
编码有时比较无聊,对编码内容不感兴趣的时候尤甚。最好的应对方法就是将编码与你的兴趣结合。所幸编码设计生活方方面面,很容易就可以将所学与兴趣结合起来。
如果对股市感兴趣,那就使用Python构建一个收集股票数据的程序,以便计划下一次交易。如果你是喜欢一级方程式的“车迷”,可以使用机器学习创建F1竞赛预测器。而如果对气候变化和传染病之间的相互作用感兴趣,就使用Python和数据可视化技术完成对气候变化与全球疟疾死亡的关系分析。
换言之,热情之所在,编码之所向。
使用“提示-惯例行为-奖励(cue-routine-reward)”惯性回路
这一习惯培养方法久经考验并广为流传。记者、管理学作家查尔斯·杜希格提出习惯回路(The Habit Loop),与神经学家、心理学家以及研究人员一道研究出了长期习惯的培养方法。他形容人们在新一年开始时总是对新年目标热情满满,然而往往二月即终。
他建议养成长期习惯的方法之一是“提示—惯例行为—奖例”,这一方法科学有效。首先选择一个“提示(cue)”或信号来触发习惯。然后决定收到提示后要完成的惯例行为/习惯(routine/habit)。最后,选择完成惯性后应获得的奖励(reward)。这样就完成了“提示—惯例行为—奖励”的习惯回路。
在笔者看来,这与研究人员教老鼠完成任务来换取食物奖励的方法异曲同工。而人类与老鼠有约80%相似的DNA。如果这一方法对老鼠们有效,那对我们一定也有效。
图源:unsplash
- 提示:提示可以选取某个特定时间、某种心情或外在提示(例如手机闹钟),视个人情况而定。
- 惯例行为(习惯):确定提示后,你就可以决定在此期间要完成的习惯。在本文设定下就是编码。我发现设定一个时间表对养成习惯很有效。否则,很难确定何时完成工作,或者是否已经完成了一天的习惯。因此,我建议将惯例行为设置为“我要编写1个小时的代码”或类似的内容。这样就可以确定例程的确切终点,然后发出奖励信号。
- 奖励:你需要确定完成习惯后所获得的奖励。这取决于动力或动机,可以是食物、玩会儿手机、户外散步等任何事物。在找到适合自己的奖励之前可能需要尝试不同的奖励。
- 成功小提示:查尔斯·杜希格指出,你必须预想出可能分散注意力的诱惑。通过事先确定原因(压力、分心等),可以指定应急计划,从而保持进度。
压力之下,你是否会摒弃能完成更多工作或多回复一封电子邮件的习惯?安装网站限制器,并将手机放在不可及的地方。干扰会不会破坏你的专注状态?选择一个适合自己习惯的时间,让自己不受干扰。
制定可量化的目标
虽然笔者本人畏惧SMART目标,但它不无道理。建立可量化的目标将是确保长期编码习惯的最佳方法之一。通过使用SMART可以确保实现目标,从而维持习惯。非SMART目标的一个例子:我将完美精通Python。
SMART是缩写,即建立明确的(Specific)、可量化的(Measurable)、可实现的(Attainable )、相关的(Relevant)、基于时间的(Time-based)目标。如果你的目标符合以上五个标准,则更有可能实现。换句话说,如果你制定的目标合适,就能养成一个长期的习惯。
不属于SMART目标的示例:我将成为Python高手。
属于SMART目标的示例:为了实现到年底精通Python的目标,通过完成6个教程的学习课程学习Python语言,并且本周开始,每天进行一个小时的编码来完成一个毕业项目。
为什么这个目标符合SMART:
- 明确:设定这个目标就是为了精通Python编程语言。且明确说明了如何精通Python(完成特定的学习课程)。
- 可量化:该目标是可量化的,要在今年年底之前实现精通Python的目标,从而设定了量化进度的特定时间。到年底,我的进步水平可以量化。
- 可实现:这个目标我可以在一年内实现,所以精通Python语言是可实现的目标。这是根据以前学习其他编程语言的经验确定的。
- 相关:我的总体目标(终极目标)就是成为一名数据科学家,因此这个目标与我的终极目标是相关的。学习Python是该过程的一部分,并且是数据科学家必需的一项技能。因此,这个目标与我的大目标有关。
- 基于时间:这个目标设定了完成目标的特定时间范围。在我定下目标的那一周起的一年我要完成精通Python的目标。
可量化的目标是养成长期习惯的基石。它们不仅提供了培养编码习惯的路线图,且必定有所成效。
做想做的项目
还在受编码教程的折磨吗?花费大量时间完成了教程后,你开始做第一个实操项目,这时你发现编码教程其实徒有折磨,因为你自己编写不了几行代码。这通常会导致放弃,然后几年后再次遇到编码漏洞时又不得不重新开始学习。这是一个恶性循环,导致你无法快速成为更好的程序员。
怎么解决呢?那就是做自己感兴趣的项目。
如果一开始只能编写一些变量和一些条件循环,这不过是你的起点。从那里开始,完成教程,然后立即将学到的知识应用到项目中。项目将一步一步地组合在一起,并且不知不觉中,编码习惯就会养成。
内在好奇心会让人们想去了解事物的运行原理,利用这点,你对项目的兴趣将确保持续产出(或用代码编写到IDE)。
图源:unsplash
前一天制定好编码任务
这一点在高效和自我提升大师的指导下流传甚广,如果对他们有用,那么对我们也同理。
前一天计划好要编写的代码,就无需受其干扰。如果习惯每天留出一个小时编写代码,提前计划就可以节省宝贵的时间。与其花一整个小时来计划任务,不如提前做好计划。这样你坐在办公桌前时,便会确切地知道需要做什么。
这种计划的形式可以是完成特定的教程、编写特定的任务、自动化流程或实践新概念。
关键是选择的任务要能在预留的时间内完成。许多程序员都认同接手一个部分完成的代码是很难的,除非是将流程写下来,可以确切地看到上次编写的位置,以及重新开始需要完成的下一步编码,否则很可能无法理解本来编写代码的思路。
让编码成为社交方式
人们总觉得程序员是地下室独自工作的,不要让刻板印象阻碍编码习惯的培养。无疑,编码是一项个人活动,但并不意味着应该孤独。人类天生就是社群动物(许多刻板印象下的程序员可能不认同),所以如果你正在努力培养编码习惯,请务必加以利用。
打破刻板印象,与朋友一起编码,配对程序,或是参加团体黑客松和Kaggle比赛。不要一个人一条路走到黑。
确保你喜欢所学的编码领域
这点似乎不言而喻,但是对于遇到的第一门编程语言或学科,人们往往不进行足够的研究就一头扎了进去,然后只能遇到什么学什么。这可能导致你不能真正享受所学内容。
不喜欢自己正在学习的东西,会直接否掉养成习惯的一切可能。因此,要选择一种可以让自己工作一段时间的语言或学科。这不意味着对最初选择的语言从一而终。相反,可以将其视为组织学习过程,从而更好地实现目标。
图源:unsplash
如果喜欢数据科学和分析:
- Python
- R
- SQL
- Julia
- MATLAB
如果喜欢网页开发:
- JavaScript
- Python
- HTML and CSS
- PHP
- TypeScript
如果喜欢软件开发:
- Java
- C#
- C++
- JavaScript
- Python
如果喜欢应用开发:
- Kotlin (Android)
- Swift (iOS)
- JavaScript
- Java (Android)
- HTML and CSS
养成扎实的长久的编码习惯有许多可采取的策略。养成一个习惯,可以确保在很长一段时间内都能从中看到成果,这些成果是在艰难过程中保持前进的动力。