原文:https://humanwhocodes.com/blog/2020/02/how-i-think-about-solving-problems/

作者:Nicholas C. Zakas

翻译:奶爸码农

这里有5个问题我会使用来帮助我更好的判断问题、给问题排列优先级和解决问题。

在我作为软件开发人员的职业生涯的早期,我认为我的主要贡献是编写代码。毕竟,软件工程师需要交付软件,而编写代码是其中的关键组成部分。我花了几年的时间才意识到交付软件还有可以有很多其他的贡献(如果没有,为什么还要有经理,设计师,产品经理,销售人员等?)。我慢慢发现自己不再是编码员,而更多地是解决问题的人。有时可以通过编写代码来解决问题,而有时解决方案根本不涉及代码。

一旦意识到解决问题的价值,我便着手寻找解决问题的最有效方法。担任技术主管职位后,我立即面临了许多日常问题中。我必须想出一种果断行动,有效排定优先顺序并解决尽可能多问题的方法。

最终,我确定了一个问题清单,每一个问题出现的时候我都会问自己。我发现依次问这些问题有助于我做出最佳决定:

这真的是一个问题吗?
这个问题需要解决吗?
现在是否需要解决问题?
这个问题需要我解决吗?
我可以解决一个更简单的替代问题吗?

每个问题的目的都是揭示有关该问题的信息,使您可以继续进行下一步;或者,如果幸运的话,请完全避免该问题。每个问题都有细微差别,因此更详细地描述每个问题会有所帮助。

这真的是一个问题吗?

解决任何问题的第一步是确定它是否确实是一个问题,并且需要一个清晰的定义。就本文而言,我将问题定义为任何问题,如果不加以解决,将导致客观上令人不快的结果。

这意味着下雨天晚上要把窗户打开是一个问题,因为里面会被弄湿,并且可能会损坏地板,家具或其他物品。解决问题的方法可以防止产生不良后果,因此在上床睡觉之前关闭窗户可以防止财产被毁。

担任领导职务时,通常会收到听起来像是问题而只是意见的投诉。例如,我曾与许多软件工程师进行过交谈,他们在开始新工作或加入新团队后立即感到该团队做错了很多事情:他们使用的框架错了;代码样式错误;文件的组织方式是错误的。他们将如何解决所有这些问题?这是一项艰巨的任务。

我问这些软件工程师这个问题:这是问题还是工作方式不同?在许多情况下,“错误”仅表示“不是我曾经习惯或喜欢的。”如果您可以确定报告的问题实际上不是问题,那么您就不再需要在解决方案上花费资源。团队成员对完成工作的方式不满意并不是客观上不希望的结果。团队之间的分歧本质上没有问题。如果您能够确定问题不是问题,则可以继续执行其他任务。

这个问题需要解决吗?

确定存在问题后,下一步就是确定是否需要解决问题。如果不良后果可以忍受并且持续增长或缓慢增长,则无需解决问题。

例如,如果某个Web应用程序的某个部分仅由管理员(通常是五个人或更少的人)使用,并且加载速度比该应用程序的其余部分慢,那么您可以确定这是可以的。 该问题的范围很窄,在极少数情况下会影响到少数人。虽然可以很好地解决问题,但它不是必需的,而且缺点很小,无法解决就不会在将来导致更大的问题。

提出此问题的另一种方式是:“如果问题从未解决,会发生什么?” 如果答案是“不多”,则可以不必解决该问题。

现在是否需要解决问题?

如果您有一个需要解决的问题,那么下一个问题是确定是现在需要解决还是可以等到以后解决。有些问题显然是紧迫的,需要立即解决:站点奔溃,每当有人使用它时应用程序崩溃,等等。

这些问题需要解决,因为不良后果是立竿见影的,持续不断的,并且有可能增长:网站停机时间越长,公司损失的钱就越大;应用程序崩溃的次数越多,客户使用竞争对手的可能性就越大。

同样重要的是确定是否可以推迟解决问题。令人惊讶的是,许多非紧迫的问题冒出了领导层。这些是需要最终但不是立即解决的问题。符合此描述的软件中最常见的问题是技术债务。

技术债务是您应用程序(或相关基础结构)中性能不佳的任何部分。它不会在今天或明天引起重大问题,但最终会造成问题。以我的经验,直到紧急情况(为时已晚)之前,很少人会去解决技术债务问题。

