学生党的困境与机遇

秋招是应届生求职的最佳上车机会。从每年的三、四月开始陆续开放实习,到提前批,再到七、八月份左右开始的正式秋招,求职者需要经历漫长的准备、求职与等待期,可谓一路披荆斩棘、过五关斩六将,方能收割各公司offer。所谓“工欲善其事,必先利其器”,在正式投入秋招的大潮前,我们不妨多多思考与分析,无论是寻找兴趣点、规划职业生涯,或是剖析自身优劣势、针对性地储备知识与经验,都将为后面的实习与秋招打下基础。

作为一个秋招的过来人,今天我想首先从技术人员的角度,为学生党们们分析一下大家可能遇到的困境与机遇;之后针对容器云,分析一下应届生应聘容器云岗位要注意的事项。

在正式展开之前,请允许我做简单的自我介绍。我并非科班出身,硕士阶段我就读于清华大学信息研究院信息与通信工程方向,从事5G网络架构方面的研究。在我就学期间,正是 kubernetes 一统江湖的时期。通信领域,尤其是核心网部分,整充分的拥抱“云”。在此契机下,实验室的项目与我的研究内容都围绕着容器云展开。秋招期间,我并不是offer收割机,和你们一样经历过挣扎,最后略带运气地入职了商汤科技的容器云团队,成为了一名 DevOps 工程师。如今重新思考学业与研究内容,回顾实习与秋招经历,我想首先总结几个关键词,并围绕着关键词展开今天的话题,它们是:半路出家工程能力思维困境野蛮生长

困境

首先我想说一些大家可能遇到的困境。

半路出家

万物转CS的风气愈演愈烈,半路出家的学生也越来越多。

一、基础知识的差距

大部分半路出家的学生都无法否认与科班出身的学生在基础知识方面有一定的差距。这些差距体现在操作系统、数据结构与算法、计算机网络、软件工程等等方面,甚至是数学(如果一些小伙伴是文科院系转型的话)。基础知识是非常神奇的,平时基础知识不会显山露水。一旦遇到难题与bug,过硬的基础知识可以帮助你找到解决问题的突破口。同时基础知识可以帮助你深入理解组件和系统。

比如一个烂大街的面试题:为什么redis拥有这么好的性能?面试官并不指望应聘者把大段大段的解释死记硬背,而是希望应聘者对于非阻塞IO、IO多路复用等等有所理解。但是如果应聘者不了解内核空间、用户空间,对红黑树一脸懵逼,不清楚进程切换,如何真正的理解呢?

工作之后,虽然常常说“面试造火箭,工作拧螺丝”,但基础知识仍会大大的减少debug的时间。不久前我在尝试 kubernetes cpu-manager 特性与 nvidia-docker runtime 时,遇到了容器中无法使用 GPU 设备的问题。一路顺藤摸瓜定位到 cgroup device,之后的 hack 就很简单了。

所以大家一定要在校期间把基础知识学扎实了。即使是非科班出身的小伙伴,也可以通过自学公开课、阅读教材,逐步的把基础知识补回来。

二、未来的不确定性

人是有惰性的,对于未知有天然的恐惧。放弃自己的专业,转行进入CS,对于与CS有渊源的学科,比如自动化、EE等,倒还算顺理成章;对于生环化材等学科,需要补习大量知识,并转变思维模式。

面对不确定的未来,我想每个已经转向CS,或正计划转向CS的小伙伴,都应该问自己一些问题:

  • 我为什么想转向CS?为了就业、高薪,还是兴趣?
  • 我希望从事CS行业的什么工作?开发、算法、运维、测试、产品、运营……?
  • 我了解我想从事的岗位的现状与发展预期吗?
  • 我做好了转向CS的准备了吗?

这些问题除了每个人自己,没有人可以回答。但是小伙伴们可以早做规划,通过实习、询问师兄师姐等方式,尽可能多的了解信息。这样才能帮助自己做出更明智的决定。

三、对程序员工作性质的认知偏差

