前辈之路(1) 刘鑫专访

lx

受访者:@刘鑫Mars

小记者:@龙星镖局

感谢你接受我爱计算机 的采访,这可是一个比较“直接”的采访之旅哈。现在开始我们的问题:

(1)请用简短的文字介绍下贵司的基本情况。

目前我是云游道的技术负责人。我们公司专注于出境旅游用户的互联网服务领域。特别是近半年开始专注发展我们的极简汇率APP和相关的汇率/换汇等服务。

(2)能否介绍下个人的从业简历。

这个比较复杂,我从2000年毕业,到现在已经有16年的工作经历,全写下来就过于冗长了。简单的说,我在北大青鸟之前,主要的两段工作经历,是我第一份工作,在北京的一年多,一直在从事跟各种数据报表相关的服务工作。然后是在广州数通,参与了星空极速项目和相关的一些小项目,以及一个网游项目的开发。再后来就是微博资料列出的那些,直到13年夏天,我参与组建了云游道团队,矮人工匠的项目其实在那个时候就搁置了。

(3) 你参与翻译过《Python Tutorial》,是不是对Python语言情有独钟?为什么Python如此吸引你?

大概是2001年底,我开始接触到Python。当时对于习惯了用IDE工作的我,Python是一个非常有吸引力的东西。那个时候互联网没有现在发达,学习到Python和相关的东西,对于我这样没有什么同行社交,起点又不高的程序员,是打开了一扇通往新世界的大门。后来慢慢的对它越来越喜欢,投入越来越多。2002年底的时候我来到广州,当时跟几位大学同学住在一起,还没有固定工作,于是趁着冬天那段时间翻译了 Python Tutorial,主要是为了自己学习的需要,也是希望能跟大家一起分享这个有意思的工具。当然现在学的东西多了,会感觉当初对这个技术有一些过高的期望,但是总的来说,这段学习经历对我非常的重要,是我在这个行业做到今天的关键的一段。很感谢当年的《程序员》杂志用几期连载推荐了这个编程语言。

最初我是一个Delphi/MSSQL程序员,曾经我每天要编写几百行T-SQL查询。到后来恰逢 .net 发布,我很快转到了这个平台。C Sharp 到现在仍是我非常喜欢的编程语言。而同时代的Java我非常的不喜欢。那个时候感觉Java笨拙,导致用它解决问题总是要额外写很多的代码。而国内的社区普遍的回避这个问题,过于热衷各种大的模式和工具。这个观点一直到Java8我才改变。到现在我认为Java8也算是很关键的进步。我在 github 上有一个叫 jparsec 的项目,是 Haskell parsec 库的 Java 版移植,有兴趣的朋友可以对比一下 normal (JDK 1.6)和 advance (JDK 1.8 )版本的 JParsec 代码,就会发现 Java 8 真的要现代很多,表达一些重要的形式,要更为简洁有力。

说到这个问题,我是个很糟糕的数学系毕业生,并不像大多数同行一样受过正规的计算机教育。我的计算机专业基础是比较差的。所以我到现在选择技术工具,特别是编程语言,一般都对其表达能力,或者说语法形式更为关注,性能问题因为不是我的特长,总是把它放在第二位,留给更专业的朋友解决。大概因为这一点,如果在不考虑实用的时候,我总是更喜欢 LISP 和 Haskell ,当然这两种体系是完全不同的。

我学 LISP 其实非常早。我有几个朋友是资深的 Emacs 专家,比如很多人都认识的小米元老韩祝鹏。受他们的影响,很早就开始学习 Emacs 。到现在已经超过十年。从开始学习使用、配置,到尝试自己用代码管理自己的 Emacs 环境,甚至编写和修改 mode ,在漫长的时间里,我跟 LISP 建立了很深的感情。它特有的内在简单和强有力的表达复杂性的能力,对于学过数学的人来说是非常有吸引力的。所以后来韩祝鹏为我们的团队引入新的技术体系的时候,我强烈要求使用 Clojure 。这是基于 Java 体系的一个 LISP 实现。我们可以使用 Clojure 享受 java 丰富的生态资源,和 LISP 的优美。这也是受朋友中几位 Clojure 专家的影响。特别是去年 InfoQ 上介绍 Clojure 语言的 Lorreta 老师,我们的团队现在可以建立起几乎全 Clojure 的服务端项目,要感谢她的帮助和指点。

学习Haskell,也是受到了韩祝鹏的影响。相对来说,我到现在还能说可以很好的驾驭 haskell ,也没有什么机会实践。同行们总开玩笑提到的 Real World Haskell ,其实是韩祝鹏的译作,当初我本想与他合作分担一些工作,但是那两个月我连续的生了几场重病,只好放弃了。现在在 github 上有一个开放的 Real World Haskell 翻译项目,也跟我没有关系。这是众多 Haskell 爱好者的共同工作。

