这篇不是笔记了,想随便写点东西,可以算做是随笔吧。挺久没写文章了,可能逻辑会比较混乱,想到啥写啥。说明一下,自己技术水平也不咋滴。只不过是一时的思考记录。

遇到的事情: 最近的工作,程序需要加入标准的通信和功能。在增加和设计较为庞大的程序的时候,需要做设计程序结构,会考虑很多,如何解耦,层与层接口,模块之间,参数,ram,flash,运行速度。 前一周刷到up王木头学科学的一个视频。 这两天,和一个大佬也讨论下了,自己在编程时的一些,架构,重构。 最近开始学习了解aoutosar的分层结构这一块。 新的一个项目,需要较短的时间,完成从零的编码,到交付。 综上就比较让我产生了一些有关编程,可能又无关编程的思考。

我是机电专业的,软件工程的理论课是没有的。只能说在工程中,在编程的学习过程中,或多或少接触的。 对软件工程是什么。我很推荐大家去看“王木头学科学”这个up的一期视频《软件工程背后的思想是如何影响编程的》。以下的几点,也是我从视频中截取的。

1. 软件工程复杂性很高。 这个复杂性指内部的耦合性很高。 三重耦合:功能与功能之间的耦合,人和人之间的耦合,过去与未来的耦合。 功能与功能之间的耦合:软件的开发,如何设计划分层次和模块,这都是人来做的。 人与人之间的耦合:多人的协作之间产生的麻烦。 历史与未来的耦合:新的功能在原来的基础上更新,不止受到历史的影响,还要考虑未来这个模块的更新迭代,改变和不确定性。

历史带来的耦合,新加的时候又不愿意真的耦合进去,某一些层就又更倾向重构,重构则又需要考虑,未来的修改与不确定性。任务时间节点,并不允许做更多的重构。 和同事的协作还好不多,不然复杂性又多好几倍。 思考如何做耦合尽量少一些,效率高一些,纠结到最后只能抉择如何取舍。

二. 工程的折衷 这里的折中,也是上面提到过多次的取舍。这个词我印象中,还是本科大三学《自动控制原理》巨老师,在课上讲的控制的折中。大概讲的是,控制器设计时候,在调节速度,和不超调之间如何考虑的。 又想调节的快,还要不超调是矛盾的。又想复杂性低,耦合少,还想性能效率高,资源占用少这也是矛盾的。这种鱼和熊掌不可兼得的事情,工程师面临了很多。每一次的面临,都需要在各方面的考虑之下,做抉择,做取舍,做折中。 这是一种能力、经验,这种能力也需要有意识的去锻炼,在每次的折中中去分析、体会。 工程项目的魅力也是这样的体现。很多往往时间急迫,资源有限的情况,在诸多折中的过程中完成了。有的时候是妥协,更多的时候是权衡。

三、对抗复杂、适应复杂 复杂性是我们不愿意的,也是不可避免的。人的大脑很厉害,只要我们接受,并且训练,我们的大脑就会变得复杂。 我一个工作的同事,昨天看着电脑书本,说,不知道大学时候为啥这么简单的东西,就是没看懂。现在看起来好简单。 因为大脑经过工作的训练,大脑的复杂度得到提升,回首往事,自然简单。就像一个做linux的同学,突然要做一下rtos,那不也是降维打击。要面对的复杂度直接降了多少级。

如果看到最后,感谢你花的这两分钟。