优秀程序员的标准是什么

无数的人问过类似的问题,怎么样才能做一个优秀程序员?在回答这个问题之前,首先得明白什么是优秀程序员,这样才有方向和目标,可是这事情太主观,可能各人的标准千差万别,不谈那些传奇性的独自一人做出伟大事情的特例,也不谈什么上天入地,上帝大牛的诡论,以下是广泛比较认可的,在通常的项目开发中,一个优秀程序员的标准。

解决问题的能力

在项目开发中,一个程序员的能力等于其解决问题的能力。假如想有个尺度来衡量这个能力的话,一个程序员的能力可以用能完成任务的规模和难度来衡量。

因为难度上不好那么简单的划分,并且在一般的项目开发中(非研究性项目),任务的难度主要来自于任务的规模带来的复杂度,这里把任务从规模上大致的划分为1个函数=>1个类=>1个功能=>1个模块=>1个项目

更细致的划分时,函数,类,功能,模块,项目本身也有简单和规模大小之分。

一个初学编程的人总是从最小的函数和类开始学习的。

一个程序员能基本无误的完成项目中的一个功能算是合格,在此之前,对项目的生产力为负,即为他布置任务,沟通,和为他修补bug的时间其实要多于自己直接完成该功能的时间。也就是说,项目中存在这个水平的程序员纯粹是为了培养人才。

能较好完成一个完整模块的程序员算是较好的程序员,也是一般项目中的主要开发者。

能完成整个项目的程序员才能算是好的程序员。在多人项目中可做主程。

不同规模的任务主要的问题也体现在不同的方面:

对于初学者来说,写好一个函数和类的难点在于语言本身的语法上。

对于完成一个功能来说,难点在于理解这个功能,以及很好的在现有的代码中加入此功能,完成的功能不是独立于项目之外的,而是要融入项目本身,除了功能本身和其他功能衔接正常无误外,特别重要的就是注意功能实现后不能对其他功能产生预期外的影响,作为游戏开发来说,典型的例子就是你完成的UI不能让其他该显示的UI显示有问题,不该显示的UI又没有消失。

对于完成一个模块来讲,暴露给外部的接口设计比内部实现的设计同样重要(甚至更加重要),合理易使用的接口设计决定了一个模块的好坏。模块内部实现不好尚可更改,接口实现不好,更改起来可能是灾难性的。

对于一个项目来讲,在正确的地方使用正确的解决方案是最重要的事情,最开始的技术选型直接决定项目的成败,模块的划分能决定项目的开发速度,架构的设计能决定项目的维护难度和增加需求时的痛苦程度。对于多人项目来说,主程让正确的人去做正确的事情也是无比的重要。

什么决定了一个程序员解决问题的能力呢?我认为有如下几个因素:

知识积累

在同等水平的程序员之间,一个对某领域问题有所了解,一个对该领域完全不了解,完成该领域同样任务的效率差了不止一个数量级。这就是我们通常所说的"经验"的作用,这种经验可以看作是知识积累,

一个程序员的知识积累很大程度上决定了其解决问题的能力。

有意思的是,因为经验这个事情不太好有准确的衡量标准,我们为了简单,常常就拿工作几年说事,但是这种粗暴的标准有很大的问题,工作年限同样长的人水平差异可以是巨大的。

按老话说,用一年的经验工作二十年并不等同于二十年工作经验。

自学能力

这是一个知识大爆炸,知识刷新频率让人无法追赶的时代。一方面,面对一个稍有难度的任务,难免会有超出自己现有的知识范围的时候,此时自学能力决定了你能多快的完成此任务(或能否完成此任务)。另一方面,你的自学能力决定了在平时的工作过程中,你积累知识的多少。

自学能力强的人,即使没有人指点也总能在项目的代码中学到东西。而反过来,学习意愿弱的人写的代码被别人重构后,也不会想想,这段代码是否改的更好了以及为什么。同时,一个自学能力强的人也更有希望主动的在业余去学习更多的知识,而不是直到工作中碰到才去被动学习。

从较长的尺度上(比如一个人的工作生涯)来看,一个程序员知识积累的多少只决定于其自学能力和他对编程本身的兴趣。

品味

本来我是想把一个程序员的品味单独列出来的,后来仔细想想,一个程序员的品味其实不是一种天生的能力,而是基于现有知识的积累,形成的对事物的看法。所以把品味放在自学能力下面的。同样的,其实通常说的正确的思维模式和方法,其实也是来自于知识的积累。这里我就根本不提这一条了。

品味往往用于形容一个人对时尚衣着,食物等的看法,其实对程序员来说,品味也很重要。

不同的品味不仅决定了不同的语言设计者怎么设计编程语言,也决定了一个程序员在做项目时会使用什么语言,什么框架。

不同的品味决定了你会选择什么样的操作系统,什么样的工具,用什么样的代码规范。

