一旦你发现一个学习工具,它采用自上而下的方法,那么什么是***的学习方法?我对这有一个具有争议性的观点:我认为尽可能快地记住基础知识对初学者 而言是绝对有必要的。当成为更高级的学习者,记忆很快成为一个被丢弃了的方式。你可能听到过别人轻视地说(“不要死记,要内部消化”,“我在消化记住的东 西”,“我讨厌测试,我不得不回想起记忆中的东西”)。
另一方面,当你还是小学的时候,你被迫花时间来背乘法口诀表。为什么要背呢?因为你的基础乘法口诀表可以是构建更复杂的乘除法的基础。这和你记忆编程语言的语法并没有什么不同:如果你写 if 或 for 循环越自然,那么你写出更复杂的语句块也更容易。
我也承认记忆并不总是学习所有东西的***方法,但是我相信对于编程初学者而言,是实践编程所绝对必须的。为什么呢?因为它可以减少阻力,如果有什么东西会带给初学者挫折,那就是阻力。
考虑到这一点,这里有一些具体的建议给那些正在学习或准备学习 Web 应用开发的初学者。实际上,说得更远点更抽象点,这就是一个如何开始学习软件开发的一个好计划。很显然,这不是一个适合所有人的计划,但是我认为它一定适合大部分初学者。
-
学习一门弱类型的编程语言,不要先学习那种具有强制类型的、面向对象的编程语言。严格而言,如果有人对你提到 class (类)或继承,那么你就应该去选择其它的途径了。虽然我认同类和继承相关技术是软件开发中必不可少的,但是我强烈认为它们不应该是初学者的选择。
-
鉴于此,我认为 JavaScript 是初学者而言最理想的编程语言,因为:(a) JS 解释器在绝大部分浏览器上都可用,(b)它的面向对象特性并不是强制型的,(c)在工业界被广泛使用(是的,即使是 web 之外的客户端,即使是现在担任设备工程师的我也做嵌入 JavaScript 的工作。)
-
说得更具体点,我建议你学习用 JavaScript 如何学习去下面的事,特别是以这个顺序:
-
学习如何打印出一些东西,学习如何声明和定义变量,学习基本算术运算操作(包括余数操作),学习循环(特别是 for 循环),学习把抽象重复的代码写成函数,学习字符串和用循环操作字符串,学习数组和数组的循环方法(特别是 foreach 循环),学习创建和操作对象数据集。
-
记住上面的这些并每天写一个程序来实践,直到这些都轻而易举地想起来。
-
学习 Git 的基本操作,学习通过命令行使用 Git。这意味着要先学习四个 Unix/Linux 命令(ls,pwd,mkdir,cd)。当学习了这几个命令,也就学会了以“树型”或层次结构的呈现方式查询文件系统。
-
一旦你掌握了上面的几个 Unix/Linux 命令,并会从命令行进入文件系统,你就应该学几个基础的 Git 命令。主要是 git init, git status, git add and git commit。
-
一旦你掌握了 Git 的基本操作,在学习下面的技术时将其集成到你的工作流中。
-
学习 HTML 基础,能够凭记忆创建简单的 HTML 页面。学习 DOM 和如何理解 HTML 作为指定的分层树结构。花点时间来思考它如何关系到你在前面步骤中学到的分层文件系统。
-
学习 CSS 选择器,了解它如何让你选定 DOM 的某些部分。了解 DOM 元素之间的关系。了解一个 DOM 元素作为另一个 DOM 元素的父元素或子元素的含义。理解这与后代和祖先之间的关系有什么不同。记住选择器可以让你通过这些关系来选定某些元素。
-
学习 jQuery,并主要专注于 DOM 的操作能力。学会用 jQuery 对 DOM 插入或删除元素,实践可视化如何影响用 DOM 定义的树型结构。
-
实践 jQuery 中的事件处理和 DOM 操作(比如,实践操作 DOM 当用户点击某个东西,或在指定的时间间隔)。
-
多练习 JavaScript 对象,并把它们当作可变的聚合器。学习如何用 JavaScript 来表示更复杂的数据而不是基本数据类型。学会应用并操作这些数据结构。理解并定义 JSON、理解它如何与 JavaScript 对象相关联。
-
学会使用 jQuery 的 getJSON 函数从文件中获取数据到 JavaScript 对象中。使用类似的技术,用一个简单的 JSONP API 去练习用 AJAX 拉取数据。练习向 DOM 插入和删除这个数据。
在这个阶段,做一个简单的幻灯片来循环播放 Flickr 图片,这将是一个令人难以置信的项目,将真正考验你的能力,使用之前学过的基础技术来实现它。
如果你做了这一步,那么你已经掌握了大量必备的编程和计算机科学基本概念。具体来说,你掌握了计算机程序的最重要元素(如果 if-else 语句,循环,变量,对象,函数,数组等),你已经学会了链式或树型的数据结构。这时,无疑你已经准备好转移到更高级的主题。
英文原文:A Strong Approach To Learn Programming