我的编程之路(编程大神们的编程之路)

小编:大闷头 更新时间:2022-08-22

#头条故事会#

我,高分子材料与工程专业毕业——现在是个程序员。

十多年了,也该写篇文章回顾下期间的得与失(虽然失多得少)——这就好比一个人拉了翔总要回头看看,虽然多半臭不可闻,多少能给自己的健康指条明路。


我的编程之路(编程大神们的编程之路)


懵懂的大学

我是 2004 年上的大学——快 20 年了,说起来自己都不敢相信。要是问我为啥选了高分子材料这么个专业,那就是个笑话。当时盯着志愿填报手册上几百个学校和专业,头是大的,脑袋是空的。

高三(或者说整个高中)对于我们那代人来说全部的意义就是做题。没人去思考自己未来要做什么,想做什么,做题就对了。所以当高考完了面对一堆专业时你能想象有多无助,没人知道那些专业具体是干嘛的,要学什么,对不对自己的胃口(最主要是不知道自己想干嘛)。

你可能会觉得奇怪,不懂不能百度吗?那个时代,那山旮旯里,高中读完电脑都没摸过,拿锤子去百度。

所以我当时做了个特别“明智”的选择:既然都不懂,那就选个看起来高大上的。高分子材料与工程,听起来不错,还带个“高”字,选它!

关于学校嘛,顶好的学校肯定没戏,一般的学校还是有很多选择滴(当时的分数也不算很低,但离 985、211 还是差一截),至于去哪里,没什么概念。于是我又做了个“明智”的决定:既然山旮旯里待够了,那就去平原吧。要不北上?北国风光,又冰封又雪飘的,感觉不错——就去黑龙江吧!

等我坐着四十多个小时的绿皮车(现在想起那味道就要呕吐)来到哈尔滨时,有点傻眼。没有南方的绿树成荫,只有整日的灰蒙蒙。北方整个冬日几乎看不到太阳——切确地说是整个半年,国庆节就开始下雪,第二年扫墓时还嘎吱嘎吱。

相比于气候,最让我接受不了的是我的专业。我终于从别人的闲谈中了解到了这个专业的真相——就是做洗脸盆、电线电缆的!据说我们专业一半以上的毕业生都去了电缆厂!

我不是鄙视这些行业——只是内心实在接受不了这个落差。

最让我接受不了的是,这个专业的核心课程是化学!

我最讨厌化学——不是说化学不好,而是说我讨厌我学的化学。我们初中开始学化学,那个化学老师拿化学当历史教,每个人要拿着化学书去他那里背诵——就像我们小学背课文那样!我感觉自己受到了侮辱,从此种上了仇恨的种子。

才迈入大学门槛,我整个人状态就不太好了。

不过整个大一来说,我多少还是个“良民”。一方面刚进学校,新鲜感未减;另外高中那种“好好学习”的惯性思想犹在;更重要的是,大一的课程多半是我喜欢的,像数学、物理。嗯,我最喜欢物理——准确地说是喜欢里面的经典力学部分。

所以大一的期末考试我的成绩是排在中上的,有几门课还是前五。

从大二开始,我离“好学生”渐行渐远了。

我觉得大学学的东西越来越无聊,公式越来越复杂,越来越不知道它们到底有什么用。

这种感觉起于麦克斯韦方程组。那天,天朗气清,百花盛放——我们校园也没几朵花——我愣愣地盯着老师在黑板上写下一大坨公式,那天在上电磁学。我盯着这坨公式足足 10 分钟,然后感觉自己的智商遭到了蹂躏。

这种感觉迅速转化为仇恨——从此我再没翻过一页物理书!当然课还是上滴,只不过课本换成了《射雕英雄传》。

自这以后,我的课堂状态就进入“混沌”态。大部分课本都没翻开过几次,只是偶尔听听老师讲什么,感兴趣的就听一下,不感兴趣就看小说或者睡觉。

有一门课除外——这门课叫“线性代数”。这是我在混沌状态中学得最认真的一门课(期末还考了个全班最高分),也是最摸不着头脑的一门课。我之所以学它是觉得这门课很奇怪,讲的东西好像不是来自人类文明。必须承认,虽然考了个最高分,但直到大学毕业,我都不知道线性代数到底在讲什么——直到十年后我在网上重学这门课,才知道可以用它做空间变换(如图形的翻转、变形)和线性方程组求解,在图形学、大数据、人工智能等领域有非常广泛的用途——对于计算机学科的人可以说是最重要最实用的数学分支之一。

