说起程序员人们的第一印象就是工资高、加班凶、话少钱多头发少。再加上现在科技互联网公司太吃香,BAT、华为、小米等公司程序员加班情况被广泛传播,程序员用生命在敲代码的印象刻在了很多人的心里。

与其它行业一样,凡事都有高级和普通,虽然都是敲代码但也有大牛和普通之分,大牛程序员,一个人比一个团队做项目都做得快,最为出名的当属十几年前求伯君在做wps时,一个人完成了微软二十人团队没有完成的项目需求,也让wps在与微软的竞争中站稳了脚跟。程序员的能力差距真的比贫富的差距还要大,除了能力当然还有一些其他的影响因素。
从工作的方面来说,普通程序员和高级程序员一般有下面几个区别:
1
一、普通程序员
1、知识体系零散,没有系统性的思维,在写代码、改bug的时候没有工程素养,往往是拆了东墙补西墙。
其实在面对一个未知的问题时,如何定位复杂条件下的核心问题、如何抽丝剥茧地分析问题的潜在原因、如何排除干扰还原一个最小的可验证场景、如何抓住关键数据验证自己的猜测与实验,都是体现程序员思考力的最好场景。
2、对某种语言的依赖性太强,知识无法很好的迁移,一旦换了语言,或者领域不同就会不知所措。
程序员是一个非常残忍的职业。你所学所用的语言、框架、模式,很可能在数年内就成昨日黄花了;你现在嘲笑的另一群程序员,可能马上就能转身来嘲笑你了。

3、经验不足却自认为自己经验丰富,只对自己做过的比较顺手,但是碰到未知的问题,就束手无策。
4、毫无必要的拖延,这是很多程序员的通病。
见过一些程序员,每天工作前一定要先玩半个小时的游戏,起身吃点东西,再看一会剧,突然有点困了先休息一下,还有好几个小时呢一定能完成,不如再玩会...
每次工作拖到深夜,第二天要睡到中午才起床,精神状态也不好,心情也很糟糕。把时间浪费在毫无价值的事情上,留给自己的时间就少了,很快就会被淘汰。
5、心猿意马。
见过太多心猿意马的程序员,不得不把“专注眼下”专门提出来。
他们往往有各式各样的小梦想,比如做个小茶农、做个小鹅贩、做产品、做销售、做投资,却被程序员的高薪或是没有转行的魄力“耽误”了,而因为不专注,他们不在意做好自己的本分,不在意锤炼自己的技能,不在意学习新兴的技术。
不可否认,这世界上存在着伟大的产品(像乔老爷)、伟大的销售(像埃里森)、伟大的投资客(像彼得菲),而他们毫无例外都是程序员出身。可你听说过巴菲特评价盖茨的话么,比尔盖茨如果转行去卖狗,那他一定是全世界最大的狗贩,因为他足够的专注。
二、高级程序员
1、知识体系完整,有系统性的思维,及时没有到架构师的级别,在写代码和改bug的时候也能从整体上去思考和把握。
2、学习能力强有了自己的心智模型,知识可以自由迁移,并可以高效地切入不同的领域和语言。
3、拥有真正的经验,不只是做够那些项目,而是面向未知的解决问题的能力。
能力不缺的前提下,主要的区别就是抓不到问题的本质,普通程序员多半是直线型思维,见招拆招,干的多,想得少,接到一个项目就开始噼里啪啦敲代码,不想就在电脑上敲上include ,一天敲个几千行。

