1,学习js分几个阶段,没入门,入门初学者,中级水平,高级水平,ppt水平。

2,没入门的如何学习?

我当初是先学jquery,有css和html基础,有css基础看jq的语法很简单,就是选择符,jq的api懂高中英语就够了,猜也猜的出来意思,然后下载基本jq的chm手册,对着挨个看一遍。(这个挨个看一遍的意思就是一行一句的逐个看一遍,看不懂的别死扣,先看完再说)。

看完一遍之后,心中有数,哦,原来有个ajax函数可以访问网络资源,有个success可以写回调方法,超时怎么办?几个一起同时发怎么办?不管了,用到再说。哦,原来有个find函数可以查找dom节点,哦,原来有个serialize函数可以序列化表单值,哦,原来有个toggle函数可以做切换用,哦,有个fn可以挂着写插件用,哦,切换cls这样做就行了,哦,请求json数据这样配置参数就可以了。

做到了解,你就成功了,用到的时候知道jq能干什么,不能干什么,干什么的时候去看哪一章,再去仔细研究,做东西开始有点慢,做起来几个东西之后就手熟了。

同理,我学习yui2,kissy,mootools,nodejs,react,ng,甚至swift部分也是这样对着手册来的,反复几遍就可以了。

入门的意思就是概括一下,我知道有哪些api能干什么,具体怎么干,用的时候再说。

2,入门初学者。

我看完手册了,也写了几个小项目了(切换切换class,套几个jq插件,ajax取完数据又html放到指定位置了类似这种需求)。我感觉我可牛逼啦,终于会写交互js啦,感觉什么都不怕啦,其实就是刚入门而已。

我们来看看入门初学者怎么提升js编程技巧,个人经验,切勿照搬模仿,我们会使用框架工具库完成简单需求的同时,我们无法理解一些复杂功能的开发原理。比如一个简单的放大镜特效,一个裁切头像大小的功能,一个轮播组件,一个搜索智能提示,一个at圈人功能,甚至一个回到顶部的fixed按钮,或者输入框计数,表单验证组件,动态表格,长连接聊天功能,浮出层,移动端的swiper,动画函数,选择器,字符串模板,富文本编辑器?太多啦?一点也不多,我还没说全呢,几乎所有你在网页里见到的一些现成交互,其实有个学名,慢慢看,挨个写一遍,两遍,三遍,先不谈封装成组件,api是否优美,就说能不能写出来,刚入门的人一定say no。

说白了,经验的积累是前端开发非常重要的一条,有些东西你没写过你还真就是不会写,或者你知道怎么写,但是你没写过也别轻易说自己会,因为兼容问题,很多东西细节上你还是没有体会。所以,我第一次工作写一个头像裁切功能,我想了好多个夜晚,也没弄明白原理,查了好多文章,又写了许多demo,最后还是做了出来,但是会有一些极限情况下的bug?一个组件一个组件的撸,一遍又一遍的撸,是初学者最好的提升方法。

等你做到基本网页里任何一个功能看一眼就知道怎么写或者都亲自写过的时候(不是demo级别,是上线级别),你就已经不是初学者了,大概这个速度快也要1年左右时间,这也就是为什么一些功能招聘都要3年以上的原因了,经验包的积累不是看几本书就搞的定的。

3,中级水平。

你发现你在编写javascript功能时已经没什么好怕的东西了,也就是说,衡量一个需求时,你从来不会说no,而只是预估时间的时候,基本就已经达到中级水平了,这个时候你明确的知道自己在写的是什么,也能读懂别人写的是什么,而且拥有了一些自己平时积累所写得插件,组件,并封装的好好的,那么,就完美了么?你发现你遇到了瓶颈,不知道如何提高自己了,打开了知乎,可能问下了这个问题:《如何提高javascript编程高级技巧》

这个时候你需要往高级一步了,你可能熟练使用jq或者某一框架,基于某些框架二次开发了非常炫酷的插件组件,并且了解了设计模式,一些高大上的名词,业务需求无法满足你,自动化工具grunt和gulp用的妥妥的,总之,很多事情在你眼里自己无所不能,哎呀我操,为什么呢,我是不是凯瑞了全场?

这个时候,你需要的是开始思考,从最开头开始撸你的东西了,比如我们往往喜欢使用jq或者zepto,我们的插件往往是基于他们或者说我们的经验都是在某一个领域框架下实现的,回过头来看,这些东西真的好吗,他们是如何实现的?为什么要这样设计,一个超过5000行的抽象类怎么组织,设计模式你真的理解吗,js的奇淫技巧你会几样,有没有见过一些根本看不懂的js代码,那些大牛们到底在说什么呀,es6的api到底有多少个呀,那些新手都看得懂jq(真的懂?),为毛自己写不出来?grunt到底是怎么运行的啊,v8的源码是什么样的啊,测试用例是什么鬼啊?

很多时候,我在读一个库的源码时,在看devDependencies的时候,意外又发现了数个不懂的东西,有时候见到一段代码会会心一笑,有时候又会大喊卧槽,从感觉自己什么都知道,到感觉自己什么都不知道,可能就是你突破瓶颈的时候了。

4,高级水平。

