普通的程序员和大神级的程序员有什么区别?
多隆在公司大多数时间是沉默的,从2000年加入阿里以来只专注于写代码,现在多隆在阿里的层级是P11。
多隆不爱带团队,团队一般沟通成本高、水平参差不齐,而他一个人就能顶一个高效顶尖的团队。作为淘宝最早的程序员之一,很多产品早期就是他一个人开发维护的,文件系统tfs、key-value系统tair,cache、搜索、通讯框架等等,引用阿里云总裁行癫对他的评价:
在内网的标签上,他被称为神,这不是恭维,在所有工程师眼中,他就是个神。多隆做事一个人能顶一个团队,比如说写一个文件系统,别人很可能是一个项目组,甚至一个公司在做,而他从头到尾都是一个人,在很短的时间内就完成了。从03年到07年,淘宝搜索引擎就是他一个人在写,一个人在维护,而且这还不是他全部的工作,另外他还做了其他很多事情。
有个很偶然的机会,行癫听说NETAPP不太稳定。当时他恰好在看一个JAVA的分布式文件系统,便让多隆研究研究。看了一阵之后,多隆说还不如自己写一个,这次连行癫都表示有点怀疑。不过,行癫相信既然他说行,就一定能行。
没过多久,多隆便完成了原型,三个月后就提供了一个能够运行的产品。而这一切,基本上是他一个人利用平时闲暇时间完成的。这个系统就是现在TFS,淘宝的文件系统。它成功地解决了大量小尺寸文件分布式存储的可靠性与读写的性能问题。如今,仍然有以T字开头的产品运行在淘宝的生产环境中
或许很多人觉得很扯,但确实是这样的。高级程序员在看到一个需求的时候,总是能够快速在大脑里生成这个需求在现实生活中的映射。每当产品经理提一个需求的时候,高级程序员首先想到的就是,这个需求需要哪些数据库上的改动,对现有的逻辑有什么影响,需要提供多少接口,存在哪些可能的风险,以及需要多久的开发周期。普通程序员拿到需求以后,首先表现的是一脸懵逼,因为往往产品经理的文档写的非常长,有时还难以理解,普通程序员难以提取里面的关键点。所以这时就需要项目经理这种角色,提取需求,然后告诉他,提供什么接口,对数据库做什么修改。
聪明的人在项目经理说完以后,总会自己去对着需求文档去思考项目经理为什么要这么做,还有一部分人闷着头就去开发了。很多工作四五年的程序员,工作经验一大堆,让他真的说出些什么,他却说不出来。不懂得在工作中思考,工作十年也只是一个普通程序员。
2.没有学习路线
普通程序员在学完基本的知识以后,后续就不知道该学什么了,没有一条属于自己的进阶路线。高级程序员不同,他们在学完基本工作知识以后,会思考下一步自己该如何提升,他们会拥有自己的选择。知识是永无止境的,学完基础以后,还有自动化部署,还有微服务,大数据,以及各种架构。制定一条属于自己的学习路线,是非常有必要的。
高级程序员的代码都是通过Git一类的版本控制工具维护的很好,针对不同的功能他们会建立不同的分支,以及测试分支,灰度环境分支,正式环境分支,有的还会建出发布分支。普通程序员总是喜欢在主分支上面做修改,一旦同时有多人并行开发,或者需要回退分支到某一个功能点的时候,对于他们来说往往都是灾难性的存在。普通程序员提交Git还总喜欢用 123 这种提交日志,高级程序员总会在提交日志中详细写出自己做了哪些修改,方便以后遇到问题的时候查找原因。
普通程序员很喜欢使用拼音或者是拼音加英文的方式来命名。高级程序员哪怕自己英语很差,也懂得使用百度翻译或者谷歌翻译来把对应的中文翻译成英文。这样做最大的好处就是,别人看到你这个类,或者看到你这个方法和变量的时候,第一时间能够知道这个东西是干嘛的。
3.不会用搜索引擎
遇到问题去百度一下是很明智的,但是如果不看报错的信息盲目的去百度,搜索的结果也只是浪费自己的时间。如果盲目去尝试搜索到的解决方案,只会让瞎子变成瘸子。针对这个,大家可以报错以后看报错日志的最后一行,往往报错最后一行就是错误的原因。一般都是英文的,但是并不复杂,往往都是几个单词来说明问题,然后指向一个错误产生的代码位置。先看报错原因,自己思考以后大概明白是什么原因,不要上来就去拿着最后一行百度。
如果拥有科学上网的能力,可以使用谷歌来进行搜索,效率更高,答案更准确。
还可以有更多的选择...
4.不知道如何解决BUG
普通程序员看到程序报错以后,第一时间是懵逼状态,他们会很慌乱,不知道该如何是好。有的还知道看一下控制台打印的错误信息,来百度一下,但往往这种方式能不能解决问题都看运气。
高级程序员如果做的是一个web程序,报错以后他们会首先看浏览器的控制台是否发送了对应的请求,如果发送了请求会看浏览器的错误码是什么,是请求超时还是发生了500或者是404的错误。然后再针对不同的错误码做出不同的调试方案,如果500的错误,报错日志明显就直接找到对应的地点修改,如果报错信息不明显就通过开发工具来进行断点调试,一步一步找到问题。
在熟知编程基础的前提下,优秀的程序员会积累尽可能多的经验,这份经验让他们更快的得出更好的思路。
2.解决问题的能力解决问题的能力不是与生俱来的,还是要靠后天的经验积累。
在写代码的时候会遇到各种各样的bug,优秀的程序员第一反应总是自己尝试去解决这个问题,首先确定这个问题,根据运行时产生的崩溃信息或者编译时出现的编译错误,找到错误的根源。
关于各类问题的解决,解决办法总是能找到,只要愿意主动寻求解决方案。
3.代码优化能力一般的程序员写一个方法可能有几百行代码,写一个类就想把所有功能实现,不考虑程序设计原则,也不考虑执行效率,更不去想如何让我的程序质量更好。“代码可运行”对一个优秀的程序员来说绝不是结束,而是开始。
比如对于优化C语言来说,要选择合适的算法和数据结构、减少运算的强度等。优秀的程序员一定熟知各种算法和数据结构,会灵活运用,致力于写出更简单、效率更高的程序。
4.全局掌握优秀的程序员有意识地知道自己不应该再局限于简单的技术问题,他们追求从全局上把握和设计一个较大的系统体系结构,从内核到外层界面,使用已掌握的技能解决问题,并且能够考虑到系统的扩展性、安全性、稳定性等问题。
5.学习先进的技术一般的程序员到达一定境界后很难有突破。现状会让他们不自觉的产生编程无非如此的错误观念。
优秀的程序员看到世界最新技术就能马上主动去了解、去学习并且掌握。计算机技术每经过几年就会有一个质的飞跃。
一旦脱离技术潮流,就很难赶上。优秀的程序员跟上每一步技术,在这个领域看得更远,思维越开阔。
6.耐心假如使一个程序实现某种功能有很多种方法,但在这些方法中,只有一两种方法是最好的,优秀的程序员会花时间实践,实践后总结出那一两种最好的方法。所以,要写一个好程序是很需要耐心的,要成为一个优秀的程序员也是。
而且普通程序员跟大神程序员之间的训练或者是培训的方式都不同,大神程序员相对会艰苦或者是困难一点。
不少人认为会编码就是程序员了,实则不然。
程序员在英文里对应有三个单词:Coder、Programmer和Software Engineer,就十分生动形象的描述了程序员的三个阶段。
**Coder(告诉我怎么实现):**只要求能够熟练使用编程环境,精通几门编程语言、开发框架和开发库,擅长写代码就可以了。这个阶段的程序员能够按照既定的设计完成编码。
**Programmer(我知道怎么实现):**要求在coder的基础之上,精通设计模式、算法实现和编码技巧,并具备熟练应用的能力,这个阶段的成员能都独立编码解决现实问题。
**Software Engineer:(我知道为什么这样实现):**要求在掌握业务知识的前提下,理解为什么实现,在综合考虑架构实现,权衡开发成本之后,为解决业务问题提出最优方案,并能与业务人员顺畅沟通,让业务人员理解方案。编码工作达到这个阶段,才能称得上真正的程序员,才真正实现了从工作到职业的转变。
广告 您可能关注的内容 |