一、项目背景
想要快速地进步,就必然要
- 在正确的道路上
- 以正确的方式
- 投入足够多的时间
本项目目前聚焦于第3点,即:投入足够多的时间。
时间的管理是一门复杂的学问。如何管理自己的时间,让自己充分投入到学习中去?人们很容易想到:制定计划,执行计划。其中,“制定计划”和想到这一点同样容易,但“执行计划”一步,就好似泥沼、似深渊、似天堑,不知道多少人倒在这里。
于是,本项目又聚集于后者,即:执行。
计划为什么会停留于计划,执行为什么总是失败?因为,我没那么爱学习,或者至少是没那么爱学习的过程。对知识与更好的未来令我心生向往,心生渴望。与此同时,学习的过程常常令我感觉有些枯燥,无聊,甚至是痛苦。 因为书本本身是枯燥的,代码同样也是枯燥的。
我相信,喜欢写代码的人,喜欢的也绝不是代码本身,而是它背后的某些东西。是它所带来的成就感,我可以亲手构建出一个有用的、或者有意思的东西;又或者是它所带来的利益?我可以以此拿到一份薪水不错的工作。它们的共同点是,这种收益是长期的,我难以在敲下键盘看见屏幕上字符跃起的那一刻,在几秒、几分钟、又或是几小时内,就享受到收获的喜悦。令人讨厌的是,这种喜悦常常被藏在了时间的下游,藏到几天、数月乃至积年的付出与忍耐之后。
当我的目光聚焦到当下,开始考虑现在是学习还是玩耍时,我的心情是什么?是矛盾。玩耍的快乐与学习的枯燥,此刻在我心中形成鲜明的对比。学习的收益隐在远处,玩耍的快乐却唾手可得,你如何选择?况且,我本是一个爱玩的人啊。
也从不乏有坚持到底的人,枯燥无聊的日子与他日夜相对,可他却不会就此摆脱枯燥,因为未来的火光还在其眼中闪烁未灭。能够做到延迟满足,真是一个令人羡慕的能力。
不过,本项目聚焦于另一个方向:增加即时满足。
当下学习或玩耍的矛盾像一杆天平,那么让我为学习的一侧加上更多的砝码——而不是总想着用手摁住它。嗯…让我们想一想,这砝码从哪里来呢?不妨,将日常的学习过程记录下来,将点滴的汗水收集起来。让我们在心中保留一个简单的信念:学习使人进步。半小时的学习不会使我感到高兴,但,“我又学了半个小时”会。
我试图将累日付出后才能看见的进步,拉到了近前,成为”看得见的进步”。经过了刚才半小时的学习,我就知道自己进步了,从而得到我所预支的喜悦——而即使这进步看不出来,“我认为自己又进了一步”也是可以的,因为我的付出明明白白地摆在那里。以此将长短期的目标统一起来,而不是每次都陷入矛盾与纠结。
至此,我愿称之为“画饼充饥术”。然而与纯纯的画饼不同,因为在尚可预见的一天,我手里真的会接到那一摞饼。
依赖及时的正面反馈与成就感的塑造,我希望能让学习从内心的被迫走向主动,乃至成为渴求。
以上,即为本项目的基本任务需求。显然从需求到实现很难一步到位,因为需求比较抽象。本项目应当在实践中积累经验,灵活迭代,而得以不断改进。
二、功能实现
技术栈:Bootstrap + Flask + MySQL。
Bootstrap是一个简单易上手的前端框架,可以利用现成的组件,快速实现一些简洁且看着还不错的样式。
Flask是一个轻量级的python后端框架,前后端采用不分离的架构,对于小网站而言开发更加方便,且学习成本低,可以更快地开始搭起一个简单的架子,然后在小步迭代中不断改进。
2.1 主干功能:任务模块
该程序从本质上,仅仅是一个记录工具。在任务模块中,你可以新建一个要做的事情,并在做完后提交它,记录做得怎么样、花了多少时间。
故任务模块包含了两个列表:待做任务列表和已完成任务列表。
2.2 灵魂功能:数据展示
人们时常容易陷入一种状态:整日忙碌而不知道自己在忙什么。然而,记录后仅仅提供一个任务列表并不足以对这个问题产生什么缓解作用,通常只会看看最近几日的碎片——在更大时间尺度上,才能看见趋势。这也是一种心理上的需求,如果我们看见在过去的一段时间内,自己的学习状态还不错,而且还在变好。那我们就有理由相信,将来还会继续变好。于是更有动力,于是真的在继续变好——让趋势裹挟着自己前进。
为此,我实现了简单的数据的统计与可视化页面,将本月的总学习时间与上月进行对比展示,以达到自己卷自己(自我超越)的效果。
2.3 时间去向:书架模块
上面的折线图仅仅展现了一个总体的趋势,有时我们仍然希望以比较直观的方式*(而不是为细节所淹没)* ,看见更多的细节,以便及时地对自己的学习状态或方向进行调整 。
为此,我们设计实现了书架模块,可以创建书籍,通过词条匹配和绑定任务中的提交信息,统计并展示展示每本书的阅读进度与所花费的时间。此后,每次提交相关的任务时,书架页面的数据会随之更新。
图3:书架页面 |
2.4 辅助功能:登录模块
对于一个提供给多个用户访问的网站,如果每个用户需要存储自己的数据,那么登录模块是必不可少的啦!
图4:登录与注册页面
我们在个人信息页面,提供了简单的信息编辑功能。并根据提交任务的信息,统计当前的学习经验值与等级。其中等级的计算采用等差数列,从1开始,没提升1级,升到下一级所需要的经验就加1。由高斯的算法可得,升到200级需要1 + 2 + 3 + . . . + 200 = 200200 ,假设你平均一次学习任务的时间是30分钟,那么200级时你的学习总时长约为1万小时。
如果能一直坚持到那一天,如果这些天里你学习的同时也一直在思考如果改进方法——而非单纯消费时间,你就有理由相信,时间的力量将会推你至山峰。
图5:个人信息页面 |
三、下一步的路
1、移动端支持
目前本网站主要是面向电脑浏览器开发的,因为对相关的技术更加的熟悉,为了更快地开始。然而无可争辩的是——手机app会比打开电脑访问网站要方便地多。
此时可以采用前后端分离架构,一套后端的API可以支持多个平台的前端使用。
2、功能丰富
任务调度:有时待做的事情有很多,如何决定下一步做什么?每次做事情之前都去花脑子去思考这个问题,这会对我们是一种负担。我们知道,操作系统对进程是有调度算法的。我们同样可以为这些待做的任务设计一个调度算法,根据截止时间、等待时间、重要程度等因素,对任务的执行顺序给出推荐的排序,以减少我们这部分的心理负担。同时,可以对即将截止的任务以邮件等方式发送提醒。
数据展示与挖掘:目前我们的数据展示页面仅只有一个折线图。此后还可以添加每日各个时间段利用率的可视化等等,更加细致地挖掘自己的习惯。
······
我一直希望,写下的程序将成为思想与理念的凝练,而非只是代码的一次次堆砌。它将能为生活中一些具体的、虽然小小的问题带来帮助。