想要成为一名ThoughtWorks的UI Dev,应该具备怎么样的素质呢?

题目较冗长,分割线以下的内容可以略过 UI Dev 是从 @juntao大大的blog http://icodeit.org/ 学来的,貌似TW内部也…
关注者
99
被浏览
8,823

2 个回答

昨天晚上同事 @远远鱼 问我有没有知乎账号,然后就给了我这个问题的链接。知乎账号我虽然有,但是基本上没有用过。这是第一次在知乎上回答问题,问题本身还与我自己相关,挺好。

首先略微说一下UI Dev这个名字。在ThoughtWorks,其实并没有特别区分前端后端,通常做一个小的功能时,都是一对pair负责端到端交付的。拿用户登录(貌似大家都喜欢这个例子)来举例的话,端到端意味着从数据库,到ORM,到Controller,到JSON数据交换,到HTML/CSS/JS都是这一对pair来做,所以也就没有前端开发/后端开发的概念,大家什么都做。

后来随着项目的多样性,这种要求的人就不那么好找了。比如一个办公室的项目可能会涉及移动开发(iOS, Android),GIS,开源硬件,搜索引擎,DevOps,云平台,大数据等等,一个人/一对pair直接负责端到端就变得不现实了。以前端开发为例,使用文本编辑器来编辑HTML/CSS/JS的时代早已过去,构建脚本,自动化测试,性能优化,前后端分离等等已经被很多项目采用,前端开发也相对独立于后台的服务而存在了。这样,我们就有了UI Dev这样一个角色。

那么回到你的问题,UI Dev需要具备什么技能呢?我之前写过两个清单,你可以参考一下:

[轻量级Web开发](

轻量级Web开发

)

[前端开发者的技能列表](

前端开发者的技能列表

)

以我自己的经验来看,一个合格的前端开发,远远不止于编写语义化的HTML,熟悉各种CSS技巧,以及娴熟的JavaScript技能。命令行操作,HTTP服务器(反向代理,缓存)配置,精通一门脚本语言(Ruby,Python,JavaScript等等),编写自动化测试等技能都是前端开发者所必备的素养。

具体起见,让我们来假设开发一个简单应用:联系人管理。假设我们是从头来开发的,由于数据库还没有就绪,所以我们快速的创建了一个contacts.json,放在工程目录下。然后用

python -m SimpleHTTPServer 9999

启动一个HTTP服务器,这样就相当于有了后台。

然后开始创建index.html, style.css, app.js等文件,并使用

grunt watch

来监听文件变化,如果这些文件发生了变化,可以通过livereload来刷新浏览器,这样就无需手动刷新了。有了这些之后就可以在编辑器中开始代码编写了,随后每一次保存之后,在浏览器中都可以实时的看到应用的运行结果。

当我们的功能越来越复杂,性能出现了问题,这时候需要为HTTP响应设置超时信息,图片也做成了css sprite并最后放在了一台静态资源服务器上,CSS/JS资源也都在nginx上做了一个缓存。另外,在开发时为了方便阅读而分模块的CSS和JS也都被合并,精简到了单个文件中,这样可以减少请求。

在调试过程中,你可能会使用curl来测试后台的服务是否返回了正确格式的数据,用jq来查看/查找服务返回的数据中感兴趣的值。你可能会使用grep来查看本地日志,也可能用find来查找最近5分钟修改过的文件等等。

你也看到了,前端开发涉及很多东西。

好了,关于第二个问题`世界上最难面试的公司`。其实原话不是这样说的,ThoughtWorks肯定不会是世界上最难面试的公司。但是有一年(可能是2013年),她确实被评为了最难面试的“科技”公司,当时Google也只能屈居第二。(不过这个第一给候选人带来的困扰可能更大一些,所以现在我们也不提了)

最后,被你标注为`↓↓↓以下的内容并不重要,可以略过↓↓↓`的内容,我觉的才是最重要的。首先,只有在进步的/有希望进步的人才可能看到自己的不足,才能感觉到基础的薄弱。如果日常都充斥着“我很牛逼”,“我各个方面都比别人强”的这种态度,那反而危险了。

