迟到的年终总结

那天一位老友问我怎么还没写2015年总结?

为什么要等我的总结?

他说他也准备写,想先看看我的…

我突然想到了学生时代的一句话:喂,你作业做好了借我抄一下。

 

其实,今年写这么晚主要是在等一个时间点,因为一些事只能在这个时候才方便说。

现在时间点已过,我就随便说说吧。不像往年,我今年就不列自己看了多少书学了多少东西了,那样太俗。

(๑•́ ₃ •̀๑) 啊。。。别揭穿我,其实真相是,我今年真的没看几本书…

 

动荡

如果用一个词来形容今年的工作,那就是:动荡。

而且不是一次,是两次大动荡。

 

年中老大离职,我也出去面试了

第一次动荡的起因是我们团队的老大离职了,然后掀起了一波离职潮。

不出意外,我也出去面试了,收到前同事的邀请,去面试了一下。最后虽然没去,但是这次面试的过程让我很难忘。因为二面的时候,是我心目中最理想的面试。

面试不是为了让对方难堪,而是要努力挖掘出他的所有能力,给我二面的那个人做到了。

面试的过程中,他翻阅我的简历,根据我写的东西,一条条地考察。

 

什么是好的技术面试?

例如我简历里提到的 Netty 长连接项目,他先让我介绍了一下项目背景,然后就开始提问题。

(备注:问题的细节有点记不清了,可能会漏掉几个问题,但大致是这样的)

他由浅入深地问了很多问题:

  1. 你们为什么做这个项目?
  2. 为什么不用 XXX 方案?你们的方案有什么优势?
  3. 做项目的过程中遇到过哪些坑?
  4. 解释一下什么是堆外内存。
  5. Linux 进程间通讯有几种方式?
  6. 项目中用了 Java 并发编程,那么 Java 的ConcurrentHashMapAtomicLong等底层是怎么实现的?

 

前两个问题,只要项目的确是自己做的,那没什么难度。

第三第四个问题,我个人觉得自己答得很好,因为这部分我的确遇到了很多坑,不仅填了坑,还发现过 Netty, AsyncHttpClient 等框架的 Bug。特别是 AsyncHttpClient 的 Bug,我提交了 Pull Request 也被官方 Merge 了。

第五个问题,卡住了,不是科班出身,真的没去看过相关的书,惭愧,Linux 内核相关知识要补上。

第六个问题,虽然 Java 并发编程用得很溜,也知道它们底层的核心是 Compare and Swap,但是没能把它们底层的实现细节说出来。

当他发现我在这个话题上开始答不上来的时候,他就会开始换话题了。

 

就这样,我被他虐了一轮又一轮,每个话题都会被问到我不会为止。但我和他聊得还是很开心。我有不会的没关系,知道了可以去补,但我把我会的都发挥出来了。

这就是我心目中最好的技术面试。

 

什么是好的非技术面试?

除此以外,他还问了我几个无关技术的问题,也让我很钦佩:

第一个非技术的问题:如果你和别人在某个技术问题上有不同意见那怎么办?

我的回答是:两个聪明的工程师之间交流,如果有不同的意见,那么一定是某一个人误解了另一个人的意思。那么自己就要尝试重新听一下对方的观点,或者更清晰地表达一下自己的观点。从我和同事共事的经验看,因为技术是很理性的,只要双方都是聪明人,基本都能达成共识。

他点了点头,没说什么。

其实我也很想说这个问题的下半句:如果遇到了不聪明的人,就要用不同的手段了。首先,什么叫不聪明的人?如果一个人认为 Bug 只要问题不严重,放着不修是没关系的。和这样的人讨论问题,很多东西都是没办法达成共识的,因为你们的价值观不同。

遇到这样的人该怎么处理?

如果这个项目是我主导的,然后我 partner 不认同我的观点,不想修,那我就花时间修了这个 Bug。价值观的东西,你说不了别人,你只能去影响别人。庆幸我没遇到过这样的 partner,我遇到过的 partner 都非常 nice。

如果这个项目不是我主导的,我只是帮忙的,那我只会表达我的观点,但做不做不关我的事,后果也是他自己承担。 这样的例子遇到过太多了,遇到过好几次业务团队找我们帮忙做东西。在某些点上我们总是劝他们要注意,不然出了事很麻烦,很多人总是以时间不够为借口。我想,只有让他吃几次苦头他才会真正明白吧?

 

第二个非技术的问题:你平时遇到困难怎么解决?你有没有总结过解决问题的思路?

听到这个问题,我很意外,因为我真的从来没去思考过!我当时简单地说了几句:先自己搜索,搜索不到自己看源码,再解决不了去找公司内的相关大牛。

