如何快速成为javascript高手的思考

  如何快速成为javascript高手?

  之前我拿这个问题问过我的同事,也问过国内的一些javascript高手。

  最近,我一直在拿这个问题问自己。之所以会有这个问题,我基于两个前提:第一、我自认为自己不笨;第二、我学习和使用javascript也有一段时间了,并且自己学习还算努力。

  思来想去,我觉得我应该先回答下这个问题:如何提高自己的学习效率?

  想象一下学校的场景,有一些知识,有的人就是学得比你快。为什么?可能他本来就比你聪明;可能他之前学过的、接触过的东西使他对这个知识有启发;可能他背地里比你花的功夫还多。不管哪一种形式,从旁观者的角度来看,他就是学得比你快,也就认为他的学习效率比你高。

  排除第一个答案不讨论。我们来讨论下第二个和第三个答案。

  答案二:“他之前学过的、接触过的东西使他对这个知识有启发”,我这里简单的归结为积累,关于积累问题,我上一篇博客程序员的学习和积累有谈到。

  答案三:“他背地里比你花的功夫还多”,还有现象本身“他花的功夫比你少,学得比你还好”,关键字都落在了“功夫”二字上。如何下功夫、功夫下在什么地方?这又引出了一个新问题。

  关于这个问题,纠结了这么多天,我的回答是:如何下功夫?动手!功夫下在什么地方?和工作有关的地方!

  说到这,我又想起了我深受毒害的应试教育。应试教育缺乏的正是动手和实践知识的场所或曰方式。很多时候我总是懒于动手,为什么懒于动手?难道是我真的懒吗?我不承认,我不动手是因为我找不到动手的理由,或是不知道如何动手。拿写一个javascript库或框架为例,为什么我到现在还没有写一个javascript库?首先我找不到写它的理由,现在这么多流行、易用且被广泛使用的javascript库或框架了,有必要再写一个吗?就算我写了,公司会使用它吗?如果没有对其他库或框架的深刻理解和认识,只是把各个库或框架中的一些东西拼凑在一起,甚至不知道其中一个函数实现的内部原理,那能叫我写的吗?其次,我找不到入手的地方。在没有对其他框架有深刻认识,自己能找到其中的缺陷、不足而加以修正和实现之前,我找不到入手的地方。

  解释下答案:

  功夫下在和工作有关的地方,这需要有强烈的责任心和主人翁意识。我们需要深刻理解这句话,“功夫下在和工作有关的地方”不是说,每天把上司交给自己事情做完、没有bug、达到需求就可以了。而是要做得更好,我想提出3点,也给自己树立目标:

  1、用最优的方案实现需求。在自己的已有知识结构、能力、经验上用最好的方式实现需求,在此基础上努力搜寻业界相关的解决方案比较优劣,选出最佳的方案,最终实现需求。

  2、关心自己已做完工作,关注业界的相关新思想、新技术、新理念,把已完成的工作,用最新最优的方案予以重构,并在适当的时机在产品上得以实现。

  3、关注自己所负责工作的未来,把产品当做自己的孩子,努力将他引向最美好的未来。努力将自己所负责的产品打造成为业界的标杆(特别是自己所负责的部分,那是自己影响圈内的事情)。

  动手。如果你知道了功夫该下在什么地方,也自然知道了要动手做什么,动手也会成为快乐的事情。

  不知道大家有没有这样的经历,当你有极大的渴望想把某件事情做好的时候,你会花很大的精力去研究怎样把事情做好,为此你会学习很多相关的东西,平时你可能花一周时间也学不会的东西,你花一个上午就学会了,还应用到了你要做到事情中,并且事后你会对所学过的东西印象深刻。

  这,就是我对“如何提高学习效率”这个问题的回答。

  很抱歉,写到这里我还几乎没有正面回答“如何快速成为javascript高手”这个问题,如果你已经有所收获了,我感到很欣慰。如果没有,再谈谈javascript,因为我目前还不算javascript高手,下面这段算画蛇添足也好,算狗尾续貂也罢。

  语言层面:编程语言之间是想通的,至少高级语言是想通的(相对于机器语言和汇编语言),javascript是一门特殊的语言,既可面向过程、又可面向对象。有人喜欢它弱类型语言的特性,而将其语言本身的特性发挥得淋漓尽致。有人喜欢java这类纯面向对象语言的严谨,而使用一些功能函数将其包装成完全的面向对象,并采用它实现了一些常见设计模式。所以说,真正要精通javascript这门语言本身,需要对其他语言的一些理解(至少是了解)。鉴于目前javascript从业人员的构成,非计算机专业科班出身的同学可能需要努力补补课。

  环境层面:javascript运行的环境目前有浏览器端和服务器端,将来可能有机会到嵌入式设备中。目前大部分应用主要集中在浏览器端,而浏览器厂商为了各自利益等各种历史原因造成的javascript运行环境兼容性问题,也是javascript从业人员较为头疼的问题。

  业务层面:很多其他语言有功能完善的底层API、工具包,抱歉,javascript暂时没有(浏览器端、nodejs开始有雏形,希望commonJS规范能够一路走好)。所以各种库、框架对于一些基本业务需求都提供了类似但非相同的实现。一个优秀javascript程序员需要辨别各种框架或库中的业务实现,或编写出自己的业务实现。

  综上,要在语言、环境、业务三个方面都精通,确实是需要花费很大的功夫。一个人的精力是有限的,其他语言积累几十年的东西,你想一个人在javascript得到实现是不太可能的。术业有专攻,不是说你是javascript高手,javascript的方方面面你都能做到最好。

  故,我认为“如何快速成为javascript高手?”, 无解。无法快速!

  “如何成为javascript高手”,动手,把功夫下在和工作有关的地方上!

  运用javascript把工作做得最好,才是javascript高手!

  PS:这是本人对自身问题的思考和分析,之所以发到首页来,是希望能给有同样疑惑、同样迷茫的同学带来些思考。分享这篇博文花了4小时的写作时间,如果你有同感,如果你觉得我还算用心,请帮忙右下角推荐一下,这样能给更多的同学带来一点思考和帮助。如果你以为我是javascript高手,只是来学习经验的,却没有半点收获,失望而归,请拍砖。

