第三章 三思而后行:前期准备
根据数据,引入错误到发现错误的时间越长,修正错误的消费越大。进行充分的前期准备可以将需求、设计上的错误扼杀于萌芽。
软件大致分三种:商业系统、使命攸关的系统、使命攸关的嵌入式系统。
我们的项目属于商业系统,推荐采用敏捷的、增量式的开发,计划、管理可以非正式,需求可以非形式化,设计可以和编码同时进行,测试可以较少。
我有一点异议:尽管是商业开发,也应该有较正式的计划管理、形式化的需求与经常的测试,只是由于商业开发解决错误的消耗较少,所以这些不用过分冗余。
迭代式开发 vs. 序列式开发:
迭代式开发中,需求发掘、构建、设计等工作较为重合,伴随整个编码过程,检错修正的成本在过程中逐次交付。序列式开发中,各工作较为独立,每一个工作依赖于前一轮工作。
对两种开发方式,前期准备均可以大大降低成本。
对于需求稳定、设计理解透彻、开发者熟悉相关领域、项目风险小、需要长期可预测性、后期更改代码消耗很大的项目,推荐采用序列式开发。反之,推荐迭代式开发。
问题定义:需要用自然语言、从用户的角度定义,并不涉及具体的解决方式。
需求:明确的需求可以避免程序员错误地理解需求、避免开发者之间的争论。
需求不是稳定的。
如何处理需求的变更:经常评估需求的质量;确保每一个人都知道变更需求的代价以免心血来潮;在新需求过多的情况下建立变更控制程序;使用能适应变更的开发方法。
架构:本书没有将过多笔墨花在架构上,但私以为架构很重要。
架构的典型组成:
程序组织:各构造块的分工与合作;主要的类;数据设计;业务规则;UI;资源管理;安全性;性能;可伸缩性;互用性;国际化/本地化;IO;错误处理,及相关约定;容错性;架构可行性;是否需要冗余;使用第三方库还是自己构建,以及为何这么做;是否复用;应对变更的策略;总体质量。
第四章 关键的“构建”决策
选择编程语言:熟悉的语言比不熟悉的语言生产力高;高级语言(java, c++, python, perl…)比低级语言生产力高。
编程约定,如变量命名、类命名、函数命名、格式、文档等。
在技术浪潮中的位置:浪潮后期可以稳定持续地编写新功能,而浪潮前期需要耗费更多时间应对不完善的技术。
Working in a language vs. working into a language
Working in a language意味着对一种语言不够了解,被语言本身的逻辑限制;working into a language意味着在了解已有语言的基础上,由思想确定使用的语言及使用语言的方式。
选择主要的构建方法,如编码约定、团队工作方式、质量保证措施、各种工具等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!