概述

我将以速通且尽可能简洁的方式来讲述这门课程的内容,有其他编程语言(如 Python)基础的读者会更易懂,即笔者会使用 Python 作为伪代码解释本课程主要使用的编程语言 —— Racket

如何安装 Racket?

ps: Racket 真是一个冷门的语言,在了解这门课程之前我甚至不知道

在开始之前,需要了解下这门课程的目标:

  • 写代码解决问题
  • 写出可读性强、结构良好、文档齐全和经过测试的代码
  • 通过数据获取信息
  • 程序是如何操作不同数据结构、数据类型的
  • 代码的抽象(可用于设计库),简化相似解决方案的代码
  • 在程序设计中使用非代码模型

作为有过一些 C#/Python 开发经验的我来说,我似乎没有思考过数据与信息的关系,以及所谓“非代码模型”是什么。

但问题不大,课程的内容会在后续的学习中逐渐展开。

目录

本文会遵循CSPC 110 Lecture Index的顺序进行:

Lectures

1. Course overview, BSL expressions, functions

第一章会啰嗦一点,但尽早了解写程序的基本原则是有必要的。

程序设计中请遵循以下要点:

  • 跑通≠跑得好:你需要解释你怎么写的,哪来的自信保证它跑得好和复现?
  • 软件开发是个团队工作:你写的代码可能之后会被其他人修改,所以你要时刻保持友好 (我不认为)
  • 脚踏实地:不要总是指望灵感迸发,请始终以专业地态度来对待你的代码
  • 程序以数据表达信息:信息无处不在,数据是信息的载体,程序需要处理数据
  • 程序是有结构的:初级的结构包括条件判断、循环等,复杂一点的参考设计模式

在系统性程序设计中,请:

  • 写一致的、通过测试的代码
  • 基于对不同编程语言和软件工程的研究与实践的学习

或许你可以从AIGC中复制代码,但你如何:

  • 解释你怎么开发出来的?
  • 证明它是正确的?
  • 写出可靠的类似程序?

ps: 从AI抄代码是十分严重的学术不端的行为

世界上有成百上千的编程语言,其中有几百个较为熟知,但没有一个编程语言是最好的,能完美应对所有场景的。

借此,初学者可以通过学习 BSL (Beginning Student Language) 来了解编程语言的基本概念,以便专注于学习系统性程序设计、在未来更快地学习其他语言。

为了达到学习目的,这节课主要通过解决设计好的问题来进行,无论是 Lecture/Lab/Problem Sets/Homework

这节课不需要多少数学等STEM学科基础,但你需要足够细心(应对程序报错)、耐心(长时间解决一道难题)、谦虚(看着简单的题目也有可能做着难)

回归代码编写本身,我来介绍一些 Racket 语言的基本概念:

  • Expression (表达式):十分常见,暂且认为是这门语言的基本元素,即能被 Evaluted 的东西,比如数字、字符串、函数调用等
1
2
3
4
5
6
> 114514
114514
> "Hello, world!"
"Hello, world!"
> (substring "the boy out of the country" 4 7)
"boy"
  • Function (函数):可以自己定义一个函数,借由(define (function-name arguments) body)来定义一个函数,function-name是函数名,arguments是参数列表,body是函数体,其本身也是一个表达式
1
2
3
> (define (add x y) (+ x y))
> (add 1 2)
3
为什么是`(+ x y)`而不是`x + y`?

Racket 很像 Lisp 语言,其语法是(function-name arguments),我们所熟知的 x + y 是中序表达式,而在此处更像是前序表达式(即将操作符放在操作数之前)。