微信号:infoqchina

介绍:有内容的技术社区媒体

18年互联网老兵童剑:我与技术的爱情长跑

2017-12-22 08:00 童剑
作者 | 童剑
编辑 | 王庆 祁佳文
视频剪辑 | 汪春良
童剑,白山联合创始人兼首席技术官,EGO 北京分会会员。前新浪研发中心总经理,2016 年 5 月加盟白山,迅速搭建和完善各产品线技术梯队,构筑云链产品技术体系,带领团队推出云存储、云聚合产品,助力白山抢先布局云后市场。

视频9分钟,建议在WiFi环境下观看

技术之路,我成了长跑选手

是的,在技术之路上,我走过了十八年。我经历的公司不多,但也经历了多个岗位的变化。一路而来,很多同事来来走走,而我始终在同一家公司坚持,很多人说我是长跑型选手,我也觉得确实如此。我对技术的确有着持续的好奇与热爱,同时,我也一直专注在喜欢的事情上。

如果把我对于技术的热爱比作爱情,那这段爱情就是长跑,可以分为 5 个重要阶段。

大学时期

上世纪 90 年代,个人电脑开始流行。我和同学攒了人生中第一台电脑。除了学习、玩玩游戏,很快我就学会了拆电脑、再组装,观察 CPU、内存等配件的构造,还学会了格式化磁盘、重新安装 DOS/Windows 系统,学会了维修电脑,解决各种电脑问题。很自然的,开始帮同学、朋友攒电脑、修电脑,最夸张的是有两年暑假、寒假,每次回家除了行李,还必定拎着两个大箱子,一个装着主机箱、一个装着显示器,都是为朋友带回去的电脑。

在大学期间,我也为编程技术着迷,不满足于专业课学的 C 程序设计、汇编语言、数据结构等课程,还自学 80386 汇编、TCP/IP 组网技术,自己研究电脑病毒,编写病毒程序来验证很多稀奇古改的想法。

这些经历让我既能深入编程技术,又能深入硬件和操作系统,不知不觉我打下了牢固的计算机技术基础。

初入职场

1999 年大学毕业后进入新浪,原本喜欢底层技术的我,阴差阳错成为一名 Builder,类似于现在的前端,那时就是用 HTML、CSS、Javascript 编写网页。从那时起,我正式进入了互联网行业。由于大学时期研究电脑病毒的经历,我开始有意识地在业余时间去学习网络安全技术,也会在下班时间试用一些安全工具,尝试做安全扫描、漏洞探测、渗透测试,也因为网络中发起扫描的流量过大,曾经几次导致公司内网瘫痪。

快速成长

2001 年 7 月,我如愿转岗到系统部的网络安全团队,开始系统地做安全管理、安全事件处理、安全加固等工作。逐渐的,在工作上的很多成果,让我获得了领导的认可,我也开始接受除了安全之外的其他工作。我记得一天凌晨 2 点,领导给我打电话,说西单机房出现网络故障,让我迅速参与处理,接完电话我兴奋地打车奔赴机房,因为我理解这个故障的严重性,我为自己能在这个时刻被领导信任而无比开心。

因为不挑活的态度,这几年中,我还参与了 CDN 系统、监控系统、集群化配置管理系统的开发;还做了很多软硬件测试、网络问题排查、系统故障处理的工作,逐渐拓宽知识面,提升不同领域的深度;而长期的安全工作,更加培养了我全局性思考的能力;这些都为以后打下了更扎实的基础。

转型管理

做了几年安全工作后,我越发意识到安全管理很多都是在做治标不治本的事情,安全最大的问题,就是在和不完善的技术体系的斗争。也意识到一个好的基础技术平台的重要性。为了解决每个业务孤岛造成的不同问题,我和公司 CTO 都认为需要搭建一个新的技术平台,位于上层应用之下、和底层网络及硬件之上,成为一个新的中间层平台,来隔离底层系统的复杂性,同时又让底层服务器的变化和扩容对于应用透明,中间层为上层应用开发提供统一化、标准化的开发和运行环境,比如 PHP 应用开发和运行环境、MySQL 数据库、Memcachd 缓存等服务。

