每个人都应该学习给电脑编写程序的技术,因为这一过程能够教你如何去思考!——史蒂夫·乔布斯
对一名软件工程师来说,什么是最重要的?是编程语言吗?如果你问100名工程师,那么100个人回答可能都是“No”。
编程语言层出不穷,不胜枚举,能够以不变应万变的奥秘何在?答案就是“编程之魂”。
传统的编程入门课,都是从教一种语言的基本语法开始的,试图通过语言来传达“编程之魂”,但这样也许你会将更多的精力用在理解语言的语法细节上,只见树木不见森林。
本课程是学习编程语言的基础,后面可以对接任何一门高级语言课程,本课程将学习编程之前你该了解的那些事,从具体的语言中独立出来,剥茧抽丝,取其灵魂,聚焦于程序设计思维的建立。
在其后继课程“C语言程序设计精髓”中,再以C语言为例,传授用语言表达思想的技术,聚焦于如何将编程之魂附着于C语言的躯体上。
期望通过这样的内容安排和讲解,你在学完以后不只是简单地掌握了一种语言的语法,还能理解隐含在语法背后的思想,并初步具备灵活使用这些思想进行编写程序解决实际问题的能力。
本课程面向的是零基础的人群,就像学钢琴要先学好乐理和练好指法而不要急于去弹小汤一样,我们会从你无论学习什么语言编程都应必备的基础知识讲起,这些内容不涉及代码,也与语言无关,但却对训练你的思维至关重要,学完这些你才能真正理解计算机为什么能解题以及计算机是如何解题的,而语言不过是实现这一求解过程的一种工具而已。当你回头看时,你会发现,学习编程的关键不是你能用自己熟悉的语言写出程序,而是能够针对要解决的问题,将问题转化为计算机求解的步骤。
你一定感到奇怪:不学语言,也可以学习程序设计;不写代码,也可以运行“程序”吗?
在本课程中,我们将借助基于流程图仿真的可视化工具raptor,用“编程之魂”武装你的大脑。
人生怎能没有一次说走就走的旅行?跟着“机器侠”,让我们一起向着快乐出发吧。
Overview
Syllabus
- 第1周:计算机基础
- 1.1 计算机与人工智能、计算机系统
- 1.2 计算机程序设计语言
- 1.3 数据的表示和存储——二进制
- 1.4 数据的表示和存储
- 第2周:程序设计方法基础-1
- 2.1 算法的概念与算法的描述方法—问题求解四部曲
- 2.2 顺序结构和选择结构—条条道路通罗马
- 2.3 循环结构—循环的控制方式—控制循环和买苹果一样简单
- 2.4 循环结构—用循环实现累加累乘运算—透视变量的内涵
- 2.5 循环结构—嵌套循环—嵌套的奥妙
- 2.6 进阶内容:循环结构—循环不变式—你确定你设计的循环正确吗
- 第3周:程序设计方法基础-2
- 3.1 基于流程图仿真的可视化计算工具——RAPTOR之让你的流程图动起来
- 3.2 基于流程图仿真的可视化计算工具——RAPTOR之再飞一会儿
- 3.3 自底向上的程序设计方法
- 3.4 自顶向下、逐步求精的程序设计方法
- 3.5 进阶内容:结构化程序设计方法——结构化就像搭积木一样
- 3.6 进阶内容:模块化程序设计方法——分工与合作的艺术
- 3.7 进阶内容:面向对象程序设计方法
- 第4周:问题求解与算法设计基础-1
- 4.1 分治—就在我们身边的哲学
- 4.2 穷举—从找回你的QQ密码谈起
- 4.3 递推—从前生到来世
- 4.4 迭代(上)—简单重复不简单
- 4.5 进阶内容:迭代(下)—以直代曲
- 4.6 递归—我中有我
- 第5周:问题求解与算法设计基础-2
- 5.1 RAPTOR中的数组----一堆数据来了
- 5.2 求最大最小值
- 5.3 线性查找——循规蹈矩
- 5.4 二分查找——看商品猜价格的秘诀
- 5.5 进阶内容:分块查找——图书馆查书的奥秘
- 5.6 进阶内容:哈希查找——小哈希映射大道理
- 第6周:问题求解与算法设计基础-3
- 6.1 冒泡排序
- 6.2 选择排序和交换排序
- 6.3 插入排序和希尔排序
- 6.4 归并排序
- 6.5 快速排序
Taught by
Xiaohong Su, Lingling Zhao, and Lin Ye