阿里巴巴实习总结

去阿里实习了一个月,回来之后想总结一下这段时间的经历。可惜实习时间太短,只来得及匆匆一瞥,学到的东西可能不多。 初次体验程序员的生活,感想还是蛮多的。

阿里给我总的印象,不愧是巨头公司。阿里内部到处造轮子,技术的覆盖面看起来非常广,文档看起来也蛮丰富。之所以是看起来, 是因为实习生没权限看其他组的文档,很多项目我只知道有一个牛逼的名字和简介。我说学到的东西不多, 很大一部分原因是我只能通过跟师兄问答的方式了解一个项目。如果你不想进阿里的话,我个人是不太推荐来阿里实习的。 当然你要是只想刷个成就当我没说。

我加入的组做的是搜索引擎,平常工作很大一部分是运维,但是实习生没权限。不过这倒是帮我避开了几次加班就是了。 其实服务器没出事的话是没有加班的,再加上我们部门的结对编程制度,总的来说工作的强度还是比较低,没有外界传说的那么恐怖。 组里的同学对新人也很友好,基本上是有问必答,加上师兄经常跟我结对,要是开了权限就更好了。

因为我实习的时间比较短,所以主管给我分配了一个探索性的任务。简单来说就是我们这引擎要给用户提供一个 DSL 进行高级定制,既要隐藏引擎内部的实现,又要保证效率,看这玩意要怎么搞。我加入的时候这个项目组刚成立,三个人搞调研,走的时候 demo 刚好做完,大部分技术问题心里都有了底,也算是全始全终。当然,要是开了权限就更完美了。

最开始主要是测了 Luajit 的效率,纯 Luajit 的话数据还是蛮好看的,但是一跟 c++ 交互就惨不忍睹了。主要问题是 Luajit 内部数据结构跟 c++ 的是不一样的,转换的开销很难避免,再加上我们还有其他需求,到最后只能把 Luajit 魔改一番才可能满足用户的需求。至于其他解释型语言则更加不堪,因此我们决定试试自己实现一个编译器。这个测试过程大概持续了一周的时间, 最大的感想是师兄看文档的速度真的快,我还在一行一行的读,他已经直接跳到重点了。打不赢打不赢。

走编译的话大方向是用 LLVM 做个魔改版 JAVA 编译器。反正先做个 demo 踩踩坑,JAVA 语法特性被我们砍得七零八落。 实现起来感觉 JAVA 跟 C++ 非常像,就是多了个 GC。可能真正的生产代码还有一些利用 JVM 特性的 trick,不过我们都不用考虑。 我做的部分是 AST 生成之后,构建 Symbol Table,进行 TypeInference,还有其他的琐碎工作,过程中有一种浓浓的搬砖感挥之不去。 LLVM 的 API 是我师兄在搞,再次感到自己洋文水平太差,只能干干搬砖的活计。

做 demo总共花了三周,最后做出来还是蛮有成就感的。这三周学到了蛮多东西,比如我终于尝试了 Magit 大法。 之前的项目全都是瞎交 commit的,这个习惯要改。唯一的遗憾是这个 demo 写的还是比较随便, 没有用上什么工业上的技术控制代码质量,还是任务的性质决定的,怪我实习时间太短。

另外有个意思的事情。我们组使用 emacs,screen 之类的工具做结对编程,因为我之前就是 emacs 用户,学起来基本没啥难度, 我们主管曾经表示很惊讶。这次还用到了 docker,ssh,perf 之类的工具,但是要么就直接调前辈们写好的脚本, 要么就只是看师兄在用,了解的虽然不多,但是工作中也没有造成多少障碍。 另外有个叫 perf的东西我之前听都没听过,查了一下功能还感觉挺魔幻的,真是长见识了。

最后做个总结吧,巨头公司就是巨头公司,它能给你提供的学习资源不是挣扎在生死线的公司可以比的, 这次虽然只待了一个月,学到的东西跟学校里的肯定是没法比的。在我们部门工作说实话也很愉快,还可以选择locate杭州。 当然,不同事业部区别还是蛮大的,大家谨慎入坑。