如何学习前端

说几句

其实今天在写 Anki 的教程,但是没写完,就不发了。
晚上听了一场 Ziksang 的前端学习之路 1 个小时的分享,下面是我的整理。
这个人也在上海,还跟我同年-0- 就已经是高级的前端开发工程师了。

不过我能明显感到,他和姬光的风格不一样。姬光会提前准备好部分的答案,然后分享时就能不疾不徐;Ziksang 不是这样,全程在飙语速(嗯,我感觉他是用语音转换文字),整个节奏很快。一个小时回答了 24 个问题。

其实我喜欢姬光这样子的,提前准备,能更从容地推进自己的节奏。而且姬光的遣词造句,也要好上许多 :)

可能我就是更偏好“儒雅”“温润”类型的人吧?

顺便说一下重点,Zkisang 在这次分享中对前端各部分的学习步骤 写得比较详细,到什么程序能进入下一阶段,每个阶段推荐的学习步骤。

值得参考!


分享者:Ziksang


整个学习知识的过程

首先,系统学习 js 的基础知识

知道这三部分都有哪些内容:ECMAScript 规范、DOM 规范、BOM 规范。
1.ECMA 规范
定义了 js 作为一门编程语言的标准,包含变量基本类型、对象、函数、作用域、运算符、流程控制语句等。

2.DOM 规范
规定了 js 如何与网页进行交互,包括访问与操作 DOM 节点、不同类型的节点都有哪些特性和方法、事件的监听与传播等。

3.BOM 规范
定义了 js 如何与浏览器进行交互,包含 window 对象、location 对象、navigator 对象、history 对象等。

学习方法和评估
基础知识的学习,最好的方法就是看书了,像犀牛书、蝴蝶书、高程,都是经典的教材。

掌握了以上基础知识时,基本能写出弹出、移动、删除节点等动效,你体会到了所谓交互其实就是用DOM操作来模拟出各种“假象”。

开始接触 jquery

逐个尝试 jquery 封装好的各个 API,发现 jquery 写代码简单了很多。

jquery 和 原生 javascript 的学习没有那么严格的先后顺序,只要清楚哪些是 js 的内容,哪些是 jquery 给你包装出来的快捷方法即可

第一阶段:能根据别人的插件修改出自己能用的“玩具”

各种组件网都有现成的,下载一些插件,连蒙带猜改代码,改出一个能用的版本。你就已经度过了第一阶段了。

用 jquery-ui,这套比较完善的插件库,能解决你的很多需求。

第二阶段:理解jquery的插件机制,并能自己写出项目所需的插件,“能上线”

写了一段时间代码后,你会感觉到自己的调试效率很低。具体表现为,你写的代码有时候总是运行不出自己想要的结果,代码报错了你却怎么调也调不对。

这时候你就要对 js 进行更深一轮的理解了,你要对 js 中的一些概念做到真正的理解,比如作用域链、原型、闭包。比如你要知道js运算的自动转化机制,为什么 2+“1”是 string,而 2-“1”是 number。typeof 和 typeof() 前者是操作符后者是内置函数。如何判断一个变量是否是数组,等等这些细节问题,都是有对应的概念和原理能解释的,你要做到知其所以然。

这个阶段你会开始与服务端进行交互了,原生的 ajax 要理解并能手写,jquery 的 ajax 要熟练使用。你会遇到 ajax 的跨域问题,开始掌握发送跨域请求,知道 JSONP 是个什么东西,从原理上。

自己动手写一个 jquery 插件,从简单到复杂。比如一个弹框插件,要具备可以配置宽高、标题、内容、回调函数等功能。或者是一个焦点图滑动插件,不要看别人的代码,自己完全从头开始构思。

当你能理解 jquery 的插件机制,并能自己写出项目所需的插件时,你的 js 水平又上了一个等级。

做到以上这些,你基本可以应付一个项目的前端需求了。也就是说,你写出来的页面不再是玩具了,可以上线使用了。

