加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

积累三年工作经验使用二十年,你敢吗?

2017/07/08
58
阅读需 27 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

 

最近见了我的朋友白东,他们公司要扩大规模,招很多程序员。作为主管的白东一直进行面试,所面试的对象老鸟菜鸟都有。为了节约面试时间,在面试前一天白东会通知应聘者通过邮件提交一份半年内编写的不少于 2K 的程序代码,以确定双方是否需要进一步沟通了解。每位工程师提交的作品白东至少会花 20 分钟来浏览,如果感觉可以就通知对方第二天来单位面试。通常能来面试的人只要对薪酬福利、工作时间、工作地点没有太大的异议,90%以上会来白东的部门入职。在整个招聘流程中白东几乎不参考对方的毕业的学校、专业、工作经历等,经过白东面试进入公司的工程师基本都很称职。
   
百东的解释是,通过他们提交的 2K 程序代码,基本就能反映出一个程序员的真实水平。


“你怎么确定这些代码是他们自己编写的?”我很困惑。

“我会找出代码中几个亮点让他们解释,因为我要求是近半年内编写的代码,对方不允许回答记不清楚了,根据他们的回答基本可以确定是不是他们的自己写的。”

“如果是他们抄别人的呢?”我反问。

“骆驼,如果你能把别人经典的代码基本吃透并且应用的很好,那说明你也非常有能力

。就比如一个人不会做饭,但是会选其他厨师做好的菜搭配宴席,这也是牛人!”

“你看重对方的工作时间长短吗?”我继续问。

“不看,这些都是虚的,有人工作二十年和工作两年,技术水平区别不大。”他很肯定地回答。
 


白东是公司的项目经理,招人有自己的一套方法。通过一个人的作品来评估是否能胜任本职工作的方法我很赞同。有没有真本事拉出来溜溜就知道了。但是现在单位招人总会对工作年限做要求,比如我们单位的职位需求就会标明:统招大学本科,三年以上工作经验。放眼看其他公司的招聘信息,几乎每家公司都对工作年限作出了量化的要求,三年以上”的居多。为什么要求是三年而不是五年或者更长时间?很多人就这一问题进行过讨论,有人的回答是掌握一项谋生技能需要一万小时。如果一位大学生毕业开始每天工作学习十小时,在三年的时间内可以完成一万小时的积累,就可以承担某项工作任务。

三年是一个工程师的成长期,那么三年以后呢?我开始正视这个问题。

老板要求我改写一款冷干机的控制流程,因为单位负责这项产品的张同事辞职了。张同事以前供职于西安某研究所,从事航空测试平台的研发,来我们单位工作继续从事单片机研发工作,任职六年。六年间,我和张同事的工作没有交集。老板交代我接手他的工作,维护更新好他的产品项目奖金也归我,我欣然答应了。

因为吸干机流程变化不大,我完全有信心搞定。但是打开项目浏览五分钟后,我的心情就像坐了过山车从最高处跌落到低谷:这笔奖金不好拿!

虽然产品已经非常稳定,但是整个代码风格却是非常纷杂,与工作两年的同事写的代码风格近似。好在这次增加的功能非常简单,我花了几天时间仔细阅读了一下代码,编写了一个小函数解决了这个问题。如果不是时间也很紧张,我想我会重新编写这个项目。

 


如果不是认识张同事,我不敢相信这个作品出自一位具有二十年工作经历的工程师之手:

第一 ,整个项目没有划分文件,所有代码写在一个 .C 文件中。文件可以按照功能划分,如果项目再复杂一些,还应该划分文件夹管理,不能将上万行代码写在一个文件中。计算机一屏显示大约 50 行代码,一万行将需要 200 页才能显示完。查找一个函数或者变量,或者从一个函数转向另外一个函数真的太费劲了。而且程序没有一点层次感,我甚至不能容易确定硬件层、业务层等,整个项目几乎没有明显的脉络。

第二 ,变量名与函数名不规范,没有达到见名知义的效果,变量名随便设计。因为 IO 端口有限,所以对 24 个开关量的读取只能采用片选的方式分时分 3 次读取。张同事保存三个变量的变量名竟然设计为 x、y、z。难道就不能是 OPT_IN_0_7、OPT_IN_8_15、OPT_IN_16_23。关于吸干流程函数名称竟然是 LiuProc(  )。

关系密切的十几个变量竟然都是独立的,没有使用结构体统一管理。关于系统运行和配置的参数没有归一化管理。MCU 的 RAM 虽然十分宝贵,但是张同事使用 MCU 也有 2K 的 RAM,采用归一化的处理,比如关于系统的运行的参数都可以使用 s16,从 RAM 角度来看肯定有浪费,但是可以简化程序设计,特别是通讯程序设计将非常简单。但是张同事为了节省几个 RAM,没有使用数组。几个变量写了整整一页,通讯程序也非常复杂。
 


第三,数据与函数没有做到分离。一个系统的参数与函数其实是天然分离的。通过函数对数据进行初始化、更新等。但是张同事并没有真正做到这一点,很难理清楚系统的输入与输出之间的关系。
      
第四,没有使用状态机,读取键盘输入必须消抖。为了进行消抖在教科书中一般会介绍使用 for 语句嵌套实现一段延时,但是这是一种非常低效的做法,程序会长时间的停留在该处。降低了系统的整体效率,造成系统对其他输入反应迟钝。

第五,注释太多,程序不要太多的注释,应该强调程序自述性。也就是可以通过程序主框架、变量名、函数名读懂程序。因为程序是记叙文,只要在关键部分注释一下。我们暂且不去考虑其是否完全正确,但是张同事的代码注释太多了。80%的代码行都有注释。

其实即使看来注释也未必能读懂他的思路,如果程序需要那么多注释,只能说明设计者思路不是十分流畅。

完成老板交代的任务我有一种劫后重生的感觉,如果可以重现选择我不打算再接这个项目,花费这么大的精力赚那么一点钱实在不划算。我突然明白白东所说的“工作二十年和工作两年区别不大”了。

对于有些人来说,工作能力提高过程在开始的三年时间基本就完成了。也就是说在刚开始的 1-3 年其工作能力一直是提高的,三年以后也就基本停止提高了。三年的工作积累基本可以满足一般工作需要,即使不继续上进也能搞定工作内容。如果将白东结论翻译一下就是:有些人不是具有二十年的工作经验,而是将两年的工作经验使用了二十年。

前一段时间华为淘汰 35 岁以上的程序员闹得沸沸扬扬,人们开始探讨程序员到底该多少岁结束职业生涯?有人说是 30 岁、有人说是 35 岁、有人说是 40 岁,当然还没有人说 45 岁的。其实一个公司能够培养一个专业水平好的程序员非常不容易,大学毕业后至少要经过三到五年的历练,过早结束职业生涯是社会的损失。但是哪个企业也不想养着一个工作了二十年,技术水平却停留在头两年的工程师,况且现在的工程师薪水年年水涨船高。

 

与非网原创内容,未经允许,不得转载。

更多相关内容,请点击:程序员趣事一箩筐

相关推荐

电子产业图谱

早年从事软件测试工作,2002年从事C语言教学。同年设计了视音频切换器,用于硬盘播出机。次年开始从事热电偶检测装置的设计。2010年从事现代农业管理机的设计。2012年从事电力行业的FTU设计与研发,成功编写了FTU软件。2013参与了塔吊安全监控设备开发。10多年来对C语言情有独钟。略懂verilog。