甲方爸爸,大概你要的是代码生成器吧?

作者:邹溪源,长沙资深互联网从业者,架构师社区特邀嘉宾!

1)

有一天,我的朋友Y童鞋分享了他正在做的一个内部开源项目,这个开源项目从外表上看,跟目前市场上那些代码生成器本没有特别大的区别,所以我兴趣并不大。

在他给我介绍了一下具体需求之后,我才体会了他的意思,并提起了那么一丢丢兴趣。。

毕竟,听起来有点“鬼扯”,为啥?因为,他居然试图依靠这个项目来生成”单元测试“。。。。

他:定义好数据库表和结构,然后就生成逻辑方法和代码、以及界面,还同时把“单元测试”代码给生成了,免得程序员要花时间去思考代码逻辑之余,还要想怎么写出可测试代码。

我:这样生成的代码还有灵魂么。。

他:有啊,编写高可测试代码,不就是我辈中人,这些有追求的码农应该实现的目标么?

我:这种模式怎么越看越想埃里克埃文斯大佬说的“Smart UI”模式啊。。

他:你倒这么说,也有那么一点点像。

2)

我:当然,能够生成单元测试倒也可以。毕竟大部分单元测试看起来似乎是一模一样的。无外乎就是“ Arrange\Act\Assert”,AAA操作猛如虎,测试代码一把梭。

他:我这个东西,生成的代码,除了看起来提高了单元测试覆盖率之外,其实,并不能提高代码的质量。

我:是什么逼得你要花时间去开发这样的代码生成器呢?

他:还不是被这班菜鸡开发者们产出的劣质产品闹腾的。我不是想着省测试的钱,又能提高产品的质量么?就自然而然只能靠压榨“程序员”来实现了。但是让我来对这么多人的代码进行审查,还是太难了。这不,用单元测试来操作,不就可以了?

3)

我:你们太难了。为啥这么赶啊?

他:这不是甲方爸爸要加需求,他说得倒是好:加需求也就几行代码,多简单。但是我们这边,就得忙翻天,太特么累了。

我:那能不能多招几个测试?

他:端到端测试,只是看起来将缺陷扼杀在摇篮而已,实际上。。隐藏在冰山下的缺陷呢。。客户就是小白鼠啊。再说,我们现在家业太小,测试有两个了,再招就请不起了。。功能是不能少的,bug是不能多的,我只能想想单元测试这种办法了。

我:好吧。。我们也一样。。

1)

之前有个朋友老张介绍了一个故事,仿佛跟这个有点类似。他有幸参与了一个交通信息化的项目,这个项目的业主是国企单位,属于“体制内”的企业。

在过去一波有一波的信息化发展过程中,这些体制内的企业仿佛成为了许多IT企业竞相薅羊毛的对象。为啥,国企项目多、钱也不少,关键是国企对软件质量要求不高啊。

许多企业借助国企项目,他们依托所谓“快速上线”的神器,将中华民族艰苦奋斗的精神发挥到了极致,公司能够在最短的时间内,将原本停留在脑海里的软件,快速的转化成为实现,并部署到甲方爸爸的现场环境中。

至于软件的质量、软件的工程化水平,对不起,不重要?用户体验?性能?功能可用性?重要么,不重要。先快速上线回款再说。于是,这些企业获得了业绩的腾飞,老板们赚得盆满簸赢,好不自在。

而且老板们还会吹:我们公司最大的优点,就是在逆境下生存的能力,能够在最短的时间消化需求,做出最符合客户需求的软件。

好吧,仿佛这也是软件工程的一种方向?快速开发。。。。

2)

然后,有那么几年,市场突然间就“做烂“了。一方面,国家将投资方向重点放在了房地产领域,对信息化的投入也逐渐收紧了许多;另外一方面,企业过去匆忙上线了太多的软件系统,不同软件系统之间的对接沟通困难,操作过程缺乏连贯性,使得基层员工开始抗拒这些”看似“能够带来效率提升,却容易出现各种质量问题导致自己过去几天工作量返工的所谓”信息化“系统;另外,大家也都很清楚,效率提升其实带来的是”裁员“,首先被裁的…

总之,有那么一段时间,国企对信息化是“弃若敝屣”的。

1)

但,随着“互联网”和“共享出行”的兴起,又让这个概念重新热炒了起来。

老张他们公司也有幸接到了一个这样的项目,公司还是一家非常大的出租车公司,拥有二十多家子公司,员工超过2万人。这个项目的目的是打通出租车和旅客的关系,借助于手机实现快速出行,同时打通企业内部信息孤岛,让总公司领导能够第一时间看到各种数据的流转情况,为建立科学决策提供依据。

老张被选为这个项目的负责人。在项目启动会上,他意气风发,向业主和公司老板们保证,将带领公司团队与甲方团队一起,以饱满的姿态打响这场战役,为业主的业绩腾飞贡献自己的一份力量。

然而,但项目启动后,他才深刻的明白这究竟是一个怎样的坑。

2)