第三阶段:能利用框架快速搭建体系

开始接触一些更复杂的系统了,前端代码量上了一个档次。你会发现 js 代码还像以前那样从上往下堆着,太乱了。你写的 ajax 返回的数据越来越复杂,用拼字符串的方式进行局部更新太费力了。

然后你要开始使用 mvc 模式来组织你日益复杂的代码了,典型的框架就是 react,vue ,angular ,如何用他们快速的搭建一个体系。

到了这个阶段,你已经告别了原先的纯“刀耕火种”时代了,你开始使用各种框架来帮助你更好的完成功能。

第四阶段:团队协作与模块化开发

这时你会面临团队协作以及模块化开发。你有必要了解模块化的规范,了解 commonjs、AMD、CMD 都是包含哪些内容,他们是什么关系,有哪些区别。

你起码得使用一下 requirejs,知道老牌经典 AMD 模块化工具是个什么思维,解决了哪些开发中的痛点。seajs 你也需要了解,知道 seajs 对 AMD 进行了哪些改进和包容。

最后,你得知道 commonjs 规范是如何借助打包工具(browserify、webpack)一统天下,通吃服务端(nodejs) 以及浏览器端的。

模块化开发与打包是分不开的,这个阶段,你也应该自己尝试使用 grunt、gulp、webpack 对项目进行构建和打包。尽管 grunt 已经没落,眼看未来是 webpack 的天下。

第五阶段:走在时代的前方,深度研究源码和框架

ES2015,又名 ES6,使用 babel 编译后已经能用于工作了,对于 ES6 的新特性,越早上手越好,给自己预留出学习的时间

React、React Native、淘宝 weex 这样的混合 app 开发框架,这些全新的开发理念在不久后的未来就会上场的。

这个阶段,你已经掌握了 js 方面的主流知识和框架,自然也会明白行业的发展趋势,能自己把控该学什么该用什么了。


学习 html+css

  1. 先买本 html+css 的书,得到对前端最基本的认识(1周左右)
  2. 找到 PC 或 移动端的公司项目设计稿,按着提示把整套页面 UI 全部 coding 出来,然后在各种移动端 或都 pc 端走一遍
  3. 再把 css 和 html 的 api 过一遍,优化页面布局。再次循环做好几遍。(1个月死磕优化)
  4. 靠工作经验优化布局样式了

经验之谈

  1. 前端最基本认识的时间不要花费的太多
  2. 不要用学校作业练手,不要跟着垃圾老师学习
  3. 死磕优化,多做几遍

入门 javascript (重点)

  1. 先看 5-10 套 js 的基础课程视频(网易云课堂),将课程的 js 从头到尾敲打一遍(半个月左右)
  2. 看一些简单的 js 书巩固知识点(半个月)e.g.《JavaScript Dom 编程艺术》
  3. imooc 网,做大量的 demo 实战练习,同时看犀牛书。直到积分到 7000-10000 分

经验之谈

  1. 先别看犀牛书,除非你对 js 很熟
  2. demo 实战的时候,先看这次 demo 要用到的知识点,然后看视频,视频中如果有不清楚的地方,暂停看书并搜索一下知识点。确保理解了
  3. 学到一定的时候,只有通过项目去提高层次,提高水平

深入学习 javascript

  1. 掘金等论坛,学习别人的原生 js,跟着它的 github 源码一步步敲打
    • 首先看这个 github 的项目 star 数字,看它适不适合你所用的框架
    • 然后重点看别人如何组织项目架构,如何模块化,如何组件化开发
    • 照着项目从头做一遍,会发现不懂的知识点或者用法错误的知识点,写法不够优化、不够简洁
  2. 多看面试题
  3. 继续看书,掌握专业术语,拓展视野
    • 《 ES6 标准入门》
    • 《函数式编程》
  4. 认真写文章分享(不是随便记笔记)
  5. 保持学习新东西,做不熟悉的项目,让自己越来越厉害

