统一回复《怎么学JavaScript?》

老姚
老姚 发布于 2016-09-26 16:29:18 浏览:2.44万 类型:原创 - 随笔 分类:面试经验 - 我也来说说系列 二维码: 作者原创 版权保护
鉴于时不时,有同学私信问我怎么学前端的问题。
这里统一回复一下,如下次再遇到问我此问题同学,就直接把本文链接地址发给你了。emoticonemoticon

首先说句题外话。关于有人管我叫大神的事情。
个人感觉这跟你买东西时,人家管你叫帅哥一样,你答应与否都无妨。

正题开始,前端怎么学,应该因人而异,别人的方法未必适合自己。
就说说我的学习方法吧。
我把大部分时间放在学习js上了。因为这个js的学习曲线,先平后陡。
项目实践和练习啥的,我不说了,主要说下工作之外的时间利用问题。
我是怎么学的呢,看书分析源码
个人这几天统计了一下,前端书籍目前看了50多本吧(点击我)。大部分都是js的。市面上的书基本,差不多都看过。

第一个问题是,看书有啥好处?
好处应该是不言而明的,书看多了,基础会逐渐夯实起来。
看多了,自己的判断力,自然就上来了。
看别人的文章,就能很快判断出,对方每块儿讲得对不对,哪块儿又是自己不清楚的,模棱两可的。
当然也为看源码,分析源码提供了基础。

10本书读2遍的好处,应该大于一本书读20遍。
10本书的交集,那就是基础知识的核心,而并集那就是所有的知识。
好书当然要多读,反复读。但是只读一本是不行的。
因为每本书的侧重点都不一样。从不同的侧面,去理解一个知识点,是很有意义的。
所以特别佩服印度人,他跟你讲英文,你一个词语没听懂,他会蹦出n个同一意思的单词,你听懂一个,就ok了。
看书也是这样的,某一块讲得不透彻,不用担心,其他书籍可以帮助你来了解。

第二个问题是,书籍推荐。
个人觉得不错的,没事可以翻翻的。书籍如下:
《javascript面向对象编程指南》,风格轻松易懂,比较适合初学者,原型那块儿讲得透彻,12种继承方式呢。
《js权威指南》、《js高级程序设计》,这两本书经典是经典,但是太厚,适合把其中任意一章都当成一本书来读。洋洋洒洒,很难一口气看完。比较适合当做参考书。
《你不知道的javascript》狙击js核心细节,闭包、原型、this讲得都还清楚。目前《中册》也出了,还在看。
《js设计模式与开发实践》js设计模式也是要学的,此书把js的设计模式讲得非常清晰,一点不晦涩,看起来没多少难度。
《正则指引》,分析源码时,如果正则表达式不懂,没法进行下去的。此书相对来说讲得比较清晰。
《基于MVC的JavaScript Web富应用开发》,看完后,基本能写出自己的mvc框架了。是本好书。
《javascript函数式编程》,js是一门函数式语言,此书是函数式编程一个入门,函数是一等公民那是非常重要的。
《js忍者秘籍》,jq作者写的,没有传说中的那么难读,话说就算你看完并理解所有知识点,也不会达到世界高手级别的。因为你还没有做到随心所欲。
《javascript框架设计》,如果初看此书,会觉得此书有罗列代码之嫌。在我看来,此书讲究的是框架的全局观。
以上书籍是我认为是成就高手之路上必须看的,也需要反复看。

css相关的书籍,说实话我看得比较少,总共有六七本吧。有两本必须推荐一下:
《css权威指南》,css基础知识点那是讲得非常清楚的。什么层叠优先级、line-height啥的。不是随便一本书都敢叫“权威指南”的。
《css揭秘》此书我也是不断的看,此书才不屑于全面讲css3各属性呢。css规范文档能讲的,它只会讲你最不在意的。此书解决的47问题,解决思路和解决方案同等重要,很有启发性。以上各书你都可以不买,至少买本此书吧。

第三个问题,怎么看。
想必很多同学,都想看书,但是很难看下去。
文字部分相对来说还能看看,一遇到代码,头皮就发麻了。
此问题一开始时我也遇到的。

说一个学习理论。
比如说学英语,有个开水理论。
词汇量必须达到6000才行,如果没达到,英文水平不会上去的,
这跟烧开水一样,没事烧烧,放着凉凉,从来没烧到100度,那么此水是永远不能喝的。
一旦煮沸过,就可以随时喝了。

