我的大学

大学的奋斗至此,初见曙光,就此记录一下自己的感慨。

大一的时候刻苦地学习高数,晚上刷题刷到一点钟,但是成绩依然很差。由此明白了,自己实在不是学习数学的料。幸而在做科创时窥见了java的大门,大一下的时候又学会了C,一直坚持着有空就刷HOJ。虽然刷的很少很简单的水题,但至少,对敲代码更为熟练了。但其实内心非常的苦闷,因为刘汝佳的书完全看不懂,去参加校内ACM又被打击的无以复加。内心对本专业和编程都充满了绝望。

大二的时候,鬼使神差地在大二的创新研修课上选了输入法,从此加入实验室,从而看到了一个崭新的大门。惊才绝艳的师兄们,简直是我心目中的神,而且还是一堆神,把实验室堆成了奥林匹斯山。算法狂魔吴嘉伟,无所不能的老任,充满产品气质的李阳,神秘而强大的hadoop高人李爱宝,超级学霸岑武斌,肌肉比代码更强大的孟哥,项目经验无比丰富的秦师兄,超级超级有钱的恭叔。开始写Java的时候,真的是非常的痛苦,代码量太大,幸得咬牙坚持了下来,用一个学期熟悉了整体的代码,在大二下的时候疯狂地刷代码,每天晚上七点到十点走,坚持了差不多一个学期,完整参与了WI九键的开发,也积攒了初步的项目经验。这时候,跟在师兄们身边,虽然很多所见所闻,当时都不一定能理解,但正如谢逊要求年幼的张无忌硬背《九阴真经》一般,当师兄们离开后,我慢慢地琢磨师兄们所说过的一言一语,领悟了更多的深意。

我一直深深地感谢实验室和师兄,是因为他们给予在最黑暗的时光里苦苦地追寻的我,一个光明的道路。身处一个大牛云集的牛棚之内,我学习到的是师兄们的视野,师兄们的做事风格,还有师兄们对技术的洞察。

大二下的暑假,我一个人留在学校,自学了git,vim,linux等等一系列的开发工具和环境,梳理了自己大二一年的技术积淀,一点一点地打磨WI输入法2.1版,从而实现了技术上的升华。

大三上,自学了Python。系统地阅读了输入法内核代码,从这个庞大的C语言项目中,感受到了开源代码的灵魂-C语言中无穷无尽的奇技淫巧,伟大的UNIX哲学,以及经典不朽的VIM,GCC,GDB。认识了新加入的一批软院大神,号称”赵师兄不走,阿里不穷“的铨哥,懒虚怂大神亮叔,萌神高扬,帅的不当gay可惜的富帅,巨有钱的骚博,安卓大神兰兰。在这一个充满活力的团队环境,我从他们身上,学到了太多,无论是技术知识,技术理念还是技术视野。

特别是亮叔,坦率而言,我真的很嫉妒亮叔。作为一个拿github当朋友圈刷的宅男,一个看美剧不用字幕的英语达人,一个遍历了几乎所有的软件技术的人,亮叔简直是为技术而生的“计算机之子”。在和亮叔“撕逼”的大半年里,我总是通过抬杠获得亮叔气急败坏的被动传授(^_^),从而学到了很多珍贵的技术视野。

大三上的暑假,系统地阅读《现代操作系统》《数据结构与算法分析》《计算机网络:自顶向下方法》,涉猎《设计模式之禅》,《代码整洁之道》,理论与实践相印证,有如任督二脉皆通,对技术满怀敬意,对代码满怀热爱,对生活满怀期盼。

还要深深地感谢斯逗比,盛哥,CC哥,飞哥。在我作死翘课的半年多里,帮我各种掩护,使我能够全身心地投入到代码之中。

我一直觉得,WI输入法,也许不能成为一个呼风唤雨的输入法霸主,也许始终只是保持着一个小众的地位,那又怎么样?WI输入法团队里的大学生,始终代表了工大最优秀的移动开发的团队,我们,就无愧于闫于闻师兄和其他三位创始师兄所开创的事业。“留一口气,点一盏灯,有灯就有人。须知念念不忘,必有回响。”

什么是IT?什么是技术?什么是GPL?什么是FSF?什么是GNU?什么是OpenSource?他们都基于一个根本的崇高的理想,推动信息的平坦化,最终实现政治的清明,并让每个人希望拥有平坦的人都能享有这种知识。这就是我对技术的梦想。我,并没有忘记高中时的理想,匹夫虽弩,未敢忘忧国。

信息的获取成本

这个寒假闭门谢客,专心看书,深深地感受到看书之难,坚持不易,然而收获亦不菲。其中感悟,记录如下:

