Choose Right Programming Languages

一度,我只会一种程序设计语言,就是C++,而且直到现在,我也不认为自己会用C(因为真的没写过什么程序),只是知道一点语法而已。

现在,我会了一点Perl,又开始学习Emacs Lisp,并且打算再学习几种语言,多掌握几件趁手的兵器。程序设计语言就像是木匠工具箱里的工具,只有配合起来用才能做出像样的活计,只会用锤子的人也就能去钉钉子。Tour de Babel是一位前Amazon员工写的文章,谈了他对几种流行的程序设计语言的看法,颇具参考价值。值得注意的是,其中C++一节几乎全是负面评价,但我却感觉每句话都说在理上,下面这段话就引自这一节:

An Amazon engineer once described our code base as “a huge mountain of poop, the biggest mountain you’ve ever seen, and your job is to crawl into the very center of it, every time you need to fix something.”

另外,他对Perl的评价与我自己的感受很类似;而我也就是因为不喜欢Python那种使用空格的方式所以一直没有去学。现在看来,Ruby应该是我下一个准备学习的语言了。

说到选择合适的语言,不禁想起不久前看到的一篇文章——”Top Ten of Programming Advice to NOT follow“,其中第一条就是关于exception的,看了大呼过瘾。有一段时间特别想看一些开源软件的代码,尤其是C++写成的,但是看过几个之后发现,基本都会禁止使用exception(以及其它几个特性),甚至包括Firefox。当时感觉很郁闷,为什么要阉割一种语言,难道就没有一种语言恰好够用吗?如果没有,难道就不能发明出一个?

诚然,选择也要有选择的余地,能发明程序设计语言的毕竟是少数,只能在现有条件下做出最好的选择,几乎不会有人像Donald Knuth那样因为不喜欢人家的排版就自己写一套排版系统,这恐怕也是程序设计行业越来越平民化之后所面临的挑战——到底还有没有人愿意做精英。

Life cycle

重新找回工作的动力,很兴奋,不禁想起以前类似的经历。

我一共两次更换生活环境,第一次是上大学,从东北跑到杭州,那真是举目无亲啊;第二次是到上海工作,这次好点,有几个老同学在。两次“搬家”有些共同之处,都是要开始一段崭新却又陌生的生活,很憧憬,也有点紧张。在头一年,都是以极佳的精神状态,很快适应了新环境,新的竞争方式。感觉像出了笼的狮子,终于可以大展身手了。同时,也开阔了眼界,增长了见识,尤其感受到人上有人天外有天,比自己强的大有人在,自己也就算个中上,从大学第一年获得三等奖学金和工作第一年的绩效考评结果来看都是这样的。意识到这点有点沮丧的,但还是良性的。

在看待姚明和孙继海参加国外更高水平联赛的问题上,很多人都强调第二年是最关键的。而我,偏偏从第二年开始掉链子,第三年甚至还要“堕落”。现在想想,原因大概是这样的:经过第一年的新鲜与适应,那些因陌生而产生的憧憬逐渐被现实击破,以为获得自由的狮子碰壁多了才发现,笼子还是有的,只不过个头大点儿,于是开始郁闷、烦躁、四处发泄或逃避现实。不爽是正常的,但每次都要持续两年时间就太消极了,说明承受能力太差,而且不思进取,没甚追求。究其根本,还是经验太少,知识面太窄,因此寻不到出路。

幸运的是都还有挽回的机会。

当初考研时奋力一搏,不仅重拾自信,而且赢得了三年缓冲的时间,我一直认为,读研时发生的几件事对我一生的影响非常关键,拿学位还是次要的。首先,我有了第一台完全属于自己的电脑,第一次开始真正意义上的上网,缥缈水云间带来的冲击和紧迫感,是我刻苦学习C++最直接的原因和动力。如今,所谓的Web2.0在我身上产生的影响,几乎是同样重要的。其次,新东方的求学经历促使我开始思考自己的人生目标和追求,不再人云亦云,随波逐流。我始终认为,新东方所教授的人生哲学,远远比那些解题技巧有价值得多,可惜,似乎不是每个人都能理解和接受。他们的毅力可以和How To Do What You Love(中译文见“如何才能去做喜欢的事情”)中的女医生媲美,当然他们的经历也很可能像这个女医生一样成了现代版的南辕北辙。

工作后,则是受同事影响,看人家在同样的环境、甚至同样的感受下,仍然精神饱满地工作着,自己在诧异的同时,也开始认真地思索。终于,我想通了,抱怨改变不了任何事,只有实实在在的工作成果,才是推动组织变革的最有效的武器。由此,我很少再去绝望地推销自己的理想,而是努力写程序、提供解决方案,通过这种看得见模得着的方式使大家认识到,按照我提倡的方式(并使用我提供的程序或解决方案)工作,是有甜头的。没有人愿意接受变革,除非他们从中获益。

意识到问题是一回事,是否开始行动就是另外一回事了。上学时我就发现,怎么自己开始做点事情就那么难?现在知道那叫procrastination。为此,我买了很多励志的书,不停地刺激自己,同时每天坚持做一点,不用太多,但一定要做。我的C++就是这么学起来的。没有行动,一切都是空谈,工作这两年尤其严重,不是纸上谈兵,就是不停地抱怨,实实在在的事情却没做两件。这一次,我制定了具体的工作方针,并打印出来挂在面前时刻警醒自己

精诚所至,金石为开。上次拿到了Intel的Offer,这次又会收获什么呢?期待中…… 🙂