是什么造就了一个优秀的程序员?首先问问你自己吧,这会是个有趣的问题。它让你反思自己的软件开发技术。这个问题也适合问问你的同事们。它可以带来一些关于如何协同工作的有趣讨论。下面是我认为成为一个优秀程序员必备的五个重要技能。
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/ |
- 浏览: 662463 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (608)
- Java (125)
- Struts (16)
- Spring (19)
- iBatis (11)
- Hibernate (14)
- Oracle (33)
- Mysql (22)
- JBoss (4)
- JavaScript (46)
- Ajax (9)
- jQuery (5)
- web (25)
- Html (14)
- Exception (26)
- Linux (106)
- Vim (11)
- Python (12)
- ComputerTech (25)
- 文章 (50)
- Maven (20)
- FreeMarker (5)
- Json (0)
- Tomcat (6)
- ActiveMQ (2)
- Test (1)
- Git (5)
- Shell (1)
- 《Java并发编程实践》 (2)
- 产品设计 (1)
- xxx (0)
- diamond (1)
- dubbo (1)
- Raspbian (1)
- IDE (3)
- 并发编程 (1)
最新评论
-
mikzhang:
抱歉,写这篇文章时,博主开发的程序只面对IE浏览器,故没考虑其 ...
JS 中改变confirm默认按钮提示“确定""取消" -
poterliu:
测试过了,发现execScript方法只支持IE浏览器。目前已 ...
JS 中改变confirm默认按钮提示“确定""取消"
发表评论
-
<<将博客搬至CSDN>>
2017-04-06 14:03 424博客搬家 -
编程经验之谈
2016-01-20 18:17 0以下编码经验来自平时的程序编写和维护过程。 * ... -
Java互联网工程师要具备哪些技能
2016-01-20 17:43 01.Core Java,就是Java基础 ... -
程序员应该养成的良好习惯
2016-01-07 16:07 4561、总结自己一天任务的完成情况最好的方式是写工作日志,把自己今 ... -
CP vs SP
2015-11-10 17:46 5001.什么是SP? SP是英 ... -
关于文件放在ftp还是放在数据库
2015-11-10 17:08 0关于文件放在ftp还是放在数据库 服务器的文件夹: ... -
Bug的类型
2014-12-01 22:47 539美国计算机科学家、图灵奖获得者詹姆斯·尼古拉·格雷(Ji ... -
Web开发在2015年及未来的发展趋势
2014-12-01 16:38 0via: http://www.iteye.com/news ... -
程序员什么时候该辞职
2014-12-01 16:15 637via: http://linux.cn/article-3 ... -
关于开源文档:程序员可能忽略的十件事
2014-11-25 15:26 550via: http://code.csdn.net/news ... -
导致程序员在工作中丢失激情的5件事
2014-11-25 15:22 704via: http://code.csdn.net/news ... -
给技术高管日常管理的五条小建议
2014-11-25 15:07 382via: http://www.iteye.com/news ... -
学好计算机英语
2014-11-13 21:51 0via: http://www.cnblogs.com/q ... -
项目管理缩略语英中注释表
2014-11-13 21:49 0via: http://www.cnblogs.com/qq ... -
浅析软件项目管理中十个误区
2014-11-13 21:47 0via: http://www.cnblogs.com/qq ... -
25个妙招儿,帮你每天挤出一小时
2014-11-13 21:43 025个妙招儿,帮你每天 ... -
项目管理风险控制及注意事项
2014-11-13 21:40 0项目管理风险控制及注意事项 作为项目经理要动态的去全局 ... -
测试驱动开发全功略
2014-11-13 21:27 533via: http://www.blogjava.net/b ... -
一些值得学习和补充的建议for程序员
2014-11-10 18:59 544via:http://linux.cn/article- ... -
程序员新人怎样在复杂代码中找bug
2014-11-07 09:39 689via: http://wmcxy.iteye.com/bl ...
相关推荐
英才是怎样造就的.rar英才是怎样造就的.rar英才是怎样造就的.rar英才是怎样造就的.rar
【业绩管理】是什么造就了领导者.ppt
文件名称"51pptmoban.com"表明这是一个PPT模板网站,可能提供各种设计精美的模板供用户下载使用,以创建专业且引人入胜的商务培训材料。 综上所述,"是什么造就了领导者——商务培训ppt模板"这个主题涵盖了一系列...
首先,王金战老师强调关心每一位学生,相信每一个学生都有成为英才的潜力。这是所有教育理念的基础,正如孔子提倡的“有教无类”,强调因材施教。优秀的教育者应该对所有学生一视同仁,尤其是对那些学习有困难的学生...
在当前快速发展的社会环境下,培养和造就大批年轻优秀干部成为了国家和社会持续发展的重要课题。年轻干部是国家的未来,他们具有创新精神、活力充沛、适应能力强等优势,因此,如何有效培养这批人才,使他们成为能够...
【标签】:“PPT模板”意味着这是一个用于演示或教学的工具,用户可以根据自己的需求调整内容,用于培训、研讨会或自我提升,以探讨和分享领导力的见解。 【部分内容】:“谢谢大家再见身体健康 万事如意”,这部分...
这份名为“是什么造就了150多年的辉煌—西门子的人才培训”的压缩包文件,揭示了西门子在人才发展领域的独特策略与实践。 首先,我们要理解在大数据时代,人才的重要性不言而喻。西门子作为一家在信息技术、自动化...
在书中提到的案例中,两个设计师面对同样的挑战,一个选择了抱怨和消极应对,而另一个则视之为提升自己的机遇,积极投入并最终取得了成功。这个故事生动地展现了责任意识对于工作态度和成果的影响。 责任首先是一种...
连接组(connectome)是一个描述生物脑中所有神经元及其相互连接的图谱,它是一个高度复杂的神经网络。神经科学领域的研究者们致力于理解...最终,这项工作可能会造就出一个更加全面、精确和深入理解人类大脑的新时代。
本文标题为“少数民族优秀作品 汉语写作如何造就了少数民族的优秀作品”,核心探讨的是汉语写作对于少数民族作家创作的影响以及它如何塑造和提升了少数民族的文学成就。 【描述简述】 描述部分未给出,但从标题可以...
变法造就第一个“半亿帝国”.docx
编程是需要思考的,优秀的程序员是用头脑编程,平庸的程序员是在用手编程,一样的工作,一样的时间却能造就不同的人。时间并不等于经验,编程十年比编程三年的人并不一定要强。我曾经在一家软件公司做PM时,有人写...
标题中的“用于注塑机传感器(完美的质量造就优秀的产品).zip”表明这是一个关于注塑机传感器技术的综合资料压缩包,强调了高质量传感器在产品制造中的重要性。描述中的内容与标题相呼应,再次确认了这个压缩包是...
书中提供了一个适用于全部CAS的计算机模型。霍兰通过描述我们能够做什么,总结了如何增强对CAS的理论认识。他提出的若干理论方法,可以指导人们对付耗尽资源、置我们世界于危险境地的棘手的CAS问题。
柯维提出的“由内而外全面造就自己”理念强调,个人的成长首先源自内心,包括观念的转变和品德的修炼。这涉及到自我反思,改变看待问题的角度,以及通过自我提升来改变现状。 2. **基本品德与人际关系**:品德是...
英才是怎样造就的,适合教师,家长,学生看的好书,好教材!最适合的对象为高中生
教练技术:造就精英下属doc26.docx
正规一个探索是什么造就文学经典的项目,文学经典。这里发生了什么? 经典项目是纽约州立大学 Geneseo 的一个学生研究项目,旨在探索文学经典的概念。 该项目已朝着几个方向发展,重点不同:1. 什么形式特征定义了...
对于“用看‘星’的眼光去看待每一个孩子”,王金战老师的这种理念是对传统教育观念的一种挑战。在应试教育的压力下,很多孩子被标签化,被认为是“优生”或“差生”。然而,每个孩子都有其独特的天赋和潜力,需要...
文章也提到了平台经济学的观点,即平台不仅仅是技术,它还构成了一个生态系统,一个由软硬件、开发者、应用、电子商务、广告等构成的集合体。诺基亚前CEO斯蒂芬·埃洛普(Stephen Elop)的观点被提及,他认为设备...