2008年开始,他写博客11年了。
仅最近两年内,博客的访问量累计超过600万。
2017年,他发布了《Django企业开发实战》视频课,广受学员好评。2019年,实体书出版。
「时间在我看来并不是虚无的,是非常具体的东西,一分一分,一秒一秒,都很具体。」——胡阳
入门——兴趣并非偶然
胡阳说,他是「笨鸟先飞」的那种人。
高考后,胡阳第一志愿报的是机械工程专业,他查了下专业背景,需要绘图,于是就开始在家自学。
不过这番准备没派上用场,因为报考结果出来后,他的专业是信息计算科学。
他想起高中发过一本 Visual Basic 的教材,但因为高考复习紧张,没时间上机。于是,在等待大学入学的这段时间,他把书翻了出来开始研究。
入学后,他发现 VB 是大学的基础课,上课教的竟然就是暑假自己学的内容。全校无论什么专业的人都在学,而当其他同学上机还是一脸懵的时候,他已经会写了。
胡阳说:「我们为什么会对一件事情感兴趣?一种情况是你对这件事情真的有天分,一开始上手就比别人学得快。另外一种是你比别人起跑要快。」
成就感激起了他的兴趣。除了 VB 之外,互联网有无数的未知在引人探索。
为什么电脑运行得慢?什么是中病毒?所谓的「黑客」怎么入侵网站?
怀着好奇,大一那年,他把课余时间大多花在学习研究网络安全上。
他在网上能找到很多黑客类的教程,比如演示怎么去入侵一个网站。但是怎么去实践呢?这类教程的时效性太高,网站不会敞开门在那等着。
当然,方法也是有的。那时就有 X-scan 扫描器、挖掘鸡这类傻瓜式工具,只要填一个网址,它会帮你扫描有什么漏洞。
但问题是,这不太有趣,就算黑进网站了也只能说明是人家这个工具写得好。
于是,胡阳的兴趣转向了加密与解密的方向,与脱壳相关的内容。当时还是桌面 APP 的时代,下载之后就可以很方便地实验,很多方法他试过后,发现完全可行,这给了他信心。
不过,软件终究是程序员写出来的,胡阳觉得自己还是得去学编程。
恰在这时,学校有一个信息技术兴趣提高班来招生,他想:那就去试试吧。
这个决定完全改变了他接下来两年的大学生活。
米老师一手创立了兴趣提高班,他不仅一个人教所有的计算机基础课,而且引导大家探索性地学习,相比于照本宣科,他更在意的是启发大家从不一样的角度看问题。
胡阳说:「你会感觉整个视野被打开了。」
在兴趣提高班,大家因为同样的热情聚集在一起,甚至寒暑假也留在学校。这两年,时间和汗水为他打下了坚实的地基。
毕业时,在其他人在就业市场中迷茫的时候,他已经去了师兄的公司搞开发。他说:「这个行业能够让你以自己的方式去做有价值的东西。因为开发一个软件需要依赖的外部成本很低,只需要有一台电脑就能搞定。对我来说比较幸运的是,这个事刚好是我感兴趣的,并且可以有不错的收入,能够养家糊口。」
编程,不只是一份工作而已
2011年,他从 Java 转到 Python 开发。
HR 问他:你学了多久 Python 并能正式工作?他回答:「一两天。」
他在回答里推荐了3本书,还有自己做过的项目练习代码。
为什么会选择做出这样的改变呢?
那时,胡阳才刚毕业不久。工作后,他发现公司会接各种项目,比如Java、.NET、PHP、VB,哪个方向他都没办法去深入地学习。他想给自己定一个计划,却不知道怎么做,前路一片迷茫。
辗转反侧了几个月后,他决定辞职。
那一年,他在博客中写道:「我选择走软件这条路,不是为了一份工作,是从纯对技术的热爱出发的。或许我还没有那么多的人生经历,不了解生活的本质。但是我一直在告诉自己,有些事,你要是想做的话,即便不知道是不是和你想的一样,那你应该去做,因为这样你才能够看得更多。」
一年后,他加入了搜狐。
他说:「在搜狐六年的时间,相当于又上了一个大学了。」
第一年,他每天都在拼命学习。他说,虽然之前有了一年的工作经验,但还是觉得自己什么都不知道。
这样的状态持续了一段时间后,他的学习曲线逐渐平缓。不过很快,他又面临了全新的挑战。
部门变动对于一名普通员工意味着什么?有人只能被挑选,也有人拥有更多的选择权。因为在部门变动或业务扩展后,总会有一些机会出现。那些做得好的人,这时会浮现出来,他会被提拔到更高的位置,带团队负责更大、更多的业务。
所以,胡阳发现,攻克了业务和技术之后,他得带团队了。
一开始,他没有多想,只是用之前老大的方法来带大家。不过,管理会分散精力,在业务膨胀之后,甚至面对全新业务的时候,他有点手忙脚乱了。
于是,他开始思考:技术人应该怎么做管理呢?
新手管理者的痛苦在于,他会纠结:「这哥们怎么写得这么慢?我写早就写完了。」
不过,他发现自己可以换个角度想问题:「把这件事情交给他,就等于你已经做了。为什么呢?相当于你本来是一个单核的 CPU,变成多核了,对吧?你可以同时接多个任务,虽然其中一个跑得比较慢,但是其他的都运转得非常快,所以整体你的产出还是足够高的。况且他也会成长,会不断变快的。」
他总结,本质上 leader 要思考的是团队整体,从而不断地把这个项目的 feature 往前推进。
不过,管理的确会消耗精力,他没有足够时间持续地输出或输入代码,也不能具体负责某个项目的开发,但会写一些「打杂的」代码,解决出现的小问题。
他说,自己会在业余时间学习,保持对技术的感觉或者敏锐性。
胡阳进搜狐的初衷很简单,就是想找一个流量大的平台,参与做一个好产品。
从他刚加入时,搜狐就是一家成熟的公司,拥有成熟的系统。他从慢慢熟悉新闻业务开始,维护了它大概六年的时间。
2018年,在搜狐的最后一年,他其实有点沮丧。
尤其是参与团队管理之后,他对公司变革的意义有了更深的体会。「你发现在部门变动或者商业调整之后,技术的价值其实没有那么大。就是说,你可以把这件事做好,但是如果换一个人来做,哪怕做得不是很好,结果也没有太大差别。」
对于技术人来说,最大的否定莫过于此。
可是,怎样才能最大程度地发挥他技术的价值呢?
他想要参与一个自己喜欢的产品的构建。这也是他选择加入知乎的原因。
他不太爱看新闻。他认为,对于新闻这种高流量产品,虽然也存在一些正经的报道,但更多是所谓的「标题党」,无论标题再诱人,它的信息对你毫无用处。而知乎成立不久他就注册了账号,他觉得,大家贡献的内容更偏知识和经验,对用户来说更有价值。
于是,他登上了知乎这艘「海盗船」。
来到知乎,他的第一感觉是:这个地方后端真多。
因为和之前相比,搜狐门户是媒体属性,把新闻发布出来,大家去看,流程就结束了。而知乎是一个 UGC(用户原创内容)的社区平台,所有人都是可参与的,业务更加复杂,尽管功能整合在一个社区里面,但下面细分的内容都是独立的产品。而且大家经常在群里交流,技术氛围非常浓。
他觉得上家公司像一个大的船群,大家朝着共同的目标各自前进。而现在的则像一艘大船,大家一起让船驶向共同的目标。
写博客——分享技术和经历
从 2008 年开始,胡阳已经写博客 11 年了。
博客内容不仅包括技术,还有他的读书笔记、对某事的感想、找工作的历程、年度总结,等等,像是一条河流,沿着过去流淌到现在,一路的景色清晰可见。
他前几年有一个习惯,看到一个好博客的时候,会从头开始把所有内容看一遍。除了看内容,他还会揣测作者当时是什么状态、想法、这个人的成长过程是怎样的。这是他会坚持写博客的一个原因,把自己的经历共享给大家也是某种意义上的开源。
2017 年,搜狐部门变动,上层战略都在调整,他手上的事情停了,时间突然空了出来。他想:毕竟工作时间也挺长,在搜狐已经呆了五年,他希望能有一些具体的东西留下来。
「为什么这么讲?比如说我有很多同事换公司之后,就不再用 Python 了。无论他之前的经验有多少,只对他自己来说是有价值的。因为有这些经验,他可以快速地去适应另一种新的技术。
「当你跟他共事,你会发现,原来他懂这么多。而他转行了之后,其他人可能也有同样的感觉,但是肯定不如你也用 Python 时的这种体验更直接。这在一定程度上是一种浪费。
「但如果他把经验变成书或者视频,哪怕之后真的不做这个语言,或者不做这个行业了,它对别人还是有帮助的,因为这是沉淀下来的东西。」
另一方面,这样也有助于技术的学习。
他说:「怎样学技术才能做到又快又好呢?一是带着问题去学习。比如你遇到一个 bug,怎么都搞定不了,刚好有一本书能解决,那你肯定会特别投入地把书看完。另外一种就是我常用的方式——以教代学。」
既有输入,又有输出,中间就是大脑在提炼总结,理解吸收。
那年,他做了《Django企业开发实战》的视频课,学员的反馈很好。后来,他把内容进一步细化完善,整理成了纸质书,2019 年初在图灵出版。
Django是基于MVC(model,template,views)构造的开源Web开发框架,可以显著提高工作效率。
胡阳举了个具体的例子:「如果用Tornado框架写一个新feature,我需要先把数据库设计好,之后写model层增删改查的部分,写controler层数据整合的部分,再写HTTP层接口部分,然后用阿里开源的antd去写前端。无论你的feature有多简单,这套都要走完,很繁琐。
「而用Django的话就会简单很多。因为Django是基于model构建的,把模型设计好数据库就有了,然后再配置一下admin,页面就已经有了。按照前后端分离的逻辑,你只需要配一个Django REST framework,所有restful 接口就有了。然后你根据model写rest framework的配置,就基本上已经完善了,剩下只要花时间写前端逻辑就好了。所以它是生产工具,能极大地提高生产力。」
让自己的历史不断向前
「时间在我看来并不是虚无的,是非常具体的东西,一分一分,一秒一秒,都很具体。」
有多少人会执着地记录自己十年的变迁呢?有人觉得这毫无意义,因为过去发生的已经消散。
但这是关于一个人的历史。我们无法想象一个只凝固于现在的,没有历史的国家;而如果一个人走在一步一消散的台阶上,也无法判断自己是向前,在原地,还是在倒退。
除此之外,胡阳也更明白自己时间的定义。
「你看老大爷大妈,满头白发,在街边走路,你知道你以后也会是这个样子,这是不可避免的。有时候我觉得人生是一眼可以望到头的,每个人都这么几十年的时间。
「对我来说,时间是一个刻度,它也是一个容器。
「如果说它是刻度的话,比如说一个小时,人生其实是由无数这样的一个小时组成的,对吧?而说它是容器,是指你可以填充不同的内容。比如我们每个小时都在闲扯,这个容器也同样填满了。」
它有什么样的意义呢?他举了一个程序员们很熟悉的例子——编程马拉松(Hackathon)。
「很多科技公司都会定期组织 Hackathon 活动,如果你没有参与过,你可能体会不到 24 小时内能完成多少任务。当我们被限制,要把一些内容放到固定的时间容器中,往往我们会想方设法来达成目标。
「它会有一个倒计时,你看还剩一个小时的时候,还有两个工作没做,你哗哗哗就开始写,这时候效率会非常高。
「所以你参加完 Hackathon 就会知道,24 个小时,每个小时你能做到什么。
「很多刚入行的程序员,他们估算时间的单位都是一天或半天,有时候说‘OK这个需求我排一下’,可能就排到两周。大家早上起来往这一坐,就11点了,还没进入状态,中午该吃饭了。然后下午2点睡醒之后,把上午没做的事情再做一下。
「说到时间管理,其实最关键的就是:你真正的单位时间是什么?
「同样是一个小时的单位,你能完成多少事,能往时间容器里填充多少东西,在你放 10% 的精力和 100% 的精力的时候是不一样的,后者才是真正的单位时间。只是很多人会有意无意地忽视。」
如何做到这一点呢?胡阳说,秘诀就在于「状态的切换」。
万事开头难,所以关键的是先把自己切换到那个状态里面。
举个实际的例子,他分享了自己写博客时的经验。「平时工作比较忙的时候,其实回家是不想写东西的。你往那一坐,不想再对着电脑输出,因为太累了。
「这时候的解决方案,就是你先随便写个开头。然后,当你继续写完一段之后,会觉得自己写得不好,这时你已经在这个状态里面了。那就再去写一些好的东西出来,最后把开头删掉,或者把开头再重新写一遍。」
无论是大学时的「笨鸟先飞」、职场上做的选择,以及这些年不断地学习和分享,驱动他的马达是什么?
胡阳说:「其实我自制力没那么好,特别累的时候,也不太想做比较消耗大脑精力的事。
「但是我不太能接受长时间去做同样的事情,或者说我长时间没有信息摄入,我会觉得特别可怕,觉得特别枯燥。
「所以我无论是写博客,去看技术或者其他书,我其实是在不断地了解新的东西。因为,本质上我会特别害怕,我始终在重复一件事情。」
他全力以赴,一心探寻自己的极限,永不停息地向前,时间会给所有付出一个完美的答案。
文:李冰
采访:乐馨,李冰
图片来源:胡阳
资深开发工程师the5fire多年开发经验总结
本书以从零开发一个博客系统为例,介绍Django在日常工作中的应用。