新公司入职一个多星期。简述一下这一次求职的经历。
萌生跳槽的想法是因为和不同的朋友吃饭的时候谈到工作,没有比较就没有伤害,越聊越觉得应该换。
原单位的弱点在于:
- 薪水低。
- 公司福利有限。
- 是外包公司,实际工作主要在客户公司。
原单位的优势在于:
- 公司的人际环境不错,大家相处比较融洽。
- 有一些接受内部培训的机会。
- 公司有的项目接触到嵌入式各个方面。
但是,一旦我进入一个项目,去到客户公司工作的时候,我自己公司能够给我提供的东西就变得非常有限。随着自己之前的同事不断离职,又没有太多机会认识新的同事,久而久之,就会觉得自己的归属感变得很弱。
而同时,在客户的公司虽然也能受到比较好的对待,但终究感觉不是他们中的一员,自知随时可能离开,所以也没有很强的归属感。
这样两边不着的时间长了,就会感到一种悬浮的状态。
总的来说,推动我跳槽有三个深层因素:
首先是待遇。起薪不高也就罢了,涨薪也实在是非常有限,经济上没有任何促使我留下来的动力。
其次是外包本身。除了我刚刚说的悬浮状态以外,外包的工作往往不会涉及一个公司的核心竞争力,这就注定这个岗位不太可能受到客户公司最大的重视,因为作为客户公司,它也做好了准备这个人随时可能走。
第三,是我之前做的项目本身在我看来不但重复性非常大,而且我只有一个人做,没有更厉害的人带我。虽然这样看起来拥有更大的自由度,但是我在这个状态也很难进步,很难学到什么是更好更正确的实现方法。时间长了不但自己做起来没有动力,更是会有一种危机感,如果不回到一些核心的开发岗位上,自己的能力很快就会退化。
这些因素最终促使我萌生跳槽的想法。
接下来就是怎么找工作以及找什么工作。
早在我萌生跳槽想法的一年前(2020年夏天),在和一个前同事聊天的时候他就向我提过他们公司。鉴于我当时的项目开始四个月,还没有走上正轨,我觉得如果我现在离职,那这半年可能基本啥也没干成,所以就没有考虑。
于是在我21年底决定跳槽的时候,首先就找了这个同事和他再聊聊他现在的公司的情况。他表示对公司环境和工作情况还是比较满意的。但是法国人说话一般比较注意,不会用特别安利的口吻来表达,而是处处透露出那种:这只是我个人的看法,完全不代表你可能面对的情况,你一定要谨慎选择。
随后,我发现我公司的一个manager,也是我这位前同事的manager被他挖角去了这家新公司。这为我提供了另一层保障——一位经验丰富的manager认可了这家公司。
再然后,我发现我在客户公司有一个同事,他就是从这家公司跳出来的。和他交流之后,他表示这家公司的C语言水平非常高,虽然他做的测试岗位可能不那么尽如人意。而我想要面试的职位正好是C语言的开发,所以这又是一层背书。
至此,我已经把这家公司作为我的首要目标。
圣诞元旦双节假期期间我开始复习C语言和其他的基础知识。复习大概有三个角度:
- 在电子书平台上找到C语言面试相关的书籍(程序员面试宝典之类)看基础知识
- 在网上找C语言的测试题(选择题)
- 在Codinggame和Codewar上写一些编程题
由于我之前没有系统学过算法,还恶补了一下基本的数据结构(在B站上买了一个期末考试临时抱佛脚的视频……发现其实帮助不大,大学期末考不太注重实际的东西,倒是概念的边边角角要搞清楚)。最终我数据结构的学习方式是看动图和Youtube上的短讲解。
经过这些准备之后,我在2022年初收假之后就向我前同时递交了简历。
内推或许是找工作最好的方式。入职培训的时候,HR说,内推最后入职的概率是40%,但是海投入职的概率是0.2%……
内推的好处是可以通过熟人充分了解公司的一些内情,比如工作环境,大家的工作状态等等,这些东西往往在面试上不太容易表现出来。从公司的方面,也可以通过私下的途径,了解应聘者是个什么样的人——只是一个熟人的熟人?或者一起共事过等等。
我和我的前同事之前一起做过一年的项目,他对我非常了解,我相信他是替我说了好话的。
面试一共三轮。
第一轮面试是和HR面试。主要的内容是互相介绍,他向我介绍他们公司,我向他介绍我自己的经历。
我事先做了功课,看了他们的网站,所以对于他说的东西,我基本都已经有了了解。而在自我介绍的时候,我也着重从我之前做C开发的经历出发,坦然说了自己为什么不喜欢现在的工作,以及我通过自己前同事的途径了解到这家公司等等。
出乎我意外的是他直接问了我当时的薪水,我也就如实相告了,他告诉了我一个他心目中我应该拿到的“市场价”。最后我实际拿到的就是他报的这个区间的最左边……
第一轮面试比较顺利,和HR一对一沟通我一向不怵。在我看来面试的过程是一个互相考核的过程,不存在谁在上谁在下。我会像对待一个未来的同事一样和他交流,他也应该用这样的态度和我交流,如此我们彼此都能感到比较舒适。如果HR是来给我出难题的,那我不去这家公司也罢。
第一轮面试结束之后,HR发来了一道编程题。具体内容我不能说,但是算是写一个工具类的程序。里面涉及了数据结构算法,文件的操作,当然还有指针、数组、字符串处理等等C语言最核心的内容。
这个考核没有严格的时间限制,题干里写了大约是4个小时的工作量,意思是如果你花了太长的时间,要么是你能力实在不足,要么是你把题目理解错了。我实际花了一个晚上一个白天,大概8个小时。
这种考核方式的好处是非常接近实际的工作。它不限制你使用Stackoverflow,不限制你时间,你可以按照自己的节奏来编程。
更重要的是,它除了考察最基本的C语言基础以外,还考验你会不会使用Git来管理自己的代码?会不会用如Python这样的工具来写简单的测试代码?会不会使用Makefile等编译的工具?如何组织程序结构?代码是否可读性强?等等一些在实际工作中非常重要,但在普通面试考核中很难考察到的方面。
对于这个笔试的形式,我感到非常满意。在做的过程中,我先用一种算法写出了一个版本,但是我迅速发现这个算法的效率低下,所以我又换了个算法重写了一个版本,所以多花了一些时间。我用了Makefile,用Git管理了我两个版本的代码,用Python写了测试程序,基本上做到了自己能做到的最好。最后在Readme里我还写了我代码可以改进的空间,以及其他的可能更好的实现方法。
事实上,最后我写下的这些东西可能是最重要的。
来到了技术面阶段。技术面我的是两个拥有15年经验以上的架构师,算是公司最资深的技术大牛。