Blog

Blog

PHODAL

工作,五年

2014 年 7 月 7 日,我正式加入了 ThoughtWorks;如今是 2019 年,我工作 5 年了。作为一个充满生活仪式感的人,我一定要写篇文章记录一下。

除此,从现在到退休,至少还有 6 个 5 年,所以我想好好规划下一个五年。在进一步规划之前,我得去总结一下过去五年做的一些事情。

总结的方式有多种多样的,而我只想写个流水账。五年里:

  • title:毕业生 -> 高级咨询师
  • 我的博客上有 744 篇文章(技术为主)
  • 出版了三本书,合译了二本书,审阅了近 10 本书
  • 房子没有——买不起,车子没有——也没有驾照
  • 薪资大概翻了三倍——早年西安二线工资低
  • 工作地点:西安 -> 深圳 -> 上海
  • 职业病:尺神经卡压,颈椎还没有不适
  • 社交媒体:知乎 ~56K,微信 ~29K,微博 ~7k,GitHub ~14.5k 粉、~45k 个 star
  • 老婆没有,未婚妻没有,女朋友 @花仲马
  • 其它:电脑 MBP 2013 一台,键盘大概四五个,耳机大概四五个——不能当饭吃

没了。

一份工作

过去的五年里,我一直在 ThoughtWorks 工作,一家大家所『不喜欢』的乙方公司,高级软件定制、咨询公司。从某种意义上来说,一部分业务就是那种人人『喊打』的外包公司。我是那种觉得麻烦,就懒得换的那种。

公司的选择是一种平衡艺术。对于喜欢技术的人来说,这里是一个不错的施展平台——前提是你有足够的技术和软技能,以推动相关的技术在项目上实施。对于喜欢钱和权的人来说,这里一点都不好,你得不到你想要的这些东西。在这里,你也获取不到足够的技术深度。(PS:坏话就说到这了……,要不会被谈话)

喜欢一家公司是有原因的,不喜欢一家公司也是有原因的。时间是我考虑的第一因素,工作与生活平衡。作为一个程序员,我们已经过得比大多数的人好。而作为一个程序员,我们也站不到食物链的顶端。

如果你没有自己的人生目标、个人追求, 请选择大公司。它们有你所需要的层级,一步步向上前进。小公司,也是相当不错的,如果你积极主动,渴望去施展自己的才华。像 ThoughtWorks 这样的公司,没有多少层级,你只能靠才华了。

没有福报

我还没换工作的原因,还是上辈子造孽,所以没有 996 的福报啊。

文化匹配

扁平的外企,可以让你自由地高谈阔论。你可以当面调侃你们的 CEO,而无须担心什么——反正我司是这样的。

乙方挑战

乙方,并不是一个轻松的活。你随时准备好应对:

  • 客户的 challenge
  • 客户想了解的技术新概念
  • 客户需要赋能
  • 客户看你写代码
  • ……

每天你都会有新的挑战。而且和咨询项目快半步不同的是,一些现场办公的项目要快一步。社区上刚发生的新闻,下一秒客户就会询问你。

职业

事实上,在过去的几年里, 我没有一个明确的职业规划,或者说是职业目标——是程序员没错,但是是哪种程序员?程序员的类型有这么多种:面向业务沟通的程序员,面向管理的程序员,面向技术专家的程序员,面向影响行业的程序员等……。

上班写写代码,回家写写代码,晚上逗逗花仲马,周末写写文章。就这么的简单,五年过去了,我的代码还没有编成。每天都可以过得很欢乐,偶尔还是会因为工作而焦虑。而这种焦虑都是技术问题,又或者是进度问题。在早先技术问题,是我最焦虑的部分,所以我练习编码。而今,困扰我的是进度问题,不加人解决不了问题,加人更解决不了问题。如果不是对方太菜,那么一定是我的 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 来说,他的知识域就变成了:

  • 你要有 Leadership
  • 你要擅长于技术
  • 你要懂得架构

只懂点编程,很难混得好。对于不想走上管理,但是又需要一定工资的程序员来说,Tech Lead 也是一个还行的选择。若是想转向管理吧,那得等运气,上面的人。

除了 Title 之外,公司的职级体系,也不是那么容易往上升的。做更多的事情,才你的职级才会往上升。不得不说的是,有的公司职级和 Title 是绑定的。而我一个小码农,还没有内部的 title——除了『网红』,这个骂人的 title 之外。

技术通道