但是,技术债务并不是解决所有其他问题的方法。它属于中间区域,今天不应完成,但绝对需要完成。如果现在不必解决问题,通常最好推迟一下。

推迟它,是指计划在将来解决它,而不是避免对此做任何事情。如果现在不是解决问题的合适时机,请决定何时:一周,一个月,六个月?将其放在日历或任务管理系统上,这样就不会丢失它。提出此问题的另一种方式是“问题是否紧急?”


这个问题需要我解决吗?

这个问题最适用于担任领导职务的任何人,但也适用于有太多任务的任何人。这个问题是需要您只具备特殊技能的东西吗,还是其他人可以完成任务?

这是我根据一位导师给我的建议改编而成的一个问题。我在抱怨自己似乎只是在收集任务而无法跟上步伐。他说我应该问自己,“这是尼古拉斯问题吗?” 有些事情只有我知道该怎么做,而那是我应该关注的事情。其他任何事情都应该委托给其他人。他给我的另一个重要提示:仅仅因为您可以比别人更快地做某件事,并不意味着您应该自己做。对于大多数非紧急任务,一天或两天后完成并不重要。

因此,如果问题可以由其他人解决,并且您是领导者或已经有太多工作,则请委派给他人。

我可以解决一个更简单的替代问题吗?

确定需要解决的紧急问题后,该过程的最后一步是确定是否有更容易解决的问题。关键是,较简单的问题必须在节省时间(或其他资源)的同时,为您提供与原始问题相同或相似的结果。

当我在开发新的My Yahoo!时页面上,我们的一位产品经理宣称Beta客户要求我们在页面上添加可调整大小的列。这是相当复杂的事情,因为那是2006年,Web浏览器的功能还不如今天。这项任务并非并非不可能,但是在一个已经充满JavaScript的页面上,添加更多内容来管理复杂的鼠标移动并需要将这些信息保存回服务器是一件艰苦的,容易出错的工作。

我从客户反馈会议中获取原始数据,以查看是否可以确定可调整大小的列将解决什么问题。结果,没有客户要求可调整大小的列(产品经理从投诉中推断出此请求)。相反,他们抱怨无法获得新的My Yahoo!。页面看起来像他们的旧My Yahoo!页。

我们创建了与旧版式不匹配的全新版式,但事实证明,人们真的很喜欢旧版式。这使我们能够专注于一个更简单的问题:重新创建旧版式。

因此,我们花了一些时间在新页面中重新创建旧版式,并重新运行了客户会话。人们很高兴新页面现在看起来与旧页面非常相似。通过解决更简单的问题,我们节省了很多开发时间,客户也同样高兴。

解决问题的时候并不是总能够寻找到一个简单的替代方案,但是当遇到一个非常复杂的问题,不妨往这个方向多想想。


写在最后

这五个问题已成为我解决问题的方法的基础,不仅在我的工作中,而且在我的整个生活中。每当遇到问题时都要经历这些问题,这使我成为了更有效的问题解决者,并且总体上对结果感到满意。无法为我的服务员计算15%的小费?我会改为计算20%(如果对服务不满意,则计算为10%)。我的高中校友办公室不断向我发送通知,通知我我不是经过验证的校友?那不是我需要解决的问题。如果我想在美国旅行,我需要获得新的驾驶执照吗?这是我今年要解决的问题,但现在不是。

解决问题的方法有很多种,但我不确定我的方法是否适用于所有人。我所知道的是,有解决问题的方法总比没有解决方法要好。生活中充满着大大小小的问题,您每天都会面对。制定明确,可重复的策略是使问题解决更容忍的最简单方法。

- End - 

推荐阅读

你要如何衡量你的人生

2020年,从提升认知开始

如何写好年终总结

这里有一份工程师“变软”的修炼攻略

精读《原则》,教你如何通过原则过上想要的人生(上篇)

『奶爸码农』从事互联网研发工作10+年,经历IBM、SAP、陆金所、携程等国内外IT公司,目前在美团负责餐饮相关大前端技术团队,定期分享关于大前端技术、投资理财、个人成长的思考与总结。

