前几天突然怀疑自己是不是得了老年痴呆,脑子里老是忘事。认识贾纯就叫她蒋楠,认识周聪就叫她“洋葱”。我已经是个油腻大叔了,大肚大脸双下巴已经伴随我很多年了。昨晚,我疯狂地吃了一个火锅。当我吃它的时候,我的快乐超出了图表。转念一想,自己应该很快就会超越油腻大叔,成为胖大叔了。这可能是上天对我小时候做了一些坏事的惩罚吧。哎呀,上面说馋嘴上来了,点个小龙虾外卖吃,可是小龙虾吃起来好麻烦,还不如吃火锅爽口,大口大口的吃吧。我想回到过去,像《蝴蝶效应》的Ivan一样改变自己。但是对于我这种从小学习不好的人来说,不管我怎么改,都应该是这样的。可以改变什么?就像伊凡,为了弥补自己的错误,他回到过去,试图抹去痕迹,但事情总是事与愿违,非但没有好转,反而变得更糟。如此反复,他在越来越混乱的过去和现实之间来回奔波,直到无可挽回的结局。伊万试图改变过去,希望能和暗恋的凯蕾幸福生活的梦想也化为泡影。在这种情况下,“过去的已经过去了,不要用你的精力去回忆和后悔你在人生转折点做出的任何决定。”该吃该喝该喝,做个没心没肺的人似乎也不错。言归正传。我在设计和开发一个系统的时候,一开始就很有信心,一切都在掌控之中。随着时间的推移,出现了各种问题,项目交付时间一拖二拖三。我心想我做错了什么,为什么?为什么我在维护一个系统的时候,总是不稳定,修了一个bug又出现一个,出了问题系统不断重启,老是被业务方投诉,为什么?老实说跑不好,可以给自己省点零食。我们做错了什么?首先我们看一下我们开发一个系统需要做些什么:首先产品会PRD出来,大家一起review。这时候程序员需要理解逻辑:业务语言、流程、函数、异常;然后定义业务架构和系统架构,是分布式还是单体,业务和系统模块怎么划分,边界怎么定义,业务的上下游依赖和边界是什么;然后开始构建项目,用Java还是Go,用Git还是SVN,不管是基于Maven还是Gradle;然后做一些技术选择,用SpringCloud还是Dubbo,用Guava,用Slf4j还是直接用Log4j;选择什么来存储;是否使用缓存;分工明确,构建自己的模块和系统,Code代码;模块集成或系统集成;测试,在线交付。这是一种理想的开发方式,但实际过程要复杂得多。我们会遇到需求不明确、需求错误、细节考虑不周全、技术不可行等诸多问题。在开发过程中还有一些非功能需求需要考虑:提高工程开发效率;健壮性、可维护性、可扩展性;高并发、高可用、SLA;兼容性;A/B测试;回归测试;开发运营;管理复杂性;以及我们解决问题的方式:当我们解决类似的问题时,有些人通过抽象来解决;有的人觉得反正代码逻辑超级简单,复制代码就可以解决;代码诞生,维护一些乱七八糟的代码;if/else嵌套超过三层;看框架源码不能帮助我提高写代码的速度,浪费我的时间;反正能看懂,就不写注释和文档了;复杂的解决方案没有迭代优化;明天上线,今天必须交付,然后就没有了;重新启动以解决问题;不学习解决问题的工具;……由此可见,开发一个系统从来都不是一件容易的事情,除了要完成业务逻辑,还有很多非功能性的需求需要考虑,其中一个做不到就会造成蝴蝶效应。大量的用户/数据会造成大风暴,而少量的用户/数据可能会造成小雨。蝴蝶效应的定义:“蝴蝶效应是指在一个动力系统中,初始条件的微小变化可以带动整个系统长期发生巨大的连锁反应。”我们读过的源码和书不是没有用,每一个知识都可能在未来的某个时候被我用到,学习会打开我的思维而不是关闭它。通过不断的小学习,触发蝴蝶效应,获得巨大的收获。但自己似乎又走上了另一条不归路,油腻码叔的路越来越踏实!点此阅读作者更多好文
