选择改变命运,可供程序员选择的三种性质的工作(1)

在这个任何行业都离不开软件和互联网的时代,可供程序员选择的工作范围很广。选择不同对未来的职业发展有着直接的影响。同样一起走出校门进入职场,几年后有些人成为技术大神,在业内有着极高的知名度,有些人则成为企业高管一呼百应,而有些人却在一线默默地写着代码,焦虑着会不会因为自己的年龄问题被公司裁员。同样都是做程序员,差距咋这么大呢?这个问题我们通过对程序员的三种工作性质和类型进行阐述。

按照工作性质,我们可以将程序员的工作其分为外包、传统、互联网三大类型。虽然只简单地分了三个类型,但仍然有鄙视链的存在,即做互联网的看不起做传统软件的,做传统软件的看不起做外包的,做外包的可能连自己都看不起(玩笑)。

我刚刚参加工作时在一家对日软件外包公司做过一段时间的软件开发工作,对其运作流程和实现逻辑还是比较了解的。今天仅针对对日软件外包来谈谈外包性质的工作是否真的不能做。

首先我们来了解一下什么是软件外包。所谓软件外包是指企业为了降低成本,将项目中的全部或部分工作发包给提供外包服务的企业完成。日本的外包更是做到了极致,一般他们会把一个项目横切一刀纵切一刀。所谓横切一刀是根据软件开发流程拆分,比如将需求设计、概要设计、详细设计、系统架构、开发、测试等环节分别分包到不同的公司完成。纵切一刀是将系统的各业务模块(用户、订单、工作流等)分别分包到不同的公司完成。

先说说对日软件外包对程序员成长的不利因素:

  1. 我们知道开发位于设计之后,这样横纵各一刀的拆分方式使得程序员根本参与不到业务和技术设计当中。该环节的缺失将直接影程序员对项目和技术的整体理解和思考。
  2. 详细设计的详细程度近乎伪代码,程序员按照设计翻译成代码即可。过分的详细使程序员不再动脑思考业务,技术上也无须与人沟通交流。
  3. 外包大多采用商业性技术框架,市面上使用的公司寥寥无几,不具有通用性。好容易学会了,但没人用。
  4. 不做维护或很少维护。我们知道系统做的好不好,算法性能优不优只有在上线经过大流量的实战后才能知道。因为不做维护或做少量维护,系统上线后出现了什么问题,该如何优化和调整基本上是接触不到的。这一环节的缺失对技术的深入是非常非常不利的。早期参与淘宝的程序员为什么后来都成长为技术大神?是因为他们跟着淘宝的成长而成长,平台越大技术复杂度就越高,要解决的问题难度就越大,技术的理解就越深入,创造性也会越来越强,就是这个道理。

所以长期从事软件外包工作对程序员的成长是非常不利的。请注意,我这里讲的是长期不利,所以反过来就是短期有利,尤其是对初入职场的程序员来说。

  1. 易于业务理解 详细设计过分的详细对于初入职场的程序员来说是个好事,因为积累少对业务理解就会很困难,有了这样详尽的设计,对于理解业务实现还是有非常大的帮助作用。
  2. 免费的培训 因为使用商业性框架和技术,所以一些大的项目都会有专人来进行培训,甚至给你做练习的时间。对于没有实践基础的初学者有免费的培训何乐而不为呢?
  3. 代码规范 大多数日本客户对代码的要求都是非常高的,他们会将大量的时间投入代码 Review 上。不仅通过系统到检测代码规范性,也会人工走查,并将问题清楚记录后发送给你修改。大到算法性能,小到注释标点。虽然比较严苛,但无形中会帮你建立起良好的规范意识,使你写出的程序简洁、高效、易读。这一点对比很明显,不信你可以找一个做过对日软件外包程序员写的代码和没做过的对比一下,高下立现。
  4. 近乎苛刻的严谨 日本人对待工作是非常苛刻的,也是非常死板的。每个环节按部就班做到位才会进入下一个环节。尤其是测试,我曾见过一名日本的测试人员将设计的界面和程序实现的界面打印在A4纸上,将两张纸重叠对着日光灯对比,并将不一致的地方详细标注发回给开发人员修改。往坏了想这人很变态,往好了想后面有这样的一群测试,我们在开发的时候就是谨慎的多,思考的问题也会更多更深入,对成长是百利而无一害的。
  5. 标准的工作流程 就像上面提到的,只有在当前环节做到位才会进入下一环节。将瀑布式工作流程做到了极致,好处是越往后的环节出现的问题越少,更不会有大问题出现。因为问题在前期已经处理掉了。详细了解了各环节是怎么做的,做哪些事,对未来做技术管理会有很大的帮助。
  6. 多样性 外包工作不会持续性地做一个项目或一个行业,可能是今天做证券,明天就去做电商了。公司接到什么项目就做什么项目,所以接触的行业会很广。技术是为业务服务的,接触更多的业务,对程序员的成长是非常有利的(还记得我上一篇文章最后讲到的不要固定到某一领域中吗?)。又因为外包的程序员是不能做技术造型的,也就是说对方要求用什么技术你就要用什么技术。在这种环境下,能够快速提高学习能力。对各种技术都会有所了解。上面我们说过很多商业性技术框架没有公司使用,但要知道技术是一通百通,如果只是会使用那确实没什么用处,但如果能搞懂其内部原理对于理解和创造新的技术框架是非常有帮助的。

虽然外包工作对程序员的成长有这样那样的不利因素,但也并非一无是处,尤其是对打基础的初学者来说是非常有利的。