前言

如何才能修炼成一名不可替代的程序员,看到这个标题我产生了一个疑问?这个世界上存在绝对不可替代的职位吗?

一.程序员真的可以做到不可替代吗?

我认为不存在完全的不可替代的岗位,地球离开谁都能继续转。对于公司来讲也一样,CTO走了都没那么大影响,何况一个小小的程序员。公司离开一个程序员还能明天就倒闭吗,显然不会,任何一个正规的公司,都有自己完整的人事体系,正常岗位人事变动都不会对公司造成致命的损失。

有人说,你这篇文章不就是教大家如何不可替代吗?如果谁都是可以被替代的,那么你不是跑题了吗?这位小伙伴你不要着急,听我慢慢忽悠...不是...慢慢骗你...不对...听我慢慢给你解释...

如何才能修炼成一名不可替代的程序员?_知识体系如何才能修炼成一名不可替代的程序员?_android开发_02

虽然程序员的离职不会对公司造成致命的损失,但是会有投入产出比的差别,有的程序员离职,公司花同样成本甚至更少的成本就可以消除他离职带来的影响,但是有的程序员离职,公司可能需要花2倍甚至3倍的成本才能顺利接下他的工作,所以其实这篇文章我们讨论的是 如何让自己成为那个离开公司后老板需要花费更多成本去接替你的人,你离开后老板所需花费成本越高,你就越不可替代!

什么样的程序员不容易被替代?

我认为分析这个问题,反向分析最直观,企业在做招聘或者处理人员变动的时候一般会如何考虑?如果知道企业在招聘时候的考虑及需求,我们或许就能知道如何能让自己更不容易被替代了。

举个例子:

小王在某公司技术部门担任java后台开发工作 ,年龄30岁,单身,主程开发兼任技术组长, 月薪2w,在公司工作5年,对公司所有研发项目业务都非常熟悉,部门其他3位技术人员都是在本公司工作1,2年的同事,在部门都是小王在带领他们熟悉公司项目业务,平时有技术难点也都找小王请教。这几位同事对公司项目业务没有那么熟悉,技术水平对比小王也差距很大,但是老板有一天突然收到小王的离职申请书,假设如果你是老板,你会如何应对?

解决方案一:给小王加薪,挽留小王。

解决方案二:迅速启动招聘,招一个能力经验都比较丰富的大牛接替小王。

解决方案三:从项目组其他同事中选择一位能力较强者提拔接替小王的工作。

解决方案四:马上撮合小王和人事小姐姐谈恋爱,用漂亮的人事小姐姐留住小王的心。

如何才能修炼成一名不可替代的程序员?_android开发_03如何才能修炼成一名不可替代的程序员?_知识体系_04


方案一分析:

优点:短期内可能可以留住小王,减小因为小王离职给公司及部门的影响。

缺点:1.需要增加额外的人员成本支出2.另外其他同事了解这个事情后,可能也会有同样的加薪想法,造成团队不稳定 3.有过离职想法的员工即便留下来也不稳定


方案二分析:

优点:招聘技术和业务能力都强的大牛可以更快的接手小王留下的工作

缺点:1.能力经验都丰富的人员成本更高 2.熟悉公司现有业务也需要时间 3.和团队磨合也需要时间


方案三分析:

优点:项目组同事对公司业务熟悉,可以更快的接手小王留下工作

缺点:1.同组内其他同事可能不服 ,破坏团队氛围 2.短时间内可能无法完全接替小王工作 3.还需要招聘一人负责新提拔同事原有手头工作


方案四分析:

如何才能修炼成一名不可替代的程序员?_android开发_05如何才能修炼成一名不可替代的程序员?_解决方案_06如何才能修炼成一名不可替代的程序员?_解决方案_07

哪里有方案四?哪里来的漂亮人事小姐姐?你醒醒啊,想啥呢....


