首页 > 其他分享 >代码大全读后感(1)

代码大全读后感(1)

时间:2023-04-17 17:33:42浏览次数:42  
标签:读后感 软件系统 软件开发 代码 软件 复杂度 大全

《代码大全》读后感(一):软件设计与开发的核心就在于: 控制复杂度

  最近在 《代码大全》这本书, 包括的内容非常多, 从软件设计到代码开发,团队管理都有,更像是一个软件编程领域的百科全书.

  但是,对于书中提到的一点印象最为深刻, 其实在 《人月神话》和《卓有成效的程序员》这两本书都有提到, 那就是:

  软件设计与开发的核心就在于 控制复杂度

  这句话的核心其实包括几个问题:

  软件开发的本质问题性难题是 复杂度 ?

  如何可以一定程序的降低复杂度 ?

  杂耍抛球

  其中, 书中对于软件设计必须控制复杂度的解释原因是:

  没有谁的大脑能容得下一个现代计算机程序, 也就是说, 作为软件开发人员, 我们不应该试着在同一时间把整个程序都塞进自己的大脑, 而应该试着以某种方式去组织程序, 以便能在同一个时刻可以专注于一个地方. 这么做的目的是尽量减少同一时间所要考虑的程序量. 你可以把它想做是一种心理上的杂耍(边抛边接: 通过轮流抛接使两个或者两个以上的物体同时保持于空中)- 程序要求你在空中保持的(精神上的)球越多,你就越可能漏掉其中的某一个, 从而导致设计或者编码上的错误

  —- 代码大全

  当我读到这一段的时候, 感觉这本书的作者真是说出了软件开发者心中的痛点, 我也认为这段话可以说真本书的一个核心, 其实代码大全的所有部分都是在围绕『如何降低软件开发中的复杂度』. 作者用这种, 杂耍抛球的方式非常形象的比喻了, 我们的大脑(生物结构上)本质的局限性导致的. 曾经美国人有一个非常有名的调查, 人类的大脑短期记忆能够容纳最多的不连续信息数就是7,加而或减二

  具体可以参考心理学上被引用最多的一篇论文之一:魔数七, 加二或者减二: 人类处理能力的局限性.

  而现实问题域中,我们要处理的变量何止是7!

  所以我们根本不可能同时让这么多变量一起出现在我们大脑中.

  没有银弹

  从哲学的角度来说, 柏拉图认为, 任何事物都有 两个属性: 本质属性 与 偶然属性. 通过此我们可以将软件行业

  遇到的问题也分为两类, 那么软件开发过程中 本质性的 难题是什么?

  《人月神话》的作者认为, 软件行业中遇到的非根本问题(偶然属性)都会随着时间发展,技术的提升,会逐步解决. 但是 开发中的根本性问题 - 对于现实复杂世界本质的概念的复杂性是无法降低的.

  一个软件系统有大量的状态,存在大量不同元素的相互叠加。 这使得软件系统的复杂性以指数的形式增长。而且,这些复杂度是软件系统的根本属性, 而不像数学和物理中那样可以建立简化的模型而忽略复杂的次要因素。

  《人月神话》中对于本质的复杂性无法避免, 起了一个名词, 日后基本成了这个行业的标志: 木有银弹.

  不要期望通过一种 万能药能解决软件行业中所有的复杂性问题. 所以 当每次一种新的技术/语言/框架 等出现的时候, 当有些人大喊可以颠覆以前软件开发中的所有问题的时候, 这时候你就要小心了. 心理默默的告诉自己, 没有银弹!

  降熵

  其实,软件的复杂度从某种意义上, 用物理学第二定律来理解和加强. 物理学第二定律又叫做,熵定律:

  自然过程中,一个孤立系统的总混乱度(即“熵”)不会减小。

  换成是软件行业的背景就是, 用《程序员修炼之道》里面的解释就是:

  软件的熵总是倾向于最大化的,程序员们称之为“软件腐烂”。

  程序员只有在开发过程中,不断的通过 外部做功(思考, 主动性的思考和改代码), 不断进行代码重构与整理, 通过外部系统注入能量,来降低整个软件系统的熵, 是整个软件达到有序的状态.

  为此软件开发行业提出了一些列的原则和指导方法, 重构/单元测试/ 模块化设计/ KISS原则/ 面向接口编程/模式设计/分布式系统… 等等如此,其实你都会发现, 这些方法和指导原则,都是 告诉程序员, 在软件开发的过程中, 通过这些方法降低软件系统整体的复杂度, 以便后期更好的维护与开发. 当软件复杂度可以得到很好的控制,而不是让软件的熵无限的增长, 那么这个软件系统的寿命也就会很长,得到更好的维护性.

  所以, 最后, 我们知道:软件开发中的本质难题是 复杂度, 那么我们在之后开发中 应该时刻的主动思考和做功: 如何通过不断的代码重构降低整体的复杂度. 保持我们的代码熵的最小化.

  让我们的代码 永垂不朽

