本文转载自公众号“读芯术”(ID:AI_Discovery)
拿破仑有句名言:“战争需要三样东西——钱、钱、更多的钱。”这和编程中需要学习的东西异曲同工——编码、编码、再编码。这是唯一提升编程技能的可行方案。
也许这个道理你早就知道了,也许你已经当了很多年的码农。但总有些时候,你还是会感觉自己停滞不前。可能是因为身处于一个没什么挑战的长期项目之中,亦或是仍在求职,不知如何从人群中脱颖而出。
总之,你不停地编写代码却收获甚微。每个项目都是相似的,因此你解决问题的方式也都类似。要想脱离这种恶性循环,你需要跳出思维定势,勇于挑战自我。这里有一些建议可以帮助你突破瓶颈。
1.重建现有工具
反馈不足是编码学习的最大阻碍之一。刚开始的时候,这可能不是什么大问题,因为你会得到一些即时反馈,比如当你想让你编写的代码运行时,它不能进行正常运行。
但越有经验,你就会面临越多挑战。你需要考虑设计模式、架构、可读性、性能等等。你会发现每个问题都有多个解决方案,无从评判你的方案合理与否。
幸运的是,有一种方式可直接获得关于编码的反馈或不同视角:通过重建现有程序库或其他工具。你只需要找到某种工具(优先考虑常用工具),并知晓其功能。然后确定其核心功能。仔细阅读它的程序说明书,确认已经掌握其应用程序接口。现在,就可以准备编写代码了。
你无需重新创建一切——只需要重建一个或几个最常见的使用案例。如果进展顺利,花几天时间即可完成。完成编码后,接下来的部分就有趣多了。你要检查代码,分析你所做的决定,考虑可能出现的极端案例和漏洞并将其标记下来。
然后打开你所重建工具的源代码,回溯代码以及同样问题的解决方案。思考一下,现在方案是否与原方案相似,是否有所改进,是否处理方式欠妥,以及其中的原因。你要试着理解程序库代码背后的决策。
许多程序库都是由成熟的程序员创建,并由社区扩展。通过检查其代码,你会学到新的模式以及解决问题的新方式。下次再遇到类似问题时,你便会将新知识投入实践。
2.结对编程
结对编程是一种颇具争议的方式。这是一种软件开发技术,常指两位程序员共同合作,但仅有一方负责编写代码,而另一方则负责观察并回顾整体工作。这两位程序员的角色会进行定期调换。这种方法的缺陷很明显:只有一位程序员编程,所以软件创建时间也就更长;但优势便是软件编写质量会更好。
或许结对编程对于软件开发的好处有待商榷,但其对于学习的帮助是显而易见的。
你编写代码时,对方会关注你的思维模式及思考方式。分析创建代码的过程,这对你们双方都是一种挑战。通过观察其他人编写代码,你会了解到对方的思维模式。你几乎不大可能与其有着一样的问题解决方案,所以这是了解另一种看问题角度的绝佳机会。
结对编程可能会有一些难度。为了使其更简单,更高效,你应该找一个与你水平相当的结对伙伴。如果他们资历太浅,你需要单方面不断对其进行指导;如果他们技巧太成熟,他们很快就会感到无聊,对一切任务大包大揽。
3.约束自我
创造力十分难得。一旦习惯一种解题思路,你甚至都不会考虑替换方案,就像挂了自动挡一样。程序员不是唯一苦寻创造力的职业。对于作家来说,创造力更是一个大问题。为了激发创造力,他们开发出了一些小技巧。
约束是激发创造力的最佳技巧之一。对于作家来说,这种约束可能是针对文章的字数(比如用少于十个单词写一个故事);也可能是针对单词的使用(比如文章中不能出现以“S”开头的单词)。
作为一名程序员,有无数方法通过限制自己来获取创造力,比如:
- 避免一些语言特性(例如,代码中不出现if和switch语句)。
- 降低数据可变性——尽可能使用纯函数,甚至可以使用相关工具,如Immutable来实现不变性。
- 使用测试驱动开发——这是一种强大的技术,可以优化你的代码,促使你改变思维模式。
- 限制时间(例如,给自己三天时间来开发一款应用或参加一场黑客马拉松)。
约束自我的重点不在于约束,你可以任意选择自己感兴趣的方法,重点在于范式的转变。这种约束会迫使你重新思考基本原理。重新思考,精炼想法,你会收获成长。
4.编写技术文章
长时间的编程工作会让你觉得自己的工作十分了解。但我敢保证,你并没有。在写技术文章的过程中,你会感到十分震惊,你曾经对许多编程方面的事情习以为常,不经思考、一遍又一遍地重复着同样的步骤。
当以书面形式解释编程过程时,你会开始考虑你的假设和方法,质疑某些代码是否是问题的核心,其它代码是否冗余或过分复杂。
写作会使你更加有条理地、批判地思考你所编写的代码,将其进行重构以及简化,以创作出对其他人有帮助的学习材料。
这样做的意义何在?你在学习。表面上看是你在教别人,但其实是你在不断学习。要想深入地了解一门学科,没有比教授他人更有效的方式了。好好利用这一点,你将获得突飞猛进的成长!