老是看小说、睡觉也不是事。不学正课了,得干点自己喜欢的。我们这帮不学习的人基本分两种:打游戏的和看小说的。打游戏的基本天天泡网吧玩《魔兽世界》,看小说的则是躺在床上金庸古龙梁羽生以及各种新生代。

我不太喜欢看武侠小说(除了古龙基本看完了,金庸看了几本,其他武侠鲜有涉猎)——我觉得武侠小说过于虚构,而且满是套路;更不打游戏,我觉得那是浪费生命。出乎意料地,我这个理科生很喜欢文学、艺术这类东西。从大二开始,我的大部分时间都是在图书馆度过的,看了很多文学、绘画、书法、音乐方面的书,我觉得这样很轻松,无忧无虑——当然这种无忧无虑是有代价的。

我喜欢写作。从小时候就喜欢写日记,高中还偶尔在校刊上发发文章。整个大学,我几乎天天都写日记,多半是记些人生感想、哲学思考、文艺评论啥的——从某些角度看,大学生活其实无聊至极,也只能写这些。整个大学写了整整五大开本——毕业后被室友当废纸卖了。

我曾尝试写小说。写大学生活。写了一半,放弃了,大学生活实在没什么可写。逃课?打架?恋爱?写着写着自己都觉得恶心。

一个偶然的机会,我喜欢上了哲学!

具体怎么喜欢上的忘了,反正当时很疯狂,从柏拉图到海德格尔,或多或少都拜读过——虽然很多是一知半解。

对我影响最大的是黑格尔。我花了很长时间(半个学期?)读完了《小逻辑》,上面写了密密麻麻的笔记。和其他(特别是早期)断言式哲学作品不同,《小逻辑》里面多是逻辑推理。里面内容现在基本忘得差不多了,不过最大的收获是学会使用辩证法思维。

黑格尔最为外界熟知的名言是:“存在的即是合理的”,说的是凡存在的(实在)定有其必然性(凡事必有因)。这句话很容易被当权者利用,以佐证当权者的合理性(合法性)——黑格尔也因此被扣上保守派的帽子。然而他们没考虑的是,黑格尔的“存在”本身就是个矛盾体,它必然会否定自身(扬弃)。马克思根据黑格尔的辩证法逻辑给出了这句话的下半句:“合理的即是不合理的”。

《小逻辑》是出了名的难懂——虽然绝大部分哲学书都很难懂。记得当时一晚上只能看一页(大部分时间在消化和做笔记)!但它是我为数不多的从头到尾认真看完的哲学书,效果是后面看马克思、尼采、弗洛伊德就感觉不那么难了。

黑格尔还有本《美学》当时也是非常地热爱,刚毕业那会还据此在 MySpace 上写了篇万字博文。

大三时我决定考研——考武汉大学哲学系!为啥是武大?因为武大有个邓晓芒,我看过他翻译的康德的《纯粹理性批判》(好吧,这本书比《小逻辑》还难,看了一点,实在看不懂,放弃了),有个印象。

当时的想法是毕业后在一所不错的大学当老师。

于是我买了一大堆考研资料,加入茫茫考研大军中——这些家伙给外人有两个印象:1. 特别会占座位;2. 精神可能有问题(否则为啥老是一个人嘴里念念有词?)。

结果如你所料:没考上。其实是差不多到后半截就放弃了,真教一辈子哲学貌似也挺无聊的——整天在那啥也不干就乱想?

就这样浑浑噩噩到大四了。

大四(下半学期)主要就两件事:写论文、找工作。

你能想象一个专业课课本还是新的、每学期必挂一两科的家伙如何写论文?

你肯定想得到——多半你也干过。于我来说,互联网在大学最大的用途一是和陌生人聊 QQ,另外就是写论文。

具体做法是:进入中国知网(还是其他什么网忘记了),输入关键字搜索,狂下数十篇论文,然后复制黏贴,完事!

如果说大学有什么事情做起来效率最高,那就是写论文。写论文最难的部分是摘要:你得用自己的语言总结一下这些七拼八凑的东西,而且这玩意也是你做论文答辩时的主要用辞。

