2018过去了

又到了一年一度年终总结的时候。

技能树

Scala

2018年最大的进步,莫过于点亮Scala这个技能了。

Kafka分布式消息队列有一些非常厉害的特性,一直以来都想看看Kafka的源码,了解其实现原理,但是因为对Scala一窍不通,最终还是放弃了。Scala是属于Java阵营的,作为一名C++阵营的程序员,始终有点排斥Scala。2018年初,工作上需要使用spark,又多了一个学习scala的理由,那就干脆就好好学一下吧。虽然我没有任何的Java基础,但是学习Scala基本上没有什么障碍。反而很愉快的发现,因为有Haskell的基础,很多概念一点就通。

Scala最吸引我的地方,在于它很好的结合了函数式编程和实际应用场景。在函数式编程上,Haskell一定是最牛逼的。但是作为一门偏向学术派的语言,很难找到实际应用场景。在Haskell中是完全写不出imperative范式的程序的,入门的门槛非常高,导致Haskell的用户很少,可以用凤毛麟角来形容。Scala则完全不同,既能支持Functional范式也能支持Imperative范式。这决定了它的用户要比Haskell多的多,也就意味着一定能在实际业务中使用。

Haskell之所以难以掌握,就是因为学了也没有地方用,过一段时间就忘了。没有实际应用,也很难理解Functional Programming的好处。更有深远意义的是,Scala让我在学习Functional Programming上花的时间有了回报。

写Scala代码是种非常愉悦的体验,以至于我宁愿少写点C++多写点Scala。使用Emacs编辑器,安装Ensime插件,就可以非常完美地实现代码跳转,文档查询,代码自动补全等等这些功能。作为Emacs的老用户,我从未有过这样完美的体验。之所以能实现这么完美的功能,都是因为Java的功劳,所依赖的jar包都在本地,相关的类、函数、接口都一清二楚。

对于Scala,不同的人写出的代码是可以完全不一样的。不仅仅是指风格上的不同,而是范式上的不同。当把一些非常繁琐的逻辑,使用functional programming的范式表达出来的时候,内心是非常骄傲的。这也是Scala愉悦体验的一部分。

对于具体的技术而言,生命周期一定是有限的。现在热门的技术很可能过几年就消亡了,比如Flash。眼下解决某些问题非常完美的解决方案,在几年后可能就无法应对新的挑战,比如Mysql在分布式场景下的困境。但是, 更高维度的科学和技术,一定会对整个产业持续地产生深远的影响 。比如算法,无论硬件多么发达,在面临更复杂的问题时,必然存在性能上的瓶颈,为了提高效率,不得不设计更高效的算法。Functional Programming也在此列。在这些方向上投资,我觉得是更有价值的。

如何学习?

2018年总结出几个关于“如何学习”的经验。

自顶向下优于自底向上 。对于某个具体的问题,之前的习惯是直接搜答案。因为同样的问题可能很多人都遇到过,搜下解决方案,可能是最快的方法。今年发现效果其实并不好,反思之前的经历,这反而是弊大于利的做法。

这种从具体的点出发,进而掌握全部的方法,我把它称作“自底向上”。与之相反的则是“自顶向下”。对于一个特定的问题,先去仔细阅读一遍官方文档,把概念理清楚,搞明白“是什么”和“为什么”。然后再来考虑如何解决具体的问题,而不是直接搜答案。虽然看起来会非常的缓慢,但就我个人经验来说,总体效率上,这绝对比自底向上的方法快得多。开始阶段花的时间是n倍的,但是花这些时间所获得的知识,在解决其他的问题上是有巨大的帮助的。甚至,原来认为是问题的,都变成“显而易见”了。

借助于“自顶向下”的方法,我甚至搞明白了很多困扰已久的问题。所以我强烈推荐这种方法。

成长和进步,一定是痛苦的 。是的,就这么简单的道理,2018年才真正明白。成长的路上,一定会面临重重困难,如果一直抱着“学习使人快乐”这样的想法,那一定是不能坚持下去的。但是给自己no pain no gain的心理暗示之后,反而心态更加坦然。有人说,你看我就没遇到什么困难,机器学习都学会了。我想说的是,“学会”和“知道名词和概念”,是完全不同的两码事。不经历那些痛苦,没有一路上披荆斩棘,没有日日夜夜的奋斗,没有怀疑自我怀疑人生,很难说“学会了”。意识到这一点之后,在重重困难面前更容易坚持下去了。

