> For the complete documentation index, see [llms.txt](https://weekly-essay.mikey.wang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weekly-essay.mikey.wang/zh/2022-nian/w01-fu-za-wen-ti-de-jie-jue-lu-jing.md).

# W01-复杂问题的解决路径

周五晚上和云飞聊到电商PC站里的一个比较刁钻的问题。想到之前写过一篇博客专门阐述过这个事情，于是打开了尘封五年的博客站。

多年未见，有些亲切和羞涩。当时工作比较闲，一心向往互联网，闲暇时间搞了个博客，喜欢卖弄一些我以为是高深但其实只是小巧的技术点。翻看一阵，我戏称，现在很难沉下心去写这类东西了，做事情只会考虑能不能赚钱。

要说现在还能让我有些小自豪的，应该就是当时申请的域名了。少有人知道有一个.wang的顶级域名，而我恰好姓王。所以，我有一个与我英文名一模一样的域名，全球唯一，不必102，一直https。

言归正传，开头提到的那个刁钻问题给现在的我带来一些新的启发。

先说说是一个怎样的问题。京东的PC站首页，凹凸的作品，看着已经有三四年没有过大迭代了。里面藏着很多历久弥新的东西，比如屏幕左边那个经典的品类选择区。当你的鼠标hover某个一级菜单时，会在临侧联动展示二级菜单。所以鼠标滑过一级菜单列表时，二级菜单一定会跟着滑过的菜单实时变化。而有趣的是，当你把鼠标移动到某个二级菜单时，路径中掠过的数个一级菜单并没有触发二级切换，你会稳稳的选到你想要的二级品类。

乍一看很AI，是一个比较复杂的问题。如果说这是一个通过鼠标移动路径实时分析，进而判断用户真实操作意图的问题，应该会有不少人会顺着这个思路去找方案。

事实上，对需求进行分析和归纳后，就会把需求转化为如何判断一个点在三角形内的问题。一图胜千言，当选择“一级导航1”时，此时鼠标在图示三角形内划过，去选择某个二级菜单时，就可以对掠过的一级菜单不做联动响应，或者延迟切换。

![](https://km.sankuai.com/api/file/cdn/1270932134/1494009598?contentType=1\&isNewContent=true\&isNewContent=false)

至于如何判断一个点在三角形内，方法有很多，比较经典的解法是用向量叉乘来判断。程序里实现向量的基础运算比较简单，只是一些加减乘除的组合。

问题就是这样，下面是一些新的思考。我把这个实现需求的过程分成了四个阶段。

首先，是需求具象化。需求需要澄清与拆解，尽可能地具象化。

其次，对拆解后的需求进行“翻译”，将需求转化成问题，这是一个领域化、模型化的过程。比如在软件工程里，就是把需求映射到一个可计算、可编程的模型。现在来看，这个过程比后边的“怎么做”更为关键。如何把需求转换到“判断一个点在三角形内”的问题，这种“翻译”能力应该是工程师的一种高阶素养。

接下来，就是怎么做的问题了。上一步的输出是模型，这个模型可以是数学模型、物理模型，或者统计学模型等，我们需要做的就是连接不同的学科和领域。比如，不知道如何判断点在三角形内就去找数学好的同学。一个大规模的复杂问题，可能涉及到多个领域，所以这是资源网络化的过程 。

最后，是实施过程，我们大部分的时间都在做实施、做工程，包括模块化和标准化等一切工程手段，是相对擅长的部分。
