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

how to design Programs 学习笔记的更多相关文章

  1. Fusion360_Generative Design 入门学习笔记

    2019.12.17更新 初次见到衍生式设计的时候感觉非常惊艳,现在觉得这个功能就是个弟弟,只能做一些中看不中用的东西.这个方法的理论基础是拓扑优化,想做research的同学可参阅"如何入 ...

  2. Ant Design Pro 学习笔记:数据流向

    在讲这个问题之前,有一个问题应当讲一下: Ant Design Pro / umi / dva 是什么关系? 首先是 umi / dva 的关系. umi 是一个基于路由的 react 开发框架. d ...

  3. Head First Design Patterns学习笔记-观察者模式

    认识观察者模式 首先来看看报纸订阅的过程 1.报社的业务就是出版报纸 2.向某家报社订阅报纸,只要他们有新报纸出版,就会送过来,只要你是他们的订户 3.当你不想再看报纸的时候,取消订阅,他们就不会再送 ...

  4. 重磅教程!帮你全面彻底搞定Material design的学习笔记

    http://www.uisdc.com/comprehensive-material-design-note

  5. WPF学习笔记-用Expression Design制作矢量图然后导出为XAML

    WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...

  6. Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value

    Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...

  7. 学习笔记之Coding / Design / Tool

    CODING 学习笔记之代码大全2 - 浩然119 - 博客园 https://www.cnblogs.com/pegasus923/p/5301123.html 学习笔记之编程珠玑 Programm ...

  8. 【学习笔记】【Design idea】一、Java异常的设计思想、性能相关、笔记

    1.前言: 异常.本该是多么优雅的东西,然而,得全靠自己在零散的信息中汇集. 学习笔记保持更新. 2.教材(参考资料) 其他 ①受检异常与非受检异常:https://www.cnblogs.com/j ...

  9. C++内存管理学习笔记(5)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

随机推荐

  1. 01.MD5加密

    namespace _01.MD5加密 { class Program { static void Main(string[] args) { //MD5加密就是给想要的密码或者其它字符加密 //如果 ...

  2. java——程序的导出与导入

    导出: 选择项目,右击选择 最下面的properties——Resource——Location,就是你的项目所在地, 找到文件所在,拷贝到你的U盘中(或者直接点击项目直接拖到桌面)完成复制 导入: ...

  3. javaEE Design Patter(2)详解3个设计模式

    Factory (bean creating) Proxy(Agent)(Aop)书有~ Templete(springMVC Facelets)//此处及以上忽略 工厂模式(Factory) 工厂模 ...

  4. node.js缓存处理方式

    Node.JS缓存处理分为客户端和服务端两个部分. 客户端的缓存主要是利用浏览器对HTTP协议响应头中cache-control和expires字段的支持.浏览器在得到明确的响应头后,会将文件缓存在本 ...

  5. GeoJSON相关操作

    简介 本文主要介绍GEOJSON相关的操作 环境 gt-geojson-.jar,jts-1.8.jar 直接上代码 代码 wkt格式的geometry转成json格式 public String e ...

  6. idea 多项目部署碰到的问题

    在使用idea部署多个maven项目的时候,出现了各种坑.一天的时间有一半的时间花在了部署环境.运行环境上.把遇到的坑记录下 1.引入maven的依赖包 当项目多的时候,为了加速项目的开发,习惯性的把 ...

  7. 推卡:“积分侠”的福利 广发DIY信用卡

    广发diy信用卡最大的优势在持卡人在三大类商户刷卡消费可享受3倍积分优惠,很多卡友不知道这些商户到底有哪些,以及商户mcc码是什么,下面和小编一起来看看. 可享受3倍积分的商户类型 持卡人可在以下三大 ...

  8. leetcode Ch1-search 2014

    1. Search Insert Position class Solution { public: int searchInsert(int A[], int n, int target) { ,r ...

  9. Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

    在这篇文章中 概观 演习 概要 由网络营 下载网络营训练包 在传统的Web应用程序中,客户机(浏览器)通过请求页面启动与服务器的通信.然后,服务器处理请求,并将页面的HTML发送给客户端.在与页面的后 ...

  10. RabbitMq ack 与 nack

    1.ack 移除 2.nack 移除再次发送队列