相信习惯的力量
菜鸟和大牛的区别除了写代码、debug的核心能力差距之外,另外一个很大的差别就是在习惯上。大牛经过摸爬滚打练出了一系列优良的习惯,而菜鸟好习惯还没养成,坏习惯有了一堆。所以身为菜鸟的时候一定要有规范和习惯意识,养成好习惯,去掉坏习惯让自己越来越习惯写出优质的代码。
关于习惯仁者见仁,每个人也都有自己的习惯。
一个函数只做一件事
如果有一天你接手了另外一个同事的代码,发现他有一个函数里面装了三千行代码,你会是什么感受?
这是我亲身的经历,我当时看到代码的第一反应就是把这个人揪出来暴打一顿。代码和其他文本信息不同,越拥挤可读性越差。优质的代码和优质的文章很像,结构清晰、层次分明、表达准确。一个函数里面装几千行代码显然是老太太的裹脚布——又臭又长。
对于一个函数里究竟应该写多少代码,每个人有不同的理解。实际上我们也没必要硬扣,遵守一个简单的原则即可——一个函数只做一件事。举个简单的例子,假设我们要从上游读一批数据,然后画出某一个函数作用之后的结果。我们简单分析一下,表面上是画图这一件事情,但是这一件事情当中其实包含了好几个步骤,比如说从上游获取数据,获得函数作用的结果,最后才是画图。那么我们完全可以拆分成三个函数,一个函数获取数据,一个函数获取结果,一个函数画图。
这样别人以及以后的自己看这段代码就会非常清楚,每个函数做了什么一目了然。假如有一天老板无意间翻了大家的代码,别人的代码一个函数里装了几千行,你的代码层次分明,每个函数做什么都一目了然,你说老板会怎么想?
起长一点的变量名
新手一个很大的问题就是总喜欢起很短的变量名,像是a,b,c,d。或者是什么bd,aa什么的,看起来非常难看,可读性也很差。之前有几个同学找我帮他们看代码,给的都是这种代码,看起来感觉眼睛都被针扎了……
吐槽归吐槽,老实说我在之前打acm的时候也是喜欢短变量名,虽然不至于这么夸张,但一般一个变量名也不会很长。当然这是由于当时比赛的需要,大家争分夺秒,别人一个变量名叫btn,你叫binary_tree_node,很显然拼敲代码的速度你一定输。
但问题是后来毕业了之后我也一直保留这样的风格,不出意外地遭到了老板和同事的毒打。大家都表示不喜欢我这样的代码风格,我当时还坚持,觉得是自己代码能力的体现。后来去读了一下一些大牛的代码,尝试换了一种风格之后,发现真香了。虽然写起来的时候麻烦了一点(其实也还好,现在有各种代码补全功能),但是读起来是真的很舒服,思路也清楚了很多。所以如果你现在的代码不是这种风格的话,请一定尝试改一下,对自己对其他人都好。
另外一点是我们起名的时候可以是不规范的英文,哪怕不太准确也没问题,但一定一定不要用拼音。
拼音阅读起来比半通不通的英文还要费劲,而且用拼音做变量或者是函数名是一件非常非常low的事情,绝对会让对方对你的能力产生怀疑。市面上也有一些帮助起名的插件,有这方面需求的同学请务必去了解一下。
遵守代码规范
在新手的意识里可能没有代码规范这个词,但是这个确实是从新手走向进阶的必经之路。
不同的语言的规范是不同的,比如说Java和go当中流行驼峰命名法,所有变量都是驼峰的。而Python可能只有类名是驼峰的,普通变量和包名倾向于全小写用下划线分割。当然代码规范并不仅仅是命名规范而已,还有很多很多的规范。比如中间件的使用规范、多线程的开发规范、数据库的使用规范等等。
为什么我们要遵守这些规范?因为我们的开发工作并不是实现功能就完事了,以后还需要拓展和维护。遵守规范不仅可以不给以后的自己以及他人埋雷,更重要的是可以让自己的代码质量更高,更加专业。而且一些规范当中往往是藏着道理的,为什么套接字、线程以及数据库连接都需要维护一个“池”?这里面肯定是有门道的,不然为什么大家不怎么简单怎么来?我们在遵守这些规范的时候也能便于我们更好地理解各个场景当中的原理以及细节,这也是技术实力的一部分。
当然我们一开始未必能做得很好,但代码规范并不是很困难的事情,从我们有这个意识到做到遵守规范并不需要很多时间,但是带来的收益却是非常丰厚的。之前在前公司,有听说过过因为代码风格太差被老板给了差绩效的事情,我觉得挺冤枉的,可能就是一时疏忽给老板留下了差映像,如果当时写代码的时候能注意一点,完全可以避免,代码有些太大了。
会用不等于懂了
如果你是应届生,那么当你毕业进入职场,你必然会面临一个适应的问题。别的我们不提,单单只说技术方面。我们势必需要快速学习一些我们之前没有见过或者是不了解的技术,来应付工作当中的任务以及挑战。
这个是非常正常的,我想绝大多数程序员在刚毕业的时候都经历过,我自己也不例外。刚毕业的几个月是最辛苦的,我们需要承担很大的压力,对于转变之后的生活也不是完全适应。但当几个月过去,我们适应了生活,学会了一些基本的技能可以应付或者说胜任当下的工作之后,一个潜在的陷阱就到来了。
有一些人会不知不觉地停止学习,因为他已经足够应付工作了。在工作当中他会有一种在这个领域我当下会的技能已经足够了的错觉,有些人甚至会因此觉得其他资历更深的同事也不过如此,似乎并没有比自己多会多少东西。
我当初就是这样,因为我发现我工作当中用到的东西玩的非常溜,用起来得心应手。我一度有些膨胀,觉得自己已经算是一个经验丰富的程序员了。直到后来有一次面试,被问到了一个常用的工具的技术细节,我张口结舌一句话也说不上来,我才发现,自己知道的只是皮毛而已,甚至连皮毛都算不上。
当然我们工作当中对很多技术的要求都只是会用,你会用就够了,这并没有问题。我也并不觉得每一门我们用到的技术都需要去刨根究底,但我们需要对我们的实力有清醒的认识,哪些是勉强会用的?哪些是真正了解掌握的?哪些是需要掌握但是只是勉强会用的?
能够想明白这些问题可以让我们保持一个清醒的头脑,对自己的当下的处境以及长远的发展目标都会有一个清楚的认识。
积累知识而不仅是经验
新手或者是小白有一个特点就是往往更加依赖经验而不是知识,举个例子吧。比如新手后端经常遇到的问题之一就是maven package失败,很多人解冲突的办法就是mvn clean & mvn install。也就是清空重新建立,因为大部分情况下这个命令可以解决问题。所以很多新手就记住了这个命令,每次遇到maven失败就这么来一次。
如果这个命令解决不了呢?这些人可能会换个命令试试。如果常用的解决问题的命令都试过了还是不行呢?这些人可能就僵住了,觉得这个问题解决不了了,得请大牛来看了。
这里的核心问题是新手积累的是经验而不是知识,他们只是简单机械地把出现的问题和解决方法做映射而已,并不是从原理和核心层面理解问题出现以及解决方案生效的原因。那么带来的结果就是,积累到的只是经验,下次能解决问题不是因为学会了问题的解决方法,也不是理解了这一块技术内容,只是单纯地记住了而已。这显然也是一种伪成长。
其实我之前也遇到过这样的问题,虽然我每次都有意识遇到问题记录下解决的办法,这样下次就可以不用请教别人了。然而虽然我记录的问题越来越多,但是每次遇到新的问题还是解决不了,需要请教别人。直到有一天,被我问的大牛露出了不耐烦的神情,才让我下定决心自己学会解决问题。
于是我不再是头痛医头脚痛医脚地解决问题,而是去学习了一下问题背后的原理和机制,再从报错日志上分析错误产生的原因,思考解决方案,最终彻底学会了解决这一类问题的方法。之后不但能够自己独立解决问题,而且还可以去帮助别人了。我后来回过头来想想,如果我第一次遇到问题的时候就自己尝试去学习其中的机制,而不只是记住解决方法,应该可以做得更好。
少说废话,多些代码
著名的Linux之父Linus有一句名言:talk is cheap show me the code。翻译过来就是废话少说,代码拿来。我觉得这句话非常符合这一行的精髓,我们不是靠嘴皮子吃饭的,而是靠实实在在的产出,这个产出最终是要落实到代码上的。作为一个新人,可能我们会有这样的问题,那样的困惑。然而这许多的问题和困惑我们光想是没用的,只能用硬实力来解决。
著名的C语言作者谭浩强也有一句名言:新手学编程最应该做的事情就是写满一万行可以运行的代码,之后你就自然入门了。道理其实也是一样的,少说废话,多做实事。多做多练,实力自然不会差。空想吹逼是成不了大牛的。所以如果你犹豫想要学习一门新的领域,但是不知道从何做起的时候,不妨想想这句话,别管它三七二十一,先搞起来写起代码来再说。搞着搞着,你自然就明白后面应该怎么做了。
以上就是我自己积累的一些思考和想法,如果你是一个小白的话,希望它能够帮助你顺利度过新手期,向着大牛的目标进发。
如何渡过小白期,不再当菜鸟程序员?
我觉得这需要自己进行系统的学习,还需要请教一些大佬,这样就可以很好的学习到一些东西,就不是小白了。
大家都是怎么度过程序员的菜鸟阶段的?
后来是看各种Pet Store源码,作为程序员必读开源程序之一,我仔细研究,看完后刻意尝试背着写出来,与源码对比,思考为何那样写。随着不断练习,慢慢有了编程感觉。编程感觉是什么?很难解释,就像你熟练打字,但很难说ABCD……XYZ在键盘什么位置。再后来又给我一个CRM系统项目,除了UI找外包,剩下都是...
程序员如何渡过公司试用期
由于试用期工资较低,用人单位有时会找个冠冕堂皇的理由,要求与新人重新约定一个试用期,再进一步考察,以达到占有廉价劳动力的目的。第二个试用期当然不会超过法定最长试用期限,但是,前后两个试用期相加后,往往超出了法定试用期限。 鱼目混珠 由于人们经常将试用期、实习期(指学生在毕业之前的实习阶段)和见习期(指干...
学生必看程序员分水岭高一级别不同人生
程序员八个段位等级你的等级? 1、菜鸟 迈进这层楼的门槛是很低的。基本上懂计算机的基本操作,了解计算机专业的一些基础知识,掌握一门基本的编程语言如C\/C++,或者Java,或者JavaScript,...,均可入门迈进这层。如计算机专业毕业生,大量的通信、自动化、数学等相关专业的转行人士。 这类人员不管是不是计算机科班出身,...
大学生活有点无聊,怎样才能过的有意义一点呢?
在学业和工作都完成的时候,你还可以规划下出去旅游,做为学生,你可能资金不够充裕,所以可以考虑下周围的景点,找个天气不错的周末,和朋友一起来一次快乐的出游吧。放松下心情,活跃下身心。不要让自己的青春只存在于校园。如果旅游不是你需要的,而你自己又比较缺钱的话,你可以选择去兼职。目前适合...
普通程序员和大神程序员,到底有啥区别?「渡一教育」
不得不承认,同样是程序员,普通程序员和大神的差别是巨大的。 当普通程序员尝试重构一个简单的模块 当大神级程序员重构代码 普通程序员做的多线程 大神级程序员做的多线程 是否过于真实?刚入门的小白程序员流下了羡慕的泪水。。。 另外,据不权威调查显示,大神程序员的生活作息远不同于普通人类,基本上是...
如何成为一个高效,快乐,健康的程序员
3.掌握Linux系统中常规命令。(这个是所有程序员都必须掌握的基本功)。4.随时随地的做笔记。(这个就不解释了,反正善于总结经验不会错了,可以推荐使用有道笔记)。5.学会一些主流的代码管理工具的使用。(如SVN,gitHub,maven等)初级阶段:6.熟悉并精通某种编程语言的基础和特性。(java语言必须掌握...
程序员入门先学什么(程序员初学)
java学习是由简入难的学习过程,不要一开始就学习太过于复杂的,也不要好高骛远,java的基础很重要,所以一定要由最基础的学起,抓实基础。下面是昆明北大青鸟java培训小编结合大部分情况为大家总结下:菜鸟程序员需要学习哪些基础知识。 首先要学习java的基础知识。 不要被新技术迷惑,所谓万变不离其宗,新技术都是基于...
超级菜鸟怎么学习数据分析
不要因为自己是菜鸟而妄自菲薄,付出终有回报,只要持之以恒。明确目标导向,学习必备也是最有用的那部分,才能避免无效信息降低学习效率。明确知识框架和学习路径 数据分析这件事,如果你要成为数据分析师,那么你可以去招聘网站看看,对应的职位的需求是什么,一般来说你就会对应该掌握的知识架构有初步的...
程序员收入这么高,为何他们都很低调,从不见他们高调炫富
1.程序员的高收入,程序员收入是否高,这个不太好说,有的是起薪年入十几二十万的程序员,同样起薪月入几钱的也不在少数;同样干了好几年后,有的是年入五六十万的程序员,同样年入十几二十万的也不在少数。身边有朋友在大国企当程序员,跟我同期毕业的,干了五六年,月入20K+,在一线城市,...