综合分析

  1. 小王的具体技术及业务能力水平如果一般,没有高于组内其他同事太多。老板可能会选择方案三,因为小王能做的事其他同事也可以胜任。
  2. 小王能力水平超出出组内其他同事很多。老板可能会选择方案一和三,组内同水平同事无法胜任,只能招大牛,但是招大牛付出的成本可能会很高。
  3. 小王负责项目业务组内同事完全不熟悉,技术负责内容其他同事也无法承接。

老板只能选择方案一,先稳住小王,然后再一边培养新人,一边招新人逐步替换掉小王,但是肯定同时要付出更大的成本,因为这时候即便马上招新人也无法马上接手小王的工作,熟悉业务需要时间,只能先稳住小王,然后尽快招新人熟悉业务,后面再替代小王,这付出的成本更高。

所以不难看出,能力越强,替代成本越高!成本越高,你不主动辞职,你越不好替代!

嗦了半天,终于到本文正题了,这个能力到底是指哪些方面的能力呢?

三.程序员需要从哪些方面提升自己才不容易被替代?

1.好好做人

其实任何行业都需要学会做人,为何还要单独说一下?因为在写这篇文章之前我特地看了一下相关的文章,竟然发现有博主在教一些旁门左道,通过这些方法保住自己的饭碗。

摘选部分内容让大家看一下:

如何才能修炼成一名不可替代的程序员?_android开发_08

至于文章出处出于保护个人隐私考虑,我就不贴了,但是看完这个我只能说,这真的是最起码的职业素养都没有,自己这些上不了台面的东西写出来误导新人?还是那句话:做事先做人,做人德为先!

如何才能修炼成一名不可替代的程序员?_知识体系_09

技术能力

互联网行业技术的发展日新月异,新技术层出不穷,具有良好的学习能力,能及时获取新知识、随时补充和丰富自己,已成为程序员职业发展的核心竞争力。一个能够不断进步的人才有更辽阔的未来和更可观的前景,尤其是对于IT行业这种每时每刻都充斥着改变的领域,学习能力更是必不可少的存在。

而在互联网公司,程序员的技术能力我认为是最重要的,程序员的技术能力是立身之本,是评估一个程序员能否胜任自己岗位的第一条件,不会写代码的程序员绝对不是一个好“厨子”!这个岗位的本职工作就是技术实现,将产品经理设计的作品用技术完美的实现出来,开发前能考虑到各种工况场景、针对当前设计提供各种合理优化建议、提前规避各种风险、开发效率高、BUG少,还能提前考虑将来可能要做哪些扩展,封装各种组件复用减少开发时间成本,这就是一个非常优秀的程序员!

技术方面的提升,这个行业不同于其他行业,这个行业知识体系实在是过于庞大,另外知识更新非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。


  1. 明确目标这个目标我建议是优先选择和你工作相关的技能来提升,最好不要什么都学一点,什么都学的不太深入,这种看似很努力,但是你最后没有太大收获,学习这些表面知识无法对你起到帮助,也就无法获得学习的成就感。
    举例:假如我是做Android开发的,我不会今天去看看C++,明天去学学Python。我首先会选择提升Android开发能力,优先学习Android开发相关内容,本领域学习掌握到一定深度,再去拓宽其他知识面。学习自己领域内知识我会优先汇总整理本专业范围内的知识体系图谱,类似这种:

    如何才能修炼成一名不可替代的程序员?_android开发_10
    这样可以清楚明确自己需要学习知识的范围,明确范围后,然后制定一个完整可行的计划,按计划逐步学习,每天学习消化一点,按这种思路学习完你的知识才成体系。
  2. 学习方法内容明确了,计划制定好了,接下来就是如何去学习了,学习的方法有很多种,现在获取知识的途径太多了,但是我们的时间是有限的,如果能规划利用好自己的时间,选对适合自己的学习方法,是提高学习效率的前提条件。这里我简单列举几种方式,对比一下几种方式的优缺点,详细内容我就不一一详细阐述了。
  • 看书优点:书最大的特点我觉得是知识全面、严谨
    缺点:有些枯燥,一本书可能很多内容都对自己帮助不大
    如何才能修炼成一名不可替代的程序员?_知识体系_11如何才能修炼成一名不可替代的程序员?_解决方案_12
  • 看视频优点:视频容易入门,可以看到操作及演示
    缺点:不成体系,一般都是讲重点,忽略细节,很多系列的视频后面的都是收费的
  • 逛技术类网站优点:获取新技术、可以看到同行们都学哪些,不至于掉队
    缺点:内容庞杂,水平参差不齐,没有鉴别能力容易被误导
  • 报培训班优点:完整、成体系
    缺点:时间要求高、学习成本高
  • 有高手或者领导在工作中指导你

