关于软件开发的一些思考

Hermes Agent 桌面版安装部署完全指南:一步步安装自进化Agent智能体 是由开发的开源自主 AI 智能体(MIT 协议)。它不是绑定在集成编辑器上的编码助手,也不是围绕单一 API 的聊天机器人封装——它是一个越用越强大的自主智能体,拥有独一无二的闭环学习系统特性说明自主技能创建在复杂任务后自动生成可复用的 Skills(技能)技能自我改进使用过程中持续优化已有技能持久化记忆跨会话记住你的项目、偏好和解决方案用户画像建模通过 Honcho 方言式推理,逐步构建对你的深度理解20+ 平台接入。 阅读详情


前言


一、程序设计

  1. UNIX设计哲学
  2. 简单最小化,简单且实现需求
  3. “优秀的程序员必须对他所写的每一个字节都了如指掌”
  4. 如果你不知道它的实现原理和方式,那么就很难用好它
  5. 大道至简

现代库动辄几十万行祖传代码,使用这个库几乎不可能掌握其运行细节,只是调用接口。
现今软件设计讲究模块化,封装化。
做好模块之间的隔离,避免一个模块的错误传导到另一个模块上。做好接口设计,接口要足够简介,拒绝可能引起歧义的接口。最好遵循UNIX设计哲学。


软件设计原则:
SOLID原则
高内聚,低耦合
尽可能抵御外部错误和攻击,检测到内部错误时则终止程序执行。

一个完整的商业软件所必要的组件

  1. 常用基础组件
    a. 日志系统 log
     不可能将log打印到前台,必须有日志持久化组件
    b. 计时器
    c. 线程间通讯、传输数据组件
    d. 进程间通讯、传输数据组件
    e. 进程功能模块分割方法

  2. 软件版本以及项目适配管理方案
    软件需要维护和迭代,就会有版本管理的需求。在发版的软件中必须有有效手段追溯软件源码。如何将一套源码适配到十几甚至几十个不同的项目中也是需要思考的问题。

  3. 软件架构设计方案

  4. 工程结构、构建系统、测试系统

  5. 性能分析工具

软件开发团队的构成

  • 组内leader
    负责统筹并管理团队。负责整体软件架构的设计,技术底座搭建、实现等。
  • 需求
    负责对接外部需求,输出到内部
    需求排期,内部商讨对外接不接需求等
  • 发版以及项目管理
    负责软件版本管理,项目计划以及软件发版集成等
    需要明确发版计划,保证每次发版是软件的可用性,以及每次发版时的修改项
  • 测试
    负责发版前的测试,保证功能的可用性。以及测试开发做的需求ok不ok
  • 开发
    干活的牛马,负责具体需求的实现,俗称码农

一种较为通用的软件结构

任务生成器(根据需求生成任务)

任务(任务带有自己的属性信息)
一条任务可以包含多个子任务,任务有自己的属性信息

执行器(负责执行具体的任务)
执行器可被打断等功能,线程池、动态线程及设置限制等

通讯模型

在计算机中,建立通讯只有一种方式:必须有一方主动发起请求,另一方等待求情,其它所有通讯模型都是在此基础之上建立的。

这是很符合直接的,两个人交谈,必须有一人先发声,另一个听着。

如,tcp连接中,必须有一方先调用connect发起连接,另一方调用accept监听连接;udp通讯中也是,必须由一方调用send发送udp报文,另一方调用receive接收报文;p2p通讯也是如此,只不过双方位置是对等的,任意一方都可以connect,另一方就accept,就好像两个人谈话,任意一个人都可以先开口,另一个人听着。

请求响应
request由客户端主动发起,服务端只负责监听。是为一问一答的通讯模式,且问方总是client。

server client server client request response

HTTP协议就是采用着用模式

发布订阅
publisher负责发送数据,subscriber负责接收数据

subscriber publisher subscriber publisher ​ ​ ​

someip中的通讯机制

请求响应
类似HTTP,可实现rpc
请求不响应
可能会配合event使用,发送请求后通过event获取值

client2 server client client2 server client request response request without response

event, 事件触发
用于服务端主动向客户端推送数据(当发生变化时或周期性),如车速信号应为周期性信号,使用方订阅后,周期性收到数据

server client server client subscribe event event event