于是我在 2004 年组建团队开始研发“动态应用平台”项目,解决了负载均衡、多机房容灾、横向扩展、无单点故障等问题,到 2006 年开始成为公司主力推广的开发和应用托管平台,实现了全公司开发环境标准化。2007 年谷歌推出 GAE 云计算服务后,我们也意识到“动态应用平台”就是一个私有的 PaaS 平台。这个平台在后期平稳地支撑了微博业务的发展壮大和爆发。在后面多年的职业发展中,我也经历了是否要转型纯管理岗位的抉择,也承担了更多不同业务的研发管理历练,以及晋升技术总监、研发中心总经理这些岗位的变化。这个过程中,我从一名技术人员,成长为了技术管理者。

创业新征程

在新浪期间,我参与了国内云计算的萌芽和发展阶段,在 2009 年带领团队研发推出了中国第一个 PaaS 公有云服务 SAE,2011 年推出了微盘个人云存储应用。一直想在云计算领域做更多探索,于是 2016 年加盟白山,与 12 位合伙人一同开拓云后市场,组建了云链研发团队,经过一年多在云服务领域专注的研究,云链技术体系开始落地。

打怪升级,工程师进阶指南
天赋比努力重要,选择比天赋更重要

在职业发展中,首先要了解自己的特长与特质。天赋、努力、兴趣往往是一个正循环,如果你的职业能发挥天赋,那努力的效率会更高。尽管“天赋+努力”能让你更快,但不一定是成功的充分条件,选择往往比天赋更重要。上大学时选择城市,毕业时选择职业,每次一选择都将成为人生的转折点。在岔路口要做好选择题,没有选择时,要不断丰富自己的知识面,等待机会。

工程师也要有品牌意识

现在是品牌的时代,工程师也要建立自己的品牌。我们到了陌生的机场,最保险的餐厅可能是肯德基、麦当劳,因为有最起码的品质保证,这就是品牌的力量。很多人对工程师的印象是拖鞋+格子衫,我们可以保留自由的工作习惯,重要的是自己每一次,特别是第一次给对方交付的工作质量,树立起自己专业、靠谱的品牌形象。

个人品牌的建立,重要的是先在一个细分领域做到一定深度,树立自己专业的形象,然后再扩展技术广度,并在新的一到多个领域继续做到足够深度。在这个过程中,始终做到高标准、超预期的结果交付。

技术有“捷径”吗?

我们一直被教育成功没有捷径,但做技术是有技巧的。

避免过度设计

过去我们经常听到某个产品是“十年磨一剑”,某某团队倾力打造,而现在则更强调“小步快跑”的持续迭代。避免过度设计,不要总想要大而全,先用最简单的方法解决问题,然后再不断升级。

站在巨人的肩膀上

经验往往是多年工作积累下来的直觉,在不熟悉的领域借用他人多年积累的经验,往往比自己琢磨更有效率。现在各种 APP、经验分享课,获取知识的渠道越来越方便,但很多人听着激动,没有行动。一个球员每天夜以继日地训练,也离不了一场高水平的正式比赛对于他的提升。我们站在巨人的肩膀上,学很重要,习更重要。

了解行业,倾听用户

对于负责产品研发的工程师与技术管理者,最重要的就是了解行业,倾听用户。我之前听朋友讲过他们最开始创业的经历,聚集了一批技术大牛研究谷歌最新技术,最后技术很酷,投资人也觉得很酷,但是始终没有市场。这就是技术与实际需求脱离。技术的本质是为了解决问题,所以不能有一个苗头就开始“自嗨”,在产品研发早期就应该与种子客户多沟通,不断校正产品方向,才能做成一个好产品。

用数据说话,擅问为什么

开始做一个项目时,很多年轻的工程师一般是拿到需求就着手做,但在做之前应该多问自己几个为什么:为什么要做?要解决什么问题?要达到怎样的结果?用什么方案更合理?想清楚目的之后,建立数据框架与模型,通过数据采集与分析,更清楚的了解项目需要注意的细节,比如业务峰值并发请求量、响应时间、用户数、用户活跃度等等。有时我们会接到客户的很多需求,通过问为什么,我们就能找到客户的根本需求,很多时候执行方案可能和你开始理解的完全不一样,而数据分析能让你更好的判断技术指标和方案选型。