感谢一代一代程序员为开源事业作出的贡献,CS可能是有史以来最开放的学科了。大量最顶尖、最艰深的成果通过开源的方式展现出来;各种用户友好的封装、插件显著的降低了大家的学习与使用成本。蓬勃的开源社区催生了“面向搜索引擎编程”、“面向github编程”等段子。加上互联网应用软件的野蛮生长,久而久之,许多人对程序员的印象被局限在CURD。我曾对一次面试印象深刻,应聘者是一位微电子转CS的名校硕士生,应聘的是我所在的容器云团队。听着他说出对架构师的理解是“大流量、高并发”,我久久无法释怀……

程序员的工种是工程师。工程师为了解决问题而生。我们是一群"problem solver",无论是CRUD逻辑,还是底层知识,或者是软件架构,只要我们利用这些知识可以解决问题,就是我们的价值所在。软件开发是分层的。在浅水层暴露的业务逻辑与API是通俗易懂、易于学习的,深水层的各种艰深的知识则被隐藏在设计良好的架构之下。在应用逻辑之外,我们不妨对我们认为理所当然的事情,多问一句为什么。比如:

  • 鉴权授权体系里,LDAP,OAuth2,RBAC等等,到底是什么?
  • 计算、存储、网络等基础设施该如何建设?
  • 微服务、云计算的核心优势是什么?

这些问题远远地脱离了业务逻辑,看起来是运维人员才需要关心的,甚至日常开发都完全不会遇到。但是随着我们的工作内容不断向深层拓展,这些问题将逐渐展现自己的宝贵价值,并极大的延伸我们的技能数。当然,这是后话了。

项目与工程能力不足

一般来说校招时,招聘方并不会对应聘者的项目经验有强制要求。但亮眼的项目经验会为应聘者加分,毕竟企业招聘员工是希望员工为企业解决问题、创造价值。实际工作中大部分问题是琐碎的,并不涉及高深的知识与算法。那么我们换个角度想,作为一个招聘人员,你更希望招聘一个工程能力出色的普通员工,还是学历闪光但动手能力较差的员工呢?当然,学历闪光、研究能力出色、工程能力出色的员工是坠吼的!

我想对于校招生而言,最能加分的点有两个:

  • 过硬的基础知识与算法能力
  • 优秀的工程能力

第一个自然不不用多说。第二个则需要具备良好的软件工程知识,并能够真正付诸实践。本科生由于大部分时间都是学习课程,而课业压力通常不那么沉重,所以有更多的时间来实习或上网课练习。但我想在这里说一下我认为的“工程能力”的含义:具备规范地、保质保量地完成项目中个人应负责的的环节的能力。

我并不认为一份“精通python, c, java”,或是项目中写满了诸如 redis, mysql, spring boot, tomcat, vue, golang, docker 的简历一定是一份出色的简历。浅尝辄止、蜻蜓点水的项目经验其实并不能打动面试官。对于工程能力而言,最能见微知著的方面是候选人的编程习惯,是拿到问题先闷头写代码,还是先分析问题、编写文档?说的高大上一点,候选人对于DevOps,甚至TDD,有没有一定的了解?

项目与工程能力不足的小伙伴们不用太过担心。除了多多了解软件工程的相关知识外,牛客上与其他网站上也都有许多课程,跟着学习可以完成一些比较简单的demo项目,可以适当的补充自己这方面的能力。

信息不对称与思维盲区

我们生活在一个信息不对称的世界,而遗憾的是,对竞争而言,信息差就是优势。此外,信息不对称带来思维盲区,或多或少的将影响我们的判断和思考。在秋招中,有着两点普遍的信息不对称:

一、招聘需求

虽然大部分岗位都会列出JD,但显然很多JD含糊不清、词不达意,有的甚至文不对题。应届生仅凭JD很难了解岗位的全貌,更不可能清楚地了解该部门在公司中的地位,该职位的未来发展。所以大家在秋招时一定要尽量的与招聘方沟通,同时如果有师兄师姐在同样的岗位上,一定要多多与他们交流。

二、视野

