2024春季 软件工程与计算1
课程信息
- 教师:钮鑫涛 (niuxintao@nju.edu.cn)
- 助教:
- 理论助教:谢润烁 (xiersh@smail.nju.edu.cn)
- 实验助教:丁旭行 (583634562@qq.com)
- 时间:周一 2-4节
- 地点:新教207
- QQ群:810644271(申请加入需提供院系、姓名、学号)
- 实验OJ:Seecoder
- 理论作业平台:SELearning
- 选课码:2024
- 问答交流平台:Piazza,Access code:q97idso9ych
- 如果没有Piazza账号,请先注册一个账号,填写邮箱和名字
注意:名字填写完无法修改,如果希望实名的话就不要乱填了 - 请先阅读《为什么我们要用Piazza?》,了解提问要注意什么
- 如果没有Piazza账号,请先注册一个账号,填写邮箱和名字
课程简介
上世纪初,罗素悖论(Russell’s paradox)成为了数理学家们头上的阴霾。为此,希尔伯特提出了著名的希尔伯特计划(Hilbert’s program),其旨在给数学建立一个可靠的地基,使得一切定理都可基于该地基的公理体系推出。而对于所有体系内的命题,人们只需要“算”一下即可验证其正确与否。如果这个计划能成功,那么那个17世纪的天才“莱布尼茨”的梦将会成真!然而该计划被不世出的哥德尔不完备定理(Gödel’s incompleteness theorems)无情击碎。人们开始意识到数学并不完美,也开始真正审视什么是“计算”,以及计算的极限在哪。
彼时,有一位英国学者正在悠闲的躺在草地上休憩时,突然想到了一个形式化机制可以用于描述“计算”。正如他的英国老乡的万有引力彻底改变了物理世界一样,这个形式化机制——“图灵机”——改变了计算的世界。这位学者就是名震世界的阿兰·图灵(Alan Turing)。在这之后,人类历史上第一台电子计算机的诞生开启了信息时代,计算机的硬件和软件快速地发展,人类的计算能力被一次又一次的提升,这便有了如今的编程世界。我们将从这里开始我们的课程!
课程目标
- 理解编程的本质,理解可计算性的基本理论
- 掌握程序设计中的抽象思想
- 熟悉一些编程范型,学习高阶函数、面向对象思想
- 掌握python、Java语言的基本使用方法
- 了解程序解释器的实现
参考资料
教材:
- Composing Programs by John DeNero
大名鼎鼎的SICP(Structure and Interpretation of Computer Programs)的Python版,CS61A的课程材料
计算理论参考资料:
- 《自动机理论、语言和计算导论》(Introduction to Automata Theory, Languages and Computation),John E. Hopcroft/Rajeev Motwani/Jeffrey D. Ullman著
- 《计算理论导引》(Introduction to the Theory of Computation),Michael Sipser著
程序设计语言参考资料:
- 《流畅的python》,Luciano Ramalho著
- 《JAVA核心技术(两卷)》,Cay S. Horstmann著
课程安排
日期 | 课件与演示代码 | 课外阅读 |
---|---|---|
2024/2/26 | 00 软件工程与计算1课程简介 01 基础-编程语言概述 | 01 编程语言概述 补充阅读 |
2024/3/4 | 02 基础-可计算性 | *On Computable Numbers, with an Application to the Entscheidungsproblem by Alan Turing |
2024/3/11 | 03 基础-Lambda演算 | *An unsolvable problem of elementary number theory by Alonzo Church Peter Selinger’s Notes on the Lambda Calculus的前三章 |
2024/3/18 | 03 基础-Lambda演算 03.a 基础理论总结 04 编程实践-程序设计基本元素 演示代码:01-Code | |
2024/3/25 | 05 - 1 编程实践-控制 05 - 2 编程实践-环境图 06 - 1 编程实践-高阶函数 演示代码:02-Code | |
2024/4/1 | 06 - 2 编程实践-递归 演示代码: 03-Code | |
2024/4/7 | 07 - 1 编程实践-数据抽象 07 - 2 编程实践-容器 演示代码:04-Code | |
2024/4/15 | 08 - 1 编程实践-可变性 演示代码:05-Code | |
2024/4/22 | 08 - 2 编程实践-迭代器和生成器 09 编程进阶-面向对象 演示代码:06-Code | |
2024/4/29 | 10 - 1 编程进阶-继承 10 - 2 编程进阶-多态 演示代码:07-Code.zip | |
2024/5/6 | 11 编程进阶-Java的基本语法 演示代码: 08-Code.zip | |
2024/5/13 | 12 编程进阶-Java面向对象 演示代码: 09-Code.zip | |
2024/5/20 | 13 编程进阶-Java的其他特性 演示代码: 10-Code.zip | |
2024/5/27 | 14 编程进阶-解释器 | |
2024/6/3 | 15 软件工程的过去,现在与将来 |
*代表为难度较高的材料,学有余力且感兴趣的同学可以去看看
理论作业
日期 | 作业 | 未提交同学学号 |
---|---|---|
2024/3/18 | 221900153 221900015 221900026 231880138 | |
2024/3/18 | 221900015 221900153 221900497 231880057 231880130 231880138 231880158 231880386 |
致谢(Acknowledgement)
感谢刘钦老师提供Seecoder作为本课程的课程OJ