毕业将近20年,一路走来,见证着IT技术最辉煌的20年。每个人的经历不一样,看到的东西也不一样,有很多雷同,但也有各自的体验。在即将离开现有公司的空闲时刻,总结一下自己,也是对自己的未来的一个鼓励。
我1995年进入南航,专业工业自动化。按说和IT关系不会很大,但自己对计算机软件莫名的喜欢,于是就走上了这条不归路。
在高中的时候,老师让我玩玩打字机,说大学的时候会有用,电脑的键盘和这个差不多。的确也是如此,大一开始练习打字的时候使用fasttype,和打字机基本一个体验。
1996年,班里几个同学凑钱买了台电脑(当然不包括我,那时的电脑对我来说是天价),没事的时候帮他们敲代码,体会VB编程的乐趣。我们的专业编程是汇编、C和FORTRAN,C倒是很强大,基本啥都能做,毕业设计也是用C去做工业设备控制,可惜没继续走这条路。
也是1996年,忽然在图书馆接触到JAVA,觉得这个很有前途,看了不少书,但那时感觉很多资源都不具备,也没机会实战一下。
大学四年就这样浑浑噩噩的过了,更多的在对付考试。1999年毕业进入江苏省计算所,才真正开始了自己的编程之路。
99年的时候Delphi非常火爆,企业应用很多都用它,计算所也不例外。不过Delphi的确很方便,做个简单的增删改查那真是分分钟的事情。在这里学到了很多非常好的理念,这里简单的列一下:
在业务上,对企业的管理认识有了很大的提高,战略、计划、生产、进销存、财务都有涉及,更多的时候是驻厂开发。这一做就是两年,感觉总是忙于项目,外面都不知道啥情况,只知道纳斯达克崩盘,但好像和我们没啥关系。
2001年换了家公司,东南大学背景的,现在是上市公司了,金智科技。由于互联网的兴起,大家开始意识到BS架构会更加方便,于是开始尝试。公司选择了ActiveX+ASP。当时感觉ASP不太适合做复杂的管理界面,JAVASCRIPT的应用还比较初级,基本没有看到大量应用在企业管理的案例。
在金智科技,相比于学院派(很多同事是刚毕业的和学校的老师),有了更多的实战经验,逐渐的负责起项目和软件平台的搭建。在这里做了几个比较有成就感的事情:
金智科技对文档规范比较重视,那时就有专门的QA推行CMMI,自己在文档的编写上有了很大的提升。设计也开始正规化,使用Rational Rose,开始全面的使用面向对象的思想去考虑问题。两年后公司开始转型做教育软件,自己感觉不是很想往这方面走,刚好赶上买了房,想找个离家近的,于是离开公司,去了江宁的大陆集团。
2003年,业界对javascript的认知已经提升了很多,开始有牛人写出了漂亮的组件,刚看到的时候感觉是震惊的,做一个真正的BS架构的管理界面,一天就做出来了,一周就搭建了一套纯BS的管理框架,有点小佩服自己,呵呵。可惜商务没谈拢,没有立刻使用这套组件来开发,使用了.NET来进行系统开发。公司又找了几个高手,在这个组件基础上重新开发,准备打造一套完整的J2EE架构的系统,直到我离开,这套系统也没能商用。
在大陆享受了两年朝九晚五的生活,还是很值得怀念的。期间也乘机了解了PB(老系统),Power Designer。这时候SAP和Oracle的ERP系统已经很火了,也简单接触了下,那时以为这么强的系统应该可以打天下了,后来才发现没这么容易,他们也要需要很多定制才能在企业落地。
在大陆印象最深的是画流程图。那时做华能电厂的项目,厂方要求每个功能都需要把完整的流程图画出来,全部理解一致后才能开发。这一画就是几个月,visio倒是用的挺溜。
公司本来发展还好好的,但陆总的眼光太超前了,2003年要搞电子商务,跑上海去折腾了一年多,花了几千万,最后搬回来几台服务器,2005年要自己建电厂,要做全国第一家信息化示范电厂,到处融资,地都选好了,结果国家收紧能源开发,结果一个好企业就这样被耗死了。
2005年机缘巧合进了中兴通讯南研所,开始了9年的大厂之旅。也开始了JAVA+LINUX之旅,后续再也没有回到Windows的怀抱。
那年IPTV开始发力,我负责EPG部分,就是呈现给消费者的点播导航界面。做了这么多年业务,这种展示类的项目那就是小儿科了,更多的是要考虑并发性、可靠性、扩展性,毕竟消费者的数量级不像企业用户,至少都要按百万级的用户数去考虑。服务器的监测与调度、数据缓存与同步都是要关注的。整个team大概10来人,从内容管理到分发,到呈现,到点播成功,差不多花了4个月时间,完整的打通了整个系统。当看到上传的视频被点播出来时,真是有点小激动。
中兴的食堂真是一绝,啥都有,好吃又便宜,赶上南航食堂了,呵呵。一年后,被华为的魅力诱惑(主要是钱),成为华为人。
华为那时的IPTV可以说没有,处处被中兴打压,于是提出要做一个IPTV中间件,最后取名MEM-媒体娱乐中间件,通过它可以对接各种辅助系统,如CA、MDN。那时也没有太多选择,JBOSS+STRUTS+JSP。全新的架构,全新的代码,那时应该还是不算落伍,在大家不分昼夜的努力下,3个月就交付了,我们这些老杆子就开始转为系统设计师-SE,开始了长达7年的设计生涯。
IPTV系统涉及的东西很多,CMS、CDN、EPG、CA、专用硬件、机顶盒,多系统之间的配合非常重要,系统的可靠性、扩展性、性能都是要重点关注的,华为有专门的DFX设计。CMS只是内容管理,做了双机冷备;CDN是内容分发和内容服务,自己实现了软件层的内容调度服务;EPG是内容展示,也自己实现了一个叫EDS的软件调度服务,调度都是基于网段进行的,对运营商来说,这是基本的数据。在技术上,IPTV的架构一直保持着2006年的框架,没人去想着使用新的技术去重构,这是华为一些部门的弱项,这也可能是运营商需要的,稳定压倒一切。
在华为最大的收获是考虑问题更加全面,什么需求都要思前想后,找到一个最合适的方案,而不会着急动手。跨产品之间的沟通、协调、对接都是常态,特别后期需要和各种合作方进行沟通交流。大家都是为了做好一件事情,而不是相互推诿,所以也没感觉困难。
期间也经历了华为从游击队到正规军的转变,CMMI、敏捷流程在研发体系一步步实现,打下了华为后续蓬勃发展的基础。
2014年,做了一个重大决定,离开华为。转了Marketing后,总觉得不是自己想要的,还是希望回到技术的路上去,出去闯闯,也没想着换部门。
离开后,和朋友合伙创业,那时OA还有些市场,14年8月开始决定自研一个标准的OA产品去推广。很长时间都是我一个人在奋斗,各种选型、对比分析,最后基本确定了maven + Spring框架 + oauth2 + Spring MVC + Hibernate + Activiti + EasyUI + JSP + Velocity + Mysql,界面模仿阿里。花了4个月时间,完成了平台的开发,准备在厂里进行验证。厂里觉得界面不够好,体验不是很好。这时候刚好有朋友说他有一套OA产品源码,产品和项目负责人都觉得比我的好,厂里也不负责的说就要这个了,而且简单修改下就能推向市场,于是大家做了一个错误的决定。买下来后,又要全面的熟悉、功能调整、bug修复、UI设计,一直忙了半年,才算推出。这期间,钉钉等免费OA云平台已经迅速的占领了市场,小型的标准OA系统基本都被逼上了绝路,传说中的市场渠道根本不堪一击。
之后大家还想再开拓下其他市场,如二手房东平台等,但资本已经没有耐心了,创业的路就这样无疾而终。虽然创业失败,但自己又重新拾回了编码的乐趣和信心。
接着去了捷为,一个专门做项目管理软件的公司,虽然不大,20-30人,但东西做的还比较细,不过框架也是很老的struts,工作流也是自己实现的,很多需求都不满足。我做的第一件事就是引入Spring MVC、Activiti和EasyUI,要考虑兼容性,自然struts和SpringMVC并存。这时候公司启动了云平台版本,重新设计一款轻量的项目管理软件,类似teambition。一起完成初步的规划和设计后就离开了,夫妻店容易产生矛盾,现在想起了,和当当有些相似,呵呵。
现在的量子云码(以前叫三元色,三个技术系出来创业)在BOSS直聘上找到我,公司做防伪溯源,自己的专利技术和未来蓝图吸引了我,这一做就是三年。
刚来的时候,公司都没有后台开发,全靠外包,问题一大堆,ERP、管理平台和扫描服务、积分平台分了三波外包,自己玩自己的,ERP使用STRUTS+EXTJS3,管理平台使用Spring Roo,扫描服务使用Spring Boot,积分平台更牛,直接使用PHP。接手这些系统,全部调通,都花了一个月。
ERP是给企业用的,定制不可避免,第一步依旧是引入了Spring MVC和EasyUI,老功能维护,新功能使用新技术。
到2016年底,公司决定对接微信红包,现有的系统再去做这些明显的代价太大,于是重新选型,采用更好的技术去做这些,由于时间紧,又要考虑后续平台的扩展性,最终选定Spring MVC + Shiro + Hibernate + Redis + dubbox-zookeeper + EasyUI + JSP,现有人员都比较熟了,可以很快做出来。Dubbox用起来后,发觉最大的问题就是启动依赖,相关项目一定要按照调用顺序一个个的启动,虽然看了一些解决方案,但总感觉不是很好。
这时候已经看到ElementUI了,让自己眼前一亮,决定尽快的把架构调整过来。红包平台完成后,就着手引入VUE+ElementUI,用来替换EasyUI。本来考虑了前后台分离,但那时还没有合适的前端人员,只好将就了一下。到2017年中启动的农产品溯源项目,就正式切换为VUE+ElementUI。
2017年中,前端人员到位,开始考虑前后端分离,到年底决定启动新版ERP的设计和开发。平台先行,在业务还没讨论清楚的情况下,先把技术平台搞出来。
第一个重大变化就是引入MyBatis,成为Hibernate+MyBatis。Hibernate在增删改上用起来比较简单,但查询的确不是很好用。
第二个变化就是引入MongoDB。MySQL在老版ERP中已经证明无法再进行性能优化了数据达到几千万后,一个库存统计要5-6分钟。溯源查询时,袋-包-箱这种多层嵌套关系,使用文档数据库会更加的方便。
第三个就是实现真正的前后端分离。大家的分工界面更清晰了。当然最后因为人手问题,后端开发人员还是参与到前端开发中去了,成了传说中的全栈工程师。
新版的ERP上线后,经过验证,体验和性能都得到了很大提升,数据增加对查询性能基本没有影响。当然安装和配置的复杂度也增加了不少,有得必有失。
系统问题解决了,随着企业的增加,运维的工作量越来越大。运维平台成了一个比较急需的东西。先尝试使用Zabbix来进行设备系统的监控,后面又让人使用Python开发监控脚本,基本能完成监控的事情了,有问题也会自动邮件通知,只是体验不是很好,专业的事情还是要专业的人。
转眼就是2018年,公司拓展了不少小企业,每个企业部署一套ERP对他们来说有点贵,我们自己管理也麻烦,于是决定启动云平台项目,实现一套平台多家企业在上面用,同时把量子云码的管理也整合起来。
要做云平台,现有的ERP技术肯定是不够的,自然要参考电商的架构。通过这些年的发展,各种架构越来越多,而且都是经过了商业考验,是时候做一个技术跟上时代的产品了。
基于dubbo的缺陷和社区活跃度,果断放弃,投入Spring Cloud的怀抱。注册中心Eureka,做主备;业务网关Spring Gateway,做集群;配置中心Apollo;熔断限流Hystrix/Feign;调用链监控sleuth+zipkin;运行环境Docker+K8S;日志Kafka+ELK;微服务Spring Boot;数据库MySQL8+MongoDB,做集群;缓存Redis,做集群;前端VUE+ElementUI;工作流Activiti;区块链EOS(后来也和迅雷链做了集成);文件服务FastDFS,做集群。一看满眼新技术,心里是不是很爽?呵呵。其实现在这些东西应用都比较容易上手,有强大的百度和谷歌支持,更有github和码云。但一些细节,可能就需要花时间去找解决方案了,如Feign的超时机制。这个时候,代码生成器也不再考虑,Idea有非常好用的插件-EasyCode。
第一版云平台做出来后,准备上线试用。新来的产品总监觉得这就是一个垃圾,于是业务系统重新需求分析、设计、开发。唯一安慰的是相关技术还是要继续使用的。技术平台不是业务平台,但没有业务的技术平台也没有实际的价值。
这一整,几个月过去了,自己也迷茫了,再加上其他些原因,感觉离开公司才是最好的选择,于是便有了这篇文章。短短几页,把自己这些年记忆中的东西都梳理下,有些已经忘了或记忆偏差了,但一颗向往技术的心依旧。