CS行业的风口瞬息万变。十年前没有人会想到AI可以如此火,两年前没有人会想到VR会像流星一样短暂。应届生由于对行业的了解极少,往往只能凭借行业的历史记录,以及当前状态,判断自己下一步的行为。更多时候,我们只能选择贪心法,而贪心法往往不是最优解。19年算法岗诸神黄昏,20年校招的算法岗灰飞烟灭,谁能想到这条赛道突然挤满了人?

市场由需求决定,而真正的需求只有浸淫在行业里才能逐渐看清。我们很难说下一个真正的风口是什么,但也许让自己的视野更开阔,会是一个更好的选择。从我个人角度看,云已然成为一个风口,而“AI+云”为其他行业的赋能大有可为。

机遇

全新的视角

国内的互联网应用软件非常发达,大量公司集中在应用软件领域。然而2015年***总理提出“互联网+”的概念,“推动移动互联网、云计算、大数据、物联网等与现代制造业结合,促进电子商务、工业互联网和互联网金融健康发展,引导互联网企业拓展国际市场”;商汤一直坚持的理念则是让AI赋能百业,实现众多行业领域突破创新和落地应用。

当未来云成为普遍意义上的基础设施,百业将被赋能,越来越多的机会将涌现。无论你来自什么专业,一个新的视角、新的想法,也许就能打开新的契机。也许大家会觉得赋能百业是大饼,但不管怎样,起码它揭示了一种新的可能,一些新的方向。

细数一下我们曾听过的风口:VR、自动驾驶、智慧城市、智慧医疗、物联网、边缘计算、容器云……如双城记所言:“这是最好的时代,这是最坏的时代”。虽然竞争越来越激烈,我们也看到更多的赛道在铺开,更多的机会正在涌现。

野蛮生长

“野蛮生长”指在自由、不受约束、鲜有指导的环境中发展。不少硕士生应该我一样对这个词和深有感触。比如实验室的老师们带学生时,不会事无巨细的加以规定与指导,而是探讨出大致方向后,主要交给学生探索,充分发挥学生的主观能动性。

当找到一个方向时,野蛮生长能迅速的提高自己的知识与技能水平。当个人依照自己的兴趣与主观能力进行学习和探索时,个人需要自行处理许多问题,比如:

  • 学习方向:对一个大方向下的诸多细分方向的认知、评估、选择
  • 全貌理解:该方向的state-of-the-art是什么?未来发展方向大致如何?
  • 学习方式:找到切入点进行深入学习,并不断优化自己的学习手段、方法

踏上工作岗位之后,接触到的事情多是方向、DDL明确的任务。工作中为了很好的应对压力、完成任务,需要一个人有很好的时间管理能力、任务分解与排期能力,更多锻炼的是实践的方法论。而个人的学习能力、行业理解、思维方式的塑造往往是在自己的探索与学习中逐渐形成的。

自由折腾的过程对于自己的学习能力的培养的作用是巨大的。工作之后,往往大家的时间都在处理具体的需求、工作周边的琐碎事情、和同事老板的沟通,如果遇到一些任务重、时间紧的项目,留给自己学习的空间与时间往往是有限的。所以,请把握住学生时代依然自由的时光,尽可能在学校里成长为一个思维能力出色、学习能力与方法突出的候选人。

试错成本

学生的试错成本是很低的。学业不顺心可以考虑转专业,实习不顺心可以考虑换个公司,平时有大量的课余时间探索自己的兴趣点,社会与家庭不会为你施加过大的压力。这是每个人塑造自己的黄金时期。

但是试错不是撞运气,更不是投机。一个人的知识与技能是需要积累的,在持续的积累过程中,试错更像是一种方法论:在不断的尝试中迭代、优化。对于应届生而言,秋招中的试错应该是如何在工作中不断积累经验,在面试中不断修正自己的知识盲区;而不是算法面不上转开发,开发不喜欢转产品……

规划自己的职业生涯,找准方向,不断试错。这是学生时代才能享受的红利。

投身容器云领域前的注意事项

需要更广的知识储备