posted @ 2011-11-27 00:46 慢热君Kevin 阅读(8438) 评论(72) 编辑 收藏

 回复 引用 查看   
#1楼 2011-11-27 01:02 Jason Damon      
学习JS的路上。。
 回复 引用 查看   
#2楼 2011-11-27 01:09 农村长大的娃娃      
很有启感!!我也才毕业,在一家小公司上班,坐在那里觉得自己真的还有好多的知识要学,特别是对.net很有兴趣,但是一到公司就什么也写不出来,我想也是动手动少了。。。也在学js希望以后多多指教哟!!
 回复 引用 查看   
#3楼 2011-11-27 01:51 在北落      
现在一直在学很多东西 但是能自己动手的很少,学好一个东西必须多想多做
 回复 引用 查看   
#4楼 2011-11-27 04:32 铃兰草      
诈一看,什么都说了。再一看,好像什么都没说。
多动手吧,春不是叫出来的,是真刀真枪干出不来的

 回复 引用 查看   
#5楼 2011-11-27 08:52 zsea      
看来我很笨,学这个快十年了,也不敢说是高手。。。
 回复 引用 查看   
#6楼 2011-11-27 09:14 调皮老李      
赞同
 回复 引用 查看   
#7楼 2011-11-27 09:27 陈玉国      
跟我想的完全一样!哈哈,思想一致啊
 回复 引用 查看   
#8楼 2011-11-27 10:06 sylla      
js还是挺强大的,赞同
 回复 引用 查看   
#9楼 2011-11-27 10:27 chenping2008      
jquery真的是非常的棒。个人觉得没有必要在自己写个js的框架。
 回复 引用 查看   
#10楼[楼主] 2011-11-27 10:38 慢热君Kevin      
@Jason Damon
@在北落
@调皮老李
@陈玉国
@sylla
@chenping2008
谢谢大家的支持

 回复 引用 查看   
#11楼 2011-11-27 10:38 深蓝色梦想      
正在努力学js
 回复 引用 查看   
#12楼[楼主] 2011-11-27 10:39 慢热君Kevin      
@农村长大的娃娃
指教不敢当,欢迎交流,相互学习

 回复 引用 查看   
