两类问题
最近,注意到日常工作中的一些问题,可以简单地归类为两种类型:
具体的问题:一个针对性的解决方案
具体的问题指的是一些小的、十分明确的、范围很限制的问题。对应的解决方案只能是点对点的,无法扩展到其他问题中。这意味着,下次你遇到类似的问题时,上次的经验无法直接复制,只能从头开始。
特点:
- 范围明确,解决方案局限。
- 多发生在技术细节层面,例如修复Bug、处理兼容性问题等。
- 只有短期价值,没有长期价值,难以积累经验。
实例:
- 修复一个Bug:比如代码某处的逻辑错误,可能是由于输入条件未考虑边界情况导致的,解决方案就是补充必要的条件判断。然而,这种解决方案只能解决这一处问题,对类似的其他Bug可能没有直接帮助。
- 处理第三方库的坑:例如某个UI组件库在特定情况下表现异常,你通过定制化修补代码解决了问题,但这类解决方式往往仅对当前项目有效。
- 用户极端行为问题:针对某个特殊用户的特定操作,系统未预料到的情况,这通常只能用定制化的代码进行处理。
通用的问题:一套通用的方法
通用的问题指的是范围更广、更加抽象的问题。解决方案是一套可以被移植到其他场景中使用的策略或框架。这类问题的解决具有长期价值,可以帮助我们形成体系化的思考方式和解决问题的能力。
特点:
- 抽象程度较高,具备可迁移性。
- 解决方案通常是一套方法、模型或框架,适用于多个场景。
- 有长期价值,可以积累经验
实例:
- 产研流程的改进:比如引入敏捷开发模式,将任务拆分为小的迭代周期,利用看板工具优化协作流程。这是一套通用的方法,可以适应不同团队或项目。
- 设计模式的应用:在开发中应用观察者模式解决事件监听问题、使用单例模式优化资源管理等,这些都是可以迁移到不同项目中的方法。
- 复盘:大大小小的问题都进行思考和复盘,提炼问题关键点和改进项
如何从第一类问题找到通用方法的经验?
虽然具体问题直接上没有长期价值,但可以通过反思和总结,提炼出通用解决方案,进而产生长期价值。以下是几个具体的实践步骤:
复盘解决过程
每次解决具体问题后,思考以下问题:- 为什么会出现这个问题?
- 解决过程中有哪些规律性的步骤或逻辑?
- 是否有共性可以总结为通用策略?
识别模式
尝试寻找问题的共性。例如:- 修复了多个与边界条件相关的Bug后,可以总结出“边界条件检查”的重要性,并制定标准化检查流程。
抽象出方法
将点对点的方案抽象为一套通用方法。例如:- 针对多个项目中重复发生的性能问题,可以开发一套性能监控工具,用来自动检测并解决类似问题。
分享与实践
在团队中分享你的通用方法,接受反馈并在实践中不断优化,最终形成真正有效的解决方案。
作为初级开发者如何看待具体问题
第一点是意识到工作的真实情况。第一类问题对于初级开发者很常见,不管是优化一个界面样式,还是解决一个第三库导致的bug,还是极端情况下的用户行为出发的告警,甚至是修复兼容性问题,这类问题在工作中很常见。
第二点是意识到这类问题的价值很有限。消耗时间,只有短期价值,对个人的收获很有限,除非进一步思考。
第三点就是善于思考和提炼总结,尽可能多想一步,从这类问题提取长期的解决方案,这才是最重要的态度。
总结
具体问题和通用问题都是开发工作中不可避免的一部分。具体问题虽然对成长的帮助有限,但它们提供了解决问题的实践机会;通用问题则是开发者能力提升的关键目标,解决这类问题不仅能带来长期价值,还能让开发者从单纯的执行者成长为具有全局视角的架构师或技术专家。掌握从具体问题中提取通用方法的能力,才是开发者持续成长的核心。