写论文的同时差不多就在找工作(哦,前面还有个叫“实习”的步骤,就是一帮人去几个乌烟瘴气的化工厂转几圈)。与其叫“找工作”,不如叫工作找我们。学校会联系一些企业来做专场校招,我们只要看到有公司来就投简历。像我这种对本专业几乎一窍不通的,简历写什么呢?

不用怕,因为大部分人对本专业也一样一窍不通!

校招公司多半看你简历上有没有诸如“奖学金”、“活动”、“大赛”这样的字眼。不管你信不信,我在大一还真拿过奖学金(三等)——仅此而已。如你所猜,我(以及其他好几个人)去了四川德阳一家电缆厂——一家很大很知名的电气集团下面的一家很小很不知名的子公司。

我的大学总结起来就是浑浑噩噩,乱七八糟而又单调乏味,但有一点是确定的:它跟编程(或说计算机)没半毛钱关系。


我的编程之路(编程大神们的编程之路)


电缆厂

七月,秋高气爽(说什么大瞎话,那时候还热的要命好吧——不过诗歌里面经常这样写)。

我们一众坐着绿皮车咯噔咯噔来到了如花的成都——旁边的一个小城市,德阳。

初到德阳,给我两个印象:满大街酒糟味(据说剑南春旗下一个小酒厂在那);满大街小电缆厂。

我们是 08 年去的,那年刚好汶川大地震,德阳虽然不严重,厂房也斜了一些,宿舍也在整修——得住活动房,没空调的那种。

刚毕业跟刚入大学心情差不多,有种放飞的感觉。不需要再过宿舍—教室—食堂三点一线的无聊生活,还能自己赚钱养活自己,一下子感觉自己“成年”了。另外也没多大压力,很长一段时间的工作其实都是实习(跑跑车间,录录最基本的 ERP);也不用考虑买房结婚生子这些劳什子事。所以那段时间过得可以说无忧无虑,上班打卡,下班打球——对于四川人来说,下班后最大的娱乐活动其实是打麻将,但我不喜欢棋牌,所以下班后就跟几个同学打打乒乓球。

虽然过得无忧无虑,但工作其实很无聊,基本就是天天呆在车间,看着一台台机器把 PVC 融化并挤成电缆皮。虽然“专家”们告诫我们这里面有很深的技术内涵,比如如何保证电缆皮厚度均匀不起泡,我依旧觉得这项工作无聊透顶,只是为了表现得很卖力,天天拿个游标卡尺到处瞎测。

除了到处瞎瞅瞎测,就是画图。在这里我认识了一款叫 AutoCAD 的工程制图软件(好像大学学过?我不记得了)——从学长们的工作内容看,自己后半生恐怕就靠这玩意吃饭了。

画图的过程很不愉快。当时有个图(貌似是画个齿轮)被总工驳回了五次——劈头盖脸的骂那种。

我再次感觉自己的智商遭到蹂躏。

于是第二天我不去了——没请假的那种。

老子不干了!

我在床上躺了一整天。

第二天我去公司,正式提出离职——就这样结束了为期四个月的电缆厂工作,也是我唯一一份跟专业相关的工作。


我的编程之路(编程大神们的编程之路)


淘宝

我一时冲动,裸辞了。

接下来干啥呢?进另一家电缆厂?

怎么可能!

很迷茫。一段时间,除了打游戏就是睡觉,偶尔出门透透风,坐在河边石头上思考人生。

一次出门溜达,无意中跑到一家成人用品店前。我眼前一亮——要不卖这玩意?

我上网搜了下,成都火车站旁边就有个成人用品批发市场。很近,不错,可以搞!

于是当天我就杀到成都——当我看到偌大一片批发市场,各种成人用品琳琅满目时,我觉得不做哲学老师的想法是对的。世界之大,值得出去看看。

我像个贼似的来回溜达,斜眼瞄着往来人群。来这里的都是零售商,看他们表情很自然,我也就顺着走进去,找了几个老板攀谈起来。和用 AutoCAD 画齿轮不同,这玩意没什么学习成本,一看就知道怎么用的。我的唯一要求是先卖后买,因为没钱囤货。那时候淘宝很火,很多批发商都支持这种模式,于是我从他们那拍了很多照片回去,注册了个淘宝店铺,传图片,开卖!

卖得最多的是壮阳药——这玩意是真暴利,几块钱的进价,能买到上百,搞得我都良心不安。

