12丨外包:外包不也是写程序吗?有什么不一样的?

2020-06-12 臧萌
职场求生攻略
进入课程

讲述:臧萌

时长12:28大小11.43M

有一种软件公司,叫做软件外包公司。软件外包公司做的是拿甲方的钱,按甲方的要求,帮甲方完成项目的工作。这里的工作一般就是写代码,也可能会包括一些上线,运维,维护等内容。
外包的工作一般是以项目为单位的。一般来说,如果项目需求设计都很清楚,外包公司都会在自己的办公地点工作。也有项目需要频繁和甲方交流的,根据实际情况,外包公司也会让项目相关的员工去甲方的办公地点工作。
除了这个形式上的特殊之外,软件外包具体是做什么的呢?和软件研发有什么区别呢?外包值不值得做呢?
我可以在这里先甩出结论:一个程序员,如果想长期从事这个行业,那么外包不值得做太多年。下面我们就来说说为什么。

从修路的例子看,外包有什么限制?

首先,我们来看个修路的例子,通过这个例子我们来看看外包的主要矛盾到底是什么。
假设 A 公司要给一个开发区规划公路,那么 A 公司要考虑的事情其实有很多,比如哪里是居民区,哪里是办公区,哪里是主干道,各条道路分别需要几个车道,路的承重多少,路基怎么设计才能扛得住承重……除了设计,可能还要铺设简单的实验道路,验证设计的可行性。
当 A 公司做好所有这些设计之后,就会交给市面上专业的修路公司,将修路工程外包给这些公司去做。修路公司人多,长期从事铺路工作,签了合同之后就可以带着几百上千号人拿着图纸开干。
这时候,我们可以认为,A 公司就是甲方,修路公司就是外包公司。外包公司在具体做项目的时候,对路的各种技术细节以及其背后的奥妙,其实并不是特别清楚。比如为什么这条路是双向 8 车道,而不是双向 6 车道?为什么路基要分这么多层,每层要这么厚?为什么路面的坡度是这样的,而不是大一度或者小一度?
看到这里,我想你应该明白了,我们的软件开发上也是同样的道理。
软件外包中,甲方公司一般也都有些软件背景,会自己分析需求,自己做出详细的系统设计,但是写代码的人手不够。这时候甲方公司就找到外包公司,让外包公司按照自己的设计,帮自己写代码做系统。
做软件外包,其实就要面对着一堆需求文档、API 文档和详细设计说明书,照着要求写代码。但是代码背后的业务逻辑,外包人员可能是无法理解的。比如说,原始的需求是什么样的?基于这些需求,又经过了怎样的讨论和权衡,才得出这样的 API 设计?API 文档中为什么要强调某个地方?缓存为什么是 Redis?为什么设计里使用的数据库是 MySQL 而不是 MongoDB?
看到这里,是不是已经隐约感觉外包和非外包的区别了?外包工作并不能让我们详细地了解工程的本质,除此以外,它对我们的限制还体现在方方面面。

外包的限制具体有哪些?

难以获得完整地解决问题的能力

如果用一句话来概括,我觉得外包真正的问题在于,它的工作内容只包括最后的写代码,不包括写代码之前的思考和筹备过程。然而就是这个思考的过程,对程序员来说,是非常重要的锻炼。通过这种锻炼,程序员可以逐渐培养出思考问题的能力,再学着将这些问题分解为一个个小的、复杂度可控的模块,进而通过编程完成一个能解决问题的系统。这就是使用技术解决问题的能力。另外,还能够积累在相关领域的专业经验。而这些积累,是程序员拥有更好待遇的有力支撑。
纯粹写代码,并不是解决问题的完整过程。如果不经过前期的思考和锻炼,解决问题的能力是无法得到很好的锻炼的。就好像只修路的工人很难理解路背后各个参数的含义,自己也就没办法设计出一条合格的公路。

外包公司不注重人才的技术成长,涨薪受限