5个问题教你如何更好解决问题相关推荐

  1. 教你如何更优惠的购买阿里云服务器?

    随着阿里云越来越强大,阿里云越来越受大家欢迎,成为建站的首选云服务器.我是一名资深的程序猿,所在公司选择阿里云作为服务器,同时自己建站也首选阿里云.周边同行建站也越来越多的选择阿里云.为何阿里云这么受 ...

  2. 教你如何更好的进行网页布局

    教你如何更好的进行网页布局(一) 网页可以说是网站构成的基本元素.当我们轻点鼠标,在网海中遨游,一副副精彩的网页会呈现在我们面前,那么,网页的精彩与否的因素是什么呢?色彩的搭配.文字的变化.图片的处理 ...

  3. 安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!

    原标题:你的安卓手机越来越卡?教你4招轻松解决问题! 现在我们对于手机的使用时间不会特别的长,所以这个更换的速度就比较快.其实是很多的用户换手机是因为比较喜欢用新的手机体验新的科技,不过也还是有很多的 ...

  4. java build path entries 为空_同事的代码简直没法看,我来教你如何更优雅的设计Java异常...

    点击上方蓝色字体,选择"设为星标" 回复"666"获取面试宝典 异常处理是程序开发中必不可少操作之一,但如何正确优雅的对异常进行处理确是一门学问,笔者根据自己的 ...

  5. 教你如何更优雅的设计Java异常

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:lrwinx https://lrwinx.github.i ...

  6. 如何做好网络推广“放大招”,教你如何更快速的给新上线网站关键词排名?...

    有些如何做好网络推广的优化人员在网站新上线后就很心急想要更快速的拥有收录排名,但俗话说"心急吃不了热豆腐",同样心急也得不到更好地优化效果.那么对于新上线的网站该如何更快的获取关键 ...

  7. 教 Chatbot 生成更有营养的对话

    Sequence to Backward and Forward Sequences: A Content-Introducing Approach to Generative Short-Text ...

  8. 我的世界java加入更多床_《我的世界》床的N种玩法,教你如何更快地入眠

    相信每个人家里都有一张属于自己的床,而一个人的三分之一时间必然是在床上度过的,它不但是我们作为睡觉的工具,也是家中不可或缺的一件装饰品.但是你对床了解多少呢?今天带大家走进<我的世界>,教 ...

  9. 教你怎么更好的学习嵌入式开发

    很多大学生.初学者总爱问一个问题:该不该放弃嵌入式.单片机这条路? 以下是一位网友分享的嵌入式开发经历,希望可以帮到你. 阶段 1 大一到大三这个阶段我与大多数学生相同: 学习本专业知识(EE专业), ...

  10. 教你如何更好的编写JAVA单元测试

    如何更好的编写JAVA单元测试 如各位希望转载或引用,请注明出处,尊重原创,谢谢.如有疑问或错误,欢迎邮件沟通.gitHub地址:https://github.com/thinkingfioa 邮箱地 ...

最新文章

  1. 在VS上配置OpenCV
  2. c语言1到20找最大和最小相邻,一组数据里面怎样查找相邻和相同的整数算法设计解决方案...
  3. shell swt 样式_swt shell设置窗口位于屏幕中间
  4. python的threading库_python标准库介绍——31 threading 模块详解
  5. Android中Activity启动模式详解
  6. ARM Linux.2.6.34内核移植
  7. Oracle数据库实现主键自增(利用sequence)和分页查询(利用rownum)
  8. oracle+rac+导出,Oracle RAC数据泵导出问题处理
  9. 我是一个尝试做自媒体的程序员
  10. jar转apk专辑 android,jar转apk格式转换器
  11. limesurvey-怎么用
  12. 网络七层协议结构分析图
  13. 5G风起,CDN边缘计算将乘风破浪
  14. code换取微信openid_快速实现微信公众号支付功能
  15. 报错PyTorch is not compiled with NCCL support
  16. Android ListView 拖拽处理
  17. max_transition 违例 及解决办法
  18. CSDN如何快速搜索自己/别人的博客(区分大小写)
  19. 我只管向前奔跑,其他的交给时间
  20. 如何阻止input的focus事件

热门文章

  1. 请不要叫我小编,我是神圣的内容产品经理
  2. 励志:滴滴打车CTO张博:生死战役,技术和时间赛跑
  3. ubuntu登录mysql报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mys
  4. 苹果电脑mac桌面上出现关不掉的黑框/白框 解决办法
  5. COGS2434 暗之链锁
  6. html中js左右图片切换效果,JS实现图片切换特效
  7. java sort 没法用,$ group无法使用Spring聚合类后的$ sort管道
  8. Console 接口介绍及电路设计
  9. Google Chrome常用插件推荐
  10. 当我想深入遗留代码一探究竟的时候