行者无疆 始于足下 - 行走,思考,在路上

2012,静水深流

2012是沉淀与积累的一年。

这一年我24周岁,龙腾虎跃,本命之年,自离家求学已是第八个年头。这一年以一场华丽的旅行为序,以一次突如其来的辞职开场1,最后又以一场突如其来的家庭事故结束。这一年,宠辱不惊,去留无意,浪漫主义与现实主义并存。北大赋闲的半年逍遥自在,工作奋斗的半年长进充实。

这一年我戒了微博,冷了QQ,并且在有意无意地远离各种SNS。就在这一年的沉寂中,我已经和曾经天马行空般的生活渐行渐远。”要么读书,要么旅行,身体和心灵,总要有一个在路上“,这么多年以来,我一直身体力行地践行着这句话。从唐山焦躁的夏,到青海湖凛冽的风,到藏边青红的天,到西子湖畔金秋十月的桂花香,再到北京灰蒙蒙的天空,我的身体和心灵,不曾有半刻停歇。读与行就是我的DNA双螺旋,”行走,思考,在路上“或许会成为我一生的写照。

这一年我开始更加冷静地审视旅行,并把大部分精力投入到了阅读当中。让我忍不住欣喜的是这一年大概是我有生以来阅读状态最好的一年。读技术书籍常常能读出融会贯通的感觉,读人文书也偶尔能读得气喘吁吁,或喜或悲,甚至泪流满面。根据豆瓣上的统计,这一年我大概总共读了60+的书籍,如果算上读了一半而未收尾的书籍,大概能有70以上了。前半年脱产的时候平均每天的阅读时间大概是10个小时,后半年工作后也基本能保证每天不少于3个小时的阅读时间。当然,作为刚刚走上社会的一枚技工,阅读上还是以专业的书籍为主。这一年我技术上的主要关注点是编程语言,我开始形成跨语言的思考能力和学习能力,在学习了基本的Lisp知识和函数式编程语言的基础后,我开始更加深刻的理解以前许多不曾理解的编程技术和概念。具体而言,我在C++ 98上有了上有了很大的自信,这种自信使我在找工作时能够应付绝大多数的C++面试,从STL到底层的一些汇编知识均有涉猎;Lisp方面我基本上学会了除了Macro外的Lisp基础知识,这点知识让我打下了跨语言思维最重要的基础;Python作为我后半年的工作语言,在Python标准库、TDD开发和代码技巧方面都有了长足的进步,让我的Python能力由脚本级进化到了工程级;我也看了三本Ruby的书,包括《Programming Ruby》,《The Ruby Programming Language》和《松本行弘的程序世界》,凭借Lisp和Python的基础,我在一周内就基本熟悉了Ruby语言的精华所在,虽然到现在还没有机会写一些实用的程序。技术之外,我也开始尝试去认真阅读一些人文书籍2。精彩的书籍包括但不限于林达的《近距离看美国》系列,齐邦媛的《巨流河》,柴静的《看见》,以及史铁生先生的书。夜幕窗前淡淡的灯光之下,一个人的情感随着书上的文字跳跃起伏,这种感觉很奇妙。我也开始尝试认真的写作,第一次发现,“认真的写作有如雕刻”,因此写到后来不敢再轻易地提笔,光顾着自己阅读,孤单狂欢去了。来年,我希望自己能够在Lisp的路上更进一步,精通Python,完整的掌握JavaScript并争取掌握一门Web开发框架,可能的话,再去学习一门新的编程语言。我希望能够读完史铁生全集和王小波全集。

这一年我的工作开始走向正轨。远离的大公司的扯皮和政治后,我开始真正自我主导做一些实际的事情。我熟练的掌握了git,从而使我的工作效率进一步提升;五笔输入法的学习也初见成色,再咬牙坚持半年应该可以作为日常输入法使用;看完了Emacs Manual和部分Elisp Manual,Emacs用起来更加得心应手。我和公司一荷兰小伙共同倡导了新的代码开发流程(TDD+Git+Review),或多或少地提升了工作产出和代码质量。OpenStack方面,我也开始逐渐理解其整体架构,11、12两个月写了大约5000+的代码,高峰的时候3天左右就能完成一个实用的feature,从前端一直写到DB再加上完整的单元测试,虽然由于公司限制这些代码暂时无法回馈社区3。我开始逐渐向一个Full-Stack Programmer发展,从前端写到DB,虽然这些代码有很多是在不了解细节的情况下照葫芦画瓢写出来的。对我而言,OpenStack是一个难得的优秀开源项目,里面有太多值得学习的东西,即便刚开始只能模仿,也受益匪浅。来年,我希望自己在网络编程和并行编程方面打好基础,在此基础上更加深刻的理解OpenStack核心算法和技术原理,包括但不限于RabbitMQ,RPC,调度算法,安全等。开源方面,今年除了几个不值一提的patch外,几乎毫无建树,虽然自己七七八八的也写了五六万行代码吧。来年希望在这方面能够有所突破。

