2016 程序人生大串烧
12月是 tubitv 最为繁忙的一个月份。在这个月,广告金主们留下了充沛的预算,挥舞着支票冲进节日的市场;可爱的用户们,一年间就寻觅着这么一个机会,半推半就的休上十天半个月的假,吃喝玩乐,不亦乐乎。高富帅白富美自然是在夏威夷,坎昆,阿斯本等地和大自然一起消磨时光,而屌丝群体,多数在家呆着,只好看!电!视!了!要说美国人对电视的热爱,那简直到了令人发指的地步 —— 根据 Nilson 的统计,平均每人每天看 4.3 小时。所以你可以想象,像我们这样的 video streaming service 是多么欢迎圣诞季,同时又是多么为之忐忑:求求菩萨保佑我,服务千万不要挂。。。
写这篇文章的时候,我瞅了一眼 github,12月份我竟然发了 35 个 pull request,review 了 38 个。元旦休息这几天,我还发了 3 个 pull request,添了 3800 行代码,删了 1400 行。
所以,原本计划上月末撰写的串烧文章,一拖再拖,拖到了现在。
(一)
2016 年我文章的产量不如 2015,但质量在稳步上升(自夸脸)。写公众号近三年,公众号后台的素材总数已达到 340 篇。如果说 2014 年我写文章更多是为了完成目标,2015 年写文章为了迎合读者的口味,那么,2016 年我的文章大多是为了自己而写,或者说,对思想的留此存照(冥想盆)。对我而言,自利的同时能够利他,是最好的选择。这也是为何我非常推崇 learning by teaching 的原因。
先来点形而上的:你要避免的软件开发模式,技术债,谈谈面向对象编程,谈谈我对工程和管理的看法,软件随想录:代码与数据 等数篇文章从宏观上谈谈软件开发,设计,以及管理,不管入行深浅,都值得一读。
形而上最后还是要落地,作为一个程序员,首当其冲的就是代码命名问题。这是个终极问题,弄懂的同学可以接下来研究:
我是谁。我生从何来,死往何处,我为何要出现在这个世界上,我的出现对这个世界来说意味着什么,是世界选择了我,还是我选择了世界。我和宇宙有必然的联系吗?宇宙是否有尽头,时间是否有长短,过去的时间在哪里消失了,未来的时间又在何处停止,我在这一刻提出的问题,还是你刚才听到的问题吗?
言归正传。
我们都说名如其人,不要小看命名,糟糕的命名会导致糟糕的代码。我公众号第一篇阅读过万(汗)的文章:代码命名,僧敲月下门 讲的就是这个问题。我想,很多人读后有种於我心有戚戚焉的感觉,才力捧以及在朋友圈力荐它。
除了命名,另外一件但凡程序员都或多或少会遇到的事情就是重构。我特地为你准备了:代码重构之道,重构:撰写合格的代码。希望能够对你有所启发。
随着编程功力的提升,程序员需要随之提升的是 抽象的能力,以及 元编程 的能力。当然,异步处理(异步处理的脑力游戏)也越来越受到重视。
(二)
如果要硬生生把程序员分成两个群体:会写代码的,不会写代码的。也可以这么分:调 API 的,写 API 的 —— 做 UI 的调完 SDK,调后端给的 API;做系统的一层层封装 API,最后包个 REST 的皮肤扔出去。其实广义说来,每个程序员即是写 API 的,也是调 API 的。每一个你写就的函数,都是一个 API。
撰写 API,尤其是 REST API,如今越来越成为程序员的一大主要工作。为此,我准备了一套全家桶,详细阐述我做 API 的心得:API 拿去不谢。2016 API 界比较重大的事件是 GraphQL 终于 production ready 了:graphQL。那么,是不是意味着 REST API 未来有可能被淘汰呢?我觉得几年内不会。未来更会发生的事情是 REST / GraphQL 并存。GraphQL 作为一层对外的窗口,包裹住 REST API。一个 GraphQL API,其数据源可能来自若干 REST API。二者互补。
(三)
我最最最推崇的 Professor Randy Pausch 说过:
“Fundamentals, fundamentals, fundamentals. You’ve got to get the fundamentals down because otherwise the fancy stuff isn’t going to work.”
对此,我确定一定以及肯定地赞同。在基础知识这块,程序君为你精心熬制了 concurrency,编译和运行,pipe 之美,以及 ZeroMQ。ZeroMQ 看上去是某个特定的应用,但其构建消息系统的思路和使用场景,如:pub / sub,router / dealer 等概念,一定要掌握。另外,都 2017 年了,如果还弄不明白 at least once / at most once 的消息传递机制,赶紧再翻回去看看。
程序员这一行,最怕的不是人老色衰,是未老先衰。技术从来都不是保值的,技术背后的知识才是驻颜术。当你要学习一门新的技术时,你该怎么做?希望 如何学习一门新的技术 能够帮到你。在过去的一年里,我遇到很多朋友后台留言询问学习某种技术的方法,尤其是 phoenix 在社区越来越火后,很多人寻思着放下手头学到一半的 rails,django,来学 phoenix。对此,我发了篇文章 rails, django, phoenix,你们错了 来阐述为何 web framework 不该是你学习甚至开发产品的中心。借用「中学为体,西学为用」的概念,我觉得「思想为体,框架为用」,切不可本末倒置,迷失在框架的茫茫苦海中跳脱不开。
(四)
代码写得多了,要注意 打造属于自己的乐高积木。这是老司机和新手最大的区别。为啥同一个功能,老司机三下五除二就能搞定?因为老司机写代码在搭积木,而新手手头没有积木,也找不到积木,只好不断造轮子。
老人说:常在河边走,哪能不湿鞋。作为文明时代为数不多的在刀锋(blade)上行走的职业人,程序员绕不过去的一道坎是把系统搞崩溃。你删除过 production database 没?看看这篇文章:系统崩溃:需要多么强大的内心,有则改之,无则加勉。
如果前一篇文章吓到了你,我这备着几碗热腾腾,口味各异的鸡汤为您雅静:
- old soldiers never die
- 如何成为 A 类人才?
- 那堵叹息的墙壁
嫌之前的文章太沉闷,技术犯太浓?来来来,咱们上完阳春白雪,上下里巴人:
- 程序员和拉条子
- 漫谈工程师的三观
- 春假,是每个爹的噩梦
对新产品感兴趣的,2016 年您可要失望了,我总共也就写了两篇和新产品有关的文章:hololens,pay as you go。
(五)
2016 技术圈除了 ZeroMQ 作者的去世,对我而言还有件大事就是 rethinkdb 的亡故。我挺喜欢它的技术以及围绕 rethinkdb 做的 horizon,还写过一篇文章:后端傻瓜化(rethinkdb。。。)为其摇旗呐喊。可惜了。再一次,技术败给了市场;理想主义的 geek 输给了世俗。
年底前的 aws re:invent,我写了三篇文章,都值得一读:aws。可惜时间关系,我没空展开写更多的内容。大家自己上 youtube 看视频吧。
新一年了,有没有跳槽的想法?谈谈系统设计的面试 帮你梳理一下如何去应对系统设计的面试,向左走,向右走 赤果果地为俺们 tubitv 做广告招聘。是的,我们又要开始在中国(北京)招募工程师了,nodejs 后端和 web 前端为主,懂 erlang / elixir / scala 优先,稍后我会发文详述。
最后,老少咸宜,人见人爱的长日无痕系列: 1 2 3
祝大家新年快乐!