#13楼[楼主] 2011-11-27 10:40 慢热君Kevin      
@zsea
高手是比较难定义的,您谦虚了

 回复 引用 查看   
#14楼[楼主] 2011-11-27 10:48 慢热君Kevin      
@铃兰草
谢谢您的板砖,通过近期的思考,我也意识到了很多问题,下面要做的就是根据工作的需要,勤动手

 回复 引用 查看   
#15楼 2011-11-27 10:57 SolidMango      
楼主可以把学习javascript的经典书籍推荐一下么?最近有兴趣钻研一番。
 回复 引用 查看   
#16楼 2011-11-27 11:06 我是打酱油的      
不要为高手而高手
 回复 引用 查看   
#17楼 2011-11-27 12:53 waninlezu      
要成为 js 高手,你得 把以前学到的忘掉
 回复 引用 查看   
#18楼 2011-11-27 14:05 金~~~      
不要为了学习js而学js....
 回复 引用 查看   
#19楼 2011-11-27 14:35 煋火      
欲练此功
必先自宫

 回复 引用 查看   
#20楼[楼主] 2011-11-27 18:06 慢热君Kevin      
@SolidMango
园子内有很多朋友已经有js书籍的推荐了。根据自身的情况选择书籍吧,书不在多,研究透一两本就可以了

 回复 引用 查看   
#21楼[楼主] 2011-11-27 18:06 慢热君Kevin      
@金~~~
是的,不要为了学习而学习,要带着目的去学习,也是我想阐述的。

 回复 引用 查看   
#22楼 2011-11-27 18:23 kkun      
学习javascript的两个方向
一是EAMCScript语言级别的撑握,"纯语言",Node.js属于这一类
二是Javascript与各种浏览器的交互,浏览器提供的"javascript的api",jQuery属于这一类

 回复 引用 查看   
#23楼 2011-11-27 19:27 【当耐特砖家】      
引用“如何成为javascript高手”,动手,把功夫下在和工作有关的地方上!
  运用javascript把工作做得最好,才是javascript高手!

拼命工作或是疯狂加班对技术提高一点作用没有。也可以这么说:工作和技术应该没有多大关系,工作只能提高熟练度,不能提高技术。只有在工作之余,静下心来看好书、思考、coding才是提高技术的关键·

 回复 引用 查看   
#24楼 2011-11-27 19:37 【当耐特砖家】      
@chenping2008
引用chenping2008:jquery真的是非常的棒。个人觉得没有必要在自己写个js的框架。

那么为什么John Resig写完Jquery之后还写个Processing.js?

 回复 引用 查看   
#25楼 2011-11-27 19:49 dreamhappy      
关心自己已做完工作,关注业界的相关新思想、新技术、新理念,把已完成的工作,用最新最优的方案予以重构,并在适当的时机在产品上得以实现
 回复 引用 查看   
#26楼 2011-11-27 20:19 传说中的弦哥      
想成为javascript高手这个想法和标题本来就是错误的
用上快速这个词显得这个标题更加愚蠢
虽然最后得出
故,我认为“如何快速成为javascript高手?”, 无解。无法快速!
但不得不说出发点错了...整片文章毫无意义

 回复 引用 查看   
#27楼[楼主] 2011-11-27 21:07 慢热君Kevin      
@【当耐特砖家】
我认为努力地做好工作肯定是能提高技术的,因为技术是为产品服务的。当然你提到的提高熟练度在国内现状也有一定道理,通过技术手段从繁杂的日常工作中脱身出来,从更大的角度来做工作肯定是对技术有帮助的。

 回复 引用 查看   
#28楼[楼主] 2011-11-27 21:13 慢热君Kevin      
@传说中的弦哥
感谢你的板砖,“高手”很难定义,成为高手没有捷径,想必你已是高手,无法理解一些别人的困境和想法。

 回复 引用 查看   
#29楼 2011-11-27 21:25 john23.net      
顶个
 回复 引用 查看   
#30楼 2011-11-27 22:28 poleices      
拍砖~~
一直在隔三差五的研究JS,也想成为JS高手,你这篇贴子,一点营养都没有~~~浪费自己的时间,也浪费别人的时间,有这功夫你研究下别人的代码也好啊

 回复 引用 查看   
