在知乎看到几篇关于web前端开发的帖子,感觉不错,整体在这里。
Web 前端开发面临的挑战主要有哪些?
曹刘阳,盛大的web工程师
1) css和dom提供的接口都太low level了,而BOM提供的控件只有input、select、textarea这几种最基本的,稍复杂一点的UI效果,都要前端自己利用css和dom去组合创造。看到一个需求,脑子里第一步要想如何利用css、dom这些基本的零件组合成最终的这个效果,实现最终效果其实是一个“创造”的过程,比如说tabView,treeView,richEditor,colorPicker这种看起来常见的组件,其实在前端里都是没有现成可用的,需要自己去实现。
2) 前端语言的胶水性需求太强。css、dom、js是三种不同的技术,这也是前端知识系统中要掌握的最重要的三个基本功。server端编程当然也会需要不同方向的知识,比如php、sql等,但server端编程大部分时间只用专注在某一个知识点上,只要必要时粘一下其它语言。但前端不同,前端的效果是通过css、dom和js三者配合起来最终呈现出来的,脱了任何一个技术都寸步难行,时刻要同时考虑多个方向的知识点。这么说吧,server端编程像是一个单线程,即使有技术交差,也是串行的,而前端编程像是开了三个线程同时在跑,复杂度是成倍增长的。
3)css+dom+js的组合实在太强大了,同一个效果可以有多种完全不同的实现方式,每一种实现方式都会有不同的开发难度、扩展性、可维护性。解决方案太多,看到一个效果首先会先想到如何用dom和css里那些low level的接口实现他,这是一个“创造”的过程,这时脑子里可能冒出好多种不同的实现方法,“创造”完了之后还要“比较”,权衡各种解决方案的优劣,纠结一阵之后,才能选出最适合的方案。当然,并非前端都是完美主义,一定要选一个最好的方式出来,而是因为前端是GUI编程,直接面向用户,是最直接的产品呈现的部分,是门面了。正因为如此,所以前端也是最容易被反复修改的部分。反复“修改”有多可怕,是个程序员都懂的,如果可维护性不好,那简直是恶梦。所以前端不得不重视可维护性,不重视可维护性直接等于自虐。
4)浏览器兼容性。浏览器各类非常多,ie、firefox、chrome、opera、还有众多的ie加壳浏览器,搜狗傲游360什么的,再加上这些浏览器的移动终端版本。。。需要有了web标准,前端的知识大部分是通用于各个浏览器,但还是会有历史遗留问题,不同的浏览器有不同的问题特别是市场占有率最高的ie系,就ie自己市面上就有6、7、8、9这4个版本,4个版本之间各有各的问题。如果不积累点经验,面对疑难杂症那是一头雾水。
张克军,豆瓣前端工程师
第一大挑战还是兼容性。虽然微软已经决定将ie6安乐死,ie9/10看起来相当标准。向后兼容似乎轻松了,但向前兼容又开始越来越让人头疼了。打算搞一个web app,你会发现android上的webkit是多么混乱。在桌面浏览器上总是有css hack可以摆平,但在mobile上只能考虑退化方案。从兼容浏览器(外加套壳的浏览器)到兼容设备,实际上兼容性变得更复杂了。
第二大挑战是交互的复杂度。和目前UI/交互的要求相比浏览器引擎给我们接囗的确太低级了。于是今年前端技术的热门话题是各种javascript, css的预处理器、各种mvc框架、和微框架的讨论。
第三大挑战是代码可维护性。复杂度的提升直接影响代码的维护性。JS/CSS/HTML代码生命周期越来越长,也就越来越需要从代码质量、架构和工具上保证它们的可维护性。代码的历史问题是永远的痛点。
第四大挑战是性能。
第五大挑战是个人成长。
一个web前端开发程序员的理想的工作是什么样子滴?
柴春燕,前端开发工程师
Web前端工程师的职业生涯,我觉得可以分为三步,初级前端开发工程师- > 资深前端工程师- > 前端架构师。每种职责都有其不同的角色和分工。
前端开发工程师(或者说“网页制作”、“网页制作工程师”、“前端制作工程师”、“网站重构工程师”),这样的一个职位的主要职责是与交互设计师、视觉设计师协作,根据设计图用HTML和CSS完成页面制作。同时,在此基础之上,对完成的页面进行维护和对网站前端性能做相应的优化。
资深前端开发工程师,相比较“前端开发工程师”而言,更加资深一些,当然其工作的职责也会相应的更加大一些。一般而言,资深前端开发工程师需要使用JavaScript或者ActionScript来编写和封装具有良好性能的前端交互组件,同时还要对Web项目的前端实现方案提供专业指导和监督并在日常工作之中对新人及相关开发人员进行前端技能的培训和指导。另外,还要跟踪研究前端技术,设计并实施全网前端优化。
对于前端架构师,更多意义上说像是一个管理的岗位,但是其职责要求却不仅只是管理。前端架构师需要带领组员实现全网的前端框架和优化,还要创建前端的相应标准和规范,并通过孜孜不倦的布道来完善并推广和应用自己的标准和框架。同时,还要站在全局的角色为整个网站的信息架构和技术选型提供专业意见和方案。
淘宝 UED 前端、腾讯脚本开发、豆瓣前端开发,应该如何在这几个工作之间选择?
张克军,豆瓣前端工程师
其实对于刚入行的人来说,全面的锻炼很重要,历练几年后再进大公司比较专的做某件事,这样的成长历程比较好。现在的创业风气纯属阴谋,不要把宝贵年华扔在不靠谱的事上。毕业后至少5,6年踏踏实实的研习技术。“在 JS 方面,能成为专家级人物。”的目标恕我直言,有些狭隘。前端技术不等于JS啊。“2-3年内”成为一名非常非常专业的前端工程师就已经算捧上“铁饭碗”了(镀金慢慢来)。
豆瓣对前端工程师的要求算比较全面,反过来也意味着在开发中会经受全面的技术挑战。挑战你对模板的规划能力,代码的设计能力,对复杂JS项目的驾驭力,还有前端技术以外的.....专钻一门技术,不符合前端的特点啊。
如果你是一个自我驱动型的人这里会相当投味囗,因为没人会催你干什么,但你的同事会不断干出出彩的事(比较有压力)。
如果把自己的职业生涯放大到20年,就更清楚怎么选择了。
拔赤,Jayli
互联网企业基本上都一个共同的特点,就是变化快,比如有一个突发事件要求你半小时内上一个专题,这是最司空见惯的了,所以在大部分互联网企业,流程/规范往往让步于敏捷/Quick&Dirty。这是行业特点,不用太在意,这本身没什么问题,没必要上升到技术驱动/技术氛围/职业发展这等理论高度。
很多人是被琐碎的日常小事搞的焦头烂额、无暇它顾,却归咎于团队氛围,这自然有失偏颇,时间管理本应是一个职业人必备的职业技能,我在淘宝看到的是,工程师在技术上通常提升的很快,但却亟需与之匹配的职业技能、沟通技巧、表达能力。所以,如果你满腹经纶、学富五车,却没办法说服一个小小的运营来把你牛逼的代码放入产品,那么...
所以,互联网人才流动比其他行业猛的多,原因也在此,工程师善于攻克技术难题,却懒得思考技术的商业价值,更喜欢没人打扰的写代码,却懒得和技术白痴多说一句废话,相信我,天底下的工程师都是一个鸟样,以为技术能搞定一切,拿着自认为牛逼的技术才能和人比个高低,这就和刚毕业时和同学们比谁的offer工资高一样幼稚。
我没有在其他公司呆过,我只说说淘宝,淘宝充满了变化,而我认为这正是淘宝独具魅力的地方,因为大家都明白一个最简单的道理,变化意味着机会和挑战,也意味这巨大的成长空间,看看从淘宝走出去的人就知道了。在淘宝你有机会参加赛马、你还能申请技术假,甚至被鼓励申请专利、有机会作为技术布道讲师、还能随时成立虚拟小组纠集同党干自己感兴趣的事情,还有机会参加系统的前端技术培训,只要你能做到很好的时间管理,要求高吗?
当然,我身在北京,我只能说我所看到的真实情况。另外,你还需要搞清楚,公司有运作型和项目型,你要了解你要作的是维护一个已成型的产品,作修修补补的工作呢,还是加入一个有项目做的团队呢?如果是维护,的确有更多时间钻研技术,就像Yahoo那帮技术大牛们得有多闲才能写出YUI此类庞然大物啊,后来那些牛人不也天各一方了吗。好吧,如果你清闲的有大把时间去研究技术,不仅你身上没有绩效产出,也说明业务在走下坡路了。显然淘宝的节奏更快、压力更大,玉伯、小马、圆心这些牛人正是背着压力走过了这些年,这个过程更值得人思考,而不是他们技术上有多牛。要知道他们在和你一样年龄的时候就做到了当时的行业内技术领先。
所以我不好说什么样的环境是适合你的,是你所喜欢的,我只能告诉你互联网公司的真相,我在慢节奏的雅虎呆过,也在快节奏的淘宝混过,毕业块四年时间了,我所看到的人往高处走,快节奏的公司成长更快,但后续的突破瓶颈则靠的是自己勤勉好学和持之以恒的品质,以及对专业技能和职业技能的权衡,前者决定了你成长有多快,后者决定了你能走多远,所有人都是这样。
好吧,说的有点消极,说点积极的,人的技术追求应当始终如一,就像玉伯,这种技术气质我想应该是锻炼出来的,而不是与生具来的,对于新人来讲,缺少的不是所谓的“技术气质”,而是这种锻炼。这种气质属于你个人,不要将自己的命运系于产品,你能作一款牛逼的产品,换个人照样能做出来,而实现产品的过程、收获的编程体会、历练出的码感以及你所独有的工程师气质,才是唯一不可替代的。
赵小马,F2E@TaobaoUED
1. 淘宝UED的愿景是“做地球上最强的UED”,重点是“做”字,这个字千万不要落下:)
2. 了解一个团队,结合公司的业务与背景,以及发展趋势,会看得更清楚。淘宝有很多问题,淘宝UED也有很多问题,但让我坚持留在这个团队里的原因,是我能感受到这个公司一直充满着改变的勇气,并敢于实践。亲身经历甚至引导这些改变和实践,给人带来的成长,有时候甚至超越技术成长。
3. 真正的成长,不是你参与多少项目,学会多少语言,应用多少框架。而是你在用技术解决业务问题后沉淀下来的属于你的方法论,这些方法论通常不会过期,还会帮助你触类旁通的解决各种问题。三家公司都存在着各种复杂的业务问题,充满着机会。不管你选择哪家公司,坦诚面对伙伴,敢于面对挑战,勇于突破,乐于分享,总结出自己的方法论...任何一家健康的公司都会向你敞开怀抱。
4. 祝福很多离开团队的同事,曾经共同奋斗过,都是缘分。
玉伯,因上努力,果上随缘。
1. 我的确离开淘宝 UED 了,但不是最近的事,而是一年前就离开了。当时离开淘宝 UED,是因为想做产品,想实现自己内心的产品梦。不过很不幸,没成(悲剧的湖畔项目)。这算是一段内部创业的经历,很短暂只有几个月,但收获蛮多。后来就去了开发部门,和同事一起做了些页面优化项目和前端运维系统,思考和沉淀的一段时期,很感谢与我一路同行的几位同事(小虎、文河、决尘、云翼、小凡等)。
2. 关注我微博的,会知道我上周离开淘宝,入职支付宝了。这是事实,但跟淘宝 UED 没关系,是因为我自己的技术梦。我很想将自己在前端方面的思考和想法落地得更实在更具体些。在比较淘宝 UED、支付宝前端团队、还有天猫、一淘等前端团队后,发现支付宝前端团队不少项目规划和大局策略与我的思路最为契合。我想做的事情,不是一个人可以单枪匹马去做的,如果能有一个强大的团队协同来做,会更容易达成。去支付宝前端团队的理由,就这么简单:因为更能做成我想做的事。
3. 针对你的问题,很抱歉我无法给出具体建议。去哪个团队,最关键取决于你自己想要什么,你追求什么,你的梦是什么。当你想清楚自己想要什么的时候,选择去哪个团队的标准,自然而然地就会呈现出来。
4. 想清楚自己想要什么,找到符合自己实际情况的选择标准后,直接联系各个团队去了解情况就好。比如你可以直接发邮件或打电话给淘宝 UED 前端团队的负责人圆心,我相信圆心能给你详细地介绍相关情况,辅助你做出选择。同样的方式,去联系腾讯和豆瓣的负责人就好。也热烈欢迎考虑下支付宝前端团队,打电话或发邮件给么么茶或给我就好,呵呵。
5. 最后,想说一点:任何一个团队,永远不会像你想象中的那么好,也不会如你所听说的那么糟。一个团队的好坏,往往在你自己的心中。想好自己想要什么,并为之去努力去改变,这远比选择外界环境更重要。
sofish,我也写后端的,偶尔
作为一个刚经历了换工作的前端,一个公司,我会问自己3个这样的问题:
1. 团队是不是我愿意呆的?
2. 做的产品是不是我愿意花心思的?
3. 在能胜任的情况下,他们是否看重我的要求,比如工资?
下面是一些自己的见解和方法,仅供参考。
1. 不是应届生,有工作经验的人都已经在某个团队呆过,什么样的团队是你想要的,什么想的人是和你工作方式最契合的,什么样的环境下让你不仅在其位谋得其职,还有更多的额外的进步。
至于如何聊出这些,就看你了。我的方法是:尝试和他们聊聊,工程师的谈话可以知道他们是否因为在这个团队中而感到骄傲?这里的人是否愿意/乐于分享?因为我们都是搞技术的,这群人对于技术的追求符不符合你的追求?等。
2. 一直在想,为什么现在有的人愿意花1w块让我做一个博客主题,而我的兴致并不是特别高;而大学前端刚入门的时候,却能通宵免费给别人提供 wordpress 主题?并且尽量把各种功能做到自己能达到的完美。其实这就是所谓的激情。如果你做的工作是你愿意的,那你会忽略掉很多外在的因素,而做得很开心。并且,最终你会在这方面成为专家。所以如果这个团队做的产品是你喜欢的,会去用,会去体验,会去深入的,选择之。
方法:比如我一直有个愿望是做些事,让人类的生活更方便,所以我会考虑这样的团队。
3. 我们努力地做好一切,不为别的,只为更好的生活。你所要的生活可能是更多的权力,更多的名望,更多的金钱,而这些用正当的手段去获得都是值得尊敬的。那么,你是这个团队所需求的人,她是否也能满足你?比如工资,或者你想做 HTML5相当的工作他们是不是能提供或者有机会?相互满足是很重要的,要知道你选择这份工作可能又是几年的事(我爸爸常告诉我,不要轻易离职,只有当你呆足够久了才可能知道是这个团队不适合你,还是你没有适应这个团队),不是一件短期的事,所以要别做太短的打算。
方法:告诉他们你要的,把真实的期望告诉他们。看表现。
当然,还有工作的地点。这个我很在意,不过,看你的描述,应该觉得这个不是大问题。然后,好吧,这些问题的答案,我当成了换新工作的原则。辞职,离开支付宝,得到很多机会。我问了自己最多的是这3个问题。这些问题得出的答案,让我选择了一个喜欢的团队。很快,我将会去工作。