这一年,生活上依旧是一穷二白月光族,七月份甚至一度陷入了短暂的经济危机,虽然嘴上要强但还是靠了家里的一点救助勉强度过了经济危机,到了年底总算有所缓解。除了买书花了4000大洋,本年度其余花销很少,经济危机大概还是自己理财不当吧。来年希望有所改善,这样自己说话办事能够更有些底气。

这一年没有大规模的旅行颠簸,甚至小打小闹也不多,偶尔的几次故宫、景山、北海、植物园,也是被迫的。总而言之言而总之就是这一年我堕落成了一个彻底的宅男,一心一意地想着躲进小楼成一统,沉浸在自己的书香世界中,树欲静,管它风到底止不止呢。浅层次的旅行已经不能带给我任何精神上的新知,与其花时间精力美化自己的“旅历”,倒不如多读几本书丰富下自己的“阅历”。还是那句话,思想境界上不去,去再多的地方也属白搭,算了吧。

这一年观影约一百部,但是观影带给我的乐趣却越来越少,甚至三五个月都没有令自己心仪的影片。也许是阅读的兴趣冲淡了观影的心情吧。以前累的时候往往想看部电影放松,现在累的时候坐在椅子上写写字做做读书笔记,对我而言也是相当惬意的缓解压力愉悦身心的良方了。今年做的阅读笔记大约200页左右,都是一笔一划磨笔尖磨出来的,实打实的墨迹墨香。喧闹的世界里有这份心境,应该算不俗吧。

这一年我开始更多的承担家庭的责任,无论是父母那个家,还是现在这个尚未成型的家。我花了一个月的时间指导弟弟的中考,中考结束后又花了很长的时间训练他骑车旅行,替他联系更好的高中;我也开始在父母的家庭中逐渐拥有更多的话语权,期望来年我的斡旋能够让他们平安喜乐。和妞相互扶持,同甘共苦,在喧闹的世界里撑起自己片刻的安宁。

这一年如果说我有什么变化,那就是沉寂,除了沉寂,还是沉寂。

静水深流,与君共勉。

Footnotes:

1 其实是被炒,sigh。

2 对于我这样的工科男而言,文学的、心理的、历史的都可以在某种程度上归到人文类书籍里面,笑。

3 这点很遗憾,也是我对公司最不满意的地方

 

陪床记

2012的跨年夜是在病房中陪伴父亲度过的——他在酣睡,而我熬了一夜。他从未这样酣睡过,而我也从未这样近距离陪伴过他。父亲是在24日岀的车祸,而我接到母亲电话已然是28日。母亲叮嘱让我不要着急,说父亲无大碍,我当然知道她是在叮嘱我注意行车安全,来时不要过于匆忙;我自然也知道父亲的伤虽不至于性命攸关,但也不会无关紧要,否则母亲是断然不会给我电话让我回家的。我没有细问事情的经过,简单收拾了几件衣服,背上电脑、Kindle和柴静的新书《看见》,折腾8个小时,总算到了承德附属医院神经外科。每次回承德的时候我总是忍不住要吐槽下承德的交通——想我威武大天朝,京沪高铁5小时,京广高铁9小时,而270公里的京城铁路,最快的列车要5个小时,最慢的列车竟然要9个小时。

我看到蜷缩在床上的父亲,看着他迷离游走又似若有所思的眼神,看着床边七姑八姨紧锁的眉头,我意识到,父亲的伤势比我想象中的要重——髋关节脱臼骨折、脑震荡加内岀血、眼角受伤。事情的起因大概是雪后路滑,加上前几周家中一些不愉快的事情导致心情不好,轻微疲劳驾驶并且没系安全带,最后车鬼使神差地从路的右边冲到了左边,横着撞到了路边的树上。同行五人均有受伤,父亲伤势最重。亏得万幸安全气囊保住了命,否则后果不堪设想;活该自大舍安全带撞丢了魂,早知如此何必当初?