#31楼 2011-11-27 23:09 simonleung      
不要混淆javascript 和 DOM 和其他的對象模型(如node.js的api)

複雜的地方不在javascript, 而是對象模型

 回复 引用 查看   
#32楼[楼主] 2011-11-27 23:16 慢热君Kevin      
@simonleung
言之有理,文中没有说清楚,多谢赐教

 回复 引用 查看   
#33楼 2011-11-28 03:09 陈梓瀚(vczh)      
学物理和生物,发明时光机,等到搞定了,狂学javascript很多年,然后把自己变年轻,最后回到过去把自己干掉——高速成为javascript高手。
 回复 引用 查看   
#34楼 2011-11-28 08:31 我们的路      
讲的不错,大部分人原因还是答案二和答案三。
 回复 引用 查看   
#35楼 2011-11-28 09:28 越------      
嗯~~说出了问题的关键,也需要一个好点的环境。有些老板,要的是速度和不出问题,根本就没有时间去“最优”。
 回复 引用 查看   
#36楼 2011-11-28 09:34 soni      
引用【当耐特砖家】:
@chenping2008
引用chenping2008:jquery真的是非常的棒。个人觉得没有必要在自己写个js的框架。

那么为什么John Resig写完Jquery之后还写个Processing.js?

jQuery 就是新手用起来不错,高手用起来难过。

 回复 引用 查看   
#37楼 2011-11-28 09:43 丁浪      
能说点具体实用的吗?比如跟大家说说,如何掌握javascript函数式编程,如何掌握javascript中的面向对象。。。
 回复 引用 查看   
#38楼 2011-11-28 09:48 菜园子      
把题目和文章中的javascript换成另外一种语言同样适用
 回复 引用 查看   
#39楼 2011-11-28 10:23 早起的菜鸟      
支持楼主哈 很有启发
 回复 引用 查看   
#40楼 2011-11-28 10:48 青蛙王子。      
不知道大家有没有这样的经历,当你有极大的渴望想把某件事情做好的时候,你会花很大的精力去研究怎样把事情做好,为此你会学习很多相关的东西,平时你可能花一周时间也学不会的东西,你花一个上午就学会了,还应用到了你要做到事情中,并且事后你会对所学过的东西印象深刻。

深有体会
当我看了http://www.cnblogs.com/iamzhanglei/archive/2009/12/27/1633356.html这里的第一道面试题 我在想 为啥用到group by为啥用到 case(基础不牢) 然后我去google(不去w3schoool的原因是 太书本化 没有拓展) 然后
1.http://sql.1keydata.com/cn/sql-groupby.php
2.http://www.enet.com.cn/article/2006/1123/A20061123303665.shtml
然后在比对着我把面试题的答案贴在sqlserver上运行一遍 我立马就悟了...
还多余学到了:
二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。 

SELECT region, SUM(population), SUM(area) 
FROM bbc 
GROUP BY region 
HAVING SUM(area)>1000000 

在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。 
相反,HAVING子句可以让我们筛选成组后的各组数据.

然后继续google:having
HAVING 子句用来从分组的结果中筛选行。 
对于可以在分组操作之前或之后应用的搜索条件,在 WHERE 子句中指定它们更有效。这样可以减少必须分组的行数。应当在 HAVING 子句中指定的搜索条件只是那些必须在执行分组操作之后应用的搜索条件。

这种感觉是很棒的

 回复 引用 查看   
#41楼 2011-11-28 11:54 巴蛮子      
引用传说中的弦哥:
想成为javascript高手这个想法和标题本来就是错误的
用上快速这个词显得这个标题更加愚蠢
虽然最后得出
故,我认为“如何快速成为javascript高手?”, 无解。无法快速!
但不得不说出发点错了...整片文章毫无意义


赞同!“如何快速成为xx语言的高手”是个错误的目标,尤其是对于javascript这个比较薄的语言而言。这个语言脱离不了宿主,比如DOM、Rhino(JVM)、NodeJS,要用好,在于对后面这些的理解,JQuery、ExtJS这些也是。

 回复 引用 查看   
#42楼 2011-11-28 12:33 简简单单就好      
很同意楼主的观点,javascript强大的灵活性,并不是看了就能懂的,要反复实践才能真正懂,只有真正的javascript高手才能写出好类库,我们还是先站巨人的肩膀去面对工作.
 回复 引用 查看   
