谈谈程序员的非技术思维

最近跟一个阿里的朋友聊到关于程序员如何把事情做得更好,他提到了很多在阿里的感受,让我受益匪浅。

所谓“如何把事情做得更好”,就是跳出写代码这件事,如何把我们的工作做好,获得更多的个人成长,获得更好的绩效考核结果,并能在其他人中脱颖而出。

思维碰撞下,得到了很多有效的信息,总结为三个方面的“管理”能力,目标管理、过程管理、向上管理。

相信每个人看完都能有所启发。

1.目标管理

所谓目标管理,分为两个阶段,提出目标 和 管理目标。

1.1 提出目标

目标管理的前提,是必须先能够提出一个足够有价值的目标,然后再进行达成。

如果目标本身是没有价值,或者说价值很小的,那即使你花费了很大力气去做,然后达成了,也没有什么意义。

跟莫斯科一样,程序员也是不相信眼泪的。苦劳再多,也比不上功劳。

那如何能提出一个足够有价值的目标呢?

1)来源于自上而下的任务拆解。

经常看到有人在各种社区吐槽华为的“拉通对齐”。但实际上,抛开某些管理者具体执行层面的问题,“拉通对齐”本身是非常有价值的。

公司的管理者在更高的位置,利用更多的信息进行决策,然后获得明年公司的发展目标和方向。然后就是将目标拆解到各个部门,各个部门需要相互合作达成目标。作为个人,也会承接到部门内的子任务,这个时候,可以提出自己的一些想法进行讨论,在充分沟通的基础上,应该达成一致,然后坚决执行。

那么这时候你的目标,就是跟部门目标是一致的,跟公司的大目标也是一致的。

如果你能很好得达成目标,或者说超出预期,那么你对部门和公司的价值就是越大的。

2)来源于自下而上的问题发现与解决

经常可以看到各种社区有人提问,每天CRUD怎么才能提高?

其实这个问题的一个解决思路是,在工作中发现问题,并给出解决方案。

我举一个我们公司的真实案例。

一个后端开发同学,发现自己组内的业务需求经常会有很多离线任务要做。有的人直接使用spring的Async注解,有的人自己新建申请一个线程池塞任务,有的人利用redis的blpull/blpush来做队列来进行生产消费。

没有统一的方案,有很多重复劳动,而且容易因为种种原因造成故障(比如没有资源隔离)。

因此,他提出了一个目标,做一个分布式的统一任务调度框架,解决组内的这些问题。

目标达成后,还在全公司进行了推广。

后面的结果大家应该能猜到了,升职加薪走上人生巅峰。

有人说,你这个肯定是小厂啊,大厂各种工具都很成熟了,没啥要做的。这话说对了一半,大厂的成熟工具和框架确实很多,但也是其他人发现并且实现的,而且我相信没有任何一个公司或者部门,在任何事情上都已经做到完美,总会存在问题和不足的地方等待解决的。

1.2 管理目标

已经有了一个很有价值的目标了,我们该怎么达成呢?

这时候,我们就需要对目标进行管理。

我个人认为最好的方式是“倒排时间”的milestone(里程碑)模式。根据目标deadline来往前倒排时间,拆分不同阶段的里程碑节点,然后按期检查当前进度,最终达成目标。

其实也不是什么新鲜玩意,很多公司都有在做,但是落实到具体部门、小组、个人上,就不太一样了。

尤其我想说的是个人和小组上。

在我担任敏捷小组的SM(scrum master)期间,发现很多同学对于这种方式的计划能力都有所欠缺。

主要有两个方面的问题。

1)估时问题

如果今天只是一个写sql的任务,很多同学能准确的估计大概要花费几分钟。但是如果是一个半年或一两个月的项目,让你以月或周的粒度进行拆分,很多同学就比较难把握了。这个其实不是什么大问题,主要是经验不足,无法深刻了解到项目中的模块拆解粒度与技术难度。

那怎么做呢?有三个建议

  • 如果没有把握,那就对里程碑做更细粒度的任务拆分
  • 预留Buffer,给自己有转身的余地,能够面对突发情况
  • 可以请组里更有经验的同事或者TL进行review

2)进度意识

有了明确的里程碑和时间后,我们还需要在执行过程去及时检查进度。

比如以周、月为单位,来检查自己或者跟进合作者的完成进度。

如果发现有延期风险,那么就需要提前进行风险暴露,想办法解决问题,加快进度。正如上文提到的,如果估时有一定buffer,那么更加容易转身,否则,只能通过加班来达成目标了。

