美文网首页计算机杂谈软件研发思维上班这点事儿
合格的初级软件工程师应该做到哪些?

合格的初级软件工程师应该做到哪些?

作者: 孙振强 | 来源:发表于2018-04-01 21:56 被阅读211次
工程师

一、什么是工程师?你是真正的工程师吗?

工程师和科学家在过去是可以并列的头衔,当今在德国和法国工程师依然会有一个特殊的资格证书,这如同医生和律师的特殊资格证书。

在今天的中国,到处都是工程师,特别是IT行业,大学刚毕业就成了工程师。实际上这些应届毕业的大学生们既没有工程师之名(资质),也没有工程师之实(技能),仅仅靠名片或工牌上的Title来称自己是工程师只能说是“浪得虚名”。从现实中来讲大学毕业生顶多是工程师的学徒,因为其中很多人基础薄弱、也非兴趣驱动,而是因为IT这一行的收入还不错,混进来再说。

对于从事着IT行业的你来说,总结一下自己是不是真正的工程师?不过不管初始能力怎样?动机是什么?我觉得都是幸运的,我自己也是其中的一个幸运儿。因为在这个时代才有了这个行业,才造就了我们,才让我们能够像诗人一样写作,但我们可以让这些“诗歌”应用到生产实践中,从而进一步提升我们的生活品质、创造明天更好的未来。

二、软件工程师的分类与分级

上面说的IT行业的工程师大致为软件工程师和硬件工程师,下面就我从事的软件工程师这一行业来具体说说。软件工程师从广义上讲是从事软件开发相关工作的人员的统称,细分为C++工程师、JAVA工程师、PHP工程师、Python工程师、Ruby工程师、C#工程师、Web工程师、Android工程师、iOS工程师、测试工程师、运维工程师、算法工程师、AI工程师、DB工程师、架构工程师、UI设计师、UE设计师、产品经理、全栈工程师等等,不过狭义上指的是进行程序代码编写的人员,我们这里说的是狭义的软件工程师。

对于需要编写代码的软件工程师,通常也叫做程序员,我们有时会自称为“程序猿”,但更多的时候会被社会称为“码农”,甚至是我们自己也这样认为。被称为“码农”有很多解释,有人说写代码这个工作像农民伯伯种地一样很辛苦,也有人说是因为总在做着重复的、低级的事情……但总归来说,“码农”和工程师好像是两个不同层面的物种,被称为“码农”也不是一件荣耀的事情。我觉得“码农”的出现主要是这一行进来了很多浑水摸鱼的家伙,再加上行业发展过快,对这一行业的人才需求过多,BOSS们也顾不得这些“人才”是不是真材实料,从而致使这行的门槛越来越低,平均水平越来越差(精英当然很多,并越来越多)。

我们通常把软件工程师分为初级、中级、高级三个级别,大学毕业生步入公司通常就是成了初级工程师。这样的分法比较简单、常规,但并不合理,也不符合实际情况,很多人其实根本达不到初级,更别说高级了。

IT大咖吴军采用科学家朗道对物理学家级别划定的方法将工程师也划分为五个等级。