#43楼 2011-11-28 12:43 陈猛猛      
个人觉得,学习语言,一个是工作,另一个才是爱好,如果非要在javascript上面做一个高手,我个人觉得真的没必要,如果你不是一个javsscript的迷。。。爱好同样很重要。
 回复 引用 查看   
#44楼 2011-11-28 12:54 7goal      
扯吧你。
還不如看一篇百度百科來的實際有用
http://baike.baidu.com/view/16168.htm

 回复 引用 查看   
#45楼 2011-11-28 13:57 菜鸟起步      
说的太好了,我个人觉得 如果写的东西没人去用,跟工作无关,我就没有动力去写……所以 我觉得学习一门技术最好的方法就是实践,带着问题去学习 然后解决问题,比单纯地去学习 要简单着多。等待技术达到一定水平了,再去研究这门技术的更深更精方面的知识。这条路才是最快的。我个人觉得。呵呵……
 回复 引用 查看   
#46楼 2011-11-28 14:38 黑剑      
我是个在校生,学校开设的课程总会想法设法地去应付,只是希望能够拿个好的学分,至于从课程中收获到了什么不去做太多地考虑。虽然课余时间会去接触一些新东西,但有的时候根本就是很茫然,不知道应该去学什么。就算是找到自己感兴趣的方向也不敢狠下心研究下去,担心出去之后用不到,挣不到钱~~
 回复 引用 查看   
#47楼 2011-11-28 15:53 叶奇天      
我记得几个月前,一个Java QQ群里,有人在招聘JavaScript高手,工资:12000-250000/月,很惊奇,这么高的月薪,不知道需要有多高深的技巧与功底啊!!
 回复 引用 查看   
#48楼 2011-11-28 15:55 heke0928      
不知道楼主或是各位有好的javascript的调试工具没有,除了firebug之外!
 回复 引用 查看   
#49楼 2011-11-28 16:52 Joi Yao      
博主很用心在学呐。遇到实际问题的时候,领悟到的是最多的。
 回复 引用 查看   
#50楼[楼主] 2011-11-28 21:29 慢热君Kevin      
@丁浪
多谢你的意见,后续我会经常更新博客,尽自己的努力给大家的分享。

 回复 引用 查看   
#51楼[楼主] 2011-11-28 21:32 慢热君Kevin      
@菜园子
确实是这样的

 回复 引用 查看   
#52楼 2011-11-28 21:35 yupeng      
写得不错。把力发在和工作相关的地方上。
 回复 引用 查看   
#53楼[楼主] 2011-11-28 21:37 慢热君Kevin      
@黑剑
学生时代有这种茫然那是很正常的,如果确定了走技术方向的话,和技术有关的知识都接触了解下。然后最好去一家公司实习,了解工作运作的方方面面,当你有了一个全局观后,你才会发现自己真正要做什么,要学什么

 回复 引用 查看   
#54楼[楼主] 2011-11-28 21:39 慢热君Kevin      
@heke0928
我经常使用firebug,或是webkit自带的调试工具,做.NET的话可以用VS去调试。我不知道你为什么要将firebug排除在外

 回复 引用 查看   
#55楼[楼主] 2011-11-28 21:43 慢热君Kevin      
这篇帖子,我原来的题目是"程序员的学习与工作",换成这个题目只是想引起很多和我一样有困惑,找不到学习目的和方法同学的目光,带给他们一些思考和丁点帮助。吸引各位高手的目光并非我的本意,也谢谢你们的板砖,让我认识到自己的不足。同时也感谢大家的支持,多谢了
 回复 引用 查看   
#56楼 2011-11-28 21:56 呀麦蒂      
路过,也打算好好学习一下原生的JS,有的框架还是工作的时候快速开发用!要学哈还是不容易的~
 回复 引用 查看   
#57楼 2011-11-29 09:44 小蘑菇1111      
小女子目前还停留在jQuery层,原生js写的少,不懂Nodejs,走在求学路上,读完本文,警示自己路还很长,不要懈怠~~~
 回复 引用 查看   
