软件开发这些年,我学会的道理和教训

21CTO 社区导读:学习就是逆人性的事,有些东西就是很枯燥,你就得啃,聪明点的人,啃个一两天,笨点的人需要啃个一两年,只要你啃,总有一天能啃的过去了,我觉得就是努力不要使蛮力。



640.webp_(92)_.jpg


 
1那些年,我犯过的错误

从业 20 年,98 年到 18 年,一共 20 年,98 年毕业,我学这么多东西整个过程也不是速成的,也是一点一点来的。今天我想先跟大家说一下,我之前犯过的一些错误,犯过最惨的一次错误。

今天我们也能听到很多的这种什么删了库,跑路的,或者说是不小心把生产系统给搞挂了,我以前也经常干这样的事,而且干的还是银行,把银行的一些数据库搞乱了。

我印象比较深的一次,是在银行工作,银行都是晚上上线,因为白天要生产,所以要加班。以前用 C 语言写程序,够变态的。C 语言出 Bug 的概率高的多的多,所以就很容易出这种问题,出了问题以后,要去把 Bug 改了,改完以后,又得把数据给订正回来,数据订正回来的时候脑子一晕,y 条件写错了,就把数据库给毁了,毁了怎么办呢?就只能把头天的备库拿出来,重新恢复一下,那今天的数据怎么办呢?那就让储蓄所关门,还好有纸质的,然后就把那个网点的数据重新补录一遍,然后银行方面就说,这分明就是搞破坏。

当然我犯过的错误还有好多,以前在国际化的公司工作,尤其是在路透,最痛苦的事情就是代码没写好出问题。然后晚上被叫起来,是凌晨三点钟或者凌晨四点钟被叫起来,在迷迷糊糊中进入到一个电话会议室里面,然后跟着世界各地的人在非常嘈杂的环境下说英语,解决故障。

在路透的时候,有一个 Bug 上线了,其实这个是在我们测试时已经测出来,但是上线的时候疏忽了,没有把修复这个 Bug 的那个代码给发布出去,而是发布了包含这个 Bug 的代码,结果造成生产线上数据丢失。你想那是金融数据,这个事可大了,凌晨四点钟被叫起来。想了想,脑补一下,好像是之前犯过的那个 Bug,就总觉得应该是发上线了,结果那个补丁没跟着一起上线,这事把我急坏了。然后就听见国外那些老板们就在那边那种骂,用的都是一些非常重的一些话来骂,后面故障处理还需要批斗,要找人负责。

所以这是这种人在江湖漂,哪能不挨刀。你做得越多,出的故障越多。除非你啥也不做,但是出的故障越多,你的成长才会越大。所以我还是跟大家说,趁着年轻,多犯错误
 
因为你现在犯的错误都还好,只有人犯过错误了,你才会有那种深刻的理解,对这个东西,你会有更深的理解,不犯错误的人你是不会成长的。把人送到那个月球上那个阿波罗,那个死了多少人?出了多少事?才上了去,所以这个东西,很多东西都是这种经验教训就这么来的,所以大家一定要珍惜犯过错误的这个事。

实现一个小的目标,犯一个大的错误。犯一个大的错误,一般来说你要么就被打垮掉了,你就平庸下去了,要么你就知耻而后勇,你就越来越牛了。所以为什么在拼命的学习?就是因为以前犯过这些已经严重的错误,对我来说,说好听点是一种忧患意识,说的不好听点,是一种心理阴影,这种心理阴影导致了你必须得不断的去学习,不断的去总结,所以这导致了我今天会一点一滴的走到今天这个样子,所以,把这些东西都当成自己的好事,如果你害怕失去你不敢去犯错,你就不会去做更多的事情,当你畏手畏脚的时候,是你失去更多东西的时候。
 
 
2我自认为做过最牛逼的事情和最傻逼的事情

最牛逼的事情是这样的,我永远记得我离开银行的时候,那个时候是 2000 年 9 月份的时候,我递交我的辞职报告,我上面写了:本人对现有工作毫无兴趣,申请辞职。就那么一句话。但是我当时已经在银行干了两年了,这个辞职单还放在云南省工商银行的那个档案库里,那边的人事中心还在整天叫我赶快把档案调走,到今天还被以前的前同事拿出来说事,说你当年那么年轻,写了这么一个辞职信,房子也不要了。

为什么我觉得这是最牛逼的事?因为这个决定真的不好做。首先第一个事情是所有人都反对。因为我父母都是下岗工人,父母两人加起来一个月工资不到两百块钱作为生活费。在 2000 年,老实说是不可能生活下去的。我大学的时候,因为银行需要做信息化改造,正好赶上了这个时代需要动手能力强的学生,而不是像以前一样的靠关系才去了工商银行,所以当时我是由老师推荐过去的,说我动手能力比较强一点。这份工作对我来说是有点来之不易的,因为还分房,所以整整做了两年。