以前在做业务开发的时候,产品、前端、后端、测试等角色关联非常密切,因此在敏捷开发过程中,会需要通过每天的站会来沟通进度,及时暴露风险。

现在在做基础架构相关的工作时候,可能项目的周期会更长,比业务开发的敏捷迭代周期要长很多,因此,往往会通过周为单位的进度分享。

只有按时完成每个里程碑节点,我们才有信心按期完成整个目标的交付。

具体的实施,每个公司可能都有自己的目标管理系统,我这里做个简单的表格,更直观地反应如何对目标、里程碑进行管理。

2.过程管理

如果说目标管理是我们完成任务的基本要求的话,过程管理可能是我们获得“超出预期”评价的重要部分。

我觉得最好的方式是,在任务DOD(Definition of Done)的基础上,你有自己独有的一套“过程性DOD”。

一般我们任务的DOD是按照一定时间要求,完成什么功能,上线什么需求。有的可能会带上一些性能指标,比如接口响应时间低于多少,线下故障数量低于多少等等。

那么如果只是完成了这些要求,那么今天你来做这个事情,和另一个人来做这个事情有什么区别呢?

甚至于如果某个项目,最终由于种种原因没有上线,或者中途被终止了,那么是不是你所做的事情都白费了呢?

所以,你必须有一套自己的“过程性DOD”。

下面,我介绍一些我的经验和我见过的大佬们的经验,大家可以按需取用(业务开发和基础架构开发还是有很大不同的,尤其在迭代压力和做事方法上,所以不能一概而论)。

1)完整的调研报告

任何一个任务,都有常规方案和优质方案。就像我上面提到的那个分布式调度系统,普通同学可能就是按照自己的理解,搞个能用的方案就行了。但是优质的方案,肯定是跳出自己的眼界范围,博采众长的结果。

因此,在确定技术方案前,最好能先去调研一下业界的主流方案,看看别人是不是已经有了比较好的解决方案了。

然后把你的调研结果形成文档,这样不仅能增长你的技术视野,还能体现你的良好技术思考力,这是非常重要的过程性内容。

2)完整的技术设计文档

在确认了技术方案后,一般需要做一个比较详细的技术设计方案。

面向数据库编程?面向SQL编程?面向对象编程?面向领域编程?

这些都是需要在技术方案设计的时候仔细思考的。

一个好的技术方案,能锻炼你的技术思考力,能指导你后期快速、高质量地进行开发,也能在你以后进行维护的时候,告诉你当时为啥这么想。

通过不断地技术设计、开发、反思,才能学以致用,快速提高技术水平。

3)问题积累与解决方案

问题一般有两种。

一种技术问题。包括开发过程中遇到的问题、线上故障解决等,你在解决这些问题后,将排查过程与解决方案进行记录,形成BP(Best Practice,最佳实践)文档。然后可以跟其他同学进行分享和推广。这样你不仅能沉淀自己的经验,还能慢慢形成一定的技术影响力。

另一种是业务问题。在做基础架构的同学,往往会觉得自己陷入运维、客服的怪圈。一种好的解决方案,是将日常繁琐的运维和客服问题进行积累记录,然后努力通过技术手段去提高效率自动解决类似问题。

举一个例子。过去我们公司的数据库升配都是人肉进行的,业务方提出工单申请,然后审批,然后去找dba进行沟通,确认升级时间。然后到时间后,大家需要再次沟通确认业务是否处于流量低峰,是否可以开始升级。然后升级完成后要进行检查,沟通确认已经完成。

后来,有人提出了自动化解决的方案,通过打通工单系统、数据库管理系统、内部通知系统,将整个流程自动化,提效几十倍。

4)方法论产出

一次项目上线后,对很多人意味着结束,但对很多人来说,只是阶段性胜利,更重要的是方案论的产出与推广。

如果一次资源的投入和探索只能产出一次结果,那性价比是不高的,但是,如果有完整的可复制的方法论产出,那么这一次投入和探索的过程可以给未来的无数次探索提供指导建议,甚至于能够快速复制,那就是极高的投入产出比。

对有些更优秀的人来说,可能产出方法论之后,还能从中找出共性和特性,沉淀为平台化的产品,那就是更加的niubility了。

举一个例子。之前公司做个一个分库分表的项目,项目上线后,项目成员写了完整的方法论指导,在公司进行推广分享。还将项目过程中使用的数据校验工具,平台化为技术产品,方便其他业务线能够快速使用类似的功能。这种就是非常好的范例。