20本书你看不下去,说明什么呢?
任何一本书,你都没看完过。熟悉的,永远只是前三章。别笑,我原先也是这样的。
那么现在的问题是,怎么把一本书看完呢?
很简单,敲。
《基于MVC的JavaScript Web富应用开发》这本书我看时,就是这样,终于有一天,我下定决心要把此书从头到尾敲一遍。
文字加代码都敲,然后就一章一章得看完了。代码敲一遍后,你会发现,没之前看起来的那么难。
如果你属于一看书就犯困那种同学。强烈建议你把《javascript面向对象编程指南》此书从头到尾敲一遍。
坚持看完一本书后,信心就上来了。先保证看完一本再说。看完3本后,基本应该能做到几天就能看一本了。万事开头难,加油吧。

第四个问题,看书的层次问题。
书看完后,要自己总结,要与其他书籍对比看。有同学同时对比着看《权威指南》和《高设》来的。
随便拿出个知识点,你都能闭着眼睛说得头头是道,说明水平够了。

下一块就是源码的学习了。
看框架源码之前,想说一件事情:dom的api不懂,没问题,你可以百度。但是正则一定要先研究研究。
不然大多数人去尝试分析源码时,遇到的挫折都在于此。

怎么去阅读源码呢?
敲,照着敲。

有哪些代码值得去敲呢?
优秀框架或者库的源码都值得你去敲。
但是拿jq来敲,来入门,那不行的。原因:太他么长了。八九千行呢!!

个人觉得underscore.js库是不错的第一个选择。原因都是工具方法,敲完以后自己的水平应该略有小成吧。
其实有一些api的实现,你要把它当成getElementById一样,深深的印在脑海里。比如extend方法,必须张口就来。
敲完underscore库后,可以考虑去看看《javascript函数式编程》这本书了。

jq的源码不好敲。那么zepto的源码比较少1800多行,敲一天应该敲完了。
敲几遍后,把所有不懂的地方,都百度清楚,然后就可以写自己的类jq的库了。
然后就可以作为一项技能写进自己的简历里。比如“创建过自己的jquery库”。
当然敲的过程,还能帮助自己对jq的api认识。

然后是backbone.js,因为此框架是以类jq和underscore为基础的mvc框架。代码也没多少行。敲吧。
spine.js与backbone类似。可以在敲其之前,先看看那本《基于MVC的JavaScript Web富应用开发》。
希望你的简历可以添加这么一笔,“创建过自己的mvc框架”。

其他的,我也敲过一些。包括jq.validate.js,包括一些插件。
如果你愿意的话,bootstrap你可以去敲敲啊。源码挺多的,可以按插件逐个来敲。
分析明白了,轮播、分页、下拉框等等的插件那还不是分分钟随手就写一个了。
最起码看看人家api接口是怎么设计的也是极好的。话说个人在阅读其css代码中,也学到了不少东西。
说到插件,有两个必须提提,一个是表格插件,一个是树。都敲完,简历里可以这么写上,“创建过自己的UI框架”。

当然了,你也可以敲你喜欢的框架代码,重要的是明白其实现原理,最好理解其为啥那么设计,如果对设计模式比较熟悉的话,会经常发现原来是这么回事。。。
照着敲只是分析源码的入门,用途也是为了学习,最后能用在自己的项目中,那是才是正道。
就算没啥用,也是打发时间的好方式,比看电视剧强多了。我闲着无聊时,就背着敲underscore源码。。。

最后说句,如果你简历上能如期写上那几句话后,必须是大神。加油吧。emoticon




后记:写本文的最初目的,正如文章开头说的那样,方便自己回复大家的提问。
本站的任何一篇分享学习经验的文章,基本都会引起共鸣,这确实是一个值得讨论的话题。
这里再说说几个事情。

1.有人问我前端工作经验事情。
没几年。三年多。

2.初学者或新手(beginner)怎么办?

看书和分析源码是重要的提高方式,但不适合新手。
新手需要的是能快速的入门和入行,能快速的上手工作。
一种快捷的学习方式就是看视频。正如有的同学说得那样,知道有哪些东西,怎么用就可以了。

看视频是有好处的,首先它是一种被动学习方式。
我最开始的入门也是看视频来的,只需要看就行了。
一遍没懂,再放一遍,我基本上是1.5倍数去看的。
而读书是一种主动方式,需要自己一页一页翻。需要自己主动的去理解。
而很多东西,也许只是视频老师一句话,就能突出的重点,需要我们自己去解读。
还有另一件事情是,比如发现自己某个知识点不太清楚,可以单独去百度。
比如this,文章很多的。这种学习方式也是快速掌握知识点的好办法。

