三年程序员和七年程序员的最关键差异?
共 2525字,需浏览 6分钟
·
2019-09-01 09:15
有不少同学问过我技术能力的问题。比如说工作三年的人,应该有怎样的技术能力。
我们公司内部有一个技术等级的标准,但我感觉那种描述太虚。实际面试的过程中,一般面试官也不会询问那些太虚的东西,反而更看重实际的项目经验。所以通过项目经验来判断一个人的能力,我觉得是最普遍且客观的。
程序员的经典段子:“Talk is cheap, show me the code !” 在实际面试和衡量一个人的技术能力的时候,我觉得就是 :“Talk is cheap, show me the project !” 。你知道什么不重要,重要的是你做过什么。
这里引申出一个很重要的问题,作为程序员,做什么事情才能够给自己带来真正的,最终的成长,我觉得就是项目。
很多同学都有持续学习的习惯,有时间都会去钻研新技术,学习新知识,这当然是极好的,但这个不是能力成长的终点。我觉得能力成长的终点,应该是将所学的东西应用到实际的项目中,形成真正的能力。
就像我们在听一个人介绍一个大牛的时候,不会说,这个大牛会xxx语言,会 xxx 框架,而是会说他做过什么项目,项目的规模有多大,影响有多大等。
再回过头来看,同学们提的问题:一个三年工作经验的人和一个七年工作经验的人,在能力上有什么不同?
这里的不同当然是多方面的,但就技术能力来说,最关键的还是项目经验的不同。
第一个是所参与项目数量的不同。就同一个人而言,工作七年时候的项目经验肯定是要比工作三年时候多的。
第二个是项目质量的不同。正常来说,对同一个人,工作七年后所做的项目质量应该是要高过三年时候的。如果工作了七年,但发现所做的项目,以及在项目中所承担的角色还是跟三年时候一样,就要十分警惕了。这让人感觉,你的三年跟七年似乎是没有区别,没有成长的。
那如何来看一个人的项目经验呢,我觉得可以从这几个维度来看 :
项目的规模
规模可以从两个方面看:项目参与的人数和产品的用户数。
项目参与人数越多,说明项目的复杂度越高,在项目里遇到的问题也会越多,越难,用于解决这些问题的技术难度也会越大。比如说,两人参与的项目,就软件构建层面来说,怎么搞问题都不大,大不了两人打一架,总可以统一到一起。但如果是五十人参与的项目,难度就大很多了,如果没有统一的开发规范,不遵循一般的设计模式,设计原则,项目最后就会陷入泥潭。
产品的用户数是一个很核心的指标,特别是互联网公司。其实无论是服务端,客户端,前端,还是算法方向,技术遇到的难题都是跟用户数量成正比的。服务端很好理解,千万用户的和亿级用户对服务器数量的要求完全不同,服务器数量可能是近10倍的增长,而复杂度的提升比十倍还高。
客户端,前端,在用户规模大起来后,会面临更加复杂多变的环境,比如一些长尾机型的适配,一些难以兼容的浏览器等。算法同学要面对的是更大的数据量。更大的数据量,意味着数据的多样性会更大,噪音也会更大,这也提升了数据内容理解的难度。
项目中的角色
一个十人项目里的主负责人和分模块的负责人,肯定是不一样的。主负责人需要更高的技术视野,更全面的思考,也需要有更好的协调能力。这个是技术,统筹能力的综合体现,毫无疑问会更加有含金量。
在实际面试过程中,面试官可能不了解你公司,也不了解你所在的团队。你说你是项目负责人,说白了,他也无法证伪,所以这里更重要的是,要有主负责人的那种技术视野和思考深度。
在实际面试的时候,你说你是负责人之一(实际的负责人可能不止一个),然后你又体现出了相应的技术视野和思考深度,其实也是可以的。
这里也给了我们一个启发,无论自己在项目中是什么角色,对系统的思考都是很重要的。
很多同学说自己天天写 if else ,做的项目没有技术含量,但你真的有思考吗?有花时间去了解过系统的整体设计吗?不同的模块之间是怎么衔接的?整个系统最难的是什么?再者,多问一句,你知道系统存在的问题吗? 你可以把它设计得更好吗?
这些其实是日积月累的,人跟人的区别,也就在于这多一步的思考。
项目的性质
这个需要解释一下。对于工程系统,可以做这么一个大概的划分,业务系统,中间件,基础组件。一般情况下,就技术含量来说 : 基础组件 > 中间件 > 业务系统, 就业务能力来说,是反过来的。
在实际面试的过程中,大部分的面试官比较喜欢有技术含量的项目,纯业务逻辑的阐述比较难获得面试官的认可,所以有机会去尝试一些基础系统的开发或中间件的开发,还是应该好好把握的。
如果实在没有机会,也要学会抽象业务系统中的业务逻辑,抽象描述比起直白的业务逻辑陈述,给人的感觉肯定是不同的。
算法的方向,也有区分,主要区分是应用研究和基础研究。这里主要是岗位的匹配度。基础研究去面应用研究应该要容易些,一般面试官担心的是,基础研究的同学有没有实际的业务经验。应用研究要面基础研究,估计就会比较难了。
自己折腾的项目
这个我觉得在面试的过程中,一定是有加分的,先不论项目本身做的怎样,会主动去折腾项目的人,对技术一定是有激情的。
对于毕业生,在大学的时候会不会自己找项目来做,在技术职业发展上,已经是一个很大的分水岭了。
对于已经工作的人来说,如果够参与一些开源的项目,面试官无疑是会多看一眼的,不过目前国内企业的工作时间太长,我估计大部分人没有这个时间和精力了。
结语
项目经验,我觉得是程序员最值钱的东西。除了校招的时候,对项目经验的要求比较低,其他时候,项目经验都是决定技术等级,收入的关键。所以我们对项目经验的积累要非常的重视,除了项目的数量,也要更多的考虑项目的质量。
程序员在自己的职业生涯中,要经常思考自己所做项目的规模和技术的难度,如果发现自己长期处于小规模,低技术难度的项目中,就要想办法为自己找寻更好的项目了!
推荐阅读:
你好,我是大飞,十年互联网人!
如果你喜欢我的文章,就给公众号加个星标吧,方便阅读。
提升技术认知,助力技术成长 :