#58楼 2011-11-29 16:19 遗失的天空      
学习中 只会最基本的应用 惭愧
 回复 引用 查看   
#59楼 2011-11-29 20:20 丁小贝      
引用soni:
引用【当耐特砖家】:
@chenping2008
引用chenping2008:jquery真的是非常的棒。个人觉得没有必要在自己写个js的框架。

那么为什么John Resig写完Jquery之后还写个Processing.js?

jQuery 就是新手用起来不错,高手用起来难过。

每个新框架出来的时候,多数人都会认为不能更好了

 回复 引用   
#60楼 2011-11-29 21:47 半柚[未注册用户]
慢热君你好。这是第一次来你的博客。我是一名电子商务大三学生。正如你说的,我最近不仅在学Javascript,我们这一学期还要学Java EE,Struts,Hibernate,Spring,CSS,XML,DOM,Ajax,数据库,数据结构...正如你所说,每个都停留在hello world的层面上,好多时候也会找技术书来看,一个猛子扎到一个技术中其他的课如果说为了考试的话就都落下了。而且感觉大脑需要在不同的技术之间进行频繁的切换。目前对于这种有些苦恼。望指点。谢谢O(∩_∩)O~
 回复 引用 查看   
#61楼 2011-11-30 00:03 布衣歩饶      
@慢热君Kevin
楼主不但给了我们启发和知识,还告诉了我们思考的过程,谢谢了。

 回复 引用 查看   
#62楼[楼主] 2011-11-30 21:01 慢热君Kevin      
@半柚
一个小建议,用你学的东西做一点东西出来。如果你还在学习阶段,你可以试着用SSH做一网站出来,把自己的所学都实践出来,体现在你的网站上。学东西慢慢来,经常切换的话,可以对比着学习,理解一些思想。不要为了学习而学习。希望能对你有点帮助。By the way,我也是学电商的。

 回复 引用 查看   
#63楼 2011-12-01 09:41 discover      
javascript本身是一个非常非常差得语言,就因为所有人都用它,人这种灵长类动物又有着无穷无尽的智慧,所以才把它越用越深奥
 回复 引用 查看   
#64楼 2011-12-01 10:31 千羽天明      
严格的来说要成为javascript很难。首先基础必须牢固,要想基础牢固就需要大量的代码实践,自己必须亲手去写。第二理解prototype,这个就是思想方面的了,需要不停的琢磨和理解。

还要搞定浏览器兼容,从ie6到最新的。

要成为js 高手很难,就好像要成为围棋高手很难一样。

 回复 引用 查看   
#65楼 2011-12-02 18:34 lao_liang      
深有同感
 回复 引用   
#66楼 2011-12-07 14:28 yyp00[未注册用户]
一个字烂
 回复 引用   
#67楼 2011-12-08 10:03 steve.bao[未注册用户]
这个吧,就我的理解
想知道JS,就要从他的引擎开始着手
例如知道一个JS变量的生命周期,等等各种东西
有高手在JS之上做了一层薄薄的封装,这个就是COFFEESCRIPT
其实JS功力的体现在JS之外,逃不出数据结构,编译原理等这些东西
总之把JS当做web-JVM看待,我相信LZ就能明白很多

 回复 引用   
#68楼 2011-12-17 20:57 HJHJ[未注册用户]
HNKJHJJK HJGDFGGHJ
 回复 引用   
#69楼 2011-12-17 23:10 半柚[未注册用户]
@慢热君Kevin
很高兴能够收到你的回复。感谢!
和我们老师说的一样,做网站,今年连着N个实验课都是大作业,多多少少有压力。
:)可否加个微博或者QQ呢?

另:你已经毕业了么?现在从事电商吗?

 回复 引用 查看   
#70楼[楼主] 2011-12-18 15:57 慢热君Kevin      
@半柚
谢谢支持,我的qq:523865143。

 回复 引用 查看   
#71楼[楼主] 2011-12-18 15:58 慢热君Kevin      
@steve.bao
谢谢你的指点,你的角度是从语言底层角度出发的,理解很到位

 回复 引用 查看   
#72楼 2012-01-31 15:39 AlfredLee      
欢迎来交流技术。转下我的地盘喔。JS 觉得路还是很长。呵呵。
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2264741 QraIhE6BVxY=