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?》,了解提问要注意什么

课程简介

上世纪初,罗素悖论(Russell’s paradox)成为了数理学家们头上的阴霾。为此,希尔伯特提出了著名的希尔伯特计划(Hilbert’s program),其旨在给数学建立一个可靠的地基,使得一切定理都可基于该地基的公理体系推出。而对于所有体系内的命题,人们只需要“算”一下即可验证其正确与否。如果这个计划能成功,那么那个17世纪的天才“莱布尼茨”的梦将会成真!然而该计划被不世出的哥德尔不完备定理(Gödel’s incompleteness theorems)无情击碎。人们开始意识到数学并不完美,也开始真正审视什么是“计算”,以及计算的极限在哪。

彼时,有一位英国学者正在悠闲的躺在草地上休憩时,突然想到了一个形式化机制可以用于描述“计算”。正如他的英国老乡的万有引力彻底改变了物理世界一样,这个形式化机制——“图灵机”——改变了计算的世界。这位学者就是名震世界的阿兰·图灵(Alan Turing)。在这之后,人类历史上第一台电子计算机的诞生开启了信息时代,计算机的硬件和软件快速地发展,人类的计算能力被一次又一次的提升,这便有了如今的编程世界。我们将从这里开始我们的课程!

课程目标
  1. 理解编程的本质,理解可计算性的基本理论
  2. 掌握程序设计中的抽象思想
  3. 熟悉一些编程范型,学习高阶函数、面向对象思想
  4. 掌握python、Java语言的基本使用方法
  5. 了解程序解释器的实现
参考资料

教材:

计算理论参考资料:

  • 《自动机理论、语言和计算导论》(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/3/18 A1 ddl: 2024/3/31 23:59 221900153
221900015
221900026
231880138
2024/3/18 A2 ddl: 2024/4/7 23:59 221900015
221900153
221900497
231880057
231880130
231880138
231880158
231880386
2024/3/28 lab1 ddl: 3.29 12:00——4.1 12:00  
  hw1 ddl: 3.29 12:00——4.5 12:00  
2024/4/2 lab2 ddl: 4.3 0:00 —— 4.7 12:00  
  hw2 ddl: 4.3 0:00 —— 4.11 12:00  
  proj1 ddl: 4.3 0:00 —— 4.25 12:00  
2024/4/10 lab3 ddl: 4.10 12:00 —— 4.13 12:00  
  hw3 ddl: 4.10 12:00 —— 4.17 12:00  

致谢(Acknowledgement)

感谢刘钦老师提供Seecoder作为本课程的课程OJ