而高级程序员更擅长抓住问题的本质,将看似复杂的需求化繁为简为一系列简单逻辑的堆叠,写代码步步为营,逻辑简单清晰,所有条件分支都被仔细覆盖,磨刀不误砍柴工。
简单的来说,同样是一个项目需求,普通程序员可能要天天加班忙上一个月,而高级程序员可以每天按时下班,几天就搞定。这也是为什么会出现“月薪五千的程序员天天加班到夜里,月薪五万的程序员5点下班”的尴尬情况。公司追求的是利润而不是努力,谁创造的多当然拿到的就多。
三、如何从普通程序员进阶到高级程序员?
1、提高代码优化的能力
打铁还需自身硬,“代码可运行”对一个优秀的程序员来说绝不是结束,而是开始。优秀的程序员一定熟知各种算法和数据结构,会灵活运用,致力于写出更简单、效率更高的程序。
程序员必须首先具备专业技能,才能在这个残酷的领域里存活下来,不要没干两年就想着去管理,抛弃专业知识。翻一翻互联网招聘职位列表就知道了,一百条里面99条是各种各样的工程师,好容易有一条是管理性质的,一看是总经理,您能胜任吗?
2、先考虑、多思考
编程思路,是系统的计划和设想,是程序员写程序时的条理和线索,可以思考但不要长时间延时性的思考。
我很喜欢“河森堡”的一句话:如果某个任务让你特别焦虑,最好的排解就是直接去做,什么都别管,使劲做,如果你是个程序员,如果你热爱你的正在研发的产品,每一次版本发布后去观察用户的反馈,收集产品数据,与产品经理反复探讨和确认每一个细节,努力地推进其进度,这棘手的事情在进度上每发展一点,你的焦虑就会少一分。
或许做着做着,希望就来了。

3、突破程序员思维只有突破程序员思维,才不会沦为码农!
过去我曾一直认为程序员是依靠他们的技术在编程,也是因为技术使得程序员的水平有高低之分,但随着我写代码的时间越来越长,也接触到更多的程序员,我渐渐发现程序员们其实是依靠他们所特有的程序员思维在进行编程的,而他们中的佼佼者正是那些有着更高思维成熟度的优秀程序员们。
从程序员的发展角度来说,当你从一名程序员转变为高级程序员、架构师、系统分析师、项目经理、产品经理的时候,需要你突破程序员思维,而从更人性化的角度去识别和解决问题。
4、时间管理
很多人都没有时间管理意识,觉得时间最不值钱。
这就像是你到了一个十字路口,也不管自己想去哪里,抬脚就努力地奔跑,一路上被自己的努力所感动,但你跑的方向是北边,而你内心真实想去的方向是南边,方向跑偏了,始终到不了目的地,能不迷茫吗?
在很多人的意识里,时间太不值钱了。所以大把的时间可以浪费在路上,浪费在毫无效率的沟通中,浪费在没有计划的行为上。
可人这一生,最多才有多长时间。一旦你把额度浪费在毫无价值的事情上,留给自己的时间就少了。

5、学而不思则惘
总结对于任何人都是很重要的,功能交付、上线成功,对于工作来说是结束了,但是对于开发者本身并不意味着结束,可能此次开发只是改动一个小的功能,并且开发时间很紧张,开发过程中没有从整体上审视整个项目。
那么在上线成功后找时间在回过头来继续审视一下整个项目就显得尤为重要,业务流程,整体架构,技术实现细节,项目庞大,一次可能时间不够不能完全消化,那么多几次研究总结无论对以后开发时间的评估,或是对项目提出建设性的意见,都会有很大帮助。
6、拓展知识的深度和广度
新技术层出不穷,程序员如逆水行舟,不进则退,而且就算进的慢了也是后退。
大家可以多看看 BAT 的招聘要求,看看自己还有哪些方面根本没接触过。建议大家多关注热点和优秀的开源项目、找到自己的兴趣点就多花点时间去学习研究,知识的广度很大程度上会影响开发人员的职业发展。
4
四、寄语
IT 领域的人员分布是金字塔形的,越往上的人,技术越好,竞争的压力也相对就会小,所以好的程序员一定是深究技术原理、多看源码的程序员,万变不离其宗,知道使用的技术是如何实现的用起来自然得心应手!
最后,或许是时候,你应该做出一些改变了。一切的迷茫都是因为想得太多而做的太少!