一旦你发现一个学习工具,它采用自下而上的方法,那么什么才是最好的学习方法?我对这有一个具有争议性的观点:我认为尽可能快地记住基础知识对初学者而言是绝对有必要的。当成为更高级的学习者,记忆很快成为一个被丢弃了的方式。你可能听到过别人轻视地说(“不要死记,要内部消化”,“我在消化记住的东西”,“我讨厌测试,我不得不回想起记忆中的东西”)。
另一方面,当你还是小学的时候,你被迫花时间来背乘法口诀表。为什么要背呢?因为你的基础乘法口诀表可以是构建更复杂的乘除法的基础。这和你记忆编程语言的语法并没有什么不同:如果你写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 教程)
一旦你掌握了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语句,循环,变量,对象,函数,数组等),你已经学会了链式或树型的数据结构。这时,无疑你已经准备好转移到更高级的主题。
转自:程序员的资料库 由Alice翻译
英文原文:A Strong Approach To Learn Programming