可能是我不会运营,订单量一直上不来,平均一天不到一单!

我感觉我可能会被饿死——虽然那时候是跟同学合租的,吃住全靠他们。

于是我又去大街上瞎转,看看有没有什么好点子。


我的编程之路(编程大神们的编程之路)


初识编程

我来到市中心,看着步行街两旁摆地摊的,觉得这也许是条出路。

这些零碎小玩意成本不高,时间也比较自由——唯一可能的风险是其门槛实在太低了,做的人太多。

就在我犹豫要不要摆地摊时,不远处一个小妹向我招手。

我瞬间被她迷住了——不是说她的容貌,说实话我现在想不起来她长啥样了——被她手上的传单。

“你是说编程?”我对编程多少有点了解,毕竟大学学过几节谭浩强。

“对!这个行业现在可吃香了。”

我感觉这小妹头顶有光,照得我心底透亮透亮的。

就这样,我去了培训机构。在一帮老师的海阔天空下,我觉得自己已经坐在去往人生巅峰的缆车上,也差不多摸到白富美的指尖了。

于是我开始到处借钱,总算筹够了一个学期的学费(本来他们是按学年收费的,我一个劲扩穷,最后他们答应按学期交)。

进去上课才发现,里面基本都是初中毕业的娃娃,顶多有几个高中生——我觉得自己就是个另类。

学了两个月,我发现自己真对编程感兴趣,看来这次没走错路。

培训课程进度很慢——在我看来——所以我自己买了些书籍开始自学,有本很有名的叫《java 编程思想》,当时学得废寝忘食,云里雾里。

学了两个月,开始做一些简单静态页面,当时觉得好牛逼。

记得当时用 javascript 做了个连连看版俄罗斯方块,拿了学校期末设计第一名——我觉得自己是个天才,很后悔为啥在学校没去捣鼓这玩意。

第一学期很快结束了,该交第二学期的钱了。我实在没钱,退学了。


第一份工作

学半年编程能找工作吗?

管他呢,找找再说。

德阳没有 IT 公司,得去成都。

想学半年就找个高工资不太现实。第一份工作的目标是:有班上。

简历也没什么东西可写,只能把培训机构做的项目搬上去(加点润色,至少看上去高大上),再吹几句自己怎么怎么热爱这行,有什么什么样的优势。反正,如果找工作的要求仅仅是“有班上”,找到还是不难的。

我当时找到一家初创公司(刚出来多半也只能找这种),好像叫“打分网”(没做多久就倒闭了,不记得名字了),就是用户可以给各种品牌手机评分、写评论。当时 SNS 概念很火,很多这方面的初创公司。

工资只有 2500——不过在当时的我看来已经可以了,毕竟在电缆厂才 1500。

那时候很流行用 flash 做页面(只流行了很短时间,后来被 ajax 替代),有个全栈工程师负责用 ActionScript 写 flash 交互,我负责写后端。

我打开后端代码一看,尼玛,这是什么语言,到处都是 $ 符号?

同事告诉我那叫 PHP。

纳尼?说好的 java 呢?

在那——那个爬虫是用 java 写的,不过已经不用动它了。

我就这样入了 PHP 的坑——从此再也没碰过 java。

我的第一个任务是用 PHP 写模拟登录,就是用程序自动登录 Google、新浪、亚马逊等网站,然后抓取里面的东西。至于为啥是抓亚马逊而不是抓淘宝,估计因为老板以前在亚马逊工作,看不上淘宝?

抓谁不重要,重要的是我特么压根不会 PHP 啊(那时候我没想到 PHP 那么简单,时间紧迫也没空去学)!

我花了几个通宵没搞定——感觉整个人被骟了。

我瞪着双熊猫眼,跟老板提离职——我想一个人静静。


我的编程之路(编程大神们的编程之路)


闭关

这份工作让我深受打击,之前还觉得自己是个天才,现在感觉原来自己一无是处。

晃荡几天后,我决定静下心来好好研究下这个 PHP 到底是什么鬼东西。

一研究,发现这玩意出乎意料地简单。我根本没买什么书,也没看什么视频,就是把官网从头到尾看了一遍。

我觉得我已经掌握这门语言了。这里没有类型,没有无处不在的 class(那时候 PHP 已经支持 class 了,但不是主流),没有复杂的包结构,还不用编译!

我又系统学了其他相关知识诸如 Linux、Apache、MySQL、jQuery。

