在古诗文中,我们以月喻离合、以水比时光、以柳寄别恨。在软件工程中,我们以管道贯通有无、以缓存平峰谷、以协议定不变。前者我们称为意象,《文心雕龙·神思》篇中写道:“独照之匠,窥意象而运斤”;后者我们叫做隐喻,《代码大全》(Code Complete)中将隐喻视为一种启发式方法(heuristic),用以在抽象与具象之间架设桥梁。
我们如此习惯于意象和隐喻,是因为“人类思维本质上是隐喻性的”(出自莱考夫和约翰逊在《我们赖以生存的隐喻》)。其特点是,将一类场景相关的上下文传神地压缩进一个词语中。比之于精确的算法,它模糊但强大,所谓 “运用之妙,存乎一心”。
我想通过一系列小文来收集我在实践中反复看到的一些有趣意象,本篇来聊聊滑动窗口。
引子
前几天听罗振宇的历史播客《文明之旅》时,讲到故宫博物院的传世名画——北宋末年宫廷画家王希孟的《千里江山图》。它除了有名外,另外一个特点就是——特别长,几近十二米(1191.5 厘米 )!在中国古代书画中,这种"横长纵短、边展边看"的形式叫手卷(还有竖挂的立轴和分页的册页)。
手卷适合三两好友慢慢撵卷细品。这种前手展、后手收、只关注窗口内的“景色”的经典场景便正是软件工程中最经典的意象之一——滑动窗口。下面依时间线来聊聊我在接触编程后遇到的相关场景。




