how to design Programs 学习笔记

本文探讨了系统化程序设计的六步法,强调了设计食谱和迭代优化的重要性。介绍了函数设计流程,包括问题分析、数据定义、签名声明、功能示例、函数模板和测试。同时,讲解了输入输出概念及编程中的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?xml version="1.0" encoding="utf-8"?> how to design Programs 学习笔记

how to design Programs 学习笔记

1 前言

典型的编程课程采用"修改直到满意为止"的方法. 掌握编程方法,而不是修补直到它工作。

好的编程方法是按照系统化方法,计划,理解从最初开始的每一个阶段、每一步。

系统化程序设计

任何人都可以设计程序

任何人都可以体验创造性设计的满足感

学会通用的问题解决技能,体验深度创造性活动,学习欣赏一种新的审美形式.

1.1 系统化程序设计

涉及两方面:设计食谱(design recipes)和迭代改进

函数设计食谱的基本步骤:

  1. 从问题分析到数据定义

    确定必须表示的信息,并确定它如何在所选择的编程语言中表示.规范化数据定义并使用示例说明

  2. 签名,目的陈述,头

    陈述目的函数需要什么类型的数据,包括消耗和产生的数据.制定一个简洁的答案来回答这个函数计算了 什么. 定义与签名相符的stub.

  3. 功能示例

    完成展示函数目的的示例, 求解程序必须通过具体场景来理解需要一个什么样的函数来计算具体示例.

  4. 函数模板

    转换数据定义到函数的大纲

  5. 函数定义

    利用目的陈述和示例补全函数模板.

  6. 测试

    使用测试清晰表达示例,并确定这个函数全部通过测试.这可以发现错误.也可以作为补充示例帮助其他人阅读和理解函数定义.

    设计过程,6个基本步骤.

迭代优化,一次性做好基本是不可能.实际上,迭代优化建议先去掉所有无关的细节,然后找到剩下的核心问题的解决方案.

学习程序设计要靠不断实践.学习程序设计主要是学习原理和可转移技能.

学习程序设计意味着获得两种普遍有用的技能:一是像数学一样的分析技能,尤其是代数和几何,但是编程能获得即时回馈,因此可以不断探索,实验,自我求证. 第二方面,程序设计教会解析式的读写技能,没有可靠的阅读和理解技能,就不能设计出解决复杂问题的程序.程序设计方法强制创建者用完整和清晰的语言表达自己的思想. 与上面的6个步骤对应:

  1. 分析问题描述,通常用单词形式描述
  2. 抽象地提取和表达其本质
  3. 举例说明本质
  4. 基于以上分析做大纲和计划
  5. 根据预期结果评估实际成果
  6. 根据错误检查和测试修正程序

1.2 输入和输出

直接表达式每次运行获得同样的结果,编程和计算像使用计算器一样自然,方便。 但是编程的目的是为了处理很多数据并获得很多不同的结果。

函数的参数与返回值,输入与输出。 (y 1)叫做函数应用

程序就是函数, 在windows或Mac中启动一个程序就是调用一个函数,程序即函数名,args就是参数

重新组织程序用于未来可能的更改就是重构,程序要写的更易读,更容易修改,但不要过度,弄巧成拙。 因此要避免魔法数字(魔数),给它们定义一个名字。

比思考更重要的实干,这是学习的唯一方法。

一个程序包括很多函数和常量定义。你需要练习的时如何组织它们,方便以后阅读和修改,可能在完工几个月以后。

2 Fixed-Size Data

每个编程语言都由表示数据的语言和操作数据的语言组成。 第一种语言提供原子数据,用于把真实世界的不同信息表示为数据。 第二种语言提供对一些原子数据的基本操作,程序员的任务是组合这些操作构造出完成指定计算目标的程序。 用算法来表示这两种语言的组合。

设计就是组织想法

程序语言内置的对原子数据操作的函数称为primitive operations或pre-defined operations.

2.1 函数和程序

就编程而言,算法只占一般,另一半是代数。代数需要变量,函数定义,函数应用和函数组合。

程序就是函数,和函数一样处理输入并产生输出。与函数不同的是,程序处理各种不同的数据,由现实世界的各种事件触发,并且程序的输出影响现实世界。

函数定义为数据引入一个新的操作,给我们的操作词汇表中添加一个新条目。

变量不是数据,它们表示数据。

作者: ntestoc

Created: 2018-12-05 Wed 16:43

转载于:https://www.cnblogs.com/ntestoc/p/10057274.html

《如何设计程序》(How to Design Programs,缩写为HtDP) 是由马灿灿(Carl Eastlund, Matthew Flatt, Robert Bruce Findler, and Shriram Krishnamurthi)等人合著的一本计算机科学教材。该教材以函数式编程为基础,旨在教授学生如何设计高质量的程序。 《如何设计程序》(HtDP) 提供了一种结构化的方法,帮助学生按步骤设计和编写程序。其核心思想是将程序设计视为一种系统化的过程,通过分解问题、设计清晰的数据结构和定义适当的函数来解决问题。 设计程序的关键步骤如下: 1. 定义问题:明确问题的要求和目标,将问题分解为更小、更易处理的子问题。 2. 设计数据:确定程序所需的数据结构,包括如何组织和存储数据。 3. 规划函数:根据问题的需求,设计合适的函数,包括输入和输出的数据类型。 4. 开发程序:编写程序代码,实现定义的函数和数据结构,以解决问题。 5. 测试和调试:进行全面的测试,确保程序在不同情况下的正确性和鲁棒性。 6. 文档记录:撰写适当的文档,记录程序的设计和实现细节,以方便程序员和维护人员。 7. 优化和改进:根据实际应用中的反馈和需求,对程序进行优化和改进,提高性能和用户体验。 《如何设计程序》(HtDP) 强调迭代开发过程,通过不断重构和重复上述步骤,逐渐提高程序的质量和可靠性。同时,教材还提供了丰富的示例和练习,帮助学生理解和应用所学知识。 总而言之,设计程序需要明确问题、设计数据结构、规划函数、编写代码、测试调试,并进行文档记录和持续改进。《如何设计程序》(HtDP) 提供了一种系统性的方法,帮助学生掌握程序设计的基本原则和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值