我选的一直是技术路线,而技术路线最难的部分是走出特色。别人有的你要有,你也要拥有别人所没有的——这就是后来者,所需要的挑战。

寻找一个合适的新领域、实践、架构,你才能走出适合自己的技术路线。

业余

编程、创造是我的乐趣,迷茫的时候,找个有意思的东西写写。一天天也就过去了,所以一天天也就过去了,除了 GitHub 上的 repo,好像什么也没有留下。

side-project

我想过靠技术写点赚钱的项目,诸如于编程学习应用 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,微前端等,并且都属于早期实践者。这些先发的技术探索,为我在成长上带来大量的优势,我可以探索出什么是下一步的新技术、技术实践。

构建知识体系

构建知识体系,可能是我这几年里,最成功的一个点了。

  • 有三本不同领域的书出版了,分别是:《前端架构:从入门到微前端》、《全栈应用开发:精益实践》、《自己动手设计物联网》简体和繁体版。
  • 和大学同学合译了《物联网实战指南》《Arduino 编程:实现梦想的工具和技术》
  • 技术审阅了《Expert Angular》、《Building Large-Scale Web Applications with Angular》等九本书
  • 还有《《微前端的那些事儿》《Serverless 架构应用开发指南》等一系列的开源免费电子书

这些内容相关的输出,都是以构建知识体系为目的的——至少开源的电子书是这个目的,因为不赚钱,哈。

赚钱

技术变现,靠输出是一个不错的方式——写书可不是,笑 ~ 。

输出影响力

我还未工作的时候,就习惯写一些东西来记录技术相关的内容。一来,我可能是记忆力不好;二来,可能是因为我玩东西的速度太快,导致忘记东西的速度太快了。后来,我明白了对外输出就是输出影响力,它除了可以带来一定的收入,还可以带来大量的人脉——因为这么做的人太少了;而喜欢输出的人,还是寻找相似的人。即马太效应,随着输出越来越多,影响力就越来越大。也因此,影响力可以帮助你找到下一份工作。

这样的方式有:

  • 文章、博客、书籍
  • 分享、演讲等
  • 开源项目

所以,到了今天我在微信公众号上,有近 3 万的粉(虽然与同类相比,并不多),知乎上有 56k 的粉。它们可以为我带来一定的广告收入,又或者是一些电子产品。

减少支出

作为一个程序员,我们往往在电子产品上投入大量的钱,其中最贵的就是电脑了。工作 5 年,我一直用的是公司的电脑。然后,再就是购买公司淘汰下来的电脑,然后卖了。一则是,好的电脑太贵了;二则是,没有房子来放下台式机。台式机,大搬家又不方便,我又不懂如何组装——购买各类主板、显卡等。不过,我一直想将 GNU/Linux 作为我的日常系统,那可能要等到买了房子之后了。

除了手机,我的主要投入在 Sony 的耳机上,差不多近万——好在多数都是因为有点广告收,然后买的。好在,我们还可以把旧的电子产品卖了,至少还不算太亏。

生活

艺术气息

嗯,今年我已经开始探索一些新的东西。它除了转换我工作的状态之外,相信还会带来一些新的灵感。

是的,我已经画了 180+ 张画了。

平衡

当你有了女朋友、男朋友,和家人住在一起,你就不会有那么多的时间。从过去的几年里,我与花仲马一起愉快地度周末的时间越来越多——过去,周末我仍然是自顾自地写代码,可能是因为:当时她还在上学的缘故。

结论?

那么下一个五年呢?

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806

新书《前端架构:从入门到微前端》

《前端架构:从入门到微前端》是一本围绕前端架构的实施手册,从基础的架构规范,到如何设计前端架构,再到采用微前端架构拆分复杂的前端应用。本书通过系统地介绍前端架构世界的方方面面,来帮助前端工程师更好地进行系统设计。

前端架构包含以下五部分内容:

  • 设计:讲述了架构设计的模式,以及设计和制定前端工作流。
  • 基础:通过深入构建系统、单页面应用原理、前端知识体系等,来构建出完整的前端应用架构体系。
  • 实施:通过与代码结构的方式,介绍如何在企业级应用中实施组件化架构、设计系统和前后端分离架构。
  • 微前端:引入6种微前端的概念,以及如何划分、设计微前端应用,并展示了如何实现这6种微前端架构。
  • 演进:提出更新、迁移、重构、重写、重新架构等架构演进方式,来帮助开发人员更好地设计演进式架构。
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Developer, Consultant, Writer, Designer

ThoughtWorks 高级咨询师

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 与我沟通

标签