文档章节

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

zhengxiaohui
 zhengxiaohui
发布于 2017/01/22 15:01
字数 2398
阅读 12
收藏 0

【以下内容为转载,有几个人写的不错,我把跟我想法一致的整理了一下。】

在我平时所见到的程序员中,如果纯以编码能力来看,个人觉得可以分为五类,依次是:

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

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

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

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

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

也许还有更优秀的程序员我没有见过,呵呵,欢迎大家补充

优秀的程序员写的代码极其优雅(少而精炼,不多不少)
他们喜欢思考(生活和代码的世界其实是相通的)
他们知道,他们写代码,不单单只是为了实现功能,更是为了解决用户问题,实现价值。

要做事先做人。和人相处的好会降低自己的消耗,消除偏见就可以从别人身上学很多东西。
增强思考判断的能力,要学会收集、过滤、吸收信息,学会取舍。
学会管理时间。增加效率。

事情做得专业的前提是能关注到细节。
我觉得细心谨慎是程序员最基本的修养和素质,逻辑能力啥的倒是更为上一层的事情。你知道当你跟产品经理说解了半天的bug是因为少了个分号的时候,产品经理心中鄙视的是多么的波涛汹涌么。如果连这些代码基本的细节都不能注意的话,谈何其他呢。
尊敬每一个人就像尊敬代码一样
很多程序员是傲娇的,觉得产品就是自己做出来的,其他的人都是辅助的。所以很多程序员心里是看不上产品,测试的,也就造成很多沟通障碍。

用经验堆砌出你的产品技术全局观
这个就涉及到架构方面,产品经理提出需求,不仅仅想听到的是这个需求可以做还是
不可以做这么简单,而是如果可以做,那么开发成本是怎样的,会对目前的系统产品模块造成哪些影响,有哪些的risk,如果不可以做,有没有好的替代方案或者简化方案。
如果在需求评估的时候,PM可以得到这些答案,一定会跪舔你的当然,另一方面,如果在前期评估中,这些都没有想到的话,后期造成的种种后果也是需要程序员自己承担的。
做好情绪管理
理论上,程序员都是冷静的。但是现实中,情绪冲动的也是蛮多的,我不知道这样的性格会对写代码有何影响,但是因为情绪影响了判断就不好了,例如因为需求反复修改就索性说这个代码实现不了这种事情,终究会对自己的信誉造成很大影响的。
技术要做到精益求精
编程语言那么多,多语言的程序员虽然抢手,但是如果是半瓶水的水平,估计也是没人愿意要的。现在程序员非常多,是因为这个行业入门的门槛非常低,也就造成行业的水平参差不齐。做一个网站很难么,找个现成的框架,懂点数据库,建个数据表,前端再找个现成的模板,修修改改一个网站就出来了。但是满足这样就完了?那么水平可能永远就是这样了,其实这其中每一个点都是可以研究的很深的,比如网站的大数据存储,如何提供程序并行运行的效率,未来计算机行业的技术分工会越来越细,任何一个方面的专家都是相当有用的
技术是永无止境的,好的程序员必须保持对于新的技术敏感度,保持学习的热情同时看书学习可以更多的得到思维模式,可以在最快的时间发现问题的所在如果没有好的思维模式,很多程序员遇到需求了,先百度,看看有没有相似的代码,遇到bug再去百度下,看看别人是怎么解的,这种永远只是码农而已
听说一本好的程序书籍至少要读12遍才能理解。。。
 

 

本文转载自:https://www.zhihu.com/question/19759297

zhengxiaohui
粉丝 1
博文 48
码字总数 12262
作品 0
福州
Android工程师
私信 提问
自由职客干货:程序员和老板谈判拿高薪需要注意什么

每个程序员刚开始工作心里都有一个想法:快速进步。快速进步通过公司考核成为正式员工,快速进步跟上项目的进度,快速进步谋求更好的发展,快速进步成为技术大牛为人敬佩崇拜…… 此外,快速...

机智的序员
2017/03/10
2
0
自由职客成程序员快速进步获高薪的法宝

每个程序员刚开始工作心里都有一个想法:快速进步。快速进步通过公司考核成为正式员工,快速进步跟上项目的进度,快速进步谋求更好的发展,快速进步成为技术大牛为人敬佩崇拜…… 此外,快速...

机智的序员
2017/03/06
1
0
月薪8000和月薪30000的程序员差在哪里?

在现实中差距可能会更加的巨大,月薪三万的程序员公司还生怕留不住人,想办法给争取更高的利益,月薪八千的程序员公司对于这种水平的人觉得开这个数目还觉得太多了,在公司很没有地位,为什么...

技术小能手
2018/07/23
0
0
程序员追求的是什么?

上周我收到三位Halmstad大学学生的电子邮件,他们正在做一个为期三月的项目,内容是关于程序员在工作中追求的是什么,以及企业如何吸引有才华的程序员。下面是我对他们问题的答案,按重要程度...

oschina
2013/04/01
7.1K
46
北京尚学堂:程序员追求的是什么?

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。本文为北京尚学堂原创文章,未经允许不得转载。 程序员追求的是什么 现在依旧清楚得记得我们毕业那年做的最后一个项目,一个为期三...

SXTkaifa
2016/10/28
22
0

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
33分钟前
4
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
47分钟前
90
5
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部