如果我告诉你,程序员这条路很难走,你还要坚持走下去吗

可能很多人都觉得程序员是个高薪行业,动不动就听见谁月薪几万几万,心里羡慕不已。回头看自己每个月手里可怜的工资条,心里更是烦躁不已,于是乎下定决心一定要像人家一样,月薪几万。但是实际上,高薪程序员并不像人们想象中的那么轻松。

许多程序员自称码农,因为每天事情总也做不完,而这些工作也没有给自己带来职业上的提升,总在原地打转,自己的工作似乎随时可被新人替换,可有可无。于是,年轻些的考虑着转管理或者转行,年纪大些的则被所谓的40岁危机困扰焦虑着。

有些程序员工作高效,能力出众,每当机会来临时总能获得职位上升,收入迅速的提高,个人价值的提升又从精神上给自己带来满足感,常常斗志昂扬,而这样能解决复杂问题的程序员才叫高薪程序员,也叫工程师。

一、职场软技能

事实上,互联网行业的项目需求从来不是静态的,项目是动态的、永远在不停迭代,所以即使你能力再好效率再高,也不可能让你处在空档期,所以,相比其他行业程序员们总是很容易处于忙忙碌碌的状态中。另一方面,项目里哪怕没有新功能了程序员自身也有很大的欲望去优化、重构代码,还是忙忙碌碌。但是,到底客户的问题、行业的痛点有没有真正解决?项目给公司带来多少收益?我手头的工作对公司下一步的发展有何意义?这些通常不在程序员们的思考范围:这与我何干?我是专业写代码的,这些应该由老板、产品经理、运营、销售、其他业务部门去考虑,我只需要精益求精把代码写好写稳定就可以了,我预留了许多扩展接口,到时公司需要的话去扩展模块就行了,我何必要知道与我工作无关的事?这个想法其实是让许多程序员始终停留在码农阶段,与那些卓越的工程师同等辛苦,但待遇层次总是相差甚远的罪魁祸首。

吴军老师在《见识》一书中把工程师定义为5个等级,相邻的等级间会有10倍的差距,而第五级工程师以下其实就是码农。

实际上,能够到达第五级,就已经从码农提升为工程师了。比如,现在有一个任务需要实现一个功能子系统,一个第五级工程师能够与产品经理深入挖掘需求及其到底是否解决了问题,能够用算法建模解决现实中的问题,能够独立跨部门沟通获取所需的资源及协调其他工程师的帮助,能够正确的使用各种开源组件保质保量不重复造轮子,能够解决开发过程中出现的各种坑,按时交付出高质量的产品,这才是一个合格的第五级工程师了。码农离第五级工程师到底有多远呢?大家可以观察下身周,码农往往沟通技巧欠缺,不愿深入理解需求的意义,不愿深入研究某个技术或者框架的意义,或者只是深入研究某些语法糖却不考虑维护代价,喜欢造轮子,只要接手别人的工作先不愿精读代码而是想着按自己最熟悉的方式重构,做到一半时各种困难下开始退缩求助,于是交付时不断的延期再延期。。。

成为一个合格的第五级工程师,需要哪些条件呢?

1、要有欲望成为高阶工程师!

无欲则刚,如果内心就不大想成为一个高级工程师,那么肯定不愿付出更多的努力,肯定不会主动的加班,也不会在不加班的时候脑袋里还在想着问题和项目上的事,而加班或者正常上班时敷衍的时间比例很高。从低一级迈向高一级时,若不愿意付出比同级人更多的努力,又谈何升级呢?在任何领域,努力一定是成功的必要条件。

2、懂得做减法的学问。

事务性的工作总是非常多的,同时也会接到很多需求功能以及测试提交的bug,还有兴趣爱好呢?!很多想看的演唱会、连续剧、电影等着你,还有许多朋友聚会应酬要参加,还有朋友圈要刷刷,微博大V们的文章要读读,股票要炒炒,理财要学学,游戏要玩玩,所以,忙忙碌碌里职业技能没有得到一点增长。