首先是业主关系,由于业主是一家涉及大几万员工和二十几家子公司的大型集团公司,需要梳理的业务表单非常复杂,业务流程和体系,远比甲方爸爸预想的要复杂得多。

其次是开发周期短,不知从何时起,国企对于软件系统的印象就是“简单、容易、很快就能实现”,仿佛一个需求只要说出来,这般不要命的程序员们就能很快的实现功能。当老张跟他们提到需求太多,根本做不完时,甲方爸爸甚至说:怎么可能有做不出来的软件系统,是不是你能力不行?

再次是外部系统多,由于不同的子公司往往采购了不同的系统,要统一对接到一个系统 。

还有就是涉及的技术点多,需要在许多领域进行专门的技术攻关,由于公司暂时缺乏相关资源,使得开发过程屡屡收到阻塞。

3)

经过长达几个月的需求调研,老张编写了一份超过一千页纸的需求规格说明书,并获得了业主的批准,但项目正式开始时,他却只获得了短短半年的开发周期。此时,他手上能够调动的开发者资源,才不过10余人。

为了干完这个项目,他和项目团队的成员不得不牺牲周末和假期,辛苦坚持了半年,才把项目功能都开发完,但在项目实施环节时,由于子公司与总公司的意见不统一,根本用不起来。

最终,项目崩盘,公司倒闭,甲方将近一年的投入近乎白费。老张和项目团队也白白辛苦了大半年,还得去劳动仲裁,找老板讨薪。

回顾这段时光时,老张说了一段话:企业信息服务化的项目,看起来合同工价很高,其实都是坑啊。有的业主,根本不懂什么叫“合适的软件”。

在互联网如此发展的今天,这些业主,要的还是“快速开发”。但凡想到什么就往里面加,程序员不猝死太难了。往往今天提,明天就要,用了一次就不用了,我根本不知道这些软件,干出来有什么意义。

仔细想想,许多传统企业领导想转型到互联网,不就是这样么,恨不能一天就把项目干完,干完项目就“升官发财”,至于项目能不能用,谁知道呢。。

也许,他们要的并不是软件,而是一种“代码生成器”。嗯,输入“甲方爸爸的一万种需求”,输出“一个功能齐全、包容万物、自由变化的软件”。。

作为有追求的码农们,我们能像Robert大叔在《代码整洁之道-程序员的自我修养》一书中写的方法:选择“拒绝”么。额。。生存要紧。。偶尔吐吐槽,饭还是得恰啊。

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pdf.js来预览pdf文件_适用于Dynamics365与PowerApps的注释预览组件

powerapps/dynamics365适用的注释预览/批量下载组件自定义组件为预览功能原生预览支持的文件类型:图像,zip,音频,pdf支持批量打包注释为zip下载到本地使用浏览器预览支持:音频,视频,图像,pdf,文本,xml,json等,理论上只需要浏览器支持打开的文件类型,均可预览使用方法:1.导入解决…

消息队列,我只选RabbitMQ!

高并发架构是架构师的必修课,而消息队列,则是王冠上最闪亮的那颗明珠!能否驾驭消息队列这款高并发神器,亦成为架构师的试金石。作为专注.NET领域十多年的老架构师,下面从队列本质、技术选型、实战应用三个方面&#xf…

python比较三个数_python经典练习题(三)

