优秀的程序员和一般的程序员差别在哪?

郭凛手艺人,自学编程18年,创业中

知乎用户、张小乖陈刀之  等人赞同
在我平时所见到的程序员中,如果纯以编码能力来看,个人觉得可以分为五类,依次是:

1. 拷贝型
拷贝型选手就是传说中的“代码拷贝员”了,他们对实现功能几乎没有思路,所作的事情就是从网上或是之前其他团队成员写的代码中拷贝出片段,然后放到项目中,如果运行项目出现了期望结果,则表示任务完成。
这类人只会改代码,却不会写代码。他们大多对编程毫无兴趣,只是希望以此糊口而已。

2. 新手型
当产品有功能需求时,由于经验有限,程序员并不完全知道要如何实现这个功能,需要通过学习、寻找资料等方式来解决问题。
这种情况下的编码过程,程序员的主要目标是“完成功能”,那么很难有多余的心思去考虑边界条件、性能、可读性、可扩展性、编码规范等问题,因此代码bug可能较多,稳定性不高。常常会发生开发花费1个月,改bug却要改上好几个月的事情。

3. 学习型
这类程序员对所在领域的语言已经比较了解,对于一般功能可以有较为清晰的实现思路,给出需求时可以通过自己的思路来实现,并且会一定程度上考虑边界条件和性能问题。但仅此而已,他们对可读性和可扩展性考虑很少,也没有项目级别的考虑,主要是希望通过实现代码来练手或是学习。
这类程序员最大的表现在于喜欢“创造代码”,即使有现成的实现,他们也希望自己来实现一套,以达到“学习”的目的。他们不喜欢复用别人的代码,看见项目中别人实现了相类似的功能,他们会以“需求不同”的借口来自己重新实现一套。这类人一般来说对技术有着较为浓厚的兴趣,希望能够通过项目来进行学习。
从项目的角度来说,这种做法最大的麻烦在于开发周期可能较长(相比直接使用现成的实现),并且会使得项目代码膨胀,影响未来的维护。但这类程序员由于有兴趣,如果好好培养或许会成为明天的牛人。

4. 实现型
这类程序员一般有较为丰富的经验,由于写得太多,因此不再追求“创造代码”来进行学习,同时对所在领域可能涉及的很多第三方框架或是工具都比较熟悉,当接受到产品需求时,对功能实现方案已经了然于胸,因此他们可以快速的实现需求,并且对边界、性能都有一定程度的考虑。因为能够快速实现需求功能,经常会被团队评价为“牛人”。但他们一般仅仅停留在“完成功能”级别上,对代码的可读性、可扩展性、编码规范等考虑较少,对项目总体把握也较少(例如控制项目膨胀、方便部署等架构级别的东西)。
这类程序员最大的表现在于喜欢“开发项目”,却不喜欢“维护项目”。他们产出的代码最大的问题就是维护较为困难,可能过上几个月回头看自己的代码都会晕头转向。因此即使是自己写的代码,仍然不愿意维护,一般会苦了后来人。
因为接口设计的缺乏,当需求变更时,发现代码要改的东西太多,然后抱怨需求变化,却很少认为是自己的代码问题。这样的项目如果经过长时间的变更维护,最终会变得难以维护(一般表现在需求变更响应时间越来越长)甚至无法维护,最终要么是半死不活,要么是被推倒重来。

5. 架构型
这类程序员比实现型更进一步,他们经验丰富,对相关框架和工具等都很熟悉,“完成功能”“稳定性”“性能”这些已经不再是他们的追求,更优美的代码、更合理的架构才是目标。
这类程序员代码设计大多建立在对需求的详细了解和对需求变更的预测上——可扩展性较好;代码细节也尽量多的考虑边界情况、性能——稳定高效;代码命名和注释都恰到好处——可读性较高;同时在开发过程中他们会不断重构,对代码做减法——保证项目可持续发展;等等
但由于考虑问题较多,单从“实现功能”阶段来看,完成速度不一定会比“实现型”要快。只是到了项目中后期优势才会慢慢体现出来

也许还有更优秀的程序员我没有见过,呵呵,欢迎大家补充
2011-07-11  28 条评论             

郝培强iOS开发者,Tiny4cocoa创始人

张小乖Yang Thomas、知乎用户  等人赞同
我觉得好程序员的标准:
1、要懂逻辑,这点其实挺难达到,很多很不错的程序员其实逻辑能力不行,所以我觉得限制了他们更深一层次的发展。或者说限制了他们解决特别复杂问题的能力。
2、要有分析能力。这也是解决复杂问题不可或缺的能力。
3、要会自学,技术发展速度很快,如果没有自学能力会被淘汰的。所以在中国英语要好,不然看不懂最新的技术走向。
4、要有良好的时间管理习惯和意识。
5、要有耐心,肯于付出。
6、要有良好的工作习惯。
7、会看且勤于看文档。

