下拉查看目录
汪涛:项目中的非技术素养
版权声明
本文首发自微信公共帐号: 学习学习再学习(xiaolai-xuexi);
无需授权即可转载,甚至无需保留以上版权声明;
转载时请务必注明作者。
以下是《共同成长社区》第 48 次分享,分享者是汪涛。
汪涛
东北大学毕业,现在在 58 转转担任研发工程师。做交易系统出身,技能上现在专注于架构,中间件,和机器底层。
《共同成长社区》的分享,并不是 “私密” 的,我们不在乎分享内容是否流出去,事实上,我们会主动拿出绝大多数的内容分享至社区之外 —— 因为所有的分享,最终传播得越广越有价值。
若要进一步了解《共同成长社区》,请在后台点击 “收费社群” 的子按钮 “共同成长” ……
请注意:共同成长社区已停止接受直接加入,请参阅这篇文章。
项目中的非技术素养
我 14 年 11 月份离职去了小公司。在小公司做事情真的是不一样的感觉。大公司里,事情的责任不会完全放在个人的身上。小公司的人很少,责任没有人可以推诿,事情必须负全责。
2014 年从年初到年末,一直在做项目,项目都不小,大部分时间只有我一个人负责后端,从做不成,慢慢到能做成。在这个时间段内,第一个项目做了四个月,第二个项目又做了四个月。第一个项目两个人做,做了一部分工作,打了一部分下手,第二个项目是全程包办,之后的项目都是全程包办。
其中的过程压力很大,有过不停延期,有过推翻重做。我是一个心理素质巨差的人,自我调节能力在当时非常不好(现在是一般不好),有时间整个人都很崩溃。所幸每个项目都磕磕绊绊的完成了,结果最终也还不错,但是如果从我现在的角度去看,当时的表现,其实连及格都不算。
我在这之后反思了这些经历,记了些笔记。我信奉“考后一百分”的。于是之后努力做了些总结。我刚刚入行的时候,看过一本书,我的影响很大。书名叫 《The Pragmatic Programmer (程序员修炼之道:从小工到专家)》,这本书讲的实际上是软件工程师的素养,我非常喜欢这本书的组织方式,全书提供了大概 70 个 tips,都是非常简单朴实的一句话,比如:
做变化的催化剂(Be a Catalyst for change);
记住大图景(Remember the Big picture)。
书读过之后,对我而言无法背诵全书,但是这些 tips 会经常以不同的面貌不时的浮现。我们工作的时候会有体会,大道理其实很难用上,真正让我们完成的工作显的有所不同的实际上就是这样一个一个小声音。比如我写代码时,碰到一个地方过于曲折了,就会下意识在心里嘀咕:
这个地方是不是太复杂了,要不要简单一点?
之后就会按照这个想法检查自己的工作,抽象是不是合理,复杂度是不是可抽一部分出去,总之会尽自己努力把代码处理的简单一点。这种反应,在我来看就是上这种小声音的浮现,然后指导自己的行为更有素养。我对素养的一个定义是:
可以让你少踩些坑的规则。
我接下来所讲的,也是这样一个一个的 tips,关于怎么在项目中少踩些坑。
放松
不知道大家有没有运动中抽筋的经历,抽筋之后,除了疼,肌肉一定是紧紧的绷住的,有时候摸起来像铁块一样。抽筋,是由于肌肉的过度紧张,代谢废物堆积,部分肌肉先丧失了一定的放松能力,然后这部分丧失了放松能力的肌肉,会给另外还能正常放松的的肌肉带来更多负担,最终全部整体丧失全部的机能。
我把放松当作最重要的素养。原因是项目中也会抽筋。在我看来,任何项目的进行,天然是一个堆积压力的过程,随着了解的细节越来越多,做完的事项越来越多,项目的结束日期越来越近,随着时间的流逝,各方面的压力越来越大。在这种时候,不能放松的结局和抽筋是一样的,来自各方面的压力会不停滚动叠加,最终技术变形,完全失能。
我相信每个人都或多或少经历过由于过度紧张的时候干错事情导致头皮发麻的时刻,我对于这尤其印象深刻,我是很容易紧张的那一类人,并且紧张之后一定愈发紧张。
我的经验是:
能对抗紧张的,只有真的学会放松。
放松实际上是一门需要习得,且可习得,可进步的技能。无意识的放松是本能,有意识的自主放松需要自主刻意练习。我学到的一点技巧是需要先练习识别自己是否紧张。然后对自己的紧张做功课。每个人的策略需要自己实验,抄书,做菜,遛弯都可以。尝试策略可行后,就反复应用。毛主席的:
不管风吹浪打,胜似闲庭信步。
是最高境界。
列出大纲
我们可以把项目理解成:
不能在短时间内彻底完成的工作。
复杂是很天然的一个属性。面对复杂的事物,我们的认识并不是一条竖线直接上来的,理解会且只会逐步加深,必须要一个过程才能彻底认识到我们在做什么,应该做什么,应该怎么做。
我之前工作的时候,很容易吃这样的一个亏:
拿到一个工作,不动脑,先动手开始干,干了一天两天后才明白过来,之前完全跑偏,得重新开始。
这种事情最让人崩溃,而且是手越快越崩溃。有一次项目开始的时候,在纸上写写划划,突然学会了使用大纲这个工具,虽然这个理解过程还是不能够直线跨越,但是相比于之前没有学会使用大纲的时候,因为理解犯错的时候明显少了很多。
我对大纲的使用办法是这样的:
先对项目列大纲,不停拆分罗列细节,拆分的这一个过程,实际上是会强迫自己进行思考,之后通过大纲对每一个现在认知里细节进行确认,这个确认的过程中,预演整个项目,同时把理解和验证的工作前置。
之后的工作过程中,不断对这份大纲修订,记录新的理解,同时与旧的理解对照,可以认识到自己理解进步的思路,可以提高对接下来项目的理解能力。
相比于超高效率,重要的是保持节奏
在我们的背景知识里,大家是鼓励沉浸进去,超高效率工作的。心流是一个完美的工作状态,忘记时间,而且有超高工作效率。
但是,这种超高效率的状态,在项目进行中并不是想象的那么好。我会有这样的经验:
早上过来,喝一杯咖啡,仗着自己头脑清醒,开始迅猛工作,下午的时候,大部分时间会觉的头脑疲惫,发困。
另外一方面,早上的高效率实际上总会带来一些粗糙的感觉,不时要返工重做。实际上一天下来,会更累,但是效率并不是真的高。趁着兴致熬夜加班干活,更是糟糕,质量完全靠运气,第二天基本上也是废了。
我的经验是:
保持自己的节奏,哪怕适当放慢一点,不会有什么损失。
但是进入自动化加紧加班赶活的时候,尤其是感觉自己走的很快的时候,反而很容易出纰漏,出了纰漏之后算上善后的时间,这的只是感觉快。最好长期保持一个稳定,稍微缓慢的节奏,做事之前有时间动脑,想想之前和接下来的工作,哪些需要注意的地方,为了长期的节奏,每天甚至可以故意做慢些,节奏对了,比每天超高效率干活,在进展上,要快的很多,也舒服很多。
频繁确认
这是一个在我看来通用,但是很难做到的素养。
在项目开始前,一定要明确谁是责任人员,是自己还是其它的同事伙伴。在整个项目的过程中,都要和项目的责任人想办法频繁的进行确认。确认的内容,包括但不限制于,进度,难点,风险,里程碑等等。任何花在确认上时间,都是值得的,都能够减少项目的风险。确认难免会有心理负担,但是相比较于之后项目风险集中爆发的可怕感觉,是非常值得的。
说来惭愧,我最开始的习惯实际上是,躲避确认的时间点,请一天假,故意拖着,等等手段,之后碰上了几次项目风险爆发,再之后,任何项目中恨不得每天都跟人确认。没其它原因,就是真的怕了。
人真的是这样的,厄运来临之前心存侥幸,厄运来临之后战战兢兢。真的出过一次事情之后彻底不一样。当然,我不是鼓励大家故意去犯事,我可以给大家提供一个技巧,在犹豫要不要确认的时候,设想一下项目的风险爆发的感觉。在这个素养上,怕,是第一驱动力。
越慢越快
这是我在其它地方的一个感受,后来应用在工作上发现很有效果。
对于复杂的东西,我喜欢手抄,手绘。代码理解不了,慢慢手抄一遍,读到精巧的文章吸收不了的,也抄一遍,架构复杂的软件,手绘一遍流程,理清结构。手到,心到,放慢理解速度,抄的时候思考不能理解的细节。百试百灵。
我的这个习惯是从章亦春的微博学来的。也见过有的产品经理,为了理清楚页面细节,将产品页面整个手绘一遍。我自己有时候也在想为什么手抄真的是有奇效,原因有三,一是注意力高度集中,二是没有机会跳过细节,另一个是强迫读的速率慢下来。
我把这个慢下来这一点照搬到工作中,也有效果。做项目也是,真的是做的越慢,速度越快。在项目中的慢并不是说手脚不麻利,而是尽可能的细致,尽可能的相关问题都在当前节点解决。这样看上去是慢了,实际上进展会违反直觉的快。
一个慢下来的技巧是,在一部分工作时候,问问自己,这部分还有什么可以做的事情么,然后认真的回答这个问题,从我的经验来看,如果真的很认真问,认真回答,那么基本是可以做到很慢很慢的。
有异步的能力
人的天性会希望任何时候都能有有及时的反馈,我们都从网上下载过东西到本地,在下载时,有时间下载进度条 bug 了,不动了,然后就心神不宁,一遍一遍的查看文件到底下完了没有。
现实生活中是没有进度条这种东西的,有些动作必然是没有及时反馈的。或者会依赖别人的工作结果,或者是需要上级的审批决策。在这些时候,有些人的反应是自然的心平气和的转移到下一个需要工作的问题上,有些人会心神不宁的等待某件事情给出反馈。
这两种反应的效率差会是天差地别的。在我看来,工作上的异步,就是指有能力识别真实的世界,识别什么样的事情真的必须等待,什么样的事情其实不必等待结果。在我看来,大部分工作上的事情,都是不必依赖及时的反馈的,如果真有,那就 push 一下,然后继续回去干其他的活。我觉得异步的标志的是,在保证休息的前提下,尽量确保自己的工作时间段内,大脑不会因为各种并不存在的幻觉空转。
对抗尖锐的情绪
这里有一个形容词,尖锐的。人是情绪动物,情绪是充斥在我们的生活中的。
尖锐的情绪是一种只要出现必然有害的情绪,因为会代替思考,代替动作,有时候无法动弹,有时候反应过激,总之必然有害。比如惊慌,比如激动,比如愤怒。
失措是我非常喜欢的一个词,如果被这种情绪袭击,那么你接下来的举动多半是失措的,不仅对当前的事情没有帮助,并且可能会引来更大的麻烦的事情。
比如线上出问题了,处理的这时候能感觉明显感觉到情绪的不平稳,惊慌,自责,在修复线上数据的时候,明显能感觉的到,自己的手在抖。
我们能做的事情就是,在这种时间点,认真的反复的提醒自己,平静下来,情绪不会有帮助,尽可能平静,然后再把事情给处理好。简单来说一句话:
保持有意识,对抗动物本能。
停止一次
这是我的一个生活心得。来源于高中时期的一次逃课:
有次压力太大,逃了一个下午课,找了个草坪无所事事的躺了一下午,回来之后,成绩突飞猛进。
应用在工作就是,在一整个超长的工作周期中,比如十天半个月,专门抽出一个下午去中断一次,或者做一点其他的工作,或者干脆无所事事的度过一个下午。我没有找到心理学上的依据,但是我的推断是:
在做事的时候停止一次,会让你从可能满负荷的工作状态中脱离出来,返回来工作的时候,会更容易审视整个工作的细节,同时能够真正的让你放松一次。
在之后的工作中,我这样做过好几次,对我来说每次都很有帮助。
直面困难
面对困难一个很必要的认知就是,大多数困难是绕不过去的,它必然存在,不论你直面还是躲藏。确认开发细节,评估开发时长,攻克技术难点,这些是绕不过去,甚至绕过去还可能会换一个面貌继续在路上等着你的。
之前有项目开发经历,当时是做一个二级市场开发,有一个数学公式,特别复杂,因为畏惧没有确认好,最终在一个月后整个项目推倒重来,代价最大化。我现在的认识是,工业界的问题,最终一般都是能被解决的,其次如果最终努力,也解决不掉,那么对工作进行来说成本真的最低。困难的问题永远是那么一些,放在那里就是风险,不面对永远不会少掉一些,尽早面对让代价最小。并且,有些事情真的只是看上去难,自己的想法有时候会骗自己,真正动手不会那么难。
优化工作流程需要考虑周期
在项目中优化工作流程是个吸引人的黑洞。优化工作流程包括,打磨工具,修正沿用的开发技术,切换技术方案。老话说,磨刀不误砍柴功,这话一点都没有错。在项目进行中打磨,需要考虑项目周期。在每次打磨前,先尝试设定时间点和预期的效果。发现预期效果无法弥补项目进展的损失时,需要能够认识到这种改进是错觉,一定放到项目外去做。
这是一个诱人的陷阱,在我过去项目中,有无数次冲动去修改当前技术栈,最终也做了很多次,成功了几次,没有一次不对项目进行造成压力。
临阵磨枪,需要先动脑思考。另外补上一个个人观点,实际上,很多优化实际上是偏见,只是觉的好,效果真的有限。
以上就是我的分享的几点素养,希望对各位能有帮助。
长按以上二维码关注“学习学习再学习”(xiaolai-xuexi),后台输入关键字有自动回复:
输入“理财”,一篇文章推送:《理财系列文章列表(第一部分15篇);
输入“女生”,三篇文章推送;
输入“社交”,一篇文章推送;
输入“利息”,一篇文章推送;
输入“时间”,获得《把时间当作朋友》(第三版)全文在线阅读链接……
输入“分享”,一篇文章推送:《如何做好一场分享?》