所以离开银行的决定是很难的,做完了以后,你才会觉得自己牛逼,如果简单的东西就不会觉得自己牛逼了。那时候出去的时候,同学,同事,父母,家人,全部反对,差点还跟我父亲断绝父子关系。当时我的处长说:“你的辞职信可以这么写,但是请你在后面加一句话,经劝说无效申请辞职类,那分给你的房子也就收回了?” 我说行,那就收回。然后有人问我为什么?我说一套房子换不了我的人生,你永远看不到第三次工业革命。

我每天都在看微软怎么样了,甲骨文又怎么样了,雅虎又怎么样了,IBM 又怎么样了,惠普又怎么样了,看到这些,我总觉得自己选对了一个专业,呆在一个正确的时间,但是却呆在了一个错误的地方,所以就决定离开了。但是我跟大家说,我出去是为了一个更好的经历,因为整个世界有这样的变化,所以要出去。
 
 
3出去了以后,牛逼过去就是个傻逼,为什么?

因为出去的时候马上遇到的是互联网泡沫。互联网泡沫当时一下就倒闭了好多公司,所有公司全部冻结。本来还想信誓旦旦的出去就有不一样的天地,结果一出去马上就傻逼了。
 
这个事情,有同学可能不知道互联网泡沫,当年的 Dotcom,只要你申请一个 Dotcom 域名,放一个网站里,你就可以融钱了。区块链泡沫也是差不多。所以那时候也是说,用互联网就可以颠覆世界。一会儿我再跟大家说颠覆世界的事,这是下半场的事。

出去后,我就找不到工作,找不到工作就只能去做外包,那时候银行需要外包,外包公司又缺人,所以我就进入了一个系统集成商。系统集成商把我外包进了一个银行,在银行里面做封闭开发,从早上九点到晚上十点,礼拜一到礼拜六,今天所谓的九九六。2001 年到 2002 年,就这么干了一年。

反正,自己觉得自己挺牛的,出去以后,就马上傻逼掉了,发现这个差距还是挺大的。后来我从昆明到了上海,发现这个一线城市与昆明差距巨大无比,就是过高的预估了自己的能力。去面试的时候啥也不懂,面试问我 C 语言几个问题:C 语言的宏定义是啥?C 语言的对内存和栈内存是什么意思?这两个问题我都答不出来。又问我第三个问题,你要是有不知道的,你怎么办?我也答不出来,因为不知道的我也不知道怎么办。人家就说你不会问人啊?你不会看书啊?你不会上网查啊?我说谢谢指导,我当时就那么傻逼,真的,面试的时候就是那么傻,今天还敢在这做直播。那时候,连正眼都不敢看那个面试官。

后面还有更傻的事,我在上海呆了一段时间以后,我就记得有个人就跟我说,让我一定要去外企。我本来也要去外国公司。那个时候国内还没有像 BAT 这样的公司,所以那时候还是想去国外的公司。然后面试的时候,一说英文就傻了,就说了两分钟,对面那个老外跟我说算了,我们还是找个会说普通话的来跟你说吧,然后就让他同事和我聊,所以很尴尬。但是还是被招进去了,招进去就写代码,试用期写了三个月的代码。
 
 
4从上海到北京

再后来,我就从上海来北京了,是 2002 年的冬天,我还记得是 12 月 2 号我到北京,试用期三个月,三个月差点就被辞退了,因为代码写的巨乱无比。写 C 语言,不是写业务代码,是写那种分布式计算的代码。然后公司说你这个不行啊。这个写代码不行怎么办呢?要不你去做测试去吧?我就去做测试去了。测试的时候,有 KPI,每天至少要找到三个 Bug。

我懂代码,我会写代码,我看得懂代码。一般做测试的都是做黑盒测试,我可以做白盒测试。到最后,我就开始看着那个代码来做测试。比如说,它这个数组是 15 位的,它分配了 15 位,我就给它弄个 16 位的,让它溢出,就这么来搞,一下子找好多,找完以后,我还解 bug,给一些建议,然后一下子那些开发人员,就是国外那些开发人员发现,这人找的 Bug 跟一般测试人员找的 Bug 完全不一样,这人完全是做开发的料,怎么来做测试了?然后,搞的中国区经理里外不是人,到底你们想要怎么办?这人写代码不行,做测试你们也觉得他又像做开发的。

就这样,如果你做过一些测试,玩儿这些事情,你大概会了解,你从一个不同的角度看不同的软件的质量,会让你有更多的感触,大概是三个月的样子,我又被调回来,调回来就不做开发了,做什么呢?让我做维护。维护什么?Bug Fix。我要修复线上的那些问题,大概是这个样子。