于是我又重拾信心了,觉得自己可以干大事了。

那个时候 SNS 概念很火,人人网、开心网、聚友网(MySpace)如日中天,看得人眼馋。当时和一个朋友聊天偶尔聊到这,头脑一热,也想去开发个某某网出来。

初生牛犊不怕虎,想干就干。我们想开发个家庭 sns,一家人可以在上面建立虚拟家园,存照片、记日志啥的。

开发不到两个月进行不下去了。开发进度奇慢(就我一个菜鸟开发),也没有美工,后期怎么运营也没有思路——更重要的是,我们发现其实已经有好几个类似的网站在运营了(后面无一例外都倒闭了)。

于是我又放弃了。

这段日子最大的收获就是狠狠地锻炼了编程技能,自此可以独立承担项目了(并发量和复杂度不是那么大的)。



我的编程之路(编程大神们的编程之路)

德阳这地方是待不下去了(第一份工作离职后又回到德阳),生活节奏过于散漫(下班后满大街的麻将声)。

我得去大城市晃荡一番——比如深圳。

2010 年,我背着旅行包,坐着绿皮车,咣哧咣哧来到深圳。之所以选择深圳,一方面几个大城市中深圳算比较近的,另外深圳有个比较要好的同学。

在深圳的第一家公司是一家招聘网站(目前已上市),那时差不多 600 人规模。面试出奇地顺利,入职后技术负责人说感觉我技术挺不错,让我去开发流量统计系统。

这次我没出洋相,花了一个月时间,加班加点,终于把系统开发出来了(虽然用现在的眼光看那个系统很粗陋,但基本设计思想是对的),上线运行一段时间也没出什么幺蛾子。

第二个项目是校园招聘系统。这是个面向校招生的独立平台。在这个项目中,我发挥了自己出色的逻辑分析优势。得益于大学时期的哲学训练,我对概念澄清与逻辑推演很擅长,在我看来,需求分析就是一种逻辑推演——角色-行为逻辑推演。接到产品经理的需求文档后,我写了一篇两倍于斯的再分析文档,指出其中不下十种逻辑问题——结果是需求被打回重新设计。

这两个项目给了我大量的实战经验——编程、数据库和系统设计方面。这两个项目后我成为团队核心开发成员,后面很多时间在开发底层组件——很多是基于 jQuery 的前端组件。

随着业务量的增加,网站的搜索性能越来越被诟病,一次搜索可能需要 10 秒之久,这对招聘网站是不可接受的。

我当时接到的任务是引入开源搜索引擎,优化网站搜索性能。

在今天看来这其实是很简单的任务——引入 sphinx 或者 ES 就解决了。在当时也不难,大约花了一周多点时间就搞上线了——搜索时间从 10 秒一下降到 0.1 秒,这让公司刮目相看。这件事让我深深感触:对于公司来说,程序员的价值在于他给公司带来了多少收益,而不是他自己的技术多么牛逼。你哪怕技术平平,也没做过什么特别炫酷的东西,只改了个符号,但给公司带来了巨大收益,你就有巨大的价值。公司只会重用有价值的人,而不单单是所谓“能力强”的人。

初来深圳的生活极其单调——也极其充实:除了工作就是学习,疯狂地学习。我开始研究 Linux,研究 jQuery 源码,研究 PHP 框架源码,研究 MySQL 底层机制。提升技术水平最佳方式就是去研究优秀软件的源码。

就这样持续了一年——直到我的心又蠢蠢欲动。

那天,我跑到主管面前说我要离职。

主管很诧异,跟我聊了半天。我很坚持,理由是想去外面大厂转转。


我的编程之路(编程大神们的编程之路)


大厂

每个程序员都有一个大厂梦。

我当时估摸着,自己现在的水平进第一梯队(BAT)有点悬,退而求次,进第二梯队吧。

我先是面了酷狗。面试过程出奇地顺利,虽然面试题基本是 C 语言相关,不过那时候我私下学了点 C 知识,略懂皮毛,看那些题目也不太难。第二轮是 CEO 面(我有点纳闷,这么个岗位也要 CEO 亲自面试?),hr 给我一份笔试题,瞅一眼,跟编程没毛关系,更像是高中的阅读理解题,主要考理解分析能力——这正是我擅长的。

