从思想上重视JavaScript才可以驾驭它

掌握JavaScript语言的思想前提
服务器君一共花费了280.858 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

今天偶然看到的这篇文章,深有同感,一直觉得大家对JavaScript存在或多或少的偏见,这篇文章说出了我的心声。

图1. 可怜的JavaScript(摘自《Practical JavaScript DOM Scripting and Ajax Projects》)

无论是公司的同事还是外界的程序员朋友们,大部分人对JavaScript的高级应用不甚了解,已有的知识架构里会认为JavaScript仅仅是一门脚本语言,其作用是给页面做一些锦上添花的效果,比如表单验证等等。潜意识里也就不会用面向对象的思想去编写JavaScript代码,也很少会去深入了解 prototype, context, scope chains, closures等概念。这导致一个传统的脚本编写习惯:

  1. 在html页面或js文件里写很多functions
  2. 在需要用到function的地方直接调用

上面的做法是面向过程的,看似很自然很不错,但实际上存在很多弊端。在团队协作中,会增加代码冲突,可复用性和可维护性都很低,是一种应该被淘汰的旧式编码习惯。

对于JavaScript的学习,可能最重要的还是要从思想上认识到JavaScript不是玩具语言。JavaScript的作用远不止增加点表单验证,我们可以看看GMail、看看Google Maps,如果开发者们没有对JavaScript足够尊敬,是不大可能写出如此优秀的Web应用的。

JavaScript门槛很低,但门槛低并不意味着容易掌握。一定程度上,JavaScript的入门容易以及其极大的灵活性,使得要掌握 JavaScript变得很难(这和Ruby类似,Ruby也是一门入手容易得道难的语言)。从纯语言上讲(不考虑框架类库),我个人的经验是,学习 JavaScript比学习Java更具挑战性。我们大多习惯了传统的面向对象表述方式,一定程度上甚至会认为类、封装、继承等概念都得像Java、 C++那样,可能都从来没想过没有class, extend, override等概念也能面向对象。JavaScript的面向对象打破了这种思想上的禁锢:世界是多样性的,条条大路通罗马。夸张一点说,深入学习 JavaScript,更多的是一种思想上的挑战,能活跃思路,扩大视野,甚至改变对世界的看法。

上面所说的这些,无意于夸大JavaScript的作用和难度。每个人都或多或少的会强调自己所学的知识,但在这里,我希望自己能很客观的传递一个观点:无论什么语言,想要精通,都很不容易;如果想学习某门语言,就得从思想上尊敬这门语言,在尊敬的基础上去学习,才有可能掌握这门语言的精髓。除了JavaScript,再举两个例子:

一是CMD脚本。dir, cd, for, tree多容易,接触过不少非常想精通CMD脚本的人,这些人会花一段时间去努力学习,但绝大部分最后还是连一个简单的备份脚本也不会写。抛去术业有专攻等各种理由不谈,这些人最后无法精通CMD脚本很大程度源于他们自身的心魔:潜意识里认为CMD很容易,不“尊敬”它,因此实际行动上也就不会真的把心思放在学习CMD上。

二是HTML语言。经常能听到这样的话:HTML多容易,花个一两天也就会了,我自己也曾这么认为。但随着使用HTML经验的增长,我慢慢感觉到,对于 Web前端开发来说,HTML可以说是最难的。HTML4.01规范中的91个元素就如汉字里的2500个常用字一样,我们读完小学后对常用字应该就都认识了,但要用汉字写篇优秀的文章,却并不容易。HTML也是这样,大部分宣称HTML很容易的开发者,往往只停留在认识body, p, form, table, div, ul等标签上,对于dl, legend, sub, caption等并非生僻的标签甚至都不认识。在常用字还认不全的情况下,宣称HTML很容易,真的很狂妄。(HTML的难度在于如何利用标签构建出结构良好且富含语义的代码,就如写作文一样,不能认为认识几个字就自信能妙笔生花。)

总之,语言无贵贱难易,要从思想上尊敬重视一门语言,才有可能驾驭它,否则,将永远游离在专业程序员的宝殿之外。

图2. JavaScript获得了应有的尊敬(摘自《Practical JavaScript DOM Scripting and Ajax Projects》)

对JavaScript而言,首先我们要意识到它的强大。目前各个浏览器争先恐后地优化提高JS引擎的性能,已经昭示出JavaScript强大的生命力和非常美好的前景。从心魔中去除对脚本语言的鄙视,尊重JavaScript, 对我们这些已经专职从事前端开发的程序员来说,早已不是问题。但我们还需宣传布道,要让后台开发程序员们也能意识到这一点,这还有漫长的路要走。

上面是一方面,还有一方面是:“我们需要关注JavaScript如何使用,或许更需要关注JavaScript能做什么。” 这是Aaron Gustafson在JavaScript渐进增强一文中非常强调的一点。精通某门语言,还意味着要清楚这门语言在哪些地方不适合使用。任何一门语言都不能滥用,庖丁解牛,杀猪砍肉,不同的场合需要用不同的刀。每个优秀的屠夫都有自己的一套刀具,并不是像关羽一样抗一把青龙偃月刀就能闯遍天下。

本文地址:http://www.nowamagic.net/librarys/veda/detail/1219,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/1219

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

大家都在看

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《Python在Unix和Linux系统管理中的应用》 Noab Gift (作者), Jeremy M.Jones (作者)

《Python在Unix和Linux系统管理中的应用(影印版)》作者们还构建了一个可以免费下载的Ubuntu虚拟机。该虚拟机包含了这《Python在Unix和Linux系统管理中的应用(影印版)》的源代码,还可以用来运行书中的实例,包括SNMP、IPython、SQLAlchemy和许多其他工具。《Python在Unix和Linux系统管理中的应用》展示了Python语言如何提供一种更加高效的方式来处理Unix和Linux服务器管理工作中的各种任务。《Python在Unix和Linux系统管理中的应用(影印版)》的每一章都会提出一个特定的管理问题,例如并发或数据备份,然后通过实际的例子提供基于Python的解决方案。

更多计算机宝库...