程序开发是一门与现实妥协的艺术
我们在项目启动之初,往往充满着向往和愿景,期待做出一个满意的作品,而在项目实际落地后,你会发现产出与最初的设想越行越远,甚至背道而驰,心里真是百般滋味。我当前开发中项目就是这样一个活生生的例子。
17年4月中,我当初进入这家公司时,和公司领导沟通过,发现项目前景还是不错的,如果成功了,真的能建立一个新的垂直产业,而公司高层(总经理)表示项目已经开始实际落地,技术团队有十多人,如果我加入,可以由我主导系统开发。最主要的是单位离我家近,半个小时内能到达公司。我抱着期待,甚至都没有对薪酬要求做出沟通,就按上一个公司的近似的薪酬,在合同下签了字。
入职3天,我的培训就是参观公司生产线,熟识公司产品和规章制度。我还没见到直属领导,公司高层表示,直属领导目前在项目现场,你先过去现场参与项目,顺便学习项目背景知识。我想,项目都实际落地了,那系统就已经开发完成了,我加进来的意义不大呀。当抱着对该项目前景的认可,我还是听从安排,到现场和我直属领导见面,也见了到了所谓10多人的技术团队,“高级包工队”。顿时苦笑不已,只有我一个做软件开发的,其他人都是建筑出身的工程人员、项目经理、结构设计人员,我欲哭无泪呀。而我的直属领导直接给我下了命令,你跟着大家熟识一下项目,然后回去花一周时间开发一个控制系统过来安装上去运行吧。晕,系统都还没有,你们就已经现场施工了。还好是试点项目,并对于客户方来说现场也没有正式运营,可以更改和调整通信线路。
我回公司后,找公司总经理谈话了许久,总经理承诺后面补充人员很快到位。我居然相信了,咬牙坚持一周开发了一个简易系统,就是那种采集、调度、终端显示一体的app软件,心想,先把眼前项目应付过去再说。又匆匆赶回现场,安装部署,万幸,传感器等设备状态顺利采集、调度控制也能及时根据设定阈值自动化调度控制,终端配置界面虽然简单,但是勉强能用。
加上客户根本不关心软件一块,调度效果达成了,客户没说什么就通过了。(后续,该试点项目仅运行了小半年就被叫停了,原因是合作方、中间方、客户方出现了利益纠葛,还有就是整个系统不过关,无论是硬件设备、软件功能、线路、通信等,我们后面一直在想如果该项目再晚个半年实施,可能今天公司在这个行业局面就大不同了)
4月底,我回到公司后,整个五一在想着系统架构的事情,技术选型、业务扩展、行业要求等林林种种,最终确定采用微服务架构,后端c++,前端java,脚本lua,覆盖本地系统、云端系统,系统级联,计划分三期完成,并出了技术方案文稿和PPT。
五一过后我直接组织开了个方案确认会议,集团技术领导、公司高层、直属领导对方案除了一些业务提议,并没过多提问,拍板由我负责主导系统开发。我心里听了还挺高兴的,准备好好大干一场。可是,会后我找公司高层商量补充人员的事情,领导直接给我说人员已经到位了,我一看,心里顿时不是滋味呀,一个强电工程师(刚毕业)、一个硬件工程师(集团其他分公司借调的)、一个运维工程师(工作一年),开发还是我一个人。我直接和总经理说我个人无法完成这么大工作量的系统开发工作。总经理和直属领导直接说试点项目已经过去了,你现在有时间开发,不是很急,可以慢慢来,你只负责核心模块开发以及集成,其他可以外包或找现成的服务接口。当项目实际落地后,公司定会扩大技术团队。想想我当时还是太天真了,我重新调整了方案设计,进行了更细项目分期、更粗的功能实现、更通用的对外接口。心想先实现一些简单的架构,后面人手到位做一样。
就这样我走上了一个人开发之旅,从5月份到6底,我一个人完成了本地化系统的架构,核心的几个微服务业编译完成,同时通过一系列调研、沟通、报价、评估等工作,找到了一个合作公司,利用其已有平台承接部分紧急需要实现业务的开发。由于不确定合作是否可靠,我把一期相关业务要求分割成3次给他们,逐步评估他们出的方案。还好,我觉得方案能达成我们业务要求,或许是经费不多的原因吧,公司领导也认可了,他们一期收费才19万左右。
到7月初,领导追问系统开发进度,直言要在8月份在公司展厅构建一比一场景的项目,需要用到全新开发的系统部署。我不得不停下手中开发工作,赶紧和合作公司调试接口,购买某大企业的云端服务器,先部署合作公司的云端系统平台;和硬件工程师对接其开发板的报文通信、解析联调工作;与项目设计、施工等对接业务要求和通信线路;和强电工程师、运维工程师交单通信要求、部署要求。紧张忙碌一个多月的连续转,好在在8月开工时,整个系统已经联调起来,最主要的效果要求基本能满足。
记得8月开工时,工期要求很赶,必须一个星期点亮系统,因为有政府高层一周后来公司参观,该项目是重点考察。我没法和相关人员培训系统组成和通信原理,自己全程参与布线、接线、设备配置、联调、测试,完工那天我已经忙了一个通宵了,回到家已经是早上8点多了。总经理要求接待客户我必须在现场,确保系统运行正常,但我当时简单洗漱完倒头就睡,我家里人没忍心按我说的时间叫醒我,直接没有参加中午的客户接待,幸好当场系统没任何问题。
由于有了公司展厅一比一的联调场景,我后续得以逐渐打磨我的本地系统以及与第三方平台接口等,中途重构了两次:一次是由于主要是由于与直属领导、项目人员交流后,其用于项目的设备、通信具有很多不确定性,不得已只能调整数据采集架构,使得场景适应不同设备不同接口不同通信报文解析的异构组网。另一次是由于设备控制与调度也是不确定,不得已调整了任务调度的架构,使其适应定期、定时、条件、启动、退出等多组态任务策略。多亏了这两次重构,在后续的项目实施中,遇到很多新设备的采用,新场景的应用等都能达成要求。
果然,等到10月份我正开展第2期开发时,新的项目需求提出,但幸好提前了这些相关功能的开发,因此在17年底的几个用于展会、展厅、科技馆、户外工程的项目都能及时满足,除了中途出差几次做现场技术支持外,期间也把运维工程师、强弱电工程师培训起来,他们基本可以承担弱电通信、网络通信、系统部署等工作。我一心扑在第2期的开发上,同时也推进合作单位的二期配套开发,我甚至为了赶进度,独立把双方的通信接口直接完整开发完成,合作单位直接套用就能联调测试。
整个17年,开发中的系统主要支持到两个展厅、一个展会、一个试点(不是最初那个)的项目需求,虽然不算出彩,但也基本按满足业务需要。
18年初,总经理希望我们系统能够支持到其他工程项目,把我们系统组的4人(我,硬件、电路设计、运维)并入了公司研发所(原来只有新材料研发与应用的技术人员),成为其下一个系统开发小组,与原来的工程部门剥离。在研发所,我们组还有论文和专利考核指标,因此18年我们系统组还撰写了9项专利(3项发明),4篇论文。
18年2月开始,集团一直对我们系统开发处于怀疑态度,主要在于为何要找合作公司开发,集团明明有自己的软件中心。其实本系统开发之初,我有和软件中心负责人(内审时已离职)沟通过,他们并没有相关技术储备,也无法抽调人手。但,我还是专门准备了从业务需求、多个合作单位调研(涵盖集团软件中心),优缺点分析和评估,后期扩展与服务支持等大量文案,并就我如何设计我的方案、如何分期实现,当前进度如何,呈现效果怎样,相关经费花费在哪里等进行多次汇报。一直持续到4月底才内审接触,其间开了3次大的汇到会议,另外与集团技术主管、集团软件中心也碰面了多次,集团软件中心说他们的好多分析,让他们拿出具体技术方案又吱唔掩盖着。到了最后,集团总裁希望能把我们分公司系统组并入集团软件中心,统一调度管理,而在我们分公司总经理坚持本系统开发和工程结合紧密,不好调动作罢,仅仅要求外协经费要求严格管控。嘿嘿,还是经费问题,我们集团技术老总有句话我至今难忘:公司请你们来就是解决系统开发问题的,怎么花钱找外边的人开发,那你们是干什么吃的!我当时真想撂下这活不干,如果不是我们总经理能理解和支持。
然而据我了解,一个试点就要花费四五十万,一个展会下来也要二三十万。有时项目设计人员为了追求所谓的高档,直接选用了近万元的工业服务器,其实很多就一个上千的工控机能解决的事情。但是由于这些实实在在看得见有单据的设备,这些并不会纳入审计考虑。但这些花费终究还是落实到了公司对这个行业得投资成本计算上。
内审期间,我还好没有终止开发工作,到5月份完成了2期开发工作,同时也和合作单位的2期进行联调,都很ok。然后我赶紧把与合作单位的经费走完付款流程,哪知道还是卡在财务那里。直到19年5月才把2期款项付完,一共17万多一点经费,分4期支付。还好我们总经理出面和合作公司达成了其他方面的合作和后面实际项目落地后的一些承诺,合作公司才没有降低与我们
合作的力度。另外防止后面商务活动的需要,相关软件著作权、软件第三方测评也在这段时间拿下。
18年6月后,我持续了第三期计划,并删减了大量由合作公司开发的内容,改由自己开发,一些暂时用不到,或少用到的功能进行切底删除。并与合作公司签订采购合同的购买软件的方式,实现了第三期开发工作,直接到18年9月底份完成了联调测试。期间我们还支持完成了一个很重要试点项目的部署工作,该试点项目在业主获得好评,使得公司在业界打开了局面和知名度。
18年11月,我开始准备实施第四期的开发计划时,集团遇到了财务危机,因此分公司由于基金被抽调,很多开发经费逐渐被裁减,我的四期是无法通过经费获得外协实现。为此我首先把四期一分为三,我们自行开发、合作公司开发、集团软件中心开发,合作公司开发那边我说动总经理和合作单位签订,其提供的每个硬件设备可以通过加收软件License费用,但需要配合我们后面的开发工作。合作单位或许也看好这个新兴行业吧,同意了我们的提议。解决合作单位的开发经费问题,我软件中心拉入参与系统开发,让他们基于其原有系统上,提炼和改造我们系统本地化设备场景部署图元,态势展示相关方面,这些方面没有呀,也不影响系统运行,有了就是锦上添花,我只要开发数据接口,将数据实时推送给他们系统,我们系统本身的数据都与其完全隔离。
但是18年底,我们组的强电工程师离职了,因此我还得接过他的这部分工作,因为公司给我的答复是当前公司经费遇到困难,暂时不对外招聘。另外一方面原因是,由于本项目一直是公司再投资,暂时没有盈利能力。
整个18年,我们系统支持到3个展会、两个试点、数个其他工程项目,但是在这个行业还是没有达成盈利,还是公司投资为主。
19年初公司调整了组织架构,我们小组从研究所调出,回归到原来的系统工程部名下作为系统组,辅助工程人员完成项目系统开发工作。并整个工程部归一到**事业部,采用事业部编制经营。事业部自负盈亏,那么我们的年终收成与盈利挂钩。但19年过半后,我们盈利还负100多万,整个事业部明显信心不足。因此我们系统开发不再以产品的方式进行开发,我原来设想打造一个行业平台级系统的原想落空了,系统是以项目方式得以延续,大大小小项目若有需要,都得尽量做到支持。但我内心还是坚持把系统打磨成一款产品,但由于应对不同项目需要,逐渐也在系统打了很多窟窿(对第三方平台接口和按需开启的功能模块)。
一直持续到19年4月底,碰碰磕磕的完成了四期的测试联调。但是有个不好的消息,就是我们组的运维工程师也进行了离职。他离职前,我曾在公司流程提议为其加工资,但是才升了小三级,也不过每月加了500多,而他新入职的新公司多了2000+,只能祝福他在新岗位一切安好。带了两年的小伙,眼看他能独挡一面,从数据集成、系统部署、系统运维、云端管理、业务把控都开始得心应手了,另外还能配合做技术支持、联调测试等工作,但是公司没能留住人才,对我打击挺大的。没办法,我只好再次接过他的这部分工作。(PS,其间还招聘一个多年工作经验的运维工程师接收这部分工作,但是仅仅一个月又离职走人了,我想该是有两个原因,这位工程师入职时被公司压工资级别了,另外我真的没时间向带第一个小伙那样带他,造成他入职后不是很适应。等我发现也晚了,再说我们项目目前都是出于试点项目,不挣钱,对于运维工程师来说还是活不多,很无聊。)
由于鉴于项目现状,我从18年12月开始,就抛弃了我原先自行开发云端平台的想法,而采取基于目前大企业提供的服务平台仅作接口开发。经过2个月的调研,在19年过完春节后,我默默不声张的开发与第三方云平台系统的接口开发,将数据推送该平台,利用该平台作后续的云监控、设备保养、2/3D可视化、大屏展示、场景联动、终端开发等一些列功能。在19年4月底,与四期开发任务几乎同时完成,然后我也部署到展厅一比一的项目上运行测试,到目前为止运行良好。只是原先以为公司有团队实现云端部分自行开发,我预先私下努力架构出来的云服务和测试代码就此夭折了。
19年6月到19年8月份,这段时间我主要工作是做一些小项目的技术支持,主要是我们的项目设计(结构、部署、施工)人员得知我们系统支持其他领域的调度控制后,业务员为了拿单,大都给客户承诺支持在ipad手机上操作控制各个设备态势,造成需要我把本地化自动化调度系统给这些项目做支持。换领导的话是,我们这个行业需要与国有行业打交道,行业壁垒和利益分配问题不能一触而就,支持一下其他项目工程也好发挥一下系统的价值。我无力反驳,只好对系统做出一些调整,进行模块化划分、微服务分割,使得项目按需选择功能模块。
持续2年的系统开发,前段时间,我无意翻开了我最初设计的系统方案,对比了当前系统情况,只有小部分匹配原有设想,大部分都已经偏离了初衷,虽然也有一些改动后出彩的地方,但更多是斑驳不堪,虽然系统能支撑项目需要,运行也良好,但已经开始变得越来越复杂、他人切入时间越来越长了,更麻烦的一点,公司的相关人员都觉得系统是你开发出来的,所有事情找你处理就好,因此目前业务梳理、技术支持、开发设计、测试联调、设备选型、合作单位的商务沟通等都开始移交到我这里。
目前新获得几个单子都是试点项目,看来这个行业要推广还是阻隔挺多,但好在公司转变策略,只做解决方案提供方,不再做投资经营,投资经营交由合作公司。因此,哪怕试点项目还是有盈利和回款的,就是单薄点,起码能支撑我们事业部的日常运转。
只是,我奢望的团队越来越远,我期待的系统也越行越远了。
系统开发到今天,虽然我知道系统存在这样或那样的一些问题,我也知道需要调整、重构、修复他,但是不断扑来的项目和不时地业务调整(我们总经理、领导常常会有一些构想希望加入系统里面,我们的业务员会不时给客户冒点新点子)一直推着开发前行。目前回顾最初设想,主体功能还在,但是技术选型、系统指标、乃至系统架构等等都已经大变样。我心里一再强调这不是我意愿,但是它的确就是我纠结现实妥协得到的产物。
程序开发是一门与现实妥协的艺术相关推荐
- GPT-4要革程序员的命?智能开发的理想与现实 | 爱分析调研
"生成式人工智能(AIGC)将在三年内终结编程." --Matt Welsh,前哈佛大学计算机科学教授.Google 工程主管 GPT-4 也许还不完美,但智能开发时代真的来了 美 ...
- 模型驱动开发的幻象与现实
转自http://www.kcomsoft.com/Article49.asp [编者按] "十年内,没有任何单独的软件工程进展可以使软件生产率有数量级的提高",Frederick ...
- 小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)?
自 2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web.iOS.Android之后,第四大主流开发技术. 与之相随,小程序的开发生态也在蓬勃发展,从最初的微信 ...
- Java中国象棋博弈程序探秘[1]——博弈程序开发概述
博弈程序开发概述 转载请保留作者信息: 作者:88250 Blog:http:/blog.csdn.net/DL88250 MSN & Gmail & QQ:DL88250@gmail ...
- 微信小程序开发入门教程-文本组件介绍
学习小程序开发要从哪开始呢?我们是开始顺序学习官方文档么?如果一开始就从头开始读官方文档,恐怕用不了多久你就放弃了.计算机是一门实践科学,我们学习的目的是为了解决现实问题.要么你想在互联网创业,开发一 ...
- 为程序开发人员量身定制的12个目标
为程序开发人员量身定制的12个目标 对程序员们来说挑战自我非常重要,要么不断创新,要么技术停滞不前.新年伊始,我整理了12个月的目标,每个目标都是对技术或个人能力的挑战,而且可以年复一年循环使用. 0 ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...
本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
- 软件开发是一门手艺活
开发软件并不像是工厂在制造产品.20世纪80年代,大家惊闻日本在建造"软件工厂",这些工厂能通过流水线作业批量生产高质量的软件.而这在当时的技术水平下是天方夜谭,即使是现在的技术也 ...
- 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础
本节书摘来异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...
最新文章
- 研究院正式启动“智源学者计划”,公布候选人名单,并发布首个联合实验室...
- CSU1632Repeated Substrings(后缀数组/最长公共前缀)
- 开源论文推荐:含人脸识别、实例分割、跟踪、SR等
- Linux加载Linux的引导程序,Linux的引导-引导加载程序:LILO和GRUB
- ASP.NET Core服务器综述
- SpringBoot JPA
- python 查看当前目录_Python学习第156课--ls的运用、环境变量以及PATH
- 单应矩阵,基本矩阵,本质矩阵
- STC学习:八位数码管滚动显示
- 阿酷三合一版_阿酷插件3.2开源版
- 账结法”、“表结法”两种财务会计处理方法
- MySQL聚集索引与非聚集索引相关总结
- 二进制负数转换成十进制
- SAP FICO 第二节 LSMW导入财务科目
- Java 解析括号内子字符串的内容
- 从核酸检测平台崩盘看性能工程的范围
- 新版WIFI小程序分销系统微信源码序WiFi大师版流量主搭建独立源码WiFi分销源码
- iPhone手机在Apple启动logo处卡住,无法开机该怎么办?
- java获取当前月和周的第一天和最后一天
- Virtual Box 后台运行虚拟机
热门文章
- 【我的2014】 12年IT有悲有喜
- 互联网金融是唐僧肉,可大圣已归来
- [“空头计划“第二期 ] QQ机器人(Python ^3.7 + 机器人框架NoneBot-beta2最新版本)实现
- Android活动返回不在再支持startActivityForResult()后的处理方法
- 开源公告|分布式深度学习训练工具PatrickStar正式开源
- 电商后台管理系统简介
- rateless code 与喷泉码(Fountain code)
- 如何防范鱼叉式网络钓鱼及其他钓鱼攻击
- office 打开wps乱_WPS文档怎么清除格式解决复制粘贴格式错乱的问题
- bootstrapTable点击行事件添加