Review: A Tour of Go

很高兴用了周末的一点时间看完了”A Tour of Go”。回顾了一下,自己之前尝试写过的语言类型林林总总——C/C++/C#,C family应该是学习和工作使用时间最长的语言。大一入学编程课程的第一门课就是C++,第一份在亚马逊的工作是C,现在在微软的工作则是C++。可是用的时间虽然很长,但是期间并没有认真研究过语言本身的很多特性,以及更新后的每一代C++的新的特点和功能,至于编译器背后的逻辑,内存的如何分配,线程的调度很多知识都还给书本和老师了。JAVA短暂的用过一些,用的最多的就是在Leetcode刷题的时候,当时才研究生刚毕业,觉得Java的容器比C++的方便,又不用担心指针的问题,所以刚开始刷题和面试的时候常用Java。写过一些Android的小程序,还有好些课程作业,用Android Studio,Eclipse等,也都是Java。Python应该也是从研究生起才开始用,当时用来做NLP的作业。发现脚本语言用Python写十分方便,后来的两份工作中Python也用作同样的目的。当然也有用Python写的相对更大的程序,我就主要是user而不是developer了。其余的语言大抵都是为了写简单网站而学习的HTML,CSS,PHP和JavaScript了。

这次学习Go,感受到了很多知识融会贯通的乐趣。比如开头的package main,让我想到Java;import又会想到Python。在一步一步的学习过程中,又会发现很多与C和C++相似的点。这些都是很有意思的体验。函数和变量的定义让我感受到语言发明者想distinguish这种语言和其它语言外观区别的努力,而在pointer和reference的使用上又让我看到C语言在几十年前的智慧。defer的出现也会让我觉得像是类似finally的定义。slice和map是这个tour中介绍的两种常用数据结构。slice的cap和len很耐人寻味,我觉得会是一个容易产生bug的地方。在function closure这一节,我又回过头去研究同样的功能是如何在C++中实现的。花费了不少的时间,写出了一个C++ function closure版本的Fibonacci求和代码。与Golang相比,C++如果没有了Lambda Function,写出这样的功能一定要大费周章了。Function closure让这个function本身有了状态,可以存储只有自己可见的变量,应用场景还是很独特的。

Go里面的method,struct和interface让我想到了当时看到过的C的代码,C用各种struct和function pointer来实现一个类似C++一样的面向对象编程的架构。这里Go把这些都统一起来了。看完了Goroutines,我猛然有种想用Go重写一遍现在project的C++代码的冲动。许多当时用C++繁复的实现,Go都可以有更直接和简洁的替代方式。channels和select是现在这个project的核心关键————我们用redis的subscribe和publish的功能以及Linux的select()来实现一系列的channel给进程间通信,channel的性能很大的影响了整个程序的运行。我很好奇Go的实现是否能不单单简化代码,还可以提升整体性能。

很期待能在接下来的时间里《GoLang从入门到精通》。

2019年8月23日星期五晚,美加边境的我成为了一个笑话。加拿大签证的日期与美国签证的日期格式大相径庭——日/月/年 v.s. 月/日/年。于是我被拦在了国境线,签署了一份request to enter Canada被回绝的拒信,重新送回美国境内。与我说再见的——骑行至温哥华的成就,以及接下来的九天智利之行,仿佛梦一场。

生活到底无法一成不变的。即使每天,每周,每月,每年如一个个的循环,循环上的每个点都仍需要不尽相同。就好比早上起床的时间,从家出发去往公司的路,停车的车位,喝的饮料的种类,中午食堂和午餐的选择,偶尔划水时翻看的网站,下班后去的超市,买的蔬菜或是肉,睡前看的书或者剧的类型,睡觉的姿势。如果这些往复的活动都一成不变,很快就会发现生活进入了一个死循环,除了时间作为计数器告诉你循环了多少次以外,人就如同空转的机器了。只可惜本来期待良久的打破这个routine的机会与我开了一个玩笑罢了。

很少翻动过往写的文章,猛然间发现已经过去十年。当时的自己还在烦恼的话题,现在只不过换了一个而已——同样的烦恼,同样烦恼的人。我愈发觉得自己变得更加只属于自己了。我的意思是,更进一步的发掘到了只属于自己的一个人独享的痛苦,和建立在这种痛苦之上的快乐。

我选择登山和滑雪。我耽于这种腠理肌肤所及的疼痛后带来的成就感,和即达目的便如释重负一骑绝尘的爽快。我担忧这种饮鸩止渴似的运动,让我选择性的遗忘生活中错失方向踟蹰不前的窘境,以及虎头蛇尾撒手而别的不负责。生活不是登山,没有一条事前规划好的路线和一个既定的终点;也不比滑雪,享受任何快乐的时光时背上的一切包袱也都无法卸下。好在登山时同样会有迷失方向的状况,肩负三十升的背包滑雪也时刻提醒着我旅途尚未完成也同样不能松懈。

当然——“所以兴怀,其致一也”。每曾抵达一处不曾抵达之处,总会感叹:“夫夷以近,则游者众;险以远,则至者少。而世之奇伟、瑰怪,非常之观,常在于险远,而人之所罕至焉,故非有志者不能至也。”这便是“仰观宇宙之大,俯察品类之盛”的乐趣了。

Know Your Body

每一次运动都是一次对自己身体更进一步了解的最佳机会。

昨天已经是七月中旬——七月十四日,竟然还能背上板去滑雪。这次从Mowich Lake Campground出发来到Observation Rock。于是Mount Rainier的三面approach都已造访过了。虽然此行的approach很长,drop的距离也很短,但是雪况意想不到的不错,沿途的风景也值得留恋。学习认识了Avalanche Lily——Erythronium montanum,和Glacier Lily——Erythronium grandiflorum。

  1. Snowboard boots 在上山过程中基本没有不适,但是下山过程中由于鞋尖部份较硬,脚趾的指甲与鞋尖部份撞击导致疼痛。之后可以在鞋尖处垫一些cushion做预防。
  2. 脚踝与boots的磨损。两只脚的脚踝的内下侧和外后侧都有水泡。之后的trip前可以做一些相应的预防措施。
  3. 背包的腰带系紧可以防止肩部的酸痛。

除了以上三点,以及正常的大腿肌肉酸胀之外,基本没有其余身体上的不适。回想一周前的自行车骑行,除了相对较冷以及大腿正常运动后的酸胀之外,也没有出现类似去年的膝盖疼痛。对目前的身体状况也算是比较满意。

另外keep以下note:

  1. splitboard的skin的养护需要注意。不能将有胶水一面与没有胶水一面粘合。及时晒干也很重要。
  2. 带上ski straps。
  3. 水袋是长途的mandatory,水放在背包中十分不便。
  4. 可以带上湿巾纸,爬山过程中满脸都是灰(face palm)。