不同的品味甚至还决定了你会选择什么样的职业发展方向,什么样的平台,开发什么东西。

对代码的品味决定了你看到一段不好的代码就能"闻到坏味道",对解决方案的品味决定了你在开源/闭源,激进/保守,简单/功能强大但复杂等解决方案之间的选择。

了解正确的做事方法

这里提及的正确的做事方法不是指写代码这个层面上的,而是指一个项目进行过程中碰到问题的解决方法,比如在需求不明确的时候知道需要先明确需求,知道自己需要先理解问题了然后再开始真正的进入代码层面的工作,知道碰到什么问题能自己独立的解决,知道碰到什么问题自己需要先和其他人沟通了再决定。知道自己需要先测试才能保证自己代码的质量等。

这些问题说起来简单,但是不这么做的话,常常带来让人无语的后果。一个好的程序员,起码要先了解这些。

沟通的能力

知识的积累很大程度上决定了一个程序员解决问题的能力,但那好歹是只要努力就能学到的东西,而以下这些,我甚至都不明白差异的形成是在我们很小的时候就定下来了,还是在工作中还能继续学习。

在一个分工明确的项目中,程序员需要和产品(策划)沟通以理解产品,和上级沟通以理解自己的任务,和同事们沟通以正确的理解要接入的模块。无论哪一个方面沟通出了问题都不是小事情,同时,程序还需要正确的给产品(策划)传达设计的实现难度,以及在自己完成模块时让别人正确的理解模块的接口。在不写文档时,正确的口头沟通非常重要,需要写文档时,文档的写作能力也算做是沟通能力的一部分。

如上所述,沟通的能力非常重要,但是好的程序员似乎天生就不太会沟通,你会发现很多技术顶尖的人,其实本身就是有社交障碍或者自闭症,因为自闭,才能心无旁骛的潜心钻研技术,达到更高的技术水平,很难想象一个"社会活动家",他哪有那么多功夫去学习,没有时间学习,又怎么能成为一个技术顶尖的人。这是一个两难的问题。就理想的情况来看,一个程序员最好是沟通能力足够好(能正确完成上述沟通工作),但是又能足够的静下心来学习和钻研。当然,这是最理想的情况,在实际中,两者之间的较大波动范围都算是可以接受的好程序员标准。

对工作负责,对代码有追求

对工作态度消极,代码总等到别人来测试,写代码以完成功能为唯一标准,也不管bug是否成堆,代码是否丑陋不堪,这种程序员就算是工作一万年也成不了好程序员。

一个好程序员就该对自己的工作负责,对自己的代码有追求,不仅要完成功能,还要代码优美,不说要把代码写成艺术品,起码也要当作自己的脸面来维护。一个程序员不能容忍自己的脸上乱七八糟,那么也同样不应该能容忍自己的代码乱七八糟。

事实上,别的程序员在了解你之前,先看到的是你的代码,通过代码,就能知道你是怎么样一个人。项目紧,随手写,以后改都不能成为写烂代码的理由。

一个好程序员,起码是想要把任务完成好的,起码是想要把代码写好的,不然如何能称其为"好"。

怎么提高自己解决问题的能力?

其实转了这么大个弯,怎么样做一个好的程序员的问题可以转为问怎么提高自己解决问题的能力。

沟通能力,对工作负责任的态度,对代码的追求,很大程度上由性格决定,我不知道实际中怎么简单的去提高,这里只稍微的谈谈我对知识积累的一些看法吧。

最后,如果认定自己是要做个程序员,那么一定要不断学习,不如看看北风网的一些课程或者听听公开课,你会更加明确的!

文章相关课程 程序猿七种武器之笑傲江湖系列(工具篇、数据库、操作系统、网络篇、工程篇、算法篇) 零基础Android手机嵌入式开发实战课程(网吧计费系统、多功能播放器、驱动开发) 零基础嵌入式Linux开发工程师高端培训(ARM实战、系统移植、驱动开发、网络电子书开发)

时间: 2024-09-20 00:37:36

优秀程序员的标准是什么的相关文章

可以使你成为更优秀程序员的5个好习惯

我们都希望能够在我们所做的事情中得到成长,在WEB开发领域,我们花费时间最多的就是编写代码.这可能包括HTML, CSS, JavaScript, PHP, Python, ActionScript或者任何其他你构建WEB站点时选用的语言. 这篇文章中,我们将分享一些实际的步骤,使你可以扩充技能,成为一个更优秀的程序员.我们提出五个不同的生活习惯,它们可以使你在你所从事的领域变得更加优秀. 1. 一个时间段内只专注于一种类型的语言 如果你正在设计或开发网站,你将需要同时熟悉多种不同的语言.你可能

优秀程序员的十个习惯

--转来和大家一起共勉 在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer).经过一段时间后,这些人也许能够成为一个 优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作.但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需要注意,如果你能让下 面十个条目成为你的习惯,那么你才能真正算得上是优秀程序员. 1. 学无止境 .就算是你有了1

