Chouqin's Blog

A blog for hackers.

2014年终总结

2014年算是过得比较充实的一年,看了比较多的书和论文, 也沉下心来写过一些代码,在专业方面还是有不少的积累。 另外,在性格方面,也慢慢改变了一些自己的缺点, 虽然还需要继续努力~。

计划的完成程度

修身仍旧还是第一位,而且必须要花一定的时间。

这个感觉完成得并不是很好,不过需要慢慢来, 多反省,多总结就好。

多看书,多看非专业书。

看的书还挺多的,待会再慢慢总结。

看完Graphlab和Spark的源码, 期间需要巩固C++和学习Scala。

Spark的源码看了大部分,了解代码的基本结构, 知道每一个功能的实现大概在什么位置。一直在跟进社区的Pull Request, 在研究Spark上面花了不少的时间,坚持下来有不少的收获。这一点明年继续保持。 Scala也在读Spark源码过程中不断熟悉,现在看Spark的源码不会有不理解的地方了。

至于Graphlab,完全没看。。

上完Convex Optimization、Probabilistic Graphical Models 和Neural Networks for Machine Learning这三门在线课程。

Convex Optimization比较圆满的完成了,看完了整本书, 同时顺便看了ADMM的那篇比较长的论文,Boyd老师真是大师, 讲课非常幽默,听完他的课之后对于优化这方面算是有了一个整体的框架, 了解了解决优化问题的思考方式。

另外两门课程没有参加,不过已经放在2015年的目标里了。

在github上为开源项目提交代码。

今年给Spark提交过几个patch,主要是和MLlib里面的决策树相关。

整体来说,2014年的计划完成了60%吧,由于完成了计划之外的一些事情。

看完的书

计算机方面的

  1. 《Effective C++》: 想写好C++程序的必读书籍, 看完里面的建议能够避免一些初学者易犯的错误。 读起来并不难,关键需要在实际写代码的过程中去使用这些建议。
  2. 《Unix编程艺术》:整本书的中心思想就两个字:简单。 通过简单的方式去实现程序,将程序拆分成简单的低耦合的模块。 这是一本关于“知识”,更关注于“思想”; 关于“方法”,更关注于“理念”的书。 整本书都是在讲述在UNIX哲学中如何设计软件, 如何使用工具,如何看待各种技术, 这是一本教你如何从UNIX的视角去看待问题的书。 且不说这里面的观点正确与否, 它确实能够给你提供一个看待问题的新的思路。 而且UNIX文化和哲学中拥有许多值得去领悟的精华。 看这本书一点都不觉得沉闷,每一个观点都能够引发我思考, 结合自己的经历得出新的感悟和体会。 书中的代码虽然不多,却能够教你如何编程, 而大量的软件实例分析又像一个个路标, 指出设计中的陷阱和正确的方向。
  3. 《统计学习方法》:虽然只有一些简单的机器学习算法, 但是里面的公式推导还是比较好理解的。对于入门来说,这样一本中文的图书真的很有帮助。
  4. 《多处理器编程的艺术》:这本书开阔了我对于写并发程序的看法,通过一个个并发数据结构的例子, 可以学习到编写“无锁”程序的技巧。为了写好并发的程序,需要对于底层的体系结构有一定的了解。 书中第3章有一些理论部分没有认真地看过。
  5. 《计算机程序的构造和解释》:非常经典的一本书, 通过这本书可以体会到函数式编程的优雅。
  6. 《编程人生》:英文名叫《Coders at Worker》,对于国外10多个优秀程序员的采访, 从这些人身上可以学习到程序设计的技巧和思考问题的方式。
  7. 《Convex Optimization》:虽然整本书超过700页,但是理解起来并不困难,只要掌握微积分和线性代数即可。 看完整本书,结合对应的课程讲解,有一种豁然开朗的感觉。
  8. 《Masterminds of Programming》: 采访了一些语言的作者,看完了对于C#的作者和Haskell作者的采访, 感觉一门语言能够支持EDSL很重要。
  9. 《人月神话》:本书描述的是作者在上个实际60年代管理大型软件工程项目的一些经验和看法, 这些观点拿到现在来看也仍然没有过时。

