Blog
Blog
PHODAL

Viewing posts from July, 2019

最近,我困扰于『知识管理』——其实一开始,我并不知道我需要的是它。在我打算买几本 Kindle 电子书,以消磨一下时间的时候,我发现了『知识管理』相关话题的电子书。我这才意识到,我迫切需要一些新的工具来管理知识。

在之前的那篇《整洁前端架构》的文章里, 我们介绍了如何在前端领域里使用 Clean Architecture。在过去的几个月里,我们实践了 Clean Architecture 架构,并且实践证明了 Clean Architecture 也可以在前端工作得非常好。

坑多了,想吐槽一下。

组件化架构,非一朝一夕就能完成。

常见的通过 Node.js 来构建 Hybird 应用的命令有: - build - run ## 过程 1. 获取 Target 设备。通过执行 ``adb devices``,来返回设备列表。 2. 执行构建。 1. 进行构建前的依赖项检查。如 JDK、Android SDK、目标设备、Gradle 2. 清除旧的构建。执行 ``gradlew clean``,并通过 shell.js 删除构建目录。 3. 执行 ``gradlew build`` 进行构建。 3. 安装应用 1. 找到构建目录中的 adb 包。 2. 执行 ``adb install`` 来安装对应的包。 4. 启动应用的 Activity 1. 通过 ``elementtree`` 解析 AndroidManifest 来获取包名。 2. 执行 ``adb`` 命令来启动应用的 Activity。 ## 代码分析 详见 Cordova CLI 源码

我们在做一个后台管理系统,它使用的是 Tab 页 + 无限滚动的方式实现。一旦我们从这个列表页进入详情页,再返回列表页时。不仅会回到列表的最上面,而且还会重置 Tab 的状态。为此,我们的业务需求是:记错这个页面的状态。

项目中采用了 Angular 作为前端框架,并采用的其自带的 Jasmine 作为测试框架。而在过去的一段时间里,一直在遭遇下面的问题:

Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL

由于,我们有差不多 600 个测试案例,而测试一直会因为这个原因挂掉。因此,我们不得不尝试去解决这个问题。

Markdown是一种轻量级标记语言,它允许人们 “使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档”。

过去的几个月里,我和花仲马一直在讨论某件很重要的事情——大家都懂的。我也一直在思考:未来的几年内,我要成长为一个怎样的人

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/](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+ 张画了。 ### 平衡 当你有了女朋友、男朋友,和家人住在一起,你就不会有那么多的时间。从过去的几年里,我与花仲马一起愉快地度周末的时间越来越多——过去,周末我仍然是自顾自地写代码,可能是因为:当时她还在上学的缘故。 ## 结论? 那么下一个五年呢?

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Engineer, Consultant, Writer, Designer

ThoughtWorks 技术专家

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

开源深度爱好者

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

联系我: h@phodal.com

微信公众号: 最新技术分享

存档

分类

标签

作者