以前我几乎从未仔细想过所谓孝道的问题,我心中的孝道很简单,就是好好学习,天天向上,定时打个电话向家里汇报下工作学习进展。这次来到医院,一下子从阳春白雪的精神家园坠进下里巴人的现实世界中。来之前我就想过,断胳膊断腿都不怕,就怕碰上脑袋糊涂的。事实证明,伺候一个脑袋糊涂的病人比养育一个同样脑袋糊涂的婴孩可难多了。我在医院整整熬了十二个通宵,有那么两天,人手不够,白天也不得久睡,两天下来感觉自己都快变成金刚葫芦娃了。守夜的时候就盼望着他赶快沉沉睡去,一觉到天明。闲暇时或是无聊读读Elisp手册,或是翻翻柴静的书,要么就嗑瓜子,半斤半斤地嗑。万一运气不佳,他一个噩梦惊醒,接下来我可就不得消停了。端屎端尿倒是小事,最怕的就是他无休无眠地乱闹。要么就是要起床回家,要么就是手拔线管,要么就是蹬腿踹被。就在你满头大汗忙得手舞足蹈时,还要眼观六路耳听八方分神防着他的冷拳冷巴掌,当然,必要的时候,你那从重点学府毕业的耳朵还要忍受着他不堪入耳的脏言脏语。一次两次倒也没什么,可是次数多了,你对他好,他却打你骂你让你滚远点,总会让你觉得“久病床前无孝子”这句话似乎是真的。时逢邻床的老头也糊涂,他的儿子正万般无奈地安抚老爹赶快睡觉,安抚不成便行喝斥,看得出来,一天辛苦工作后还要侍奉一个糊涂不解人情的糊涂老爹,他也很难受。在他的脸上我第一次读出了人到中年上有老下有小的苦楚与压力。

有时候他实在闹地厉害,我就强行摁着他,要么就给他两拳,他倒也知道疼,就老实一会;过一会又闹,我实在是没有办法了,就得把他双手都绑起来。绑的方法也有讲究。最初是绑在手腕上的,让他一点也动不了,他也实在是太过痛苦,因为腿伤脚上挂了俩砖头,四肢残三,毫无反抗之力,就大喊大叫,口无遮拦,最后没办法护士也听不下去这罕见的粗口了,过来给他打了两针安定,总算睡去,让我们的肉体和心灵得到双重的解放,谢天谢地。再后来我学聪明了,不绑手腕绑手肘上,给他一定的活动空间(让他不能扯线不能翻身解扣但可以抓耳挠腮),核心策略就是让他事实上绝望但又同时施舍给他一点希望,这样他挣扎一段时间后力气耗尽,若无意外也就慢慢老实了。

有时他稍微清醒一点的时候,我就逗他,我摸摸他涨得鼓鼓的肚子,笑话他“用不用拿钢筋给你通通啊”;有时候就陪他下下象棋,他摆棋盘倒还是能摆出个大概来;有时候他胡言乱语,说自己是80后,说我是北京中关村大学的,说我是他连条(家乡话,意思是兄弟)。我也就坡下驴,陪着他胡搅蛮缠。趁机羞辱他几番,反正他也不知道。我发现自己以前似乎从未这样和他开过玩笑,虽然这个玩笑谈不上有多么轻松惬意。关于父亲,小的时候印象比较深刻的几个镜头,一个是他认真教我算数的情景,一个是下水摸鱼被提上来痛打的情景,还有就是父母动手打架我在旁边无助哭泣的情景。长大离家后,随着我年龄的增大和见识的增长,我的见闻谈吐大概他也逐渐跟不上了,因此每次回家后除了第一天我给他做做科普,还有就是他叫上我作为帮凶一起训斥我那不争气的弟弟外,他也基本不会主动和我说太多。倒是每次和家里通电话的时候没少遭他埋怨,说我只和娘亲而不理他;但我也确实不知道电话如果打给他该聊些什么。我毫不否认他对我的爱,也欣赏他的某些优点,诸如勤俭节约、重视教育,但也从心底里厌恶他的某些恶习,诸如酗酒和打老婆等。我当然知道那一代人有自己成长的限制和苦楚,但是成年后有了能力和机会却固守恶习而不知改变,就不能将所有的责任都归咎于社会并抱怨命运的不公了。这次的事故如果他听从我们的劝告,养成开车系安全带的习惯,断不会受伤至此。

妞有时问我“你没事吧”,我淡笑,没什么,我所能做的就是默默地承受命运施加给我的一切。无论怎样,他都是我的父亲,我无法选择我的出身,即便是他因此变傻变痴甚至因此丢了性命,我唯一能做的也只是默默承受。有时候睡不着的时候我偶尔会想,假设他因此一觉不醒,我能否放弃我的理想和事业就这样陪他走完后半生?我多么希望我给出的答案是肯定的,但我心里明明有一个声音是在说“不”。

