实习结束一个月感悟

从公司回来,到明天的毕业图像采集,差不多满满一个月了。

从南昌火车站下车,坐232回到麦庐,再从菊圃路口懒洋洋地走到学校后门,如此熟悉的小路,如此熟悉的灯光,也许后面的日子里,我能重复走过的次数屈指可数了。
麦庐后门
本来从北京回来时就想写一些东西,然而一直在折腾Linux环境之类的东西拖到了现在。这一个月里,脑海中频频地回荡着在京城的三个月时光。七月中旬到GeneDock实习,十月中旬返校,这期间经历了许许多多的事情,在学习、在心智、在眼界,都有不小的收获。

一:融洽的公司氛围和学习环境,标准化的工作流程

  入职的那天,正好赶上了公司的all-hands meeting,感受到公司氛围的同时也感受到同事们的热情。一开始感觉最严肃的CTO,他叼着棒棒糖从办公室出来时顿时画风就变了。
从入职手册、到实习协议、再到其它的新人手续等,无一不感受到公司做事的认真和细致。还有同事们的热情,总能消除在身在千里之外的他乡时而萌发的不安。虽然身在后端数据团队,却和前端、生信、计算等团队有好的互动。除了公司组织过的outing,周末也有相约去唱歌、去击剑馆,结识了一帮性格开朗的小伙
  公司的工作节奏非常规律,每周从周一的团队工作同步开始,总结上周工作周报,定制一周目标,所以在从周一就可以很清晰地定位自己这周的工作重心时什么。每天在忙完工作上的事情之后,基本上还有20%左右的时间可以自主学习一些别的东西,所以说有一个相对宽松的学习环境。
  除了每周的工作同步之外,公司工作流程的标准还体现在每个月的All-Hands,OKR,邮件以及Github上的issue发起等。所以和工作上有关的事情,基本都能通过一些途径追溯到起源、负责人及处理结果。

GeneDock

二:从不安到沉着,学习不应该浮躁

  刚到公司的被分配的任务,就是维护Java SDK和使用SWT开发的跨平台客户端。这是最基础的工作,又是我最想说一说的工作。不得不承认,java的SWT框架相对现在的技术比确实算老人了,但是公司在客户端选择SWT的技术也是基于业务的考量。数据客户端只是一个辅助工具,不论时GUI还是CML,都是基于Java SDK为生信研究机构提供的一个“壳“工具用于上传下载基因数据,主要是从易用性和性能上考量,所以Java图形框架的跨平台成为了一个很好的选择。
  接手GUI部分的代码时,略有点吃力。毕竟是前人的代码,再加上大量的业务和渲染等逻辑掺杂在一起(听说是因为赶进度),代码的可读性的确不高。我后来的办法,是使用IDEA的类关系可视化的工具,自动绘制了一张UML类图,通过UML类图厘清各个类之间的关系,然后使用 代理模式组合模式 重构了代码,将GUI客户端中的区域独立为组件,并分离work和view(类的功能专一性),同时将work中的耗时操作放入线程中异步执行,这样就解决了GUI渲染线程被阻塞造成客户端卡顿的不友好体验1
  当然,接手GUI部分的代码时会有些困惑和惶恐,毕竟我的当前定位是后端工程师,而觉得客户端不应该是我考虑的问题。后来在这一周的对客户端代码重构的过程中,渐渐发现,在程序结构的设计和思考上,JavaWeb和客户端亦或是其它的系统,都有着共通之处。从结构的解耦、到如何提升性能,什么情况下使用哪种设计模式能够使程序的可维护性和可拓展性有效提高、如何通过日志追溯偶发性的Bug等等。还有在解决碰到的问题时,阅读了大量资料时,偶尔还会有种“参悟前人的设计哲学”时的灵光一闪。
  此后,陆续地接手其它方面的任务,每一种类型研发任务,深入地去思考,都可以琢磨出一些有意思的东西。并且偶尔写一些shell脚本,帮我完成一些自动化的工作或者测试,然后自己安心地做其它的事情,这个时候的总能被自己的geek心陶醉哈哈哈。

三:从外沿到内沿,了解自己的产品

  实习时,如果只是局限与手头上的一些工作,那就失去了实习的意义。就好像在学校做的事情一样,只是换了各地点,提高了点难度。作为实习生,leader昕爷布置给我的任务相对比较轻松,即使偶尔写一些排序、研究一些并发,相对的还是处于比较外沿。公司为基因数据提供存储、计算和工作流程配置的服务,如果我对了解这一套服务是怎么运行起来的一点都不感兴趣,怎么能成为一名合格的程序员呢。有了这么一个目标,就知道如何把握实习的机会开阔视野了。

  • 和同事交流。不论是编程上的问题,还是业务上的问题,都可以向同事请教。GeneDock的后端服务涵盖了数据计算生信运维等团队,彼此有部分交叉的地方,很多时候工作上的问题都要相互配合。不过在每个人每天都有自己的工作目标,所以不能过多地占用别人的时间。所以我常常是在午餐和同事聊聊,了解他们各自所在团队每天在做一些怎样的工作。

  • 看文档。GeneDock官网为客户提供了一系列的帮助文档,这些文档中,包括了一些工具的使用手册、基础服务的部署、工作流的配置等,虽然是对外文档,但是作为了解业务的资料,不失为一个很好的选择。

  • 尝试搭建公司服务的测试环境。公司所有的服务都是Docker化的。简而言之,就是将不同团队的环境打包在Docker中,部署在北京、上海、广州等地的服务器上,组建成集群,并通过Nginx配置反向代理等。既然各个团队的服务是Docker化的,那么通过运行Docker镜像就可以在本地简单模拟出公司服务的测试环境了。并且通过进入各个镜像内部,查看Nginx的配置、日志等信息,可以大致了解各个服务之间是如何通信、如何协同作业。

