77

工作3年和工作7年的程序员到底差在哪里?

 4 years ago
source link: http://news.51cto.com/art/201909/602949.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

工作3年和工作7年的程序员到底差在哪里?

有不少同学问过我技术能力的问题。比如说工作三年的人,应该有怎样的技术能力。

有不少同学问过我技术能力的问题。比如说工作三年的人,应该有怎样的技术能力。

1f5daab4dc566eb16d0bdfb39e886616.jpg-wh_651x-s_282409301.jpg

图片来自 pexels

我们公司内部有一个技术等级的标准,但我感觉那种描述太虚。实际面试的过程中,一般面试官也不会询问那些太虚的东西,反而更看重实际的项目经验。

所以通过项目经验来判断一个人的能力,我觉得是最普遍且客观的。

86831c0afadff29bc1c7826650f7a613.jpg-wh_600x-s_651820990.jpg

程序员的经典段子:“Talk is cheap,Show me the code !”。在实际面试和衡量一个人的技术能力的时候,我觉得就是 :“Talk is cheap,Show me the project!” 。

你知道什么不重要,重要的是你做过什么。这里引申出一个很重要的问题,作为程序员,做什么事情才能够给自己带来真正的,最终的成长,我觉得就是项目。

很多同学都有持续学习的习惯,有时间都会去钻研新技术,学习新知识,这当然是极好的,但这个不是能力成长的终点。

我觉得能力成长的终点,应该是将所学的东西应用到实际的项目中,形成真正的能力。

就像我们在听一个人介绍一个大牛的时候,不会说,这个大牛会 xxx 语言,会 xxx 框架,而是会说他做过什么项目,项目的规模有多大,影响有多大等。

再回过头来看,同学们提的问题:一个三年工作经验的人和一个七年工作经验的人,在能力上有什么不同?

这里的不同当然是多方面的,但就技术能力来说,最关键的还是项目经验的不同。

第一个是所参与项目数量的不同。就同一个人而言,工作七年时候的项目经验肯定是要比工作三年时候多的。

第二个是项目质量的不同。正常来说,对同一个人,工作七年后所做的项目质量应该是要高过三年时候的。

如果工作了七年,但发现所做的项目,以及在项目中所承担的角色还是跟三年时候一样,就要十分警惕了。这让人感觉,你的三年跟七年似乎是没有区别,没有成长的。

那如何来看一个人的项目经验呢,我觉得可以从这几个维度来看 :

项目的规模

规模可以从两个方面看:

  • 项目参与的人数
  • 产品的用户数

项目参与人数越多,说明项目的复杂度越高,在项目里遇到的问题也会越多,越难,用于解决这些问题的技术难度也会越大。

比如说,两人参与的项目,就软件构建层面来说,怎么搞问题都不大,大不了两人打一架,总可以统一到一起。

但如果是五十人参与的项目,难度就大很多了,如果没有统一的开发规范,不遵循一般的设计模式,设计原则,项目最后就会陷入泥潭。

产品的用户数是一个很核心的指标,特别是互联网公司。其实无论是服务端,客户端,前端,还是算法方向,技术遇到的难题都是跟用户数量成正比的。

服务端很好理解,千万用户的和亿级用户对服务器数量的要求完全不同,服务器数量可能是近十倍的增长,而复杂度的提升比十倍还高。

客户端,前端,在用户规模大起来后,会面临更加复杂多变的环境,比如一些长尾机型的适配,一些难以兼容的浏览器等。算法同学要面对的是更大的数据量。

更大的数据量,意味着数据的多样性会更大,噪音也会更大,这也提升了数据内容理解的难度。

项目中的角色

一个十人项目里的主负责人和分模块的负责人,肯定是不一样的。主负责人需要更高的技术视野,更全面的思考,也需要有更好的协调能力。这个是技术,统筹能力的综合体现,毫无疑问会更加有含金量。

在实际面试过程中,面试官可能不了解你公司,也不了解你所在的团队。你说你是项目负责人,说白了,他也无法证伪,所以这里更重要的是,要有主负责人的那种技术视野和思考深度。

在实际面试的时候,你说你是负责人之一(实际的负责人可能不止一个),然后你又体现出了相应的技术视野和思考深度,其实也是可以的。

这里也给了我们一个启发,无论自己在项目中是什么角色,对系统的思考都是很重要的。

很多同学说自己天天写 if else ,做的项目没有技术含量,但你真的有思考吗?有花时间去了解过系统的整体设计吗?不同的模块之间是怎么衔接的?整个系统最难的是什么?

再者,多问一句,你知道系统存在的问题吗? 你可以把它设计得更好吗?这些其实是日积月累的,人跟人的区别,也就在于这多一步的思考。

项目的性质

这个需要解释一下。对于工程系统,可以做这么一个大概的划分,业务系统,中间件,基础组件。

一般情况下,就技术含量来说:基础组件>中间件>业务系统,就业务能力来说,是反过来的。

在实际面试的过程中,大部分的面试官比较喜欢有技术含量的项目,纯业务逻辑的阐述比较难获得面试官的认可,所以有机会去尝试一些基础系统的开发或中间件的开发,这是应该好好把握的。

如果实在没有机会,也要学会抽象业务系统中的业务逻辑,抽象描述比起直白的业务逻辑陈述,给人的感觉肯定是不同的。

算法的方向,也有区分,主要区分是应用研究和基础研究。这里主要是岗位的匹配度。

基础研究去面应用研究应该要容易些,一般面试官担心的是,基础研究的同学有没有实际的业务经验。应用研究要面基础研究,估计就会比较难了。

自己折腾的项目

这个我觉得在面试的过程中,一定是有加分的,先不论项目本身做的怎样,会主动去折腾项目的人,对技术一定是有激情的。

对于毕业生,在大学的时候会不会自己找项目来做,在技术职业发展上,已经是一个很大的分水岭了。

对于已经工作的人来说,如果能够参与一些开源的项目,面试官无疑是会多看一眼的,不过目前国内企业的工作时间太长,我估计大部分人没有这个时间和精力了。

结语

项目经验,我觉得是程序员最值钱的东西。除了校招的时候,对项目经验的要求比较低,其他时候,项目经验都是决定技术等级,收入的关键。

所以我们对项目经验的积累要非常的重视,除了项目的数量,也要更多的考虑项目的质量。

程序员在自己的职业生涯中,要经常思考自己所做项目的规模和技术的难度,如果发现自己长期处于小规模,低技术难度的项目中,就要想办法为自己找寻更好的项目了!

06b2a54c97a0c09401603bab7aea68d4.gif-wh_600x-s_2946624692.gif

【编辑推荐】

【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK