阿里工程师看待学习和工作

对程序员的建议:
像海绵一样吸收知识
没有不值得解决的问题,没有不值得学习的技术
每学一个知识点,都写一段代码去验证,一方面是验证,一方面
是练习,另一方面也是加深理解,知道真正掌握这个技术
一个计算机工程师应该以怎样的态度和方式来工作和学习?
1. 发现问题,解决问题,不要绕开问题本身;
2. 多做事情,不会吃亏,即使不是你的事情
3. 保持对技术的专注和钻研,把工作当事业

阿里工程师如何做一个项目?
例如我们要实现一个限流的服务,就是允许一个租户的QPS最高多少。首先要界定问题的边界(确定范围),包括:要不要考虑网络成攻击(可能被其他
模块处理掉)、未来一段时间业务的规模,系统稳定性、架构扩展性等。
这些问题确定后,会有一系列的技术方案成为技术选型。那么如何判断采用什么技术方案,当时不是最新最酷最好的,要考虑将来部署环境,上下游环境。最重要的这是一个分布式需求。简单来说,N台服务器维护一个QPS值,这后面的分布式理论,朴素来说就是CAP,在CAP三者不能同时满足的情况下,应该降低那个并保证业务的目标。为此,我们参考分布式的BASE模型,降低了一致性的需求,采用分区和主体配额池结合的思路解决了大租户的流量控制,而针对长尾租户采用了另一套控制来保证精确限流。同时考虑第三方模块和非关键模块挂掉或者降级中的应急预案,以及模块部分宕机或者机房断电导致的服务不可用,以及某些服务的单点问题而设计完整的稳定性方案。当然最后还要考虑扩展性方案,如果需求规模突然变大,但是整体是有边界的。总结起来,整个项目要有明确的目标和阶段对应的关键指标,做到可观测、可评估、可扩展、可恢复、以及容易交付给其他人继续研发和维护。我不认为自己做的好,但是当逐步完善一个系统时,真的挺快乐的。

如何学习?
持续的思考和以开放的态度和其他同学沟通非常重要,互通有无。我觉得我目前最大的
优势可能还是在工程领域,主要是服务后端开发和数据平台管理这边,主要是思考和经
验比较多。我会在理论和实践两个方面继续增强自己的能力。与此同时,我一直在储备
自己在人工智能方面的知识。得益于我博士论文期间在信息检索方面的思考,我很早
就发现了这个能让我着迷的领域。
这里稍微聊两句人工智能领域,虽然一些人说这里面也就是所谓的调参、特征工程、训
练深度网络等。这些真的是门外汉才会这么说。真正里面需要的是理性的思维,解决这
种没有明确路径可循的问题需要非常深入的思考、尝试,经历无数次失败可能有一点
小收获,还要把这种小收获用最精确的数学语言阐述出来,为后续的研发铺平道路。

目前我刚刚读完NLP领域的一本综述——《统计自然语言处理》,正在重新构建自己的概率论和统计学的知识体系,尽量做到基本的概念信手拈来,然后找一个小的领域进行深入的思考和尝试。对于我来说,找一个点建立一个模型,改改参数出一篇论文的诱惑不大,我希望能够研究前人的研究成果,在理论深度有一定的突破。

在这个领域,那些谈35岁就转管理的程序员可能根本就无法明白。当遇到一个可以持续投入精力去钻研,并且越钻研觉得越难的事情的时候,对于我来说,何其幸运。更何况,我不认为做到35岁转管理是必要的。管理并不好做,很多人以为管理就是分配工作,技术人员都是心高气傲之辈,能力低的根本领导不了,只能领导能力更低的。而且真正的管理和写代码一样,也是一门学问,一门理论与实践相结合,需要边探索边实践的学问。人家让你领导,是把自己的发展托付到你的手里,所以是更重的责任。
总结下来就是: 持续解决问题,持续思考,持续以开放的态度与同学交流。

 

posted @ 2017-11-30 23:34  渐入佳境coder  阅读(137)  评论(0编辑  收藏  举报