至于英语,应届生入职的还行,社招的大部分都比较弱(当然,有留学经历的除外),社招的同事之前都分散在国内企业中,没有说英语的要求,自然退化。但是有了环境之后,基本都可以快速拾起来,ThoughtWorks的各个办公室本来就有很多外籍同事,而且一般项目会有去海外出差的机会,有了这些环境,英语再学不好,那就只能怪自己不够努力了。

最重要的一段是你说的:

自己非常喜欢弄一些工具、框架类的东西,也对全栈的web开发很感兴趣,不过更加喜欢UI Dev这个名字,我觉得它最能表达我最喜欢并想做的事情。

我觉得不论ThoughtWorks在外人看来是什么样子的,在我自己看来,她就是一家充满了“对开发很感兴趣”的人组成的社区。

这个问题出现有一段时间了,我也一直在考虑如何来回答它。

俊涛已经说的很好了,正好,最近北京 Office 准备在5月末举办一次针对 UI Dev 的专项招聘活动,我作为以 UI Dev 的身份加入 ThoughtWorks 不久的新人来谈谈切身感受吧。

招聘过程

应该整个过程是很令人舒适、开心的。

在很多地方都能找到我们具体的面试流程:电话预热,代码作业,逻辑笔试,结对编程实践,技术以及文化面试等六个大的阶段,一般情况下,前两个在没有到达办公室之前完成,后面的阶段在办公室完成。最后四个阶段平均 1 小时。

  • 电话:「你想来 ThoughtWorks 当作家还是当码神」等家常便饭;
  • 代码:以代码说话,亮出你的剑!
  • 逻辑:对于聪明的你来说,很简单的谜语一样的几道小题;
  • 结对编程:我们会有小伙伴跟你一起,接着你的代码继续后一部分,可以近距离感受 ThoughtWorker 怎么写代码;
  • 技术:是时候分享你辉煌的成就和技术理想了;
  • 文化:如果你也自认为具有工程师文化,并崇尚自由,那这个过程将非常愉快。

工作体验

看起来 UI Dev 是一个有偏向的职位,但实际上它首先是 Developer,那么 UI Dev 同样会不可避免地从事很多服务器开发相关的工作,不过在 UI 方面的工作,肯定大部分都会由你来引导完成。

不必担心如果 ThoughtWorks 没有「纯前端」,就会摧毁你只想做个「纯前端」的愿望,因为在 ThoughtWorks 工作本身是一件轻松的事,在这种轻松的气氛下,你顺便了解了大量其他技术,还可以有更多空余的心情去学习更多东西,包括找一群人一起学习最新的技术(再也不怕拖延症了),分享你的经验(再也不怕别人不愿意听你分享犀利的见解了)。

来点干的?好吧,这里有最出色的硬软件设备,最有技术范的社区成员,有直接上手的各种项目……总之,就是有情怀,有逼格。

成长空间

不必多说了,ThoughtWorks 本身就是一个社区、校园般的工作体验。在这里,毫不夸张地说,由于各色项目很丰富,你接受到的技术广度是难以想象的;你身边的同事都聪明、热情而富有责任心;人与人之间的关系简单而直接,公司扁平化得让你不知道自己的上司是谁。

不管是希望横向发展为其他角色,还是纵向发展成更专业的专家,你都可以获得最好的条件。

对于一个技术人员来说,简直是天堂。

当然,上面的说法是我个人的感受,每个人也都可能有自己的感受,望求同存异。大家也可以质疑,兼听则明。

不过,对于一家公司来说,员工愿意说她好,说明她得民心,是好公司——如果你来了公司,你会亲自感受到更多的。至于不够好的方面,肯定也有。还是那句话,每个人有自己的感觉,如果你感觉到好,并以自己的行动让她更好,那么她就是更好的公司。