书籍需要技术评审,那么看文章一定要看看评论。不过视频就不好说了,视频一般都不会讲得太深入,偶尔也有讲错的。
当年我也曾被一些视频误导过,建议找不错的视频看看。各大网站培训机构的免费视频挺多的。

3.看书和分析源码的时机
但已经工作一年半载时,正是提高的好时候,此时可以去看书了。全面系统的梳理知识点,扫清自己的盲区。
如果只是靠项目经验是不够的,通过项目来学习,那肯定是必须的,工作本身就是一个学习的过程。
但是工作三年不看书的话,学又能学到多少呢?更何况每个项目都很类似,一直处在舒适区,那真就是5年经验重复第一年的了。
所以我不认同这句话:面试时强调自己的学习能力是工作能力不强的表现。
3年经验的水平,完全有可能超过5年的。

4.没有时间去学习?
如果你还没毕业,就已经天天在本站混了。其实你领先了一大步。
都是混过大学的。天天充斥着lol和电视剧的陪伴,我只想说进入社会是要还的。
最可怕的是什么呢?该还、还不还(这几个字别念错了)。时间是有的,就看你愿意付出不。
下班后学习,周末学习,节假日别人玩的时候,在家敲代码。这样才能领先别人。

5.兴趣问题?
兴趣和擅长是一个良性迭代循环。你擅长某件事情,就会越喜欢它,越喜欢,就越愿意花时间,进而越擅长。
此道理都懂,只是缺乏一个trigger。如果你喜欢玩游戏的话,其实你可能非常适合做前端。
玩游戏就是一个反馈机制,前端工作的反馈,相对其他工作来说也是非常及时的。代码一改,网页一刷,就看到效果了。
擅长、优越感、成就感通常都是连在一起的。每看完一本书,我都觉得很有成就感。每敲完一个库,也有成就感。