题做完了,去跟 CEO 聊。我心里有些忐忑,大佬会问我啥呢?去了才发现忐忑是多余的,越是大佬越亲和得很。他也没问什么废话,就是让我说说这些题选 A 不选 B 的原因,就是看你怎样分析问题。对我来说小菜一碟。

于是就这样通过了。然后跟 hr 聊薪资。薪资不是很高(或者也还不赖?我也不知道,当时糊里糊涂),八千的样子,说广州薪资水平比深圳还是差一截的。我觉得也有道理,先进来再说吧。

于是我满怀欣喜回到深圳。

躺在床上,我又感觉广州有点远——有点不太想离开深圳。

于是我又在深圳找——去了迅雷。

迅雷主要面了 PHP 和 javascript 的一些知识,也不太难(后面听同事说做错了几题)。第一轮面试官老是问我前端(主要是 js)问题,我就很纳闷,我不是来面试后端工程师的吗?后来才知道他在里面主要就是写 js。

第二轮是事业部技术总监面,也没问什么很难的技术问题,一半的时间在聊生活。

迅雷的待遇和酷狗差不多,我选择了去迅雷,主要是它离我住的地方近,懒得搬家。

去了才知道,PHP 工程师在里面属于前端组,主要做各种脚本工具(如异步生成缓存)——他们后端是用 C++ 写的。我进的是迅雷看看事业部(现在卖给响巢了),第一个任务是给各页面生成静态缓存——这是我在里面用 PHP 干的主要的事情,其他时间都在写 js。

迅雷(应该说看看事业部)给我的感觉是工作氛围很轻松自由,工作节奏较慢,我觉得一周就能搞定的,他们要两周。所以我在里面其实很多时候没事做,只能学习。

还有个现象让我受不了,他们每天晚上都要耗到 8 点以后才下班——不是说工作很忙,很多人其实在那玩游戏、看电视、盯股票。那时候的我还没有加班的概念,每天晚上7点前就跑了,渐渐地我发现研发这边每天都是我走得最早,像个另类——这种感觉很不舒服。

至于技术水平,他们给我的定位是中级偏下(或者叫初级偏上),不过在我(当时)看来,其他人水平也不比我高多少(有那么几个技术比较牛的,但平均而言,水平一般——可能是当时的我比较轻狂?)。我大部分时间都在敲 js,原生的那种(其实是用他们内部开发的一个小框架),最让人头痛的就是 IE6,有一次一个小问题把我折磨了大半夜,那次刚好是产品发版,其他人都干等着——那是我最尴尬的一次,像是吃了狗屎。

平心而论,我在迅雷多少学到了一些东西——特别是在工作流程和团队协作上(虽然很多东西是我后来反思时才发现的)。他们的产品经理是我见到的最专业的(哈,我也没见过几个产品经理嘛),你只要严格按照他的产品文档敲代码就行(这难道不是理所当然的?不是,大部分小公司做不到这点)。

看看的问题是它始终未能真正盈利(卖给响巢后就不知道了),当时其主要收入是广告,外加会员(会员在当时还是个新事物,很多用户还没有接受这种模式),面对高昂的版权费用,常常入不敷出——不光看看是这样,当时几乎所有的视频网站都是这样,所以当时流言道视频就是个拼爹的行业,不幸地是,看看的爹远没有爱奇艺和腾讯视频的硬朗。

对于程序员来说,迅雷是个很不错的跳板。很多程序员在迅雷干三年左右便去了腾讯——除了我。

这不是说我在迅雷待了很久——我在那只待了差不多半年。

当时因为家里有些事情,需要请两个月长假。上面的意思是时间太久,无法按假期处理,得先办离职,后面如果想回来可以再入职。

于是我离职了——永久的那种。

我再没有回去。我觉得自己无法适应那里的工作节奏,工作也没什么挑战。我觉得自己还是应该去小公司,有句话叫“宁做鸡头不做凤尾”。

这是我做过的最错误的决定之一。年少轻狂,缺乏长远考虑,潜意识里根本不把 BAT 放在眼里——等意识到时,为时已晚。


小厂

两个月后,重新开始找工作。

我像个无头苍蝇,到处乱碰——差点去了外包公司。

最后去了一家做建筑设计的创业公司(早已倒闭)。当时的技术面试就是走个形式,然后就到 hr。hr 听说我在迅雷待过,二话不说,明天来上班吧。