四:公司的技术栈与设计理念对自身能力提升的帮助

  我觉得对于实习生最有价值的收获,就是了解公司规范化的工作流程和接触公司的前沿的技术。GeneDock的技术栈中,服务Docker化RESTful的API设计,让我对系统开发有了新的认识和思考。

服务Docker化

虽然有在学校了解Docker,但是在学校使用的Windows系统,基本上没有使用过Docker部署什么服务。在公司使用的是Linux系统,同时公司服务的Docker化,正好为我深入地学习Docker技术提供了契机。通过操作公司服务的Docker容器,渐渐熟稔Docker的使用,并且通过自己制作的镜像,搭建出一些伪分布式集群做一些实验,如使用Docker部署环境模拟Nginx反向代理、负载均衡。这个时候,Docker的环境打包、快速部署、方便集群的好处深深地俘获了我的心。回到学校,在学习Hadoop的分布式环境的部署时,我同样也使用Docker模拟出一个分布式的环境,只需部署一个Hadoop的Docker环境,便可以快速启动三个Hadoop容器,并且通过shell脚本,快速配置master机器和slave机器(Linux从入门到写出shell脚本来自动化完成一些任务,还得感谢《鸟哥的Linux私房菜》的指导、项目组里强哥的帮助、以及使用Docker的鞭策)

RESTful风格的API设计

公司的所有接口都是使用RESTful的设计风格对外开放。我查过RESTful风格的接口在设计上的优势,它是无状态的,同时能给予前段最大的自由度,将前后端的职能完全分离。同时如何设计RESTful接口的语义也是很有哲学性的思考。每次OKR或者团队工作同步,昕爷的设计文档中都会有api的语义和谓词(GET、POST、PUT、DELETE)的说明,我阅读过这些设计文档,对比公司的新老API,新的RESTful风格的API,将所有的接口抽象为一种资源,通过配合谓词来确定每个接口的调用以及将要完成的操作。《RESTful Web Services Cookbook》说,这是RESTful风格的一种设计观点,所有的要操作的对象都是资源,“/”用于定义资源的路径,所有的“CRUD”操作都应该通过谓词确定,URL中不能携带其它动词。如GET:/class/1/stud/zw 对应的是获取一班zw同学的信息。而我之前在学校里的SOA服务设计的接口都是类似GET:/get-student?class=1&name=zw这种类型的。所以利用下班回去的时间,我使用Spring开发了一个Java Web服务作为练习(ERP-NOTEBOOK),在接口的设计上使用RESTful风格,并且不断思考不断修改,让接口更符合资源操作的概念

五:一些杂话:在北京的生活

在北京的这三个月的生活还是挺难忘的。

  • 北京的房租比较贵,公司在北三环,我在自如上租到了北五环外,虽然远了点,但是便宜而有品质,唯一的缺点就是每天要走三公里到地铁站(毕竟公交车总是不准时)。
    我的房间)我的房间

  • 为了代步我买了个滑板,踏着魔鬼的步伐(因为有些路面太粗糙我在上面抖得腿都麻痹了好么)。一次在滑板上失足,被拉了个横劈叉,被某Sa嘲笑了很久
    滑板

  • 公司十点上班,七点下班,而我基本是八点半出门,十点回到住处。有时候因为一些事情,还可能得追着末班车。每天漫长的上下班的路,幸好有书和某Sa在电话里的陪伴,一个人却不孤单。
    霍营公交场
    [一个人在霍营公交站]

  • 从白各庄到平西府站的小路上,我经常看见一群羊 ~ 一群羊 ~ 群羊 ~ 羊 ~
    平西府的羊

  • 印象最深的晚归是公司的台湾实习生要回服兵役得回台湾,我们几个在击剑馆闹腾了一下算是饯行,然后折腾得比较晚没赶上末班车,在子时的平西府到北清路的一公里场的没有路灯的小路上走着,羊粪喂和猫叫声都要把我的心脏逼出来了,好刺激好有趣。(就是那条有羊的路)

  • 我那个公寓后来搬来一个俄罗斯妹子,嗯,写的英文字母都很有俄罗斯味道

  • 在青龙峡的outing中,我们玩了飞索过江。当时我忘带学生证,突然想起来我的手机里有学生证照片,然后给售票员阿姨看和“撒娇”让她通融,然后那个阿姨就卖了学生票给我。一个同事在中途出故障在快到对岸时卡住了挂载江上,被工作人员划船拉回来,我们都哀怨自己为什么没有那么好的待遇。
    同事挂载江上一脸无奈
    [同事挂载江上一脸无奈]

  • 公司的台湾小哥怂恿我去北平楼买豆汁喝,然后我和他端着一直犹豫着走到志新桥北才喝,然后我被臭得一口呛喷出来,太拙,无图。

  • 六道口的夜景有时候还挺漂亮的(无滤镜)
    六道口

  • 一直听说过故宫大红门后的猫的传说,原来在故宫真的能看到猫
    故宫的猫

  • 公司两周年吃零食吃到撑,还有一个小徽章(我们的征途是星辰大海)

  • 在北京我还得到提升的另一件事是“厨艺”!回到住处,学习累了,就自己做些吃的东西犒劳自己。自如的服务真心不错,有个小小的厨房。一开始做的东西,卖相不好也不好吃,后来我爸妈急了,视频指导我下厨。还有某Sa,也常常指导我做一些好吃的。面对疾风吧:
    [某Sa给我的围裙]
    1
    [烤肉x1]
    2
    [烤肉x2]
    3
    4
    5
    6
    7
    8
    9
    10