当前位置:网站首页>软件开发的一点随记
软件开发的一点随记
2022-07-06 07:36:00 【王崇卫】
这篇不是笔记了,想随便写点东西,可以算做是随笔吧。挺久没写文章了,可能逻辑会比较混乱,想到啥写啥。
说明一下,自己技术水平也不咋滴。只不过是一时的思考记录。
遇到的事情:
- 最近的工作,程序需要加入标准的通信和功能。在增加和设计较为庞大的程序的时候,需要做设计程序结构,会考虑很多,如何解耦,层与层接口,模块之间,参数,ram,flash,运行速度。
- 前一周刷到up王木头学科学的一个视频。
- 这两天,和一个大佬也讨论下了,自己在编程时的一些,架构,重构。
- 最近开始学习了解aoutosar的分层结构这一块。
- 新的一个项目,需要较短的时间,完成从零的编码,到交付。
综上就比较让我产生了一些有关编程,可能又无关编程的思考。
一. 软件工程
我是机电专业的,软件工程的理论课是没有的。只能说在工程中,在编程的学习过程中,或多或少接触的。
对软件工程是什么。我很推荐大家去看“王木头学科学”这个up的一期视频《软件工程背后的思想是如何影响编程的》。以下的几点,也是我从视频中截取的。
1. 软件工程复杂性很高。
这个复杂性指内部的耦合性很高。
三重耦合:功能与功能之间的耦合,人和人之间的耦合,过去与未来的耦合。
功能与功能之间的耦合:软件的开发,如何设计划分层次和模块,这都是人来做的。
人与人之间的耦合:多人的协作之间产生的麻烦。
历史与未来的耦合:新的功能在原来的基础上更新,不止受到历史的影响,还要考虑未来这个模块的更新迭代,改变和不确定性。
2. 解耦的思想
在不损失功能的情况下,用性能和资源去交换更低的复杂度。
模块化:功能和功能之间的解耦
高内聚低耦合。分层:需求和实现之间的解耦
比如:操作系统,autosar。主要是对上层的支持和完备。分层更偏向业务驱动。模式化:对未来的解耦
设计模式、基本范式、编程原则。不知道如何办,这些规则是兜底方案。对未来的不确定性得到一定的解耦,避免了很多坑。
对这些,很多时候是深有感触的。比如我在现有基础上需要加入标准的通信和功能,需要引入协议栈,对象字典。几十个对象的意义需要设置到具体的功能上,基础的架构并不能直接使用,需要做转换。大部分参数还需要默认值,参数设置,可以保存。功能上要要求时序,性能,等等。还需要优化其他的代码来,为加功能提供flash,和ram。
在考虑对抗未来的不确定性,以及减少部分复杂度,做到一些接口模块,无关协议,无关硬件。这样解耦会稍微彻底一点。但往往性能,效率是变低的,资源占用的更多。
历史带来的耦合,新加的时候又不愿意真的耦合进去,某一些层就又更倾向重构,重构则又需要考虑,未来的修改与不确定性。任务时间节点,并不允许做更多的重构。
和同事的协作还好不多,不然复杂性又多好几倍。
思考如何做耦合尽量少一些,效率高一些,纠结到最后只能抉择如何取舍。
二. 工程的折衷
这里的折中,也是上面提到过多次的取舍。这个词我印象中,还是本科大三学《自动控制原理》巨老师,在课上讲的控制的折中。大概讲的是,控制器设计时候,在调节速度,和不超调之间如何考虑的。
又想调节的快,还要不超调是矛盾的。又想复杂性低,耦合少,还想性能效率高,资源占用少这也是矛盾的。这种鱼和熊掌不可兼得的事情,工程师面临了很多。每一次的面临,都需要在各方面的考虑之下,做抉择,做取舍,做折中。
这是一种能力、经验,这种能力也需要有意识的去锻炼,在每次的折中中去分析、体会。
工程项目的魅力也是这样的体现。很多往往时间急迫,资源有限的情况,在诸多折中的过程中完成了。有的时候是妥协,更多的时候是权衡。
三、对抗复杂、适应复杂
复杂性是我们不愿意的,也是不可避免的。人的大脑很厉害,只要我们接受,并且训练,我们的大脑就会变得复杂。
我一个工作的同事,昨天看着电脑书本,说,不知道大学时候为啥这么简单的东西,就是没看懂。现在看起来好简单。
因为大脑经过工作的训练,大脑的复杂度得到提升,回首往事,自然简单。就像一个做linux的同学,突然要做一下rtos,那不也是降维打击。要面对的复杂度直接降了多少级。
对抗的复杂性,提高我们自己的能面对的复杂性,也是在抵抗未来的复杂性,不确定性。
读书也是在提高我们内心的复杂度,之前刷视频,看到董老师的一句话:书不能解决问题,但书可以让你不再纠结一些问题。可能不会让你成为很成功的人,书往往会让你成为一个更加深刻和周全的人。
如果看到最后,感谢你花的这两分钟。
边栏推荐
- Comparison of usage scenarios and implementations of extensions, equal, and like in TS type Gymnastics
- Bugku CTF daily question: do you want seeds? Blackmailed
- Cf1036c class numbers solution
- word怎么只删除英语保留汉语或删除汉语保留英文
- Get/post/put/patch/delete meaning
- Typescript variable scope
- 【MySQL学习笔记32】mvcc
- 【mysql学习笔记29】触发器
- Ble of Jerry [chapter]
- [CF Gym101196-I] Waif Until Dark 网络最大流
猜你喜欢
【MySQL学习笔记32】mvcc
Significance and measures of encryption protection for intelligent terminal equipment
qt颜色与字符串、uint相互转换
TypeScript接口与泛型的使用
Sharing of source code anti disclosure scheme under burning scenario
JDBC learning notes
杰理之BLE【篇】
Ble of Jerry [chapter]
Ble of Jerry [chapter]
Related operations of Excel
随机推荐
Ble of Jerry [chapter]
Set picture annotation in markdown
Summary of Digital IC design written examination questions (I)
Opencv learning notes 9 -- background modeling + optical flow estimation
Apache middleware vulnerability recurrence
TypeScript接口与泛型的使用
TypeScript 接口属性
OpenJudge NOI 2.1 1749:数字方格
剪映的相关介绍
JMeter performance test steps practical tutorial
Three no resumes in the software testing industry. What does the enterprise use to recruit you? Shichendahai's resume
If Jerry's Bluetooth device wants to send data to the mobile phone, the mobile phone needs to open the notify channel first [article]
TypeScript 函数定义
烧录场景下的源代码防泄密方案分享
TS 类型体操 之 循环中的键值判断,as 关键字使用
leecode-C語言實現-15. 三數之和------思路待改進版
Fundamentals of C language 9: Functions
Is the super browser a fingerprint browser? How to choose a good super browser?
成为优秀的TS体操高手 之 TS 类型体操前置知识储备
How MySQL merges data