方法论的产出,无论对于公司还是对于个人成长,都是绝佳的方式。

过程管理的产物,能很好地体现在结果上。同样一年完成了几十个需求,年底review的时候,你只完成了需求,而别人沉淀了几十篇设计文档、最佳实践、方法论,并建立了一定的技术影响力,你可能就是B,别人就是A,这样的差距就是由于过程管理造成的。

而且更重要的是能沉淀你自己的学习与思考,这是个人成长非常重要的部分。即使最终由于各种各样的原因,在结果导向上没有一个好的成绩,这些过程管理的结果都是你最重要的财富。

一个五年程序员是拥有五年经验,还是一个经验用五年?过程管理往往能告诉你怎么做。

3.向上管理

这部分的内容不多,但是可能比上面的所有内容更加重要,也是大部分程序员容易缺失的思维方式。

所谓“向上管理”,不是说拍老板马屁。而是一种有效沟通方式,一种科学的上下级合作方式。

有了良好的“目标管理”和“过程管理”后,有的人可能会陷入闭门造车的陷阱,按照计划或迭代不断埋头做事,这是万万不可取的。很多同学容易陷入一种误区,我专心地完成手上的工作,就可以了。但其实这往往是最危险的。因为即使你全部做完了,也可能只是达到要求,没有任何亮点,甚至于由于外部的变化你没有及时获取,还做错了方向。

我们还是需要及时主动跟老板沟通,沟通自己目前的进度、困难、计划。让老板能及时知道你现在的进展情况。

很多时候,当老板来找你的时候,往往不是什么好事。要么就是你做了什么错事,要么就是他想知道你在做什么,做到什么程度了。无论哪种情况,都不好。

阿里的朋友跟我分享了一些比较好的形式。

  • 定期整理任务进度,将任务进度、遇到的困难、解决方案等简明扼要地整理出来,进行汇报
  • 找老板沟通技术规划,然后一起讨论哪些能做,哪些需要砍掉,然后把能做的东西一起安排一个计划进行实现
  • 多多关注组内同学、老板的周报,如果发现有什么困难,及时提出帮助,共同解决

做事的方法真的很重要,尤其是我们程序员,可能过多地与电脑打交道,而容易缺乏技术外的非技术思维。而好的非技术思维,能帮助我们更好地自我成长,更好地脱颖而出。

与大家共勉~

看到这里了,原创不易,点个关注、点个赞吧,你最好看了~

知识碎片重新梳理,构建Java知识图谱:https://github.com/saigu/JavaKnowledgeGraph(历史文章查阅非常方便)

扫码关注我的公众号“阿丸笔记”,第一时间获取最新更新。同时可以免费获取海量Java技术栈电子书、各个大厂面试题。

原文地址:https://www.cnblogs.com/awan-note/p/12637267.html

时间: 2024-11-06 13:09:35

谈谈程序员的非技术思维的相关文章

谈谈程序员解决问题的能力

谈谈程序员解决问题的能力 解决问题的能力,程序员立业之本. 一般写文章我不会特意去写,而是有感而发的时候刚好又有时间我就会去写写文字.本想推些技术文章的,但写技术文章又很耗时,写得太浅显又没有技术含量,写多了恐怕大家也没耐心去看(不就是懒么,给自己找这么多借口).公众号这么多,你又能看的了多少呢?小巫这个公众号不会像某些网红那样每天都想破脑袋去写文章,也不期望这个公众号能给我带来什么,毕竟以我的尿性我让我每天写鸡汤文我自己都会恶心.好了,进入今天这篇文章的主题,跟大家谈谈程序员解决问题的能力.

【程序员的数学思维修炼】总结一

第一章 数据的表示 主要学习了会了 0 不是什么都没有,比如在java里BigDecimal里面是根据最高的那个精度来的,比如1.99+0.01=2.00 这时候提交可能会判错,所以要去掉后导零 为啥要用二进制 还有哪些进制,神奇的八卦,八进制.钟表使用的十二进制.半斤八两十六进制.60年一个甲子六十进制 关于二进制,最主要的是要熟练掌握位运算!一些做题中常用的技巧,比如求n的m次方,判断奇偶,统计一的个数, 这一章里还提到了20!阶乘问题,还记得怎么解决大数阶乘吗. 第二章 神奇的素数 1.验