学习框架(jquery 是入门必选)

经验之谈

  1. jquery 最经典,即便是现在牛逼的 react、vue、angular 这些框架,也都是通过不同的方式来组织 dom 操作的
  2. 211/985 的大学生,推荐学 react,非常受大公司的青睐
  3. 大专生、非 211/985 的大学生,推荐学 vue,非常受中小型公司的青睐(vue 学习成本低,能快速搭建项目,而且是中文文档,2 个月就能学起来了)
  4. 如果无路可走,那就去不要求学历的外包公司(基本上外包公司都是 996,业务非常多),让自己赶紧能出活

薪资

  • 按照以上学习路径,每天 6-8 小时学习时间,坚持半年到一年,工资 5k 以上
  • 工作第一年每 3-4 个月涨薪一次,自己提
  • 如果在一家公司已经学不到任何东西,已经能独立完成各种业务时,可以正式跳槽了

答疑实录

Q1:如果去外包公司工作的话有哪些外包是比较好的?

本质上没有那个外包比较好,对于刚入门的刚工作的外包,只要不要求学历,不太要求工作经验,那就是一个好外包,我想如果你是大牛了,你还会进外包麻?肯定不会,无论待遇福利都没有正式员工的工资待遇好,我觉得只是一个过渡,只要能让你干活,不考虑你一些学历,工作经验等就是好外包。

Q2:还是好奇怎么拿到实习的 20k?

  1. 通过努力,不断的学习,每天下班回家,还能坚持三小时学习
  2. 不断加班,接项目,实践项目
  3. 不断面试,只要你觉得水平达到一个高度就去面试
  4. 忽悠!!忽悠吹虚你自己工作经验。如果你1年工作经验吹自己三年,只要你觉得技术水平过的去,不比三年的差,使劲吹,总归有一个你能吹的上。

Q3:外包公司是否会存在无核心业务而任务繁重,造成视野和成长瓶颈?

那我就准确的告诉你,最忙的就是外包,外包就是把你派出去干活,活肯定会有很多,而且外包到的地方一定不是创业型小公司,肯定都是中大型公司,业务都是他们公司自己的业物,你这时候就要主动体现 你自己的能力,快速工作,多加班,领导看的到,慢慢核心 业物就到你手上了
刚出去别实在。真的,你用你的双眼看着面试官实在的说我会好好努力工作,我热爱学习,这种实在的忽悠才是最好的。

Q4:如何理解本文中es6函数式编程没有什么实际作用这句话?

这句话我可能说的太片面了,怎么说呢,主要一些什么函数式编程啊,什么 diff 算法啊,什么要深入源码研究啊,刚入门别搞这些不实在的东西,先把基础学习,项目所用到的东西学好,常用的页面布局,公司项目所用到的插件组件弄好,核心业务逻辑弄好才是真的,这些虚的东西,只有你提高一个更高的水平才有意义。刚入门的时间有限,业务为主。

Q5:前端目前听说培训出来的同学特别多,不好找工作,是这样的吗?

是的,现在前端大批量生产前端开发人员,不太好找,我出来的时候一年前端工作经验要的还蛮多的,现在最少2-3的工作经验。所以没办法,要吹,如果你简历上就写着实习生,还尼妈一个大专。别人面试都不会叫你,你简历写的再漂亮,我多努力多努力,都是扯淡,所以为什么一开始叫你们一定要包装自己,吹自己,进去了,项目一开做,没什么难度 的,多学学,多问问就可以,自己把基本功先打好,基本没什么问题。

Q6:作为一个大专生,如何在面试时竞聘过本科生?