这个问题真的很棒!当时说答案是临时想的,虽然我平时是这么做的,但没很好地表达出来,所以也想整理一下:

  1. 首先去搜索,一定要用 Google,最好用英文搜。因为你遇到的问题很多人都遇到过了。
  2. Java 项目都是开源的,可以尝试自己 Debug,在这点上我也给不少开源项目和公司内的项目抓过小虫子了。
  3. 开源项目可以直接到 Github 上向作者提问,活跃的项目作者回复地很快。(Stack Overflow 也可以)
  4. 一些诡异问题可以尝试用控制变量法去找问题,根据以往经验,越是诡异的问题,起因越2B。
  5. 如果一些难题超越了自己的技术领域,那就需要去找到相关书籍好好地读一下。有些问题会豁然开朗。
  6. 同一家公司有各种领域的牛人,遇到自己技术领域外的东西可以请教他们。

 

很想认识一下那位给我面试的人,这次面试让我收获了很多东西!

 

年中风波后,我留了下来

最后,我并没有走,原因很多,其中一个就是年中晋升后,我主动要求带项目,新老大也认可,并把一个项目交给了我。

我想对我来说这是一个很好的机会。

我带的同学非常聪明,研究生毕业工作半年多,技术上的东西一点就通,你只要告诉他有这个东西就行了,剩下的他会自己去学习。

pair-programming

我很感谢刚入职的时候带我的 mentor,因为我很多好习惯都是受到了他的影响。

所以,我们学习带人的时候,尝试每周进行结对编程,目的就是希望把这些好习惯带给我带的同学,因为这会让他受益匪浅;另外带给他技术上的广度,如果他自己会钻研,那么他的技术进步也会很快。

其实我说的这些好习惯也都在这本书里:《程序员修炼之道》,在不同的阶段重读这本书,你会有不同的收获。很多东西你经历过后就会有更强烈的共鸣。

 

别人是自己的镜子

在结对编程的过程中,有一个小插曲:

有几次我发现我在码代码,他看我的时候总是心不在焉,时不时地去看手机。

说实在的当时我心里会有点不高兴,我安排结对是希望你学习到更多的东西。

但后来我忽然意识到,我在他码代码的时候,会常常拿起手机。

接下来的结对中,我自己先控制好了自己,不再去摸手机。果然后来他也不再摸手机的。

别人是自己的镜子,想要别人做到,自己必须先做到。

 

想起了春晚,不断弘扬社会主义核心价值观。

但是,家长自己都做不到的事情却要求孩子做到,这不是很可笑吗?

是的,我之前也很可笑。

 

美团点评合并,我离职了

几个月前还在打架,几个月后竟然合并了。

这是高层的决定,我们做不了什么。真的没想到,前几个月我还在和美团的人在知乎上撕逼(撕逼贴)呢,几个月后我们竟然要去美团做技术交流了。还好那次去了美团没人认出我来,不然我是不是要被揍?

这一切来得太突然,让我静一静…

所以,大家关心的无非就是这几个问题:为什么走?你要去哪?

为什么要走我就不细谈了,个人选择问题,每个人的情况都不同,没有太大的参考意义。

 

那我去了哪?

是个创业公司,这次合并风波后,我也没主动出去找工作,要找也等年后拿完年终啊!谁那么傻不要年终了?

但是在10月底左右,前同事来找我吃饭。恩,这种吃饭大家都懂得。

其实我一开始是拒绝的,一百个创业公司,九十九个死,还有一个半死不活。真正能成大事的很少。

 

我为什么去?

最后,我过去的主要原因就是因为那边的团队和我信仰的做事方式。

那边有两位我在点评最佩服的人,不仅仅佩服他们的技术,更佩服的是他们的做事方式。

我喜欢的做事方式不是堆人,项目来不及就加人。我喜欢的做事方式是,能用工具解决的问题就不要去用人来解决,没有工具就去创造工具。

还有那边面向的是国际市场,竞争的方式不同。

国内的竞争方式真的很奇葩,有多少 App 为了刷日活不断地在后台发推送?而且还关不了!

我不希望一天到晚把精力花在这种东西上。这样的工作我做得不开心。

 

如果,这样的团队,这样的做事方式,能做成事,那么皆大欢喜。

如果做不成,那我的信仰可能会有点动摇了,难道真的是这样?对的不一定是好的?世界就是这么残酷?

不管怎么样,我想去证明,对的会是更好的。

 

为了信仰

最后,2016年,为了信仰,努力吧!

keyboard

本作品由 Dozer 创作,采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。