人生苦短,你需要python继续学习python第一题题目:输入三个整数 x,y,z,请把这三个数由小到大输出不借助sortnum1 int(input("请输入第一个数"))num2 int(input("请输入第二个数"))num3 int(input("请输入第三个数&qu…

使用Jexus 容器化您的 Blazor 应用程序

在本文中,我们将介绍如何将 Blazor 应用程序放入Jexus 容器以进行开发和部署。我们将使用 .NET Core CLI,因此无论平台如何,使用的命令都将是相同的。Blazor 托管模型Blazor 有两个托管模型,它们的要求不同,本文主要基…

【A】 Natasha3.0 引擎亮给你,请你来折腾

文章转载授权级别:A一 、 引言Natasha 距离上个 2. 版本大概有1个月了,在4月份里我把模板与引擎进行了重构,旨在更抽象、规范、合理,方便其他人参与开源、定制。接下来我将从 引擎的结构 、类库的使用及新热的 Source Generators …

linux ps mysql_linux系统中ps指令使用详解

在linux系统作为和unix和ubuntu相同的系统,ps指令经常被用到查看程序进程的状态,但是这个指令具体怎么用您会吗?本文就以centos为例,结合项目中服务器的实际应用,给大家讲解下ps指令的用法。一、参数a——显示现行终端…

ASP.NET Core在CentOS上的最小化部署实践

引言本文从Linux小白的视角, 在CentOS服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用。在开始之前,我们还是重温一下部署原理,正如你所常见的.Net Core 部署图:在Linux上部署.Net Core App最好的方式是使用Kestrel 服务…

面试官:你不懂六大设计原则,回去等通知吧!

一、前言不知道大家是否有这样的体会,就是在学习设计模式的时候,看了很多书籍,也照着很多示例把每个模式挨个敲了几遍,但过了一段时间后,就会忘了一大半。或者有的朋友尝试在业务编码中使用,却越用越复杂&a…

Asp.Net Core Filter 深入浅出的那些事-AOP

一、前言在分享ASP.NET Core Filter 使用之前,先来谈谈AOP,什么是AOP 呢?AOP全称Aspect Oriented Programming意为面向切面编程,也叫做面向方法编程,是通过预编译方式和运行期动态代理的方式实现不修改源代码的情况下给程序动态统…

C++函数模板和普通函数的调用规则

C函数模板和普通函数的调用规则: 普通函数可以进行自动类型转换。 函数模板必须严格类型匹配。 C编译器优先考虑普通函数。 如果函数模板可以产生一个更好的匹配,那么选择模板。 可以通过空模板实参列表的语法限定编译器只能通过模板匹配。 代码如下&#xff…

.NET Core技术研究-通过Roslyn代码分析技术规范提升代码质量

随着团队越来越多,越来越大,需求更迭越来越快,每天提交的代码变更由原先的2位数,暴涨到3位数,每天几百次代码Check In,补丁提交,大量的代码审查消耗了大量的资源投入。如何确保提交代码的质量和…

python最大堆heapq_Python-堆的实现与heapq(最小堆库函数)

目录简介堆是一个二叉树&#xff0c;它的每个父节点的值都只会小于或大于所有孩子节点(的值)。它使用了数组来实现&#xff1a;从零开始计数&#xff0c;对于所有的 k &#xff0c;都有 heap[k] < heap[2*k1] 和 heap[k] < heap[2*k2]。 为了便于比较&#xff0c;不存在的…

深入浅出 ASP.NET Core 与 Docker 入门课程说明

点击蓝字“角落的白板报”关注我哟加个“星标★”&#xff0c;好文必达&#xff01;深入浅出 ASP.NET Core 与 Docker 入门课程说明《深入浅出 ASP.NET Core 与 Docker 》是一门新的课程&#xff0c;本课程所有的内容全部免费&#xff0c;以图文配合视频的形式呈现。课程完整视…

微软将在新西兰建设其第一个数据中心区域

昨天新西兰各IT群都被一条消息刷屏了&#xff1a;详情可见&#xff1a;https://news.microsoft.com/en-nz/2020/05/06/aotearoa-disclosure/NZ的第一个Azure region region 是云计算的一个术语&#xff0c;也就是各大云运营商机房部署的位置。目前微软、亚马逊、谷歌等比较大的…

使用 kind 快速搭建一个 Kubernetes 测试环境

使用 kind 快速搭建一个 Kubernetes 测试环境Introkind&#xff08;Kubernetes IN Docker&#xff09; 是一个基于 docker 构建 Kubernetes 集群的工具&#xff0c;非常适合用来在本地搭建基于 Kubernetes 的开发/测试环境。想写一篇 kind 的文章很久了&#xff0c;但是之前的 …

麻雀虽小,五脏俱全

入职三年&#xff0c; 除了参与公司核心产品研发外&#xff0c;另外负责了一个2C的小项目&#xff1a;调用API拿到解析结果 & 计费。❝项目最初是.NetCore 1.0-Previewsqlite部署在IIS上&#xff0c;闲来没事&#xff0c;这个项目已经被我完全重写&#xff0c;在此记录一些…

内存迟迟下不去,可能你就差一个GC.Collect

一&#xff1a;背景1. 讲故事我们有一家top级的淘品牌店铺&#xff0c;为了后续的加速计算&#xff0c;在程序启动的时候灌入她家的核心数据到内存中&#xff0c;灌入完成后内存高达100G&#xff0c;虽然云上的机器内存有256G&#xff0c;然被这么划掉一半看着还是有一点心疼的…

Mayor's posters POJ - 2528 (离散化+线段树)

题意&#xff1a; 在1~10000000这个区间中读取n个海报的区间信息&#xff0c;后面的海报会覆 盖前面的海报&#xff0c;问最后能看到几张海报.&#xff08;本题是一道bug题下面会提&#xff09; 题目&#xff1a; The citizens of Bytetown, AB, could not stand that the c…

[PAT乙级]1018 锤子剪刀布

大家应该都会玩“锤子剪刀布”的游戏&#xff1a;两人同时给出手势&#xff0c;胜负规则如图所示&#xff1a; 现给出两人的交锋记录&#xff0c;请统计双方的胜、平、负次数&#xff0c;并且给出双方分别出什么手势的胜算最大。 输入格式&#xff1a; 输入第 1 行给出正整数 …

java 开源控件_一些好用的开源控件

工作两年&#xff0c;一直都在做些编码方面的表面功夫&#xff0c;实现了很多很炫的功能&#xff0c;在此写下一些体验。有些比较小的dll文件我会发上来&#xff0c;如果是开源组织的代码我会把地址附上&#xff0c;毕竟人家是会更新的。大家还有什么好用的开源控件欢迎补充。一…