在这里makekam对底层软件的理解就是指驱动开发,代码移植等工作。其中也包括底层的算法。在小公司做软件不要做底层软件开发,犹如在公司做硬件开发不要只是焊接电路板。
小公司处于产业链的最末端,没有自己的核心技术,只是针对用户需求完成一些系统集成和定制。而核心技术具有普遍适用性如“组合导航技术”、“操作系统移植与软件框架”等技术并不局限于某个领域,这些技术大公司可以集中力量突破,然后将技术卖给各个小公司。所以普遍适用性的技术往往来自大公司。因此,小公司的底层软件要么是测试供应商的软硬件产品,然后与供应商沟通测出的问题,要么是让自己公司的代码匹配供应商的产品,比如驱动开发、代码移植等。这些工作往往代码量奇少无比,体现不出高级程序员和低级程序员的区别,因为做这些事主要是看外设文档,与供应商沟通。只要花费人和时间,这些事情都能完成。
除此之外,做底层开发还要替硬件填坑背锅。小公司缺少硬件测试流程,问题往往在产品运行时才能发现。假设makekam是做底层软件开发的,当做硬件的人焊接的板子有问题时,这些问题往往无法彻底排除是软件导致的,所以做底层软件的makekam就要花几天时间把底层代码查个遍来分析问题,最后才能让硬件的人用十五分钟解决问题。
也许你会说,做底层软件做的多了不就积累了很多经验吗?其实不然,只要公司决定出钱购买另一款外围设备,那么之前的经验就很难用得上了。而且底层开发代码量很小,只是匹配主控芯片和外设,哪里有什么创新,哪里有什么复杂度?而且更重要的是,公司的领导心里永远不惦记你,这是因为,公司领导想的都是公司的项目,而这些项目的主要困难是什么?绝不是底层软件开发!底层软件开发只需要人和时间就一定可以完成,这是一个必然事件。而充满不确定性的应用层开发和项目成本估算还有项目需求分析才是这个项目成败的关键。因此,对于领导来说,在项目确定之前需要和三个人沟通,第一是和客户沟通,因为客户决定产品研发方向,第二是和外设供应商沟通,因为只有外设供应商才知道项目的开发平台的属性与成本。第三是和做应用开发的人沟通,因为项目的主要工作量是在应用层。领导不会和做底层软件的人沟通,因为底层软件只是一个桥梁,一个台阶,一个垫脚石。底层软件做的再好,也只不过是把系统做稳定,项目的价值的提升取决于业务目标和应用开发。
总之,在小公司,面向客户,面向应用才有前途。因为小公司存在的意义就是面向客户整合产业链上游资源。