笔者是一个老程序员,自2002年进入.NET开发领域,一直未曾放弃。期间经历过管理软件公司,互联网公司,有国内企业和外资企业,深感其中的差异,撰文分析两者的联系和区别,供读者朋友参考。
1 管理软件公司用的技术一般是老的,稳定的,成熟的技术。比如.NET Remoting,Windows Forms,Web Forms,而互联网公司一般会追求新的技术,比如Redis,微服务,Hadoop等。管理软件公司会使用SQL Server Analysis Services作OLAP分析工具,而新的互联网公司会采用Spark,Hadoop等大数据技术来实现。在喜欢搞技术创新的管理软件公司做事,常常会活的比较痛苦。如Linq to SQL出了没多久,Entity Framework出现,Silverlight,WPF后来也是逐渐从公众视野中消失。ASP.NET MVC的出现,大批Web Forms程序员找工作变难了。现在ASP.NET Core 的出现,不晓得会不会导致ASP.NET MVC程序员的失落。
2 管理软件公司侧重于业务实现,互联网公司侧重于高并发,高可用,用户体验等。管理软件的用户一般是工厂各部门文职人员,一个大公司也不过100来号人员同时在线,对业务的实现相对要求高,这样可以节省人力,节约成本,而不是增加成本。有的管理软件提供了大量的批核功能,每走一个流程,每确认一个步骤(下订单,发货,产生发票,收款)都要批核,我个人认为这样的管理软件是增加用户成本,降低效率。把工厂当成一个合作的整体存在,销售部负责下订单,生产部负责在规定的时间完成订单生产,采购负责及时的购买所需要的生产物料,这是一个密不可分的整体化运作,任何一个环节卡住会造成信息不流畅,甚至会导致生产停滞。多年以前,我们在网上注册一个帐号,输入用户名,密码等信息,提交时提示电子邮件必须输入,这时我们输入的密码也会被清空,重于用户体验的互联网公司,会考虑到这种情况,帮忙我们记住之前输入的密码,这时只需要输入电子邮件即可再次提交。再比如我们出门打车,遇到路远了或是路偏了,打车师傅可以拒载。这是非常不友好的用户体验。我们是客户,的士师傅是应用提供商,得罪客户的事,就是跟钱过不去。新兴的互联网公司(滴滴和优步)改善用户体验,不仅比原来的的士价格便宜,还提供随叫随到的服务。想像一下,在大城市,一个女孩子拎着重重的行李箱,到处找车,是多么糟糕的用户体验。而互联网公司将改善此体验,只需要站在原地,司机师傅主动来找你,完全体验到打车是一种服务。我个人认为,即使滴滴和优步减少补贴,甚至停止补贴,在同等的价格下,滴滴和优步仍旧有生存的空间,因为他们改善了打车服务体验,也就是用户体验。
3 管理软件公司的技术升级常常来源于程序员,互联网公司的技术变更多的来源于业务需求。所谓成也萧何,败也萧何。处于软件行业顶端的软件公司创造技术解决问题,提供开发工具维持企业利润,中小公司则应用技术解决业务问题。软件业相当频繁的技术更新,造成了大批老技术程序员失业,从而进一步增加了软件公司的生存成本。现在市场上几乎找不到或是很少能找到Delphi程序员,还有一些我们没有听说过的技术(他们的确存在于现实的公司中),Delphi程序员要么失业,要么转型。那软件公司呢,大量的用Delphi开发的,非常优秀的Delphi程序还是需要人员维护,软件公司面临两个选择:要么用新技术重写,要么养几个老技术程序员一直做维护。软件公司的老板都是人精,不可能将公司的未来受一两个程序员控制,所以就用前一种方案,用新技术改写,这样的目的主要是好招人,老程序员离职了再招新程序员,努力将公司的命运控制在自己手中。我们公司的C/S(Windows Forms)程序员常常会担忧以后找不到工作,当他们的上司,常常需要体会他们的这种压力。技术上要将一些通用的重要的技术方案交给他们做,让他们建立信心,同时也给他们安排一些热门技术的培训,作为管理人员,也需要对他们的未来负责,对他们的绩效给予一定的相对优质的评定。互联网公司的技术变更,比如大数据的需求,数据的来源形式和格式多种多样,原有数据挖掘方案解决不了,迫切需要做技术变更以适应这种变化。于是就有对Hadoop,Spark这种大数据技术的需求,更厉害的互联网公司甚至于重建一套大数据平台,以保证处于行业领先地位。
1 管理软件公司的同事头脑相对固化,互联网公司则灵活一些,它们存在的理由是创新。管理软件作为一种管理思想的软件实现,应该是一种管理模式,方法和思路的固化,不允许或是少量允许变化。试想一下,规定的流程不跑,数据没经过运算,自然没有想要的结果。举例说明,大部分的ERP软件约定的流程,客户下订单,物控部跑MRP计划,产生物料采购需求和半成品的加工需求,最后成品完成入库,向客户发货,财务结算等。这是制造业ERP的基本流程,不过贸易公司的ERP则可以不这样跑,可以直接向供应商下订单,然后发货到客户,自己甚至都不用租赁仓库,直接提供供应商到用户的端到端(直运业务)业务模式。这些思路决定了管理软件不需要创新,按照约定俗成的或是上司规定的流程完成即可。常此在这样的思路下工作,人会失去创新血液。管理软件的员工常常会被产品设计人员的思路导向,创新会自食恶果。互联网公司则充满着创新。正如马云所说的,银行不努力,成就了支付宝,邮局不努力,成就了顺丰,通讯不努力,成就了微信。后者甚至产生了颠覆的力量。当初专为大学生准备的大众卡套餐动感地带,10元包300条短信息,被微信彻底颠覆。
2 (中小公司模式)管理软件公司是人才培养的摇篮,是产生高级工程师的地方。互联网公司因为业务变更频繁,技术更新快,不适合纯技术人员生存,常常是技术人员走管理,转销售的地方。管理软件公司有明确的人才培养方案,一个老程序员带几个年轻程序员,像老母鸡带小鸡一样,一步步教导这个怎么实现,那个如何设计会更有效率一些,直到新人变老手,初级程序员变中级工程师。比如我们在管理软件公司学到的,借助于缓存可以提高效率,改善性能,用反射技术可以做成插件式系统,用动态语言可以把系统做成可扩展的,这些技术随着程序员年岁的增长,慢慢学会并灵活应用。互联网公司因为技术变更快,Web 2.0,云计算,互联网+,大数据,技术更新非常频繁,只有达到垄断级别的公司才可以生存。我们都是凡人,能进入各个领域的垄断级别的公司都非常不容易,即使进入,项目迭代周期短,KPI压力大。(我这里说的适合于中小公司,大公司不适合于此小节描述。)
3 管理软件公司适合纯技术人员生存,互联网公司则相对重运维+技术。比如上一节我提到的缓存技术,互联网公司将此发扬光大,提供一整套的分步式解决方案(Redis,MongoDB)。程序员不仅仅要会调用API,还需要部署服务器,理解它们的运作机制。在管理软件公司,为了增加产品的高可用性,我们提供集群,镜像,数据库复制,数据库日志等技术,保证系统7*24不间断运作。而互联网公司对此要求更高,他们还要求高并发。我们知道数据存在磁盘上,读取数据或保存数据是一个很合理的操作,管理软件增删查改都是这样模式,但互联网公司对此还不满意,因为多人并发的存在,数据需要保存在内存中才能满足高并发的需求。还有高可扩展性,为了升级管理软件,我们停止服务器程序,或者重启下机器是很常见的操作,但互联网公司对此零容忍,他们要求更新系统时,不能停止服务,或是非常短暂(秒级)的停止服务。后者要求系统可以做到热插拨,这跟USB接口做到热插拨并成为业界标准是同一个趋势,我们知道Oracle升级补丁包时,可以不用停止数据引擎服务,这个特性对互联网公司非常重要(SQL Server用镜像技术也可以达到此目的)。总体来说,管理软件公司只需要把技术做好,而互联网公司要求在技术之外,还需要了解运维层面的知识。
1 管理软件公司的大部分员工发展前途光明,互联网公司适合明星员工创业。在互联网公司做事的员工,技术常常非常专业,也就是一种商业模式下的技术实现,因为互联网公司需要用户,需要流量,需要变现,他们的创业压力非常大。传统的管理软件公司,搞好了客户关系,拉到几个订单,买几部电脑,招二个程序员就开始干活了,是个人走向创业的快速路径。做得一般的管理软件,实现客户要求的单据,流程和报表,相当于一个数据库的增删改查程序,做的好一点的管理软件,融合了一些管理理念,加入了部分行业需要的特性,是一个软件+理念(思想)的载体。做的更优秀的管理软件,成为行业的标杆,几乎成为行业的代名词(模仿了互联网公司,比如团购就是美团和大众点评,看电影就是猫眼)。比如我们说ERP,大家就会想到SAP,Oracle,Sage,Epicor,Dynamics等。这些管理软件成为其它软件厂商抄袭模仿的典范,促进了大量的中小企业的诞生。我们知道,互联网公司只会让竞争者失败出局,或是以收购结束,而管理软件公司不仅不会吞并小公司,还会为小公司的发展指明了技术方向。
2 (大公司模式) 互联网公司的技术相对完善,分工明确,程序员可以在一个领域或数个领域成为专家。管理软件公司由于已经走到行业顶端,技术人员常常需要转销售,转销前,转二次开发。处于食物链顶端的软件公司,比如云计算(Azure,AWS),数据库(SQL Server,Oracle,MySQL),ERP(SAP,Oracle,Epicor,Dynamics),他们的研发中心常常会控制保留在本国,很少或是根本不会让国外团队或分公司参与开发核心技术。这就导致了我们常常是做他们的二次开发工具。成为一个行业的专家,有时候会有高处不胜寒的感觉,也意味着对其它领域的选择更少。精通于一门技术,成为公司运作上的一个零件,只有在特定的环境(大公司)才有用处。就好比浓缩铀只能用于造核武器,而菲利浦的白炽灯却能走进千家万户。
1 互联网公司相对容易产出新概念,新名词以吸引大众眼球,以此创造概念经济。管理软件公司墨守成规。比如笔者在2006年所经历的Web 2.0,那时满大街的都是这种宣传材料,没过多久这种概念就过时了。正如现在全民创业,云计算,互联网+,大数据等,相信不久也会从我们的公众视野中消失,取而代之的是大批的互联网公司消亡。管理软件公司则很少会这样,MRP,ERP还是上世纪90年代的概念,现在仍然适合于企业管理软件的设计思路。尽管ERP之后还有产生ERP II概念,不过也不怎么流行。管理软件公司相对务实,能把物料需求计划(MRP)跑流畅,基本上公司的信息化水平就上了一个大台阶,也不会再去追求管理创新。金融也是一个不适合创新的领域,记得 一个经济学家说过,我们应该将所有的经济学家从社会上去除,因为金融改革就是扰乱社会秩序。国际金融炒家索罗斯的至理名言也曾表述,我们就是为了创造一种假象,然后在人们认识到真相前提前退出游戏。
2 管理软件公司人员缺少销售观念,互联网公司员工更多的会关注到到商机,常常会考虑把技术转化为价值。我们这里不讨论阿里员工抢月饼的是非,单从市场角度来看,我是挺佩服这几个程序员。他们学以致用,将技术转化为对自己的福利。管理软件公司的员工则比较缺乏市场情结。他们还在研究新版本的开发工具有哪些产品特性,期待以拖放的方式就能设计出工作流的软件厂商。如果能把几年工作的成果抽象提炼出来,形成一些公共的开发类库,方便以后的开发,这是一个小小的进步。进一步的,能把管理软件中相同的操作界面和模式总结出来,做出一些相对通用的界面和控件,比如数据输入Entry,数据查询Enquiry,数据列表List,报表Report,数据查找Lookup,自定义查询Query等,初步形成一个开发框架。再进一步,我们用自己提炼的开发框架,用自己参与和理解的技术理念,做出一套产品,这也算是一个小小的进步。技术进步的每一个阶段都可以为你的职业发展带来无穷的好处。熟练的程序员再也不担心找工作没人要。成为一个领域的资深开发人员,可以为自己赢取技术主管或经理的职位。做出一个领域或行业的产品,如果在合适的时机碰上会做市场的销售人员,创业也是非常有可能的。马云说过,梦想是要有的,万一实现了呢。
2016-12-30
于广州