五级工程师阶梯图
  • 第一级:开创一个产业;
  • 第二级:能设计和实现别人不能做出的产品,也就是说他的作用很难取代;
  • 第三级:能独立设计和实现产品,并且在市场上获得成功;
  • 第四级:能指导和带领其他人一同完成更有影响力的工作;
  • 第五级:能独立解决问题,完成工程工作。
  • 第一级是开创一个产业的人,包括爱迪生、福特、贝尔等人。这可能离我们远一点。
  • 第二级是能够做出先前没有的东西的人,世界因为他们多少有点不同。举几个例子,比如北极光风投的创始人邓锋,在他(和谢青、柯岩)之前,世界上没有真正意义上的网络防火墙设备,他们做出了这个设备,并且成功创立了当时世界上最大的防火墙公司(Netscreen),这个公司在被收购前市值大约为20亿美元。他可以算得上是二级工程师,另外,Google云计算的发明人迪恩(Jeff Dean)也可以算。你如果能成为二级工程师非常好,但是如果不能也没有关系,不必对自己太苛刻。
  • 对于第三级的工程师,就应该能够独立带领人做出一个为公司挣得利润的产品了。这里面除了上述能力外,还涉及到对市场的判断和营销能力了。很多人讲,我就是做工程的,这个东西是否有用,我不清楚,有什么事情你叫我做就好了。这样显然达不到第三级的要求。
    第三级的工程师,本身必须是非常好的产品经理。一个有良好工程素养的人,如果心胸开阔,愿意接受各种意见和建议,经过努力,可以做到这一步。你可能奇怪,我为什么专门强调心胸开阔,因为人有多大的心,就能做多大的事情。有人抱怨自己作为工程师,收入和社会地位太低,我想如果你做到第三级,就不低了。当然再往上,就不是很多人能够做到的了。
  • 对于第四级的工程师,就需要有领导能力和在工程上把大问题化解为小问题的能力了。用我之前写的“愿景-目标-道路”的逻辑(第3封信《再谈10000小时,三板斧破四困境》),他们能够寻找出实现比较大的目标的道路。工程师和科学家不同,后者考虑的是对和错,前者只是在现有条件下考虑好和坏的解决方案。
    比如在建造一座海湾大桥时,工程师会在现有资金的条件下,根据交通的需求设计一个200年使用寿命的大桥,但是为了让军队迅速通过一条河,他们追求的目标就变成了在最短时间内建造足够让军队安全渡河的浮桥。目标不同,工程师的解决方案就不同,这件事对于土木工程师和桥梁工程师来讲,常常不是问题。但是很多搞IT的人,常常会把海湾大桥修成浮桥,也会把浮桥按照海湾大桥来慢慢修。因此,能否成为四级的工程师,要看能否最好地解决一个这样有规模的实际问题。这个能力远不是熟练写程序就够了的。很多人抱怨自己的机会不够,其实从管理者的角度看,中国IT公司里非常缺乏这样有头脑的工程师。至于为什么有的人能够得到机会,他们和上下级之间较强的沟通能力帮助了他们。
  • 以计算机行业为例,一个人毕业后,经过一段时间的锻炼,能够熟练应用工程的知识和技能解决问题,独立完成所分配的工作,而不需要他人指导,就算是一个合格的五级工程师了。再具体一点,比如这个人在京东公司任职,老板让他做一个工具,找出那些不断帮助女(男)朋友买书的读者。他自己知道在公司内找谁去要数据,如何确认两个人可能是男女朋友,而且经常买书。也知道自己在京东公司的环境里,应该使用什么样的开发工具。以及为了方便客户使用,这个工具应该有什么样的基本功能。

对照这个标准,之前提到的初级、中级、高级工程师和这里的五级、四级、三级应该是对应。但是按照这个标准,很多人根本达不到这个五级工程师的标准,甚至有不少工作多年的老程序员也达不到(他们常被称为初级老程序员)。你觉得你是几级呢?

是不是标准定的太高?我认为不是,而是这一行需要清醒和清理了。首先得请BOSS们对软件工程师进行真正的了解、要求和筛选而不是急于求成;其次对要进入这一行业的小朋友们增强行业认知,搞开发并不是想象中那样光鲜和容易,收入也不见得就会很多,如果你明白996是什么,那么计算出的小时收入其实并不高;对于已经在职场中的同行们,首先需要认清自己真实的水平,需要与时俱进的持续学习,需要积极向上的职业规划,需要……

三、初级软件工程师的具体要求:

下面我就如何做到一名合格的初级软件工程师进行具体的要求描述,以此帮助我身边的你或即将进入这一行的你。

0. 热爱IT这一行,热爱你的工作

热爱你的工作

俗话说干一行爱一行,但如今很多在IT这一行的同学并没有真正热爱这个行业,我看到更多人是因为这一行门槛低、收入高、形象好。