虽然学的不好,但是在学习 Haskell 的过程中得到的知识,对我有非常重要的影响。包括对类型的理解,对我后来的项目、架构设计,编程语言和数学知识的学习,都有很重要的影响。从 Haskell 的 Parsec 工具库学到的组合子技术,是我解决复杂文本和信息流解析的最终手段。我是一个还算熟练的正则表达式用户(翻烂过一本大骆驼书的人,还是可以厚着脸皮吹这个牛吧),基本上如果我判断一个文本处理需求的复杂度,已经足够高,用正则表达式不够经济的时候,我就会用 Parsec 组合子来解决。为此我几乎为我使用的所有编程语言,都移植了至少一套 Parsec (使用过同行的一些版本,有些风格很不喜欢,有些明显是练习或炫技的作品,实用性不高)。

(4)已经创业三年多了,现在公司发展和当初预期有何不一样?

无论矮人工匠还是云游道,我们都经历了很多挫折,也有很多收获。实践一次创业,比完成一个软件项目的编写更为复杂。失败是常态,要有不厌其烦的耐心,和不要干蠢事走捷径的决心。

(5)对在校的计算机方向的同学学习上有何建议?

天上不掉馅饼,读书时逃掉的功课,将来都是要还债的。专业课要好好学,也要抬头看看行业发展,积极学习新技术。如果你觉得学习太辛苦了,那么往好处想想,将来走上社会自立,需要做到的一切,远比在校园里被人追着求着读书要艰难多了。

(6)从业以来,有没对你影响很大的人或者自己的伯乐,能否谈谈?

很多,十多年了,给过帮助和指导的师友太多太多了,一一感谢的话怕是要超篇幅。首先感谢好友韩祝鹏吧,我这些年学习的很多东西都是受他的影响,或者他推荐的。还要感谢博文视点的创始人周筠老师,多年来给予了太多的指导和教育。我这十多年的成长,也离不开其他众多老师和朋友们。我这个人起点低,缺点也很多,没有大家的包容和教导,走不到今天。

(7)近年来,互联网浪潮席卷大江南北,也造就了很多富翁。自己有没在择业方面有没过遗憾?对同行择业有没建议?

投机的机会天天有,也是难以预料的。但成功总是基于水面下的积累。首先做好自己,不要把时间用在羡慕别人的成功上。特别是对于技术工作者,自身的能力总是第一位的。谋事在人,成事在天。如果能力不够,天上掉馅饼也砸不到。追赶不上潮流大部分都是因为能力不够,所以想转身都比别人慢一步。

(8)移动互联网让人们可以从手机上方便地获取很多服务,但很多人也有了严重的手机依赖症,你对这个问题怎么看?

不是很大的事情,等增强现实技术(比如Hololens)成熟了,大家就不需要低头了……

(小记者:最后,留两个问题,希望刘兄可以谈谈自己感兴趣的话题)

那么我自己选两个问题吧:

(9) 一个是在技术爆炸的时代,如何解决学习问题?如何可以让自己不被淘汰?

应该说技术确实是学不完的,很难有有什么道路可以让我们轻松的躺着赚钱。对于技术人员,应该牢记一点,知识是立体的,基本上靠谱的技术总是能找到背后的关联和脉络。所以如果你觉得知识学不过来,很大的可能是学的不够深入。早打基础,不要怕麻烦,不要怕枯燥,有深度才能有广度。要让你的知识体系至少比你在应用的技能更大一层,才能游刃有余。

(10)最后这个答案,给它个问题并不容易。如果说我们要从现在开始提升自己,第一步应该学习的是什么?

我认为是表达能力,这里的表达能力不是说像地摊儿成功学那样让你每天对着镜子怒吼我能成功。而是说学会无歧义的,清晰正确的表达你要表达的东西。高德纳曾经说过,编程是文字工作。谢遐龄老师的《纯粹理性批判导读》也说过,哲学就是教人说话的学问。从中学就开始做的证明题,也是训练大家如何严谨清晰的推理和表达。要能够正确的通过书写和讨论传达自己的观点,就要先有清晰的思考,然后要有严谨的论述,有稳健的文笔。这是一切信息交流的基础,包括向计算机下达命令——使用编程语言,通过程序代码。

 

转载请注明:《前辈之路(1) 刘鑫专访 | 我爱计算机

Leave a Reply

Your email address will not be published. Required fields are marked *

− 2 = 4