【双语视界】为什么有些程序员进步飞快?揭秘编码技能的实战获取之道
视频探讨了程序员如何通过动手实践而非纯理论学习来快速提升编码技能,并以解魔方类比软件开发过程。
UP主: 双语视界-与时俱进 · 时长: 14:04 · 🔗 B站原视频
标签: 程序员 · 职场成长 · 编程实践 · 技能提升
编程是一项实践技能
编程本质上是一项实践技能。仅仅能解释如何编写代码是不够的,你必须能够实际去写。你在大学里学到的很多东西都是理论性的。你学习讨论软件设计、分析代码、评估架构选择,但这与能够开发出可运行的软件是不一样的。因此,专业的程序员在工作和行业培训课程中学习了大量他们需要的知识。
从解魔方看技能获取
让我用解魔方来示范。她首先要做的是在底部拼出一个白色的十字。这需要观察当前的位置,然后计算如何移动色块来实现。她已经做到了。接着她要完成前两层,同样是观察位置,应用一系列的移动步骤。这没花多长时间,她现在已经完成了。
然后只剩下顶层了,她需要使用另一套不同的移动步骤来还原顶层。她很快就到了只剩三个角块需要放到正确位置并旋转的地步。所以她正在应用一个特定的算法。现在还有三个角块,但位置不同了。现在只有两个角块需要旋转了。她非常快速地完成了还原。这就像我们掌握一项技能,不是仅仅停留在想法和解释上,而是要实际做到。
布鲁姆分类学与哈特曼熟练度分类学
很多人在教育中会提到布鲁姆分类学(Bloom's Taxonomy)。这是一种用于教育和人类学习的模型。它有六个阶段,从你必须记住它开始,然后你才能明白它,接着去应用等等。这是学校在规划课程时常用的教育模型,但从根本上说,这都是关于“思考技能”的。你可以解释为什么某些事情很重要,但不一定能实际去做。
而软件开发完全是关于实践技能的,所以我认为我们需要一个不同的模型。这就是哈特曼熟练度分类学(Hartmann Proficiency Taxonomy),它同样也有6个阶段。
软件开发中的实践技能
在软件开发中,有很多实践技能。比如结对编程时,什么时候该说话,什么时候该保持安静,什么时候该接管键盘。再比如持续集成,你需要判断一次提交多大的代码变更,并与所有其他人的变更集成在一起,频繁地做这件事绝对是你需要掌握的技能。还有领域驱动架构,比如六边形架构或整洁架构,它们都基于将领域语言融入代码的理念。如何做到这一点是一项非常需要技巧的活动。接下来,我将详细介绍你是如何获取这些技能的。
技能获取的第一阶段:熟悉
哈特曼熟练度分类学的第一步是“熟悉”(Familiarity)。在这个阶段,你听说了这个东西,并开始了解它是什么。达到熟悉阶段可以非常快,可能只是别人向你解释,或者你看了一个演示或演练。在这个阶段之前,你甚至不知道有这个东西存在,比如你以前从未见过魔方,或者从未听说过探索性测试。所以这个阶段进展得很快。
从有意识的行动到熟练
接下来会经历“有意识的行动”(Conscious Action)。在这个阶段,你必须在脑海中清楚地记住每一个动作和机理才能做到。这需要你集中注意力去计划和执行解决方案。
当你每天在工作中运用这个技巧,你就能获得成功。你对这件事已经足够了解,以至于即使旁边有干扰,或者处于压力之下、老板在发脾气,你仍然能够运用这项技能。你有足够的脑力去处理其他事情,同时还能把这项技能用好。从“有意识的行动”达到“熟练”(Proficient),主要是一个经验积累的过程,需要大量地去实践。
终极境界:无意识的胜任
再往上,成为专家的终极境界是“无意识的胜任”(Unconscious Competence)。在这个阶段,你对这项技能掌握得如此之好,以至于你甚至记不清自己是怎么做到的。你成功了,但你无法解释你到底做了什么,它已经成为了你的第二本能。
如果你把达到“无意识的胜任”作为目标,这通常需要很长的时间、大量的经验,以及对你如何应对挑战性情况的大量自我反思——反思你到底做了什么才获得了成功。在这一点上,找一个与你水平相当的同行会非常有帮助。他们可以向你反馈你做了什么、他们看到你做了什么,以及他们认为你是如何成功的。这样你就可以真正开始思考并弄清楚,确保这也成为你未来实践的一部分。
团队练习与反馈
这就是对哈特曼熟练度分类学的解释和介绍。你需要按顺序经历这些步骤,不能跳过任何一步。但实际上,至少前三个步骤可以相对较快地完成。在老师的指导下,你可以在几天的培训课程中达到“有意识的努力”阶段,但要超越这个阶段就比较困难了。
在实践中,我建议通过技术教练来帮助团队。你可以通过 Continuous Delivery Training Platform 获取一些资源,或者在 Samman Coaching 网站(sammancoaching.org)上找到一些有用的练习。总的来说,我的建议是尝试组织一个小组,计划做一些实际的编码练习,并互相给予反馈。这比你一个人独自完成所有工作要有趣和有效得多。祝你编程愉快!