非计算机的

  1. 《史玉柱》:一本史玉柱自述的关于营销的书,观点都很实在,很接地气。
  2. 《信息简史》:这本书和计算机也有一定的关系,讲述信息相关的各个方面, 介绍信息技术发展从古到今的一些科技成果,令人大开眼界。
  3. 《The Elements of Style》: 讲述如何用英语进行写作的书,非常薄的一本书(才100多页), 对于如何使用词语、标点符号和如何组织段落等都有一些很好的建议。
  4. 《自控力》:标题像鸡汤,其实是关于如何认识大脑中的三种不同的力量, 以及如何使用它们来达到自控的效果。书中的一些案例让我感同身受, 照着书中的建议去做确实能起到不错的效果。
  5. 《周鸿祎》:看过的最差的书之一,里面提到的有用的观点很少, 大部分是对于360的自我标榜,重复的废话太多,根本不值得用一本书来讲述。
  6. 《文明之光》:有点科技史的感觉,没有《浪潮之巅》和《数学之美》有趣, 不知道是不是个人兴趣的问题。
  7. 《失控》:看完了前面3章,讲述如何真正地实现机器的智能, 使用群体的智慧。

计划之外

LLVM

今年选了一门外教上的高级编译技术的课程。 课程主要完成对LLVM进行扩展,让它能够支持使用并行机器指令完成长整数的运算。 在整个过程中,我看完了LLVM官网上的所有文档,整个代码也看了很多, 后端从LLVM IR到最终生成机器码的整个过程算是了解得比较清楚。 最终大致得完成了整个项目,还发现了LLVM里面的一些bug。 LLVM的代码写得还不错,是我看过的写得最好的C++代码之一。 唯一不足的是除了官方的文档,其他人写得关于LLVM的文章很少, 不管是关于实现还是使用的。学这门课最主要的还是锻炼了我的英语口语:D。

Haskell的课程

今年在Edx上学习了一门FP101的课程,比较基础地学习了Haskell, Haskell确实和我见过的程序设计语言不一样,它主张使用各种抽象来达到代码的复用。 其中,最难以理解的就是Monad这个概念,当时花了很长时间才明白Monad是什么, 而后通过Monad实现CPS让我不住惊叹于它的强大。现在,仍然不敢说已经完全理解Monad, 以后还需要多多使用来加深对它的理解。它能够给你一个全新的写程序的角度。另外, Haskell的类型系统真的很强大,当时在没有完全理解CPS的情况下可以依靠类型系统的提示写出正确的程序。

一些论文

今年看了不少的论文(相对于以前来说),主要是和机器学习相关的, 看完这些论文除了让我对论文中描述的技术有更深入的理解之外, 更重要的是让我学会了一些看论文的方法,以及不再害怕阅读论文的能力。

学车

虽然2014年最后一天的科目三没有通过,稍稍有点遗憾, 但是整个学车的过程还是让我成长了很多。 我克服了自己内心的恐惧,勇敢地走出自己的舒适区, 在一个自己非常不擅长的领域努力并取得了一定的成功。 学车整个的过程确实让我的内心变得更加强大,我也不断地弥补了一些自己性格上的弱势。 现在离最终拿到驾照还有很长的一段路要走,但是我相信我一定会成功的。

2015年计划

  1. 拿到驾照,顺便锻炼自己强大的内心。
  2. 学习go,深入了解Docker及相关的技术。
  3. 机器学习方面,看完ESL和PRML(或者MLAPP),学习落下的课程。
  4. 多看书,多看和专业无关的书。
  5. 跟进Spark的进展,争取在这方面能够有所建树。
  6. 看完parameter_server或者petuum的源码。

Comments