那些年犯过的错
转自:https://www.cnblogs.com/xiexj/p/10259153.html#4162647
很棒的一篇文章
先讲几个个人不光彩的经历。
一、
应该是11年还在人人的时候,那段时间主要工作都是纯考验技术的活儿。那时候离职人多。我一个人承担了原来4个团队的工作。白天各路产品来找。我要利用晚上的时间将一个游戏(泡泡鱼,不知道是否有同学玩过)
接入一个日本平台,并开发完成支付功能。这是一个和其他游戏公司合作的项目,代码用python写的。我只会java,但还是硬着头皮用一周时间完成了开发。结果上线出问题了。线下环境运行正常的代码线上环境跑不起来。我们运维MM搞不定了就不搞了搁着。于是我只好自己动手,最后总算找到问题原因是这个服务器上一个工具版本不兼容导致的。
项目上线我们公司收到10w的接入费,这是第一次觉得自己给公司挣钱了。
从此我都是做相对技术含量高的活儿。比如用一个月时间不仅搭建并维护了一个IM服务器,还自己用之前没做过的android做了客户端,压测单台服务器可承受万次并发。
自己做了主图片提取的算法图片识别准确率85%,记得当时facebook好像是百分之四五十。
但是有次领导让我调研一个记得好像是图像识别还是语音识别的,我没调研出来,最后不了了之。现在想来非常懊恼。当时打怵的原因是第一那个东西是C语言写的。我一个做java的之前只做过将C++的中间件改成java。代码看着就头大还需要用它来开发。语音和图像识别太高大上,想不明白原理。现在想来,第一这种识别的东西也不是让我搞算法,肯定是调用设备或系统的某个接口而已。找到这个地方做突破口就好了。第二,我也不需要了解所有代码,只需要重点几个方法了解就可以。其实工作量和那个python游戏的一样。因为自己怂,错过了一个技术上突破的机会。
二、
在正和岛有两件事。
第一件事是记得有天干的很晚很累了,操作数据库的时候写update语句没有加where条件直接回车,将所有线上用户的头像更新成一个人的了。当时及时先用备份回滚,然后因为时间差造成的一百多条头像不对是从hive里取日志的记录,一条条手工更新回去的。还好当时是项目刚上线,就几千个用户,并没有实质性损失。从此,养成了update和delete前先将where前换成select查看结果再执行的习惯。
第二件事是接入微信支付平台,上线了也没发现什么问题。但是我们领导有次巡查,发现数据库里有两列全为空。就开始训我们产品。我一边跟领导说这是我的错,一边眼泪都在眼睛里打转了。明明是我的锅,我们产品招谁惹谁了?!这件事的教训下面再总结,因为好多年我都没找到这个问题的本质。
三、
18年夏天,经历了一个”从删库到不跑路“的过程。那段时间找找借口就是在金融时候积压的疲惫和压力,到架构这边还是破解不了压力的源头。整个人被压垮了。有次操作线上在一张数据表中本着“做正确的事”的原则,给一个数据库字段添加唯一索引。当时记得是先select group by过没有重复的,不知道怎么看错了,另外一点也是心存侥幸,觉得有问题操作平台会帮我check的。其实数据很多重复,这张数据表有现在做的2.0的数据,唯一索引是正确的,另外还有1.0的数据,并不是唯一的。加了索引后,重复的数据被自动删除了。1.0的老程序疯狂报错。我当时精力已经不支,同事帮忙回滚更新了数据库。我休了两天假。这是历史上自己最痛彻心扉的经历。因为出了事情我不是自己善后的还休了两天假,好像逃了一样。实际情况是当时体力精力确实不支,当时及时处理并没造成太大影响,但是如果我留下来处理,可能会处理出更大的乱子。为了避免对公司造成损失,我就不添乱了。
那段时间同事见到我问我怎么添了这么多白头发。我笑笑不吱声。那时候心里的焦虑排解不掉。心里就一个信念,我要一直留在这个部门,起码到做好为止。焦虑因为怕不能留在这里。不然会成为终身的遗憾:终究没能证明自己。
以上是事件,下面是总结。
1.自信心激发上限。
2.Check机制保证底线。
上面事件提实际上提到3家公司。静儿就职过的实际上有5家公司。还有两个公司,工作过程其实特别顺。总结来看,和语言沾边儿的就特别顺。上高中的时候,语文每次考第一。英语经常考第一。其他的就比较一般了。有次数学考了满分,但那次考满分的好几个。关键是我觉得自己也没做啥,就是语言类的考试不知道怎么就比别人考的好。而理科的东西,我需要加倍的努力才能和别人差不多。而我就是那种什么做不好就偏要做什么的人,竟然报考了计算机。
为什么和语言沾边儿就会特别顺呢?现在来看主要是自信心会让精力高度集中,大脑没有其他负担。能够发挥到一个上限。
天赋到底是个什么东西。天赋是我老妈本身会日语和俄语。她的经历遗传了给我,让我从出生起就有了十年的功力沉淀。在工作中很羡慕一些人,他们似乎天生就知道从各方面check、天生谨慎、及时了解经济、市场,懂得调研。这些应该和从小的经历和习惯有关系。我本身对这些东西都不感兴趣,造成了我是自己见过天赋最差的程序员。
我用了十几年时间看别人怎么做,慢慢对这些技术不再抵触、不再厌烦。给自己积攒十年的功力。当别人已经步步高升了,我才刚起步。这又有什么关系呢。因为如果我打算干到60岁,别人50岁退休了。那最终我们能达到的终点都一样。
作为程序员最重要的是要保证自己产出的正确性。如果没有天赋,就要勤能补拙。要有一个checklist,包括通用的和业务特殊的。通用的包括:
-
存储数据正确性校验
-
日志正确性校验
-
debug过程符合预期
-
结果逻辑性校验(比如:一个人数为负数肯定是不符合逻辑的)
-
开发中实时记录上线步骤,保证上线无步骤遗漏并且都验证通过
-
新逻辑是否有开关设计(上线有问题可以一键切换旧版本)
-
灰度设计方案保证遇到问题影响可控
上面是静儿自己工作过程中认为最重要的check项。自己的check项都做到了是用了保证底线的。自己的能力和自己的状态才是激发上限的。
底线在工作中可以预防出错,生活中也可以预防做出错误的决定。比如我的底线是我可以向你走99步,前提是你要迈出第1步。理由很简单。如果和一个不肯对我付出的人在一起,结局一定是疲倦和绝望。与其懊恼终生,我宁可自己心里痛苦个三年五年。总比几年过后,我终于鼓起全身的能量要摆脱眼前这个给我带来不幸的这个人。他还很气愤和不解对我说:为什么、为什么,我们过得那么好。
错了不是以后做好就行了,而是要实实在在需要长期反省与反思的。这不是好事,却是一笔宝贵的财富。积累下来就是天赋。我此生对白首之人只做过一次选择,足够了。我知道和别人在一起是什么样子,和他一起是什么样子。这是一种天赋。而遇到事情可以感同身受的预见到后果,在此之前做出正确的判断也是需要修炼的天赋。
曾经开玩笑说自己换工作的就是要把公司周围的好吃的都吃遍了,然后换个地方吃。这十几年工作经历是在积累天赋的过程。如今我可以踏踏实实的在岗位上做自己想做的事。不会被外面的世界所诱惑,因为我可以感同身受的想象到。偶尔有上面的压力,提及我需要带团队。
我是这么考虑的,目前我处于一个自己很理想的环境。每一步走的都很夯实。我希望可以尽量长一点这样走下去。因为这些经历可以让我以后更能对别人的处境感同身受,并且形成自己方法和能力体系。但是我会服从组织的安排,并在这之前多多怎么胜任而思考。因为工作最重要的是要发挥价值。
最后对于选择工作补充一点。一个好的团队是感觉自己身上的缺点和想提高的地方,在这里可以找到答案。如果自己是一个很容易受别人影响的人。那最好经常在团队里发言,并且说法分量重的人不要有明显的自身缺陷。这种缺陷比如自负、负能量高、说话方式让人不舒服。
焦るな。欲張るな。あきらめるな。みんな一歩ずつ歩いているんだから。
不着急。不贪心。不放弃。路是一步一步走出来的。