职业岔路,工程师“学而优则仕”?

“学而优则仕”在中国是一种根深蒂固的想法,过去十年寒窗苦读,就是为了金榜题名。很多工程师也有这样的想法,到了一定的年龄之后会考虑转型到管理岗,但在我看来这是一个顺其自然的过程。如果有选择的机会,而自己又恰好有想法和意愿,可以尝试;尝试之后如果觉得不适合,或者想更专注于技术本身,可以再转回技术岗;如果没有转型管理的机会,也不必着急。

技术专家与管理岗位有不同的要求。对于管理岗位而言,相较于技术基础,还需要较强的沟通、协调、规划能力。他可能本身技术并不突出,但是他可以将任务分解,有效地推动其他人完成。

相互成就

管理其实是从亲力亲为到放权,再到相互成就的过程。觉得其他人做事不放心,是很多工程师刚刚转入管理岗位都碰到过的问题。任何事情都亲力亲为,自己很忙,其他人又没有成就感。我曾经用了几年的时间来适应角色的转变,直到激发团队来共同完成工作。

多年之后,我逐渐发觉,对于一个管理者而言,放权与推动只是第一阶段,更高级的管理应该是相互成就、共同成长。根据每位工程师的个人能力特点,分配不同的任务,让他们参与到决策的不同环节,激发潜力的同时,能最大程度地释放自己的压力与时间,去思考更高层面的内容。这时你会发现,整个团队的能力会有一个跨越式的提升。

抓住大的,聚焦小的

我们一直觉得管理者就是负责全局性的问题,是可以“抓大放小”的,但那不意味着放松细节,一个优秀的管理者,他不仅抓住大的,也要聚焦小的。对于重要的工作需要在细节上深入了解。例如一个技术方案,需要在开发前就参与讨论并关注每一处设计细节,根据经验提前发现不足,而上线前对细节的关注,又能对风险提前准备预案,从而保证项目上线时能够顺利开展。

分清团队的四种人

每个团队中,因为成员的不同成长阶段,都可以分为四种人:人口、人手、人才、人物。人口需要被辅导和培养,还不能独立工作,在研发团队中比较少见;其次是人手,可以起到执行的作用,做一些日常基础工作,他也会乐在其中;第三种是人才,他们更愿意去学习与挑战,也需要更多的成长与施展空间;最后一种是人物,他能够通过自己去影响其他人,更需要自我展示的机会。

一些管理者抱怨自己团队的离职率高,很有可能是没有分清这 4 种人:人才被当作人手,一些人物只能起到人才的作用,人口占比过大……团队可能还在高效率的运转,但是每一种人无法获取自己预期中的成长。管理者的工作就是识人善用,并争取为他们提供进阶的机会。

你不需要很全面

作为一个 Leader,你不需要很全面,但你需要有专长。例如白山有 13 位合伙人,市场、人力资源、销售、海外,根据产品线划分还有 4 个研发方向的合伙人,每个方向都有专人负责,组建了强大的舰队。没有完美的个人,只有不断趋近完美的团队。在团队中,每个人只需充分发挥自己的长处,而你的短处,可以由其他成员补齐。

除了管理者,我们还有一部分工程师选择在研发工程师的岗位上坚持十年甚至二十年,成为一名技术专家,我之前听说过微软有一位“海神”,他写了 30 年的代码,对行业的分析与前瞻性都是一流的,社会需要更多这样专注和资深的专家。

别成为“管不了”的专家

现在很多互联网公司的内部机制,都可以保证走技术专家路线也可以获得相应的价值认可。但始终保持好奇心和开放的心态是一名技术专家最可贵的品质。开放的心态既指持续的学习能力,对所有新事物保持开放的态度,也意味着懂得平衡。所谓平衡就是当自己专业性见解与管理者决策产生冲突时,能够接受管理,不要成为别人管不了的专家。

面对未知,探究永远在路上

