返回介绍

码农小王的一天

发布于 2025-01-22 00:38:48 字数 2842 浏览 0 评论 0 收藏 0

上午 一大早去上班, 小王很高兴,因为项目经理5天前分给了他一个模块进行开发,自己辛辛苦苦,加班加点好不容易把它从界面到业务逻辑到数据都给弄好了,终于能喘口气了。 

到公司刚坐到座位上, 项目经理就跑来了: “小王, 客户看了你刚做完的模块,他们改变了需求, 让你那个界面需要加一个“优惠码”的输入框。”

小王不满的说: “为啥要变啊, 之前签的需求确认书里没这一项啊, 他们怎么不早说? 经理恶狠狠的说: “哪儿有那么多为什么? 不做的话客户就不给尾款, 你想不想要半年的奖金了?”

小王赶紧禁声,心里恨恨骂了一句, 但还得老老实实的去改界面。

小王想起了最近看的一本书,布鲁克斯写的著名的《人月神话》,其中提到软件系统的复杂性远远超过建筑业和制造业, 软件的需求是在人的脑子中的, 用自然语言都很难完整、准备的表达出来。

一般情况下,人们只有看到一个运行的系统以后才会说: “ 奥, 我要的其实不是这个... ” ,需求的不确定性是导致软件复杂的重要原因。

看来这个复杂性在自己身上应验了。 

赶紧看客户发过来的文档吧, 写的真烂, 真是“业务逻辑”啊, 一点逻辑都没有 !

去问经理,经理有些地方也不明白, 只有去找客户再确认了,

时间就这么一点一点的耗过去了。 中午 吃饭的时候,小王偶然听到客户给领导说,不就是加一个简单的优惠码吗? 分分钟的事儿, 这程序员怎么说两天才能做完? 不是消极怠工就是偷懒, 用加班来治他们!

小王敢怒不敢言,心里又骂了一句。

吃过饭,回到办公桌, 小王困的受不了, 昨晚看美剧看的太晚了, 趴在桌子上睡会儿吧。

没想到竟然做了个梦,梦见他的 Eclipse 变成了一个智能机器人,可以用自然语言来编程了:

小王: 我亲爱的 Eclipse 啊, 现在领导要在界面上加上一个“促销码”的输入框, 6 点前能搞定吗? 我和女朋友约了一起吃饭, 今天是情人节,你懂的。

Eclipse: 尊敬的主人,请您解释一下这个促销码的含义

小王: 你可以问问我们经理的 Word , 哦不对,是 WPS , 他那里有更准确的解释, 我先给你讲讲, 是这样的......

Eclipse : 尊敬的主人, 您去喝点咖啡吧, 4 点半之前我估计就弄好了。

小王: 对了, 你给小张的 Eclipse 联系一下,他那里有处理促销码的接口, 别忘了分布式的事务处理啊

Eclipse : 放心吧, 包在我身上。

在梦里小王正想着程序人生是多么美好的时候, 突然听到“咚咚咚”的声音, 有人在敲桌子, 原来是经理: “小王,你还睡觉? 赶紧写代码啊,明天客户就要看了”

小王从美梦中醒来,再次面对“残酷”的现实 : 

Eclipse 还是这么原始, 还得一行一行的敲代码, 计算机发展了这么多年,怎么还没有突破性进展?

从二进制语言,到汇编语言,再到高级语言,其最基本的、最核心的东西依然是顺序,循环,分支, 即使加上面向对象,动态语言,库, 框架,计算机语言“弱智的本质”仍然没有改变。 

只好通过苦逼的码农来填充需求和代码之间的鸿沟了。 下午 还是困的厉害, 小王从电脑背包中取出提神的利器:咖啡, 公司的免费咖啡早就没了,节减成本,真抠门。

一连喝了两杯自带的咖啡以后, 终于精神了。

开始编程!

小王悲催的发现, 虽然是加了一个输入框,但是整个界面不知道为啥乱掉了, 赶紧去找美工去改 CSS,小王还是挺喜欢和这个漂亮MM打交道的。 

改了界面还不算, 业务层的代码也不能拉下, “优惠码”得处理啊, 这个优惠码是否正确? 是否使用过 ? 得一系列判断, 还要计算优惠码带来的折扣。

小王想:我自己肯定处理不了, 得调用促销模块的接口, 领导说去找小张,他在负责促销模块, 这个小张有点自视甚高, 看不起别人, 我和他不对付,真是不想找他。 

可是小王又想起了领导的训示: 软件开发不是流水线, 码农不是流水线的工人,我们一定要精诚合作,年底要360度考评啊,末位淘汰!

看在工作和钱的面子上,还是去找小张吧。   改了业务层还不够, 数据库里也得存下来啊,记录下这个人已经用过优惠码了,不能再用了, 这谁来记录,是不是还是小张管?

奥对了, 小张的促销模块和我的模块好像不是一个数据库啊, 是不是还得处理分布式事务?

小王仰天长叹: 唉,这软件真 TNND 复杂。

牵一发而动全身, 客户怎么能想到一个小小的改动只是冰山一角呢, 下面才是大头啊!

这编程也是, 为啥就不能真正的组件化呢, 就像普利司通制造的轮胎一样, 造出来后几乎可以用到所有的汽车上。

我们为啥不能开发一个登录模块,让它用到所有的软件系统中呢?

实际情况是: 我们也有一些框架和库, 但是必须要对它们进行定制,进行很多的二次开发才能适应需求,这样的工作必须通过手工完成,尤其需要处理很多细节,通用性实在是太差了。

不是我们程序员笨, 在长期的斗争中,我们学会了分而治之,把一个问题划分为一个一个的模块, 让这些模块低耦合,高内聚, 我们还学会了分层,让各个部分的联系达到最小, 可是所有的这些努力只是把复杂性降低了一点, 本质的复杂性依然存在。

所以在现有的条件下, 不管用什么技术,组成软件的各个组件之间依然是高耦合的(相对对应传统产业而言), 高耦合会带来巨大的难以想象的复杂度, 而这种复杂度只好有苦逼的码农去搞定了。 后记: 编这个故事主要想说明“软件的复杂性”, 首先是需求在人的脑子里,难于准确描述 , 其次编程语言还处于非常原始的阶段,第三软件模块无法复用,并且高度耦合。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文