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

 一个优秀的程序员是如何炼成的?他们关注什么?问一下本身这个问题会颇有意思。这能让你好好思考一下软件开发的过程。拿它来问一下同事也不错,这能引发一些关于如何一块儿协做的颇有意思的讨论。下面是我认为成为一名优秀的程序员所必需的5个技能。程序员

问题分解编程

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

       我所见识过的一些复杂的程序,它们之因此这么复杂,部分缘由是因为它的实现并不适合对应的问题。这致使代码很难理解。我很赞成Bernie Cosell关于问题建模方面的见解:安全

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

 

场景分析框架

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

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

 

命名测试

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

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

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

 

一致性

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

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

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

 

学习

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

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

结论

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

免费领取兄弟连IT教育原创PHP教程光盘/《细说PHP》精要版,详情咨询官网客服:http://www.lampbrother.net

学PHP、Linux、HTML五、UI、Android等视频教程(课件+笔记+视频)!联系Q878769237

欢迎加入PHP交流群  176362750