优点:我认为这样学习的方法是最快的

缺点:碰到这样的人需要运气,要珍惜

  1. 总结积累

每天的工作和学习其实是很枯燥的,需要坚持,最好的办法就是自己回忆每天学到的内容,然后把他写下来。写博客是一个很好的方式,我从15年发表第一篇博客到现在,每个月都会写一些新东西,从来都没有间断过。长期坚持做一件事,肯定会有帮助,很多人不敢开始,怕自己写的内容太简单被别人笑话,其实大可不必,只要是自己思考过的内容都可以记录下来,我们需要做的是给自己做积累,不用在意其他人眼光。

我开始的时候就是记录基础的知识点,后来慢慢会写解决具体问题的文章,再到后面就写归纳总结类的文章。现在转管理慢慢会写一些行业类和管理类的文章,总之就是一直在写。这个过程坚持下来会帮助你加深对知识的理解,另外后面碰到同类问题还是看下之前是如何解决的,我经常碰到同样的问题还是忘记如何解决,后来就去搜自己的博客当时如何解决的,还是那句老话:好记性不如烂笔头,不断复盘总结是非常重要的。

业务能力

从上面小王的例子也可以看出,在公司除了技术能力很重要,对公司业务熟悉程度也非常重要。从公司性质来说,公司肯定是以业务为核心的,一切的专业技能也都是为业务服务的。

我们在和项目经理、公司管理层或者是企业老板沟通的时候,如果还一直喋喋不休地说一些“专业术语”的话,那在他们眼中,此时的我们可能就如满口“之乎者也”的书呆子一般了。因为专业是存在壁垒的,能够将整个公司融会贯通起来的,只有业务。而其他人关心的,也只是我们能不能用自己所具备的专业技能来解决现在遇到的业务问题。如果能,那么怎样解决,这是我们自己的事情;如果不能,并且还是由于我们不懂业务而无法解决的话,那不好意思,大家不仅会觉得我们的业务能力不行,而且还可能会觉得我们的专业水平也很一般。 所以在公司一定是先尽可能的多熟悉公司现有的业务,将公司相关的项目业务都熟悉起来,在熟悉的过程中多与周围同事及项目相关人员沟通,这样一方面锻炼了自己的业务能力,同时也锻炼了自己的沟通表达能力。

4.管理沟通能力

大部分开发者工作三五年后,都能掌握所在岗位必须的知识、经验和技能,然而很多人接下来就陷入困境,左冲右突,无法加薪升职这其中最重要的原因是:大部分开发者只注重专业技能的修炼,忽视了人际沟通、项目管理等技能

管理能力

对我们自己而言在职业发展方向上,我们要给自己制定一个目标,并梳理自己的职业规划。无论是技术架构、技术专家,还是技术管理,学习管理知识都是有必要的,技术和管理是两条腿,可以让我们的路走的更远。

对于我们程序员而言,不免有各种问题需要沟通协调,对客户、对同事、对上级,及对工作,都有管理的需求。不管是否明确要做管理,都是非常有必要学习一下管理知识的。掌握管理思维,具备管理认知,对你的工作、生活,乃至人生规划都是有帮助的。