外包的工作内容,事实上也决定了外包公司对人才的态度。从外包公司的利益来看,只要员工能够“按照需求,写出代码,完成功能”就可以了。只要能够到达这个水准,那么外包公司就没有理由,也没有动力去培养人才了。
同样的道理,一般外包公司也不会鼓励员工深入学习一门技术。毕竟外包公司的任务就是把事情做出来,至于怎么做更好就不在外包公司操心的范围内了,甚至可以说,外包公司也操不上心。所以,我们在前面提到的很多主观能动性等内容,在外包公司看来,并没有太多的适用场景。
在我看来,外包公司不鼓励程序员深入学习还有两层利益的考虑,一方面,学习需要耗费时间。技术够用就行,没必要探索用不到的新技术,公司更希望你用这个时间来干活。另一方面,如果程序员技术精进了,跳槽的几率就会变大。因为外包公司不需要程序员有强大的技术,而程序员有了技术傍身,工资又不涨,自然会考虑跳槽。

外包公司没有探索的环境

因为需求和详细设计都是甲方定的,作为实施的乙方,也没有权利和自由去实践可能更好的方案。需求里写的用 MySQL,那么就是 MySQL,即使乙方的开发人员再怎么觉得用 MongoDB 好,也没有权利和渠道更改。
我们还是用修路的例子来举例。如果 A 公司的一个设计人员通过计算,认为改一下混凝土的成分比例和路基的厚度,可以降低成本,达到更好的承重效果。那么 A 公司大概率会鼓励创新,让设计人员铺个实验路面试试看。
但如果是铺路公司的施工工人有这个想法,负责人大概率只会让工人老老实实按照图纸施工。一方面是因为就算乙方有了更好的实施方案,也不会拿到更多的钱,另一方面是铺路的材料可能都已经按照之前的规划定好了,已经过了方案修改的窗口期,修改的代价太高了。

可替代性强,可能无法完整参与一个项目

因为外包公司的工作比较单一,所以可替代性也更强,同样外包公司程序员的可替代性也强。这也造成了外包公司的人员流动比较大。
外包公司可能会被甲方换掉,即使不换掉,一个项目的程序员也可能无法参与项目的下一期的工作,甚至有可能在做一个项目的过程中就被抽调走了。
从成长和积累的角度来说,程序员最好能参与项目的整个过程,甚至一个项目多期的开发,这样就能够沉淀完整的经验。如果是东一榔头,西一棒槌,技术和业务都很难沉淀下来。如果能参与一个项目多期的开发,也可以从这个项目的技术演进中,学到不少东西,但是如果无法连续参与,也无法收获这部分经验。

什么情况下可以考虑外包?

看完了上面的内容,我不知道你有没有发现,我不赞同长期从事外包工作的出发点只有一个,那就是不利于程序员的个人成长。那么反过来说,只要你觉得自己有成长,有收获,那么从事外包也不要紧,毕竟凡事没有绝对。外包没有好与不好,只有合适与不合适。
这里我一下可以考虑外包的几种情况。

通过外包快速积累经验

对于刚毕业的同学来说,好的外包公司也不失为一个不错的开始。成熟的外包公司一般会有规范的项目管理、文档管理和代码规范管理等,这些可以培养程序员优秀的编码习惯。同时,在还没有熟练掌握一个技术之前,在外包公司可以通过项目将自己的熟练度提升上去。

希望进入一个新的行业

有的外包公司有自己的工作风格,比如主要接某个行业的外包项目。那么如果你想进入某个行业,但没有相关经验,无法通过面试直接进入这些公司。那么不妨考虑相关行业的龙头外包公司,积累相关的行业经验。
当然,并不是每个人都喜欢一直从事一线程序员的。相比来说,外包公司更容易转管理。当然,我并不认为管理是程序员必须走上的道路。后面我会专门写一篇文章来聊这个话题。