field
假设远程服务中有个可被设置的字段
请求响应+event
Getter:获取远程字段的值
Setter:设置远程字段的值
订阅远程字段的值

如:挡位字段,仪表盘订阅挡位字段,当挡位发生变化时通知仪表盘,当汽车刚启动时,挡位不会发生变化,为了获取挡位的初值,仪表盘需要通过Getter获取。

server client server client getter res setter res subscribe event event event

ros2中的通讯机制

  • 发布/订阅 (Publish/Subscribe) 模型

    机制: 这是一个由发送者(Publisher)和接收者(Subscriber)组成的异步通讯机制。Publisher 将消息发送到一个命名的 Topic 上,所有订阅了该 Topic 的 Subscriber 都会收到消息。
    特点:
    多对多: 一个 Topic 可以有多个 Publisher 和多个 Subscriber。
    异步: Publisher 发送消息后不等待回应,只管发;Subscriber 被动接收。
    持续性: 通常用于连续的数据流
    使用场景:激光雷达 (Lidar)、摄像头图像、IMU 数据、里程计

Subscribe Publish Subscribe Publish data data data
  • 请求/响应 (Request/Response) 模型

    机制: 类似于传统的 C/S 架构或 RPC(远程过程调用)。Client 节点发送请求给 Server 节点,Server 处理后返回响应。
    特点:
    一对一 (通常): 一个 Service 通常有一个 Server,但可以有多个 Client。
    同步/异步: Client 发送请求后通常会等待结果(虽然在 ROS 2 SDK 中通常非阻塞实现,但逻辑上是等待回复)。
    短时性: 用于离散的、立即需要结果的操作。
    使用场景:

    逻辑开关: 启动/停止某个节点,重置里程计。
    参数查询/设置: 请求更改相机曝光度,查询当前配置。
    简单计算: 发送两个数字,请求服务器返回它们的和。

server client server client Request Response
  • 目标/反馈/结果 (Goal/Feedback/Result) 模型
    机制: Action 是建立在 Topic 和 Service 之上的高级通讯机制。Client 发送一个“目标”,Server 尝试达成这个目标。
    特点:
    反馈 (Feedback): 在执行过程中,Server 会周期性地向 Client 报告进度。
    中断 (Cancel): Client 可以在任务完成前随时取消任务。
    长时性: 适用于耗时较长的任务。
    使用场景:

    导航 (Navigation): 告诉机器人“去厨房”。这需要几分钟,期间机器人会不断反馈当前位置,且用户可能中途改变主意取消任务。
    机械臂控制: 告诉机械臂“抓取物体”。这是一个复杂的过程,包含路径规划和执行。
    感知任务: 执行 360 度扫描并构建地图。

server client server client Goal Feedback Feedback Feedback Result

总结

安装并新建windows下wxwroks7.0 bootrom工程 安装licence,将zwrsLicense-vx7-perm.lic粘贴到安装目录C盘WindRiver/license下。现在双击Workbench 4,新建vxworks7.0工程,会出现下面的情况,因为没有licence。编译完成binaries下生成wxwroks x86格式,可以修改bootrom硬件信息的配置了。单击x86_wxwroks工程右键,build project编译工程。双击桌面Workbench 4打开,新建windows下工程。新建完成,选择finish。 阅读详情

相关推荐

Perplexity SPACE沙箱平台:安全AI开发环境实战解析

沙箱技术通过资源隔离和权限控制创建受限执行环境,其核心原理是容器化隔离机制。在AI开发领域,这种技术解决了环境配置复杂性和安全风险等关键问题。SPACE沙箱平台作为AI代码执行环境,提供了标准化的开发沙箱,支持Python生态和主流AI框架。通过实战案例展示,该平台特别适用于情感分析等NLP任务的快速原型验证,帮助开发者在安全隔离的环境中测试AI模型和算法,显著提升开发效率并降低系统风险。

weixin_29029995的博客 274

关于软件开发团队的一些思考

关于软件开发团队的一些思考 要给boss提一些建议,也顺便整理一些想法,写了一些字,下面是其中有关团队建设的内容,想请各位狂批之,在当下窃喜。这其中有许多是在经历CMM认证,以及MSF以后整理来的,有许多也曾在工作中应用过。概述:目前一些软件开发团队,特别是中小型团队,由于在低成本模式下运行,加之对软件过程管理的不尽规范,在团队建设上只重视代码开发,不重视设计,只重视编程技术,不重视需

