当前位置: 首页 > ops >正文

软件是什么?

        这是一个经典的计算机科学观点,最早由著名计算机科学家‌Niklaus Wirth‌(Pascal语言设计者)在其著作《Algorithms + Data Structures = Programs》(1976年)中提出。它的核心思想是:

‌1. 分解视角‌
        软件的本质可拆解为两个核心组成部分:

        数据结构‌:如何组织和存储数据(如数组、链表、树、图等)

        算法‌:如何处理这些数据(如排序、搜索、动态规划等)

‌2. 辩证关系‌

        数据结构是算法的"操作对象",算法的效率往往依赖于数据结构的选择(例如用哈希表加速查找)
        算法是数据结构的"灵魂",没有算法操作的数据结构只是静态存储

‌3. 现代扩展‌
        随着软件复杂度提升,这一公式可扩展为:
        ‌软件 = (数据结构 + 算法) × 设计模式 × 架构 × 工程化‌
        但数据结构与算法始终是底层基础,就像建筑中的砖块与施工方法。

        代码中的硬件的输入输出、软件变量、信息序列化的传递、中间件、数据库的信息存储,都是数据结构,而所有代码的逻辑执行,都是对这些数据结构进行的增删查改操作。

        而随着软件概念的越来越大,一个软件由最初的单人或几人分工即可完成,到达了现在可能千人、万人甚至更多人的合作完成,那么软件概念已经不再局限在代码的基础上,软件是一个工程化的过程。

        它包括了软件需求分析、设计方案、代码书写、功能性能测试、部署运维等一个工程化的过程。

        工程化是一个自顶向下的分层设计,并且为了确保这些设计在横向和纵向传递中不失真,那么需要规范、文档以及流程来保障这个过程。这些内容不只是技术层面的,还有管理层面。

        工程化完毕后,对于局部软件而言,可能还是一个庞大的内容,那么需要模块化,以便协同开发、快速定位问题、提升代码的复用性等等。同时使用好的设计模式,以降低代码的耦合度。

        逻辑即算法,变量即数据机构,不要把这两个概念放到太大的范围去理解。

http://www.xdnf.cn/news/7880.html

相关文章:

  • Sentinel原理与SpringBoot整合实战
  • 开发经典的瀑布流
  • c++11特性——可变参数模板及emplace系列接口
  • 【ffmpeg】SPS与PPS的概念
  • BurpSuite Montoya API 详解
  • 基于stm32的空气质量监测系统
  • 2025年二级等保实施全攻略:传统架构与云等保方案深度解析
  • 乘法逆元:费马小定理(利用快速乘法幂)(JAVA)
  • GitHub 趋势日报 (2025年05月20日)
  • 洛谷B3840 [GESP202306 二级] 找素数
  • MySQL--day5--多表查询
  • 第22天-Python ttkbootstrap 界面美化指南
  • 漏洞扫描企业如何助力企业预防安全风险应对网络攻击?
  • GUI实验
  • vue3 threejs 物体发光描边
  • Python人工智能算法 模拟退火算法:原理、实现与应用
  • 项目执行中缺乏问题记录和总结,如何改进?
  • [java]数组
  • 7.数据的预测分析及可视化
  • 嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)
  • Word2Vec模型学习和Word2Vec提取相似文本体验
  • 豪越智能仓储:为消防应急物资管理“上锁”
  • Nginx 强制 HTTPS:提升网站安全性的关键一步
  • Arthas:Java诊断利器实战指南
  • 游戏服务器开发:如何实现客户端与服务端通信
  • 【Unity 如何使用 Mixamo下载免费模型/动画资源】Mixamo 结合在 Unity 中的实现(Animtor动画系统,完整配置以及效果展示)
  • 如何通过小贝加速实现精准网络故障排查
  • 使用 Shadcn UI 构建 Java 桌面应用
  • 六:操作系统虚拟内存之缺页中断
  • PHP:经典编程语言在当代Web开发中的新活力