这是一个专门为无基础人士准备的编程入门课程。
学习这个课程没有特别的前提条件,简单地说,只需要你符合下面两个条件,就能学会编程:
- 拥有一台运行
Windows 10
或者macOS 10.13+
的个人电脑,并可以顺畅访问互联网; - 对了解计算机的原理及编写程序有足够的兴趣和动力,愿意付出时间和努力去学习。
注:你当然也可以使用运行 Linux 的个人电脑来学习,只是我们没有提供专门针对 Linux 的操作指南,你需要在环境配置方面自己稍微多做些事情;绝大部分内容都是通用的。
和大部分编程教材及课程不同,我们希望能真正教会你编程——尤其是帮助你掌握 核心的思维方式 及 持续学习的方法,因为计算机和编程是快速发展和演变的领域,唯有掌握其基本规律,具备不断学习新知识的能力,才能真正掌握编程,让计算机和编程成为自己一生的朋友。
随着课程学习,我们希望你能够一步步完成:
- 战胜对计算机的恐惧,开始像与好友聊天一样与计算机进行交互;
- 理解编程本质,学习编程语言的基本结构和语法规则;
- 读懂简单的程序代码,从模仿开始逐步写出自己的程序;
- 循序渐进地学习掌握编程中最重要的抽象思维方法及配套工具;
- 通过学习典型的应用案例,设计和完成一个对自己有价值的程序实例。
在课程的最后,我们会提供一份 编程世界漫游指南,里面有很多编程世界里的有趣课题,也许可以帮助你找到继续学习的方向。
课程教学语言是 Python 3,但绝大部分内容是通用的,思维方法是语言无关的,这将显著降低你学习其他编程语言、框架和工具的难度。
如果确信自己希望踏入浩瀚的编程世界,请继续阅读下面的学习指引,了解如何开始学习。
编程(programming)并不算是一门 科学,更像是一种 手艺,里面有科学的部分,有理论有思想,也有经验和体会。学习编程最有效的方法是——赶紧动手开始写程序,如果不自己动手,听再多、再牛的课程讲解也没用。
在动手写程序的前提下,优秀的课程才能发挥作用——那就是减少你走弯路的机会,就好像学踢足球或者打高尔夫球,一开始就掌握 正确的姿势 很重要,之后就能够 事半功倍。
这门课程就能够发挥这样的作用——但必须你亲手开始编程。
为了让你尽快开始动手写程序,我们设计了一个学习方案,每个学习单元都由 听课、自学 和 提问 三个环节组成。
每周一次的课堂学习,这部分以讲解原理和思维方法为主,重点在学习如何思考,如何分析和解决问题(how to solve problem),以及如何学习(how to learn)”。
每次课堂讲解的最后会给大家布置自学任务,就是下面这个环节。
自学任务通常是完成课程指定章节的学习——这个学习不是简单地读教材,而是必须动手写程序。为了做到这一点,我们专门提供了可以下载到自己电脑上的“学习用书”。
学习用书和教材一样,都是用一种叫做 Jupyter Notebook 的格式编写的,这种格式编写的 notebook 中除了文字,还有 可运行的程序代码,也就是说你可以在文档中一边写代码一边运行它!
学习用书和教材的区别只有一个:在学习用书中,所有写着程序代码的单元格(cell)都被清空了,等着你自己动手填进去。
所以学习用书就好像我们小时候学写字时用的“描红本”,你可以对着教材“描”和“抄”。不要小看了这个“描”和“抄”的过程,无数实践证明,自己输入一遍和光看就是不一样;而且,程序和描字不同,你描的时候可以自己加入一些变化,随着你的学习进展,你敢于变化、变了还不出错、最后还能变出花样的地方会越来越多。
要使用 Jupyter Notebook 的格式的学习用书,就需要你的电脑拥有一个完整的 Python 环境,安装好 Jupyter Lab 这个基于 Python 的工具,具体请参考下面的 学习环境准备 一节。
完成自学任务的步骤:
- 使用下面的 课程大纲 打开指定章节阅读;
- 在自己的电脑上打开 学习用书 中对应章节,完成其中代码的编写和运行;
- 完成之后试着在不看教材的情况再完成一遍学习用书中的代码。
其中第 3 步是可选的,不过实践证明它对大部分人来说都是很有用的。
有时候自学任务还会包含 课程练习,即编写一个比较复杂和完整的程序,那就需要离开学习用书另外编写程序了。
自学过程中遇到问题是正常的,有了问题不解决是走不长久的,所以下面这个环节很重要。
我们鼓励大家提问,在学习过程中遇到问题就及时提出来,及时解决。
万事开头难,一开始快速清障前进,后面就会越来越顺。
可以使用 GitHub 提供的 Issues 功能来提问,只要访问 这个页面,点击右上的 New issue
绿色按钮即可提出问题。这个系统基本上就像一个问答论坛,然后集成了和编程有关的功能,具体可以自己去摸索。。
提问是有一些技巧的,经过思考和仔细编写的问题更容易得到靠谱答案。
关于这个问题,有个近乎标准的答案在网上已经存在很久了,那就是大牛 Eric S. Raymond 2001 年发表在 BBS 上的 How To Ask Questions The Smart Way,这篇文章从发表之后一直在不断更新修订,内容清晰详实,附有丰富的“好问题”和“蠢问题”样例,一看就明白;另有质量很不错的 中文译文(也是开源的)。请务必仔细阅读,尽量按照里面的建议来思考和组织你的问题。
常见或者特别有价值的问题我们会整理出来放到课程 Wiki 中,方便大家查阅。
Wiki 中还有课程相关的其他一些资源。
为了学习编程,你需要配置好一个(你可以用一辈子的)编程环境,这个配置过程有可能会有点痛苦,但它也是你开始和计算机做朋友时重要的经历。
作为学习编程的起点,下面几个软件是必须的:
git
:目前最广泛使用的“分布式版本管理系统”,如果不知道什么是“分布式版本管理系统”也不要紧,我们准备有 教程 和配套 视频讲解;- Python:课程采用 Python 3 作为教学语言;
- 程序编辑器:理论上任何文本编辑器都可以,但一个优秀的程序编辑器会带来千万倍的效率提升。
这些软件的安装和配置有很多办法,但我们强烈建议按照我们的指南来准备,这样做的好处有二:
- 你的系统会最大限度与我们的一致,这样出现问题的时候无论教职员工还是其他同学都更容易帮助你;
- 我们的建议方案本身就是一流程序员实践的方案,是你可以“用一辈子”的方案。
- 编程环境配置指南
- 配套视频讲解:for Windows 10 | for macOS
学习 视频课程 中列出的所有支线课程,尤其是标记“新手必看”的部分。
重要提示
- 这里列出的大纲是整个课程的完整内容,但对应链接是根据教学进度分批开放的;
- 当课程链接开放后,我们鼓励你尽可能多的自学,即使有些地方没搞懂,带着问题上课也会很有意义;
- 由于 GitHub 的 bug,有时候点击课程链接会出错,请参见大纲下面的说明。
- 第一章 理解编程语言
- 第二章 程序的基本结构(一):值与变量
- 第三章 程序的基本结构(二):操作符与函数
- 第四章 程序的基本结构(三):逻辑判断与分支
- 第五章 程序的基本结构(四):循环
- 第六章 程序的基本结构(五):异常处理
- 第七章 理解对象与类:起源篇
- 第八章 理解对象与类:概念篇
- 第九章 理解对象与类:Python 篇
- 第十章 字符与字符串
- 最十一章 课程练习
- 第一章 函数定义再探
- 第二章 程序中的文档
- 第三章 模块
- 第四章 递归
- 第五章 函数也是数据:初级篇
- 第六章 字符串数据
- 第七章 Iterable 与 Iterator
- 第八章 列表
- 第九章 元组,集合,字典
- 第十章 树
- 第十一章 有限状态机
- 第十二章 数据和数据库
- 第十三章 函数也是数据:进阶篇
- 编程世界漫游指南
- 自学实践案例
由于 GitHub 的某些 bug,点击上面的这些链接打开 notebook 时可能会出现 Sorry, something went wrong. Reload?
的错误,这时可改用下面的链接(Jupyter Notebook 官方提供的阅读器):
ipynb
后缀的文件就是 notebook 文件,文件名开头部分为篇章编号:a
对应第十章,b
对应第十一章,依此类推;x
开头的则是附录。
如果在学习过程中发现课程教材中的错误,也可以通过 Issues 系统提出。