万中离不开忽悠,首先你是公司hr,一个本科甚至研究生和一个大专生都是研究生,你会找谁面试?不用看,肯定找研究生
那同样三年工作经验的,研究生要的肯定高,大专生你要的稍微低点,你们不要认为研究生就厉害,十个九个半路转行的,我遇到的研究生多了去了,什么985,211都在家待业
在做项目的层面,此时学历就没有那么重要的,因为老板此时要人做项目,不是要实习生来实习,所以这时候体现 的就是你的项目能力了,就算你是研究生,不能做项目,一样没用,我们并不是当公务员,国家硬 性要求,我们是去给老板创造利益的,你能创造出他想要的东西,管你是人是鬼

Q7:似乎很多大型公司都是本科起步,专科如何在现在这市场站一足之地?

对现在大型公司是本科起步,那我们肯定先不考虑大型公司,也考虑不了,因为背调查的很厉害,所以先考虑小型的,那如果想考虑稍微有点名气的公司,有一个办法 ,内推!!!!在内推层面上,一般都可以放到大专学历,因为内推比较靠谱,所以学历此时就不那么重要了,还是那句话只要你能给老板想要的,管你是人是鬼
内推的话,自已多发表一些论文,让更多的人认识你,多结交一些大型公司朋友,看到你的实习了,自然别人也放心内推你,你的机会也多了一层

Q8:请问你一般是怎么找到 github 上优秀的项目学习呢?有没有几个模范的 Github 主页推荐?(就是写法很简洁、几乎没错误的人?可以不是大牛)

github的优秀的项目,我推荐掘金,别人做出来的高仿项目都会把图片帖上去,所用的技术点都会告诉你,再看看别人的点赞率,高的话你就选 用就可以了,看看到低是不是你所运用的技术,可以你就用,不可以你就不用

Q9:自己写项目的时候,检查哪些东西,能方便其他人从我的源码里获益更多,而不必邮件交流呢?比如源码的哪些地方容易让别人看不懂,然后怎么尽量避免这个问题呢?

首先先把自己的一些知识点,文件目录结构所运用的东西可以先写出来,让别人先知道那个文件是干什么的,再对一些自己认为的难点,和复杂的地方给一些讲解,在源码里面再进行一些注释,只能做到这些了,根本还是需要实践的。

Q10:如果让你在最快的速度判断一个人写的源码,是否简洁、是否合乎规则、是否优美,你最关注哪些地方?(就是说,哪些地方是最能看出这些东西来的?所以优先看)怎么看?

可以这么说,比方说 vue,这东西好不好,你看源码你肯定看不懂,那怎么办?看 github 数,社区 谈论的关注度,大家讨论的热度,其它公司的运用。如果都很火,你就可以进行深入了解了。

Q11:你有提到,要认真分享文章,结合你的掘金专栏的热度,请问在专业平台分享文章并有一定浏览量,对你有什么帮助/促进吗?对分享文章这一点还想知道更多

首先,分享文章,你必须自己先深入了解,自己深入了解了知识点,好处你肯定有收获这是一点;
第二,不管文章本质内容的质量深度如何,就算一个简单的 var 如何用,你认识的结合书的知识点,和别人分享文章的知识点结合了解了,你就能有很大的收获,大牛多,小白更多,所以自然会有很多人追随你的文章
第三,慢慢地 你可以分享一些热度比较高的文章,深入一些文章的研究,可以文章小小的抄袭一下,通过你自己的了解,用更直白的方式再去分享一下,我相信能受到更多人欢迎,就算一些中高级开发,有些知识点还不是很全,所以分享文章从各个方面对你都有好处,我现处的这家公司就是在我的文章里找到我的,然后让我去他们公司。

Q12:文章中写到的“工作第一年每 3-4 个月涨薪一次,自己提涨薪”,请问自己该如何判断,这个时机是合适的,而不是盲目作死?(每个人基础和实力有差异,我觉得以时间做分段有点危险)

这个涨薪 是一个很关键的问题,很容易爆,这个我告诉大家一些小技巧很关键很关键!!!!!
了解公司其他前端同事的工资,当别人问你的时候,讲低一点
如果老板不同意,那就是傻老板 ,他还要再从新找一个人接手你的项目。只是提到了公司前端基本的工资待遇,有些时候想想应该的。如果老板从新找人,他花出的代价那是相比而言要付出更多,项目上线时间才是最宝贵的,老板 心里本来就知道你比别人工资低,技术还也可以,不给你涨,那他就是傻!!!

