专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
OSC开源社区  ·  四名CEO ,扬言要打造新一代基础软件技术栈 ·  3 天前  
程序员的那些事  ·  趣图:开发的常见借口之一 ·  5 天前  
程序员小灰  ·  小米薪资开了,性价比之神! ·  5 天前  
赛尔实验室  ·  针对“本草”等医学大模型的基准构建 ·  6 天前  
程序猿  ·  C/C++大限将至!美国强硬要求:2026年 ... ·  1 周前  
51好读  ›  专栏  ›  码农翻身

码农小王的一天

码农翻身  · 公众号  · 程序员 架构  · 2016-09-07 20:19

正文

上午

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

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

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

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

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

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

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

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

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

时间就这么一点一点的耗过去了。 
中午

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

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

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

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

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

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

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

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

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

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

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

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

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

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

只好通过苦逼的码农来填充需求和代码之间的鸿沟了。
下午

还是困的厉害, 小王从电脑背包中取出提神的利器:咖啡,   公司的免费咖啡早就没了,节减成本,真抠门。 

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

开始编程! 

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

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

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

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

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

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

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

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

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

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

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

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

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

你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公众号, 回复消息"m"或"目录" 查看更多文章

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577

公众号:码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

推荐一个叫掘金的开发者社区,很多技术干货,  我的文章也会在这里分享 : 

掘金是一个高质量的技术社区,从 Swift 到 React Native,性能优化到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。