母亲那边除了向我抱怨下政府如何欺负人导致我父亲心情不好进而导致了整个事情的严重化,要么就是说亲戚怎样怎样。我也不好多说,毕竟我过来也只是过来打个阵地战,熬几个通宵,持久战还需要母亲去打。虽说事情还没有严重到要我放弃工作的地步,但这个时候逆着母亲劝她,总也是不太好。我学习上一直都不错,小小的县城里绝对算得上出类拔萃,自我记事以来,父母一直寄希望于我,希望我以后去从政当官,甚至在我保送的时候父亲还曾经建议我考虑下中国政法大学……他们没有文化,父亲还好,好歹高中毕业,母亲则是小学将念完,这么多年来一直做着各种小生意用以维持生计,直到我上了大学,家里的经济条件才算逐渐宽松好转。五六万人的小县城里,两三年前主城区面积还没有浙大的一个校区大。做小生意难免和各种政府部门打交道,人情里外,冷暖自知。一方面他们不断的想方设法占一点国家的小便宜,另一方面又总是抱怨政府各种不好。坦白地说,我也真心同情这些地方父母官,屁大点的县城,处理民政纠纷,搞清楚状况之前,甲方乙方都不敢动,大家都是抬头不见低头见的人,谁怕谁呀。多年的来来回回中,父母也自然明白了“人”的重要性。只可惜天不遂人愿,我主意很正,自然不愿意为了他们的“蝇头小利”牺牲自己的“远大前程”。有时候我也忍不住去想,倘若我真的考了公务员,谋取了一官半职,以母亲的脾气是不是要牛上天了?一方面觉得自己受欺负很委屈,一方面又想往体制里钻,进而有资本去欺负别人,这算不算是中华民族的劣根性?人性有时候很难,有时也很简单,概括起来,大概就是人们更愿意看到和相信自己愿意看到和愿意相信的事情。诚如贪污腐败,对绝大多数的中国老百姓而言,倘若其在体制外,就痛骂;倘若其有朝一日登堂入室身在体制内,谁能保证他不会比现有的人贪地更狠?所以我又想起来俞敏洪老师的一句话,“中国需要改良和改革,而不是动荡”,打到共产党更换政权并不是最佳的解决方案。

扯远了。本想安心过个元旦,怎奈树欲静而风不止。想起佛家的那句话,“本来无一物,何处惹尘埃”,有时候吃点亏,忍一忍就罢了,何必非要争那口气,弄得自己心魔缠绕,许久不得解脱?毕竟“日光之下,并无新事”,虽说”塞翁失马,焉知非福“,但不是还有一句话叫做”是福不是祸,是祸躲不过“嘛。

谨以此文,祝祷父亲大人早日康复,母亲大人早展愁眉,亲人朋友平安喜乐。感谢一直关心我的朋友,你们的陪伴问候让我觉得2012岁末的夜晚不再漫长寒冷。

Emacs as a Python IDE

赋闲脱产的半年里,自己用C++/Java/Lisp胡乱写了几万行的代码,到了现在的公司,给OpenStack项目贴牛皮藓,反倒是Python用得最多。作为公司里面唯一的Emacser(没准也是 公司里JJ最长的吧,),我一直致力于在Emacs平台上折腾出一套顺手的Python开发环境,所幸有些小心得,付诸纸面,以飨大家。

1 Python.el的选择

Emacs的python-mode有两套,一个是Emacs官方提供的python.el,另外一套是Python社区提供的python-mode.el。不过python.el和python-mode.el都有各种各样的小问题,python.el似乎是无法正确处理python的docstring,而python-mode.el的menu项太过繁杂,而且很多menu无法正确工作。这里用到的python.el来自于https://github.com/fgallina/python.el,细节可以参考水木社区的讨论

安装方法可以参考项目主页的README,我自己针对el-get做了一个recipe,这样以后更新装卸都会方便很多,recipe如下:

(:name python
       :website "https://github.com/fgallina/python.el"
       :description "improved python.el from Fabián Ezequiel Gallina"
       :type github
       :pkgname "fgallina/python.el")

不过这个patch并没有被el-get接收,限于时间精力,我没有再去细究el-get撰写recipe的规范。

1.1 ipython集成

交互式的开发是python/ruby/lisp这类动态语言的重要特性,它让程序员从“编码-编译-运行-调试“的程序开发工程链中解放出来,从老旧的批处理是开发过渡到现代的交互式开发。如果你用过slime,你就会知道,交互式的开发不仅仅是一种开发模式,slime也不仅仅是一种工具,而是一种编程的革命。Emacs集成ipython,虽然没有slime那么强大,但是对于提高开发效率还是有莫大的帮助的。幸运的是,fgalling/python.el是支持ipython的。关于fgalling/python.el的参考设置如下:

(add-to-list 'load-path (expand-file-name                                                                        
                         "~/.emacs.d/el-get/python"))                                                            
