原文:How to Become a Better Programmer – Use a Skill-Building Planner,作者:Amy Haddad

许多程序员都错过了一个简单的方法来提高他们的编程能力。

只要想想运动员、企业家、学生、健康爱好者和旅行者,他们是使用计划表的不同群体。计划表经常被用来提高生产力,以保持组织性和对任务进行优先排序。

但这仅仅是个开始。

计划表还可以帮助你:

  • 保持在直接的道路上——而不是在随机的道路上蜿蜒曲折,撞上死胡同
  • 衡量进展
  • 保持积极性
  • 征服冒名顶替综合症

如果计划表有这么多好处,为什么没有更多的程序员使用它呢?

他们应该这样做。

无论你是做了一个月、一年、十年还是更久的编程,我们所有人都有一个共同点:有很多东西需要学习,我们需要不断地在我们的手艺上得到提高。

这就是为什么所有级别的程序员都应该使用一个技能培养计划表。这是一个能让我们更快变得更好的方法,并能真正享受这个过程。这是我在做长跑运动员的时候学到的一个教训。

源于需求

我的第一次半程马拉松比赛是令人难忘的,我犯了一些错误。我在比赛中感觉很糟糕,因为我完全不在状态。另外,由于我没有进行适当的训练,我的完成时间令人沮丧。

然而,这次经历给我上了有用的一课,我继续将其应用于以后的技能,包括编程:计划表的力量。

知道我可以取得更好的比赛时间,我承诺再参加一次半程马拉松。在第二轮比赛中,我做了很多不同的事情,但有两件事很突出。我遵循了一个跑步计划,并写下了跑步日记。

这个计划很有用,因为它包含了所有的细节:我需要跑多少英里以及跑多快。

该日记仅由便笺簿和笔组成,具有定性目的。每天晚上,我都会写一些关于我跑步锻炼的笔记:我在跑步过程中的感受以及可能影响我表现的因素,比如我那天吃的食物。

正如我后来了解到的,计划和日记是技能培养过程中的关键因素。

计划中的细节和日记中的回复一起帮助我看到了进步,让我有责任去完成锻炼,并最终成为一个更好的跑步者。

我在第二个半程马拉松比赛中不仅远远超出了我的预期,而且我还很享受训练过程和比赛本身。

简单地说,结合使用计划表和日记本可以对你取得的成果产生巨大影响。在此后的几年里,我通过培养其他技能,包括编程,对这种计划/日记模式进行了测试。

我可以告诉你的是:如果你想高效地取得成果,就把计划/日记模式纳入你的编程日常。

让我们深入了解这一模式,以及它如何能使你的编程速度受益。

不同的技能+相同的过程=你想要的结果

当我开始学习编程时,我回想了一下我的跑步生涯,以及那些有助于加速我进步的习惯。我想到了计划/日记模式。我想,对一种技能如此有效的方法可以重新应用于另一种技能。

我是对的。

当我开始学习和改进编程时,我重新应用了这个计划表/日记本的组合(做了一些调整)。再一次,它使一切变得不同。

作为一名程序员,我详细记录了我每天和每周要做的事情。这些具体的细节构成了我的计划表/日记模式中的计划员部分。日记的一面是对我的工作和能力的个人评估,如:

  • 我在一天中犯的错误和学到的教训
  • 效果好的学习策略
  • 有助于或损害我的生产力的策略

这些回应是有用的,因为类似的评论会随着时间的推移悄然出现。所以我一直在寻找模式。当我发现一个模式时,这通常是一个进行调整的信号。或者,同样重要的是,我知道应该继续做什么。

同时使用计划表和日记可以帮助你保持在正确的道路上,衡量进展,保持动力,自我评估你的工作和能力,并征服冒名顶替者综合症。

让我们依次来看一下。为了简单起见,我将这种计划表/日记本模式简单地称为“计划表”。

采取直接的途径

培养技能的人往往有类似的经历:他们沿着许多路径蜿蜒前行,却屡屡陷入死胡同。培养技能变得费时、令人沮丧,而且很累。

这些都是为什么计划表可以如此有用的原因。它可以帮助你保持有序,并将你的时间和注意力集中在最重要的事情上。从战略上思考每一天和每一周,可以帮助你保持在直接的道路上——绕过一些随机的、无益的道路和死胡同。

这并不是说你在使用计划表时永远不会感到沮丧或卡住。但这里的区别是:使用计划表将帮助你确定每天需要做什么以及为什么。这可以帮助你从你的技能培养时间中获得最大的收益,大大减少挫折感,并减少一路上的开始、停止和重启的次数。

你是否取得了进展

你可能正在为你的技能而非常努力地工作。但问题是:你是否取得了进展?

这是一个需要回答的重要问题,也是使用计划表重要的第二个原因。在有效培养技能方面,光是努力是不够的。你必须有具体的方法来衡量你的成果,以确保你的努力工作得到了回报。

有些技能比其他技能更容易衡量进展。如果你是一个跑步者,你跑五英里的时间要么在增加,要么在减少。所以衡量进展是相对容易评估的。

