您的位置:首页 > 职场人生

程序员基本能力

2018-02-24 17:05 417 查看
之前一位同事告诉我说:学习编程语言主要是要学习各个语言中的设计思想和算法,并且还要理解清楚其中的各种数据结构以及各种数据之间的转化关系。
各种语言之间都存在相通的东西,所以学习语言可以先专注于一个语言深入学习。学习算法和设计思想,之后再将运用在这个语言中学到的东西类比到其它类型的语言中。达到事半功倍的效果。
一个优秀的程序员是如何炼成的
程序员基本能力:
1.问题分解能力
2.场景分析能力
3.命名能力
4.构建程序一致性思维
5.学习能力和习惯


世界在程序员的眼中不应该是完整的,应该是支离破碎的。好的程序员都是能够将复杂的问题分解为各个小的问题进行解决的。分解为小问题之后,在程序出了问题之后能够进行迅速定位。找到问题出现的具体位置。因为程序员更多的时间是在寻找bug的位置,而不是进行bug的修改。这就需要在程序的设计阶段就进行准确的设计。

编程讲的是如何解决问题。但在你开始写代码之前,你需要清楚如何解决问题。一个好的程序员应该得拥有这样的技能,他能将问题分解成子问题,直到每个子问题都可以很轻松地进行解决。不过要找到一个解决问题的方式可不是件简单的事。好的程序员能够很好的对问题进行建模,这样写出来的程序很容易能看懂,很容易实现及测试。
找问题的时间越长,思考的时间越长。问题越少。
很少有程序天生就是复杂的。如果你看到一段非常晦涩的代码——你无法理解它到底要做什么——这通常就意味着它的实现非常糟糕。这个时候不要撸起衣袖就开始修改代码,而是应该退一步,好好地重新思考一下。当你把整个问题都想透了,你会发现问题其实很简单。


技术和业务是相辅相成的,技术的进步会进一步使用户的需求更加精进。而用户需求的发展会促使技术人员积极提高自己的技术能力。所以程序员的另一个基础能力就是提高自己的理解业务的能力。对业务有了精确到位的理解才能使程序更加健壮。

好的开发人员应当能够考虑到程序的不同场景。这不仅是指程序的逻辑,同样还有的是可能会发生的内外部的事件。要想考虑到业务逻辑的不同路径,你可能会提出这样的问题:如果这个参数为空的话会怎样?如果这些条件都不为真的话呢?这个方法是线程安全的吗?为了弄清楚程序到底需要解决哪类的问题,你可能会问自己:如果队列为空的话怎么办?或者这个请求没有响应?如果这个服务器重启的时候,别的服务器也在重启该怎么办?
公司的各个部门之间都需要进行高效的沟通,而程序员最多的沟通是在和其他的程序员的沟通。其中最主要的方式应该就是使用代码或者业务流程图UML图等各种技术手段进行沟通。因为程序员的时间都是很宝贵的。而其中最基础也是最重要的方式应该就是直接使用代码进行沟通。如果程序中的方法和变量名能够见名知义,看到方法名就能够知道方法所能完成的功能。将会极大的提高程序员的沟通效率。

好的名字可比想像中的要困难得多。我喜欢 PhilKarlton 说的这段话:“计算机科学里只有两件难事:缓存失效以及命名。”命名之所以这么难是由于你得清楚每个名字都代表着什么。有的时候事情并不会那么明朗,只有开发到达一定程度的时候才会清楚。也就是说,重命名和命名一样非常重要
一致性是非常重要的。它包括变量名及分组,方法命名,模块的划分,目录结构,GUI,错误处理,日志,文档,等等。比如说,如果有一些变量是关联的并且出现在一起,那么就应当始终按照同样的顺序来使用它们。
这样的话,如果漏掉了一个或者将它们搞混了就能够很容易发现。对于某个操作而言,如果它在某个地方是叫做 delete,那么就不要在另一个地方把它称为 remove——要坚持使用同样的名字。Steve McConnell 在代码大全中关于准确地使用反义词有一些不错的建议。比如说,begin 和 end 是反义词,同样的还有 start 和 stop。不要混合不同分组的词语(比如 begin 和 stop)。
程序员最重要的不应该是自己现阶段掌握了几门语言会用几种方式写HelloWorld,而应该是具有对语言的精确理解能力。和对新鲜事务的嗅觉和判断力。判断语言是否是过渡类型的语言再决定自己是否深入学习。
通过表面的现象,寻找解决问题的方法背后的逻辑,并形成自己的一套基本思维体系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息