给您最好的
阿里云优惠券!

阿里P9传说雷卷:高段位程序员的学习之道

每次看到和程序员相关的段子,我都会会生一笑:这是时代的进步啊!

上个世纪,桌面时代

Bacis、6502汇编

一切都是面向对象

Turbo Pascal

信息学奥林匹克竞赛的常用编程语言

那时候能搞编程的基本都是家里有矿

或是家庭教育超前

90年代,web时代

个人计算机开始流行

大洋彼岸各种语言打得火热

JavaScript、ASP、PHP

业余时间可以通过做网页来挣钱了

那时候学计算机的都赚到了人生的第一桶金

2000年后,移动互联网时代

iOS和Android建立了移动开发者生态

除了web、系统开发,新增了大量的移动开发者

Java、C++、Swift

身边的程序员开始多了起来

移动社交的普及成为各类段子迅速传播的助推器

随后就是这几年的事情了,云计算、大数据、AI的流行,使得程序员这个群体越来越庞大,对社会的贡献不仅仅局限在某个企业软件,或某个手机APP上,而是影响到人们吃穿住行的方方面面。

▲ 小哥打算几岁教孩子学编程?

如今,互联网、云计算和大数据的普及成就了一批创业公司,也将程序员这个群体带入寻常百姓家。收入较高、生活节俭、无不良嗜好的程序员成为单身女青年的优质择偶群体。数不尽的段子降低了大家认识程序员的门槛。例如:

程序猿的读书历程:x语言入门—> x 语言应用实践—> x 语言高阶编程—> x 语言的科学与艺术—> 编程之美—> 编程之道—> 编程之禅—>颈椎病康复指南。

还有一系列的程序员专属表情包、T恤、信用卡,以及程序员专属茶叶和各类面向程序员的书籍和知识付费产品,程序员这个群体一时名声大噪。

高段位程序员的工作指南

就像医生分外科医生、内科医生、骨科医生、耳鼻喉科医生和中医大夫一样,程序员也有很多种,有开发APP的,开发网站的,做大数据的,做AI的,还有开发中间件用来保证网站、APP稳定、顺畅运行,不宕机的。如果你自己不是程序员,或者身边没有程序员的朋友,那么对这一群体的了解基本停留在形容我们的各种段子上,例如牛仔裤、格子衬衫,和产品经理间的江湖故事。

▲ 关于程序员和产品经理的故事,一图胜千言

但其实高配置的程序员的工作和生活远比我们想象中要自律的多、高效的多,并且,技术迭代太快,要保持住这种优势非常困难。以下整理自阿里巴巴中间件美国团队的资深技术专家雷卷在内网分享的他的学习方式,内容较多,但实操性很强。

持续学习,淡化经验主义

程序员和医生、律师这类职业不太一样,医生和律师年纪越大,越资深。是因为通过之前的手术案例或判例积累了丰富的实操经验,这是其他学习方式换不来的。但对程序员而言,由于行业的演进速度过快,以往积累的经验很快就可能不再适用。举个例子,一位Java程序员,非常擅长Struts + JSP开发,并且解决了很多Struts框架的问题,但是如果今天仍然使用之前的技术,那就会给同事和公司带来很多技术上的负担。再例如,以往软件经验的积累会体现在架构的设计上,很多程序员会认为经验积累的多,架构就会设计好,但就今天来说就未必了。如今,公共云厂商提供的解决方案就已经包含了架构的部分,在云上,架构设计基本都是模板化了。

谈编程历史的实际意义并不大,以往很多的经验放在今天已经不适用了,即便有,也会给其他人带来甄别的成本。如果2-3年不关注技术,基本就和编程绝缘了。

持续coding,加强使用编译工具的熟练度

平时和几个Google的工程师吃饭聊天,问了一下他们遇到过哪些技术牛人?一哥们儿说,他的leader太牛啦,帮助他找bug,工具和debug使用的熟练程度眼花缭乱,很多工具都是他听都没有听过,而且Python脚本编写几乎行云流水一样。这位leader并没有一眼看出问题,只是他在单位时间内尝试的次数特别多,很快就把问题给找出来了。

在排查问题和写代码上,如果你1个小时只能尝试1种方法,别人却能够尝试10次,别人就是比你牛。天下武功为快不破。写demo,查问题,工具熟练的程度会决定你学习和尝试新事物的速度。

看海量的书,勤读专业文档

学习是需要系统化的,不是看一篇文章就能明白的,尤其我们还不是行业大拿,英文也一般的情况下。

个人强烈推荐

Safari应该是出版社联盟,你需要的IT类图书基本都能找到,两个小问题:需要收费,一年大概400刀;图书都是英文的。 Safari BooksOnline的图书非常全,几乎涵盖绝大多数出版社,包括我们熟知的Oreilly, Apress, Manning, Packtpub, Addisonwiley,而且更新速度非常快。另外Safari提供的Learn path也非常有用,帮助你系统的了解某一些技术,如Blockchain, AI, Machinelearning等等。视频资料也非常多,包括专家知识培训和一些技术大会的视频。

