在阿里巴巴,程序员除了写代码,还应该做什么?
“写代码才是最爽的,开会什么的太浪费时间了”,“我是程序员,我只想安安静静地写写代码”,类似这样的话其实在我们身边经常可以听到,之前我一度也是认为想的。但是来了阿里之后,面对庞大的系统交互、错综复杂的业务形态、海量的用户群体,慢慢发现只是会写代码是远远不够的。接下来谈谈个人的几点体会,抛砖引玉,说说程序员在代码之外还应该做些什么,以便更好的提升自我。
1.培养闭环思维
闭环思维源于“PDCA”理论:
计划(Plan) 、执行(Do)、检查(Check)、行动(Act),循环往复,螺旋上升。
具体到工作中就是这样的:
功能上线后,作为程序员的工作并没有就此结束,我们需要观察线上运行效果,是不是符合预期,有没有可以改进的地方,如果有问题,能不能以数据化的方式来说明,进而推动业务的调整。(check/do)
写代码之前,要做详细的系统设计,全面的风险评估、透彻的业务需求理解以及充分的沟通等,要高度重视计划(Plan)阶段的重要性,不然后面实际开发时很可能会出现延期、返工等现象。
对于领导交代和与同事协作的事情,要做到“凡事有交代、件件有着落、事事有回音”
2.owner意识
所谓owner意识,也可以说是一种责任感、主动精神,你可以不是某个系统的owner,但是这并不妨碍你拥有owner意识。
某个系统存在着一些一直没有解决的问题,能不能主动站出来提出解决方案!
线上问题报警,主动参与排查,而不是等着别人来看,即时你刚开始的时候并不太了解该系统。
深入全面的了解系统业务和代码,而不是仅仅只知道自己负责的那一个模块,对一个系统的了解程度是一个人owner意识的重要体现。
培养自己的owner意识,是一个人快速成长的重要起点!
3.强大的沟通协作能力
程序员绝不仅仅只是写写代码,如果你真的只是安安静静的写代码,和各方面没有充分的沟通,你写的代码大概率会有这样那样的问题。无论是大公司还是小公司,沟通协作都是必须要具备的软实力。当然这也恰恰是很多程序员不足的地方。
程序员常常给人一种不善于沟通的印象,其实沟通也没有那么复杂,不需要什么高深的技巧。
沟通首先要主动,举个例子,产品、业务提出需求后,如果你有什么不理解,你敢于主动去问,不要担心别人会怎么看你,即便是看起来幼稚的问题。
主动去沟通,及时去沟通,你才能充分理解业务需求,知道为什么要这么做,主动权才在你手里,没有充分的沟通,后续设计和写代码时可能会踩很多坑。
其次学会站在别人的立场去看问题,技术同学往往会纠结在技术如何实现需求上面,满脑子都是技术思维,要学着站在产品、运营甚至公司、行业的角度的去思考问题,不然在沟通的过程中很可能驴唇不对马嘴,大家各说各话,达不到良好的沟通效果。
最后,沟通的过程中要能够控制情绪,有时候会看到技术同学沟通着沟通着火药味就起来了,沟通变成了互怼,尤其在技术方案的讨论过程中!一旦这样,沟通大概率是无效的。当然有时候“怼”也是一种沟通手段,但是建议慎用,火候不好把握,糊了就不好了!
如果控制情绪呢,这个真的需要去刻意训练, 这里就不展开了!
一句话:inner peace !
4.多思考为什么,回归第一性原理
一个常见的现象是很多开发者不知道或者不清楚到底为什么要做这个功能,对业务背景缺乏深刻的认知。程序员不应该只是把自己定位一个开发者,可以尝试着从多个角度来思考问题。
一个需求提过来了,可以多想想为什么会有这个需求,它诞生的背景是什么,公司为什么要做这个事情,这个需求对用户到底能带来什么价值。要培养自己的大局观!
一个程序员如果只是局限在自己的那一亩三分地,可能连那块地最终也耕种不好!
5.深究技术
常听到类似这样一句话:“做业务开发很难学到技术”,其实我的观点恰恰相反,一个良好的业务架构设计是非常考验一个人的技术和业务功底的。很多时候觉得学不到技术,是因为对技术没有深入的去研究。
更常见的场景是一个功能做完了就不再管了,对该功能中涉及到的技术缺乏总结和深入研究,很多时候只是用了个皮毛。即便只是一个简单的spring mvc开发,又有多少人研究过源码如何实现的呢。
程序员不应该只满足于会用某个技术,更应该深入的去研究原理和具体实现,这样我们的技术水平才能不断攀升。
6.精通业务
一个程序员除了精通技术外,还应该努力精通业务,培养自己良好的商业意识,对业务发展有一个更宏观的认知,对当前做的事情有更准确的判断,确保大方向上没有走错。
在阿里,有些技术leader对某个业务的认知已经超过了业务方和产品经理,甚至自己给自己提需求来促进业务发展,技术走到了业务前面,反过来推动业务的进步,这就是精通业务的力量。
7.用户思维
所谓用户思维,就是要多站在用户的角度来思考问题和决策。
很多时候,不同的技术方案对用户的体验影响是很大的。
比如如何严格控制商户预算避免超支,及时提醒商户预算即将耗尽!
开放服务提供的接口和文档是否方便开发者对接,对服务的说明是否完整。
接口异常情况下如何友好提示用户,如何保证用户数据的一致性,避免用户误解等等
当我们站在用户的角度去思考问题时,对技术方案就会有不同的选择!
8.软件工程把控能力
需求开发,尤其在做一些大型项目时,软件工程把控能力对项目成败至关重要。
充分理解需求,识别需求中潜在的问题,及时发现,避免后面返工。
全面评估技术方案,技术方案本身有没有风险点,有没有不稳定的问题,是否可以充分支撑需求实现。
开发时间安排是否合理,投入资源是否欠缺,如果是倒排需求,更应该认真评估,不然很可能出现延期的情况。
配合开发的其他团队进度如何,是否可以如期交付,有没有遇到什么问题!
良好的把控能力是项目如期高质量交付的重要前提,不然整个开发的过程中很可能是漏洞百出,捉襟见肘,质量也难以保证。
9.持续进化
程序员唯有持续进化,才能跟上技术进步的浪潮,确保价值最大化。
微服务、大数据、区块链、AI等等,不断出现的技术浪潮,需要我们始终保持强大的学习能力和技术敏感度,尝试用新技术解决老问题,促进业务发展。
一个程序员一旦停止进化,其价值就会不断萎缩,技术就是生产力啊!
10.主动思考
程序员不要满足于别人来安排工作,自己被动执行,要学习主动思考,在工作上化被动为主动。
比如多思考思考当前的系统有没有什么不足,该如何改进。
长期困扰大家的难题,有没有其他解决方案,行业类有没有类似的解决方案,别人是如何做的。
业务提出的需求是否合理,对用户是不是有价值,交互设计是不是合理。
当前系统下一步应该如何演化,能不能通过技术驱动业务发展等等。
小编最近将收集的Java程序员进阶架构师的面试资料做了一些整理(如下图),免费分享给每一位学习Java的朋友。
关注我的头条号并在后台私信我:资料,即可(免费获取)。