2014 年 7 月 7 日,我正式加入了 ThoughtWorks;如今是 2019 年,我工作 5 年了。作为一个充满生活仪式感的人,我一定要写篇文章记录一下。
除此,从现在到退休,至少还有 6 个 5 年,所以我想好好规划下一个五年。在进一步规划之前,我得去总结一下过去五年做的一些事情。
总结的方式有多种多样的,而我只想写个流水账。五年里:
没了。
过去的五年里,我一直在 ThoughtWorks 工作,一家大家所『不喜欢』的乙方公司,高级软件定制、咨询公司。从某种意义上来说,一部分业务就是那种人人『喊打』的外包公司。我是那种觉得麻烦,就懒得换的那种。
公司的选择是一种平衡艺术。对于喜欢技术的人来说,这里是一个不错的施展平台——前提是你有足够的技术和软技能,以推动相关的技术在项目上实施。对于喜欢钱和权的人来说,这里一点都不好,你得不到你想要的这些东西。在这里,你也获取不到足够的技术深度。(PS:坏话就说到这了……,要不会被谈话)
喜欢一家公司是有原因的,不喜欢一家公司也是有原因的。时间是我考虑的第一因素,工作与生活平衡。作为一个程序员,我们已经过得比大多数的人好。而作为一个程序员,我们也站不到食物链的顶端。
如果你没有自己的人生目标、个人追求, 请选择大公司。它们有你所需要的层级,一步步向上前进。小公司,也是相当不错的,如果你积极主动,渴望去施展自己的才华。像 ThoughtWorks 这样的公司,没有多少层级,你只能靠才华了。
我还没换工作的原因,还是上辈子造孽,所以没有 996 的福报啊。
扁平的外企,可以让你自由地高谈阔论。你可以当面调侃你们的 CEO,而无须担心什么——反正我司是这样的。
乙方,并不是一个轻松的活。你随时准备好应对:
每天你都会有新的挑战。而且和咨询项目快半步不同的是,一些现场办公的项目要快一步。社区上刚发生的新闻,下一秒客户就会询问你。
事实上,在过去的几年里, 我没有一个明确的职业规划,或者说是职业目标——是程序员没错,但是是哪种程序员?程序员的类型有这么多种:面向业务沟通的程序员,面向管理的程序员,面向技术专家的程序员,面向影响行业的程序员等……。
上班写写代码,回家写写代码,晚上逗逗花仲马,周末写写文章。就这么的简单,五年过去了,我的代码还没有编成。每天都可以过得很欢乐,偶尔还是会因为工作而焦虑。而这种焦虑都是技术问题,又或者是进度问题。在早先技术问题,是我最焦虑的部分,所以我练习编码。而今,困扰我的是进度问题,不加人解决不了问题,加人更解决不了问题。如果不是对方太菜,那么一定是我的 knowledge transfer 的水平不行。
Homework 的时候,我使用的是 Ruby,这门语言在我职业生涯的早期用到过,后来就很少再接触了。在那之前,我的主要语言可能就是 C、汇编和 JavaScript,还有博客上用的 Python。后来,工作了,我使用 Java,用了点 Scala,写了点 Ruby。而现在我用的几乎全是 TypeScript。
五年里,我在 Offshore(海外交付)待了两年多(加上实习),在 Local(国内交付)待了三年多。各自都只在一个 account 上,也算是蛮不幸 + 幸运的。不幸的是尝试不到新的组织架构,幸运的是我有时间去玩自己喜欢的技术——越是长的项目,越有时间去写书。
刚开始工作,项目上用的是 Java + Backbone + ElasticSearch + Spring,一个大型、古老的房地产搜索网站,时间都花费在学习相关的技术上了。
工作第二年,开始进行该死的单体应用改造成微服务,10 年历史的代码库,藏有大量的业务逻辑没有人知道——改 bug 时,经常有惊喜。干着 Tech Lead 的活,却不想承担 Tech Lead 的职责。业余时间,开始一点点地写自己的第一本书。
到了第三年,我成了一个移动开发,写写 Hybird 应用,以及对应的 Android Cordova 插件 + iOS Cordova 插件。虽说不上是无聊的项目,但是时间一长,也就有了足够的时间,去写自己的第二本书。
第四年之际,由于之前的经验,我有机会去尝试在项目上使用 Java、Kotlin 来编写 Android 代码。除此,几乎是使用 TypeScript 工作,然后还搞了几把微前端和 Serverless 相关的知识。
在第五年里,我开始做开发框架和与工具,并研究该领域的一些最新实践,诸如于 Android 的插件化、组件化,Clean Architecture,无代码编程。在这期间,我还写了第三本书。
从业务系统到技术框架的设计,我开始能理解效能对于大型组织的重要性,明白很多事情的方方面面——反正,过去我总会吐槽组织决策的一些不合理。尽管能理解,但是未来我会继续吐槽。
看上去是不是很糟糕,尝试了不同的技术栈,不同类型的项目,却没有到技术的深度?
工作上我尝试了不同的技术栈,但是它们都是大前端相关的项目。与此同时在业余的时候,我的方向仍然是以前端为主。而且从某种意义上来说,在早期,我业余的编程时间,比我工作时间还要长。所以,在技术的深度上来说,并不是问题。至于那些 996 的公司,我觉得吧,要做到这一点太难了。
与此同时,在过去的几年里,我看着不同的人在转岗,从前端转向后端,从后端转向了前端,从后端转向了 DevOps……。因为,人们并不知道他们喜欢的是什么,只是一开始觉得前端能写,后端也是能写的,所以就去做这样一件事。一段时间之后, 却发现了某一个领域才更适合自己。这条理论,对于大部分人来说,也是适用的——你现在选的东西,并不一定是适合你的。不过,可是,要是你在工作上难以尝试别的机会,而且 996 的话,那么你还是选择工作上的技术栈的深度吧。
而所谓的技术深度,从来都不是依靠工作的机会就能得到的,还得靠自己在平时一点一滴地积累,才能达到所需要的深度。所以,面试的时候,总会有面试官问你:看过 blabla 的源码没?本意并不是问你如何造飞机,而是你在业余时间有没有学。对技术感兴趣的人,都或多或少地会去看看框架的源码,尝试去造一个类似的轮子。
确实,在乙方公司有这样的问题,部分的项目接触不到核心的业务,部分的项目是短周期的项目。这一点,对于高薪来说,有一些不利的——懂某一方面业务的人,在进入这一业务领域时,会比其它类型的程序员值钱得多。笑~
与此同时,我看到了一些不一样的亮点:可以接触不同类型的业务、快速的业务转换能力。
所以,人生没有一件事是容易的。
这是什么东西?
在 ThoughtWorks,对于技术路线来说,不会有太多的选择。首先,你会成为一个 Tech Lead,但是它只是一个角色,不是一个岗位。因为资深,所以需要带领更多的人资深。我在 ThoughtWorks,也在几个项目上作为 Tech Lead。对于一个 Tech Lead 来说,他的知识域就变成了:
只懂点编程,很难混得好。对于不想走上管理,但是又需要一定工资的程序员来说,Tech Lead 也是一个还行的选择。若是想转向管理吧,那得等运气,上面的人。
除了 Title 之外,公司的职级体系,也不是那么容易往上升的。做更多的事情,才你的职级才会往上升。不得不说的是,有的公司职级和 Title 是绑定的。而我一个小码农,还没有内部的 title——除了『网红』,这个骂人的 title 之外。
我选的一直是技术路线,而技术路线最难的部分是走出特色。别人有的你要有,你也要拥有别人所没有的——这就是后来者,所需要的挑战。
寻找一个合适的新领域、实践、架构,你才能走出适合自己的技术路线。
编程、创造是我的乐趣,迷茫的时候,找个有意思的东西写写。一天天也就过去了,所以一天天也就过去了,除了 GitHub 上的 repo,好像什么也没有留下。
我想过靠技术写点赚钱的项目,诸如于编程学习应用 Growth、物联网技术社区玩点什么( https://www.wandianshenme.com/ ), 最后还是靠着微信公众号上的广告赚点外快。Growth 有近 10 万的用户,却没有真正带来收入。我的博客有 100 万的访问量,也没有带来收入。玩点什么,每天有近 200 的 PV,也没有带来收入。想来,靠技术 + 内容赚钱,对于我来说是无缘的。但是,它们带来了一些流量,还有成就感。对于编程这种爱好来说,技术带来的成就感是非常鼓舞人的。
最后的最后的最后,工资还是我收入的大头。哪天不想工作了,想去旅游会儿,那可怎么办。
由于我写了大量的 side project,便混上了国际 GitHub Top 100,国内 Top 10 。可惜的是,至今也没有创造出特别有影响的项目。Star 多的项目都是一些电子书。经常缝缝补补的那些开源工具、框架项目,没有几个发展得特别好。有一天, 我写一个简单的 checklist 工具,就获得了两百的 star。
于是,我放弃了面向社区编程的挣扎,开始面向自己编程。当我需要一个什么工具,我就写一个什么工具。
这个年代,不是一个适合于舒服工作的年代。只要是那些重复的机械性工作,诸如于 Copy/Paste,都会被 AI 所淘汰,如之前的收费站失业的故事。这一波新的革命,将会淘汰部分的工作,而工作的岗位正在不断减少。
所以,不管你是前端程序员, 还是后端程序员,你都可能会被技术进一步淘汰。前端,前有 Sketch to AI,后有无代码编程;后端,前有 FAAS,后有 Serverless;哪怕是 AI 程序员,也都有自动调参数程序。
在这方面,我尝试了越来越多的新技术 Serverless,微前端等,并且都属于早期实践者。这些先发的技术探索,为我在成长上带来大量的优势,我可以探索出什么是下一步的新技术、技术实践。
构建知识体系,可能是我这几年里,最成功的一个点了。
这些内容相关的输出,都是以构建知识体系为目的的——至少开源的电子书是这个目的,因为不赚钱,哈。
技术变现,靠输出是一个不错的方式——写书可不是,笑 ~ 。
我还未工作的时候,就习惯写一些东西来记录技术相关的内容。一来,我可能是记忆力不好;二来,可能是因为我玩东西的速度太快,导致忘记东西的速度太快了。后来,我明白了对外输出就是输出影响力,它除了可以带来一定的收入,还可以带来大量的人脉——因为这么做的人太少了;而喜欢输出的人,还是寻找相似的人。即马太效应,随着输出越来越多,影响力就越来越大。也因此,影响力可以帮助你找到下一份工作。
这样的方式有:
所以,到了今天我在微信公众号上,有近 3 万的粉(虽然与同类相比,并不多),知乎上有 56k 的粉。它们可以为我带来一定的广告收入,又或者是一些电子产品。
作为一个程序员,我们往往在电子产品上投入大量的钱,其中最贵的就是电脑了。工作 5 年,我一直用的是公司的电脑。然后,再就是购买公司淘汰下来的电脑,然后卖了。一则是,好的电脑太贵了;二则是,没有房子来放下台式机。台式机,大搬家又不方便,我又不懂如何组装——购买各类主板、显卡等。不过,我一直想将 GNU/Linux 作为我的日常系统,那可能要等到买了房子之后了。
除了手机,我的主要投入在 Sony 的耳机上,差不多近万——好在多数都是因为有点广告收,然后买的。好在,我们还可以把旧的电子产品卖了,至少还不算太亏。
嗯,今年我已经开始探索一些新的东西。它除了转换我工作的状态之外,相信还会带来一些新的灵感。
是的,我已经画了 180+ 张画了。
当你有了女朋友、男朋友,和家人住在一起,你就不会有那么多的时间。从过去的几年里,我与花仲马一起愉快地度周末的时间越来越多——过去,周末我仍然是自顾自地写代码,可能是因为:当时她还在上学的缘故。
那么下一个五年呢?
围观我的Github Idea墙, 也许,你会遇到心仪的项目