或者你效率奇高,但你要做的事太多了,效率不等于效能,效能是指完成的事情*事情的意义。事情要做到100%完成,而且必须是重要的事。既然你想成为高阶工程师,那么请把不重要的事从你一天的计划中移除吧。就像上图中吴军老师所说的,每升级到下一级,你的收入都将呈现10倍上涨的趋势,这收益远远大于你去做自己并不擅长的炒股所获取的收益(长期来看)。而所谓的应酬、各类资讯、个人爱好,并不是只要清楚的认识到自己想要什么就能够正确的做减法,这需要你的认知升级。

而在leader分配下来的任务里,也需要你准确的判断出优先级,一定要先把最重要的事百分百的完成。这需要你与leader间密切沟通,因为技术管理者所掌握的信息量远大于你,而且信息在时刻变化着,他那里的信息及时度也超过你,唯有从你的上级那里才能快速的了解到工作的优先级。这也需要与产品经理、上下游部门间密切沟通,这样你才能准确的了解到你的工作对别人的意义,这也有助于你判断优先级。

总之,做减法是一门学问。

3、有效的做到10000小时定律。

一万小时定律是作家格拉德威尔在《异类》一书中指出的定律。“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。”他将此称为“一万小时定律”。要成为某个领域的专家,需要10000小时,按比例计算就是:如果每天工作八个小时,一周工作五天,那么成为一个领域的专家至少需要五年。这就是一万小时定律。

显然,并不是任何人在一个领域工作五年就能成为大师的。有效的做到这一万小时的关键是,这一次的努力请最大程度的复用上一次努力的结果!例如当下许多互联网从业者一年就跳槽一次,先不谈是不是应该跳槽(如果只是想通过跳槽涨薪,而不是原公司没有新的位置带给自己职业发展,那就有问题了),首先你能感觉到跳槽之后是在最大程度的复用上一家公司里自己的努力吗?如果一切是在从头开始,包括新的开发工具、新的技术栈、新的业务场景、新的产业链、新的合作关系、新的同事圈子等,那么很显然十万小时也不够成为专家的。

或者从另一个角度,有些人经常换工具、框架、编程语言,如果你能够在学新技术时,始终感觉到与自己熟悉的技术一一对应,基于此能够轻易的举一反三,那么这就是在高效的复用上一次的努力。反之,或者你上一个技术还学得不到家,换了新技术后很难敏感的发现共通性,这就很糟糕。

4、抓住关键节点。

当我们手头有许多小功能,或者与许多团队有交互时,往往经常被开会、被沟通,事情也又杂又多。此时,务必把手头上的事在分好优先级的基础上,确认每件工作的几个关键节点:完成时间点,中期交付或者需要他人交付产品、文档给你的时间点,需要协调其他人启动的时间点等等。抓住了这些时间点,往往一头乱麻的事就自然理清了。当我们的时间非常碎片化时,一定要尽力抽出大块整块的时间,这能让我们有时间思考,而且减少了任务切换的成本,而这依赖于很好的抓住关键节点。

5、常识的重要性。

一个有志向的农民和一个航空航天专业的毕业生都在做飞机,其最大的不同在于常识。对于不同的程序员来说,常识并不相同。我有一些同事本不是计算机专业,有些还是先做了几年其他行业再转过来做前端程序员。这样,如算法复杂度、网络模型等计算机科学体系里的基础知识对于他们就不再是常识,而常识通常是将事情做到50%程度的关键。常识的缺失会导致与同级程序员相比做事情事倍功半,这从长期来看一定会让你早早的触及职业天花板,而补足常识的缺失相较起来还是比较容易的(毕竟这本不是什么尖端知识),但许多人长年不愿在此下功夫。

6、有后劲儿。

有些人工作年限越久,竞争力越强,职业上升空间很大,反例其实更多,而这种有无“后劲”在我看来其实关键在于有没有科学的职场做事方法。比如习惯做乙方的外包程序员,转到甲方开始做产品时,还是习惯于把产品当成别人家的孩子,缺乏一种主人翁的精神,而在任何公司做任何产品,如果没有一种把自己的产品当孩子的感觉,就很容易向其他人表现出喜欢推诿、不肯担责任的特点,而缺乏主动精神往往导致项目前期准备工作不足,后期疲于奔命。没有主人翁精神,往往对整个研发链条自己这块以外的部分不愿意了解,这样没有办法管理好你的上游和下游,最终导致自己的工作困难重重,难出成绩。

