一位匠人的中州韵——专访Rime输入法作者佛振

摘自 http://www.ituring.com.cn/article/118072

对一个匠人来说,创作一件有情调的作品,一定是出于对精湛技艺的追求。如果仅仅是为了现实目的,固然可以写出高质量的软件,代码本身却容易缺乏灵 气。代码的艺术和美,与文学略有共通之处,在于强大的表现力。缺乏灵气的代码只顾平铺直叙,是没有生命力的机械;好的代码越是简单明了,越是做得到更多事 情。

编程的乐趣在于享受这份创造的快感:他不只是在敲代码,而是在开动脑筋调教程序,增益其所不能。甚至会有一刻在心中大呼:终于不再像菜鸟一样写程序了!谁愿做只会搬砖的码农?定要像设计师那样思考,才称得上有手艺的编码匠。

二〇〇八年我辞去搬砖的工作,立志练好技术,将来上Google、Facebook谋职,做个有技巧的码农。修炼的方式,就是完成一个有挑战、来源于真实需求的软件作品。

 

对前端工程师很好的评价和未来展望:

http://www.ituring.com.cn/article/133104

 

节选:

于Web应用和原生应用争论,你有什么看法?

现在整个前端圈子里面有一小撮人,有点像原教旨主义者,他就觉得Web是一个神圣不可侵犯的既有体系,“客户端已死,Web永生”,他们觉得在移动 设备上面,Web终有一天会赶超原生应用。但我觉得这不是目的,Web只是一个技术手段,为什么一定要在移动设备上赶超原生技术呢?

所有的工程师还是首先应该把用户放在第一位,你要解决的是用户的问题,而不是用一个特定的技术手段去解决用户的问题。我见过很多人,他们到处去跟人 争辩,说Web现在发展得很快,一定会在移动设备上大有所为的。但是没有办法回避的是,Web确实性能没有原生应用好。也有人反过来说,过几年随着硬件的 发展,手机CPU变得更快,内存更大,那Web技术可能就会变得更快了,但是他们忽略了一点,Web变得更快的同时,原生技术也更快了。

问:为什么Web前端工程师会感觉转行很困难呢?

我遇到过很多人以前可能是做Windows客户端开发或者是做Server端开发的,做Windows的可能转Server了,做Server的可 能转去做Andriod,或者转去做iOS,并不会有特别大的困难,因为他们的基础知识是没有问题的,就像我刚刚说的数据结构、操作系统原理这些知识体系 的基础。但为什么Web前端工程师现在会觉得转行很困难呢?原因在这:他们的基础知识有缺口。

我们现在的实践经验就是:如果一个很有经验的Web前端工程师去做Andriod或者iOS,可能在用户体验这块的感觉会比较强,但技术上并没有任 何优势,因为Web平台的复杂度比iOS和Andriod低得多。很多公司招Windows客户端工程师的用人标准是非五年经验的我不招,为什么?因为 Windows平台复杂度很高。如果你C++代码写得再好,但是没有做过Windows平台开发,没有那三五年的时间去摸索Windows平台的API和 特性,你是不可能做好Windows客户端开发的。Web前端也是客户端开发的一种,只不过是限制在浏览器这个技术平台里面,而浏览器这个平台的复杂度是 远低于Andriod和iOS的。这就是为什么很多前端工程师会觉得自己转岗很困难的原因,本质上还是因为基础知识的缺口。而反过来Andriod和 iOS的工程师转Web,并不会觉得很困难,他可能不知道浏览器有什么API,但是不可能连Javascript这个语言都学不会。

Web技术最主要的编程范式是声明式,所谓声明式,就是我写个HTML的标记,声明我要什么,但是这个东西在浏览器里怎么渲染,我控制不了。另外一 个比较典型的声明式范式的语言是SQL,我只描述我要什么,但是后面会有个很复杂的体系来按照我的描述去实现。它的好处是你很容易抽象你的需求,学习成本 会比较低,但是代价就是牺牲了运行时的效率。如果你开发又简单,运行时又快,那原生技术就没有存在的必要了。原生技术不是声明式的,比如界面是怎么渲染 的,你要用代码去控制渲染的过程,你不能简单地说我要一个表格,它就给你个表格。而Web是这样的,Web说我要一个表格,浏览器就给它个表格,你再告诉 浏览器说我要一个5像素的阴影,那浏览器就给你一个5像素的阴影,前端工程师根本控制不了这5像素的阴影怎么画上去,或者说只能在很小的范围内控制。这其 实和时间换空间,空间换时间这个简单的哲学原理很相似,不可能两者兼得。

问:对你来说一个优秀的前端工程师需要具备什么样的技能?或者什么样的知识结构?

前端工程师应该首先是个工程师。现在很多前端工程师,包括我面试的,可能会在基础知识上有所欠缺,基础的数据结构、基础的算法、操作系统原理,这些 对一个软件工程师来讲非常基础的内容还是要知道的。如果不知道的话,你可能会成长得很快,但是很容易进入到一个瓶颈,并且这个瓶颈是无法突破的,因为你的 知识结构是有残缺的。

其次是个人素质,比如说对细节的注意力。前端工程师做的东西,无论是自己实现的,还是按照设计师的设计稿实现的,差1像素就是差。那这1像素你能不 能看得出来,并且把它纠正过来,这其实很多情况下取决于个人的素质和对细节的注意力和追求。因为我也接触过很多前端工程师,他觉得差1像素就差吧,但是 UI质量可能差别就在这一像素上,你差了这1像素,就不是100分了。

第三部分是你要对用户体验有一些基本的了解和判断,什么样的东西体验是好的,什么样的东西是体验流畅的,怎样能够让用户更有效地去接受你想传达的信息。一些交互设计上的最佳实践是一定要知道的,这不完全是设计师的事,前端工程师也要参与进来。

问:你在面试的时候,除了这些技能之外,你还看重别的什么吗?

其实我个人会比较看重一个人的视野。很多部门说我也看重视野,但是前端工程师应该尤其看重,因为前端技术更新迭代太快了,Web技术本身就非常不稳 定,你今天会的东西,明天睡一觉可能就已经发生变化了。前端工程师如果视野不够开阔,你所了解的东西广度不够的话,就很难跟得上这种进步速度。

另外,前端是最接近用户的这一端,你不仅要能从工程的角度,从站在你背后的产品设计师、后端工程师的角度去跟用户交流,同时你要能站在用户的角度, 反向地跟你后面的这些设计师和后端工程师交流。比如后端工程师给我一个API,我作为使用者来说必须能判断什么是好用的,我才能把后端想要传达的信息有效 地传达给用户,再把用户的交互反馈给系统。前端工程师要站在两个角度去沟通,要能够从非常不一样的角度去看待同一件事情。

 

(一千个读者一千个哈姆雷特 也许吧 总要有些坚持的)

很多时候如果你真的潜心在工作里面,什么也不管,可能过了一段时间后你会发现你比自己想象的走得更远。在互联网这个外部环境变化比较快的行业里面,超过三 年的规划我觉得意义都不大,因为一年以后可能整个外部环境就完全不一样了。我自己现在可能会做一些团队管理,包括产品的研发管理上面的事情,这也是我两三 年前完全想不到的。以前我觉得自己会一直做工程师,前端做不了,我会去做别的,但现在看来,“做事”对我来讲可能更重要,技术只是一个手段,是支撑之一, 还有其他的东西需要保障。

posted @ 2015-07-30 14:18  cast1e  阅读(237)  评论(0编辑  收藏  举报