普通程序员如何成长

程序员容易焦虑。有段时间公司内流行"技术人35岁这道坎?",网上也随处可见各种"焦虑文":

  • 阿里P8,35岁被开除后能找到好工作吗?

  • 那些被辞退的中年人后来都怎么样了?

焦虑的原因是:技术&社会在发展,害怕自己的"成长"赶不上。很多文章回答过技术人如何成长的问题:

  • 从程序员到架构师的最佳技术成长之路

  • 从初级"码农"到高级"架构",我的成长之路

多数文章从"技术"的角度分析程序员成长路径,本文尝试用逻辑分析"普通程序员如何成长"。

缘起

思考不能停留在原始问题本身,而应该探究本质。

前段时间公司有朋友问我"如何写文章"。回答好该问题要先弄清楚提问者的意图,这引发了我思考:程序员为什么要写文章?

  • 是工作/KPI要求吗?
    不是,公司没有将“写文章”列为工作项

  • 是工作空闲,用写文章来填充吗?也不是,程序员朝九晚十,不存在打发空闲时间的需求

  • 那是写文章有什么好处吗?可能有,例如总结沉淀,彼此交流学习等

下一步通过"升层/升维"的方法将上面零散的答案整理出逻辑,使用升层思考寻找问题背后的问题,再通过升维思考探索解决方案。

这样就找到了“如何写文章”问题的本质:普通程序员如何成长。(本文只讨论"普通"程序员)

分析问题

有了明确的问题,还需要对问题进行进一步分析。JTBD是一个非常好的用于分析问题的方法。JTBD(Job to be done): 用户在特定场景下必须解决的问题或完成的任务即:「目标用户(Who)」+在「什么场景(Job context)」+「完成什么任务(Jobs)」。

回到“普通程序员如何成长”的问题:Job清楚(用户希望完成的任务是"成长");但是Who(普通程序员是谁)和Job context(用户场景是什么)还不清晰。

Who 普通程序员是谁?

典型用户的方法是用一个人来描述一群人,就像用中间值(median)描述一组数一样。不同点是典型用户在现实世界上不存在。只是为了理解和交流的方便故意把描述写得很真实。

清晰的用户描述有利于问题理解和交流。普通程序员的典型用户是:

小明,大学毕业,在IT企业上班。小明每天工作很忙碌,周九晚十;像很多在一线城市奋斗的年轻人一样,小明压力很大:房贷、收入、养家糊口。IT技术发展很快,已有经验过时也很快,小明很困扰:每天瞎忙碌,成长却不多;那么如何才能摆脱眼前的苟且,获得理想的成长?

Job Context 从用户场景找"矛盾"

从用户场景中找问题,典型用户的一天是一种非常有用的用于分析用户场景的方法,通过该方法能进一步理解用户目标和问题。

问题是事物的矛盾。哪里有没有解决的矛盾,哪里就有问题.

从场景中发现用户诉求和现状间的矛盾:成长的诉求与"瞎"忙的现状之间的矛盾。具体来说就是:周九晚十,日常工作已经占满了小明的时间;如何才能"挤"出时间,做“成长”需要的事情了?

有逻辑的解决问题

逻辑帮助人系统分析问题,把握事物的规律,提升决策能力

逻辑框架能帮助我们系统的思考问题,寻找解决方案。本文使用的逻辑框架是:从"问题"出发,提出假设,明确度量目标,过程中不同总结(目标没有达成的原因是什么),迭代解决问题。

回到"程序员如何成长"的问题上:

  • 问题:繁琐的日常工作「CRUD,会议,讨(si)论(bi)」占用大量时间,却没有获得想要的成长

  • 假设:如果成长了,可以承担更有挑战的工作,摆脱低水平的重复,也能获得组织认可

  • 度量:度量和目标相关。成长的目标可拆解成各个阶段性目标,例如:掌握DDD;提升提问水平;某个时间内达到目标职业层级

  • 认知:过程中不断总结原因/经验,进行相应调整

用影响地图寻找解法

影响地图是一种结构化拆解目标达成路径的有效方法:目标是什么(Why),为了达成目标需要哪些人(Who),为此需要做什么(What)去(How)影响这些人。

使用影响地图拆解"普通程序员如何成长"的达成路径:

用户故事地图组织优先级

用户故事地图,通过组织写有“用户故事”的卡片,帮助分析需求核心价值和成本,从整体视角规划需求优先级。用户故事用来描述用户的需求,包括三个部分:角色、用户需求、价值。一句话描述用户故事:某<角色>,通过完成<用户需求>,实现<价值>。

基于影响地图梳理出来的用户需求,根据价值进行分类:

  • 效率: 第一优先级, 提高效率才能挤出时间。有规划,养成习惯,番茄钟等。

  • 做正确的事情:第二优先级,方向对了才可能成功。提高判断能力,正确的思考方法等。

  • 正确的做事情:第三优先级,学习并掌握正确的流程和方法,结果才能保证。坚持正确的流程规范等.

终局的解法-持续学习

前文通过逻辑思考分析了“普通程序员”如何成长的达成路径和优先级,可是要怎样实现具体的事项了?例如:有哪些提升效率的方法?怎样才能快速提高判断正确与否的能力?

回答这些问题,需要不断学习,提升认知水平。

学习是最高效的成长方法。

我推荐使用学习三步法:学->练->教

  • 学:明确学习目标,收集资料,坚持“系统”学习

  • 练:熟能生巧,掌握一门技艺的需要反复的练习

  • 教:教学相长是学习的关键。通过将自己所学内容教给他人,既是检查学习熟练度的标准,也能获得反馈发现不足进行弥补。

培养**好为人"师"**的态度:"教"的目的是帮助自己更好的学习;要放下"面子", 抓住机会练习。

总结

逻辑思考力和技术能力都是程序员重要的竞争力。本文用逻辑分析普通程序员的成长:基于问题->假设->度量->认知的思维框架,每个环节使用典型的工具/方法来解答。这些方法也可以用于分析业务问题,设计软件架构等。

最后: 唯有持续学习,多学多知,不断提升认知水平,从能获得成长,摆脱焦虑。

作者:李建(甫田),阿里巴巴技术专家,DDD和Event Storming的爱好者和推广者,在阿里巴巴业务风控多个业务场景应用DDD,组织几十场DDD/Event Storming的建模&讨论活动。

 往期推荐:

— END —

技术琐话 

以分布式设计、架构、体系思想为基础,兼论研发相关的点点滴滴,不限于代码、质量体系和研发管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值