# 如何思考解决问题

怎样学习，也就是让自己增长见闻、提高识见？

1. 培养问题意识
2. 知道自己需要什么信息、也知道如何获取这些信息
3. 学会拆解问题
4. 形成自己解决问题的方法论

拆解问题时可供思考的问题：

1. 我遇到了什么问题？
2. 问题出现的原因是什么？问题出现后应该怎么办？
3. 如何分析问题？初步的解决方案是什么？
4. 遇到阻碍的时候，去查找哪些资料可以获得答案？
5. 别人有没有遇到类似的问题？他们是如何定位思考的？
6. 文档是否都了解清楚了？
7. 我尝试了哪些方法？
8. 问题解决了，我学会了什么？
9. 如果下次遇到同样的问题，我该怎么办？

一个人关于某技术问题的思考：[为什么用 Go 访问某网站始终会 503 Service Unavailable ？ | 无辄的栈](https://www.zackwu.com/posts/2021-03-14-why-i-always-get-503-with-golang/)

引用自参考资料：

> 答案毫无用处，因为它并不能让你举一反三。
>
> 形成自己解决问题的方法论，它是一个通用的解决问题的手段。
>
> 多思考，勤动手也要勤总结。解决问题就是去分析问题、拆解问题，把未知变已知，用已经掌握的去推导陌生的。
>
> 动手没有错，错的是光动手其实没有意义。因为动手是机械性动作，代码是你逻辑的具象化。
>
> **你需要做的是把代码抽象为自身可以理解的事物，而不是记代码、记以前解决问题的答案，毫无意义（一些固定流程，可以笔记作为参考，快速查阅）。你需要记住的是你如何拆解问题，如何解决问题的流程，然后去强化它。这样任何时候，你都能套用自己的这一套解决问题的模板。**
>
> **坚持比努力更重要；正确的坚持比坚持更重要，不然就是南辕北辙。**

在思考问题时，可以使用「[小黄鸭调试法](https://baike.baidu.com/item/%E5%B0%8F%E9%BB%84%E9%B8%AD%E8%B0%83%E8%AF%95%E6%B3%95/16569594)」，跟一个玩偶讲自己遇到的问题，在讲述的过程中，就能把问题重新梳理一遍。

---

参考资料

1. <https://github.com/lencx/z/discussions/79>
2. <https://lencx.github.io/book/thinking/what_is_the_tech.html>


相关：[[how-to-know-my-thought|how-to-know-my-thought]]
