`

是什么造就了一个优秀的程序员

 
阅读更多

是什么造就了一个优秀的程序员?首先问问你自己吧,这会是个有趣的问题。它让你反思自己的软件开发技术。这个问题也适合问问你的同事们。它可以带来一些关于如何协同工作的有趣讨论。下面是我认为成为一个优秀程序员必备的五个重要技能。

 

1. 分解问题

编程是为了解决问题,但在你开始写代码前,需要明白如何解决问题。优秀程序员的一项技能是把大的问题逐层分解成一个个更小的部分,直到每一部分都可以很容易解决。但找到解决问题的方式往往并没有那么简单。优秀程序员能找到方法去建立问题模型,这种方法使得输出结果的程序容易解释、实现和测试。

我写过的某些最复杂的程序在局部上都是难懂的,因为代码实现并不能很好地匹配这个问题,也就导致了编写的代码难以理解。当问题很好地建模的时候,我赞同伯尼·科赛尔所说的话(取自著名的程序员在工作中的访谈记录):

“……很少有本质上很难的程序。如果你盯着某一块代码,它看起来确实很难;如果你无法理解这段代码应该产生什么结果,这基本上就是暗示它很难被理解了。在这个时候,你不应该卷起袖子,尝试修复代码;你需要只是往回一步,再仔细考虑清楚。当你已经深思熟虑后,你会发现问题变得很简单”。

2. 场景分析

优秀开发者能考虑到如何使程序适合多种不同的场景。这项能力既适用于处理程序本身的逻辑,又适用于处理可能会发生的外部和内部事件。为了考虑逻辑上的不同思路,他们问自己这样的问题:如果这个参数为空会发生什么?如果所有条件都为假呢?这个方法在线程上是安全的吗?为了发现软件需要处理的各种类型的事件,他们问自己这样的问题:如果队列占满了会怎样?如果请求收不到响应会怎样?如果在这台服务器重启的同时另外一台服务器也重启了会怎样?

优秀程序员问他们自己:如何发现程序的缺陷?换句话说,他们有能力像测试人员一样思考。相反,缺少经验的程序员通常只考虑正确的路径——在一切都按照预期进行时正常的控制流(当然这也是程序在大部分时候的情况)。当然,异常不可避免要发生,所以需要程序能处理这些情况。

3. 命名

编程由大量的命名对象组成:类、方法和变量。当编码完成得很好时,程序也具备了自我描述的能力,也就是说通过阅读源代码可以清楚地明白程序中函数的含义。自描述代码的一个好处就是很自然地产生许多更短的命名方法,而不是少数更长的方法,因为你有更多空间去放置有意义的名字(还有其它原因解释为什么短小方法更好)。

想出好的名字比它听起来更困难一些。我喜欢这段引用(来自菲尔·卡尔顿):“在计算机科学领域只有两件困难的事情:缓存失效和命名对象。”命名在一定程度上很困难是因为你需要清楚地明白每一个名字究竟要代表什么。有时候命名不是一下子就清晰明了,只有随着软件开发进展才会慢慢显现。因此,重命名和命名一样重要。

命名对象也包含提出要用的概念和这些概念该如何称呼。通过深思熟虑,清楚命名所使用的惯用概念(在程序中和与程序员、非程序员讨论时使用),这使得编写程序变得更加容易。

4. 一致性

也许编程中最大的挑战是管理复杂性。保持一致性是处理复杂性的一种方法。它通过允许我们看到对象命名、使用和处理所采用的模式和推理来降低了某些复杂性。有了一致性,我们就无需用脑去记住异常和随机变量。取而代之,我们可以更关注程序本身的复杂性,而不是偶然产生的复杂性

保持一致性从整体看来是很重要的。它应用在变量名字和分组、方法命名、模块划分、目录结构、GUI、错误处理、日志输出和文档等很多方面。比如,如果某些变量是的相关,并一起出现(在声明、方法调用或数据库中的列),而且总是以相同的顺序使用它们。那么当其中一个消失或者整体被打乱时,你就会很容易发现。对于一个操作,如果在一个地方叫delete,就不要在另一个地方叫remove:务必使用相同的名字。史蒂夫·麦克奈尔在代码大全中对于使用相反命名有相同的建议。比如,begin和end是相反的,就如同start和stop一样。当使用相反对时不要混用不同对的名字(比如使用begin和stop)。

当修改一段程序时可能会引入非一致性。粗心大意的程序员不会注意到他们添加的代码是否和已有的代码保持一致。优秀程序员会严苛地确保在这些看似很小的细节上都要做到精益求精。他们知道保持一致性对于在软件开发的整个过程中处理复杂性是多么的重要。

5. 学习能力

作为一名软件开发者,你需要持续学习。在为软件添加一项新功能前,你必须明白为什么要这么做。在给一个已有程序添加代码前,你通常必须知道已有代码在做什么,以便合适地嵌入新功能。你还需要学习相关系统,以便正确地与它们交互。因此,快速学习的能力使你成为一名更加高效的开发者。

而且,因为软件工程领域的开发速度是如此的快速,所以新的编程语言、工具、技术和框架需要学习层出不穷。这是好还是坏,就看你怎么看。佛瑞德·布鲁克斯把学习能力列为技能的快乐之一,对此我深表赞同。学习新事物本身就是令人心满意足的,它也意味着开发者的生活从不无聊。

总结

上面所有的技能都是通用的——它们中没有一项是针对某种语言、某个框架或某种技术。如果你拥有它们,你就能快速学习一门新的语言或工具,在新的环境下写出优秀的软件。而且,因为它们在本质上是通用的,所以不会在若干年以后过时。

是什么造就了一个优秀的程序员?以上便是我的观点。你认为造就一个优秀程序员的因素有哪些?在评论里告诉我吧。


via: http://henrikwarne.com/2014/06/30/what-makes-a-good-programmer/

分享到:
评论

相关推荐

    英才是怎样造就的.rar

    英才是怎样造就的.rar英才是怎样造就的.rar英才是怎样造就的.rar英才是怎样造就的.rar

    献给所有想当程序员的朋友

    每解决一个问题,我们的技术水平就会提升一个新的台阶。 要成为一名优秀的程序员,首先我们需要热爱编程。只有热爱,才能让你在遇到困难时不轻言放弃,也只有热爱,才能让编程不再是枯燥的工作,而是一种享受。其次...

    【业绩管理】是什么造就了领导者.ppt

    【业绩管理】是什么造就了领导者.ppt

    是什么造就了领导者——商务培训ppt模板.rar

    文件名称"51pptmoban.com"表明这是一个PPT模板网站,可能提供各种设计精美的模板供用户下载使用,以创建专业且引人入胜的商务培训材料。 综上所述,"是什么造就了领导者——商务培训ppt模板"这个主题涵盖了一系列...

    英才是怎样造就的摘抄 读后感:《英才是怎样造就的》

    首先,王金战老师强调关心每一位学生,相信每一个学生都有成为英才的潜力。这是所有教育理念的基础,正如孔子提倡的“有教无类”,强调因材施教。优秀的教育者应该对所有学生一视同仁,尤其是对那些学习有困难的学生...

    [谈谈怎么培养造就大批年轻优秀干部].zip

    在当前快速发展的社会环境下,培养和造就大批年轻优秀干部成为了国家和社会持续发展的重要课题。年轻干部是国家的未来,他们具有创新精神、活力充沛、适应能力强等优势,因此,如何有效培养这批人才,使他们成为能够...

    是什么造就了领导者By@小巴-1990图(1)PPT模板.pptx

    【标签】:“PPT模板”意味着这是一个用于演示或教学的工具,用户可以根据自己的需求调整内容,用于培训、研讨会或自我提升,以探讨和分享领导力的见解。 【部分内容】:“谢谢大家再见身体健康 万事如意”,这部分...

    是什么造就了150多年的辉煌—西门子的人才培训.zip___是什么造就了150多年的辉煌—西门子的人才培训.zip

    这份名为“是什么造就了150多年的辉煌—西门子的人才培训”的压缩包文件,揭示了西门子在人才发展领域的独特策略与实践。 首先,我们要理解在大数据时代,人才的重要性不言而喻。西门子作为一家在信息技术、自动化...

    连接组:造就独一无二的你

    连接组(connectome)是一个描述生物脑中所有神经元及其相互连接的图谱,它是一个高度复杂的神经网络。神经科学领域的研究者们致力于理解...最终,这项工作可能会造就出一个更加全面、精确和深入理解人类大脑的新时代。

    少数民族优秀作品 汉语写作如何造就了少数民族的优秀作品.docx

    本文标题为“少数民族优秀作品 汉语写作如何造就了少数民族的优秀作品”,核心探讨的是汉语写作对于少数民族作家创作的影响以及它如何塑造和提升了少数民族的文学成就。 【描述简述】 描述部分未给出,但从标题可以...

    责任胜于能力读后感600字_《责任胜于能力》读后感:责任造就一种优秀

    在《责任胜于能力》这本书中,作者以简洁而深刻的语言阐明了一个普遍的真理:在个人成长和团队成功的道路上,责任心往往比单纯的能力更为重要。本书通过具体的案例,将责任的重量和价值生动地展现在我们面前,...

    英才是怎样造就的读后杂感.doc

    一个信任孩子的家长能够帮助孩子建立起自信心,而这是孩子面对挑战时的重要精神支柱。 另外,《英才是怎样造就的》中提出,家长和教师应该放弃用“星”的眼光去看待孩子,即摒弃传统的“优等生”与“差等生”之分,...

    变法造就第一个“半亿帝国”.docx

    变法造就第一个“半亿帝国”.docx

    Java学习之道 用脑编程而不是用手

    编程是需要思考的,优秀的程序员是用头脑编程,平庸的程序员是在用手编程,一样的工作,一样的时间却能造就不同的人。时间并不等于经验,编程十年比编程三年的人并不一定要强。我曾经在一家软件公司做PM时,有人写...

    用于注塑机传感器(完美的质量造就优秀的产品).zip

    标题中的“用于注塑机传感器(完美的质量造就优秀的产品).zip”表明这是一个关于注塑机传感器技术的综合资料压缩包,强调了高质量传感器在产品制造中的重要性。描述中的内容与标题相呼应,再次确认了这个压缩包是...

    约翰H霍兰隐秩序-适应性造就复杂性.pdf

    书中提供了一个适用于全部CAS的计算机模型。霍兰通过描述我们能够做什么,总结了如何增强对CAS的理论认识。他提出的若干理论方法,可以指导人们对付耗尽资源、置我们世界于危险境地的棘手的CAS问题。

    如何全面造就自己做一个成功人.pptx

    柯维提出的“由内而外全面造就自己”理念强调,个人的成长首先源自内心,包括观念的转变和品德的修炼。这涉及到自我反思,改变看待问题的角度,以及通过自我提升来改变现状。 2. **基本品德与人际关系**:品德是...

    gaozhongsheng英才是怎样造就的

    英才是怎样造就的,适合教师,家长,学生看的好书,好教材!最适合的对象为高中生

    教练技术:造就精英下属doc26.docx

    教练技术:造就精英下属doc26.docx

    Canonicity:一个探索是什么造就文学经典的项目,文学经典

    正规一个探索是什么造就文学经典的项目,文学经典。这里发生了什么? 经典项目是纽约州立大学 Geneseo 的一个学生研究项目,旨在探索文学经典的概念。 该项目已朝着几个方向发展,重点不同:1. 什么形式特征定义了...

Global site tag (gtag.js) - Google Analytics