容器云研发岗是一种运维开发的岗位,不同于一般的开发岗,面试时可能侧重于语言、数据结构与算法、linux基础知识的考察;也不同于传统的运维岗,面试时侧重linux基础、运维经验、脚本语言、数据库的考察;运维开发岗面试时需要候选人既具备一定的研发能力,有具备一定的运维能力。这也就对候选人的知识储备有了更高的要求。

比如,运维开发岗的候选人首先需要对软件工程有一定的认识,对于DevOps有自身理解与认可。在此之上为了做好Dev,候选人需要有一定的编程能力,基本的数据结构与算法、编程语言(如Go语言)需要有所掌握;为了做好Ops,候选人需要对linux知识、计算机网络、操作系统等等基础知识有一定的掌握;由于容器云普遍采用 Docker + kubernetes 的技术栈,候选人还需要对虚拟化、容器、kubernetes、分布式系统有深刻的认识。

由于大学、实验室往往偏重于算法能力与研究能力的培养,对于工程能力与工程思维往往不刻意教学,而实验室的规模往往较小,在云的领域即使有所涉猎,也偏于简单使用。所以在学生阶段就对运维开发有深刻理解的小伙伴其实很少,真正招聘时愿意从事运维开发岗的人数也较少。但我想,这个岗位一定前景是广阔的。

良好的工程能力相当加分

容器云的DevOps岗位是一个比较偏工程的岗位,大多数时候工作内容比较“基础”,即不需要多么精妙的算法,不需要高深的数据结构。运维开发更关注的是从工程角度做好应用从开发、集成、测试、发布、运维的工程实践与落地。在此基础上,向上可以探索云原生的种种理念与实践;向下可以向基础设施、内核、网络等模块深入研发;横向可以探索云与多种业务场景的结合与赋能。

容器云的工作领域非常广阔,但这些都需要候选人有一定的工程能力,与工程实现的小小方法论。故在应聘过程中,工程能力与工程思维出色的候选人是很加分的。

请正确看待运维

在面试过程中,许多学生可能对“运维”有一定的偏见。比如认为运维就是机房里插拔网线,7*24在线维护服务器的网管;认为运维的工作枯燥无聊,重复度高,不高大上;认为“万般皆下品,唯有算法高”……

现在我们重新审视软件开发的流程:需求评审、架构设计、开发、集成、测试、发布、运维……良好的工程中每一项环节都必不可少,而开发知识软件工程的一大环节。DevOps 的目标正是加速软件交付效率,提升软件运行健康度。这个过程中依赖于开发人员对软件工程有一定的认识与了解,对开发与运维都有一定的基础。在“敏捷”、DevOps等词语越来越流行的今天,DevOps是开发人员不可忽视的技能。

所以小伙伴们大可以放下对运维的质疑与担心,首先运维远没有那么“可怕”与枯燥,再者容器云的岗位并不等于纯运维。

多多关注业界动态

“云原生”是一个较新的词语,其社区仍在蓬勃发展,其定义与也经历了若干调整与优化。蓬勃的社区催生了各种各样的上下游技术的持续发展,如 Infrustucture as Code, service mesh, serverless等等。

容器云的基础是运维开发,利器是容器与Kubernetes,愿景是云原生。若候选人对于云原生的生态与业界动态有一定的认识,相信不管对于自己的知识理解与储备,还是对于应聘与面试,都是非常亮眼的点。

总结

这是一篇概述性的心得分享,介绍了我认为应届生可能遇到的困境,与学生党当下的机遇,并提出了一些建议,如

  • 重视并夯实基础
  • 了解行业全貌,消除思维盲区
  • 开阔思路与视野
  • 规划职业生涯,勇于探索与试错

之后具体结合容器云领域,介绍了应聘容器云相关岗位的一些注意点,给出了一些知识储备与学习的建议。

那么讲完了所有的概念,从下一篇文章开始,我将针对容器云,由浅到深的带大家一步一步地完成一个云原生应用的开发与落地。

全部评论

相关推荐

05-30 15:29
佛山大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务