在软件业,软件大致可以被分层为上,中,下,三层。越是上层的软件越是接近使用者,越是下层的软件越是接近于硬件层。
对于码工来说,65%+的码工所做的工作是不需要CS专业知识的,通过一些培训课程或有其它专业基础的人士自学就可上手。这些码工基本都集中在上层软件部分。在上层软件领域,有时需要一些算法,但相对中下层软件其算法的要求不高。甚至,这些码工都不需要专业级的计算机知识和网络知识。这就是为何自学都能上手。目前由于有一些新的程序语言,例如Python,由于拥有大量的专业软件库,上层码工利用这些这些语言甚至都能写中层软件,例如,进行大数据分析等。但是换来的问题是,软件本身尺寸很大,动不动一个软件就是几百个MB,同时需要大量的CPU,内存资源。
对于中层软件的码工,按照软件所要服务的行业不同,专业知识的要求也不同,例如,做CAD软件库的需要不同的物理,化学,电子,机械等的专业知识,往往是由此类专业的毕业生来做码工,在这里“码”只是一种表现方式。SAP等管理软件也是如此,它的码工不需要计算机知识,但要求属性生产或财务流程以及数据之间的关系。大多数从事专业中层软件或是协议软件的,需要不少计算机,网络,通讯,算法等专业知识,这类的码工如果不具有前述专业知识,比较难混出头,但是这类码工也不需要各个方面有专长,CS专业毕业的做这份工作就有优势了。如果是纯搞软件算法的数学专业或物理专业的在这方面也会有优势。
下层软件的码工,由于这些码很多时候和硬件有关,因此要求对从硬件电路,软硬件协议,网络原理及协议,算法等方面的知识要有比较充分的了解才能着手,是计算机软件业里相对最复杂的部分,这就包括计算机操作系统,各类驱动程序,等等。 这类从业者往往要求有EECS,EE的背景,其它专业哪怕是普通CS的做这部分工作都很难。
在实际工作中,软件中的这三层也不是明确划分的,层与层之间都有重叠部分。区分上下层最容易的方法就是看工作中使用的编程语言,下层基本只有汇编语言和C语言。越往上,就开始有C, C++, Java, SQL, HTML, Python...。而且软件业的划分除了有上中下竖直划分,也有平面划分,在平面划分中,要从事系统结构设计,即使是在上层软件部分也需要很专业的软硬件相关的计算机知识。
说实在的,计算机软件业并不一定是个好职业,你以为它上手容易,挣钱快,但是更应该看到它丢工作也同样容易,特别是从事上层软件的,经济不好时,软件业的危险性要高出其它行业许多。而且如果是中下层CS软件业的,还需活到老学到老,这也很累人。 想想当你50+,60+多时还要和那些20+的一起学新知识,一起比写码的工作量,你不感到害怕吗?有人说,作为码工,他不准备工作到退休,挣到一笔大钱后就能财务自由,所以没生么可担心的。但是,事实上,能够早早得到财务自由的码工毕竟是少数,甚至是极少数。多数的还得为生活努力学习和工作。
还有人说码工分三六九等对应全部时间写码,一半码时间写码,完全不用写码的码工。我认为,不管哪一层的码工,划分他的三六九等就就是看这个码工被新人取代的难度而定。至于,目前软件业的管理层问题,在这里就不多述了,因为题目太大,存在的问题太多。
我不知道,有几个CS码工甚至是资深的软件结构设计师,是愿意让子女继续从事软件业的, 我想多数热衷于子女从事CS软件业的父母都是对此行业一知半解,或者本身是做上层软件的码工,其对计算机原本也是一知半解,以为CS就是靠Java,靠Python,只要能调用专业库文件就无所不能并横扫软件业的。