如来 1184

W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包

本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。

weixin_42520573的博客 418

关于软件项目开发的思考

写在前面: 在说之前,先想想,在做之前,先想想。关于软件项目开发和管理。 1.增量式开发和时刻运行时系统 人月神话的作者,IBM系统之父比较推崇这种开发模式。主要是因为他的可维护性和可拓展性。 增量式开发是指在每个开发阶段,都有一个运行时系统。第一阶段开发的系统只具备最基础的功能,并且...

chizuanduo9634的博客 254

【实战】ComfyUI-Impact-Subpack插件安装与UltralyticsDetectorProvider节点修复全流程

本文详细解析了ComfyUI中UltralyticsDetectorProvider节点缺失的原因,并提供了完整的ComfyUI-Impact-Subpack插件安装与修复全流程。核心在于Impact Pack插件架构调整导致节点被拆分至子插件包。指南涵盖手动安装、依赖安全配置、模型文件管理及深度排错步骤,帮助用户彻底解决节点缺失问题,恢复工作流正常运行。

weixin_29290947的博客 438

适合初学者的ROS机器人教程(1): Ubuntu下ROS创建自己的包和使用github下载的包

ROS如何创建自己的包 1. 首先创建catkin工作空间(如果你以及有了请忽略) $ mkdir catkin_ws # 创建一个文件夹里面计划放我们的项目,ws是workspace的缩写 $ cd catkin_ws # 将当前工作文件夹切换到catkin_ws这个文件夹 ~/catkin_ws$ catkin_make # 执行catkin_make创建一ROS项目 此时你的catkin_...

@司南牧|知乎|博客|易懂教程|李韬 3245

关于软件开发工作的思考

工作中的我时常遇到这样一种情况,在做网页的时候,我会秉承用户体验的原则,视自己为用户的心态,去设计和改造界面,但是!老板并非喜欢,老板要的只是系统稳定,不要搞出事情,所有多数情况我的改造优化都不能上线成为正式产品,做的那么好的东西,好像白做了,这时候,你会听指挥,还是坚持自己的想法,你会怎么抉择?

挨踢界小人物 587

Unity动画状态机实战:Trigger和Bool参数到底怎么选?附5个常见场景解析

本文深入解析Unity动画状态机中Trigger和Bool参数的核心差异与应用场景。通过对比两者在描述瞬时事件与持续状态上的本质区别,并结合角色移动、攻击连招、跳跃落地、受击死亡及环境交互等5个实战场景,提供了清晰的选择逻辑与避坑指南,帮助开发者构建更健壮、易维护的动画逻辑。

weixin_29009501的博客 120

关于软件开发环境的思考

本文探讨了软件开发环境的常见问题及解决方案。主要介绍了三种方法:1)使用容器技术,虽能简化环境配置但在资源受限设备上需谨慎;2)将依赖库本地化管理,可避免环境冲突但维护成本较高;3)处理环境变更时需谨慎操作,建议通过分支管理逐步过渡。文章分析了每种方法的优缺点及适用场景,为开发团队选择合适的环境管理策略提供了参考。

人无远虑,必有近忧 1387

24. SAP 标准产品里使用 OData 服务的一些细节分享

笔者在编写使用事物码 SEGW 开发 SAP OData 服务的系列步骤时,但凡遇到技术上一些疑难问题,喜欢去参照 SAP 标准产品里是如何使用 OData 服务的,不少问题都可以去参考 SAP 标准产品的 OData 服务实现细节来解决。 因此本文记录笔者在编写本教程的过程中,曾经研究过的 SAP OData 服务实现的一些细节,把这些细节分享给大家,希望能起到参考作用。 同时,教程也不断收到一些朋友在评论区留言,对于不少留言的回复,我也是拿 SAP 标准 OData 服务的实现作为论据来回复的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2031

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

芒果YOLO11改进81:主干Backbone篇之DCNv3结构:即插即用|使用pytorch代码实现,并针对YOLO11专门优化模块

包括YOLOv5、YOLOv7、YOLOv8等模型改进 738

