Skip to content

Latest commit

 

History

History
166 lines (111 loc) · 11.1 KB

HOWTO.md

File metadata and controls

166 lines (111 loc) · 11.1 KB

进入编程世界的第一课

前言

这是一个专门为无基础人士准备的编程入门课程。

学习这个课程没有特别的前提条件,简单地说,只需要你符合下面两个条件,就能学会编程:

  • 拥有一台运行 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 的工具,具体请参考下面的 学习环境准备 一节。

完成自学任务的步骤:

  1. 使用下面的 课程大纲 打开指定章节阅读;
  2. 在自己的电脑上打开 学习用书 中对应章节,完成其中代码的编写和运行;
  3. 完成之后试着在不看教材的情况再完成一遍学习用书中的代码。

其中第 3 步是可选的,不过实践证明它对大部分人来说都是很有用的。

有时候自学任务还会包含 课程练习,即编写一个比较复杂和完整的程序,那就需要离开学习用书另外编写程序了。

自学过程中遇到问题是正常的,有了问题不解决是走不长久的,所以下面这个环节很重要。

提问

我们鼓励大家提问,在学习过程中遇到问题就及时提出来,及时解决。

万事开头难,一开始快速清障前进,后面就会越来越顺。

可以使用 GitHub 提供的 Issues 功能来提问,只要访问 这个页面,点击右上的 New issue 绿色按钮即可提出问题。这个系统基本上就像一个问答论坛,然后集成了和编程有关的功能,具体可以自己去摸索。。

提问是有一些技巧的,经过思考和仔细编写的问题更容易得到靠谱答案。

关于这个问题,有个近乎标准的答案在网上已经存在很久了,那就是大牛 Eric S. Raymond 2001 年发表在 BBS 上的 How To Ask Questions The Smart Way,这篇文章从发表之后一直在不断更新修订,内容清晰详实,附有丰富的“好问题”和“蠢问题”样例,一看就明白;另有质量很不错的 中文译文(也是开源的)。请务必仔细阅读,尽量按照里面的建议来思考和组织你的问题。

常见或者特别有价值的问题我们会整理出来放到课程 Wiki 中,方便大家查阅。

Wiki 中还有课程相关的其他一些资源。

学习环境准备

为了学习编程,你需要配置好一个(你可以用一辈子的)编程环境,这个配置过程有可能会有点痛苦,但它也是你开始和计算机做朋友时重要的经历。

作为学习编程的起点,下面几个软件是必须的:

  1. git:目前最广泛使用的“分布式版本管理系统”,如果不知道什么是“分布式版本管理系统”也不要紧,我们准备有 教程 和配套 视频讲解
  2. Python:课程采用 Python 3 作为教学语言;
  3. 程序编辑器:理论上任何文本编辑器都可以,但一个优秀的程序编辑器会带来千万倍的效率提升。

这些软件的安装和配置有很多办法,但我们强烈建议按照我们的指南来准备,这样做的好处有二:

  1. 你的系统会最大限度与我们的一致,这样出现问题的时候无论教职员工还是其他同学都更容易帮助你;
  2. 我们的建议方案本身就是一流程序员实践的方案,是你可以“用一辈子”的方案。

第一步:安装和配置必要的软件

第二步:准备好学习用书和所需工具

第三步:熟悉和掌握命令行界面和常用的工具

学习 视频课程 中列出的所有支线课程,尤其是标记“新手必看”的部分。

课程大纲

重要提示

  1. 这里列出的大纲是整个课程的完整内容,但对应链接是根据教学进度分批开放的;
  2. 当课程链接开放后,我们鼓励你尽可能多的自学,即使有些地方没搞懂,带着问题上课也会很有意义;
  3. 由于 GitHub 的 bug,有时候点击课程链接会出错,请参见大纲下面的说明。

第一部分 基础篇

第二部分 进阶篇

第三部分 应用篇

  • 编程世界漫游指南
  • 自学实践案例

附录

  1. 编程环境配置指南
  2. 如何使用配套学习用书
  3. Git 与 GitHub 入门
  4. 正则表达式入门
  5. MySQL 配置指南
  6. Redis 配置指南

关于打开教材出错的说明

由于 GitHub 的某些 bug,点击上面的这些链接打开 notebook 时可能会出现 Sorry, something went wrong. Reload? 的错误,这时可改用下面的链接(Jupyter Notebook 官方提供的阅读器):

https://nbviewer.jupyter.org/github/neolee/wop/tree/master/

ipynb 后缀的文件就是 notebook 文件,文件名开头部分为篇章编号:a 对应第十章,b 对应第十一章,依此类推;x 开头的则是附录。

纠错反馈

如果在学习过程中发现课程教材中的错误,也可以通过 Issues 系统提出