但其他技能,如编程,使测量进展变得更加困难。例如,你可以解决一堆编程问题,但这并不一定意味着你正在成为一个更好的问题解决者。

解决方案是这样的:每天专注于小进步——即渐进式改进。这个想法是确定您今天想要做或完成的一到三件事。 它们应该很小且易于管理。 把问题写在纸上就是一个小进步的例子。 确定在问题中使用的正确算法是另一回事。

确定你每天晚上要为第二天或早上的第一件事迈出的小步。然后,在一天结束的时候,反思你在这些小进步方面取得的进展,无论是你做过的还是学到的。

比如说,这个问题仍然没有解决。但你想出了要使用的正确数据结构。或者你了解了一种你可以应用的新方法。这就是进步:你正在向前迈进。

这些小的进步随着时间的推移不断积累,将帮助你达到你想要的结果。

识别你每天所取得的小进步还有一个原因:它们会激发你的动力。这就是为什么使用计划表很重要的第三个原因。

保持前进

每天创造小的进步,使我的编程进展有了很大的不同。我可以看到进展,无论大小,都在我眼前翻转,这对我是一种激励。

例如,昨天我还在挣扎的东西,今天就变得更有意义了。或者我完美地应用了我上周学到的一个概念。这些微小的进步鼓励我每天起床后继续努力。

还有一个原因,就是要注重小幅度向前进。这样做使培养技能变得更容易管理。识别要使用的正确算法是可控的。重构一个程序的一部分是可以管理的。编写清晰和有意义的变量名是可以管理的。

这些小的进步正是技能培养的方式:渐进式的,一步一步的,一小步又一小步。

自我评估

我们经常急于进入下一个问题或程序,以至于没有花几分钟时间对我们的工作进行自我评估。

这是错误的。

花时间进行自我评估很重要:你要确保你以最有效的方式在正确的道路上运行。这个过程比你想象的要简单。

作为程序员,我们可以通过回顾来评估我们的工作,正如数学家 George Pólya 在他的书《如何解决》中所说的那样。

回头看意味着重新考虑和重新审查结果以及导致结果的原因。这是在你解决了问题之后,在你进入下一个问题之前要采取的步骤。

这个想法是为了解决一个问题或编写一个程序。然后——这是很重要的一点--在急于解决下一个问题或程序之前,回顾一下你的解决方案:从中学习,改进它,并巩固你的知识。

当然,你的解决方案可能是正确的。但它是否也是高效和有效的?换句话说,你的解决方案是最好的吗?通过使用不同的数据结构、更好的变量名称或另一种算法,是否有改进的空间?

通过花时间评估你的工作和能力来回答这些问题。回顾过去可以帮助你向前迈进。

征服冒名顶替综合症

也许保留一个技能培养计划表的最重要原因之一是为了征服冒名顶替综合症。很多人都在与冒名顶替综合症作斗争——包括我过去的自己。

事实证明,我的冒名顶替综合症的根源是我在做比较。你知道,当你把自己和别人比较时。当我开始编程时,我经常觉得比那些有数学或工程背景的人差。当我读到那些声称自己能快速学会编程的人的故事时,我也感到自己的不足。

比较是一个不好玩的游戏,因为它把你的思想和精力放在你无法控制的事情上。此外,它还会分散你对真正重要的事情的注意力:你的进步。

有一个替代方案。与其拿自己和别人比,不如拿自己和自己比。这就是我所要做的。这是一个小小的改变,可以产生巨大的影响。

在这个过程中,我的一个关键步骤是每天都使用我的计划表。这样做使游戏变成了一种竞争:与自己比较。我通过规划每一天的工作,然后评估我的工作和能力来做到这一点。

计划表使旅程向内——专注于你能控制的事情,比如你每天的努力,以及你每天的小进步。

用日常技能计划表实现它

如果你读到这里,那么很明显,我们有一个共同点:我们想成为更好的程序员。这篇文章中概述的想法将帮助你做到这一点。

如果你自己融入这些想法太费劲,那么这里有一个工具可以为你完成繁重的工作。每日技能计划表。这是我丈夫保罗和我共同创造和设计的一个实践性的、实用的技能培养计划表。

每日技能计划表包含一个由四部分组成的框架,将帮助你有效地培养技能。它的设计也包括了本文中所涉及的好处:

  • 采取直接的方式实现你想要的结果
  • 衡量你的进展
  • 通过专注于小的进步来保持动力
  • 自我评估你的工作和能力
  • 克服冒名顶替综合症

无论你是否选择使用“每日技能计划表”,我希望这篇文章能促使你保持一个技能培养计划表--即使是像我几年前开始做的那样,使用一些纸和笔这样的非正式计划。

因此,我对你的建议是:在一两个星期内保持一个计划表,并将本帖中的一些想法纳入其中。然后,在这个短暂的时间段结束时,看看你已经走了多远。我想你会对这个结果印象深刻。

这个两个网站的程序员和作家 | howtolearneffectively.com | dailyskillplanner.com