基于这种现实需求,现在满大街的IT培训机构,不管你大学是不是是计算机、通信工程、自动化、软件工程等IT科班专业,只要你肯交学费(一个培训差不多得2万),他们就敢收你、教你、推荐你(培训机构的包装方面倒是很在行)。好在很多人也有自知之明,通常不会选择C++、JAVA、算法这类入行就有难度的学科,更多是选择测试和Web前端。

如此一来的结果是:招聘的时候到哪哪都是刚培训出来的新手,学什么的都有,什么学历的都有,甚至工作很几年后转行来学IT的也不少(因为以前的工作太累了),还有一些是有工作经验的菜鸟(没有基础、没有激情、没有提升)。公司其他管理者常常抱怨我怎么不招几个能干的人进来?我想说能干的人是有,但是太少了,而且混杂在这些新手的草丛中,只能可遇而不可求了。

不管怎么说,IT这一行本身确实是很棒的、很有乐趣,它有着创建事物的纯粹快乐,能够做出对他人实际有用的东西,并且有着整体过程魔幻般的迷人魅力。在这个过程中,我们还会持续的学习,并且容易实现。(以上观点源自《人月神话》https://www.jianshu.com/p/2d24912f7d84)。

当然这一行也有着很多苦恼,不过无论是乐趣还是苦恼,它们都是我们热爱这一行业的理由。如果你并不热爱这一行业,请你不要加入,否则等待你的将是苦恼多于乐趣的道路。如果你已经加入这一行业,请让自己开始真正了解这一行业并热爱它,否则乘早放弃、转行,否则你将会被人工智能的大浪彻底淹没。

1. 了解团队精神,掌握协作能力,快速融入团队

Teamwork

在软件研发的行业内,是有一些通过个人能力独自完成经典软件的案例,但是要把一个软件产品化、商业化,那就不是一个人的事情,这需要一个团队。在团队面前,任何个人的力量都是有限的,即便像盖茨、沃森他们那样的天才,也需要通过组建强大的团队来创造奇迹。

因此一个团队精神和团队协作的能力是一个软件工程师最基础的能力要求,对于刚进入行的初级工程师来说,熟悉团队中每个人的姓名、角色、技术特长、性格等都是必须要做的功课,并且你需要与高频协作的搭档成为朋友。除此之外还需要了解团队的规则、文化、气质,让自己尽快融入团队而不是被团队边缘化。团队协作是让一个新人成长的最好的方式。

2. 注重细节,从小事做起

一颗小螺丝

我身边的一些同学缺少注重细节的思维意识,进而也会缺少注重细节的习惯。比如有一位同学不按约定进行微服务项目命名,在进行测试部署时当我指出此问题,他觉得这个不重要,只要写出的程序是可运行的就够了。敢问这样的回答你是否满意?我是肯定不满意的。事实上该同学之前就有几次类似的情况,这次我就此事进行了详细了情况了解和分析,最后通过五问法找到了根源,答案是该同学在认知上对细节的不重视,具体来说是对于代码运行无关的细节不重视。

作为一个软件工程师,注重细节是必修课,首先代码的运行是按照程序指令进行的,错了1点就会出错,所以写代码这个事本身需要注重细节,而且得非常注重,马虎不得。其次写代码不是孤立的事件,需要和很多东西打交道,比如要理解需求,要验证测试等等。如果一个人不注重细节,或者说不注重与代码运行无关的细节,那么我可以肯定,他在编写代码的工作上也会经常出现问题,而这些问题通常是和细节有关的。

3. 养成良好的文档习惯

文档!文档!

文档是软件工程中非常重要的、不可或缺的一部分。一些同学说我写好代码就行了,写文档是在浪费时间。事实上:写代码包含写文档,作为软件工程师,至少有30%的时间需要分配给写文档,作为中级或高级工程师这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错、升级、复用时就都会遇到极大的麻烦。

技术文档通常包括:系统模型设计(功能模型、结构模型、行为模型),系统总体设计(技术架构、网络拓扑、功能结构、数据传输),系统详细设计(详细类图、功能顺序、ER模型、数据字典、DDL、接口定义)。

4. 规范化的代码编写习惯

规范的代码

先说一个观点:代码是写给人看的,机器仅仅是执行而已

代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都应有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于团队之间的协作。

写代码是一个程序员的核心工作,看代码是程序员的基本功之一,但是别人写的代码自己看不懂,那将是很悲催的事情,如果是因为代码写的脏、乱、差而看不懂,那么将是悲催加无奈的事情。你肯定不希望遇到这样的情况吧?那么请先你将自己的代码写规范。

5. 良好需求理解能力将是你成功的一半

理解万岁

对于软件工程师来讲,阅读需求文档也是一项基本功,从产品经理的输出中,有着各式各样的需求文档,如PRD、原型图、效果图等等,从文档中将需求理解出来并形成系统的实现逻辑,这需要一定的语文水平,不过既然能够大学毕业,语文水平不会太差,表面读肯定没有问题,但是要读明白肯定需要用心的。

分享一个读需求文档的方法:三遍读

  • 第一遍,概览,记住不是跳跃浏览,而是整体阅读一遍,对需求有个全面了解。
  • 第二遍,重点详读、形成方案,通常一个需求需要多个人协作开发,那么第二遍重点看分配给自己的部分或者自己准备做的部分,并将自己的系统实现思路记录下来。
  • 第三遍,细化方案、疑点专读、寻求解答,基于第二遍的结果,对系统实现方案进行细化,对于其中存在疑虑的点进行需求专读或者寻求帮助解答。

6. 复用性、模块化思维能力

复用

经常可以听到一些程序员有这样的抱怨:写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作。

事实上这些情况是完全可以避免的。复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作。

如果看到此处你对复用还不了解,那么你就真的需要复习基础知识了,简单说我们平常使用的各个系统函数都是在复用。

如果你对复用有了一定的认识,那么建议你深入了解一下递归——计算机核心思想之一。

7. 亲手测试你的代码,别让他人抓住小辫子

Bug在哪里?

一个软件系统的Bug,越早发现,解决的代价就越低。一个成型的研发团队,必然有着专职的测试工程师,即便如此自测依旧是不可减少的环节。

程序员在每段代码、每个子模块完成后进行认真的测试,就可以尽量将一些潜在的问题最早的发现和解决,这样对整体系统建设的效率和可靠性就有了最大的保证。

测试工作实际上需要考虑两方面,一方面是正常调用的测试,也就是看程序是否能在正常调用下完成基本功能,这是最基本的测试职责;另一方面就是异常调用的测试,比如高压力负荷下的稳定性测试,用户潜在的异常输入情况下的测试,整体系统局部故障情况下该模块受影响状况的测试,频发的异常请求阻塞资源时的模块稳定测试等等。

8. 及时沟通、有效沟通

沟通

对于沟通能力,本来应该和团队协作一起来说,但介于它特别重要,所以就单独来说说。首先沟通得及时,否则沟通的内容会失效或增加成本。其次沟通要有效,尽量每次沟通要有结论而不是为了沟通而沟通的空谈。

沟通的形式具有多样性:大部分文档性的沟通我们采用的系统的方式进行,比如接口定义、Bug提出、软件原型等;还有一些非及时的或有重要信息的沟通,需要使用邮件或知识库;对于一些及时性强的沟通则需要使用钉钉这类IM进行;对于非常重要的事情,还是面对面沟通最好的,但是这种方式最好提前做一下准备,比如要沟通什么,要得出什么结论。

刚才说的沟通方式是沟通从发起者的角度讲的,对于沟通参与者来讲,需要养成定期收查邮件的习惯,每日至少2次,最好设置成及时通讯工具的提醒,比如钉钉或微信来提醒新邮件。对于钉钉、微信等及时性消息,要更短频率去查看,特别是@自己或单发给自己的,除非你在开会或者专注于某项重要工作。

9. 独立工作、为结果负责、协调资源

负责结果

开头讲了,软件研发不是一个人的事情,需要团队。不过话又说回来,团队是由一个个独立的个人组成,每个人都负责着团队的某项任务,那么分配给你的任务就需要你去独立完成,并对结果进行负责。

在这个过程中,你可能是一个人,也可能是一组人,但是不管几个人,你都需要协调资源,这个资源包括设备、环境、代码库、网络等,当然还包括人。比如安排你来负责一个模块的开发,那么你需要申请该模块的代码权限;如果该模块代码库尚未建立,那么你需要申请创建。如果你是一个小组的TL,那么还需要组织协调好小组内成员的工作任务、时间的安排。

10. 持续学习和反思总结的能力

持续学习、持续进步

现今的软件工程师是很容易被淘汰的,一方面是因为入行的人员太多,另一方面是因为这个行业的技术更新太快。如果你想安身立命,就必须进行持续的学习。

学习也要找对目标,要系统化,并善于总结,这也是学习能力的一种体现,每次完成一个研发任务,完成一段代码,都应当有目的的跟踪该程序的应用状况和用户反馈,随时总结,找到自己的不足,这样逐步提高,一个软件工程师才可能成长起来。

软件工程师应该学习的基础专业课程:

  • 数据结构
  • 数据库
  • 算法
  • 计算机原理
  • 计算机系统结构
  • 自然语言处理
  • 计算机视觉
  • 计算机控制
我是大神

写了这么多不知道你是不是已经看烦了,总之具备以上全部素质的人,应当算是合格的初级软件工程师了。特别需要注意的是,以上的各种要求都不是由智商决定的,也不是培训机构能够快速学到的,而是需要自己逐步认知和反复努力换来的,祝你能够成为真正的软件工程师,祝你能够在软件研发之路迈向塔尖。

相关文章

  • 合格的初级软件工程师应该做到哪些?

    一、什么是工程师?你是真正的工程师吗? 工程师和科学家在过去是可以并列的头衔,当今在德国和法国工程师依然会有一个特...

  • 零基础学到什么程度可以找一份web前端工作?

    能找到一份前端开发工作,首先你起码得是一个合格的初级前端工程师。那么,什么是初级前端工程师?初级前端工程师都会做些...

  • 2019年Java市场趋势与建议,企业对Java程序员又是怎样的

    一、企业眼中合格的 Java程序员是什么样的? 1、初级Java工程师 初级 Java 工程师需要基础扎实,在精通...

  • 软件测试工程师到底是个什么样的职业?

    首先跟大家普及下软件测试工程师初级软件测试工程师是负责进行软件测试工作的初级职业人员。他们通常负责按照测试计划和测...

  • 拿4k的前端开发都会做些什么?

    对于刚刚入门的小白来说,你起码得是一个合格的初级前端工程师,不然有哪家公司愿意给你offer,初级的前端工程师拿4...

  • 2019-06-24 收藏转发

    出处 每个人开发者都是由初级一步一步走向高级工程师。当然,不是说工作了多少年就能称为一名合格的高级软件工程师。有可...

  • 软件测试学习方向

    一名合格的软件测试工程师应具备以下技能的: 60%-----合格 80%-----优秀 90%-----资深 10...

  • 1024 原来不入流

    工程师的五个级别: 第五级是一个合格的工程师。你做到一些对于工程师最基本的要求的时候,你就合格了,就叫做第五级,比...

  • 何去何从

    开发工程师:25岁初级软件工程师,28岁高级软件工程师,32岁架构师,35岁外卖员。 产品经理:25岁产品经理,2...

  • 只是年龄达到了架构师而已

    知乎曾有一个针对互联网不同年龄的职级的最高票回答。 开发工程师:25岁初级软件工程师,28岁高级软件工程师,32岁...

网友评论

    本文标题:合格的初级软件工程师应该做到哪些?

    本文链接:https://www.haomeiwen.com/subject/dypacftx.html