1. 概述

在本章中,我们将提供课程的大纲,以及简要的动机和主要的学习成果。

1.1. 课程信息

1.2. 动机

您想学习编程语言的原因有很多。举几个例子:

  • 了解几个编程 paradigms 将帮助你以更好的方式思考更多的问题。

  • 了解几个编程 languages 将帮助您以更好的方式实施您的解决方案。

  • 主题是激动人心的,也是智力上的挑战。

  • 越来越多的本地、全国和全球雇主喜欢它!

1.3. 主要学习成果

我们特意选择了本课程的学习结果,以补充您的计算机科学或软件工程课程中的其他课程。进入本课程后,您将已经熟悉命令式和面向对象的范例,这些范例来自Java、C++、C#或Python等语言。很可能,您还会熟悉使用C或C++的基本机器体系结构和内存管理。

在本课程中,我们将追求两个主要的学习成果和三个更具体的学习成果:

  • 编程范型概述

  • 对程序设计语言设计空间的理解

  • 精通函数式编程

  • 对程序表示和解释/执行的理解

  • 具备并发编程的基本能力

鉴于从移动设备到企业服务器的多核硬件的广泛可用性,人们对利用这种硬件的编程范例和技术的兴趣与日俱增。函数式编程特别有用,它不强调可变状态,并结合适当的并发构造。我们还将通过研究如何表示程序以及解释、执行或以其他方式处理这些表示来“深入了解”。

1.4. 函数式编程的几个起点

您可能会发现以下资源对了解函数式编程思维很有用:

  • 马丁·奥德斯基的演讲:有风格的Scala (YouTube)

  • 就函数式编程和Haskell采访Simon Peyton-Jones (SE Radio audio podcast)

  • L、Thiruvathukal和Kayler的演讲:静态类型函数式编程的前景:更广泛的上下文和语言比较 (visual presentation)

待处理

在此合并视觉演示

1.5. 课程大纲

这里有一份更详细的课程大纲(视情况而定)。

  • 业务和软件工程背景(1周)

    • 软件要求

      • 功能需求

      • 非功能需求

    • 发展过程

      • 测试

      • 重构

      • 自动化

    • 设计原则和模式

      • 关注点分离

      • 参数化性

      • SOLID

      • 戈夫/波萨

  • 命令式和面向对象编程(2周)

    • 控制台应用程序

    • 恒定空间复杂性

    • 测井

    • 领域建模

    • 使用特征实现模块化和依赖项注入

  • 函数式编程(4周)

    • 定义代数数据类型

      • 标量:枚举

      • 次线性结构:数字,选项

      • 线性结构:列表、地图

      • 非线性结构:树

    • 在代数数据类型上实现行为

      • 模式匹配

      • 递归

    • 高阶函数

    • 预定义类型及其行为

    • 递归模式

    • 更高级的类型

  • 编程语言表示和解释/执行(4周)

    • 语言设计空间

    • 扫描仪(词法分析器)

    • 解析器(语法分析器)

    • 解释器和编译器

    • 特定于领域的语言

  • 并发和并行编程(3周)

    • 并行集合

    • 期货和承诺

    • 进度报告和取消

    • 异步编程/反应式扩展(Rx)

    • 先进机制

      • 显式线程

      • 演员

      • 软件事务存储器

      • 任务并行库

      • 函数式数据结构

1.6. 布鲁姆分类学

这些字母指的是从认知领域学习的连续水平 Bloom's taxonomy

  • K:知道/记住这个术语

  • C:理解/理解概念

  • A:应用这项技术

  • 分析/评估/创建(高级)

待处理

将开花级别映射到课程大纲