每个人都应该学习给电脑编写程序的技术,因为这一过程能够教你如何去思考!
——史蒂夫·乔布斯
对一名软件工程师来说,什么是最重要的?是编程语言吗?如果你问100名工程师,那么100个人回答可能都是“No”。
编程语言层出不穷,不胜枚举,能够以不变应万变的奥秘何在?答案就是“编程之魂”。
传统的编程入门课,都是从教授一种语言的基本语法开始的,试图通过语言来传达“编程之魂”,但这样也许你会将更多的精力用在理解语言的语法细节上,只见树木不见森林。
为此,我们将“程序设计”这门课程拆成两门课程:程序设计基础,C语言程序设计精髓。前者6周,后者15周。
本课程的目标是为未来的编程高手打下最坚实的基础,将学习编程之前你该了解的那些事,从具体的语言中独立出来,剥茧抽丝,取其灵魂,聚焦于程序设计思维的建立。在其后继课程“C语言程序设计精髓”中,再以C语言为例,传授用语言表达思想的技术,聚焦于如何将编程之魂附着于C语言的肉体上。
期望通过这样的内容安排和讲解,你在学完以后不只是简单地掌握了一种语言的语法,还能理解隐含在语法背后的思想,并初步具备灵活使用这些思想进行编写程序解决实际问题的能力。
本课程面向的是零基础的人群,就像学钢琴要先学好乐理和练好指法而不要急于去弹小汤一样,我们会从你无论学习什么语言编程都应必备的基础知识讲起,这些内容不涉及代码,也与语言无关,但却对训练你的思维至关重要,学完这些你才能真正理解计算机为什么能解题以及计算机是如何解题的,而语言不过是实现这一求解过程的一种工具而已。当你回头看时,你会发现,学习编程的关键不是你能用自己熟悉的语言写出程序,而是能够针对要解决的问题,将问题转化为计算机求解的步骤。这也正是我们安排前6周课程的意义所在。
你一定感到奇怪:不学语言,也可以学习程序设计;不写代码,也可以运行“程序”。这是真的吗?究竟是“真”是“假”,在本门课程“程序设计基础”中,你可以找到答案。
人生怎能没有一次说走就走的旅行?你是不是期待已久并早已跃跃欲试了呢?那就快快加入我们,和我们一起踏上程序设计之旅吧。
这是目前暂时设计的课程大纲。每周均为1个小时的课时内容。合计6周。根据大家在讨论区的反映,我们会随时对大纲做出调整.
6学时,6周
三个知识单元:计算机基础,程序设计基础,问题求解与算法设计基础
第1周(主讲:叶麟,赵玲玲):
第1章 计算机基础
1.1 计算机与人工智能、计算机系统
1.2 计算机程序设计语言
1.2.1 人与计算机是如何通讯的?
1.2.2 机器语言与高级语言
1.2.3 C语言简介
1.2.4 计算机的基本工作原理
1.3 数据的表示与存储
1.3.1 二进制数
1.3.2 数据与内存
1.3.3 整数与实数
第2周(主讲:苏小红):
第2章 程序设计基础-1
2.1 算法的概念与算法的描述方法
2.2 顺序结构和选择结构
2.3 循环结构
2.3.1 循环的控制方式
2.3.2 用循环实现累加和累乘运算
2.3.3 嵌套循环
2.3.4 循环不变式
第3周(主讲:苏小红,赵玲玲):
第2章 程序设计基础-2
2.4 基于流程图仿真的可视化计算工具RAPTOR介绍
2.5 结构化与模块化程序设计方法
2.5.1 自底向上的程序设计
2.5.2 自顶向下、逐步求精的程序设计
2.5.3 结构化程序设计方法
2.5.4 模块化程序设计方法
2.5.5 内聚度和耦合度的分类
2.6 面向对象程序设计方法
第4周(主讲:苏小红,叶麟):
第3章 问题求解与算法设计基础-1
3.1 常用的问题求解策略和求解方法
3.1.1 分治
3.1.2 穷举
3.1.3 递推
3.1.4 迭代
3.1.5 递归
第5周(主讲:苏小红,赵玲玲):
第3章 问题求解与算法设计基础-2
3.2 在RAPTOR中使用数组
3.3 常用的算法
3.3.1 求最大最小值
3.3.2 顺序查找
3.3.3 二分查找
3.3.4 分块查找
3.3.5 哈希查找
第6周(主讲:叶麟):
第3章 问题求解与算法设计基础-3
3.3.6 冒泡排序
3.3.7 交换排序和选择排序
3.3.8 希尔排序和插入排序
3.3.9 归并排序
3.3.10 快速排序
本课程可以零基础学习,适用于完全没有编程基础但又很想深入学习程序设计的人群。
大学计算机、计算思维导论等课程有助于深入理解本课程的部分内容,但这些课程的学习不是必须的。
评分方案:
按照周测验、单元作业和期末考试的答题情况进行评分,周测验60分,课堂讨论的活跃度10分,期末考试30分。
周测验和考试的题型以单选为主。题目数量是每周测试5道题,每题2分,每周合计10分,6周合计60分。
证书:
设置“合格”(达到60分以上)、"优秀"(达到80分以上)两档标准,由任课教师签发课程结业证书,其中成绩“优秀”者将颁发优秀证书。
1. 面向读者的教材网站(https://book.sunner.cn)
该网站的服务对象是我们自编教材的读者,提供教材课件、例题源代码、教材勘误表等资源,便于学生浏览和下载后自学,读者也可利用该网站反馈教材使用意见和建议。
2. 参考教材
1)苏小红等,《程序设计基础》,高等教育出版社,待出版
2) 程向前、陈建明,《可视化计算》,清华大学出版社,2013年1月,购书网址:淘书网
3)苏小红,王宇颖,孙志岗,《C语言程序设计(第2版)》,高等教育出版社,2013年8月,购书网址:淘书网,或者京东
4)苏小红,车万翔,王甜甜,《C语言程序设计学习指导(第2版)》,高等教育出版社,2013年9月,购书网址:淘书网,或者京东
5)苏小红,孙志岗,陈惠鹏,《C语言大学实用教程(第3版)》,电子工业出版社,2012年6月,购书网址:淘书网,或者当当网,或者京东
6)苏小红,孙志岗等,《C语言大学实用教程学习指导(第3版)》,电子工业出版社,2012年6月,购书网址:淘书网,或者当当网,或者京东
3.相关链接
爱课程国家精品资源共享课:https://www.icourses.cn/coursestatic/course_3153.html
后续MOOC课程:C语言程序设计精髓:https://www.icourse163.org/course/hit/0809HIT004B#/info
Q:本门课程面向的授课群体是什么?没有任何基础能学习本课程吗?
A:本门课程面向零基础的学习者,适用于完全没有编程基础但又很想深入学习程序设计的人群。没有任何编程基础的人可以学习,而且建议在具体学习一门编程语言之前最好先学习本课程,本课程的内容是你学习编程语言前应必备的基础知识,对训练你的思维至关重要。
Q:本课程与其他课程在授课内容和讲授方法上有何不同?
A:根据初学者的认知规律,我们先后开设“程序设计基础”和“C语言程序设计精髓”两门课程,每门课程的预期目标有所不同。
在前6周的“程序设计基础”中,我们不会让你急于去编写代码,会从你学习编程语言前应必备的基础知识(例如画流程图)讲起,这些内容看似与C语言无关,但却对训练你的思维至关重要,学完这些你才能真正理解计算机为什么能解题以及计算机是如何解题的,而语言不过是实现这一求解过程的一种工具而已。
在后15周的“C语言程序设计精髓”课程中,深入讲解C语言,在授课过程中,我们会注重解释“为什么”,揭示知识点背后的原理和思想,适时引入错误程序的分析、测试与调试,将一些易被忽视且对高水平程序设计很重要的“点”逐一展现给你,沿着数据结构从简单到复杂的主线展开,将软件工程相关的思想和方法渗透其中,从紧密结合实际的问题出发,在一个实例的“不断深化和提升”中逐步引出相关知识点,通过对问题的举一反三和前后知识点的融会贯通,由浅入深地启发引导你循序渐进地编程,让你在不知不觉中逐步加深对程序设计方法的了解和掌握。
期望通过这样的内容设计,学完这两门课程以后,你不只是简单地掌握了C语言的语法,还能够理解隐藏在语法背后的思想,并初步具备灵活使用这些思想进行编程的能力。
Q:我想考二级,学完这个课程可以考吗?
A:二级考试题考查语言的语法细节较多,所以能否通过二级考试,要看你的应试水平如何。本课侧重于讲解程序设计的方法以及错误程序的排错方法,更关注实战能力,因此应该说本课程对学生的要求是高于二级考试的要求的。
Q:如何学好程序设计?
A:“熟读唐诗三百首,不会吟诗也会诌”,编程也是如此。写出的漂亮程序不是听课听出来的,也不是看书看出来的,而是读别人的程序读出来的,更是自己动手练出来的。学习编程一定要多读多写多练啊,除此以外是没有捷径可走的。
Q:绘制流程图有专门的工具吗?
A:绘制流程图使用率最高的软件之一是画图工具软件Visio。Visio属于Microsoft Office系列软件。Visio有多种绘图模版和工具,制作的图表范围十分广泛,可以绘制流程图、地图、企业标志等。Visio绘制的图形可以方便地复制到其他Office文档中,简单易学,容易上手,因此受到广泛欢迎。Office Visio 2010中的新增功能和增强功能使得创建 Visio 图表更为简单、快捷。
Q:RAPTOR是什么?
A:RAPTOR是一种基于流程图的可视化程序设计环境,用户只需要将RAPTOR提供的基本流程图符号进行连接就可以设计和实现一个算法,然后在RAPTOR环境下调试和运行,就可以直接得到运行结果。该环境可以直观地显示当前执行符号所在的位置,所有变量的内容,帮助用户跟踪RAPTOR程序的指令流执行过程,从而帮助用户理解程序执行过程、修改错误。此外,RAPTOR还提供了一个简单图形库帮助用户开发图形界面。RAPTOR开发环境的最大优点是可以在最小化语法要求的情形下,帮助用户编写正确的程序指令,从而摒弃了学习一般程序设计语言的句法困难和不可视化的缺点。
RAPTOR下载地址:https://raptor.martincarlisle.com/