(require 'python)                                                                                                
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))                                                       
(setq                                                                                                            
 python-shell-interpreter "ipython2"                                                                             
 python-shell-interpreter-args ""                                                                                
 python-shell-prompt-regexp "In \\[[0-9]+\\]: "                                                                  
 python-shell-prompt-output-regexp "Out\\[[0-9]+\\]: "                                                           
 python-shell-completion-setup-code                                                                              
 "from IPython.core.completerlib import module_completion"                                                       
 python-shell-completion-module-string-code                                                                      
 "';'.join(module_completion('''%s'''))\n"                                                                       
 python-shell-completion-string-code                                                                             
 "';'.join(get_ipython().Completer.all_completions('''%s'''))\n")

常用快捷键:

  • C-c C-z: (python-shell-switch-to-shell),切换至ipython解释器
  • C-c C-c: (python-shell-send-buffer &optional ARG),发送整个buffer内容到ipython解释器运行

2 Emacs补全:Pymacs和Ropemacs

语言补全一直是Vim/Emacs这类上古"IDE"的弱项,每种语言都有自己的补全插件、配置方法和版本差异,而网上资料、特别是中文资料,或是陈旧潦草,或是语焉不详,常常让初学者们不知所措。本文所载内容恐怕两年左右就会过时,诸位看官高贤注意鉴别……

Emacs下的通用补全插件大概就是auto-completeyasnippet了,前者可以做出基于buffer分词的补全,后者可以基于特定编程语言语法结构的补全。不过基于语义的补全,Emacs+Python下用的是pymacs和ropemacs。需要安装的有

  • pymacs
  • rope
  • ropemacs
  • ropemode

以上均可通过el-get安装。如若使用过程中出现莫名问题,不要纠缠,有可能是版本问题,无妨试验下用apt-get/pacman/yum安装。我本机上的配置如下:

;;; pymacs, rope and ropemacs
(add-to-list 'load-path "~/.emacs.d/el-get/pymacs")
(require 'pymacs)

(setq pymacs-load-path '("~/.emacs.d/el-get/rope"
                         "~/.emacs.d/el-get/ropemacs"))

;; Initialize Pymacs
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)
;; Initialize Rope                                                                                             
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)

3 virtualenv

virtualenv是Python的sandbox(沙盒)。那么什么是sandbox呢?

在日常开发中我们常常碰到这样的场景:

  • 需要针对不同的python library做测试(兼容性、性能等)
  • 需要多人共享一台开发机

可是:

  • 并不是所有人都有向系统PYTHONPATH安装python library的权限
  • 我们常常需要同时安装多个不同版本的python library

而virtualenv通过一些脚本,通过软连接和修改环境变量的方式,提供了一个轻量级的虚拟python环境,在这里面个人可以按照自己意愿任意装卸配置library,也可以针对不同版本的library创建不同的virtualenv,方便的很。

3.1 virtualenvwrapper

virtualenv默认是在当前目录下建立一个.venv目录,但是这样有一个问题,就是virtualenv本身的管理很不方便,因为需要记忆不同的.venv的存放位置、具体用途等等。virtualenvwrapper则通过一些python和shell脚本,在virtualenv的基础上建立了一层抽象,实现了对virtualenv本身的统一管理。virtualenvwrapper会默认在$HOME/.virtualenvs目录下创建所有的virtualenv。

virtualenv和virtualenvwrapper均可以通过python pip安装:

pip install virtualenv virtualenvwrapper

常用命令:

  • mkvirtualenv venv_name: 建立一个新的virtualenv,
  • workon venv_name: 切换到venv_name这个virtualenv

3.2 virtualenv.el

virtualenv.el可以配合Emacs集成virtualenv,可以通过el-get安装。virtualenv.el需要virtualenv和virtualenvwrapper。

配置:

;; virtualenv support
(add-to-list 'load-path (expand-file-name
                         "~/.emacs.d/el-get/virtualenv"))
