一个小工具引发的两个思考

Posted 泰 戈 尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个小工具引发的两个思考相关的知识,希望对你有一定的参考价值。

背景

近期搞了一个小工具,主打的功能是辅助背单词,大致包含的功能如下图

功能就不再赘述了,有兴趣的可以查看此 repository。在此写一点在开发这个小工具期间,我的一些想法和感悟。有些地方说的也许不恰当,欢迎批评指正。

问题

1 一个“好的”项目目录结构是怎样的?
2 单词抽检的策略选择问题,如何挑选合适自己的抽检策略?

下面带着这两个问题,展开本文。

关于目录结构

目录结构的设计是一个老生常谈的问题,正如“一千个读着就有一千个哈姆雷特”,不同的人有不同的见解,但是大致来说都差不多。

大致可以简化为如下图所示

可以看到,基础要素分为:

  • 界面层
    • 大前端:Web、APP 等
    • API
  • 路由层:辅助进行路由控制
  • 控制层:也成为业务耦合层,负责协调各个模块实现上层业务逻辑。起到承上启下的功用。
  • 模块单元:理论上来说,模块要设计成高内聚、低耦合的形式。各个模块之间应该是比较独立的,模块之间允许存在继承关系,但是尽量不要出现模块之间相互调用的情况。如有此现状,需要进一步进行抽象,将公共部分单独抽取,下沉到更为底层的公共模块。
  • 基建:指基础建设相关内容,比如底层存储,各类SDK、API公共、通用的处理等。

基本上来说,上述模式均遵守 MVC 的设计原则,不外乎有适应各自项目的变种。没有最好的项目目录结构,只有适合自己的。做到逻辑清晰,易维护,也就差不多可以了。

单词抽检策略

在这个小工具中,我目前使用的策略很简单。对 master_vocabulary 表中 cutoff 字段为 0 的单词,进行随机抽取,附带当日recite_history 中 right 字段为 0 的错误单词进行混排。

这个策略很容易实现,但是使用起来效果并不是很好,主要见于单词之间的相关性很差,可以说毫无关联,不利于进行记忆。

相比较起来,百词斩的单词记忆功能做的还算可以。给定一个单词,下方进行四张图片的展示,将单词含义图片化,来进一步加深用户对单词的认识。但是用了几天后发现,这个策略太受限于特定的场景了。离开了图片的语义,我本人很难从一个晦涩的单词上联想起它本身的含义。

看到网上有基于 PCA 和 word2vec 的介绍,觉得这倒是个不错的应用方向。单词之间是存在一定的关联性的,倘若能“举一反三”,这样的记忆效果必然是效率倍增,且印象深刻。回忆起初中英语老师的教诲。“以一个荒诞的画面,将单词附着到某个场景中,组词成句,这样一旦能场景化,单词也就不在话下”。

举个例子:现在有 refrain(压抑、限制、压制)、bulb(灯泡、植物鳞茎),如何组词成句,达到天马行空的场景化表达呢?

这个时候可以随意的发挥自己的想象力,我组的一个句子是:

youngster should refrain their desire, or they will be like the bombed bulbs.


句子可能不符合语法,但是大致的意思能表述起来就算行了。这下再看这俩单词,不难被串起来了吧。

给定了多个单词,只要发挥想象力,总能描绘出一幅语义化的场景画面。后续如果可以借助深度学习,对此类型的内容进行建模,对自己平时的发言风格进行建模来定制自己的组词成句,相比是有很大的辅助记忆功效的。(ps:如果哪位老铁用这个想法申请了专利,可以加上我的名字~)

以上是关于一个小工具引发的两个思考的主要内容,如果未能解决你的问题,请参考以下文章

一个小BUG引发的思考。(论开发与测试之间的那点事)

腾讯「小借条」引发的思考:区块链+的商业模式让各企业争先恐后的奥秘

使用CAS引发ABA问题

一个逻辑题(今天星期几)引发的思考

两个多线程笔试问题引发的思考

由Find All References引发的思考。,