写下这个文章的时候,刚从一个复杂的linux服务端网络应用项目中脱出,除去身心的疲惫不堪后,不得不反思标题中的问题,如何破局?这样在下次面对相似问题时,可能就多几分幸存的几率。
“最想知道我是在什么地方死的,这样我就可以避开死亡了。”
这个是查理芒格多次讲过的话。但是很多人被困难问题击败后,都没有找到自己是在哪儿失败的?如何破局?首先是找到在哪儿挂的和挂的原因。
一. 在哪挂的
1. 不稳定,经常crash,还有各种功能异常偶发的Bug;
2. 性能不佳,号称大几十万的并发量,但是根本就达不到;
3. 出现bug了,难于定位分析,即使定位后,难于根本解决;
4. 难于扩展,以应对新增需求和变更;
以上问题都是表像,如仅仅认识到这样的程度,根本无法破局。
二. 深层原因
1. 架构设计复杂
架构繁复,背离简约。很多地方明明可以使用简单的机制实现的,非要往复杂方向设计;
2. 模块划分失当
软件模块多,复用量少。代码抽象程度不够,导致相似功能的不同模块,有很多重复代码;
3. 错误机制众多
软件里充斥了很多表面看着正常,但实际错误的机制方法;
4. 部署配置繁复
配置参数太多,部署实施复杂,无详细实施说明;
5. 缺乏基本测试
没有单元测试,没有模块测试,没有稳定性测试,没有自动化测试;
6. 缺乏版本控制
没有版本号,没有分支控制,没有自动编译;
三. 更深层原因
1. 项目管理缺陷
可能的根本原因还是对软件工程不了解;
2. 架构设计缺陷
可能的根本原因是似乎没有架构设计能力;
3. 不解常用机制
常见的linux软件机制方法不了解;