概述
我将以速通且尽可能简洁的方式来讲述这门课程的内容,有其他编程语言(如 Python)基础的读者会更易懂,即笔者会使用 Python 作为伪代码解释本课程主要使用的编程语言 —— 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 | > 114514 |
- Function (函数):可以自己定义一个函数,借由
(define (function-name arguments) body)
来定义一个函数,function-name
是函数名,arguments
是参数列表,body
是函数体,其本身也是一个表达式
1 | > (define (add x y) (+ x y)) |
为什么是`(+ x y)`而不是`x + y`?
Racket 很像 Lisp 语言,其语法是(function-name arguments)
,我们所熟知的 x + y
是中序表达式,而在此处更像是前序表达式(即将操作符放在操作数之前)。