`
deepinmind
  • 浏览: 456189 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:42011
社区版块
存档分类
最新评论

一个优秀的程序员是如何炼成的

阅读更多
一个优秀的程序员是如何炼成的?问一下自己这个问题会很有意思。这能让你好好思考一下软件开发的过程。拿它来问一下同事也不错,这能引起一些关于如何一起协作的很有意思的讨论。下面是我认为成为一名优秀的程序员所必需的5个技能。


1. 问题分解

编程讲的是如何解决问题。但在你开始写代码之前,你需要清楚如何解决问题。一个好的程序员应该得拥有这样的技能,他能将问题分解成子问题,直到每个子问题都可以很轻松地进行解决。不过要找到一个解决问题的方式可不是件简单的事。好的程序员能够很好的对问题进行建模,这样写出来的程序很容易能看懂,很容易实现及测试。

我所见识过的一些复杂的程序,它们之所以这么复杂,部分原因是由于它的实现并不适合对应的问题。这导致代码很难理解。我很同意Bernie Cosell关于问题建模方面的看法:

“很少有程序天生就是复杂的。如果你看到一段非常晦涩的代码——你无法理解它到底要做什么——这通常就意味着它的实现非常糟糕。这个时候不要撸起衣袖就开始修改代码,而是应该退一步,好好地重新思考一下 。当你把整个问题都想透了,你会发现问题其实很简单。“


2. 场景分析

好的开发人员应当能够考虑到程序的不同场景。这不仅是指程序的逻辑,同样还有的是可能会发生的内外部的事件。要想考虑到业务逻辑的不同路径,你可能会提出这样的问题:如果这个参数为空的话会怎样?如果这些条件都不为真的话呢 ?这个方法是线程安全的吗?为了弄清楚程序到底需要解决哪类的问题,你可能会问自己:如果队列为空的话怎么办?或者这个请求没有响应?如果这个服务器重启的时候,别的服务器也在重启该怎么办?

好的程序员应该会问自己:什么情况下它会出现问题?也就是说,他们能够像测试人员一样看待问题。反过来 ,没有经验的程序员通常只考虑程序主逻辑——也就是当所有事情都如预期时的正常的控制流程。不过一旦发生了异常情况,程序必须得能够应对它。

3. 命名

程序编写涉及到许多命名的问题:类,方法以及变量。如果做得好的话,程序应当是自文档型的,也就是说通过读源码就能很清晰地理解程序的意图。自文档型代码的一个结果就是方法通常会更短,而不是使用很长的方法,这是因为小的方法,你才可以有更多的地方来赋予一些有意义的名字。

好的名字可比想像中的要困难得多。我喜欢Phil Karlton说的这段话:”计算机科学里只有两件难事:缓存失效以及命名“。命名之所以这么难是由于你得清楚每个名字都代表着什么。有的时候事情并不会那么明朗 ,只有开发到达一定程度的时候才会清楚。也就是说,重命名和命名一样非常重要。

好的命名同样也包括你所提出的概念以及这些概念到底叫什么。如果仔细地思考过这点的话,不同名字的概念应当是始终一致的(在程序中,不管是和程序员还是非程序员讨论业务领域时都用的是相同的概念),这样写程序就会非常容易。

4. 一致性

或许写程序里面最大的挑战就是管理的复杂性了。一致性是对抗复杂性的一种方式。它让我们看到了问题的固有模式,让我们可以推论出东西该如何命名,使用以及处理,这在一定程度上减少了复杂性。达到一致性之后, 我们不用再费精力去记住异常情况以及随机的变动。我们可以聚焦于问题的本质复杂度,而不是偶然复杂度。

一致性是非常重要的。它包括变量名及分组,方法命名,模块的划分,目录结构,GUI,错误处理,日志,文档,等等。比如说,如果有一些变量是关联的并且出现在一起,那么就应当始终按照同样的顺序来使用它们。这样的话,如果漏掉了一个或者将它们搞混了就能够很容易发现。对于某个操作而言,如果它在某个地方是叫做delete,那么就不要在另一个地方把它称为remove——要坚持使用同样的名字。 Steve McConnell在代码大全中关于准确地使用反义词有一些不错的建议。比如说,begin和end是反义词,同样的还有start和stop。不要混合不同分组的词语(比如begin和stop)。

修改程序可能会导致不一致。草率的程序员是不会注意到他们添加的代码是不是与现有的代码一致的。好的程序员会确保每一个细节都是正确的。他们知道一致性对于减少复杂性有多么重要。

5. 学习

作为一名软件开发人员,你需要不停地学习。在增加一个新特性之前,你必须知道它是要做什么。在往一个现有的程序中增加代码之前,你通常都要学习现有的代码是做什么的,这样才能正确地实现新功能。你还得了解周边的系统 ,这样才能正确地和它们进行交互。快速的学习能力可以让你成为一名高效的开发人员。

更有甚者,由于软件工程领域的发展速度实在是太快了,会不断地涌现出许多 新的语言,工具,技术以及框架。这是把双刃剑。Fred Brooks把学习看作是一种娱乐。学习新东西,乐在其中矣。这也意味着程序员的生活永远不会枯燥。

结论

上面讲的都是一些比较通用的技能——它们并不特定于某个语言,框架或者技术。如果你具备了这些技能,你可以快速地学习一门新语言或者一个新工具,并用它们编写出优秀的软件。更重要的是,由于它们具备通用性的本质,即使多年过后也仍不会过时。




原创文章转载请注明出处:http://it.deepinmind.com

英文原文链接
0
0
分享到:
评论

相关推荐

    程序员是这样炼成的

    9. **代码质量和可维护性**:编写可读性强、易于维护的代码是优秀程序员的标准之一。遵循编码规范,进行适当的注释,以及利用单元测试和代码审查来确保代码质量。 10. **个人品牌和网络影响力**:在开放源代码社区...

    程序员是这样炼成的.rar

    综上所述,“程序员是这样炼成的”意味着程序员的成长是一个全方位的学习和实践过程,它涉及技术、工程、沟通等多个方面。在这个过程中,不断积累经验、勇于尝试新知,以及持续地自我提升是每一个程序员稳健前行的...

    伟大的程序员是怎样炼成的.docx

    以下几点是伟大程序员炼成的关键要素: 1. **只做正确的事**:在软件工程领域,选择正确的方法至关重要。这不仅包括遵循最佳实践,也意味着在面对压力和时间紧迫的情况下,依然坚守质量标准。优秀的程序员深知,...

    程序是怎样炼成的PPT

    在如今这个时代,编程已经成为了一项必备技能,它...同时,通过不断解决实际问题的过程,编程能力将得到实质性的提升,最终帮助我们更好地应对各种复杂问题,成为一个能够运用编程技术解决现实世界问题的优秀程序员。

    系统架构师是怎样炼成的

    以某位系统架构师的职业经历为例:他从一名普通的软件工程师做起,在不断的学习和实践中逐渐成长为一名优秀的系统架构师。在这个过程中,他不仅掌握了多种编程语言和技术框架,还积累了丰富的项目管理经验。特别是在...

    java技能百炼 实用案例

    通过深入学习和实践这些知识点,无论是初级开发者还是经验丰富的程序员,都能在Java技能百炼的过程中不断进步。记住,理论与实践相结合是成为优秀Java开发者的不二法门。在JAVA程序技能百炼这个资源包中,你应该能...

    程序之美系列 (架构之美、安全之美、数据之美 )三本合集

    --架构之美 全球19位顶尖架构师智慧结晶 荣获2009年度引进版优秀图书奖 有志于做出一点东西的程序员和架构师必读!...度量指标、需求收集、设计和法律如何将安全提高到一个新水平。PGP不为人知的真实历史。

    电子工程师前辈的经验——菜鸟必看

    文档列表: 30年职场生涯的感悟.doc 从五个方面把自己打造成最优秀的硬件工程师....一个老程序员的心里话.doc 专家谈单片机职业发展规划.doc 。。。 都是多年工作经验的硬件软件老鸟总结的宝贵思想,分享给大家。。。

    [有关于意志坚强的名人名言]坚强意志的名人名言.rar

    在面对编程难题时,不畏难、敢于挑战是每一个优秀开发者必备的品质。 4. "最艰难的时刻往往预示着即将来临的胜利。" - 尼科斯·卡赞扎基斯。在长时间的代码编写和调试过程中,保持耐心,坚信困难过后便是成功。 5....

    前端大厂最新面试题-2021.docx

    2. 前端应届生如何做一个职业规划 3. 一位大龄程序员所经历的面试的历炼和思考 4. 2~4 年前端走出离职困境与舒适区 5. 业务前端的出路 前端工程师职业规划 1. 如何拿下政采云 P6 的前端 Offer 2. 如何拿下淘宝 P6+...

Global site tag (gtag.js) - Google Analytics