关于软件开发效率的思考

    终于有时间可以写点文章,想好好想一些问题了。    我们做软件开发技术的,其实不怕去学习一项新的技术,或者攻克一个难题。我们最怕的是重复做工作,原先做的东西,却因为什么原因被推翻了,需要重新做,或者做的工作是非常繁琐的工作,太过细节。    照道理,随着技术的进步,我们做软件的,工作应该越来越轻松才对。毕竟原先有那么多积累,何况技术进步的目的,也是为了能够更加有效率的工作。但是,我

joeyshi的专栏 997

人工智能 (Artificial Intelligence, AI) 原理与代码实例讲解

人工智能 (AI) 机器学习 (Machine Learning) 深度学习 (Deep Learning) 算法 模型 代码实例 应用场景 1. 背景介绍 人工智能 (Artificial Intelligence, AI) 作为一项前沿科技,近年来发展迅速,已渗透到生活的方方面面

AI架构师小马 1228

关于软件开发未来的三点思考

我认为,达到 99.99(...)% 的代码由 AI 编写所花的时间会比预想的短,但达到 100% 的时间会比预想的长。基于供需关系,这里的价值将非常巨大:能胜任这种干预的人越来越少,而且由于“认知债”,具备这种能力的人也会越来越稀缺。当智能体编写的软件成为我们日常生活基石的一部分时,其中的 Bug 或漏洞所带来的后果将严重得多。随着人类编写的代码越来越少,我们对底层系统和算法的思想模型(Mental Model)会逐渐衰退,甚至从一开始就无法建立。这种趋势表明:AI 能力的增强意味着人类参与度的降低。

weixin_45583158的博客 53

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于软件开发的思考和感悟

最近看到一篇文章很有感触,摘录如下以自勉: :我们不需要熟练工,我们需要在某领域拥有超过常人的积累认知,和拥有整套完整思维模式和优秀认知事物能力的人…他很诚恳地告诉我,你还年轻,真的应该好好地静下心来,深入地研究一些东西,自己写一些东西,而不是这也用过,那也知道,但是多半都是局限于仅仅见过,会用,却从来没有认真思考过其代码背后蕴含的思想,更少有人研究过源码,进而体会大师们在某些问题的解决上秉

Stay Hungry. Stay Foolish. 1176

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

关于软件开发进度的思考

关于软件开发进度的思考 flyfish 2015-3-23 1首先最重要的是项目要完成 2在项目中发生的真实情况比书本上的任何理论都重要 我要的是思考1,观察2 软件开发进度的管理需要方法,方法就要因人而异,因事而异 可能产生的原因 一、为了防止出现帕金森定律制定了一个不可能交付的时间,每天有根本无法完成的任务量。 帕金森定律表明:一个项目计划多少时间,它总能将之消耗完。

二分掌柜的 1582

关于软件开发的一些常识和思考

有最好的编程语言吗   作者的观点:程序员在最初学习BASIC、Fortran、 Pascal、C、C++等语言时会感觉一个比一个好,不免有喜新厌旧之举。而如今的Visual Basic、Delphi、Visual C++、Java等语言各有所长,真的难分优劣。能很好地解决问题的编程语言就是好语言。开发人员应该根据实际情况,选择业界推荐的并且是自己擅长的编程语言来开发软件,才能保证有较好的质量与

Comman1999 1971

基于IP2315的Type-C PD快充蓝牙音箱充电方案设计与实战

Type-C PD快充已成为便携设备充电的主流标准,其核心在于通过CC线进行协议握手,从充电器申请到9V、12V甚至更高电压,再经由同步降压拓扑高效转换为电池所需的充电电压。这一技术不仅大幅缩短充电时间,还能兼容通用接口,提升用户体验。在蓝牙音箱等紧凑型音频设备中,PD快充方案需兼顾高效率、低发热与低噪声,避免对音频电路造成干扰。IP2315作为一款集成PD协议诱骗与同步降压控制器的充电管理芯片,凭借外围电路简洁、支持3A以上大电流等优势,为双节串联锂电池蓝牙音箱提供了理想的充电解决方案。本文围绕该芯片,详

weixin_34121282的博客 424
上一篇: arch linux 安装
下一篇: Modern C++ 特性小结
耶耶耶耶耶~
博客等级 码龄9年 943粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值