程序员高手和程序员菜鸟的区别是什么?
的有关信息介绍如下:作为一个还在匍匐前进的程序猿。当看到这个问题的时候还是忍不住去深思,曾经的自己也是一个菜鸟,看到大神也会仰慕。虚心的去请教了一下大神如何成为他那样的人。本来以为会有什么高谈阔论,但是大神的回答让我很吃惊。我也明白菜鸟和大神到底差了哪里。他只是掌握了我们平常所忽略的一些细节,只要我们也掌握了这些你也会成为大神
1、养成写文档的良好习惯
良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
2、养成编写规范化的代码习惯
像阿里巴巴这样的大公司,代码内注释格式,嵌套中行缩进的长度和函数间的空行数字都是有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作
3、彻底理解需求
很多程序员拿到需求的时候不是进行系统分析,而是直接粗略过目,然后就用代码来实现功能,这样做不仅浪费时间,还可能因为你自己的原因让整个项目延期
4、要写可以复用和模块化的代码
经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
5、保证程序的正确性
软件研发作为一项工程而言,一个很重要的特点就是问题发现的越早,解决的代价就越低,我们在每段代码,每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。
6、有自我学习和总结的能力
新技术更新迭代很快,只有不断学习才不会被淘汰。善于学习,对于任何职业而言,都是前进所必需的动力,对于程序员,这种要求就更加高了。学习内容在精而不在多,掌握一门技术,其它自然而通,熟话说一招吃遍天下,就是这个道理。
善于总结,也是学习能力的一种体现,每次完 成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个程序员才可能成长起来。
如果一个程序员连以上几点都做不到的话,那真的就不用耽误时间在这方面了,该干嘛就干嘛去。这不是教科书而且对自身的认识。希望广大猿发表自己的见解
很多小白程序员,刚刚踏入社会还是个职场菜鸟,在这条路上走过很多弯路。这条路,或许迷茫过,也放弃过,但最后还是找到了一条属于自己的路。
一、主要问题
1、没有编程思想
或许很多人觉得很扯,但确实是这样的。高级程序员在看到一个需求的时候,总是能够快速在大脑里生成这个需求在现实生活中的映射。每当产品经理提一个需求的时候,高级程序员首先想到的就是,这个需求需要哪些数据库上的改动,对现有的逻辑有什么影响,需要提供多少接口,存在哪些可能的风险,以及需要多久的开发周期。普通程序员拿到需求以后,首先表现的是一脸懵逼,因为往往产品经理的文档写的非常长,有时还难以理解,普通程序员难以提取里面的关键点。所以这时就需要项目经理这种角色,提取需求,然后告诉他,提供什么接口,对数据库做什么修改。
聪明的人在项目经理说完以后,总会自己去对着需求文档去思考项目经理为什么要这么做,还有一部分人闷着头就去开发了。很多工作四五年的程序员,工作经验一大堆,让他真的说出些什么,他却说不出来。不懂得在工作中思考,工作十年也只是一个普通程序员。
2、没有学习路线
普通程序员在学完基本的知识以后,后续就不知道该学什么了,没有一条属于自己的进阶路线。高级程序员不同,他们在学完基本工作知识以后,会思考下一步自己该如何提升,他们会拥有自己的选择。知识是永无止境的,学完基础以后,还有自动化部署,还有微服务,大数据,以及各种架构。制定一条属于自己的学习路线,是非常有必要的。
3、不会用Git
高级程序员的代码都是通过Git一类的版本控制工具维护的很好,针对不同的功能他们会建立不同的分支,以及测试分支,灰度环境分支,正式环境分支,有的还会建出发布分支。普通程序员总是喜欢在主分支上面做修改,一旦同时有多人并行开发,或者需要回退分支到某一个功能点的时候,对于他们来说往往都是灾难性的存在。普通程序员提交Git还总喜欢用 123 这种提交日志,高级程序员总会在提交日志中详细写出自己做了哪些修改,方便以后遇到问题的时候查找原因。
4、命名不规范
这是一个很大的问题,普通程序员很喜欢使用拼音或者是拼音加英文的方式来命名。高级程序员哪怕自己英语很差,也懂得使用百度翻译或者谷歌翻译来把对应的中文翻译成英文。这样做最大的好处就是,别人看到你这个类,或者看到你这个方法和变量的时候,第一时间能够知道这个东西是干嘛的。
5、结构不规范
无论是什么编程语言,无论是面向对象还是面向过程,甚至不分前端和后端。任何一个语言在开发的时候,代码结构都应该清晰。相同功能,相同模块的文件应该放在一起,针对不同的处理逻辑建出不同的文件夹或包。重复使用超过三次以上的代码应该考虑把它写进一个公共的方法里,大家都调用这个公共的方法,避免维护太多的重复代码。这样当项目发展的很大以后,开发起来也不至于很乱。
6、不知道如何解决BUG
普通程序员看到程序报错以后,第一时间是懵逼状态,他们会很慌乱,不知道该如何是好。有的还知道看一下控制台打印的错误信息,来百度一下,但往往这种方式能不能解决问题都看运气。高级程序员如果做的是一个web程序,报错以后他们会首先看浏览器的控制台是否发送了对应的请求,如果发送了请求会看浏览器的错误码是什么,是请求超时还是发生了500或者是404的错误。然后再针对不同的错误码做出不同的调试方案,如果500的错误,报错日志明显就直接找到对应的地点修改,如果报错信息不明显就通过开发工具来进行断点调试,一步一步找到问题。
7、不会用搜索引擎
遇到问题去百度一下是很明智的,但是如果不看报错的信息盲目的去百度,搜索的结果也只是浪费自己的时间。如果盲目去尝试搜索到的解决方案,只会让瞎子变成瘸子。针对这个,大家可以报错以后看报错日志的最后一行,往往报错最后一行就是错误的原因。一般都是英文的,但是并不复杂,往往都是几个单词来说明问题,然后指向一个错误产生的代码位置。先看报错原因,自己思考以后大概明白是什么原因,不要上来就去拿着最后一行百度。
如果拥有科学上网的能力,可以使用谷歌来进行搜索,效率更高,答案更准确。
还可以有更多选择:
以上是普通程序员在工作中最容易产生的问题。
二、提升建议
1、培养编程思想
编程思想这个东西,不是说工作的久了就能有的,而是在学习和工作中要去思考。思想思想,肯定要先思而后想,这样才能拥有思想。建议是大家可以针对项目中一些简单的功能去思考,如果让你来从头开发这个功能,你需要对数据库进行哪些操作,需要提供什么接口,需要什么类型的数据,数据需要进行哪些必要的验证,数据库的字段类型以及长度。用笔在纸上把内容都列举出来,写完以后再看几遍,有没有哪些可以做的更好的地方。然后去看项目里原来的设计,是不是跟你的类似,如果不如你设计的可以在后面的优化中改进它,如果比你的好,那就去思考别人为什么要这么做。久而久之,遇到复杂的需求也能快速拆分成一个个的小需求,那个时候你离项目经理就不远了。
2、制定学习路线
因为大家的方向不同,有的人是前端,有的人是后端,学习的语言也不同。在这里就针对前端和服务端提一些建议。
前端
前端最重要的其实还是基础的js,只有把js学好了,才能轻易的理解高级框架的原理。如果现在能够完成公司的开发任务,建议可以好好学习一下js的基础课程,弄懂它。然后去看看jquery是如何实现的,jquery只有一个文件,而且代码并不复杂,当弄懂jquery是如何实现的以后,再看vue这些复杂的框架,也不觉得难以理解了。一个前端程序员初期工资有多高,是看他掌握多少框架。但未来能够走多远,是看他内功修炼的是否扎实。
后端
一般无论是大公司还是小公司,服务端的主要工作就是使用一个或多个框架来开发一些接口。所以很多技术大佬总喜欢自嘲自己是一个 CRUD工程师 (增删改查工程师)。那么如何让增删改查变得更优秀呢,同样都是增删改查为什么有人8K有人30K。建议是在熟练掌握自己所使用的框架以后,不妨去学习一些项目性能优化方面的知识。比如缓存,比如数据库性能优化。有人可能会说,缓存有什么好学的,不就是redis插入一个key,查询一个key吗?redis一样存在很多高级的用法,也同样存在许多的坑,如果应用不好,轻则数据丢失,重则整个服务器瘫痪。掌握基本的性能优化以后,就可以去研究如何把项目通过容器技术来分离成一个个的小项目。这时就需要学习docker这种技术,随着docker数量的增多,docker的启动停止,状态监测就成了一个比较繁琐的事情。又需要学习docker的自动化技术。学完这些以后就初步掌握了微服务开发的一些思想,实际上微服务就是在这样的一个过程中不断演进而来的。当拥有了自己的知识广度以后,再去深研框架和语言的底层。
有些东西,并非是运维或者是DBA才能做的,而是每个程序员都必须要掌握的,如果什么事情都依靠运维和DBA,那么十年以后依然还是CRUD工程师。任何技术,特别是编程相关的,他们最终的本源都是一样的,都是代码。所以无论学习数据库,学习缓存,学习容器,为的都是增加大家的知识广度。只有阅尽千帆的人,才能像大海一样睿智。
愿大家都能在编程这条路,越走越远。
程序员学习交流请添加慕课网官方客服微信:mukewang666回复暗号“前端面试”可进前端交流群回复暗号“Java”可进Java交流群回复暗号“专栏”可进程序员交流群
程序员高手和菜鸟,不仅仅是技术上的差距,还体现在习惯、经验、看问题的角度等各个方面。
代码规范
代码写的不好,其实一眼就能看出来;比如代码里面的各种命名(包、类、方法、变量等等)。
在最初写程序的时候,很多人都会起没有含义的变量命名,比如 String str;
其实我们完全可以把变量名称起成带业务含义的,比如String username;
慢慢地,我们发现可以写的更好一些,比如String userName;
大家可以搜索一下《阿里巴巴Java开发手册》,可以以此为标准。
经验
软件开发,经验还是很重要的。
一是技术上的积累,高手技术的广度和深度都会比较强一些;当遇到一个问题,高手会想到N种解决方案,然后再选择出一条最适合的,而菜鸟可能就一条路走到底了。
二是业务知识的积累,对项目的理解程度会更深;接到一个需求,高手可以快速的想到到需要修改哪些地方,而菜鸟还需要重新处理一遍程序吧。
善用工具
很多时候,我们会依靠一些辅助的软件去帮助我们完成一些“体力劳动”。
高手程序员对IDE更熟悉,熟悉每一个快捷键,进而开发效率会更高。
高手程序员有更完善的代码库,有时候开发一个功能,直接从代码库里面Copy出来就好了。
高手程序员有更多顺手的辅助软件,比如对比两个文件夹内所有文件的不同之处,我们只要用beyond compare一对比,就能得到答案。
心态
不和需求/产品经理吵架,是一个高手的必须课;
不和测试吵架,是一个高手的必修课...
高手不是一日养成的,菜鸟也不会一辈子都是菜鸟。
与各位共勉,共同进步。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
作为一枚工作3年的菜鸟,谈谈我的感悟吧。
我列了八点区别:
bug数量
高手的程序,bug很少。自带测试属性,别人需要用刁钻的角度才能发现问题。
菜鸟的程序,bug满天飞。并且还可能有不少block流程或者丢失数据的严重bug
开发时间
高手能够准确评估自己的时间,并能按时保质完成任务。
菜鸟总是高估自己,要么严重delay,要么为了赶工,bug一堆。
代码可读性
高手的代码读起来赏心悦目,不需要多少注释就能读懂含义。层次分明,逻辑清晰。
菜鸟的代码超过一个月自己都看不懂。
代码健壮性
高手的代码像一个坚固的堡垒,任何的恶意攻击和异常情况都无法破坏系统。
菜鸟的代码如同纸糊,到处是未捕获的异常。
代码扩展性
高手能预知产品经理的需求,并不会惧怕需求变更。
菜鸟一听到需求变更就要找产品经理干架。
解决问题的能力
高手遇到问题不慌张,冷静分析,排查疑点,快速解决问题。
菜鸟只会重启,要么就是跑到百度知道找答案。
学习态度
高手对技术充满热情,保持不断的学习。
编程多年依然菜鸟的那群人,通常都把业余时间给了游戏和追剧。
项目管理
高手能管理好自己的时间,任务拆解到位。谋定而后动,一动就一气呵成。
菜鸟通常一顿操作猛如虎,然后就是各种重构重写。
程序员不容易,大家勉乎哉!
大家平时工作中还遇到怎样的高手和菜鸟呢?
列出我认为重要的两点:
正确的架构选型和折衷的能力
选对好的设计方案和折衷,使团队少走很多弯路,和不必要的加班,促使项目落地实施。
解决问题的思路和指导问题的能力,对系统有预判性
遇到bug能有清晰的指导或者解决能力。对系统有前瞻性和预判性,能够枚举所有尽可能多的可能性和解决方案
肉眼分辨:
哈哈,抖个机灵
从工作的方面来说,普通程序员和高级程序员一般有下面几个区别:
普通程序员
1、知识体系零散,没有系统性的思维,在写代码、改bug的时候没有工程素养,往往是拆了东墙补西墙。
其实在面对一个未知的问题时,如何定位复杂条件下的核心问题、如何抽丝剥茧地分析问题的潜在原因、如何排除干扰还原一个最小的可验证场景、如何抓住关键数据验证自己的猜测与实验,都是体现程序员思考力的最好场景。
2、对某种语言的依赖性太强,知识无法很好的迁移,一旦换了语言,或者领域不同就会不知所措。
程序员是一个非常残忍的职业。你所学所用的语言、框架、模式,很可能在数年内就成昨日黄花了;你现在嘲笑的另一群程序员,可能马上就能转身来嘲笑你了。
3、经验不足却自认为自己经验丰富,只对自己做过的比较顺手,但是碰到未知的问题,就束手无策。
4、毫无必要的拖延,这是很多程序员的通病。
5、心猿意马。
见过太多心猿意马的程序员,不得不把“专注眼下”专门提出来。
他们往往有各式各样的小梦想,比如做个小茶农、做个小鹅贩、做产品、做销售、做投资,却被程序员的高薪或是没有转行的魄力“耽误”了,而因为不专注,他们不在意做好自己的本分,不在意锤炼自己的技能,不在意学习新兴的技术。
高级程序员
1、知识体系完整,有系统性的思维,即使没有到架构师的级别,在写代码和改bug的时候也能从整体上去思考和把握。
2、学习能力强有了自己的心智模型,知识可以自由迁移,并可以高效地切入不同的领域和语言。
3、拥有真正的经验,不只是做够那些项目,而是面向未知的解决问题的能力。
而高级程序员更擅长抓住问题的本质,将看似复杂的需求化繁为简为一系列简单逻辑的堆叠,写代码步步为营,逻辑简单清晰,所有条件分支都被仔细覆盖,磨刀不误砍柴工。
如何从普通程序员进阶到高级程序员?
1、提高代码优化的能力
打铁还需自身硬,“代码可运行”对一个优秀的程序员来说绝不是结束,而是开始。优秀的程序员一定熟知各种算法和数据结构,会灵活运用,致力于写出更简单、效率更高的程序。
2、先考虑、多思考
编程思路,是系统的计划和设想,是程序员写程序时的条理和线索,可以思考但不要长时间延时性的思考。
3、突破程序员思维只有突破程序员思维,才不会沦为码农!
4、时间管理,很多人都没有时间管理意识,觉得时间最不值钱。
这就像是你到了一个十字路口,也不管自己想去哪里,抬脚就努力地奔跑,一路上被自己的努力所感动,但你跑的方向是北边,而你内心真实想去的方向是南边,方向跑偏了,始终到不了目的地,能不迷茫吗?
5、拓展知识的深度和广度
大家可以多看看 BAT 的招聘要求,看看自己还有哪些方面根本没接触过。建议大家多关注热点和优秀的开源项目、找到自己的兴趣点就多花点时间去学习研究,知识的广度很大程度上会影响开发人员的职业发展。
我是一名架构师,关注我了解更多学习方法和底层编程思想
简而言之,入门级程序员只能实现功能,初级程序员能够考虑到性能,中级程序员能够考虑到安全性,高级程序员兼顾性能、安全和代码重用,顶级程序员就是把以上做到最好。
菜鸟写的程序只有在特定环境可以运行,随着时间和环境的改变bug会越来越多,高手写的程序可以广泛使用,有自己独特的解决思路。
代码的展现,网络的应用.菜鸟”程序员的代码是什么样子,自己想一下。“菜鸟”程序员的代码往往会会写的比较冗余,而且这些代码不是从书上找来的就是从网上找来的还有可能就是自己会这一部分代码(仅存记忆的提取,真正的原理似懂非懂,好像雾里看花.真正的原因是:“菜鸟”程序员没有将自己的思维融入代码,代码是程序员思维智慧的结晶。
为什么会出现这样的现象,同样一个小的功能,放在不同的手里就产生不同的结果。这个难道不值得我们去探究原因吗?
真正的原因是:“菜鸟”程序员没有将自己的思维融入代码,代码是程序员思维智慧的结晶。当我们拿到这一个小功能的时候,我们首先一看,这方面的知识自己准备不足,于是就上网找去了。假如我们去想一下如何去解决,我们解决的方法一般会有两种,第一种是自己会从网上或者是书中找到类似的代码,第二种就是请教别人指点,这种方法感觉不太可能,因为在工作中,大家都很忙,相互讨论帮忙很少的。上网搜的时候我们会经常出现这样的现象:看到这个要编写的程序,感觉自己没什么思路,自己从网上找,找了半天我们收获不大,看了很多实现的方法,但是我们花很长的时间去理解,这样虽然把问题搞出来了,然后就去玩去了。有些时候运气好,想找的问题正好有这类问题的解决方法,那我们就直接把代码搬过来,搞定!所以我们就一直这样循环下去,到最后我们什么也没有留下,下面一幅图就显示我们”菜鸟”程序员的现状.
“大神”程序员首先拿到这个程序,自己做的第一件事情,就是思考!自己先思考如何实现这个问题,与原来相关知识可以借鉴,列出解决问题的可能性,考虑解决问题的最难点,所以上网搜的时候,直接搜问题的解决问题点,将其转换成自己的思想,用自己的思维写出自己想要的代码来,这就是代码是思维的结晶的精华。
首先程序员高手,有良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。高手的代码像一个坚固的堡垒,任何的恶意攻击和异常情况都无法破坏系统。菜鸟的代码如同纸糊,到处是未捕获的异常。高手遇到问题不慌张,冷静分析,排查疑点,快速解决问题。菜鸟只会重启,要么就是跑到百度知道找答案。