书有必要看两遍 。成年人时间都有限,拿到书希望一遍看完就行了。简单的书,完全没问题,但是对于fp in scala这种虐心的书,一遍看完非常不现实。过程中非常容易陷入细节,而忽略了全局。起初可能是一两个问题无法解决,偶尔跳过也还好。但是问题越积越多,对于我这种有“完美主义”心态的人,后面的挫败感就非常强烈,这时候基本就会放弃了。更为致命的是,因为只着眼于细节,甚至都无法理解作者的意图,这些问题和整本书要解决的问题有什么关系?

后来我“妥协”了。问题解决不了没关系,就放在那里,继续看。先把作者的意图搞明白,为什么这里会有这样的问题?这一章的核心内容是什么?有了“全局观”之后,再看第二遍,解决那些绊脚石问题。效果比之前好太多,最起码的,终于可以看到书的最后一页了,这在之前简直就是不可能完成的任务。

今年看了几本非技术类的书。

原则。 这本书是2018年比较热门的书籍了,作者是桥水基金的Ray Dalio。他在书中总结了很多关于生活和工作的原则,这些原则都能给人以指引。但是对我来说,最受益的并不是书里的原则,而是授人以鱼不如授人以渔。它教会我一定要记录自己的“原则”,每个人的经历都不一样,只有自己最了解所面临的问题,也只有自己能给出最好的解决方法。

另外今年看了几本创业方面的书,创业维艰四步创业法。 本来是想对创业这件事再有个更进一步的了解,但是读完创业维艰,感觉基本就是被劝退了。当然这也是好事,作者起码把真实的一面表现出来了,而不是忽悠大家都去创业。

稀缺。 2018年上半年时间非常的紧张,每天都像打仗一样度过,所以就思考,我为什么会这么忙?刚好看到这本书,那就来读一下,看有没有破局的办法。全书看完,只记住一点:稀缺会让人的智力下降,产生“管窥”心态。这个可以很好的解释,为什么工作越忙越容易出bug。但是其他的详细内容已经记不清了,最后也没有给出具体的解决方法。

之前基本不看这类“畅销”书籍,因为总觉得这些书标榜的东西,是无法通过看书学会的。总不能说把四步创业法看完了,我就可以创业了吧?后来想想还是“兼听则明”,花一点时间看看也无妨。事实证明,帮助还是有的。另外需要特别注意的是,这类书的作者都有个非常牛逼的技巧,就是把一句非常简单的道理,前前后后重复说很多次,废话特别多,本来一页纸可以讲完的,非要弄成一个章节。所以在看这种书的时候,千万不要一字一句的仔细看,大体看一遍就行了。比如,对于原则这本书,我的建议是只看第二部分结尾和第三部分开头,这里有完整的原则列表。对于那些特别感兴趣的原则,可以翻到对应章节细读。第一部分是作者的自传,这部分基本没有废话,可以好好看看。

摄影

2018年对于摄影的认识发生了根本的变化。之前的我喜欢拍摄cityscape题材,总觉得这些才能体现摄影师的“能力”。一次偶然的机会看到几年前随手拍的工位的照片,桌面上乱七八糟,没有任何构图,光线也非常差。这张照片在当时我的眼里,一定是一张废片。但是今天看来,确实非常有价值的。过去的时光已经不在,看到这张照片,便回想起来当时的种种经历。

什么样的照片是有价值的?体现“能力”的城市风光照,不一定是有价值的。这样的照片今天可以拍,明天也可以拍,甚至若干年之后拍的更好,因为城市在不断的发展,风景必然会越来越好。风光照也未必能体现能力。可能运气好,碰到了好的天气,也可能时间上比较自由。

摄影的价值在于捕捉以后不可复现的瞬间。 我们去到国外旅游,随随便便拍的街道照片都会觉得非常好,因为这些地方是完全陌生的场景,以后再次回来拍摄的机会也非常少,所以这些照片更加珍贵。女儿一天天长大,每天都会有新的变化,把她的成长记录下来,这是非常有价值的。对于我们自己,“岁月是把猪饲料”,每天都在变老,把当下自己的状态记录下来,也是有价值的。

2018年的年度最佳照片,就是下面这两张。

PA064694

20190126-P1266973

新的开始

终于赶在春节回家之前把这篇博客写完,这大概是我有史以来写的最认真的一篇年度总结。对于2019年,内心其实有非常多的期待,但是我就不在这里立flag了。以免到2020年才能把2018年底许的2019年愿望实现。总之,2019年是一个全新的开始,希望在2019年能把心里的这些flag都实现。

新年快乐!