标签:读后感,软件系统,软件开发,代码,软件,复杂度,大全
From: https://www.cnblogs.com/jizhaosai/p/17326549.html

相关文章

  • 如果是不创建新浏览器窗口,直接在已打开的浏览器,则代码需要修改为:
    如果是不创建新浏览器窗口,直接在已打开的浏览器,则代码需要修改为:caps=DesiredCapabilities.CHROMEcaps['loggingPrefs']={'performance':'ALL'}options=webdriver.ChromeOptions()options.add_experimental_option('w3c',False)options.add_experiment......
  • 用低代码平台可视化设计表单
    表单在前端可谓是非常常见的场景,而且通常需要花费开发非常多的时间来处理各种复杂的逻辑。特别是在企业中后台的业务中,存在着大量的表单,比如客户的订单,投诉的问题单,服务跟进过程每个流程的流转。凡是存在用户输入的地方都存在着各种各样的表单,字段或多或少,逻辑或繁或简。需求一旦......
  • 代码随想录 46天 day198.打家劫舍 | | 337.打家劫舍 III | 213.打家劫舍II
    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能......
  • <<梦断代码>>读后感(二)
     当今世界,软件已经成为当今世界不可或缺的一部分。而《梦断代码》一书记录的是作者罗森伯格对OSAF主持的Chandler项目进行田野调查,通过Chandler开发过程来揭示软件开发过程中一些根本性的大问题。   第四章作者将其命名为乐高王国。卡普尔很注重前台的效果,着重于如何体现Ag......
  • 介绍一款 ABAP 代码搜索工具 RS_ABAP_SOURCE_SCAN 的使用方法
    @目录ABAP代码搜索工具:ABAP报表RS_ABAP_SOURCE_SCAN实际工作中的一个需求:找到SAPCRM产品主数据搜索实现里使用了OPENCURSOR关键字的准确位置笔者曾经写过一篇文章,介绍了如何根据ABAP错误消息找到准确的抛出该错误消息的代码位置:SAP错误消息调试之七种武器:让所有的错误......
  • 代码随想录 day 46 139.单词拆分
    给定一个非空字符串s和一个包含非空单词的列表wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例1:输入:s="leetcode",wordDict=["leet","code"]输出:true解释:......
  • 如何在低代码平台上构建ERP软件
    ERP软件是企业管理日常运营需求的关键组件。然而,对于许多企业,尤其是资源有限的企业来说,尝试构建和管理ERP平台可能要担负较高的成本的。幸运的是,低代码平台可以使这个过程变得容易得多。今天我们来解释如何在低代码平台上构建ERP软件,以节省时间和资源,同时仍能访问全面的ERP功能。首......
  • [全程建模]三个问题的对话之一——RUP中的阶段与代码问题
     Burt(子龙)16:55:04请问一下:RUP每个阶段(先起,精化等)都要得到可用的功能或者代码吗?Burt(子龙)16:55:06这点 我有点糊涂 Burt(子龙)16:55:43象您请教一下你们一般的流程是什么样的? 青润16:53:20呵呵,你是不是理解成了每个阶段都要得到代码?青润16:54:26你的这个问题......
  • MATLAB代码 柔性负荷 综合能源系统 低碳调度
    MATLAB代码柔性负荷综合能源系统低碳调度考虑柔性负荷的综合能源系统低碳经济调度综合能源系统(IES)逐渐成为实现减排目标的重要支撑技术。 基于能源集线器概念,结合需求侧柔性负荷的可平移、可转移、可削减特性,构建了含风光储、燃气轮机、柔性负荷等在内的IES模型。 综合......
  • MATLAB代码:计及电转气 含碳捕集与垃圾焚烧虚拟电厂 优化调度
    MATLAB代码:计及电转气  含碳捕集与垃圾焚烧虚拟电厂   优化调度关键词:碳捕集 虚拟电厂需求响应优化调度电转气协同调度 参考文档:《计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度》仿真平台:MATLAB需要CPLEX主要内容:代码主要做的是一个计及电转气协同的含......