如我所愿,我在那“带团队”——两个后端(包括我),一个前端,一个运维。

公司想做建材行业的阿里巴巴,但老板并不具备互联网思维。产品一直在开发阶段,直到我离开时都没有一个真正的客户。

工作之余,我开始学汇编和计算机底层知识。

一年后,实在看不到希望,我离职了。

后面又待了几个小公司,没有一个超过三个月的——有些是倒闭了所以离开,有些是快倒闭了所以离开。

至今还活着的一家叫明源——不但活着,去年还在香港上市了。

我在明源呆了两年——这是我成长最快的两年,不光指学知识,更重要的是解决问题的能力。

明源很有技术氛围,团队采用 scrum 敏捷开发模式,每个团队 8 人左右:产品经理、前后端、测试。一年后,我担任一个项目团队的 SM(Scrum Master)。从那时起,真正开始思考团队问题。

也是在那时候,我开始重点学习系统架构和设计。在系统设计上,对我影响最大的是《领域驱动设计》这本书(这本书前后看了几遍,每次都有新收获),当时我看完第一章后,感觉它给我打开了一扇天窗,很多疑惑拨云见日。我很喜欢里面的一个观点:代码即设计(源自乔布斯“产品即设计”的说法)。

明源每年都有一次“黑客马拉松”活动,所有团队先选一个创意点子,然后通宵达旦设计、开发、测试、PK。一些作品后来转换成了真正的产品。

遗憾的是,我当时所在的项目不温不火(当时很多项目都是这个状态,真正赚钱的就一个。当然我走几年后有几个新项目发展起来了,最终还上市了),加之当时跨境电商很火,我决定辞职去做速卖通(阿里巴巴旗下跨境零售网站)。


我的编程之路(编程大神们的编程之路)


跨境电商

很多人看别人做一件事情成功了,便觉得很简单,自己也想去试试——我就是这样。

那时候(15 年左右)跨境零售电商很火,很多人做亚马逊发财了,阿里巴巴也在大力推广速卖通。我觉得可以一试。

套路很简单:去速卖通注册个账号,从 1688 上搞些图片传上去,开卖!

大家都是这个套路,所以你去商品页随便搜个东西都会出来一大把一模一样的。

于是就沦为价格战。跨境零售很大的一部分成本在物流(我们卖的小件运费比商品批发价高得多),上面很多商品的标价比运费还低,纯粹赔本赚吆喝——也就是刷流量。

我坚持了一年,开始的时候还算可以,至少比上班强点。越到后面越难搞,天天传产品、优化推广、打包发货,比上班累多了,但单量就是上不去。

我也曾打造过几款爆品,一段时间内订单量确实喜人——马上,就会看到大量跟风。

如果决定继续做,得成立团队才行——供应商管理(拿到更低的批发价、定制商品)、物流管理(拿到更低的价格、更稳定的服务,甚至是海外仓)、售后,最重要的,持续的打造爆品——这是一门高深的学问,非常花精力。

我选择了放弃——这可能又是一次错误的决定。现在看来,如果当时找几个人一起搞,或许结果会完全不同——当然也可能一败涂地。

说白了,那时的我并没有准备好全力以赴,对电商运营也只是摸了个皮毛,一旦遇到困难,就会退回老本行——至少后面还有路。


老本行

于是我又开始找工作。

在朋友介绍下去了平安一个新成立的项目团队(平安好车主)。

这是个全新的团队,开发人员主要由 PHP 和 Golang 组成(后来除了离职的,基本都转 java 了)。

平安这种大公司流程出奇地繁琐,我申请个服务器资源,各种文档各种审批,前后折腾了三周有余(后来据说部分是因为新团队和平安科技运维团队沟通不畅导致)。

我开发了个好车主推广活动,策划一再强调注意并发,到时候访问量怎么怎么暴涨。本来信心满满,让他几次唠叨,我倒心里没底了,活动当天死盯着负载和数据——结果毛事没有,他所谓的并发也就那么回事。

活动结束了,我的老毛病又犯了——我觉得这里的节奏不适合我。

其实那时候我自己迷茫得很,我不知道未来该怎么走了,甚至不知道该不该继续呆在这个行业。

我躺在床上把过去的事放了一遍电影,总结出两个关键点。

