我是一个状态型选手,就像海潮,随着地月相对位置的变换涨潮退潮,我总是一段时间蹬蹬蹬像一个恐怖的工作狂,然后又进入一段时间的萎靡不振每天吃喝玩睡,吃喝玩睡够了以后(可能是够了,也可能是忧患意识起来了)又开始蹬蹬蹬蹬马不停蹄。
但是每一次的成魔都有立刻要完成的事,这次似乎没有太明确的目标。没有目标就是这一次疯魔的针对对象,作为一个没有太多社会经验工程经历仍在学校里摸鱼玩耍的我,该怎么应对研究生毕业以后的工作生活?我的研究生阶段才刚刚开始,我还有足够的时间为自己积累竞争优势,但是首要的是要明确一个较为具体的方向。说来惭愧,本科开始学信息安全,硕士继续在网安学院,但是我的安全知识并不多,不会挖洞不会逆向,反而着眼DL。
说实话,其实我以后不想做安全相关的工作,我希望具有安全知识能作为我在同样的技术人员中的一个优势,但不应成为我的日常工作。当然,站着说话不腰疼,如果最后遇到了安全相关的职位难道我会不去吗?我会去的!(一秒真香)
说多了,为了应对未知的焦虑,我开始规划自己。我开始学习个人理财(一辈子的码农是需要用爱发电的,而我喜欢养狗遛狗喝茶睡午觉),规划了爬虫到数据工程的一系列学习路线,开始学习DL课程,by the way,现在恰逢期末哦。
所以我有时候也挺佩服我自己的,真的很能折腾,很会挑时间。但是我尚存有一咪咪的理智!先看一下这个短篇的立身高处的程序员职业规划吧!简单记录一些笔记,供日后的自己回顾逝去的时光。
书是在亚马逊买的电子书,0.99,四舍五入就是一块钱吧,感兴趣的也可以买来看看,现在一块钱都买不到一瓶怡宝了好吧?
换工作不是一场说走就走的旅行,而是一个深思熟虑的结果,是一项复杂的系统工程。作者建议每次换工作花一到三个月(业余时间)来准备,不要嫌麻烦,只要试一次就会觉得这是值得的。
全书分为三个部分:第一部分介绍原理,第二部分介绍准备工作,第三部分介绍具体操作。
程序员是一种逻辑动物,只有当他们理解求职到底是一种什么行为以后,才能做出有意义的行动。
把人才作为一类商品来看待。
使用价值直白地说就是人才如何直接或间接地为公司挣钱。所以要关注的是公司眼里我具有怎样的价值,而不是我到底都会什么。(所谓对口)
供需是可以调整的,技巧在于选择更好的细分市场。因为需求的多样性是存在的,所以如果你能在一个大的需求中切入一个需大于求的细分市场,那么你就能得到远高于其他人的回报。
比如普通运维和云计算运维的薪资差异是非常大的。一个普通的运维要变成云计算运维需要补充的知识却并不是特别多。所以只要合理安排好自己的职业规划,比如以相对较低的薪资到类似新浪云这样的地方工作一到两年,你的能力和交换价值都会大幅度提升。(对于我来说可能就等同于第一份工作很重要吧)
当人才市场很小的时候,信息是透明的。因为很容易了解到各自的情况。(完蛋,此处的透明可能和我理解的透明——体系结构中的“透明”指屏蔽,即“看不见”。不太一样啊!)
但当信息量变大后,你就会发现虽然整个市场很大,但只有你接触到的才对你有意义。
要想拿到足够好的薪资和获得足够多的机会,我们要学会和信息不对称进行抗争。
跳槽不是为了追求价值最大化:工作是生活的一部分,按工作8小时每天计算,工作占据了人生的三分之一,不能太不开心了;职业的不可逆性,职业的选择每一步都是好几年时光,所以要着眼未来发展。
跳槽不是找工作:它是换工作,是有成本的。(刚毕业就是“找工作”啦)跳槽之前一定要考虑好自己的付出和收益,权衡好得失,没事别裸辞。
跳槽不是加薪的砝码:以跳槽作为砝码谈加薪只会让主管对你丧失信任。不管加不加薪,主管都会开始为你的离职作准备(可能是再招一个的意思,所以就算用加薪挽留也最好不要留下)
指的是对现在公司很满意,就是对钱不是很满意:
工作最重要的目的是积累金钱。(“积累”是认真的吗?)
挣钱的四种模式:帮别人挣钱(打工);为自己挣钱(SOHO);雇别人挣钱(企业主);让钱自己挣钱(投资)。显然第一种的风险系数和门槛都是最低的。
跳槽其实是打工挣钱形态下,我们进行自我调节的方式,通过合理地跳槽,我们可以寻找到市场需求和自我实现的最佳匹配,从而在金钱和成长上双丰收。
“市场需求”描述了企业渴求的员工,“自我实现”描述了你想要的生活;当它们重合到一起,梦想就照进了现实。这会带给你几年非常愉快的工作生活,但随着我们不断成长,职位和能力可能出现不匹配,这时候我们又需要通过跳槽来再次调节。
永远不要因为“现在很差”而跳槽,要因为“未来更好”而跳槽。只有这样才能保证你一直往上走。
时间并不是用来衡量是否应该跳槽的指标,能力才是。假设我们的目标是CTO,我们从CTO往下一层层画出节点:应届生–>初级程序员–>小组主管–>部门经理–>总监–>CTO。
然后我们会给每一个节点设置一个达标能力和一个参考时间。当我们的能力已经开始胜任下一个节点的工作时,我们就会开始寻找相关机会,最理想的是在当前公司进入下一节点。(如果由于人为因素不太可能,则考虑跳槽)
有些时候,我们也会根据具体情况对职业线做出调整,比如当你小组主管做得很出色,但部门经理这个节点却很难达到时,我们可以这么走:应届生–>初级程序员–>小组主管–>初创公司CTO–>B轮公司CTO–>上市公司CTO。
但不管再怎么调整,我们自己头脑里面要有清晰的目标。我们总是先在风险最小的路径(比如当前公司)寻求成长,不成功时再考虑其他的路径。
你该去什么样的公司,做什么样的事情、拿多少钱,都取决于一个问题:你想成为什么样的人。工作只是人生的一部分,是用来支撑你人生价值的核心框架之一。在你自己没有想明白的时候,没有人能帮你。
没有人生目标的同学,在此有两个建议:
《穷爸爸富爸爸》从现金流将人类分到了四个象限。
这四个象限分别描述了不同的挣钱方式,这里我们从程序员的角度来进行解读。
E象限是雇员象限,一般来讲,我们刚工作时都在这个象限里面。这里是风险最小的地方。
程序员的世界是靠实力说话的,所以如果你刚开始工作,那么你刚刚进入成长期,不顾一切地学好用好各种技术就行,不要想太多。当你工作了两到三年,成长成为资深程序员后,你才开始有资本选择路线。
E象限有两种典型的发展路线,专家线和管理线。专家线主要和机器打交道,而管理线主要和人打交道。专家线分析机器和程序,优化性能和数据;而管理线控制资源和进度,随时要和下属谈心、向上级汇报。
在E象限,有一批幸运儿通过公司的期权和股票获得了足够多的财富,比如阿里核心员工们。但公司上市这种情况并不太多见,所以更多的人主要还是靠月薪在获取收入。
E象限的薪资通常是有天花板的,很多公司总监的月薪也就3W到5W,扣掉税和每月花销,其实攒不了太多钱。如果公司一直不上市,那么回报就不会太高。于是有一部分人就选择了S象限,为自己打工,这个路线我叫它小老板线。
B象限是创业象限,玩法和S象限很不一样,它是以规模化为前提的。投资、上市和出售是这个象限的关键词。
A轮以前的公司,主要在寻找商业模式,会频繁地变更需求,对开发速度要求更高,这时候CTO只要能敏捷开发产品就OK;A轮以后的公司,着力于规模化,会有大量的推广,可能在某些时间点遭遇高并发,同时技术人员、设备会迅速增加,这时候CTO需要考虑业务的高可用,还要能处理好团队、资源的管理工作。这时候CTO需要迅速地跟上公司的发展速度,否则投资方会建议从大公司挖一个,平心而论,这也是没有办法的事情。
钱多了以后,让钱保值增值却是你的新课题。于是很多人开始做天使投资,其实技术人做投资存在一定优势,因为可以很好地规避掉产品的技术风险。正因为如此,很多投资机构也很喜欢有技术创业背景的同学,所以投资行业的程序员也开始多了起来。
假设大学毕业以后,你已经在一家建站公司工作了两年,已经熟悉了门户、论坛、商城等常见网站的开发,接下来你希望能使自己编写的代码更规范、更优雅、能承受更多压力,所以你希望下一家公司有较大的业务量、成熟的技术体系和NB的技术团队。
做市场调研,把符合你标准的公司一个个列出来,没在你所在的城市也没有关系。去他们的官方网站,从你想要的招聘启事复制下来,放到数据库里边。样本量稍微大点,至少50份以上吧,然后分词,按词频降序列出来。很快你就可以了解到这些公司对这个职位的要求是什么。
定性分析比较简单,找一下你想要去的公司的工程师,吃个饭聊聊天就能知道基本情况了。
在做以上分析的时候一定要记住一件事情,你不是要做一份行业调查报告,你只需要着重了解你关心的情况就可以了。
当你了解了市场的需求后,就要开始和自己的能力进行匹配,看看哪些地方是你的强项,这些在写简历的时候要重点突出;哪些是自己的弱项,争取在准备期强化它,把自己提升到一个新的层次。两个建议:
我需要为这次求职付出哪些成本,比如放弃原来公司的期权;学习哪些东西,比如在一个月内学会Swift。如果我成功入职这家公司,我会有哪些收益。如果我求职未成功,哪些投入可以在对其他公司的求职上重用,哪些不能,我是否承受得起。
在求职过程中,你还可以随时对画布进行更新,来判断要不要接受某家公司的offer。
在大公司工作的同学经常有一种错觉,就是把公司的能量当作自己的能力,很多时候,你能把事情做好,别人愿意和你合作,不是因为你个人,而是因为你供职的这家公司。
对于技术人员,下面这个列表是我建议你要有的:
我们走过了程序开发的这千里长征,我们一定要坚持走完分享这最后一公里。为自己的项目写概要说明文档,为新手用户写Quick start,将项目提交到各个技术咨询站,为感兴趣的同学提供讨论和交流的场所。
充分的交流不但会让你的影响力扩大,更会聚集各种有意义的想法,往往让你喜出望外,获得新的启示。
架构能力和写作能力一样,不是能一蹴而就的东西。在我看来,软件本质上是一种能力,是封装好的、可高速、廉价、重复执行的能力。
DRY是Don’t Repeat Yourself的缩写,翻译过来就是“不做重复的事”。
这正式一个逼近软件本质的原则,它指导我们把经常使用的功能抽象成库,把重复出现的代码重构为可重用的框架模块。如果你用DRY来要求自己,很快你就会发现自己抽象和架构能力的飙升。
我们活在现实世界,所以我们不可能把所有的事情都给自动化了。但我们不能放弃,不要二元思维,除了手动和自动,我们还可以半自动化——让机器做完所有繁杂的常规操作,人类来处理需要智慧的那一点点工作就好,这也能极大的提升工作效率。
正交性的意思是,功能和功能之间应该尽可能不互相干扰。只有这样,我们才能有效地控制每个部分的行为。所以功能之间的依赖尽可能少,如果有,规则一定要明确,不要试图去做一些自作聪明的事。
API其实也是强化正交性的利器,它通过接口规范确定了互不影响的功能,又通过接口协议隐藏了后端实现,去除了对实现技术的依赖性。
操作篇此处省略(对具体内容感兴趣的话还是推荐自己去看一看的,文章不长,很快就能看完)