周五, 2010年8月13号, 作者: anutron
小编: 这篇文章写于2010年作者工作在Cloudera期间,当时node.js还没有流行,很多人还瞧不上javascript这门简陋的脚本,文章提出应 该重视JavaScript,并提出成为一名靠谱前端工程应具备哪些能力。虽然年代似乎已经有些遥远,但文中的一些观点但现在仍然适用。
当我尝试为Cloudera招一个JavaScript程序员时,我发现这项任务相当艰巨。找到一名真正理解JavaScript的人非常困难。不 过,这也证明了一件非常简单的事情,是时侯去研究JavaScript,并成为这个领域的专家了。过去的几个月,我发现了一些天才JS程序员并尝试去录用 他们。显然他们有非常多的选择。他们被各种公司的Offer困扰着。作为一个想招他们进来的人,这让我想起了第一次互联网泡沫时侯的一些事。(我承诺给其 中一位侯选人一辆凯迪拉克,但最终没有打动他)。最后他进入了另一家初创型公司。
比较关键的一点是:作为一名JavaScript专家并不能只知道JavaScript. 如果你想专为一名靠谱的前端工程师 ,你需要在更多方面做得更好一点, 可能这些都没有写在JD里面,至少那些要求表现得没有JS那样突出。有些东西你只需要了解一下,但另外一些你需要精通(显然你需要非常精通JS,如果你想 成为一名真正的专家)。 其实,我只是一个普通人,我有博客,其他方面都跟一般人体差不多,但当我把跟HR说出我的要求时,HR告诉我“这个人根本不存在,你描述的是一个超人” 我又告诉他这是我每天都在干的。 他又坚持说“你真是大神一样的人”
最后能称上JavaScript专家的人,终究需要一些什么技术,每天究竟需要做一些什么事,怎么判断哪些是天才,哪些是菜鸟,哪些是一般人,这是我列的一张清单:
1. 你需要知道HTML, 你需要非常精通它。你需要知道 document types的作用和效果。 你需要知道即使你没有写TBODY,浏览器也会自动将他补上。你需要关注浏览器每一次升级所做的变动。学习这些东西,至少在我这儿你得这样。在你工作的时侯花点时间去研究下。
2. 你需要了解CSS, 这样你才不至于后悔。我工作期间碰到的最多的问题就是跨浏览器的CSS兼容问题。一段同样的样式在不同浏览器中显示是不一样的。你添加了一个负的 margin-top值去实现排版,猜猜怎么了? 用户永远也点不到这个东西了,尽管你加了一个z-index,尽管你可以看见这个该死的东西。 或者你加了一组可以自动适应的CSS代码,但你要祈祷你的老板没有在IE里去看你的网页。最重要的一点,你要了解CSS,这是最有价值的一项技术。你不需 要非常精通,但至少能和草图做得一模一样,否则其他的事就不用提了。
3. 你需要了解浏览器,你需要明白在IE浏览器中,如果你把 “” 放到DIV中,IE不会把它转换为DOM元素。但放到header里就可以,因为这东西是只读的。你需要明白在Array数组和Object最后加个逗号 会让IE出错。你需要明白IE里iframes里的元素会有偏移问题。而且并不是只有IE会出问题,Firefox在清除浮动时也会出问题,Chrome 里没事。你需要了解最新的webkit那些惊人的特性在手机和safari上面不一定有。
4. 我提过JavaScript吗?我们需要了解JavaScript是怎样工作的,你需要知道传入方法 (function)的参数(arguments)对象是有长度的,而且是可以枚举的, 但它绝不是数组对象,更进一步,你需要知道如何将他转换为数组。你需要知道prototype的工作机制,并且知道在不借助框架的情况下如何使用它,并且 知道它的作用和优势是什么。你需要知道垃圾回收(garbage collect)什么时侯起作用,这点很重要,还有它什么时侯不工作。你需要非常善长抽象(abstraction)。你需要非常善于为你自己和别人设计 API。你需要了解怎样测试和管理你的代码。
5. 你需要有像样的设计能力(design): 信息流, 图像设计, 用户体验设计, 代码设计。 你需要能向用户, 客户, 陌生人, 专家(随便什么人)提出正确的问题并有能力去解决他们的问题。不仅是讲出你的想法,你还要想办法去呈现给他们。你需要能操作Illustrator快速地 把各种框架草图(wireframes)拼出一个方案来,然后你可以到PhotShop中(这个你需要熟练掌握)把设计图画出来(visual style)。你不需要成为世界上最好的设计师,我当然也不是。但你要有能力告诉他们什么是好的,什么是坏,什么是杰出的设计。如果你能管理好你自己好的 设计,你就牛了。
6. 你需要对服务器端非常自信。其实你并不是每天都只是写写JavaScript。大多数前端工作都只需要你 花一半的时间来写JavaScript,另外一些时间你需要处理一些其它相关语言的代码. Python, Ruby, Java, PHP.. 如果你只会一种语言,那根本不值一提。如果你只会JavaScript和PHP, 你马上会有一些需要用到其他语言的任务(其实这是一个很好学习新事物的机会)。应该会用一种框架,但是只知道一种的话也不算真正的了解 JavaScript.
7. 然后还有许多其他的东西你需要掌握。你需要了解Git。Git很牛,我知道你经常听别人这样说,如果你发 现一个保守的人拒绝去学新的知识扩展自己,你需要让他明白他的错误。你需要知道一些shell脚本。在没有记事本,TextMate或其他编辑器的情况 下,你需要能够打开VI或者Emacs去修改一个配置文件(conf)。你需要知道怎么去编绎一些东西,怎么样去截取一个日志文件,解压一个压缩包 (tarball),加密一些东西,开启并配置服务。你需要有能力去关掉(kill)进程并跟踪调试一个堆栈。
我甚至算不上一个熟悉敏捷开发流程,参与过开源软件项目或发布新版本的程序员,不过如果你认为你能够匹配我所列出的7条中的5条,或者全部匹配。那么,恭喜你,你就是传说中的大神。
那么你成为大神后你会得到什么?你怎么知道多年处理那些乏味的IE6的BUG是值得的?好吧,你得到的是,你会每周都收到HR的邮件和电话。(这其 实并不稀奇,他们就像懂你的销售)。如果你想换工作的时侯,你甚至什么都不用做,告诉一小搓朋友或者发到你的twitter上,然后很多扇门就在你面前打 开了。你会有些新朋友,他们希望你加入他们的事业。当你加入时你会成为传说中的元老。你会得到股票,并设计一款产品的最初版本。你会得到一辆1967年的 凯迪拉克作为签约的报酬。在公司刚起步时我曾经诱惑过这样的家伙。大神是一名还不存在的产品的前端工程师。他指出一两年后这东西值很多美元,然后多年以 后,他可以告诉别人,“这是我做的”。现在已经有这样的一些人了,像已经有无数人使用的Twitter, Facebook, Gamil和Google Maps,像Iphone的界面,Github, YouTube,肯定有人说,“这是我做的”。
这个人可能就是你。