课程详情
课程评价
spContent=人类学语言时,学会了听说读写,学数学时,学会了运算推理,学物理时,学会了观察实证,从而可以理解现实生活的周围,以便针对问题提出有效的解决方案。出于同样的理由,我们应该学习编程,这样能更好地理解越来越数字化的世界。编程不只是一门技术,它教会人们如何思考。现在,与我们一起学编程吧!
—— 课程团队
课程概述

程序设计(CPComputer Programming)课程是大学计算机教育的核心课程,它既是各类专业技术的应用基础,又是各种实践环节的软件工具,更是课程设计、学科竞赛、毕业设计、创新创业、创客科技等活动的重要平台。编程能力不仅是学习者进一步专业深造的潜力体现,也是创新人才的重要指标。

学习编程包括语言工具、问题求解、实现方法、算法思想、编程抽象、编程范式、设计模式等内容,涉及算法设计、程序实现、计算科学、软件工程、系统开发、学科交叉等方面。本质上,程序是逻辑演绎的形式化表达,反映的是人类对这个世界的数字化理解。因此,提高编程能力可从两点出发:一是以思维训练为中心的编程技能,二是以学科融合为核心的领域知识。

那么,如何学习编程呢?

1.按“双线索”学习程序语言

任何程序语言,包括C语言,都是一个标准化的、具有庞大知识内容的形式语言体系。因此以语言知识为学习线索必然是整体凌乱、抓不住主次,容易迷失学编程的方向。

须知,计算机的基本工作原理决定了计算机问题求解是“计算数据”的过程,编程就是去解决“如何表示数据”和“如何实现计算”。将“数据表示”和“程序实现”作为学习程序语言的两条主线索,抓住语言对此所起的作用,螺旋上升,交叉推进,如下图:

这时,你会发现程序语言是服务编程的工具而不是目标。

2.有“节奏感”推进编程实践

学习程序语言时需要快节奏,学习编程方法和编程技术时需要慢节奏,即使是敲代码也要有节奏,快慢使得学习者“抓大”(设计方法)“放小”(语言知识),得到最大化的“饱满感”编程训练。

学编程需要完成大量练习,称为“刷题”。编程实践过程中的灵感、技术、习惯、动机、反思以及畅想,将会把程序设计的知识逐一转化成技能,形成编程思维。对编程有激情是一件很美妙的事情,但同时也必须培养自己对于编程周边所有事情的热情。在节奏引领下可以更有效地与计算机对话,从而赋予我们将创意变成原型的能力。

这时,你会发现编程是帮助人们与计算机沟通的工具。

3.从“多维度”进行思维训练

计算科学思维是多维度的,例如基于计算技术的普适思维,特点是抽象和构造;基于算法思想的数学思维,特点是形式化和自动化;基于数据技术的逻辑思维,特点是因果关系和相关关系;基于系统结构的应用思维,特点是整体性和结构性。

程序最重要的两个基本要素是算法和数据结构,编程的难点不是算法或者数据结构本身,而是如何理解和分解问题,并将其映射到最合适的算法或数据结构上,这个映射本身不是程序要解决的问题,是人脑在思维,是构造性思维、逆向思维、猜想与试验、设计思维等全脑思维的艺术。

这时,你会发现编程是思维的体操。

4.用“系统观”拓展编程视野

衡量编程有两个重要指标:编程累计行数(TLOC)和单个程序行数(SLOC)。以解题为主的编程训练能提高TLOC,但却止步于SLOC。即使将小规模、数学型问题做成百上千,TLOC指标上去了,但SLOC却不见长。一般的,SLOC小于300行时很难让人体会到“开发的感觉”,这时编程局限在“数学工具”视野里。显然,单纯的思维训练和仅仅摄取知识信息无法形成系统观。

实际上,计算方法(数值计算、非数值计算)仅是程序设计方法的一种,程序方法学中还有诸如操作系统、人机界面、图形图像、多媒体、网络通信、数据库、硬件接口等技术领域,每个领域都有独特的编程技术和精巧的解决方法。通过引入高级编程技术的学习,融合各类学科专业的领域知识,拓展求解问题的专业覆盖面、问题复杂度和数量,可以改变编程的广度、深度和力度,形成编程核心模式及对它们不断运用所形成的思维方式的系统观,这是优秀程序员最重要的素质。

这时,你会发现编程是全方位的创新实践。

5.以“跨领域”塑造核心价值

掌握知识和能力是大学学业的价值,但仅仅是这些就可能掩盖了大学学业的核心价值和潜质,即通过知识内化为思维、通过能力提升到创造,最终拥有终身享用不尽的、可持续发展的知识发现、知识获取、知识建构的科学素养。

学会了编程就等于掌握了信息时代的听说读写能力,学习编程形成的心理技能对于我们生活的其他方面都极其有用。通过跨学科、跨领域的延伸,编程将提高问题求解的能力,提升对世界的理解力和改善解决问题的决策能力,建立起批判性思维、系统性思维、创造性思维。通过增加挑战式内容,强化在专业学科研究上表现出很强的发展潜力,形成学业核心价值。

这时,你会发现编程教会人们如何思考。


归纳起来,就是“技能提升、思维训练、系统培养、价值塑造”。

授课目标

本科生和社会学习者

课程大纲
预备知识

学习者应该先修过或已经掌握计算机导论或者大学计算机基础的主要内容,了解计算机的发展过程,理解计算机系统的构成和基本工作原理,并能够熟练地操作计算机及通过互联网获取信息资源。不能双手盲打键盘的学生,需要在开课初期多练习,迎头赶上!

证书要求

1.本课程要求完成的作业分为3种:

A1)测验练习(简称QUIZ):在每周课后安排随堂测验,内容为程序语言知识题,题型为客观题。

A2)问题求解(简称NOJ,网址:www.cpskill.com):共有十季编程题,每季从题库中抽取10题,采用机器在线评阅。每题须在2周内完成,但学习者可任意选取时间点开始,全部习题须在课程结束前完成。

A3)课程设计(简称Devforge,网址:www.cpskill.com):与本课程后续的拓展实验配套,共有两个项目题,每个题目需在1-2周内完成,全部项目必须在课程结束前完成

 

2.本课程要求完成的考试如下

期末考试在课程结束的指定时间进行MOOC课程线上测试。考试题型为编程题等。

 

3.总成绩(实验环节仅线下或SPOC)计算方法:

按百分制计分,总成绩=QUIZ×10% + NOJ×50% + 期末考试×40%

 

4.证书:

1)合格:总成绩60分至84分为合格,申请后可获得合格证书。

2)优秀:总成绩85分至100分为优秀,申请后可获得优秀证书。

 

5.协作与欺骗政策:

QUIZ、NOJDevforge:学习者可以与其他同学讨论完成,但所有代码必须是自己编写的,当NOJ机器评阅检查出作业结果(称为查重)有较高相似度时,后提交的习题判罚0分,三次查重违例,总计分为0分。

参考资料

1.姜学锋、曹光前,C程序设计,清华大学出版社,2012年,ISBN 978-7-302-28011-8在线购买

2.姜学锋、魏英,C程序设计实验教程,清华大学出版社,2011年,ISBN 978-7-302-24943-6在线购买

3.姜学锋、刘君瑞、汪芳,C程序设计习题与解析,清华大学出版社,2011年,ISBN 978-7-302-24942-9在线购买

常见问题

......