这些年蹦跶得有些频繁。像我这种半路出家的,前一两家蹦跶很正常(因为不太可能第一家就能进大厂,多半需要从低处开始起跳),但差不多从第三家开始就要讲究沉淀了。沉淀时间差不多要三年,因为你需要时间去融入团队,融入公司文化,理解公司业务和系统,解决几个关键问题,开发一两个核心系统,提升自己的综合实力。

“宁做鸡头不做凤尾”的想法害人不浅。人们喜欢用几句浓缩的所谓“格言”来指导(忽悠)自己行事——很多人往往就死在这些“格言”上。相较于凤凰,鸡自然满地都是,但绝大多数都活不长久。当今时代,指望通过加入一家未来能上市的初创公司发大财,等于买彩票赌头彩。重点不在于能不能去赌,而是自己是否清楚这个概率风险。对于你我普通程序员来说,最优解是尽快进入大厂——收入是一方面,更重要的是自己实力提升与未来品牌影响力。

我决定进一家稍微靠谱点的公司,老老实实呆几年。

我去了一家 toB 公司。

和以前一样,我面对着一堆乱七八糟的系统,混乱不堪的工作流程——还有加班。

呆了一周,心情糟透了——第一念头又想走人。

但这次我没有那么冲动了。所谓家家有本难念的经,没有一家公司能做到完美无缺。你是来解决问题的。

我开始着手解决各种疑难杂症。在这里,我见证过因系统崩溃而导致的流血事件。老版把视频发到群里,大家像鸡一样呆坐着。

我开始整理公司系统架构。公司有很多异构系统,有些团队不在一起办公,沟通都存在困难,很多底层数据都没有打通,系统交互困难重重。

我洋洋洒洒写了一大篇架构设计文档,企图一举解决掉各种问题。然后——在漫长的时日里——我愈加确定一点:研发问题的本质是人的问题。

你的架构设计可以做到无懈可击(实际上做不到),但问题是很难实施,越无懈越难实施。对现有系统的改造可以用“举步维艰”来形容,没人愿意去做大型重构——系统不稳定的锅可以由整个研发部门来背,但一旦因重构导致重大损失,责任总能追溯到具体团队甚至个人身上。

重构在技术上的困难主要是新旧兼容问题。包括代码兼容(灰度)和数据兼容,甚至涉及到数据迁移——没人愿意干这种劳什子活。

所以研发团队的一个共同现象是,大家宁可日复一日地修复没完没了的 bug,也不愿下决心重写整个系统。

所以,如何让自己的设计切实可行,并说服其他团队支持你的方案,并且愿意划配资源协助你做这件事,是非常考验一个人的综合能力的。

与此同时,我又开始带团队。这次带得比较久。

团队的本质也是人的问题,但团队≠个人之和。我们常说 1+1>2,却忽略了很多时候 1+1<2,特别是在跨团队协作时。研发团队遵循边际效益递减定律,当项目参与人数达到一定规模时,再加一个人会让整体进度更慢——外界感觉不到这点,你经常听到“再加几个人,这周搞完!”的豪言。

我开始反思自己的知识体系。

自从入行以来,我就在一刻不停地学习(除了做速卖通那段时间),各种编程语言、各种数据库、算法、架构、设计、各种新潮框架......渐渐地,我发现个问题:我学得越多,就觉得自己不知道的东西越多。这样学下去,何时是个止头?更重要地是,一些东西前面学后面忘。

有一天,我想通了一件事:我没必要学这么多东西。知识的价值在于用其解决实际问题,而不在于你记了多少定律多少公式。要想让知识发挥实际作用,必须形成知识体系。

所谓体系,就是你的思维模型。

知识本身并不必然会构建出知识体系。想想我们学数学,从小学到大学,学了长方形面积、毕达哥拉斯定理、正负数、指数和对数、实数和虚数、微积分......越学越迷糊,越学越讨厌数学——因为我们所谓的“学”数学,不过是背了一堆数学公式,压根没有构建出数学知识体系。

要想构建数学知识体系,你必须学会如何创造数学本身——真正要学的是如何得出“长方形的面积等于长乘以宽”的思维方式,而不是记住面积公式本身。

模式提取往往需要建立在大量的经验和知识储备上,比如只有在实际研究了几款软件的集群实现方案后,才能提取出一些通用模式,进而去研究分布式协议。

所以,一定量的知识储备是必要的,但到达一定程度后,需要着重思考、整合、建模,构建自己的体系。