除了图书,我们还需要关注文档(reference)。现在,很多框架和技术的参考文档质量已经越来越高了,例如SpringFramework, Hibernate, Kotlin, Groovy的文档。看看CNCF上的项目,每个项目的文档质量都是非常高的。现在很多开源项目不是1-2两个程序员单打独斗,而是一个团队加一群人,外加像GitHub等协作平台,来向外输出高质量的项目文档。另外,一些新的技术,刚开始只有文档,图书还没有来得及出版,所以你需要阅读好文档。个人在做Service Mesh的时候,对应的图书就比较少,只能阅读Envoy +Istio的官方文档,没有关系,可能稍微难阅读点,但是多读两遍就可以了,毕竟我们不是天才和这个领域的专家。

如果money允许的话,最好还是订阅一下Safari BooksOnline的服务,当然可以一个小团队内订阅一个这样的服务,大家均分一下。另外时不时重新阅读一下官方文档,毕竟官方文档还是最权威的,也是最新的。

通过视频进行学习

之前个人看书是比较多的,最多YouTube上看一下大会的视频。近一年比较关注一些视频教学。

视频和图书有什么区别?首先图书编写还是比较费时的,图书作者都要有一定的写作水平,这个让一些技术比较牛的人或者没有非常充裕时间的人就比较麻烦。Java程序员可能都比较了解Josh Long这个人,他的《Cloud Native Java》图书花费他一年多的时间才出版,而期间他的视频却发布了很多。而且,图书无法展示代码的全部,只能贴一段,但在视频中,这些代码经常是需要输入的,你会发现作者有很多的黑科技或者黑技巧,你也能学习到。如React入门图书中,可能只会说明或者引用Redux,而教学视频中,会打开对应的网站,给你列举一些重点特性。

所以,图书中可能比较容易忽略的东西,在视频中会很好地被补充进来。而且,很多视频的制作者,本身是来自框架和技术的开发团队,而不是第三方的图书作者,所以新鲜度和技巧性都非常明显。不少人对大段文字,尤其是理论和学术很强的图书,都比较过敏,很多人问如何学习domaindriven design,但是能将DDD图书看完2-3章不犯困的,非常困难,主要是因为文字太多,没有什么代码和图片,而且不像小说那样有情节,不犯困是很难的。反之,DDD培训视频就不一样了,PPT制作的也非常好,而且有动画,相关的说明贴切,所以更容易学习。

这里列举一下比较有名气的视频培训网站,有Pluralsight, Lynda和Udemy等。 Udemy的视频是需要单个购买的,如一个3-4个小时的视频需要10刀,如果你阅读量比较大,那花费就会比较多。Pluralsign是会员制,付费会员可以看所有的视频教学。内容非常多也比较新,而且有一些是成系列的,对跨界学习帮助特别大。例如,在做Service Mesh的时候,可能涉及到SDN,然而我在Safari上阅读一本SDN的图书,我只能说臣妾做不到,尤其跨界学习的同学,难读啊。但是Pluralsight上一个2个小时的视频教学,我就马上知道了。再举个例子,Java程序员要学一下ES 6 +React开发,如果找JavaScript图书先看,然后再看React图书,周期就太长了,而Pluralsight上一个ES 6 + React Learning Path视频教学,马上就能让你快速入门,而且就能投入开发,然后在用相关图书和文档补充一下,知识就巩固了。

还是money问题,允许的话,购买一个Pluralsight会员,每月29刀,绝对非常值得。Pluralsight的视频基本都有英文字幕,配合作者的PPT,英语不好的同学学习也没有问题。下班没有事情,找一个会议室,和几个志同道合的同学,搞点饮料,播放一个跨界或者新技术的视频,看完20分钟,然后大家讨论一下,英文好的,有技术功底的多发表一些观点,其他的同学都也就都能了解了。

看技术新闻、关注大牛的twitter,参加行业内知名的技术会议

前面介绍的图书,文档和视频教学,让我们可以了解和深入某一项技术,对付我们的工作应该没有问题。但是如果要紧跟潮流,能够获取灵感,那还需要关注一些技术新闻,follow twitter上的技术大牛。

每一个人都是有惰性的,大牛也不例外。有时候他们可能也不会给你写文章,文档或者拍视频,只会随意说一下。例如我第一次了解SpringFu这个技术时,是在Twitter上。那时项目还没有启动,Kotlin + Spring的核心团队就开始不经意的在Twitter上透露一些信息,你可能就会由此获得不错的想法。通常,大牛也会转发一些技术新闻,这些新闻都经过他们过滤过的,所以你挑选技术新闻的成本也就低了很多。