Q13:面试时怎么谈工资?有没有可以工具或方法测试自己的水平,比如在线测试网站之类的

我告诉大家一个确实的东西!你如果去一家公司面试。你要什么价格,我告诉你,如果你现在10k,要在14k-13k 肯定是最保险的,低于这个价你去都别去。但是 15k-16k 不是不可以。看你能力水平了。如果你再往高里要,要个 20k-18k,我跟你说,你技术除了牛到只有你能解决。但一般不可能。一家公司的涨幅不是技术 老大,HR 说了算,他们也有一套制度。有一个涨幅表,一般都在 3k-4k 的样子。所以如果你觉得老板能给你涨工资先别跳,先涨工资。你一旦跳了对你的简历也不好。
二、先把工资提上去。呆个4个月此时再跳。哈哈你就是在四个月内连涨二次工资 。简历只是一次跳槽
所以我建议先涨工资后的四个月到6个月再跳槽。如果你10k,老板 给你开个14k,你再跳那就是18k,简历中只是一次跳槽,多好。如果你6个月一跳,别人公司肯定觉得你有问题

Q14:在现在的公司业务也非常熟练,几乎不能从业务中学到东西了,但是不想跳槽。那该如何继续在这家公司提高能力呢?(文章中很强调实际项目的重要性,我想知道自己公司的项目对能力提高有多大的决定性?)假设,自己业余去接很厉害的外包,这个靠谱吗?有这样的外包吗?

我所说的外包,不是接外包项目,是你进外包公司,然后他把你派动其它公司干活,这种外包性质,如果不能学到东西,你还不想跳槽,说明你心里有鬼
一、你想安逸;二、你对自己的能力不够有信心。
你跳一个阶段。涨一次薪 ,那你就要承受更多东西。所以建议你好好好学。天天向上。

Q15:您是怎么定位期望薪资的,我每次面试完,朋友都会说要少了要少了,搞得我像傻子似的

工资定位,很简单,不要想太多,给你一个最好的建议,如果你因为个人原因很想离开这家公司,如果下家能给你2k的涨幅就不错了。
如果你是因为能力大涨,水平有大的提升,一般能涨4-5k就可以了。但是我不太建议这种,不要给自己一下子搞死,拿的越多说明你做的事越来越多,跳的太快容易扯到蛋。

Q16:前端在实习工作三年内是否需要涉及到计算机基础如算法、编译原理、数据结构等?

编译原理,我认为就是源码学习吧,这个有必要深入;数据结构也是程序员的一种必备,但不需要太深入。对于算法,前端本来就用的不多,再对于三年这种 而言,可以没事看看。只要后端运用的多。

Q17:前端学习是否必须要掌握一门后端开发语言?需要掌握到什么程度?

有兴趣去掌握,没必要深入,因为我相信大家都是往大公司去,就算现在的小公司,也是做前后端分离,你就管好自己的前端 ,后端你们现在不会接触到,根本不用碰,最多学学Node.js。
现在市面上很多这种 人,讲起来七年工作经验 。两年干设计 ,两年干php. 三年干前端 ,其中还有一年是切图仔,不说吹牛B,你专门前端的人,两年的能甩他十条街,在于精不在于多。
特别现在前端能干 的事太多了,所以我建议专注于前端,有兴趣自己玩玩一些后台服务器的原理就可以了。比如 http 为什么会产生跨越啊。

Q18:在做项目的时候,发现自己在计算逻辑方便比较吃力,想问题有时候比较混乱不够周密,是不是应该去撸些游戏程序来提高?