对于新技术我们总会需要花些时间去了解。有些技术可能刮一阵风就吹散了,但有些技术却一直经久不衰。就像云计算,十年前我们很少能有人说清楚云计算是什么,甚至一些颇具影响力的公司一开始也不认可这种概念,而现在机场、电梯间我们随处可见云计算的广告。

技术一直在发展,如果采取消极的态度闭门造车,很容易被时代抛弃。电影《乘风破浪》中徐正太囤积 BP 机,我们现在看来觉得非常好笑,但是我们却无法保证现在我们看好的技术,会不会成为下一个“BP 机”,所以要保持开放的心态,多了解新技术,并在工作范围内尝试寻找落脚点来验证。

例如安全产品,十多年前防火墙就依靠在命令行设定 policy 工作,十多年后,变化只是变成在 Web 界面设置 policy。而随着人工智能的发展,我和我的团队发现应用机器学习可以更好的解决安全问题,我们的深度威胁识别产品(ATD)就这样应运而生。原本无法被识别的攻击行为,例如低频爬虫、薅羊毛、撞库,通过机器学习与大数据分析可以轻易识别。

我们去接触、学习新技术,并不一定要转岗到该领域全职研究,更主要的还是先经过自己学习消化,去判断能否对业务与工作有质的提升,然后再尝试去应用。一些我们习以为常的技术应用与解决方式,或许能够通过新技术获取更大的提升空间。

比如,就在前不久,谷歌也发布了一篇论文,介绍他们应用神经网络实现新的索引技术,替代了应用了几十年的 B-Tree 索引、哈希索引技术和 Bloom Filters。相比于 B-Tree,神经网络在查询性能上提升了三倍以上,但数据空间占用仅为原来的十分之一,甚至百分之一。还有一所大学的研究团队,他们也利用机器学习实现了更加高效的 Web 缓存淘汰策略,目前最常用的算法是 LRU,按照最近最少使用的规则决定缓存淘汰机制,而利用机器学习实现哪些数据在什么时间应该被淘汰,这样创新的应用点着实让人意外。

Q&A
每天都在做重复性的工作,感觉没前途怎么办?

最重要的是摆正心态,我见过很多应届生,都是名校毕业的佼佼者,认为每天都是重复性工作,无法体现自己真正的价值和实力。这种想法是有误区的。首先,很多的重复性工作都可以通过技术手段提升效率。而且在基础性工作上做得出色,更能够展现你的实力。例如:有些工程师会抱怨,每天的工作就是在修改 BUG,感觉没前途,但我认为在修改 BUG 的同时可以思考如何优化与重构系统,根本上减少 BUG 的出现,或者分析 BUG 的深层原因,有机会参加新系统研发时可以有所参照;其次,基础性的工作,更能建立个人品牌。工程师能力强固然重要,但是靠谱、耐得住寂寞同样必不可少。

怎么去平衡业务和技术这两个方向?

首先,技术是服务于业务的,技术不应该做过度设计和开发,对于当前的业务需求,技术做到够用就好,这样才能够保证业务发展和产品的快速迭代,为业务争取到宝贵的时间机会。即使业务和技术发生冲突,也应该优先服从业务的需求。再好的技术也需要在业务上寻找落脚点。总之,这两者并不矛盾,就像唱歌,高音、低音、转音,你掌握的每一个技巧都需要通过一首歌来展现。

作为团队的 leader,如何帮助成员排解压力?

压力可以分成两方面,一种是负面的,工作压力大,经常加班,任务超出个人能力太多,让人焦虑;另一种是正面的,适当的压力会激发出个人的潜能。

对于一些成员,本身爱好挑战,高目标激励带给他压力的同时,也会让他产生成就感,获得更多提升。而当压力过大时需要适当沟通和辅导,如果工作本身有不合理之处,就要想办法帮助他解决;如果工作超出了个人能力,就要重新考虑工作划分,是不是混淆了上面所说的四种人;如果是因为重复性工作,无法获得成就感,就需要启发他如何通过优化工作方法,减少重复性工作。

朋友叫我去创业,要不要?

