在不同的时期,我都在努力地学习编程,但是我仍不认为这是一个优秀开发者的标志。一个有天赋的开发人员,从9到5提供110%的清晰、精确、可维护的代码,在休息时间享受午餐,回到家离开键盘释放自我,这会有什么问题呢?
我认为,开发人员应具备的五个关键能力。
要了解他们为什么这么重要,想想软件是什么:它不是一个无限的系列式陈述,也不是一个任意调用的API,更不仅仅是复制粘贴的产物。相反,它是一个由代码层次结构组成的网格,很少复制代码,主要是复制格式(不一定是GOF模式,也可以是“延迟初始化”“模式驱动代码生成”或者“XML脚本”)。它只有在满足业务需求和有足够可操作性的情况下才能发挥作用。因此,我们需要评估能够让软件开发人员达到这些目标的能力。
话不多说,开始!
1、分析能力:结构化、清晰、有批判思维的思考者和问题解决者
很多人误把镇定、自信、流利的演说能力归结为智商。因此,我们需要对开发者的智力特征非常清晰。软件的一切都是关于功能和结构分解,因此,我认为智力的关键是天生的、后天培养的或者靠意志力进行的分析能力。一个具有分析能力的人会多角度考虑问题,选择最好的方法,然后将大问题分解成小问题。
在面试中,你很容易就能检查这个能力,因为候选人自然会澄清模糊的问题,或者列出解决方案的部分和关系,或者在讨论细节之前确认问题的大致情况。去考验这个能力,你不用提出一个新问题,只需要让他们描述任何一件事情:他们开发过的软件产品,面向的对象,软件开发过程中扮演的角色或处理的任务,互联网、网络等等。
当描述完成后,问问自己,你是否听到了对碎片的列举,或者候选人是否描述了事情的核心,这就是分析能力。
2、抽象能力:能够识别和理解抽象概念和模式的能力
软件是复杂的; 简单地阅读代码是不能理解它的。你通过寻找结构来理解它,建立一个关于如何用代码建模的理论,然后在阅读中验证和改变这个模型。开发新的软件很像理解一个现有的程序,只是这个模型还不存在,只是在你的脑海里有该软件的写代码时追求的所有品质),那么开发者就可以实现它。
3、准确: 简洁而准确地表达事物的能力
一些开发者仅通过复制实例就能取得一定的成功;他们找到与其开发的项目近似的软件代码,然后对其进行调整。这就像雕刻,只是当它用代码完成时,结果通常不是很清楚,也不是很简洁,而且可能不完全准确。同样,有些开发者只能通过例子来解释事情,而不是通过命名底层概念或模式。这是可以接受,但可能会成为软件开发的绊脚石,因为他们不太可能认识、理解和应用代码中微观或宏观层面的模式。
一个能够准确(但不一定迅速或令人印象深刻)表达的开发者会开发出更精确的代码,并更容易向另一个开发者解释一项技术或需求。
4、分清轻重缓急和实用性: 识别必须做的事和可以做的事
灵活的方法自然倾向于今天写今天的代码。即使在做瀑布式开发的公司里,能够区分必要和可能,仍然是一项重要的技能。产品往往只有在按时交付的情况下才能完全成功。一个务实的开发者会做真正需要去做的事情,比如创建一些钩子,写一些评论,为明天打好基础。实用主义还表现在渴望实现、完成目标;这促使并鼓励我们定义什么是成功,帮助我们确定达到目的的优先次序,并关注任务的完成度而不仅是给履历镀金。
5、理想主义:渴望把事情做好
一个只注重实用主义的开发者有时会偷懒;他们不仅只开发今天的功能,而且只为今天而编码,而不是为明天要维护这些代码的开发者而编码。实际上,一个理想主义的开发者会关心他们所交付的产品的所有品质:
①他们会确保他们理解了开发需求。
②他们三思而后行,在写一行代码之前会慎重考虑,甚至可能会记录测试案例。
③他们写的代码是清晰的,并且有充分的注释;他们不断地重构,以便使普通代码进入共享方式,然后进入基础类或辅助类。
④他们会编写单元测试案例,以保护其他开发人员和测试人员免受错误代码的影响。
⑤在自动测试不可行的情况下,他们会坚持进行手动测试。
理想主义和实用主义是相辅相成的关系,并且二者缺一不可,平衡这两个品质,并告知开发者整天所做的决定。
其他能力
当然,还有一些其他的能力也很重要:
①专注:编写软件是一项将头脑中的模型转录成代码的复杂任务。
②理解和使用技术的能力。
③渴望学习和提高他们所需的所有技能,以便在个人和软件交付组织中发挥效力。
④能够认识到如果不能和团队成员或其他团队有效合作,他们的技能再高超也发挥不出效力。
总结
最后一项能力是我们所有人都需要的;那就是认识到没有一套固定的技能。在任何组织中,有多种方法可以取得成功,有许多角色需要填补,而个人的工作只是一个更大过程中的一部分,所有这些都需要发挥作用才能取得成功。
聪明人有时会忽视其他方面的智慧;如果我们能够一直互相尊重,并将观点作为意见提出。即使我们认为是在纠正一个错误,也会发现我们竟然经常将意见和观点混淆为事实。
因此,开发人员最好具备上述能力;然后,他们就可以在技术轨道上推进自己的职业生涯,成为高级开发人员、开发负责人,最后成为架构师;或者在管理轨道上,信守承诺、尊重他人,甚至在更加关键的位置上激励和帮助他人实现愿望。
原文标题:5 Software Developer Competencies: How To Recognize a Good Programmer
原文作者:Mohamed Aboelez · Mar