其他
码农小王的一天
到公司刚坐到座位上, 项目经理就跑来了: “小王, 客户看了你刚做完的模块,他们改变了需求, 让你那个界面需要加一个“优惠码”的输入框。”
小王不满的说: “为啥要变啊, 之前签的需求确认书里没这一项啊, 他们怎么不早说?
小王赶紧禁声,心里恨恨骂了一句, 但还得老老实实的去改界面。
小王想起了最近看的一本书,布鲁克斯写的著名的《人月神话》,其中提到软件系统的复杂性远远超过建筑业和制造业, 软件的需求是在人的脑子中的, 用自然语言都很难完整、准备的表达出来。
一般情况下,人们只有看到一个运行的系统以后才会说: “奥, 我要的其实不是这个... ” ,需求的不确定性是导致软件复杂的重要原因。
看来这个复杂性在自己身上应验了。
赶紧看客户发过来的文档吧, 写的真烂, 真是“业务逻辑”啊, 一点逻辑都没有 !
去问经理,经理有些地方也不明白, 只有去找客户再确认了,
时间就这么一点一点的耗过去了。
小王敢怒不敢言,心里又骂了一句。
吃过饭,回到办公桌, 小王困的受不了, 昨晚看美剧看的太晚了, 趴在桌子上睡会儿吧。
没想到竟然做了个梦,梦见他的Eclipse变成了一个智能机器人,可以用自然语言来编程了:
小王: 我亲爱的Eclipse啊, 现在领导要在界面上加上一个“促销码”的输入框, 6点前能搞定吗? 我和女朋友约了一起吃饭, 今天是情人节,你懂的。
Eclipse: 尊敬的主人,请您解释一下这个促销码的含义
小王: 你可以问问我们经理的Word , 哦不对,是WPS , 他那里有更准确的解释, 我先给你讲讲, 是这样的......
Eclipse : 尊敬的主人, 您去喝点咖啡吧, 4点半之前我估计就弄好了。
小王: 对了, 你给小张的Eclipse 联系一下,他那里有处理促销码的接口, 别忘了分布式的事务处理啊
Eclipse : 放心吧, 包在我身上。
在梦里小王正想着程序人生是多么美好的时候, 突然听到“咚咚咚”的声音, 有人在敲桌子, 原来是经理: “小王,你还睡觉? 赶紧写代码啊,明天客户就要看了”
小王从美梦中醒来,再次面对“残酷”的现实 :
Eclipse还是这么原始, 还得一行一行的敲代码, 计算机发展了这么多年,怎么还没有突破性进展?
从二进制语言,到汇编语言,再到高级语言,其最基本的、最核心的东西依然是顺序,循环,分支, 即使加上面向对象,动态语言,库, 框架,计算机语言“弱智的本质”仍然没有改变。
只好通过苦逼的码农来填充需求和代码之间的鸿沟了。
一连喝了两杯自带的咖啡以后, 终于精神了。
开始编程!
小王悲催的发现, 虽然是加了一个输入框,但是整个界面不知道为啥乱掉了, 赶紧去找美工去改CSS,小王还是挺喜欢和这个漂亮MM打交道的。
改了界面还不算, 业务层的代码也不能拉下, “优惠码”得处理啊, 这个优惠码是否正确? 是否使用过 ? 得一系列判断, 还要计算优惠码带来的折扣。
小王想:我自己肯定处理不了, 得调用促销模块的接口, 领导说去找小张,他在负责促销模块, 这个小张有点自视甚高, 看不起别人, 我和他不对付,真是不想找他。
可是小王又想起了领导的训示: 软件开发不是流水线, 码农不是流水线的工人,我们一定要精诚合作,年底要360度考评啊,末位淘汰!
看在工作和钱的面子上,还是去找小张吧。 改了业务层还不够, 数据库里也得存下来啊,记录下这个人已经用过优惠码了,不能再用了, 这谁来记录,是不是还是小张管?
奥对了, 小张的促销模块和我的模块好像不是一个数据库啊, 是不是还得处理分布式事务?
小王仰天长叹: 唉,这软件真TNND复杂。
牵一发而动全身, 客户怎么能想到一个小小的改动只是冰山一角呢, 下面才是大头啊!
这编程也是, 为啥就不能真正的组件化呢, 就像普利司通制造的轮胎一样, 造出来后几乎可以用到所有的汽车上。
我们为啥不能开发一个登录模块,让它用到所有的软件系统中呢?
实际情况是: 我们也有一些框架和库, 但是必须要对它们进行定制,进行很多的二次开发才能适应需求,这样的工作必须通过手工完成,尤其需要处理很多细节,通用性实在是太差了。
不是我们程序员笨, 在长期的斗争中,我们学会了分而治之,把一个问题划分为一个一个的模块, 让这些模块低耦合,高内聚, 我们还学会了分层,让各个部分的联系达到最小, 可是所有的这些努力只是把复杂性降低了一点, 本质的复杂性依然存在。
所以在现有的条件下, 不管用什么技术,组成软件的各个组件之间依然是高耦合的(相对对应传统产业而言), 高耦合会带来巨大的难以想象的复杂度, 而这种复杂度只好有苦逼的码农去搞定了。
你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公众号, 回复消息"m"或"目录" 查看更多文章
有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan QQ: 3340792577
掘金是一个高质量的技术社区,从 Swift 到 React Native,性能优化到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。