一 我是谁?
今天是2018年9月16日,15级台风山竹造访的日子,外面正台风肆虐,端坐家中的我,决定要干点什么。
先介绍下自己,我是KAMI,2016年双鸭山大学研究生毕业后,先到杭州在阿里巴巴工作了近两年,后回到广州进入网易游戏,目前在从事大数据、实时计算和机器学习方面的工作。
这两年的工作经历,对我技术和职业成长影响十分积极和深远。在阿里巴巴和网易游戏这两个优秀平台的工作十分充实,总会面临各种挑战但伴随着更多收获。一方面,在这两个平台工作使我之前积累的知识和技术得以实践和运用,进而又驱动我像海绵一样又快又多汲取了更多的新知识,工作能力和知识储备上了一个台阶。另一方面,这两个平台有着业内数一数二的业务广度和技术深度,极大地增长和开阔了我的见识和视野。此外,和优秀的团队共事,参与和体验团队内外的分工协作和规范高效的研发流程,对我来说是技术以外的宝贵经验和财富。
二 我要干什么
我们都说,持续学习是互联网行业的特征。这两年里,我处于旧认知不断打破,新认知不断形成,知识结构不断重塑的一个过程,相关领域的积累和认识也从量变迈向质变。而输出是检验输入的最好办法,因此我决定开始写点东西,一方面,是对过去的经验进行总结和提炼,以飨读者;另一方面,用输出倒逼输入,与大家分享前沿知识,不断提升。
三 我打算怎么做
因为我目前从事的是大数据、实时计算和机器学习方面的工作,因此文章也会主要关注这些领域。然而在内容和形式上,我希望产出的是实用而又有启发性的文章,内容侧重于总结实际生产中的优秀实践手段和成果,兼顾实用的方法论;只关注对大多数人都有价值的问题,不讨论一个针尖能站几个天使这样刁钻的问题;此外,还会谈谈大公司的实践见闻,以及国内外的前沿热点。
实践优先
在计算机领域,教学与生产之间有巨大脱节,学校的课程内容在相比于企业里往往过于粗浅老旧,企业所用的技术在不体现在学校的课程上。为了不陷入被动,很多人从学生时期就开始通过网络和社区获取前沿动态和学习资料。
这是非常正确和有效的学习途径。然而,这实际上解决的只是认知之间的脱节问题,并没有解决认知和实践脱节问题。由于业务和需求有特殊性,加上技术本身的特性和实用性,技术在生产的定位,落地和运用手段,往往会和技术的一般认知有很大差异,这便是认知与实践的脱节。
举个例子,我们都知道的关系型数据库存储过程。存储过程可以算是数据库的进阶而又有点复杂的内容,不少人会花不少功夫深入学习,希望在工作和生产中能派上用场。然而,在阿里巴巴开源的编码规范之前,大部分人都不会发现,阿里巴巴在内部生产中是禁用存储过程的。阿里巴巴禁用了存储过程这个数据库的重要特性,是出于什么样的思考和规划、什么样的经验教训和业务需求,若没有充分实践又无人分享,看再多再新的文档恐怕也无从而知。
再举个例子,目前很火的机器学习(作为一个在其低谷时期就入坑的人,实在不太喜欢用人工智能这个满是噱头的词)。自从AlphaGo一鸣惊人大显身手后,机器学习成了一门显学,各种各样线上线下的教程,书籍和培训等等可谓是铺天盖地,汗牛充栋。然而,让人啼笑皆非的是,绝大部分的文章资料在前面介绍了些原理,最后给出的实践指引却是一个调了TensorFlow几个接口的大脚本。然而,在生产实践中,一个算法和模型的运用和落地,背后会涉及算法实现时的模块拆分、工程化和调优、数据访问和传输、离线或实时计算任务实现和调度等等机器学习内外的实践经验。理论部分撇开不论,在生产实践,一个基于某个符号计算框架的脚本,参考价值实在是很小(更何况绝大部分上线的算法和模型,本来就不跑在这些框架上。。。)。
相对而言,认知和实践的脱节会更为隐蔽,甚至颇有信息不对称的感觉。毕竟,这样的主题少有人公开讨论。所以,若是涉及实践的文章,我会更侧重于在实际生产中的优秀实践手段和成果,特别是在大平台中的实践经验(当然是在不泄密的前提下),给大家更高的参考价值。
谈方法论
什么是技术的方法论?技术,包括算法,模式,组件,框架等等,它们因为现实的需求出现,又有期望的定位和发展的目标,它们既是设计出来的,也是生长出来的,它们的理论和实现,主体和细节,背后都有抽象和普适的一般思想和原理。例如,这个组件的接口是出于什么需求这样设计,这个实例使用的这些模式是要适配什么问题,为什么这个框架没有实现一些你觉得有用的功能和特性,这个算法需要怎么样工程化,落地为项目和业务服务,等等。一时间想不到好的词去概况,这里就姑且称之为方法论吧。
有些时候,方法论本身比起方法论结果,即具象的技术本身,更为有用。大家是否想起还是新手时,想将一些想法和需求实现并落地为工程,但又无从下手的感觉?其实这是方法论积累不足的结果。
优秀的技术本身就是优秀方法论的成果,十分值得从中学习。可惜的是,方法论被笼统地概括为难以言传的“经验“,各种文章多关注技术本身,少有从方法论角度去切入。
然而,方法论是抽象和普适的,实际上并不难用语言表达和描述。所以,比起具象技术细节,我会更侧重于技术的方法论,包括它们的需求背景和应用场景,设计上的原则和目的,以及它们背后的抽象和普适的一般性思想和原理,等等。不学习吸收已有的优秀方法论,这是另一种意义上的重复发明轮子。
抓大放小
大家在学习和工作中,一定接触到不少成熟强大的技术,它们复杂精致的逻辑让人不禁赞叹和膜拜。一些文章会分享这些技术相关生僻刁钻的使用技巧,对其原理和实现细节的深挖。作者的耐心和细致很令人敬佩。不过,我不打算写这样的文章。
倒不是说考究细节本身有什么问题,毕竟总会遇到一些问题需要这样解决。然而,这样的内容写成文章进行分享,实在无多大价值。
这些文章围绕的问题只是一个很小的点,环境和条件很精致苛刻。往往又没有对结果进行总结和抽象,给出普适一般的规律和思考,适用面其实是非常窄的。读者甚少能碰上可以学以致用的场合,知识点太细对于读者的知识体系而言也过于松散,难以消化。
很多时候,写这样的文章等同于研究一个针尖能站几个天使,是一种不甚提倡的钻牛角尖行为。数字世界中万千行代码层层包裹下的细节,穷尽时间和精力,你能了解多少呢?食之不化,这些细节又有何帮助?
技术以外
在阿里巴巴和网易游戏工作,我的一大收获是体验了实际生产上的团队分工协作和研发流程,认识到哪些方式和流程行之有效,哪些只适合留在教材上,哪些又是和现实的妥协,还有一些规则和原则背后有着什么样的经验和教训等。
对于还未工作的学生,或者在规模稍微小些的平台和团队工作的程序员,这些技术之外的积累可能不会很完备,有时候可能就会碰壁撞板。我还在阿里巴巴工作时,就遇见有来自小公司的多年开发经验的员工,因为对版本管理在应用开发和迭代的意义和作用比较陌生,在发布时常常违反约定,造成合并冲突等不必要的麻烦,这不能说是很遗憾很尴尬的事情。
所以,若有条件,我会结合自己的体验和经历,分享一些好的研发分工协作和体系流程实践经验,给大家借鉴。
前沿热点
除此之外,我也会当个译介,给大家翻译和分享些外文的前沿热点以及优秀实践。一来可以练练英语练练文笔,二来也方便没有查阅英文资料的习惯的读者。同时,我会尝试在文章中增加一些有意义的内容,例如有启发性的方法论分析,有实践参考意义的demo等,让文章更有参考价值。
四 小结
前面长篇大论说了很多,最后稍微总结一下:
1.文章侧重于分享大公司的优秀生产实践和技术运用案例(不泄密的前提下_)
2.关注技术本身同时也关注方法论。
3.只关注对大多数人都有价值的问题,不讨论茴字的四种写法。
4.分享研发流程和分工协作的实践经验,特别是大公司是怎么搞研发的。
5.给大家翻译一些好玩有用的东西,可以的话加一些有价值的原创内容。
最后,希望自己按照上面的定位计划坚持写作和分享,希望所分享的内容对大家有所帮助。初次见面,望多多支持~
扫描下方二维码关注公众号“KAMI说”,获取更多精彩原创内容~
