1. 软件工程复杂性很高。 这个复杂性指内部的耦合性很高。 三重耦合:功能与功能之间的耦合,人和人之间的耦合,过去与未来的耦合。 功能与功能之间的耦合:软件的开发,如何设计划分层次和模块,这都是人来做的。 人与人之间的耦合:多人的协作之间产生的麻烦。 历史与未来的耦合:新的功能在原来的基础上更新,不止受到历史的影响,还要考虑未来这个模块的更新迭代,改变和不确定性。
历史带来的耦合,新加的时候又不愿意真的耦合进去,某一些层就又更倾向重构,重构则又需要考虑,未来的修改与不确定性。任务时间节点,并不允许做更多的重构。 和同事的协作还好不多,不然复杂性又多好几倍。 思考如何做耦合尽量少一些,效率高一些,纠结到最后只能抉择如何取舍。
二. 工程的折衷 这里的折中,也是上面提到过多次的取舍。这个词我印象中,还是本科大三学《自动控制原理》巨老师,在课上讲的控制的折中。大概讲的是,控制器设计时候,在调节速度,和不超调之间如何考虑的。 又想调节的快,还要不超调是矛盾的。又想复杂性低,耦合少,还想性能效率高,资源占用少这也是矛盾的。这种鱼和熊掌不可兼得的事情,工程师面临了很多。每一次的面临,都需要在各方面的考虑之下,做抉择,做取舍,做折中。 这是一种能力、经验,这种能力也需要有意识的去锻炼,在每次的折中中去分析、体会。 工程项目的魅力也是这样的体现。很多往往时间急迫,资源有限的情况,在诸多折中的过程中完成了。有的时候是妥协,更多的时候是权衡。
三、对抗复杂、适应复杂 复杂性是我们不愿意的,也是不可避免的。人的大脑很厉害,只要我们接受,并且训练,我们的大脑就会变得复杂。 我一个工作的同事,昨天看着电脑书本,说,不知道大学时候为啥这么简单的东西,就是没看懂。现在看起来好简单。 因为大脑经过工作的训练,大脑的复杂度得到提升,回首往事,自然简单。就像一个做linux的同学,突然要做一下rtos,那不也是降维打击。要面对的复杂度直接降了多少级。
如果看到最后,感谢你花的这两分钟。