看书难,看硬书更难。所谓硬书,就是那些厚度能比砖,字体小于蝇,图画稀如金的书,而往往已经不属于普及阅读之流,列入一个专业的经典之例。前半个寒假啃一本《现代操作系统》,早上起床,先对着书页发呆,呆上半个小时。时而翻翻昨日的日记,时而看看印象笔记中的摘录的励志文章,如此反复地做足了半个小时的思想工作,再翻开书,一行一行地琢磨字句的含义。比如文件系统中的一个“段”字,顿时就能联想到segmentation fault,想到多少次编译不通过,却始终不能理解报错的本义。我本是处于项目经验有余,理论知识不足的状态,旁人或许以为如此一来,看书就可以与实际经验结合,速度自然一日千里。大谬。正因为实际敲代码中遇到了很多业务场景,对理论知识的印证,就往往会有多种解释。这正是,看的多,想的也多,而且生怕想错了,以后用的这块知识,还要走弯路,因此读书时所写的笔记越发不敢下笔。子曰:述而不作。《诗》曰:兢兢业业,如临深渊,如履薄冰。书法家说,王羲之之后,苏黄米蔡,都逃不开二王的笔意,这些例子,讲的都是同一个道理。如此读书,当然费时,硬书之硬,正是因为此。

当然,付出必有收获。虽然说来惭愧,看了半个月的书,一本《现代操作系统》看了不过四章,然而那十几页笔记不会骗人,都是我自己靠自己的知识,自己对知识点的理解,从而总结成的重点,画出的关键算法的流程图,一些大块知识点的思维导图。100多页的阅读,看似寥寥,却是真真切切地解答了我这一个学期,在Android NDK编程中遇到很多问题。因为NDK的核心就是Linux下的C编程,我所写的输入法内核,又涉及到了大量的内存映射,内存读写的问题,因此,很容易遇到类Unix环境的操作系统知识。概括而言,就是一个程序的生存环境的问题。至今记得一个数学老师的教诲,“一个数学函数,首先要搞清楚他的生存环境,就是他的定义域,才能更深刻地理解函数”。操作系统上的理论知识,其价值也正在于此,虽然大多数程序员不会有机会去写操作系统,然而深入地理解操作系统,才能使自己的程序适应他的生存环境,或者更进一步地,更好地利用自己的生存环境。前者谓之兼容,后者谓之优化,如是而已。

更进一步地推进我们的思考,我为什么明知自己长于实践,而困于理论,却一直以来没有去好好看硬书。原因有三:
1. 忙。在学期内的时候,我的时间很大程度上,并不为自己的意志所左右。课业上,被我怒弃的微电子,很可能突然一个通知收什么作业,我就不得不连夜抄作业。或者本周突然发现积压了几个电路实验,就只能放下手头的编程,准备如何混过。输入法团队内的开发任务,也大多数是在学期内推进的。此外,如果有学弟晚上来到了实验室,立刻得放下手头一切工作,给学弟讲解业务知识,分配开发任务。毕竟学弟来趟实验室不容易(哭),不能让他们来适应我的时间表,只能我去适应他们的时间表。总而言之,人一旦有了工作,处在一个团队之中,你的时间表就必须要适应很多人,正如一个图中的顶点,有很多入度很多出度,这直接导致了你的时间表被切的很碎。
2. 看硬书需要一个足够长的,安静的环境。这一点就是第一点的补充,我得承认我自己的懒惰,所以看书之前我需要半个小时来整理自己的心绪,从而心平气和地看硬书,也只有这样,读书才能读的进去。恐怕这也正是为什么,知乎上如此多的人,认为大学的时候不好好看书,工作后想要看大部头的硬书,难度更大的原因了。毋论结婚生娃,话说起来最烦小孩子了(逃)。Pocket,Instatpaper这样的软件之所以流行,也是因为这一点,即收集高信息含量的文章,将其留到一个更适合阅读的环境。
3. 平时解决理论问题,主要靠看网页上的文章。要么是博客,要么是技术网站上发的文章。这类文章,优点是短小精悍,一针见血。缺点也很多,其一是良莠不齐,往往要搜索大量的网页,才能找到一两篇满意的。其二是有所缺漏,因为大多数都是个人的技术感悟,往往会因为个人技术经验的问题,不能涵盖一个问题的方方面面。其三是不成系统,比如进程,内存,文件,三者是相辅相成的,很难脱离群体讲清楚单个概念,因此阅读技术文章,往往只能达到似懂非懂的境地,而不能彻底地掌握一个技术方向上的全局。“横看成岭侧成峰”,终究不如,“会当凌绝顶,一览众山小。”这,恐怕就是大部头硬书的优势了,虽然离实际生产环境太远,没有实践经验很难与开发相联系,但是作者都是洋人大牛,书也是洋洋洒洒几十万字,事无巨细,字字珠玑,细细品悟能咀嚼出很多技术上的精髓。
4. 综上所述,珍惜宝贵的寒暑假,毕业说远不远,就在眼前了。

由此想到,我们每天看微博,刷知乎,刷朋友圈,真正获取到的有用信息能有多少呢?发表言论越容易,言论也就越廉价,所以邮件列表比qq更具有沟通价值,所以硬书信息量大于博客,博客信息量大于微博,微博信息量大于朋友圈(这里假定微博关注的是大V,朋友圈关注的是周围朋友),朋友圈信息量大于某人人(转发low文章的信息量,还不如让我知道朋友去哪儿旅游了,后者无害,前者祸害)。阅读信息量高的文本,付出的脑力上的折磨,得到的是更高的单位有效信息获取量。正如健身付出的身体上的折磨,得到的是更强健的体魄,这都揭示了同样的道理,只有毅力顽强之人,才能给予自身以更大的升华。