总结

外包公司并不是一个很好的让程序员可以长期发展成才的环境。在外包公司呆久了,这种氛围可能会让人有两个错误的认知:程序员的工作就只是写程序;程序员只有转管理才有前途。
如果想要成长,就不要被外包公司的氛围影响,做个有心人,肯下功夫,也会有自己的收获。当然,如果你觉得在外包公司已经没有太多的成长空间了,感觉自己不想只是写程序了,那么不妨换个环境。一般来说,在一项技术上如果有三年的积淀就差不多成熟了,五年就可以说很成熟了。这时候如果还想继续做程序员,就要考虑向更高的层面发展了,去锻炼自己除了写代码之外的能力。
当然,实际的外包形式有很多,今天的内容里只是讨论了一种最主流的形式。也有一些外包公司反其道而行之,专门做一些甲方无法搞定的非常专业的工作,甚至连方案都是外包公司参与一起制定的。想当初,MS-DOS 就是 IBM 外包给微软开发的。如果你正在从事外包工作,千万不要否定自己的工作。总之一句话:只要感到自己有成长,有收获,那么就是值得的。

思考题

外包可以说是一个很常见的现象了。不知道你有没有在外包公司工作过呢?根据你的成长历程,你有哪些感触呢,欢迎在评论区和我交流。也欢迎把这篇文章分享给你的朋友或者同事,一起交流一下。
unpreview
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
11丨面试:如何准备简历和面试?
下一篇
13 | 外派:大家都在一个办公室工作,有什么不一样?
 写留言