对于技术新闻,没有很好的平台进行统一管理,相对凌乱一些,你需要有自己的搜索和归类方法,不然找寻成本会比较高。很多人喜欢 Hacker News ( ),但没有归类功能,而 https://thenewstack.io/ 就提供了比较好的归类功能。 Google Reader关闭后,个人转投到Feedly,保留了订阅blog的习惯。

关于技术大会,如果时间和费用都允许的话,个人建议可以多参加一下。在2-3天的会议期间,你可以围绕你感兴趣的话题,和众多同行在一起深入交流,和分享讲师深入探讨,这个感觉是不同的,你需要坚信你找对了一个方向,让你更有动力深入的了解下去。

Twitter上技术大牛follow一下,关注一下对应的技术新闻和blog,平时逛逛Slack和Gitter,尽可能的参与一些行业内的知名技术大会,保持技术敏感度。

做项目,写Demo,看源码

前面说了学习,但是程序员不写Demo是不行的。项目中可以考虑尝试新的技术,我们现在推行微服务,所以技术栈还是有自由度的,就看你能否hold住了。不一定所有的技术都是能用到项目中,有些是启发性的或者触类旁通的,你需要写Demo,磨磨刀没有错的。文章前面说过,工具什么要非常熟练,不然一个Demo花掉一个小时,不值得。读了很多,看了很多,如果用代码辅助一下,就更好了。我不是说,这些知识都是为代码的,不少是为了架构的。例如,你学习ES 6 + React,如果没有代码,我很难想象如何掌握这个知识。

看源码,这个是非常重要的一个技能,至少你code review技能提升了,但是确实成本高。个人是对Kubernetes还算比较了解,但是让我看Kubernetes源码,这个压力就很大了,尤其是对你不擅长的领域。看Istio和Envoy源码,压力也很大,但是你如果决定投入啦,看源码还是帮助很大的。

项目中多尝试一下学到的新知识,不能老是惯性使用熟悉的技术。要知道,熟悉的东西很快会被淘汰的,当被淘汰的时候再调整,来不及了。多写一些Demo,磨磨刀。对你本行业的技术,一些源码还是要能看懂的,是需要的。例外的情况是,跨界的技术,阅读源码要量力而为,让Java程序去看JS框架源码或者C++源码,还是要有心理准备的。

多阅读,少浏览,听点音乐

看到YouTube上一个技术人员讲述阅读的观点,还是比较独特的。移动互联网时代,阅读量其实是比之前的多的,你每天打开手机,各种新闻、文章、视频和朋友圈等,但相较于图书或电子书,这些知识生命周期较短,娱乐性大过内容本身,这也是为何大家觉得花在信息获取的时间上多了,但阅读却少了的原因。就技术人员来说,xx头条,xx新闻等APP对你在技术积累上的帮助非常有限,这些新闻可以帮助你找找聊天话题,作为饭后谈资,但会占据你大量的时间,并且导致注意力下降,无法聚焦。而且现在的推送新闻都有智能算法,保证能黏住你。

音乐是不错的,有专门针对程序员编码的音乐,个人不是发烧友,但还是推荐一下。

在你的开发设备上多一点投入

进入办公室,看一下同事的电脑,大概就能甄别各自的开发语言了。用13寸的MacBook Pro或者Air,绝对不是Java程序员。如果是Golang或者C++程序员,一定不会用JetBrains的IDE工具,基本都是Editor类等。

这里的硬件配置建议,仅仅适用于Java类的程序员,配置高点是让你的coding速度更快,效率胜过一切。苹果最新的MacBook Pro 2018确实非常不错,终于有32G的内存了,大家可以节衣缩食一下,考虑入手。建议可以找苹果员工帮忙购买一下,有8.5折优惠,对于4500刀的笔记本来说,还是省了不少的。

小编总结

多读书,看文档,闲来无事做开源

看视频,挖技巧,听点古典和爵士

多动手、多实践,编程工具烂于心

跑跑会,聊聊天,保持技术灵敏和Sense

攒点钱,买个高配Mac和Pad

【阿里巴巴中间件】:

1. 阿里巴巴中间件团队,是国内为数不多的极具技术挑战性的团队之一,依托于阿里巴巴集团的巨大流量和海量数据,以及集团对系统稳定性的高要求,使得团队有机会去面对一个又一个的技术难题,创造一个又一个的技术奇迹。

2. 我们是一群不安于现状且喜欢折腾的人,未必很资深但是很执着、充满热情。大家来自五湖四海,到这里一起解决技术难题,提升系统性能,完成业务突破,构建新的应用,玩转技术、业务、数据和无线。

3. 我们在这里发声,在这里互动,还有服务开发者的中间件小姐姐,更有不定期福利放出。

关注猪猪