我自己很多点都达不到,但是希望能努力,慢慢达到吧。
2011-07-11  5 条评论             

安江泽抵制程序员鸡汤

知乎用户、范捷琦于天航  等人赞同
有很多特质使得一个程序员是优秀的程序员,那么什么特质都没有的自然是一般的程序员了。

1. 创造型/创新型
以创造/创新为乐的程序员。以新的方法解决现有问题,发明方法解决尚未解决的问题。问题本身并不限于技术领域。硅谷很多技术创始人具备这类的品质。虽然他们创业后都不再全职写代码,但他们这种品质贡献了他们事业的第一步;

2. 管家型
以管系统演化为乐的程序员。有洁癖,有强迫症,容不得系统有一点的瑕疵。如果你招聘了一个程序员/架构师,2-3年后你的互联网产品再也没有在可见/可扩展性上遇到瓶颈,他多半是这种程序员;

3. 学院派型
通常在CS某一领域拥有博士学位,或者深受他们的影响的人。对该该领域兴趣浓厚,通常参与企业核心竞争力相关的研发工作。当然,也有一部分也具备第一种特质,中途去改变世界去了;

4. 经验型
在行内具有多年丰富的经验,可承担责任,考虑全面。团队拥有了这种人,通常会少走很多弯路。但面对新的挑战还是要和其他人站在同一起跑线上的;

5. 钟表匠型
喜欢并擅长把一个系统从里到外研究通透的人。分享出来都是从里到外让人垂涎欲滴的干货。很多后端工程师都是这种类型;

6. 折腾型
擅长“折腾”,方案没有最好的,只有最难的。:)兴趣广泛动手能力强,通过折腾留下很多技术积累。想用哪一块的新技术?先问问他把,8成他很久前就已经玩过了;

7. 肉盾型
哥甲高血条长,加班如同切菜一般,逼急了不睡觉也行。只伸手要过两件东西:原型和咖啡。适合打闪电战。当然,可能事后要打打后勤重构下代码。:)
2012-04-12  2 条评论             

何明璐网名人月神话。关注产品管理,IT项目管理…

付田原、知乎用户、yaocoder  等人赞同
1.对编程有浓厚的兴趣,由兴趣能驱动自己的探索和钻研精神,优秀程序员一般喜欢用业余时间探索和自己琢磨点东西,研究点开源框架和源代码,关注新技术,喜欢研究和探索算法,逻辑方面的内容。
2.优秀程序员一般比较懒于做重复的事情,对于重复事情有独有的程序员思维,即通过程序或其它自动化方式解决重复问题,而留更多时间去思考。
3.优秀程序员更多的会从简单功能实现,花哨的界面转移到对安全,性能,可扩展等底层架构的关注。
4.优秀程序员一般有较明显的自恋和偏执特征,有较为希望独自工作的特征,比较难于被非技术背景管理者驾驭,高度强调自我能力价值的被认可,而且很多优秀程序员并不是好教练。
5.优秀程序员一般有较为扎实的算法,数据结构等理论知识的基础。这些让他们在迅速进入新领域的时候快人一筹。
2011-07-11  添加评论             

雁渡灯塔如暗礁

viking garsky、知乎用户、刘畅  等人赞同
著名博客作家Alex Iskold在《明星软件工程师的十种特质》一文中给出答案:1.热爱编程;2.完成事情;3.持续重构代码;4.使用设计模式;5.编写测试;6.善用现有代码;7.专注可用性;8.编写可维护的代码;9.能用任何语言编程;10.知晓基本的计算机科学。

特别是2,3,5,6,8,10我觉得是最重要的。

这就是优秀程序猿。
2011-07-12  3 条评论             
cuizineDion、知乎用户  等人赞同
  • 优秀的程序员写的代码极其优雅少而精炼,不多不少)
  • 他们喜欢思考(生活和代码的世界其实是相通的)
  • 他们知道,他们写代码,不单单只是为了实现功能,更是为了解决用户问题,实现价值。
2011-12-01  添加评论             

周立当时不杂

知乎用户、樊士庆大果 赞同
优秀的程序员,博观约取,厚积薄发
一般的程序员,相反
2011-07-11  1 条评论             

vczh专业造轮子 gaclib.net

