首页 > 其他分享 >《代码大全2》--读后感10月02

《代码大全2》--读后感10月02

时间:2022-11-01 11:23:32浏览次数:54  
标签:02 读后感 软件系统 软件开发 10 复杂度 程序员 软件 代码

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

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

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

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

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

  杂耍抛球

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

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

  —- 代码大全

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

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

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

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

  没有银弹

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

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

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

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

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

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

  降熵

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

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

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

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

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

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

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

  让我们的代码永垂不朽!

标签:02,读后感,软件系统,软件开发,10,复杂度,程序员,软件,代码
From: https://www.cnblogs.com/xlm926/p/16847068.html

相关文章

  • idea2022设置debug的时候热更新
    之前的项目在配置中可以选选择更新的时候更新类和资源,2022版位置变了,需要自己添加这个功能之后在debug模式的时候改了代码,点击编译之后就热更新了(只对java代码有效,xml......
  • CSP2022游记
    第一次几乎完全没有准备的比赛也是倒数第二场比赛Day-1上了一天文化课,晚上还有强基班。强基班上完之后来机房写了几个板子就开始颓废了基本上就抱着摆烂的心态不过......
  • 当前SAT主要关键技术及其相关文献2022-11-1
    摘录自:TasniemNasserAl-Yahya, MohamedElBachirMenai, HassanMathkour:Boosting the Performance of CDCL-Based SAT Solvers by Exploiting Backbon......
  • P1044 [NOIP2003 普及组] 栈 (卡特兰数)
    [NOIP2003普及组]栈题目背景栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(......
  • CSP-S 2022 又寄
    太蠢了,寄掉了初赛竟然是线上举办……AWTY(\(47\))和Lucas(\(49\))寄掉了,只能给€€£打钱了。upd.打了钱还是进不去,只能加\(5\)分……DAY-inf复习了一......
  • KeyShot Pro 10.2 for Mac永久版(3D模型渲染软件)v10.2.113 中文版mac/win
    KeyShotPro10.1是一款功能强大的3D模型渲染软件,帮助你更好的创建3D渲染动画。其中KeyShot的GPU模式可用于实时渲染和本地渲染输出,一键访问GPU资源,从而利用多GPU性能扩展......
  • win10卸载office提示:安装程序包的语言不受系统支持 的解决方法
    win10卸载office提示:安装程序包的语言不受系统支持的解决方法安装程序包的语言不受系统支持 表明有office的注册表未卸载干净。下载该软件运行可卸载:通过百度网盘分......
  • CSP-S 2022 T4 题解
    简述题意给一颗\(n\)个点的树,每个点有点权\(v_i\)。有\(q\)次询问,每次给出\((u,v)\),从\(u\)开始,每步只能走不超过\(k\)条边,走一步的代价是终点的点权,\(v_u\)也......
  • 1016 Phone Bills
    Along-distancetelephonecompanychargesitscustomersbythefollowingrules:Makingalong-distancecallcostsacertainamountperminute,dependingonthe......
  • 2022祥云杯 - HashRun安全团队wp
    2022祥云杯-HashRun安全团队wpHaveFun@T4x0r注册一个\(admin\)账号发现页面会提示已经注册,其实本来想的是注入,但是发现注册功能活的,感觉二次注入可能也不是很大,注册......