在如今的环境下,创业的门槛降低了,尤其是互联网领域。很多工程师都面临过这样的选择,还有人会问有一个新机会摆在我面前,我要不要跳槽,其实这些问题的本质都是一样的。我建议所有面临这种问题的朋友都能够先问自己几个问题:自己想做什么,自己目前工作中遇到了什么问题,跳槽是否可以有效解决。因为问题和困难在每个公司都会存在,只是不尽相同罢了,如果是为了逃避问题而跳槽,是最不可取的。最忌讳只是为了朋友义气而去创业,这往往会给你们的友谊带来伤害。

例如创业的领域是你所感兴趣的,现在的工作又无法让你在这个方向上更好的发挥,那可以考虑创业;如果只是因为目前的工作压力大,想要逃离,那你需要考虑内部转岗、跳槽、创业哪种能够有效帮助你解决问题。

五年开发经验,传统软件行业,中高级工程师如何走向架构?

研发经验不能简单的靠时间衡量。对于架构师而言,更重要的是技术全面性,例如:数据的存储、不同的开发工具、开发语言的各自特性。除此之外,还需要具有一定的全局视野,如何规划技术体系、业务体系,如何实现可扩展性、高可用性等等。如果相关的领域都已经有很好的积累了,可以考虑转型。

作为数据分析师,技术层面需要掌握哪些内容?

数据分析师首先要对数据敏感,能够利用数据挖掘出更多价值。从能力上,至少要会使用大数据的技术产品,比如能够写一些 SQL 查询,是第一步;其次,还需要掌握常用的数据分析算法,比如方差、线性回归、聚类等等。如果想成为一名高级数据分析师,就要求能够写一些复杂的数据查询分析的脚本,甚至会使用 java/Python 等开发语言,能开发数据分析组件,来实现效率的提升,每天人工去做,不如把数据分析交给程序化的功能定期执行。

老程序员如何面对人工智能的机遇和挑战?

我觉得可以花一些时间先去了解和学习人工智能的技术,对于老程序员来说,这个并没有太大的技术挑战。

在了解什么是人工智能技术,知道一些开源的技术和算法后,你可以比较容易地把人工智能相关技术应用到工作中。

而最具有挑战的是,你能否在工作中找到适合的落脚点。

如果你觉得自己的工作和人工智能技术相差太远,也可以先了解和关注,观察你的同行是如何应对这个技术的。

对于即将走上程序员岗位的学生,有什么建议?白山如何培养新人?

对于应届生,企业很看重的就是基础如何。经过 3 年的校招,白山逐步建立了一套完善的培养体系。

学生入职的前半年会有专职导师,带他快速熟悉业务;HR 团队、业务团队会根据每个人的工作,准备详细的培训课程,补齐学校与工作中技术能力的断层问题;我们的合伙人还会亲自授课告诉你如何摆脱不适感,快速适应工作节奏,未来职业发展中必不可少的特质要求。

我们会给每一个学生发挥的空间,他们可以在工作可接受的范围内最大程度的释放自我,很多同学迸发出了创新力,我们有的应届生已经申请了技术专利。

白山打造的是一种相互成就的氛围和机制。关注每个人个人的成功,公司的成长不过是每位员工自我实现的副产品。

今日荐文

点击下方图片即可阅读

九死一生的中关村创业大军,一群一往无前的技术人



***

【世界欠你的娃娃,在圣诞节送给极客的你】

InfoQ旗下经典技术大会门票10+

极客时间付费精品专栏 200+

还有阳光普照的知识大礼包 10000+

点击下图或阅读原文立刻参与

 
InfoQ 更多文章 一万亿张图片的存储架构与4个9可用性的重构丨腾讯技术工程 九死一生的中关村创业大军,一群一往无前的技术人 突破2万美元的比特币与其背后的区块链技术 Web开发这十年 技术管理从0到1,并没有你想象的那么难!
猜您喜欢 如何成为一名卓越的数据科学家 ——七剑之一:问题定义 Android设计模式之单例模式 今天开始学内核:第一天 干货 | 如何做好大数据产品设计架构和技术策略? 没有这13种思维方式,你只是个受过教育的笨蛋!