杨辰李明亮、知乎用户  等人赞同
优秀的程序员不想这些问题,时间都花在学习上了
2013-12-02  7 条评论             

申延刚正在做自己的一个小项目,做成了就去找工…

我认为程序员分 白天程序员和夜晚程序员,区别是夜晚程序员是真正的爱着编程,白天程序员只是在糊口,而且夜晚程序员无法理解白天程序员,coolshell有说这事
2012-04-12  7 条评论             

牛辉奋斗在路上的产品经理/梦想做职业规划师

朱冰一、知乎用户、孟达  等人赞同
最近看了一些关于程序员的职业发展思考的文章,然后听了场公司一个写了10年代码的程序员的培训,工作后也和蛮多的程序员合作过,程序员的自我修养如何修炼,才能有比较好的职业发展路径,站在PM的角度谈下自己的想法仅供参考:
1.事情做得专业的前提是能关注到细节
我觉得细心谨慎是程序员最基本的修养和素质,逻辑能力啥的倒是更为上一层的事情。整天想好的算法和架构是没有用的,你知道当你跟产品经理说解了半天的bug是因为少了个分号的时候,产品经理心中鄙视的是多么的波涛汹涌么。
如果连这些代码基本的细节都不能注意的话,谈何其他呢
2.尊敬每一个人就像尊敬代码一样
很多程序员是傲娇的,觉得产品就是自己做出来的,其他的人都是辅助的。所以很多程序员心里是看不上产品,测试的,也就造成很多沟通障碍。
首先上面这种人一定一辈子只能写代码,哪怕技术再牛。
我不太认同写代码只能写到30岁,但是程序员30岁之后,要想有更大的发展,那么做团队管理,要么做技术咨询,才能让自己的能力和积累的经验扩大化,那么这个时候,卓越的沟通能力往往成为关键。
3.用经验堆砌出你的产品技术全局观
这个就涉及到架构方面,产品经理提出需求,不仅仅想听到的是这个需求可以做还是不可以做这么简单,而是如果可以做,那么开发成本是怎样的,会对目前的系统产品模块造成哪些影响,有哪些的risk,如果不可以做,有没有好的替代方案或者简化方案。
如果在需求评估的时候,PM可以得到这些答案,一定会跪舔你的
当然,另一方面,如果在前期评估中,这些都没有想到的话,后期造成的种种后果也是需要程序员自己承担的。
4.做好情绪管理
理论上,程序员都是冷静的。但是现实中,情绪冲动的也是蛮多的,我不知道这样的性格会对写代码有何影响,但是因为情绪影响了判断就不好了,例如因为需求反复修改就索性说这个代码实现不了这种事情,终究会对自己的信誉造成很大影响的。这种事情我经常遇到。。。
5.技术要做到精益求精
编程语言那么多,多语言的程序员虽然抢手,但是如果是半瓶水的水平,估计也是没人愿意要的。
现在程序员非常多,是因为这个行业入门的门槛非常低,也就造成行业的水平参差不齐。做一个网站很难么,找个现成的框架,懂点数据库,建个数据表,前端再找个现成的模板,修修改改一个网站就出来了。
但是满足这样就完了?那么水平可能永远就是这样了,其实这其中每一个点都是可以研究的很深的,比如网站的大数据存储,如何提供程序并行运行的效率,,未来计算机行业的技术分工会越来越细,任何一个方面的专家都是相当有用的
6、职业规划,其实你没的选
听一个前辈讲,自己也对职业也很迷茫过,后来索性去创业了,但是失败的一塌糊涂,最后才明白,自己最会的还是写代码,最懂的还是Java,有时候其实你没的选
7.Stay hungry ,Stay Foolish
技术是永无止境的,好的程序员必须保持对于新的技术敏感度,保持学习的热情
同时看书学习可以更多的得到思维模式,可以在最快的时间发现问题的所在
如果没有好的思维模式,很多程序员遇到需求了,先百度,看看有没有相似的代码,遇到bug再去百度下,看看别人是怎么解的,这种永远只是码农而已
听说一本好的程序书籍至少要读12遍才能理解。。。 显示全部
2013-07-15  添加评论             

韩亮待业者

知乎用户、王宇鹏 赞同
从业1年以下的不在此评价中。
是10行代码还是50行代码就能解决问题的不在此评价中。

写代码实现结果是程序员最基本的要求;
在指定时间内完成任务的前题下,做到下面任意一条即为优秀程序员:
能不断的优化自己曾经写过的代码使效率提升,即为 优秀程序员。(经验,高薪)
能说服问题提出者,不通过程序解决问题的,即为 最优的程序员。(发展,高职)
注:BUG不属于上述话语中的问题。