精选留言(11)

  • 2020-06-12
    深有同感,外包确实就是完成业务就好,代码质量不用你操心,操心多了,领导反而不高兴

    作者回复: 操心太多耽误老板赚钱,哈哈。

    5
  • 我说下我刚毕业的经历吧!!!
    刚毕业时没有工作经验,面试屡屡碰壁,真是连个工作机会都没有。
    后来只能干上外包,在甲方公司驻场办公。
    通过一年半的认真工作,得到了甲方领导层认可。
    后期项目进入稳定维护期,我就被甲方公司招安,薪资福利有所提升。
    展开

    作者回复: 👍,外包和外派转正的几率还是很大的。比起面试,在共同工作中,更能够发现一个人的优秀品质。

    2
  • 2020-06-12

    真希望早点看到这篇文章...

    作者回复: 希望现在让你看到,也对你有点帮助。

    1
  • 2020-06-12
    只干过一天外包,就辞职了😂
    之前接了一个外包到移动的offer,面试的时候说做Java开发,第一天去了后,让我学下安卓测试,我也没吱声,第二天就没去,然后就辞职了,后面就再也没考虑过外包了
    展开

    作者回复: 是的,外包基本上就是让干啥就得干啥。没得选。

    2
    1
  • 2020-06-15
    思考题:
    第一份工作被人力外包到客户现场工作,努力工作、加班,然后到年底了开会说实行新的考勤制度之前的加班时长被消失了;然后请假什么的都要甲方PM同意然后公司再申请一次(备案),平时相处的人都是甲方的,人家也不把你当同事!8个月下来只有发工资的时候知道自己是哪家公司的;没有归属感、职业规划、晋升途径;啥都没有,总之不要耽误老板”买卖人口“。

    感悟:
    做项目外包不能参与一个完整的项目流程,积累不到完整的经验也就没有所谓的相关行业经验!只能无脑选择主流技术和大厂背书框架,然后逐渐熟练使用相关的API,然后就到此为止了,然后大家竞争的就是api的熟练程度和技术相关填坑经验了;
    如果人的学习能力差不多,那么随着年龄增长,人生逐步进入后边的阶段,变成的腊肉;精力、时间、体力其实是没办法和优秀的新一茬的鲜肉比的,人的期望待遇还远低于你,仿佛一眼看穿头顶的发量
    展开

    作者回复: 总结的很好,直击要害!

  • 2020-06-14
    外包公司没有中间空闲时间,一个项目刚做完,紧接着又上另一个项目

    作者回复: 因为对外包公司来说,员工闲着就是在纯亏钱

  • 2020-06-13
    以前公司是自己干,现在这个领域华为腾讯插进来了,因为腾讯华为的名气,华为腾讯拿十年前的设计风格客户都说比我们的好,我们就被动地成了外包。
    展开

    作者回复: 巨头就是有名气上的优势。。。

  • 2020-06-13
    之前在个龙头外包公司干过,有自己的框架,规范标准的项目流程,项目规模也很大,一开始觉得还挺nb的,后来发现技术氛围太差了,组里面的人特别是老员工基本上都是抱着混日子的心态完成任务,一点追求都没有,就想着混口饭吃,于是我干了几个月混了点经验就走了
    展开

    作者回复: 嗯呐,不能一杆子打翻一船人,简单粗暴的说外包公司没技术含量。但是外包这种工作性质,很大成都上决定了公司的技术氛围。没动力持续在技术上高投入,只需要做确定的事情,就可以获得回报,这种前提下,长此以往,技术氛围就会像你说的那样氛围差,没追求。

  • 2020-06-13
    非常认可老师这篇文章的观点!

    补充一下自己的观察,希望能为其他同学提供一些信息:
    1. 很多正规大公司会把“帮助手下正式员工提升“作为对经理的考核指标之一,所以经理通常会有计划地培养正式员工,比如定期一对一会议,提供培训机会,协商制定年度季度OKR计划等。
    2. 大公司对正式员工和外包合同工的面试侧重点也不同。正式工一般需要通过五轮以上面试(算法/系统设计/行为)考察他们的聪明程度、沟通能力、性格品质等;合同工一般只有两三轮,主要考察有没有当前公司技术栈的相关经验,能否立刻上手干活。

    最后想问老师一个问题,我没有在外包公司工作过,通过观察对比自己所在公司的资深正式员工和外包合同工,我感到合同工在领导面前销售自己的能力普遍更强,不知道老师是否有同样的感受?如果有,您觉得这背后的原因是什么?
    展开

    作者回复: 嗯呐,正式员工开除的成本高呀,所以招聘的时候就要多把关。外派就如你所说,不会培养,只想拿来就出活,干的不好可以很快换人,所以面试的时候也不需要考察太多潜力呀之类的东西。

    至于销售自己的能力,说说自己的想法。如果是冲着转正来的,表现自己是必要的。相比之下,资深正式员工可能并没有这么大的“生存”压力,不需要表现的那么显眼。而且就资深的正式员工来说,和经理的关系已经有很多年的打磨了,也不太需要销售自己了。

  • 2020-06-12
    外包一个突出的特点就是没有归属感。姥姥不疼,舅舅不爱的感觉,在甲方公司里面被边缘化

    作者回复: 为什么没有归属感,因为姥姥不疼,舅舅不爱,为什么呢?因为可替代性强。为什么呢?因为做的事情是最末端的,最不需要理解全局,最不需要做决策的事情。

  • 2020-06-12
    我在外包工作了三年,确实是只要你会写代码,大部分都是简单的编码,上层的方案讨论以及决策都没参与过,感觉就是个执行任务的人,没有一点参与感,而且技术栈上都没有用到市面上流行的主流技术。三年工作,也就感觉最近一年有所成长,涉及过优化,大数据量处理效率性能优化,局部方案设计。也就止步于这些,随着年龄的增长,只会这些感觉到危机快被淘汰了。
    展开

    作者回复: 一直没有危机感的人才是最容易被淘汰的。有危机感就有行动的动力。因为与其老是因为危机感而不安,还不如努力做点事情,消除危机感。

    正如文中说的,提升自己业务的积淀,加深对系统解决的问题的理解,可以让自己迈向下一个台阶。