当你学会用“带团队”的思路工作和生活之后,你都不会做的太差,因为你考虑各种问题都会更加的全面学习管理能力和做管理岗位并没有必然联系,不管个人规划是怎么样的,学习管理是很有必要的!管理思维能让自己工作起来思路更加清晰,同时也对自己制定职业规划起到积极作用

沟通相处
  • 平时多和周围同事聊聊天无事不登三宝殿,当你平时只顾做自己的事情,需要同事协作的时候再去找人时,你会发现同事很被动地迎合。这时候你才发现,日常生活中和同事打招呼,聊聊天有多重要。人是社会性动物,脱离了群体,你就会感觉举步维艰。上班前的一句早上好,休息时间的调侃,这些互动都会拉近彼此的距离感。
    另外有些同事真的可以处成朋友,有不少原公司同事我们平时还会聚一下聊聊,我来现在公司就是前同事推荐过来的,之前做过几次项目也是原公司同事引荐的。
  • 同事之间帮忙是情分,不帮忙是本分 在公司碰到可以帮忙的事情,能帮就帮帮,当然前提不要影响自己工作,有时候帮一个小忙可以让别人铭记于心。这样的事情做多了,你会发现你在公司就是人见人爱的那种。
    但是帮忙需要掌握好一个度,当领导或者其他同事提出不合理的请求,并超过你的工作负荷时,就不要感到不好意思去拒绝对方,甚至乖乖做个老好人。偶尔请你帮忙的同事来说,我们确实应该帮忙,本来同事之间就需要互相帮忙,但是帮忙也是有限度的。给人的帮助太多,让其形成了依赖,一旦停止帮助,反而会让人忌恨。
    总之,人在职场,同事之间帮忙是情分,不帮忙是本分!自己掌握好尺度就好。
  • 学会控制情绪 我非常敢肯定,每个人的职业生涯中都会碰到几个让你无语的可爱(XX)同事或者领导,但是我建议不管发生多让人抓狂的事情,先让自己情绪平复一下,我不是劝大家碰到可爱同事领导要善良,我懂 “未经他人苦,莫劝他人善”这个道理,我只是希望大家要冷静的处理面对的问题,因为人在情绪失控的情况下说的很多话、做的很多决定都不是最佳的,尤其在职场上。
  • 学会尊重他人 工作中不管是面对自己的同事,还是自己的领导都要学会尊重。尽量避免当众指出他人的错误和不足。因为人都喜欢听好听的话,说白了在职场要给别人留一份尊严。
    反面的例子举几个:
    1)这么简单的功能你不会实现?
    2)不是,大哥,你这都多长时间了?还没搞定?是不会吗?(很大声)
    3)被领导批评后,从办公室出来,这个xx总真是个大可爱(XX)。
    4)你怎么这个地方总出问题啊,和你说了几次了啊?大哥,能长点记性吗?我问问你这么多问题怎么上线?
    5)但凡我有其他人能干这活,我都不会找你!
    6)我觉得不是哎,你等等,我先打断你一下啊...我觉得这个应该是这样的...
    7)你这么想不对,太不靠谱了...我告诉你应该是这样....听懂了没?我说清楚了吗?
    不发了,我怕我被打死....

5.其他方面

对于程序员来讲,除了技术、业务、管理沟通方面需要提升,还有一些其他方面也是加分项。

  • 学历提升 专升本、考研等。
  • 考取相关证书 PMP、软考高级、中级证书等。

这些都是额外加分项,这些根据自身具体情况选择。

总结

优秀的程序员需要在自己领域内有很强专业性,能及时发现和解决复杂的问题;可以在一个团队里,高效的把项目和团队一步一步地朝前推进;能把这些事情都做好对程序员的要求其实是很高的,技术、管理、情商等各个方面都需要具备一定的水平,希望大家热爱自己的工作,并愿意不断地提升自己从而在喜欢的领域不断发光发热。