我这么告诉你吧,你觉得你一些逻辑不好。
什么原型练这种东西,知识的深入不够的话,不要搞一些没用的游戏 ,看看别人的源码,逐行分析,你会学到很多逻辑性的东西,而且很多原生 js 不知道 的东西。
要用在刀刃上,不要浪费时间,本身现在前端要学的东西就太多。就算游戏这种东西你做出来,你十天不做,你全忘记光了。不实用。

Q19:我现在在华为外包公司整整一年了,没做过任何项目,主要工作就是改问题单(定位一线的问题),版本升级(导app包),配置页面等打杂的活,有几个厉害的同事还能做些需求,,像我这种进去本来想学技术不仅学不到还耽误了我的时间。。。像我这些情况怎么办,辞职又怕找不到工作,所以现在每天回去有空就自己看书,可是找不到项目入手,迷茫!!

有项目做才是王道 。
无论大项目,小项目,因为原理都是一个层面上的东西,知识原理如果不去运用,永远不知道这个原理的根本,还是停留在表面。
那没有项目做怎么办?拉github别人做过的高访项目去做。我上次做了一个饿了么 50 张页面,这能做出来,一般中型项目都不怕的。
在你内心,你根本还没有渴望和下定决心去做这些项目,因为很累,看别人源码做项目,还要把需求什么一些 API 代码都要了解一下,看一下,很烦人的事。

Q20:怎么用最简洁的方法写出最实用的代码?

没有最简法的方法,最简法的方法只有一个——经验——不断通过实践,发觉代码问题,去优化代码 ,然后再遇到这种问题时,你的代码就是最简洁了。

Q21:对于内推来说,学历倒不是很重要,那大专学历还有必要升本科学历吗?拿学历也是两年以后的事情了。

大专学历有必要升到本科麻???非常有必要,!!!!!我觉得本科都不够!!!要研究生!!!自己去读夜大,什么的再考研究生,我觉得这是很重要的一条路,虽然你可以通过我这些方法,取巧拿到高薪,开发可以有许多,架构只有一两个,那如何当的上架构 ,管理 ,此时大牛都很多,此时拼的就是学历,背景,这时候忽悠就显的弱了点。你看我的简介,可以说自己都看不去了,根本没东西吹。看一些别人的chat介绍,什么海外留学。什么鬼的。吸引眼球,但不 一定本质好,有些我只能说家里有钱,给他能读的起,包装 的起。

Q22:后端转前端,如何能够快速入js的大门?

后端转前端 ,你首先一点,你能进到前端 这个岗位,js这框架更新太快,我觉得你如果有端基础很劳实,多花点时间在js上面,不然你后端基础都不好,到后面后端没学劳固,前端也是半吊子,对你以后很不利。

Q23:0基础假如要转行,后端和前端,各自可能面临的好处和不好处集中体现在哪些方面?

如果你想稳定发展,不想变化太快,那你学后端,如果你是想一直有着创薪,快速提工资,那你可以选择前端。

Q24:你对前端未来的发展趋势怎么看?

陶架构,你问的问题太大的了。哈哈~
我好好回答一下。
我对前端 的看待就是直着下去,你不会错的,从前端 现在发展的趋势看来,慢 慢 已经 能代替很多东西,无论是app web pc 等后台 中间件,都能胜任,js 的语言发展空间也很大,所以我认为,不要分散自己的注意力,觉得这好那好,直着于前端你不会错的。


拓展
Medium-17 free e-books for web developers

@2017-05-10 23:23
Comments
Write a Comment
  • 你创作好勤奋哦

  • 将来看你写个模版啊

  • @mkyos 没有啦,这个不算创作。话说 Bitcron 的评论框有更新耶,多了一个「reply」键,可以自动变成「@mkyos 」。而且在回复中输入 @ 符号,也能出现选项。方便了不少~

  • @哈比 是的,我发现了,估计是有不少人吐槽了评论模块过于简洁了吧

  • js感觉就上了一个层次,有点吃力。

  • 挺好的。。。就是不建议吹牛,很容易被很容易被识破的