程序员怎么才能让自己走得更高、更远?
大学就像一个笼子,跑得快的人拖着笼子跑,跑得慢的人被笼子拖着跑,他们之间最大的差距,顶多只有笼子的长度那么大。但等到一毕业,笼门一打开,跑得快的人很快就把跑得慢的远远甩在后面。有人不到30岁就升到了阿里P8,有人35岁了还为拿个P7Offer在拼命。
为什么几乎同样的起点、差不多的资质,有些人在职场发展得这么好,一路顺风顺水,而有些人却总是觉得怀才不遇,领导不行?今天,我们就来聊一聊,程序员怎么才能让自己走得更高、更远?
话不多说,让我们正式开始今天的内容吧!
# 技术、业务、能力是立命之本
我觉得,不管哪个行业,混得好的人都要有两把刷子。对于程序员来说,我觉得这两把刷子包括技术、业务和能力这三方面。很多人担心出现35岁中年危机,觉得自己能干的事,刚毕业一两年的人也能干得了。我觉得这主要还是因为没有在这三个方面积累出竞争壁垒。
我觉得,技术方面的竞争壁垒主要来自,在一个细分技术领域长期、深入的积累。
如果要想在技术上形成壁垒,我们就要从事一些有技术难度、技术挑战的岗位,比如基础架构、中间件、数据库等偏底层的开发,又或者是人工智能算法等入行门槛比较高的细分领域。在这些领域,你需要较长时间的经验积累,才能成为这一领域的专家,别人无法在短期内超过你,这就是技术竞争壁垒。
对于大部分业务开发工程师来说,很多人平时都是使用框架、工具,翻译业务代码,工作没有太多技术含量,技术上可能很难形成竞争壁垒。这个时候,你也不用苦恼,我们在业务上也同样可以形成竞争壁垒。
实际上,技术驱动的公司很少,即便像Google这样公认的技术驱动的公司,里面90%的项目都是业务、产品驱动的。真正高精尖的技术也只集中在某一小撮项目中。你可能会说,Google的很多产品的用户、访问量都很高,这些高性能、高并发的要求不是很考验程序员的技术吗?实际上,这些有挑战的技术问题,都是比较有共性的,大部分都通过底层系统解决了,比如MapReduce、BigTable、GFS等。业务研发工程师只需要恰当地使用这些高精尖的系统来实现业务就可以了。
在业务驱动的项目中,特别是一些业务比较复杂的下项目,比如,金融系统、银行系统、财务系统、清结算系统、物流系统等,我们还可以积累一些业务壁垒。如果你之前的工作都是从事偏向业务系统的开发,靠技术只能面到阿里P7这个层级。如果想面到阿里的P8、P9,靠的就不仅仅只是技术了,还需要对某个业务的深入积累。实际上,很多领导之所以能做领导,不是技术牛逼,而是对业务熟悉。
不过,并不是所有的业务系统开发,业务都有足够的复杂度,可以让你积累竞争壁垒。对于技术没有太大挑战,业务也不复杂的项目开发,我们可以多积累自己的能力。
这里所说的能力,指的是成事能力、解决问题的能力。实际上,很多问题的解决,即便是技术问题的解决,靠的都不是技术,而是一个人最基本的解决问题的能力。这其中就包括分析总结能力、逻辑思维能力、沟通协调能力、自我驱动能力等等。
比起固定的技术和业务知识,这种成事能力、解决问题的能力,我觉得对于混职场来说可能更加重要。在职场中,职位越高,这种成事能力就越重要,毕竟企业最终还是看结果的,而不是看你技术有多好。
# 学历、项目、履历是入场门票
经常听人吐槽,面试造火箭,入职拧螺丝。也经常听人抱怨,有些公司太看重学历,因为学历拒掉了我,却招了一个技术比我差的前同事,仅仅因为他是985名校毕业。
现在,学IT的人越来越多,招聘市场也逐渐从卖家市场变成了买家市场。很多公司开始提高招人要求,不仅加大面试难度,为了提高招聘效率,还会在学历、过往是否有大公司经历等方面,先过滤掉一批候选人。
你可能会说,学历高的不一定技术好,学历低的也有技术很好的。你说得没错。但一般来讲,虽然都说做技术学历不重要,但好学校的学生对计算机基础知识掌握得更好,学习能力、逻辑思维更强,相对要聪明一些,而且在工作中,我们也发现,成绩好的同学往往在工作中表现出很强的执行力和快速交付能力,在工作中的表现普遍也更优秀。站在公司整体招聘的角度来说,通过学历来过滤候选人是一个比较高效的手段,毕竟公司也不在乎因此漏掉一两个优秀的候选人,或者错招一两个不优秀的候选人。
实际上,比起短短的1个小时的面试,我个人也更倾向于通过学历、项目(项目经历是否有技术难度)、履历(是否有知名公司的工作经历、以及职位高低),这些过去的能够证明能力的经历来判断一个候选人。特别是对于一些中高端的岗位,好的学历、项目、履历基本上有碾压性的优势。我自己做面试官多年,基本上在看完候选人的简历之后,对符不符合我们招聘要求,心里就有个八九不离十的判断了。在面试开始的前10分钟,我基本上已经决定要不要录用他了。后面的面试只是为了进一步证实自己刚刚的决定而已。
如果说技术、业务、能力是程序员的立命之本,它们决定了你能不能在职场这场比赛中胜出,那学历、项目、履历就是入场门票,决定了你可以选择哪个比赛赛道,是Google、Facebook,还是BAT,又或者是完全不知名的小公司。
所以,在夯实技术、业务、能力的同时,你也要学会“面向简历打工”“面向跳槽打工”,提前做一些职业规划,把自己的履历弄好看点,比如,学历太低的就去考个好点的学历,在公司内部努力去选择做一些有技术含量的项目,跳槽去一些知名点的互联网公司等等。
# 不要让职场软技能成为短板
在职场中,我常常听到有人抱怨说,旁边的同事明明技术一般,却升到很高的职位,而自己技术很好,却发展一般。实际上,怀才不遇大多数都是因为忽视了职场软技能。这些人的特点大多是性格耿直、脾气暴躁、眼里容不了沙子、斗天斗地斗空气。而且,大部分情况下,他们都会觉得自己做得很好,领导不识货,同事都没他强。
职场不是学校,影响你向上发展的因素很多,肯定不是单靠技术,所以,学生思维要不得。在上学的时候,学得好坏,一份试卷见分晓。要想成绩好,闷头学就行了,你也不需要什么团队合作。但是,毕业之后,技术的好坏、代码写得好坏、活干得好坏,就没有那么容易客观评价、量化评价了。所以,这就会出现你自己觉得工作做得很好,而领导却不这么认为的情况。
而且,技术好其实并不代表贡献多。我也见过很多技术好的人,比较爱自嗨,成天鼓捣些高精尖的技术。实际上,不管是从短期还是长期看,这些技术都没有给团队、公司带来收益。当然,我也并不是完全摒弃个人成长,让你完全奉献给公司。我只是觉得,作为员工,要学会跟公司共同成长。只有你的成长为公司的成长贡献了力量,为公司、为领导解决了问题,公司才愿意为你的付出买单,你才有升职加薪的机会。
总的来讲,要想职场混得好,一些必须的沟通、协作、总结汇报等软技能还是不能忽视的,当然,我也不是推崇,纯靠“耍手段”上位。我只是觉得,这方面起码不能成为你的短板,不要让这些非技术、非能力的因素,阻碍了你职场的发展。
# 课堂讨论
作为“前浪”的你,还有哪些经验、教训,可以分享给“后浪”,让“后浪”在职场发展上少走些弯路呢?又或者作为“后浪”的你,有哪些职场的疑惑、迷茫,想向“前浪”请教呢?
可以在留言区说一说。如果有收获,也欢迎你把今天的内容分享给你的朋友。
# 精选评论
点击查看
1.简历一塌糊涂路过。。。 2.起初都是一腔热血,但做好事不问前程。但选择真的更重要。
3.持续重构(60%项目代码),通过每个迭代将项目各个功能标准化,将黑盒功能重新梳理成白皮书。现在看来依旧觉得有点6,毕竟再做一次自己也没信心做到。但是这依旧被定位成输出不够。领导认为只有输出技术文章,引入新技术,去参与开源项目才算得上技术好。可是业务开发也分场景,特别是2b的业务,它没什么高并发高可用响应时间的诉求,但需求多,策略重。合理的项目质量比引入新技术重要。完善的文档加标准的代码结构以及合理的领域划分,方便运维,新需求迭代快,新人上手容易这些我觉得更重要。可是,没真正干过的人,没几个能理解个中难处,毕竟重构代码也不过是改改代码,是个开发都会,自然也就算不得技术好,顶多算砖搬得多。
4.我曾经多次拒绝做性能优化,导致领导私下找我,表示优化这个很简单不用担心做不到。然后就很尴尬,不做优化是因为我认为业务上不需要,所以不要轻易引入复杂度。奈何,有时候性能调优就是为了个指标。最终我也做了,方法也很简单,部分流程异步化,细分大事物等等。响应时间降低到原来的五六分之一。(但吞吐其实没增加多少,毕竟响应下去了,但单节点能承载的并行任务数也降低了)。虽然我尽量控制并发代码在业务代码的侵入,能基于spring异步接口的都基于spring写,但依旧觉得不舒服。因为心里清楚这份复杂性其实没必要。
5.凡事有度,别盲目。业务开发里面出基础架构师其实挺尴尬(看的不是智商,而是大家把时间用在哪里)。希望技术再透明点,业务开发得到善待~
说的真到位,句句扎心
作为一个被社会毒打过得年轻人,非常同意争哥的说法,以前跳槽的时候没有想过太多,只是单纯的看重薪资待遇了,而没有看重发展前景,一个好的公司的履历还是很重要的,还有就是争哥说的软技能也非常的重要,程序员的圈子确实比较单一,单纯,但是一定的软技能,沟通能力,协调能力也是必不可少的,需要好好学习才行,这里推荐几本书《软技能-代码之外的生存指南》,全书一行代码都没有,但是干货满满,还有《人性的弱点》这本书,教我们如何做人做事,值得好好读几遍~
争哥说的都对。不过对于“危机”,我觉得什么时候都存在。即便是刚毕业的学生也有危机,记得也有一部分学生说过,毕业即失业。中年危机,我觉得只是在年龄这个维度上放大了危机感。一个人要有目标,并且一直在往目标努力,我觉得可能就没有太强烈的危机感,而是有更强的饥饿感。对于招聘,我也有过几次校招和社招面试官的经历。对于招聘人员来说,争哥说的对技术业务能力的考量是没有错的。但是对于招聘人员来说如何在这三个方面平衡是考验一个面试人员水平的。对于毕业生(或者工作时间在一年之内的),我会主要考察知识(计算机专业知识),也就是基本功,不会在意做了多少项目经验。我觉得作为学生做了太多项目而忽视专业能力的学习,是本末倒置,离开学校,余生会有很多项目让你做的。对于有工作经验的,会注重项目和工作经验,特别是对做过项目的理解(业务)和解决方案(能力),因为有的候选人会写一些高大上但参与度不深的项目来丰富简历;对于有工作经验的人士,基础知识的考察主要是原理和实现方式的考察。基本就是二八法则(校招八是基础知识,二是经验;社招八是项目和工作经验,二是基础知识)。另外对于面试官来说,要对招聘岗位和要求有一定程度的理解,不是所有职位都是985211.我不会对候选人的学历有区别对待,只要是候选人,我一般都会同等对待,而且会对985211的候选人有更高一点的要求。面试中,尊重很重要,我曾经见过一个面试官说,“大专生也来面试”,语气中透露着一丝不屑,听到这句话,不管这个面试官水平如何,我第一印象是不愿意和这样的面试官成为同事。 所有的前浪都曾经是后浪,所有的后浪也终究会成为前浪。如果有困惑,就去通过行动寻找答案,如果热爱,就去拥抱一下现在和未来。
国企和私企的氛围是不一样的,有的私企比较开放,但国企总体比较……所以在国企一定要注意不能什么话都说,而且要学会自己充电,否则容易温水煮青蛙。
斗天斗地斗空气,画面即视感
我觉得你面试的前十分钟估计只是看下学历和专业基本就定下来了,至于后面的验证也只是走个过场,现在除了啊里对学历要求相比其它一线大厂要低点。至于面试者的技术和能力基本上无所谓,好学校里的学生技术怎么可能差呢?那你说的更高更远应该加个条件学历要过硬,你都说了这是入场券,虽然不想承认,但这就是实事。
技术和业务同样重要,需要两手抓两手都要硬,但是如果并没有在某个行业深耕很长时间。这时候业务方向如何选择呢?求争哥指点
第一句话就扎心了。即将35,正在为拿P7努力。
哈哈,原来,最后我们都变成了当年我们讨厌的
大实话,不上升到另外一个层次就要被淘汰