在问题提出者可接受的最晚时间内完成任务的,即为一般程序员。
2012-10-17  2 条评论             

木塔半吊子程序员

知乎用户、谢震宇 赞同
优秀的程序员是一个善于和产品沟通的人,能知道为什么要这样做并能提出合理建议以及准确实现功能需求
2013-03-18  添加评论             

徐杰瑞见的人多了,我就越来越喜欢狗。

安迪、知乎用户、马乐  等人赞同
优秀的程序员最终总是能解决问题,而且不论花多长时间, 他/她对这个问题能否解决,如何解决有很清楚的思路和想法, 他可能用1个星期解决一个bug,但是他解决bug的方法绝对是有计划性的;一般程序员基本上只能解决与自己解决过的问题高度相似的问题,如果这个问题没碰到过, 基本上就是乱试碰运气了。这个说起来容易, 做起来就难了, 基本上是综合了一个人的智力,体力,经验,对系统的了解, 业务知识,底层理解, 对架构的掌握,语言的细节的把握。。。等等很多方面, 简单的说, 优秀的程序员看起来好像总是能够避免问题, 而一般的程序员却总是被一些乱七八糟的问题给挡住 --- 这个其实不是偶然的, 有一定的必然。
2013-03-17  添加评论             

知乎用户,Do you want to build a snowman?

赵玉豪、知乎用户、樊士庆  等人赞同
楼主这么问,想必认为自己是一般的,而想做优秀的,所以进取心就不用提了。其实程序员只是一种职业而已,和其他的职业没有什么特殊的地方。都是通用的。

1.有健康的身体。这样才能有精力做事和思考,是大前提。
2.要做事先做人。和人相处的好会降低自己的消耗,消除偏见就可以从别人身上学很多东西。
3.增强思考判断的能力。知道什么对自己有利什么对自己有害,学会取舍。
4.学会管理时间。增加效率。
5.有好的运气。想有成就必不可少的因素,你懂的。

刚才想了想,漏了一条,信息很重要,要学会收集、过滤、吸收信息。
2011-07-11  添加评论             
在我看来,没有优秀程序员和一般程序员,只有 程序员码农

如果按排名第一的  @郭凛 的答案来分类,那就是5是程序员,1234是码农。

举个栗子:


A:对于我们这种需要多方合作的项目,还是用git比较方便管理。
B:svn很牛逼的!我用了很多年了!
A:git的分支很方便,合并操作相当简洁且没有负担。
B:svn也有分支!百度上说svn更适合企业!
A:git只有一个.git目录来管理所有版本,在排除的时候很方便!
B:svn现在也支持单 .svn目录了!

再举个栗子:

A:为什么我们网站的根目录下面还有个.settings和.project文件夹?
B:我上传时候直接用flashfxp一拖就上来了,没看有什么文件夹。
A:为什么我刚才pull之后在项目库下面多了个 未命名.txt 文件?
B:嗯,那是我自己做笔记备份用的。

三举个栗子:

A:为什么Hero这个类有1万行?
B:我觉得把所有功能写在一个类里面很方便啊!
A:为什么这段代码复制了4次?封装成函数啊!
B:啊!有么?
A:这几个类为什么不用适配器模式?
B:什么是适配器模式?

最后举个栗子:

B:怎么加一个Sprite到Node中?
A:Node.addChild(Sprite)
B:我要在加的时候设置层级关系!
A:RTFM!

码农真正意识(而不是调侃)到自己是 码农的时候,TA才可能成为一个程序员。

而当TA成为一个程序员的时候,TA才有资格站在山脚下,憧憬着那那高耸入云的峰顶,开始攀登。
2014-03-07  2 条评论             

品雪做程序员好多年

知乎用户、知乎用户、杨海坡  等人赞同
会想着把代码写得能见人
2011-07-11  添加评论             

蓝文混沌

知乎用户、李亚辉yava 赞同
转别人的话:不想当ceo的程序员,不是好的产品经理。

优秀的工程师像ceo那样珍视自己的产品,并且像产品经理那样力求完美。
2011-07-11  3 条评论             

周临技术宅,地图控

冀宇航刘星瑜、知乎用户 赞同
优秀的程序员看到这个问题的时候,第一反应是不去看答案。
2012-10-26  添加评论             

罗楷创新工场工程师

知乎用户、唐呈光 赞同
优秀的程序员,执着、热情、yous有时候还有点固执……
2011-07-12  添加评论             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值