后来让我做三线开发。一线是接电话的,二线是做调查的,三线是解决技术问题。解决技术问题过程当中用户会抱怨,用户就说你们这个一线的太慢了,我一个问题报告给你们公司,一直要等一到两个月我才能拿到这个问题的一个解。这个事公司一调查,发现是一线技术支持不好,那时候公司就说谁愿意去一线做技术支持?我说我去,因为想学英语,我就去做一线接电话。我一开始接不了电话,一开始就是处理邮件。我在亚洲这地方,主要一个跟日本,一个就是跟亚洲区,还有欧洲那边有一个上班的,跟欧洲那边德国、巴黎。那个时候学英语这个比较好一点,我觉得我英语够烂了,日本人比我更烂,德国人,巴黎都不咋的,跟着一堆母语都不是英语的人说英语,觉得这个自信心还是很强的,我也不发怵。尤其是跟那个德国人,德国人说英文是一个单词一个单词的说,这事让我觉得很慢,但是他力图把这个单词说清楚,我觉得他说这么慢,我也跟他说的慢,他慢我也慢,本来正常话速聊个五分钟就能聊完,我们可能要聊 15 分钟。但是没事,这是一个让我觉得练英语口语就是一定要说慢,不要图快,一定要慢,把每个英语单词音发准。

我那个时候对我帮助最大的不单单是英文,帮助最大的就是跟用户打交道,了解到用户的一些诉求,用户来问你一个问题,你不能直接告诉他这个问题的原因是什么,这没用。你要告诉他怎么解,你要告诉他一个解决方案,一个 Solution,在技术支持我学到了一些。因为我在一线解决技术问题动作很快,用户好评不断,后来不做了,用户还找我。

这是我人生当中觉得,做开发从来没有得到这种荣誉,这么高赞扬的荣誉。为什么?因为你总是出 Bug 的,一出 Bug,你就一定会被人批的。好像是做开发总是被人骂,做技术支持不一样,当你为用户解决完问题,用户会表扬你的,用户表扬你,有时候用户一高兴,他还会到 CEO 面前表扬你,老露脸了,这是做一线支持事。我做过开发,做过测试,做过一线的技术支持,经历还是比较丰富的。
 
 
5我的创业趣事

如果说是我创业,我又做出一个和别人一样的公司,那我何必呢?如果我做了一个阿里巴巴,我做一个亚马逊,我做一个谷歌,我直接加入他们得了。

我欣赏的公司就是团队小,分布式,抓重点,做最重要的事情,不要太多。我甚至一度把公司取名叫十六进制,后来不能注册,我想我的工号就是 0 到 F,再也没有了。现在估计可能不行,0 到 F 这工号不行,可能得到 32 了。我希望能够做一个小团队,能做大产出的公司,为什么?条件受限你才会去关注你要重点你要做的是什么东西。条件受限才会逼着你要去和别人合作。条件受限才会逼着你去自动化,所有的创新都跟自动化有关系。

你想想从第一次工业革命,蒸汽机时代。第二次工业革命电力时代,内燃机时代。第三次工业革命,信息化时代,全部都是在自动化,自动化一切可以自动化的东西,所以你只有条件受限你才会去想自动化,你要人多了,你就不会想自动化了,你一定会想着,赶快找人去干,这些人都闲着呢,我天天在付他们工资,赶快给他们找点活干。但是我现在不行,我人没那么多,别人来找我说,我就那么点人,你给我说什么最重要?我干不了那么多。然后逼着自己还要做自动化,就这样。基本上,扑克牌当工号应该够了,这个挺好。
大概这是我想创业的一个目标,就是失败了也不后悔的事。
 
 
6天赋重要还是努力重要?

我觉得都重要,天赋当然更重要,但是你不需要,拼天赋的人是世界上少数的人拼的,举个例子,比如说是中国有一百万的程序员,如果要到拼天赋的,可能也就是那一百个人在那拼天赋了。
 
但是其实还有,除了那一百个人以外还有很多了,你要突破一千,肯定是拼努力的,就可以进去了,有的人天赋强一点直接就进去了,天赋差一点努力也进去。对于更多的人来说,应该是拼努力,但是我想说的更多的不是拼努力,努力我听起来有点像蛮力,有 很多人会把努力理解成蛮力,这是一件很不好的事情。好像是我付出了时间,我付出了辛苦,我就能够收获一样。错,努力是一种方法,你要努力找到那种方法,而不是在那使蛮力,方法比什么都重要。所以你要努力改变自己克服自己的一些不良的一些习惯,比如说偷懒、不专心以及那些逆人性的一些东西。

学习就是逆人性的事,有些东西就是很枯燥,你就得啃,聪明点的人,啃个一两天,笨点的人需要啃个一两年,只要你啃,总有一天能啃的过去了,我觉得就是努力不要使蛮力。

   

作者:陈皓
来源: InfoQ


0 个评论

要回复文章请先登录注册