首页 > 其他分享 >《代码大全》读后感1

《代码大全》读后感1

时间:2023-05-19 22:35:36浏览次数:33  
标签:需求 读后感 架构 隐喻 代码 开发 构建 大全

* 第一部分 打好基础

第一章 欢迎进入软件构建的世界

> 软件构建的定义:包括编码与调试、单元测试、规划构建、集成等,没有给出一个明确的定义。

> 软件构建的重要性:软件构建是编写大型项目最重要的、不可或缺的部分。

第二章 用隐喻来更充分地理解软件开发

> 对软件开发地隐喻不是明确的标准,而是微妙的启发,所以不要被隐喻限制而远离“不符合”隐喻的方法。可以将不同的隐喻结合启发自己构建代码。

> 一个好的隐喻是将代码构建比作珍珠的生长(accretion),从外在吸收材料并慢慢成长的过程。代码的构建应该是增量式的,从一个基础的框架开始每次增加一点点。假如一开始的代码没有完整的功能,也应该用dummy class搭起一个基本的框架,然后逐一替换成细致可用的代码。这个思想与《程序员修炼之道》中的“曳光弹”思想一致。

> 另一个好的隐喻是将代码构建比作建筑。

首先,越大的架构修正错误的消耗越大,所以需要从一开始就仔细地设计框架。然而对代码的设计不应该过于细致,应该始终保持解耦,细节随时可以在后期更换。

另外,代码构建可以引用第三方库,也可以根据需要自己编写库。

最后,不同的项目需求所需要采取的构建方式可以是截然不同的。

第三章 三思而后行:前期准备

> 根据数据,引入错误到发现错误的时间越长,修正错误的消费越大。进行充分的前期准备可以将需求、设计上的错误扼杀于萌芽。

> 软件大致分三种:商业系统、使命攸关的系统、使命攸关的嵌入式系统。

我们的项目属于商业系统,推荐采用敏捷的、增量式的开发,计划、管理可以非正式,需求可以非形式化,设计可以和编码同时进行,测试可以较少。

我有一点异议:尽管是商业开发,也应该有较正式的计划管理、形式化的需求与经常的测试,只是由于商业开发解决错误的消耗较少,所以这些不用过分冗余。

> 迭代式开发 vs. 序列式开发:

迭代式开发中,需求发掘、构建、设计等工作较为重合,伴随整个编码过程,检错修正的成本在过程中逐次交付。序列式开发中,各工作较为独立,每一个工作依赖于前一轮工作。

对两种开发方式,前期准备均可以大大降低成本。

对于需求稳定、设计理解透彻、开发者熟悉相关领域、项目风险小、需要长期可预测性、后期更改代码消耗很大的项目,推荐采用序列式开发。反之,推荐迭代式开发。

> 问题定义:需要用自然语言、从用户的角度定义,并不涉及具体的解决方式。

> 需求:明确的需求可以避免程序员错误地理解需求、避免开发者之间的争论。

需求不是稳定的。

如何处理需求的变更:经常评估需求的质量;确保每一个人都知道变更需求的代价以免心血来潮;在新需求过多的情况下建立变更控制程序;使用能适应变更的开发方法。

> 架构:本书没有将过多笔墨花在架构上,但私以为架构很重要。

架构的典型组成:

程序组织:各构造块的分工与合作;主要的类;数据设计;业务规则;UI;资源管理;安全性;性能;可伸缩性;互用性;国际化/本地化;IO;错误处理,及相关约定;容错性;架构可行性;是否需要冗余;使用第三方库还是自己构建,以及为何这么做;是否复用;应对变更的策略;总体质量。

 第四章 关键的“构建”决策

> 选择编程语言:熟悉的语言比不熟悉的语言生产力高;高级语言(java, c++, python, perl…)比低级语言生产力高。

> 编程约定,如变量命名、类命名、函数命名、格式、文档等。

> 在技术浪潮中的位置:浪潮后期可以稳定持续地编写新功能,而浪潮前期需要耗费更多时间应对不完善的技术。

> Working in a language vs. working into a language

Working in a language意味着对一种语言不够了解,被语言本身的逻辑限制;working into a language意味着在了解已有语言的基础上,由思想确定使用的语言及使用语言的方式。

> 选择主要的构建方法,如编码约定、团队工作方式、质量保证措施、各种工具等。

标签:需求,读后感,架构,隐喻,代码,开发,构建,大全
From: https://www.cnblogs.com/ysk0904/p/17416467.html

相关文章

  • C语言函数大全-- _w 开头的函数(4)
    C语言函数大全本篇介绍C语言函数大全--_w开头的函数1._wstrtime1.1函数说明函数声明函数功能wchar_t*_wstrtime(wchar_t*buffer);用于获取当前系统时间并返回一个宽字符字符串表示,格式为"HH:MM:SS"(小时:分钟:秒)参数:buffer:一个指向wchar_t类型数组......
  • 源代码管理工具平台介绍
    1:源代码管理工具简述:源代码管理工具是一种用于管理软件开发过程中源代码的工具。它可以帮助开发团队协同开发、版本控制、代码审查、代码合并等。源代码管理工具可以跟踪代码的修改历史,方便开发人员查看代码变化、回滚代码、分支开发等。源代码管理工具是现代软件开发不......
  • ubuntu中使用vscode进行cuda c代码debug出现 no such file or directory 的问题
    {"version":"0.2.0","configurations":[{"name":"CUDAC++:Launch","type":"cuda-gdb","request":"launch","program":......
  • ecshop 购物车 下单 提交到订单表的代码
     /*插入订单表*/do{$order['order_sn']=get_order_sn();if($GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'),addslashes_deep($order),&#......
  • 分享一下mybatisPlus新代码生成器3.5.1以上
    pom引入:有MP了就不要再引入mybatis了,会出bug的<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</......
  • ​Cloud Studio 云端开发保障企业源代码安全
    为什么需要保证企业源代码安全随着时代的发展,各行各业的企业或多或少都会与软件源代码打交道,借助软件系统更好地提升企业办公效率,而软件的源代码也自然成了一种企业新型资产。如何确保企业源代码不外泄,成为了各个企业特别关心的痛点问题。这个问题存在已久,各个企业根据自身......
  • 代码随想录算法训练营第十天|232. 用栈实现队列、225. 用队列实现栈
    【参考链接】1.栈提供push和pop等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。不像是set或者map提供迭代器iterator来遍历所有元素。2.栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使......
  • Android 代码混淆proguard技术介绍
    由于各种反编译工具的泛滥,作为Android程序员在2.3版本以前只能通过手动添加proguard来实现代码混淆proguard这个工具是一个java代码混淆的工具在2.3版本的sdk中我们可以看到在android-sdk-windows/tools/下面多了一个proguard文件夹google已经把proguard......
  • 近8万条谜语灯谜大全ACCESS\EXCEL数据库
    其实互联网上关于谜语和灯谜的资料仍然是挺多的,但是要想数据量以万来计算并且是接近10万的量来看的话,就只能是《近8万条谜语灯谜大全ACCESS数据库》了。而且《近8万条谜语灯谜大全ACCESS数据库》的数据表字段中也包含分类字段,可以根据分类字段有针对性的给出谜语。分类情况包含:......
  • 源代码管理工具导览
    源代码管理工具简介在软件开发中,源代码管理工具是非常重要的。它们被用来跟踪和管理软件的源代码,以确保团队成员可以协作开发,控制版本,修复错误和增强代码。这些工具允许多个开发人员同时在同一个代码库上工作,从而避免了代码的混乱和错误。此外,它们还提供了版本控制的功能,使得开......