想法与问题程序员已经是中级了,如何提升自己?有很多关于“学习编码”的资源可以让一个人从零到新手(尽管大多数这些资源的质量值得商榷),但是你如何从中级到专家水平?我如何建立一个允许我在高层次上编写代码的心智模型?在这篇文章中,我将讨论一些关于一般性能改进的理论,然后是程序员用于实践的一些方法(以及我对这些实践的想法),然后是我如何改进成为中级或更好的程序员的想法。***法得出的结论。一般性能改进快速指南最近我阅读了很多关于性能改进的文章,大多数文献都以K.AndersEricsson的研究为起点。他是性能研究领域的杰出人物,几乎每本涉及该主题的书籍都会引用他的名字。他的书《Peak: Secrets from the New Science of Expertise》于今年出版,将30多年的研究浓缩成一本通俗易懂的书,我推荐它作为大多数新手的最佳资源。简要总结一下上下文:提高任务绩效来自于开发更好的心智模型,而更好的心智模型来自于刻意或有目的的练习。为了能够实现改进,必须能够定义什么构成改进的性能并分解实现它的步骤。练习和表演是不同的,最好的练习方式几乎从来不是表演。示例:想要提高击球水平的棒球运动员应该花30分钟在击球场练习200个投球(练习),而不是花2小时观看一场比赛15个投球(表演)。改进方法人们建议改进编程的大多数方法都是基于性能的。阅读代码、阅读代码、编写代码、做项目、谈论代码等等。如果他们在工作之外做这些事情,程序员基本上肯定会有所提高,但似乎效率不高。如果我想在编程方面做得更好,但我只想每周花几个小时来编程怎么办?建立更好的心智模型以便做出更明智的决定的最有效方法是什么?《Peak》这本书中刻意练习的一个很好的例子是音乐家。想要提高特定乐器的技能或学习一首新音乐,有明确的、标准化的方法;包括一个音乐家在几个月的时间里学习一首新音乐的例子——每天只需刻意练习5分钟。虽然在编程中我们没有大量明确的目标或改进(即:某首音乐中的错误数量),但我发现没有其他任何东西能接近这个比喻。那么,作为程序员,我们如何获得性能反馈循环呢?是的,我们有针对特定代码片段的反馈循环,无论代码是否有效,它的性能和健壮性如何等等。我们有一个更长的反馈循环来确保系统的健壮性,因为它们会随着时间的推移承受负载或变得笨拙.但是我们并不经常得到关于问题处理方法的实时反馈。以下是我用来学习编程的方法,有些好,有些好:练习编程挑战我喜欢编程挑战,但总的来说,我认为它们不值得学习一门新的编程语言。它们提供的反馈回路很弱——你的程序要么产生正确的输出,要么不产生——并且不给你关于设计过程的反馈。这种方法可能会引入一种新算法或您不熟悉的语言的新功能,但在实践中,它很薄弱。它更接近于“性能”而不是“实践”,并且您正在处理工件而不是实际问题。我发现的一个例外是@ericwastl的AdventOfCode。编程问题很好地模拟了现实生活中的问题(需求被明确定义,但边缘情况没有写入规范并且必须被暗示),并立即反馈解决方案的设计有多好,因为每个问题都会引发额外的需求或者其他一些难题有第2部分,这意味着您必须重新评估您的原始解决方案的复杂程度。它并不完美,但我喜欢看到我的解决方案具有挑战性,并且在我进入第2部分时经常不得不重新考虑我的解决方案的结构和设计。额外的编程时间;如果您做自己喜欢的事情,那将不会像工作一样。不幸的是,由于项目参差不齐,您可能不会真正学到任何东西。如果你的sideproject和你想学的编程是一致的,那么恭喜你,这是一个不错的选择,否则它只是性能vs实践的另一个版本。即使在最好的情况下,如果主要目标是产生某种东西,那也意味着做和学要退居二线。阅读有关编程实践的书籍阅读编程书籍是快速提高知识的好方法,我认为它应该成为几乎所有“提高编程”计划的一部分。然而,这不是一劳永逸的灵丹妙药。纯粹的知识获取可以帮助你知道遇到问题时有哪些选择,但知识并不能替代更好的心智模型。最终建议不幸的是,我无法得出具体的结论。或许答案是需要有一个编程教练或导师,这样才能获得有针对性的反馈和具体的实用建议。与古典音乐训练和运动训练不同,也许这门学科还太年轻,没有正式的方法来提高表现。在评论中让我知道你的想法。我特别想听听那些一直在高水平教学/培训/指导,或者在这样的老师的指导下学习过的程序员的意见。如果我对程序员的性能改进有任何更清晰的想法,肯定会写一篇后续文章。谢谢阅读。