(require 'virtualenv)

常用命令:

  • M-x virtualenv-workon: 切换virtualenv

4 Miscs

一些hook设置:

(add-hook 'python-mode-hook
          (lambda ()
            (ropemacs-mode)
            (global-set-key (kbd "RET") 'newline-and-indent)
            (auto-fill-mode 1)
            (virtualenv-minor-mode 1)))

除了以上,Emacs中和Python开发有关的插件还可以有pylint、pep8、pyflakes等,参考文章:

以上,抛砖引玉,希望能够对刚刚接触Linux/Python/Emacs的朋友有些许帮助。

读行记:孤单是一个人的狂欢

仿佛转瞬间北京就入秋了,凉风习习,晚上睡觉要关上窗户盖厚被子了。转瞬间我在新公司工作已两月有余,工作不算繁忙,博客却荒芜至今,也是时候该写点东西除除草了。这半年来读了不算少的书,也写了一些“虎头蛇尾”的文章,文章内容从汇编、Lisp到工具配置,大体上也反映了半年来看书学习的历程。我这个人不笨,却也谈不上聪明,人长得丑,千辛万苦泡到了一个妞,捧在手心、含在嘴里,寻思着自己没钱没背景,想保住这个妞,惟一的出路似乎只有读死书死读书了。所幸的是,读了这么多年书,我对读书的兴趣正变得越来越浓,最令我感到欣慰的是,这半年来有那么几次,合上书籍闭上眼睛深吸一口气,竟颇有一点融会贯通的感觉,妙不可言。我也开始尝试,将这些转瞬即逝的”感觉“转换成文字,与大家分享,奈何功力尚浅, 而认真的写作却有如雕刻 ,因此前面写的几篇文章都极耗体力,让我心有余悸,不敢再轻易提笔。

工作以后,大块的无人打扰的时间会减少很多,因此在砍掉了人人、QQ之后,连手机上的新浪微博客户端也被我卸载了(我在微博上只是个看客,不时地会去搜索一些技术信息而已)。我依然保留了一些有价值的博客,并且会不定期地清理博客订阅列表。 在碎片化的互联网海洋中,一篇好的博文如珍珠般璀璨珍贵 。我不喜欢加班,相反,高更青睐于高效率的工作,我会利用手头的各种工具和知识尽量用最短的时间完成更多的工作,这使得我每天在工作之余还会有至少3个小时的阅读时间,加上周末两天每天不少于8小时的阅读时间,我尽力保持每周的阅读时间和工作时间持平。恬不知耻的加一句自恋的话,咱也算是每周工作学习不少于80个小时的人了。

来北京以后,个人的业余生活变得越来越单调,似乎除了读书之外,就是躺在被窝里吃水果看电影了。真是难以想象,几年前自己还光着膀子天南地北地疯跑,到了北京,仿佛青蛙进了温水,一点蹦跶的力气都没了。我一直自我安慰说,廉颇未老,尚能饭也,之所以长期宅,只是因为北京众所周知的空气质量。我知道自己在自欺欺人,即便北京天空藏蓝青红,我大概也不会像以前那样骑车爬山了。归根到底,我想可能是我对浅层次的旅行失去了兴趣。”我的生活精致到每分每秒,而每分每秒都是无聊“,这是《背包十年》的作者形容对白领生活的一种评价;可是在我看来,《背包十年》充其量只是一个旅游暴发户的炫耀之作,记不得从哪里看来一句话,” 中国的希望在于疲惫归家的工程师 “。

我想一个人的旅行所得,终究还是要归结到这个人的思想境界上去。同样的山山水水,不同的人看来却能得出不同的山水人世的道理。我以前一直坚信,旅行能够给人生增加一个新的维度,阅读也是。现在看来,没有阅读作为支撑的旅行终究会演变成相机快门的重复性工作,日子久了,难免兴趣索然。 旅行可以给你的生活开一扇窗,但阅读却可以给你一整片原野1

周国平说,“阅读是与历史上的伟大灵魂交谈,借此把人类创造的精神财富‘占为己有’。写作是与自己的灵魂交谈,借此把外在的生命经历转变成内在的心灵财富。信仰是与心中的上帝交谈,借此积聚‘天上的财富’。这是人生不可缺少的三种交谈,而这三种交谈都是在独处中进行的。”

这半年来我最大的进步就是开始逐渐懂得君子慎独的道理,我开始尝试着,在一个人心情烦躁的时候,静下来去阅读,并一丝不苟地做读书笔记。我发现,在信息爆炸的时代,用看似慢下来的原始工具爬格子,是一种绝佳的缓解压力放松身心的好方法。以前心情烦躁的时候,要么就去找几个好朋友喝酒扯淡,要么就去山水疯癫,浮生随梦的生活,毕竟只是一种逃避,每个人都要学会直面惨淡的人生,以及那茫茫宇宙中永无止境的孤单孤独。

"We are drowning in information and starving for knowledge."2

在信息时代,我们每天似在狂欢,却不知,那只是一群人的孤单。

"我一个人吃饭 旅行 到处走走停停; 也一个人看书 写信 自己对话谈心"

学会享受孤单吧,因为

"孤单 是一个人的狂欢"

--

 

偷得浮生半年闲

世间唯有两样东西能够深深地震撼人们的心灵,一是我们心中崇高的道德准则,二是我们头顶上灿烂的星空。 ——康德

两年前我大三,刚刚过了几门纠结的考试,找到华数淘宝的实习,正式开始了自己的职业生涯。在华数淘宝,我第一次做出了点影响世界的产品——我写了一套视频转码上线系统,经这套系统转换格式入库后的视频至今还在淘花网上播放着。

四年前我大一,也是刚刚考完十几门不痛不痒的考试,我一边告诉母亲自己会在一周后回家,一边又在宿舍里面擦拭着自己的爱车,想着路上该怎样向母亲赔罪。那个暑假我一个人,一辆单车,一路风雨,无阻无悔,孤旅天涯:

“十元钱的小镇旅馆,半夜竟然被雷震醒,不足半平方米的窗子,依然挡不住闪电,那耀眼的光芒,直插我狂野的心。无比的想念某人,我知道,家乡的老妈妈也无比的想念我。窗外的雨,是妈妈您思念晗宇的泪吗?知道你已经收拾好了一切,就等晗宇回去,给我做好吃的,却收到我的短信。我知道这很残忍,发那条短信的时候,我的心和手一样的发斗。对不起了,妈妈,又让您操心了。二十岁了,二十岁是人生最灿烂的年岁,我要去追寻我的梦了。我不想呆在家里浪费自己的青春。很多时候事情是不能拖的。对不起了,妈妈。我想,当我老了的时候,回忆起这段岁月,我会笑的。”

45天,2500公里的骑行,500公里的水运,1500公里的汽车旅行,4000元的开销,明月夜那个朦胧的终点。可我在拉萨只待了12个小时,其中还包括青旅里8个小时的酣睡。回到拉萨,回到布达拉,郑钧先生在创作这首歌的时候,可有想过,他的听众也许并不知道他没有去过拉萨?

六年前我高二,那一年我决定放弃数学竞赛转攻化学,并且第一次来到北京,单日往返,不吃不喝,在西单王府井买了400块钱的书籍。那年三月我和WP以搞竞赛为名、逃避月考为实来到北大,买了几本北大的化学书,还听了一节《基础有机化学》作者裴伟伟教授的基础有机化学课程,课后WP去找裴伟伟索要签名,教授问,你是哪个学校的,WP答道,我是唐山一中的! 那个时候听课的态度真是认真到了极点,我们在教室里自己摸索奉为圭臬的教材,如今见到作者本人了,还是个活的,怎能不激动呢?咦,怎么还有学生迟到,在教室里偷偷吃早餐?

那年的暑假我第一次走出河北省,坐上火车来到了美丽的西子湖畔,参加一个奥数培训,培训费用400,车票也要400。我有幸见到了几何大王叶中豪先生,他出神入化的几何画板演示着实令我颇为震撼。那个夏天我第一深切地感受到了南方火炉城市的火热。尤记得天热,一行人等想去网吧打魔兽,但是又有些犹豫不决,于是就有人提议说掷硬币吧——正面,去魔兽;反面,去魔兽;硬币立起来的话,去培训学习……结果可想而知。除了西湖,我还去逛了逛浙大的西溪和湖滨校区,感觉毫无特色,都特别破,还下定决心,如果将来能保送了尽量不来浙大。其实浙大校区的精华在玉泉、之江、华家池和紫金港校区,而那个时候的我连上网都不会,就更不必说自己游玩了。

八年前我初四,刚刚中考完。校长告诉我们说唐山一中是东北三省华北五省最好的中学,于是乎,在校长和父母的殷切期待中,我第一次走出承德市的地界,去参加唐山一中理科实验班的入学考试。由于我和父亲都不太懂城市的公交车系统——我一直以为城市里的公交车和家乡的“招手停”是一样的,第一次上公交车的时候还被门给夹住了……我和父亲决定走路去火车站找相对便宜的旅馆——学校附近的旅馆要30块钱一个床位,而我们在火车站找到的旅馆只要10块钱一个床位。考完后感觉很糟,去看成绩,和自己估计的也差不多,236,彻底没有希望了;后来同去的人说我考了260,我不信,又去看了下,果然是260,不过兴奋过后就是失落,因为分数终究不够正取线,还差十几分,只能收拾行李回家了。走之前又去书店买了几十块钱的书,被父亲唠叨了,说身上钱有些不够了,别买书了。回家后被告知说可以去唐山一中,但要交20000的择校费,我自然是眼巴巴地想去,可怜我父母,刚刚还了别人20000大洋,又得去借回来供我上学。就这样,我稀里糊涂的进了唐山一中,进了河北省最好的省理科实验班,虽然考过班级倒数第二但依然顺利的实现了自己的保送理想,提前进入浙大,并幸运的接触到了旅行者,又幸运地体验到了批量挂科的感觉……

半年前我去了趟长白山,寒冬的天池,白茫茫一片,仿佛到了世界的尽头,我隐约感觉到我的生活似乎要发生什么变动——果不其然,回来后我就从百度离职了,尽管我来到北京的时候是打算干三年的。铁打的团队,流水的兵,有的时候,老大需要的是执行命令的兵,而不是有想法的人。不过我依然感激百度教给我的一切,加起来9个月的实习和正式工作,不长也不短,技术上长进有限,但是我却看到了,一个如此规模的公司,其内部的组织机构和运转机制,而这些在书本上学校里是学不到的。

我并没有急着去找新工作,而是计算了下手中的钱,做出了一个“偷得浮生半年闲”的决定——我决定借着近水楼台先得月的优势,去北大待上三个月,重点任务是泡图书馆,写写代码,顺带看几场电影,游几次泳。

春节我在家待了三周,待过了元宵,离家数年第一次在家过个元宵节,圆了母亲的一个愿;我看完了SICP前两章,完成了100道题目,对编程语言有了进一步的认识。

三月我再次回到家中,这次是为了弟弟中考的事情,我替他跟老师请了假,晚上在家单独辅导他,我并没有填鸭式的讲解,相反,我会给他看优酷上化学实验的视频,我会亲自给他做一个针孔照相机来给他讲解光学,我会给他讲解基础的英语音标和语音,让他通过发音来读记单词,我给他买了张道真的语法书让他自己查询解决问题,我会给他讲解整个数系发展的故事让他去理解实数,我会给他讲解大学的故事,让他对未来有美好的憧憬,还会给他放一些电影如《迁徙的鸟》,让他去触碰下心灵中柔软的地方。这几日他中考完来到北京,我训练它骑车旅行,我给他讲解基础骑行知识,让他自己通过网络查询确定骑行路线,制定训练计划。昨日,他一个人骑车从北京到天津,150公里,一日完成,我甚感欣慰。

四月回到北大,妞找到了实习,我则专心致志的“替”妞泡图书馆,再也不用担心有人过来跟我抢电脑。就这样赋闲下来,就这样奢侈地享受了一个又一个美好的午后,就这样奢侈地徘徊在北大图书馆排排书架里,随便抽一本书,即使不读全书,读读序言目录看看作者那么牛崇拜一下的感觉也是很不错的。本科的时候我一直想找块时间,好好泡一下图书馆,奈何前两年醉心户外和社团,后两年又疲于奔命与毕业,这个愿望一直没有实现,成了我大学生涯一个莫大的遗憾。今天我终于得偿所愿,我用自己攒的钱,给自己放了6个月的假,这六个月里我看了三四十本书,写了三四万行的代码,我不为老板打工,不为考试成绩,更不为发表Paper,我学习看书泡图书馆,乃是境由心生,学从乐起。

但是生活还要继续1,在经历了豆瓣/人人/雅虎北京/iHandySoft/易云捷讯持续两周高强度的面试后,我最终从了易云捷讯,一家才成立一年的创业公司。创业公司总是风险与机会并存,而创始人的诚意确实打动了我,让我非常感动。我一直自傲的认为自己的身上具有创业者的气质,我也坚信自己在经过一定的积累后,一定会做出一些改变世界的东西。学者、行者和企业家,这是我目前给自己定的几个可选的人生方向,现在来看,技术起步的企业家也许是我更可能走的路。 我一直认为行者气质和企业家气质有很多相通之处,不安分,爱折腾,独立自主的想法和判断能力,加上虽千万人吾往矣的勇气。我一直想创业,只是没想到这么快而已。

“从六楼俯视校园,各种树木摇曳着缤纷的绿,映着高楼和远山。而在寒冷的冬天里,缤纷落尽,繁华消亡,只留下黑色或褐色的枝干,如一支支手伸向清白的天空。可是这些光秃秃的枝干就是树的本来面目吗?冬日看去,便觉万物终归于寂,可是后面还有个春天,有那黝黑的枝干上刹时间涌出绿芽的生机。我总觉得在这些苦难的背后,有什么力量正在生长2。”

半年前我来到北大的时候,北大尚未开学,教室和图书馆都关着门;半年后我要开始工作离开北大的时候,暑假已经开始,教室和图书馆又都关了门。我看着这苦难背后的力量从无到有,从萧瑟到繁华,心中不断地提醒着自己,即使“缤纷落尽、繁华消亡”,青春绝版,也不要被生活磨平了棱角

仅以此文,纪念那一个个美好的未名湖畔图书馆中阳光四溢的午后。

Footnotes:

1 我去面试豆瓣的时候,豆瓣网的耿新跃老师问我为何离职为何现在又找工作,我就大概解释了一番,于是就有了这句话,至于内涵嘛,你懂的。

2 这段话是一个IMO满分金牌得主的文字, http://blog.sina.com.cn/s/blog_62178a2b0100mwpb.html

 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee