W01-复杂问题的解决路径

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

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

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

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

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

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

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

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

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

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

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

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

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

最后更新于