以上纯属一家之言,每个人的学习习惯、方式、态度都不一样。先端正态度、找到自己的学习方法,进而养成坚持下去的习惯。
最后说一句,你我共勉:只要你走在正确的道路上,不管、走得多慢,都是前进!
本文完。
z
给个赞 245 人点赞
收藏 307 人收藏
评论 已有 121 条评论;以下用户言论只代表其个人观点,不代表 前端网(QDFuns) 的观点或立场。
登录 以后才能发表评论
最热评论
xiaoin
xiaoin2016-09-27 09:36:0437F
总体学前端有半年了,从最开始标签学起,七月份开始学JS,实现网页上的一些小功能倒是还好,主要是处理兼容性方面有些懵,目前的学习主要以《高程3》为主(还是在省图借的,自己买了本蝴蝶书,但是里面的铁路图看不懂呀),细细啃慢慢敲,提炼一些笔记手写,不懂的照着代码敲,不过七百多页估计得啃到明年这个时候,辅以李炎恢的视频教程,虽然教程很啰嗦,但还是很准确的,推测他那视频笔记估计也是以《高程》为参考的,以视频快速开路,不深究,但是在脑袋里撞个面熟,另外以廖雪峰的个站上的资料作参考和拔高,自己分析提炼出JS的精华,还稍带着了解下Git。只是总感觉自己学的不够系统,目前是计划明年年初找份前端工作,但是感觉时间很紧,每周五天工作,我可以挤出三天左右的时间捣腾JS,再加上晚上的时间,周末的时间,进步没自己想象的那么快,相当没信心。
举报 支持 (6) 回复 (0)
pure_lug
pure_lug2016-09-26 17:49:419F
看书少,基础差,心太躁。。让我静静。
举报 支持 (5) 回复 (1)
17715283127
177152831272016-10-27 10:08:4097F
有时候发现不是语法不会,是算法不会咋整啊,老姚
举报 支持 (2) 回复 (2)
老姚
老姚2016-10-08 18:10:4389F
高数!!!emoticon干这了这几年,也没遇到需要啥高数的案例。数学嘛,也不多的,大多数还是加减法。主要的还是业务逻辑。英语嘛,都是简单的单词,不会就有道翻译。常用的也没多少,都是一些常用的单词。api多敲几遍,把api背熟了就行了,变量或者属性命名时,不会就百度。至于学好,只要愿意付出是没问题的。 //@小俊:楼主,希望你看完我的问题能如实回答我。先谢谢了~
我学习很不好,初中没毕业就出学校了,然后就是各种打工什么的。
我是去年10月份去培训的WEB前端,学了4个月。
现在工作了,但是我身边的最少都是大专毕业,英文,数学什么的几乎不懂。
当了解js后才知道,学到后面有很多高数什么的。   我想问,就我这底子能学好前端嘛。
也不爱看书,几乎没练习代码,老是自我否定。楼主,你说我这英语和数学都是小白。能学好嘛?
举报 支持 (2) 回复 (1)
小俊
小俊2016-10-08 18:02:3788F
楼主,希望你看完我的问题能如实回答我。先谢谢了~
我学习很不好,初中没毕业就出学校了,然后就是各种打工什么的。
我是去年10月份去培训的WEB前端,学了4个月。
现在工作了,但是我身边的最少都是大专毕业,英文,数学什么的几乎不懂。
当了解js后才知道,学到后面有很多高数什么的。   我想问,就我这底子能学好前端嘛。
也不爱看书,几乎没练习代码,老是自我否定。楼主,你说我这英语和数学都是小白。能学好嘛?
举报 支持 (2) 回复 (1)
最新评论
老姚
老姚2016-12-30 14:40:12122F
可以转。 //@sweetsweet:姚老师可以转载你的文章吗?会标注转载地址和作者名称的,谢谢姚老师!emoticon
举报 支持 (0) 回复 (0)
小水晶
小水晶2016-12-30 14:18:11121F
哇  这回答给个赞  好用心哦 //@老姚:这个问题比较难。大多数还是能找到的,需要输入准确的关键字。百度之前,先准确的定位问题。这是最关键的。定位不出来时,可以问一个能给出关键字的人。如果还没有,那么基本上只能换个思路了。思路是这样的,一个需求x,你想到的解决方法是a,如果a中遇到困难,找类似但比x简单的需求x1,然后用a去解决。如果能解决,找到x1也x的区别,然后尝试去解决x。如果不能解决,找比x1简单的类似的x2,然后重复上面的过程。如果一直解决不了x,说明a方案是不可行的,然后关键是找出b方案。此时考验x的关键字了。然后再用a同样的方式,去尝试b去解决x,如果b不行,看看有没有c。也许你会发现x2下的b2才是最好的切入点。如果都解决不了只能认为当前不可解,最起码很不常见,放入脑海,也许某天就能解决了。 //@小水晶:如果百度也找不到答案呢
举报 支持 (0) 回复 (0)
sweetsweet
sweetsweet2016-12-30 13:54:40120F
姚老师可以转载你的文章吗?会标注转载地址和作者名称的,谢谢姚老师!emoticon
举报 支持 (0) 回复 (1)
老姚
老姚2016-12-30 11:44:45119F
这个问题比较难。大多数还是能找到的,需要输入准确的关键字。百度之前,先准确的定位问题。这是最关键的。定位不出来时,可以问一个能给出关键字的人。如果还没有,那么基本上只能换个思路了。思路是这样的,一个需求x,你想到的解决方法是a,如果a中遇到困难,找类似但比x简单的需求x1,然后用a去解决。如果能解决,找到x1也x的区别,然后尝试去解决x。如果不能解决,找比x1简单的类似的x2,然后重复上面的过程。如果一直解决不了x,说明a方案是不可行的,然后关键是找出b方案。此时考验x的关键字了。然后再用a同样的方式,去尝试b去解决x,如果b不行,看看有没有c。也许你会发现x2下的b2才是最好的切入点。如果都解决不了只能认为当前不可解,最起码很不常见,放入脑海,也许某天就能解决了。 //@小水晶:如果百度也找不到答案呢
举报 支持 (0) 回复 (1)
小水晶
小水晶2016-12-30 11:26:42118F
如果百度也找不到答案呢
举报 支持 (0) 回复 (1)
aaawhz
aaawhz2016-12-26 11:00:21117F
多看一些算法的视频吧 //@17715283127:有时候发现不是语法不会,是算法不会咋整啊,老姚
举报 支持 (0) 回复 (0)
老姚
老姚2016-12-26 10:58:41116F
这篇文章我做了一下示范
http://www.qdfuns.com/notes/17398/67af7e8ce6555614e2cb6e3a5b91b2ae.html //@老姚:先看api文档熟悉用法,然后就着每一个api,把相关代码找到,敲完研究明白。此时会发现api是有关联的。研究大半api后,就可以从头到尾把库敲下来了。敲几遍后,哪块是自己薄弱的环节也应该清楚了。 //@kodo:老姚大打,想请问下。您所说的敲源码,什么的具体做法是什么呢?
比如您说敲了bootrap的源码,underscore的源码,具体是如何去实践的呢?
举报 支持 (0) 回复 (0)
老姚
老姚2016-12-26 10:52:43115F
先看api文档熟悉用法,然后就着每一个api,把相关代码找到,敲完研究明白。此时会发现api是有关联的。研究大半api后,就可以从头到尾把库敲下来了。敲几遍后,哪块是自己薄弱的环节也应该清楚了。 //@kodo:老姚大打,想请问下。您所说的敲源码,什么的具体做法是什么呢?
比如您说敲了bootrap的源码,underscore的源码,具体是如何去实践的呢?
举报 支持 (0) 回复 (1)
老姚
老姚2016-12-26 10:48:34114F
他书是没少看,原来也从抄书开始。emoticon //@aaawhz:多看别人的项目, 搞清楚其中的各种, 有助于自己快速积累各种项目经验,  一些比较小巧 精华的书, 还是值得敲几遍的, 现在非常火的自媒体节目 “罗辑思维” 的 罗振宇, 也是从抄书开始的, 你看看他现在说话这么溜。。 说起话来头头是到
举报 支持 (0) 回复 (0)
老姚
老姚2016-12-26 10:47:18113F
对的,厚书不是敲的。先从薄的看起,看不进去才敲。看了几本薄的,知识点就差不多弄个大概齐了。厚书也能看进去了。书中比较长的代码是可以敲的,不然容易看空。看好的文章,此法不错。虽然是别人咀嚼过的东西,但容易消化。论系统的学习,还是要多看书的。 //@aaawhz:但是太厚的书, 你不可能去敲几遍的, 还是建议敲那些好的博客, 比如淘宝出来的一些东西,  或者一些重要, 自己缺看不下去的东西。。
举报 支持 (0) 回复 (0)
阿生
阿生2016-12-26 10:02:50112F
当设计改改改时,前端代码也会跟着改改改,你从一个水潭出来,进入另一个泥潭,欢迎你加入我们! //@liuyuan1990511:我现在是一家大型超市的企划设计,只要一搞活动都要加班,这不是重点,重点是节假日少 工资嘛 呵呵没有关系小城市你们懂的!!!干的多拿到的少!加班没有加班费,过年只让过一天,每天都是下班10点多了  打LOL减压,这样永远没出息啊 后来想为什不换个工作呢,可是我只会平面设计啊,想起来了虽然是学平面的但是大学的时候还是学过点网页设计于是下定决心要转行   做网页设计 但是不想做网页页面平面设计,看着敲个代码很牛逼的样子最重要的是代码个别人不能看懂 而平面是看得见摸得着的 总有一群外行让改啊改啊改啊......超级窝火烦!!....,于是在同学的推荐下开始学习网页前端,先从html学起,跟楼主说的很对,一开始买了很多书,看不下去啊 后来看李炎恢的xhtml 视频,(我还去过达内想着学费太贵于是决定自学)现在刚把xhtml学完,也能自己模仿着做一些静态网页了,我是自己设计图片切图自己敲代码,每天晚上下班都学一点点,坚持一个月了,成绩是有的,就是不知道还要学啥,我不是计算机专业的,看了楼主的介绍,我看我还差得远啊,我还不会js,是不是下一步要学习js和php  我是一点概念都没有,哎,看了上述讲解大概明白方向了,继续努力吧,我这才刚开始啊........看来前端水 比平面设计深的多..........希望通过自己努力改变工作环境更好的生活吧与大家共勉!.
举报 支持 (0) 回复 (0)
aaawhz
aaawhz2016-12-26 09:58:43111F
多看别人的项目, 搞清楚其中的各种, 有助于自己快速积累各种项目经验,  一些比较小巧 精华的书, 还是值得敲几遍的, 现在非常火的自媒体节目 “罗辑思维” 的 罗振宇, 也是从抄书开始的, 你看看他现在说话这么溜。。 说起话来头头是到
举报 支持 (0) 回复 (1)
aaawhz
aaawhz2016-12-26 09:55:01110F
另外 , 我觉得, 多在github下载别人的项目, 遇到好的, 多学习学习别人的组织方式, 和使用到的的工具, 也是不错的。
举报 支持 (0) 回复 (0)
aaawhz
aaawhz2016-12-26 09:53:26109F
underscore  lodashjs  还有 vue  backbone 的源码确实值得敲几遍, 还有zepto, 和 jquery2.0的一些核心方法
举报 支持 (0) 回复 (0)
aaawhz
aaawhz2016-12-26 09:48:28108F
但是太厚的书, 你不可能去敲几遍的, 还是建议敲那些好的博客, 比如淘宝出来的一些东西,  或者一些重要, 自己缺看不下去的东西。。
举报 支持 (0) 回复 (1)
老姚 老姚 作者

与自己为敌,与自己为友,一边深挖思想,一边埋葬自己。

作者最新