编程

一旦你发现一个学习工具,它采用自上而下的方法,那么什么是最好的学习方法?我对这有一个具有争议性的观点:我认为尽可能快地记住基础知识对初学者而言是绝对有必要的。当成为更高级的学习者,记忆很快成为一个被丢弃了的方式。你可能听到过别人轻视地说(“不要死记,要内部消化”,“我在消化记住的东西”,“我讨厌测试,我不得不回想起记忆中的东西”)。

另一方面,当你还是小学的时候,你被迫花时间来背乘法口诀表。为什么要背呢?因为你的基础乘法口诀表可以是构建更复杂的乘除法的基础。这和你记忆编程语言的语法并没有什么不同:如果你写 if 或 for 循环越自然,那么你写出更复杂的语句块也更容易。

我也承认记忆并不总是学习所有东西的最好方法,但是我相信对于编程初学者而言,是实践编程所绝对必须的。为什么呢?因为它可以减少阻力,如果有什么东西会带给初学者挫折,那就是阻力。

考虑到这一点,这里有一些具体的建议给那些正在学习或准备学习 Web 应用开发的初学者。实际上,说得更远点更抽象点,这就是一个如何开始学习软件开发的一个好计划。很显然,这不是一个适合所有人的计划,但是我认为它一定适合大部分初学者。

  1. 学习一门弱类型的编程语言,不要先学习那种具有强制类型的、面向对象的编程语言。严格而言,如果有人对你提到 class (类)或继承,那么你就应该去选择其它的途径了。虽然我认同类和继承相关技术是软件开发中必不可少的,但是我强烈认为它们不应该是初学者的选择。
  2. 鉴于此,我认为 JavaScript 是初学者而言最理想的编程语言,因为:(a) JS 解释器在绝大部分浏览器上都可用,(b)它的面向对象特性并不是强制型的,(c)在工业界被广泛使用(是的,即使是 web 之外的客户端,即使是现在担任设备工程师的我也做嵌入 JavaScript 的工作。)
  3. 说得更具体点,我建议你学习用 JavaScript 如何学习去下面的事,特别是以这个顺序:
  4. 学习如何打印出一些东西,学习如何声明和定义变量,学习基本算术运算操作(包括余数操作),学习循环(特别是 for 循环),学习把抽象重复的代码写成函数,学习字符串和用循环操作字符串,学习数组和数组的循环方法(特别是 foreach 循环),学习创建和操作对象数据集。
  5. 记住上面的这些并每天写一个程序来实践,直到这些都轻而易举地想起来。
  6. 学习 Git 的基本操作,学习通过命令行使用 Git。这意味着要先学习四个 Unix/Linux 命令(ls,pwd,mkdir,cd)。当学习了这几个命令,也就学会了以“树型”或层次结构的呈现方式查询文件系统。
  7. 一旦你掌握了上面的几个 Unix/Linux 命令,并会从命令行进入文件系统,你就应该学几个基础的 Git 命令。主要是 git init, git status, git add and git commit。
  8. 一旦你掌握了 Git 的基本操作,在学习下面的技术时将其集成到你的工作流中。
  9. 学习 HTML 基础,能够凭记忆创建简单的 HTML 页面。学习 DOM 和如何理解 HTML 作为指定的分层树结构。花点时间来思考它如何关系到你在前面步骤中学到的分层文件系统。
  10. 学习 CSS 选择器,了解它如何让你选定 DOM 的某些部分。了解 DOM 元素之间的关系。了解一个 DOM 元素作为另一个 DOM 元素的父元素或子元素的含义。理解这与后代和祖先之间的关系有什么不同。记住选择器可以让你通过这些关系来选定某些元素。
  11. 学习 jQuery,并主要专注于 DOM 的操作能力。学会用 jQuery 对 DOM 插入或删除元素,实践可视化如何影响用 DOM 定义的树型结构。
  12. 实践 jQuery 中的事件处理和 DOM 操作(比如,实践操作 DOM 当用户点击某个东西,或在指定的时间间隔)。
  13. 多练习 JavaScript 对象,并把它们当作可变的聚合器。学习如何用 JavaScript 来表示更复杂的数据而不是基本数据类型。学会应用并操作这些数据结构。理解并定义 JSON、理解它如何与 JavaScript 对象相关联。
  14. 学会使用 jQuery 的 getJSON 函数从文件中获取数据到 JavaScript 对象中。使用类似的技术,用一个简单的 JSONP API 去练习用 AJAX 拉取数据。练习向 DOM 插入和删除这个数据。

在这个阶段,做一个简单的幻灯片来循环播放 Flickr 图片,这将是一个令人难以置信的项目,将真正考验你的能力,使用之前学过的基础技术来实现它。

如果你做了这一步,那么你已经掌握了大量必备的编程和计算机科学基本概念。具体来说,你掌握了计算机程序的最重要元素(如果 if-else 语句,循环,变量,对象,函数,数组等),你已经学会了链式或树型的数据结构。这时,无疑你已经准备好转移到更高级的主题。

英文原文:A Strong Approach To Learn Programming