why what how思维方式
2022-06-18
- 相关推荐
HOW: 对“如何做”进行中级提问,如,运作机制、内部结构、报错分析等;
WHY: 对”为什么”追根究底,“为什么要这么做而不是那样做?”,“为什么是主导因素是这个而不是那个?”等等。
扩展资料
任何人的第一反应,肯定是先问WHAT级别的初级问题,比如,
WHAT
具体要解决什么问题?最简化的任务:假设只有3个文档,文档1中数据未知,文档2内只有a, b, c这三个数据,文档3只有x, y两个数据;需要“抠掉”文档1中所有可能出现的文档2&3内数据的全部排列组合(有ax, ay, xa, ya, bx, by, xb, yb, cx, cy, xc, yc 共3*2*2=12种组合),并且不改变文档1内数据原本次序。现实中,有一系列的文档1,以及与文档1配套的一系列文档2&3,并且每个文档内有几十到上万行数据。
想要什么结果?得到一系列处理干净的文档1,以及一个可供后人审阅、升级、继续使用的好用脚本。
预测可能会出现什么难点?文档本身是多语种的,也许会遇到 encoding(编码)的问题;怎样最有效率地找到多对文档间的全部排列组合。
搞清楚我要做什么了之后,就要进入下一步思考HOW的问题了,比如,
HOW
怎么解决我的问题?先建立最简任务模型,调试成功后再用到真正的问题上。
通过什么方式来解决?写个Python脚本。
需要设计什么步骤?批量读取文档,获取不同文档内数据的全部排列组合,找到需要处理的文档1们中重合的部分,删除重合并生成新文档;测试结果。
想清楚 HOW 之后,就可以动手写脚本了。或者边写边调整具体策略,都没什么问题。
接下来WHY的问题,其实对解决当下问题的帮助不大,因此大部分人也不会去多想。但问出重要、关键的WHY有助于优化解决方案,加深对 HOW 的理解(“为什么要那样做、不这样做?分别有什么影响?那影响重要吗?”),最终加速技能学习过程。
WHY
为什么要写几十行代码的脚本,而不是直接在命令行用sed, AWK之类专门处理文本的小工具、仅花两三行就把问题解决掉?因为不止想要处理干净的文档,还想要一个可供别人审阅、升级、整合到其他程序中使用的脚本;还因为需要处理的文档并不是只有现在这些,未来还会不断更新,需要反复处理。(我处理这个小任务时想到的一个WHY)
第二天,老板来看我写的脚本时,提出了更多我从未考虑到的、也更有价值的 WHY,比如,
为什么选择用循环结构(loop / iteration)去除重合?我当下愣了一秒,然后就老实承认:我没想过为什么要这样写,只是第一反应知道循环+遍历可以达到自己的目的,就用了……但在实际问题中呢,假如要处理的文档很大,用循环结构就会降低效率;此时换成 set(集)则是更好的选择。
根据二八定律,能从 WHAT 进阶到 HOW 再到 WHY 的人仅占人群中的 4% (20%*20%)。因为,问出更高阶的好问题的前提是要先研究透彻低阶问题;如果试图越过 WHAT/HOW 阶段的思考与实践而直接提出 WHY,那个问题往往会显得很傻很天真——最后又回到我上一篇文章中提到的,自学编程最重要的三句话之一:
Do Your Homework!