佛家有一句话:今日的果必然联系着往日的因,因果循环,报应不爽。而《无间道》中更有一句经典的台词:出来混,总是要还的!,前者未免有些消极,却充满着智慧;后者或许有些黑话无赖,却也不无道理。但大抵的意思都是,你必须为往日的所为埋单,更加要为未来的人生未雨绸缪。
现在回想起自己最近一年多的研究生生活,似乎更多地是为自己本科的学习补过。语言、平台、开发工具在理论上更多应该是本科时候的任务和目标,但是除了所幸的大四一年的机会和机遇,本科的学习更多地忽视了计算机专业中最为重要的动手实践能力。说得本质一些,就是编程的能力,对算法的掌握能力,对系统的设计能力,对需求的理解能力。
很多时候,似乎人生是无法安排和设计的。其实慢说人生,就是一段时间的学习,都会因为这样或者那样的事情而改变。李开复先生在一篇文章中说到,到微软亚洲研究院工作的员工很多的人都有10万行代码的经历和经验。可能简简单单从10万这个数字并不能给很多人带来意义,因为很多人根本就不知道10万代码可以作什么,因为很多人就连1000行的程序也没有maintain过。而我知道,因为我知道10000行以上的代码可以作一个简单的编译系统(Visual CMCS接近20000行代码,包括GUI的话),3-5000行的C++代码可以实现一个PDA上C/S结构的GPS/GIS系统。而10万行,实在超过了我们很多人的想象和实践。
我一直想作的事情,却是基于应用的研究,或者说是基于研究的应用。我不排斥纯理论的东西,因为那些东西很难做,并且很有水平,并且需要你能够真正静下心来潜心研究。但是我不喜欢(或者是不适合)那样的研究。我比较热心于应用,并且做了一些应用的东西。因为我觉得通过技术的实现能够给人生活带来便利、带来改变的感觉本身就是一件非常有成就感的事情,就想Bill Gates说的“每天清晨当你醒来时,都会为技术进步及其为人类生活带来的发展和改进而激动不已”,这是一种异常奇妙的感觉。但是我又不迷恋于简简单单的应用开发,因为在实际的商业开发中,用的永远是最成熟、最简单的技术,尤其是一些小的应用项目,技术含量实在是让人觉得有些怀疑自己的理解力和承受力。而我,最期待的是富有挑战性的开发,而不是简简单单去作为代码工人,我的理解中是一种艺术——一切的东西归结到至善至美后、或者追求至善至美都是艺术。
为了这个不知道对错、能否实现、是否可称之为理想的目标,我一直在努力。本科时候的懵懵懂懂,很难有一个清晰的目标,于是也很难说能够为了现在这个目标作出怎么样的准备和积累,于是我的研究生的前半部分的生活会是如佛家信奉的那样,要去为过去的年轻埋单,但是这我不觉得遗憾和后悔,因为一切的事情经过了才是最重要的,过程的体验远远要大于结果的呈现——当然很多情况下,结果也很重要。开复先生提到的10万行代码的要求,我深以为然。加上自己以前的在项目开发和学习等中的代码数量,可能还没有达到这个目标,但是我慢慢觉得10万只是个数字,其实意义远远没有10万行代码的经历和经验所折射出来的含义——夯实应用的基础要逊色得多。而自己最近,更多去关注设计和需求层面的东西,例如设计模式、建模语言(UML)、软件体系架构,以及软件过程的东西,或者是具体到某一个平台和应用方面的东西,却忽视了很多最为基本的东西——尽管很多都能够有一个了解和记忆,但是在较多情况下却没有认认真真去实践过。
于是我给自己定义了一个“Program Day by Day”的任务,一天一天学习,一天一天实在,一天一天精进。Program Day by Day我会尽量做到名副其实——每天Program,而Code的内容更多将会focus到最基础也是最重要的基本算法,数据结构中去,当然也会有诸如设计模式、具体问题的解决等等。当然这里面的很多东西,都应该是自己在N(N不知道等于几)年前的任务,于是现在再实现的时候,我会注意代码的风格,实现的本质等等。而这一切,在我看来,既是对往日的补过,更是对未来的期许。
Program Day by Day, and make progress everyday!
——k_eckel 于国立武汉大学