对自己的产品有主人翁精神,会让自己保有一种使命感,进而相对更敬业、更有激情,而这对团队是有正向激励作用的。而且,有这种精神后,往往会想办法把工作流程标准化,把知识分享给团队同事以提升团队的作战能力,进而让产品更优秀。自己的工作有一点提升,与同时带动其他同事有一点提升,这是有量级差别的。当有晋升机会时,主管们自然更偏爱把机会给这样的同事。

7、如何提升

关于这个问题,身边的很多朋友都有问过我,心理学上有这样一个词,叫“花盆效应”,指的是人如果在舒适的“花盆”中待久了,就会不思进取、安于现状。当你对现状心满意足,日复一日地去做着同样的事情,不再将时间花在提升自己,那么你的成长见识,将永远停留在原来的那块区域里。
曾看到这样一句话:一个人老去的标志,绝不是老成稳重、沉默寡言,而是不肯再尝试,不肯再容许自己置身不熟悉的境地。当你停止了学习、固步自封,将自己囚禁在得过且过的牢笼中,那么你已经朝平庸迈进了一大步。

说到这里,也给大家推荐一个架构交流学习群:650385180,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,相信对于已经工作和遇到技术瓶颈的码友,在这个群里会有你需要的内容。

二、对于年龄问题的思考

关于大龄程序员的发展问题绝对是程序员话题讨论榜单上的「定海神针」之一,无论是刚工作的程序员还是比较资深的程序员,对于所谓的「中年危机」十分警惕和关心。

最近看到有人在论坛上抱怨,给他推荐机会的猎头同学告知他,大部分的互联网公司不会招聘 32 岁以上的纯开发。关于这个问题,offer 君有些市场洞察忍不住分享给大家:

首先,公司是不是不招大龄纯开发?

是,大龄程序员找纯技术方向的工作挺难的,但并不是没有。

那么,为什么?

我们从目标倒推,不难理解背后公司的本质,公司认为我们给了你 P7 及以上的评级,公司希望你能够提供更多的价值。的确,纯技术的进步也是这种价值的一种体现;但但凡经历过晋升的工程师都知道,在大部分以业务为导向的公司里,你从 P7 及以上往上升他们更看重的是你能够为业务提供什么样显著的增量价值。

说白了就是,32+ 岁以上的程序员,如果不能在 title 上有所进步,比如从资深程序员进阶到架构师,那么市场会直白的告诉你,你想要追逐更高薪的工作很难。

说到这里,基本回答了问题:为什么很多公司都不招大龄码农。

回到开头,我们有提到,这些工作并不是没有,那么这些工作都给了什么样的「大龄码农」呢?

追求技术导向的大龄码农有哪些选择?

寻找技术导向公司、GEEK 一点的岗位,并且成功入职的,工作5年及以上的码农中,大部分有两种选择:

1)降薪、平薪跳槽加入下一家公司;

2)进阶成为架构师、首席架构师。

三、程序员要考虑的那些事

1、价值论

在公司内你的收入可能和你牛不牛没关系,而和你能为雇主提供多少价值有关。如果你在一家建做网站的公司上班,精通机器学习和编译原理的你可能没有会JS写出完美动画的同学收入高。

所以选择适合你能力的最有价值赛道很重要,不仅有利于你能力的发挥,也能让你获取丰厚的收入汇报。正如古典老师说的职场赛道理论,选择不同的赛道你最终的成就也不同,选择做汽车还是飞机,你在单位时间内能达到的距离也大不相同。

2、供需

注意培养自己技能的稀缺性。

3、跳槽到底是为了什么

永远不要因为「现在很差」而跳槽,要因为「未来更好」而跳槽。只有这样才能保证你一直往上走。

如果你工作最重要的目的是挣钱,那你要知道挣钱这件事,至少有四种形式:帮别人挣钱(打工);为自己挣钱(SOHO);雇别人挣钱(企业主);让钱自己挣钱(投资)。

你需要知道衡量挣钱与否不应该只看年薪而要看时薪,一个人的时间有限,想办法提高自己的时薪才是硬道理。

4、开始你的开源项目

比起技术能力,做好开源项目更多的是要【来自真实的需求】和【持续更新的能力】。

找自己项目中遇到的费时小细节做好,然后开源就可以了。比如iScroll这个项目,它其实只是处理滚动条的小Tip而已,技术上没特别的难度,代码量也不大,但由于大家都不想在这种细节上花太多时间,反而让iScroll大规模流行,最后苹果和微软甚至雇佣过它的作者做兼职。

5、提升架构能力

DRY不做重复的事,把常用的功能抽象成库,把重复的代码重构为可重用的框架模块,坚持这样做,你会发现自己抽象和架构能力飙升。

保持功能正交性,【功能和功能之间尽可能的不相互干扰】,尽可能的减少功能间的依赖,如果有,规则一定要明确。

总之,个人职业规划是每个程序员都要经常考虑、认真对待的事。尤其是哪些长期得不到发展、迷茫焦虑的程序员更需要做好这些事。因为你的未来你做主,你的未来你负责!

四、一些感悟

最后说一下作为大龄程序员的感悟,在这里我想对比我年轻一些的程序员分享一下几点,不一定对,但我是说的实话。

1,永远不要在×××逸的环境下呆太久,就算没事做,也要找点事情做,要知道机器不动也会锈的。

2,程序员,能单靠技术,并且最后过的很牛逼的,少之又少,因为你并不比别人聪明多少,也不比别人努力多少,技术又能牛逼到哪里去?所以,除了开发,多关心下开发之外的东西。但是,不代表可以放弃技术,你可以不太追求技术的深度,但一定要追求技术的广度,不然就算到了一定的位置,吹牛逼都不知道吹什么!

3,一定要有自己的想法,不管你在什么样的环境。虽然由于历史等诸多原因,你并不一定有能力改变它,但至少分得清对错。一个没有自己想法的人,只能算是一个普通劳动力而已,随着科技的进步,最终可能会被人工智能所代替。

4,每个人都有缺点,一定要分得清哪些是性格缺陷,哪些是人格缺陷。可以做缺性格的事,但绝对不要做缺人格的事,不然你在职场中,不会有交心的朋友。

5,不要整天想着IT做不了多久了,干两年卖烧饼赚钱去,在你没有一个完整的计划之前,做本行是你唯一能做相对体面的工作。家里有钱有背景的除外。

6,人要有梦想,就算没有大的梦想,先实现一个小目标也行,看看人家王健林。建议是能量化的目标,举个栗子,“我明天要早起”,这不算个目标,顶多算是梦想。“我明天早上5点起床”,这才是个目标。

7。如果说青春是你挽不回的水的话,时间也是。

原文地址:http://blog.51cto.com/13676067/2123337

时间: 2024-10-14 08:49:45

如果我告诉你,程序员这条路很难走,你还要坚持走下去吗的相关文章

我愿在程序员这条路越走越远

今天偶尔和朋友谈起,他对于我选择IT表示很是惊讶,因为IT和我以前学的专业完全不对口.他还说程序猿应该都是比较闷骚的人,本想反驳一句,但想想应该说的没差.因为我的第一感觉也是这样的. 大概是对于新鲜事物的求知欲,刚刚接触就被这神奇的一门语言所吸引.输入一些字符串就能产生各种指令,真是太新鲜了. 以前作为使用者,对这些方便人类.促使人类进步的科技,总是爱不释手,手机.电脑.游戏,我们能从中体会到快乐,这些都是靠那些开发者.每一样东西的创造都是不易的,看似简单的东西,也许就是别人一辈子的心血.程序猿

《菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师》

<菜鸟程序员成长之路:从技术小白到阿里巴巴Java工程师> 国庆节快乐!一年一度长度排第二的假期终于来了. 难得有十一长假,作者也想要休息几天啦. 不管你是选择出门玩,还是在公司加班,在学校复习,都希望你过好这个长假. 没有出去玩的也不用羡慕别人,利用这段时间充充电,不比去旅游看人头要好的多吗? 最近终于把我的原创文章整理成一本电子书了,趁着国庆开始之前发布出来,希望对你有所帮助. 这本电子书整理了我过去一年时间里在微信公众号[黄小斜]里创作的文章,包括Java学习.求职面试.成长心得.感悟思

我不是个内向的程序员,我只是很忙(转)

经在这待了好一阵了. 没错,现在我记起来了.这是公司同事的聚会,是Dan邀请我来的.是有人过40岁生日,也许是50.我记不清了.Dan是个不错的人,但我们的性格大相径庭,他是个话痨.估计他以前是卖保险的. 还好,在这里,我不需要穿西装.而且也不需要穿的像电梯旁边的那个傻冒那样.真的,为什么要在Party上穿连帽衣呢? 不过,谁会在意呢.他已经按了电梯,所以他很可能打算出去.哦,不,老弟,别在用iPhone看Facebook了,电梯门就要关了.灯灭了,你错过了这趟.哈哈,你就是个傻冒,你- 哇噢.

程序员修炼之路

0.前言:在路上,再上路 在前言<程序员修炼之路-(0)前言:在路上, 再上路>中已经对知识体系进行了梳理,主要分为问题定义.算法与数据结构.系统平台API.编程语言实现.代码设计.测试验证等等.目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分.其他部分之前零零散散有所涉及,之后再慢慢补充. 1.计算机数学 离散数学与具体数学. 2.算法分析设计 对于这一部分的内容编排,主要以<算法设计与分析基础>.<算法>以及LeetCode算法题中的问题分类为横向,以&

一个迷茫并且不合格的程序员,敢问路在何方

我的人生是这样的. 出生在农村,从小我特别听话,家里人不让干什么就不干什么.拿了很多三好学生.妈妈说不能游泳,我就看小伙伴们游.从来不知道创新是什么,只知道听别人的,别人好就好,生怕别人生气...一直到初中我都很听话.也不然我做家务,我爸是个小学老师,只要他觉得没意义的事情,他不然让我做,看NBA没意义不让看,听歌没意义,不让听,要听英语.打乒乓球没意义.但我打篮球不介意就是了.所以我除了游戏就是读书.而且课本上的书,什么名著之类的从来没看过,所以我感觉我知识面特别窄. 直到高中学会了上网,那时

转载---程序员发展之路

今天看到一篇写得挺不错的文章,转载过来收藏起来. 从我做小程序员开始,就从未间断的在论坛看到有人在问程序员的出路在哪里,其实我很能理解这些人的想法,在行业做了几年,有些感想跟大家随便聊聊. 俗话说,365行,行行出状元,此话也适用于IT行业,尤其是程序员. 当你迷茫找不到出路,又想快速成长和提高的时候,有两种方案可以供你参考: 1.努力成为你工作环境中最优秀的人(技术最好的人): 2.跳槽,去另外一家公司做比你能力要高的工作. 针对工作环境的不同,分为大环境和小环境(人多和人少): 1.小环境,

程序员发展之路

程序员的发展道路 1.(2-3年)基础素质 毕业头2-3年,是培养基础素质的时候,是把学校学到的理论知识,应用在实践过程中的时候. 1.1知识面 工作中用到的知识,和学校里学习的知识,往往不大相同,去接触实际用到的技术,解决方案,设计模式,努力扩展自己的眼界,是这个阶段的主要任务.做web开发的,会慢慢得接触到html,css,js等等知识,做后台的,接触到php,java,linux,线程,性能瓶颈等等各类.这个阶段接触的东西比较多,比较杂,同时年纪轻也是学习能力最强的时候. 1.2解决问题的

程序员生活之路--来自程序员爸爸的一封信

亲爱的孩子: 当你看到爸爸这封信的时候,说明你已经长大了或者已经会玩微信公众号了,当然爸爸还是希望你长大了,并不希望你那么小就天天抱着手机刷微信. 我写这个文章的时候正直盛夏,现在外边正是37度的高温,妈妈为了你上小学的事情还在老家奔波,为了你能上一个比较好的小学,我买了几乎老家市区最好的学区房,当你看到这里的时候不知道你是否已经学业有成. 爸爸是一个程序员,年纪刚过30就已经感觉颈椎大不如以前了,所以为了能多陪你几十年,我每年都会办健身卡,每个周末都会去健身,这个夏天为了能让你学会游泳,爸爸妈

程序员修炼之路-(0)目录

前言:<程序员修炼之路-(0)前言:在路上, 再上路> 在前言中已经对知识体系进行了梳理,主要分为问题定义.算法与数据结构.系统平台API.编程语言实现.代码设计.测试验证等等.目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分,之后再考虑补充其他部分. 对于这一部分的内容编排,主要以<算法设计与分析基础>.<算法>以及LeetCode算法题中的问题分类为横向,以<算法设计与分析基础>中罗列的经典设计技巧为纵向,贯穿每一小节.因为传统算法书籍的结构