谈谈程序员的自我管理

 讲到管理,很多人会莫名的涌起一股崇敬感,这大概源于公司的高层,都被称为管理层,高高在上,拿着天文薪水,一天开没完没了的会议,个个看来都很高深的样子. 其实这些只是表面现象,羡慕的来源其实是围城外的人向往围城内的人,围城里面不一定好,举个例子来说,我有些做经理的朋友,不止一次感叹,什么时候能痛痛快快的再编码一次,那可怜的样子真不是装的. 职位越高,责任越大,责任越大压力越大,我们可以举一个例子来说,什么叫责任和压力.比如说今天中午组内成员想去聚会吃饭,大家一致推举你做决策人,你来找地方. 这

谈谈程序员自己开发网站的那些事儿

我的博客原文地址http://blog.cxycs.com/article/74 今天中午和一个技术leader聊起建站的事儿,当我提到我在自己开发网站的时候,他突然打断我,说我犯了一个技术人员的通病,那就是总希望自己来开发.他说这样不对,开发浪费了大量的时间,还不如找个开源网站架设好好经营,先有流量了再改版.他还提到,那些经营很好的网站背后往往反而都不是技术人员,那些界面一般甚至很难看的网站通常也盈利不错. 我不得不承认他有些事说对了,尤其在开发浪费了大量时间这件事上.我 一直致力于想自己开发

谈谈程序员学习英文

今天把<Ogre 3D 1.7 Beginner's Guide>看完了,这也是我第一次完整的阅读完一本英文书籍,当然也是第一本英文技术书籍.来和大家分享一下我对程序员学习英文的一些看法. 学生时代到工作的个人英语学习经历  我自己的英文怎么说呢,不好不坏吧,小学是在小镇里上的,中学时候家搬到了市里我也就上了市里的初中,一开始我的英文绝对是最烂的.老师让读课文就把英文书上的句子下面标满了近似音的汉字.比如Good Bye就标成"骨头白".现在想想真是好笑死了.还记得一次上英

《程序员的数学思维修炼》 读书笔记

电子书定价:     ¥ 45.00       这是什么?                     纸书定价:     ¥ 45.00       Kindle电子书价格:     ¥ 1.99                   为您节省:     ¥ 43.01      (0.4折)            ~ 周颖   等 (作者) 发售日期: 2014年4月1日 本书是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识.本书门槛不高,不需要读者精通很多高深的数学知识,只需要读

程序员如何用思维导图高效学习Java编程

Java作为一种常见的计算机编程语言,它具有简单.稳定.多线等特点,被广泛运用于PC.游戏控制台.数据中心.超级计算机以及互联网,相对于C++,Java会稍微容易些,但是依然需要我们学会很多的编程,作为一名程序员,如何系统的掌握这些程序呢?下面是分享的用思维导图学习Java编程方法介绍,一起看看吧! 为什么要用思维导图学习Java呢? 首先思维导图是一种结构性模型,有利于整合知识框架,其次,思维导图是一种带色彩的图文结合,相对于单纯的文字而言,更好的被人们所记住,迅捷画图作为一款好用的思维导图工

[心得]谈谈程序员选择书籍方面的一些感想

说实话,在这个发展迅猛的时代,不读书就不能有自我竞争力,读书而言显得尤为重要.而做为一名程序员而言,通过读书来提升的技能,就更为重要了.而问题就来了,我们在选择书籍的时候就显得有些迷茫.因为在这个功利的社会,就我们国内的IT方面的书籍市场真是鱼龙混杂,而我们单纯的程序员说实话很难甄别出书籍的好与坏.优与缺.因为我们这方面的书籍每本都是很贵的,如果买的翻至两页感觉不适合自己的时候,那种感觉真的很伤. 就目前我们国内关于程序设计方面的书籍,真是凤毛麟角,优质的书籍真的很少.不管是原创的还是翻译的,真

顶级程序员赢在思维模式,这些区别你注意到了吗?

我相信不同年龄段的程序员对何为顶尖程序员一词有着不同的理解,就像随着编程能力不断的提高,会渐渐有不一样的感悟一样.一般人都不愿意去研究自己不曾接触过的代码,很多人都没有尝试就放弃了.如果你经常去研究你没有接触过的代码,你就会越来越熟悉不同的代码结构和设计模式.现在人们很容易就接触到优秀的开源代码资源,你可以很方便的就下载下来做一些改动或者调试,去研究为什么代码可以这么写. 除了代码之外,很多人对于陌生的工作内容也会感到恐惧.每次换工作的时候,你可能都会遇到新公司的工作内容和以前工作的内容不一样的