我们公司也有高级工程师的技术序列要求,我刚好评过,基本考察点都不在你如何实现一个技术细节了,而是考察你如何从0到1的这个过程,以及可能涉及到2,3,4的预判能力。还有就是在业界都在传一些东西很好很强大的时候,你已经可以把他转换为实际的生产力了,能发现一些好的东西里面不足的地方,并能自己改进,永远不满足,不崇拜大牛,因为自己就是大牛。说白了,你写的东西要能让很多人解决一些经常解决不了的问题,比如怎么能让你的系统更快,依赖更少,代码更小,开发起来更爽,新人如何更好的上手,api设计的美不美,实现的每一行代码都精雕细琢,review别人得东西总能提出自己的看法,总之,Legendary啦!

5,可能你需要多看看《超级演说家》。

 
以上内容转自知乎
作者:小爝
链接:https://www.zhihu.com/question/29933334/answer/46249405
来源:知乎

怎样提高js的编程能力的更多相关文章

  1. CompletableFuture提高你并发编程能力

    思考:如果有两个顺序执行耗时的方法,你该怎么做??? 例如: public void doHousework() { //烧水 doWater(); //扫地 doFloor(); } 没错,聪明如我 ...

  2. 该如何有效的提高C/C++语言编程能力

    很多答案都谈到算法的重要性,我的答案主要集中在C++上,只是一些个人经验. 其实我以前也有这样的困惑,感觉完了不知道怎么用.而且我也不是学计算机的,也没有从事相关工作,所以大概有十年的时间都没写什么程 ...

  3. [转载]Web前端开发工程师编程能力飞升之路

    [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...

  4. 【转】Web前端研发工程师编程能力飞升之路

    分类: Javascript | 出自 海玉的博客 今天看到这篇文章.写的非常有意思.发现自己还有很长的一段路要走. [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如 ...

  5. Web前端研发工程师编程能力飞升之路

    今天看到这篇文章.写的非常有意思,于是转载了.看看我们都处于什么的阶段. [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着 ...

  6. Web前端开发工程师编程能力飞升之路

    [背景] 如果你是刚进入web前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年web产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...

  7. web前端研发工程师编程能力成长之路

    [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧:如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧:如果你是四五年的前端开发高手,没有难题能难得住你的 ...

  8. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  9. WEB前端研发工程师编程能力成长之路(1)(转)

    WEB前端研发工程师编程能力成长之路(1)   [背景] 如果你是刚进入WEB前端研发领域,想试试这潭水有多深,看这篇文章吧: 如果你是做了两三年WEB产品前端研发,迷茫找不着提高之路,看这篇文章吧: ...

随机推荐

  1. H5微信分享相关规范

    微信分享 用户调用微信的分享功能,可以自定义分享的title和描述,以及小图标和链接.可以分享到群.好友.朋友圈.QQ.QQ空间等. 分享设计规范 分享标题:14字以内,建议使用朋友般亲切的口吻 分享 ...

  2. php类知识---常量点滴

    常量在类的内部,外部都可以访问,要通过类名::常量名 常量没有访问修饰符 与变量不同的是,常量不能放在双引号中取值,而变量可以 <?phpclass mycoach{ public $name= ...

  3. Hadoop-No.1之数据存储选型

    文件格式 Hadoop支持多种面向数据存储的文件格式,包括纯文本和Hadoop特有的格式,如SequenceFile.还有一些更加复杂但功能更加丰富的格式可供选择,如Avro与Parquet.不同的格 ...

  4. 题解 【POJ1187】 陨石的秘密

    解析 考虑到数据范围,其实我们可以用记搜. 设\(f[a][b][c][d]\)表示还剩\(a\)个'{}',\(b\)个"[]",\(c\)个"()",深度\ ...

  5. 基于node.js的websocket 前后端交互小功能

    一.node var ws = require("nodejs-websocket"); console.log("开始建立连接...") var server ...

  6. hihocoder 1251 Today is a rainy day ( 15年北京 C、暴力 )

    题目链接 题意 : 一串数字变成另一串数字,可以单个数字转变,或者一类数字转变,问最少操作次数 分析 : 15年北京赛区的银牌题 首先有一个点需要想明白.或者猜得到 即最优的做法肯定是先做完 2 操作 ...

  7. 日照学习提高班day3测试

    A 思路: 一看到'#''.'什么的就想到搜索怪我怪我... 这道题勉强说是搜索别打我qwq 1)因为不重复,所以首先要判断是否%5==0,若不满足,直接输出NO 2)弄个vis数组记录是否被搜过,如 ...

  8. Cow and Snacks

    ​ D. Cow and Snacks 参考:Codeforces 1209D. Cow and Snacks 思路:利用并查集,构建一个生成树,然后树的边数就是能够开心的客人的人数.用一个条件fin ...

  9. [CSP-S模拟测试]:装饰(数学)

    题目传送门(内部题147) 输入格式 每个测试点第一行一个正整数$T$,表示该测试点内的数据组数. 接下来$T$行,每行三个非负整数$a,b,c$,含义如题目中所示. 输出格式 对每组数据输出一行一个 ...

  10. 11.二进制中1的个数 Java

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路 当n不等于0时执行以下循环: 1.判断n的最低位是否为1,若为1,则计数器加1 2.将n无符号右移1位(若使用带符号移 ...