优秀程序员素质培养

踏入程序员这个行业,你就注定要学习一辈子,新技术层出不穷,技术体系更新快速,这是和其他行业最大的区别之一.所以,如果你想在这个行业混出点样子,那么请你随时做好学习的准备,如果你想成为优秀的程序员,那么一定要有正确的学习方式,下面推荐几条程序员的最佳学习方式,希望能帮你事半功倍. 书籍和期刊是必不可少的 无论你是新手菜鸟还是高级程序员,你都离不开书籍,当然我们要有选择的读书,尽量选择一些经典的书籍来看,如果你英文水平比较好,那么读一些老外撰写的书籍是最好不过的了.书籍能让你在繁杂的互联网上总结出一

那些优秀程序员身上的共同特质

你是否发现,在我们身边的那些优秀程序员身上总是能找到一些共同的特质,这些特质并非与生俱来,但却逐渐在他们身上留下深深的烙印,这也使得他们变得与众不同,更成为我们心目中的佼佼者. 至少深入理解一门编程语言 学习编程和学驾驶很像,你很容易就能学会驾驶,比如,经过一个月的驾校培训,你就能获得驾照,但要真正成为一名优秀的司机,却必须经过长时间的驾驶实践才行,这将帮助你在头脑中形成一套完整意识体系以应对驾驶中所遇到的不同情况.编程也是一样,当程序员们作出那些优秀的程序设计时,看似自然,但它的背后却是程序设

具备这些特性 说明你是个优秀程序员

编程是个很复杂的玩意,但是成就优秀程序员的很多因素和我们在学校中早期学到的相差无几.本文灵感来源于Robert Fulghum的<All I Really Need to Know I Learned in Kindergarten>. 1.分享 尽可能地使用开源,并且如果有能力的话也可以把自己的成果分享给大家.整个社会的智慧结晶肯定比一些大公司自管自闭门造车要好. 2.公平的心态 不要以为你的选择就是唯一能奏效的,试试其他技术.框架.方法和建议,也许其他的选择比你原先的好也未可知.要用开放的

避免成为优秀程序员

我曾经和我认为优秀的程序员一起工作,但是他们是真正优秀的程序员吗?是什么让他们如此优秀?(或者,他们只是普通的程序员?) 最近读到Mark Pearl博客里一篇名为<Programming, a Subset of Writing>的文章,其中的观点让我十分推崇,尤其是下面这段: 优秀程序员和普通程序员最大的区别在于,优秀的程序员会使用整洁.易于理解的方式进行编程,任何不必要的复杂代码均不会出现.和我工作过的那些真正优秀的程序员总是尊学这样的编程步骤:写代码.重构.进一步重构. 就像日常生活技

成为优秀程序员的十个有效方法

http://www.aliyun.com/zixun/aggregation/7026.html">优秀的程序员是在穿过一条单行道的时候还会往两边看的人. 作为一个IT行业的软件程序员,每天驱使我们日复一日的辛勤工作的,是来自我们对编程的兴趣和激情.但是要让编程变得始终有趣,我们必须学会坚持某些成为优秀程序员的基本原则. 我并不是要写出一些咒语,你照着执行就可以成为一个优秀程序员了.我的目的是想记录下我学习到的和用过的一些有用的经验,它们帮助我获得比较好的结果.对于优秀程序员是没有明确定

优秀程序员与普通程序员在行为上的差别

优秀程序员的行为: 拿到任务,就开始仰望星空或天花板上那盏高悬的电灯棒,状如老僧入定 忽而皱眉,忽而展颜一笑,忽而手舞足蹈,忽而在纸上指指戳戳,忽而口中念念有词,忽而长吁--感觉有点神经病啊 桌子上摆的是代码大全.设计模式.敏捷实践之类的书籍,并且没有灰尘 chrome或firefox的书签栏里分门别类,类别多于10个,8个以上是技术相关的 容不得破窗户,看见别人的烂代码就想改过来 随手就能在白板上画出软件的流程图或者时序图-- 项目做完了,别人在打游戏.看视频.忙着回复QQ.向剁手族前进,他在

优秀程序员无他-善假于物也

运用一门程序设计语言对大多数程序员来说是小菜一碟,但是更上一层楼成为一名专家级的软件开发者,恐怕目前还是大多数人的梦想.<程序员的思维修炼>一书中将程序员分为5个层级:新手,高级新手,胜任者,精通者,专家.根据作者的调查研究结果,在这5个层级中,大多数的程序员属于高级新手.而且居于这个层级的程序员从入行1.2年的到工作10来年都大有人在. 身为一个程序员,如何才能尽快的突破自身的瓶颈,得到快速的提升那?这可真不是三言两语可以说清楚.本人09年毕业投身软件行业,2012年初离开工作了三年的公司A