# 1987:DOS 上的 SuperMemo 1.0
[TOC=2,5]
## SuperMemo 1.0: 日志 (1987)
SuperMemo 的歷史頁面上寫著:“*Wozniak 用 16 個晚上寫了他的第一版 SuperMemo*”。實際情況要復雜一些。讓我用當天的筆記來詳細描述一下。
### 為這個想法做準備
我不明白我在 1987 年 7 月 3 日寫的“*我有一個革命性的計劃,在 SMTests (*SMTests*在這里代表 [SuperMemo on paper](https://supermemo.guru/wiki/SuperMemo_on_paper))中安排我的工作和科學實驗*”是什么意思。從紙張到計算機的過渡似乎是顯而易見的一步。在這條路上一定有一些思維上的障礙,需要“跳出框框思考”。不幸的是,我沒有寫下細節。今天,它唯一重要的是,它說明了一個看似顯而易見的想法可能會緩慢得令人痛苦。
1987 年 9 月 8 日,我的第一臺個人電腦從德國運來(Amstrad PC 1512)。我的熱情無與倫比!我睡不著。我工作了一整夜。我計劃編寫的第一個程序是用于數學近似。SuperMemo 是第二個。
[](https://supermemo.guru/wiki/File:Schneider_Amstrad_PC_1512_DD.png)
> **圖:** 我的版本只有一個磁盤驅動器。操作系統 MS-DOS 必須從一個磁盤加載,Turbo Pascal 3.0 必須從另一個磁盤加載,SuperMemo 必須從又一個磁盤加載。直到 1991 年我有了自己的第一個硬盤前,我的英語集合不得不分成 3000 個部分。我的 39000 條項目被保存在 13 個磁盤上。我有很多其他領域的知識。1997 年 1 月 21 日,SuperMemo World 找到了那臺最初的個人電腦,并從它的主人 Jarek Kantecki 手中買了回來。這臺個人電腦在整整十年里功能齊全。現在它被埋在公司塵封的檔案中。也許我們會在某個時候發布它的照片。圖片來自維基百科
1987 年 10 月 16 日,星期五,在 12 個小時內,我用 GW-Basic 寫了我的第一個 SuperMemo(719 分鐘的不間斷編程)。它像蝸牛一樣慢,而且很笨重。我不太喜歡它。我沒有開始學習。這會是 [SuperMemo](https://supermemo.guru/wiki/SuperMemo) 的終結嗎?錯誤的編程語言選擇?在學校忙碌的日子讓我忙于無數不重要的事情。典型的學校影響:什么都不學。沒有時間去創造和學習。幸運的是,我從未停止使用 [SuperMemo on paper](https://supermemo.guru/wiki/SuperMemo_on_paper)。SuperMemo 的想法不可能消亡。它遲早要自動化。
1987 年 11 月 14 日,紙上的 SuperMemo 迎來了它的第一個用戶:[Mike Kubiak](https://supermemo.guru/wiki/Mike_Kubiak)。他非常熱情。熱情之火一直在燃燒。11 月 18 日,我了解了 Turbo Pascal。它不能在我的電腦上工作。在那些日子里,如果你有一個有問題的顯卡,你可能會非常艱難。我沒有使用 [Hercules](https://en.wikipedia.org/wiki/Hercules_Graphics_Card),而是使用了文本單色模式(黑白)[CGA](https://en.wikipedia.org/wiki/Color_Graphics_Adapter)。我設法通過在 RPED 文本編輯器而不是在 Turbo Pascal 環境中編輯程序來解決這個問題。后來我得到了正確版本的 Turbo Pascal 適配我的顯卡。順便提一下,舊的 SuperMemo 是有顏色的。我用深淺不一的灰色來編程,但從來不知道它在顏色模式下到底是什么樣子。
### 編寫 SuperMemo 1.0
SuperMemo 1.0 大事記:
- 1987 年 11 月 21 日是一個重要的日子。那是一個星期六。不用上學的日子是充滿創造力的日子。我本希望早上 9 點起床,但我睡過頭了 72 分鐘。這不利于[計劃](https://supermemo.guru/wiki/Plan),但這通常對大腦和生產力有好處。我用 [SuperMemo on paper](https://supermemo.guru/wiki/SuperMemo_on_paper)(復習英語、人類生物學、計算機科學等)開始新的一天。當天晚些時候,我讀我的連電腦手冊,了解 Pascal 和 Prolog,花了一些時間思考人類的皮層如何工作,做了一些鍛煉,晚上,略顯疲憊的精神狀態,然后決定寫 [SuperMemo for DOS](https://supermemo.guru/wiki/SuperMemo_for_DOS)。這將是我第二次嘗試。然而,這次我選擇了 Turbo Pascal 3.0,并沒有后悔。直到今天,直接的結果是,[SuperMemo 17](https://supermemo.guru/wiki/SuperMemo_17) 的代碼是用 Pascal (Delphi XE3)編寫的。SuperMemo 的名字是在很久以后才提出來的。在那些日子里,我把我的程序命名為:*SMTOP* for *超級記憶測試優化程序* *。1988 年,[Tomasz Kuehn](https://supermemo.guru/wiki/Tomasz_Kuehn) 堅持稱其為 *CALOM* for *計算機輔助學習優化方法*。
- 1987 年 11 月 22 日是 11 月 21 日的翻版。我的結論是,我知道大腦皮層是如何工作的,有一天,用類似的原理來建造一臺電腦將是件好事(參見 [Jeff Hawkins](https://en.wikipedia.org/wiki/Jeff_Hawkins) 的工作)。事實上,我在深夜回到編程 SuperMemo,也就是非常不適合做創造性工作的時候,似乎表明我的熱情還沒有開始。
- 1987 年 11 月 23 日看起來一模一樣。我不知道為什么我周一沒有任何學校的義務,但這可能會拯救 SuperMemo。1987 年 11 月 24 日,我開始興奮起來,連續工作了 8 個小時(又是晚上)。該程序有一個簡單的菜單,可以向數據庫添加新項目。
- 1987 年 11 月 25 日被浪費了:我必須去上學,我又累又困。我們上的計算機架構課非常無聊,可能比西方的現狀落后了 10 年。
- 11 月 26 日是自由的,我一次又一次地趕上了 SuperMemo 的工作。程序增長到 15400 字節“巨大”。我的結論是,這個程序可能“非常有用”(原文如此!)
- 11 月 27 日,我放學后又增加了 3 個小時的工作時間。
- 11 月 28 日是周六,我可以增加 12 個小時不間斷的熱情編程。SuperMemo 現在看起來差不多可以使用了。
- 11 月 29 日,星期天,我投票贊成波蘭的經濟改革和民主化。晚上,我沒有取得多大的進步。我必須為英語課準備一篇作文。這篇文章描述了 1982 年的一天,我嘗試喝酒。我是個滴酒不沾的人,但作為一名生物學家,我的結論是,我需要知道酒精是如何影響大腦的。
- 11 月 30 日在學校被浪費了,但是我們和 [Biedalak](https://supermemo.guru/wiki/Krzysztof_Biedalak) 一起很愉快地走回家。我們用英語就我們的未來進行了長時間的交談。那個未來主要是關于科學的,可能在美國。
- Dec 1-4 were wasted at school again. No time for programming. In a conversation with some Russian professor, I realized that I completely forgot Russian in short 6 years. I used to be proudly fluent! I had to channel my programming time into some boring software for designing electronic circuits. I had to do it to credit a class in electronics. I had a deal with the teacher that I would not attend lectures, just write this piece of software. I did not learn anything and to this day I mourn the waste of time. If I was free, I could have invested this energy in SuperMemo.
- 12 月 1 日至 4 日在學校又浪費了。沒有時間編程。在與一位俄羅斯教授的交談中,我意識到我在短短的 6 年時間里完全忘記了俄語。我曾經驕傲地說一口流利的英語!我不得不把我的編程時間用在一些設計電子電路的無聊軟件上。我必須這樣做才能獲得電子學的學分。我和老師說好了我不去上課,只寫這款軟件。我什么也沒學到,直到今天我還在為浪費時間而悲哀。如果我有時間,我可以把這些精力投入到 SuperMemo 中。
- 12 月 5 日是星期六。從學校中解放。萬歲!然而,我不得不從浪費 4 個小時在一些“關鍵代碼過程”開始。在那些日子里,甚至破譯按鍵也可能成為一項挑戰。然后又浪費了一個小時來更改一些屏幕屬性。此外,我還增加了 6 個小時的時間來編寫“項目編輯器”。這樣,我可以方便地在 SuperMemo 中編輯條目。今天您認為理所當然的事情:左、右、刪除、上、回車等,都需要一天的編程。
- 12 月 6 日是一個可愛的星期天。我花了 7 個小時調試 SuperMemo,添加了“[結束練習](https://supermemo.guru/wiki/Final_drill)”等。興奮之情與日俱增。一周后,我可能會開始使用我的新突破性的快速學習軟件。
- 12 月 7 日星期一放學后,我添加了一個刪除項目的程序。
- 12 月 8 日,里根和戈爾巴喬夫簽署了他們的[核協議](https://en.wikipedia.org/wiki/middle - range_nuclear _forces - treaty),我添加了一個搜索項目和顯示某些項目統計數據的程序。SuperMemo “膨脹”到 43,800 字節。
- 12 月 9 日被學校和電子學課程的編程給毀了。
- 12 月 10 日,我在學校慶祝停電。我可以做一些額外的編程,而不是上無聊的課。
- 12 月 11 日,我們和大學里最有頭腦的人之一 Jan Weglarz 教授進行了一次愉快的講座。他堅持認為他在波蘭能做的比在國外更多。這是一個強有力的信息。然而,在 2018 年,他在維基百科上的條目說,他的兩階段方法發現被忽視了,后來在西方被重復了,因為他選擇用波蘭語出版。Weglarz 教授在 Poznan 創造了一個強大的團隊,擁有最優秀的運籌學人才。如果我不轉向 [SuperMemo](https://supermemo.guru/wiki/SuperMemo),我肯定會帶著一頂乞求的帽子來找工作。晚上,我添加了一個程序來檢查每天要檢查的[項目](https://supermemo.guru/wiki/Item)的數量。這是今天的 [**Calendar**](http://help.supermemo.org/wiki/Calendar)(或者舊版本的 **Workload**)。
### 第一次在 SuperMemo 中重復
1987 年 12 月 12 日是星期六。我通過一個等待處理的隊列編輯器擴展了 [SuperMemo](https://supermemo.guru/wiki/SuperMemo),似乎準備開始學習,然而,……12 月 13 日,我被一個炸彈擊中:“*內存不足*”。Turbo Pascal 拒絕編譯我的程序,因為它太大了。在那些日子里,DOS 中的內存被分割成 64KB 的段,我可能只能使用一個段。我設法通過優化代碼來解決這個問題。
我需要添加到 SuperMemo 中的最后一個選項是程序讀取日期。在那些日子里,閱讀日期是一件大事。如果沒有它,我將需要在每天開始使用 [SuperMemo](https://supermemo.guru/wiki/SuperMemo) 時輸入當前日期。
終于,在 1987 年 12 月 13 日的下午,我終于能夠將我的第一個項目添加到我的人類生物學收藏中:關于自主神經系統的問題。早在 1985 年 7 月 31 日就被認為是[間隔重復](https://supermemo.guru/wiki/Spaced_repetition)的生日。1987 年 12 月 13 日是間隔重復軟件誕生的日子。
間隔重復軟件誕生于 1987 年 12 月 13 日
到了 1987 年 12 月 23 日,我的論文和[計算機數據庫](https://supermemo.guru/wiki/Collection)包含了 3795 個關于人類生物學的問題(其中近 10% 已經存儲在我新的 [SuperMemo](https://supermemo.guru/wiki/SuperMemo) 程序數據庫中)。遺憾的是,那天我不得不從 SuperMemo 中刪除存儲完整重復歷史的可能性。在 360K 的磁盤上沒有足夠的空間。間隔重復研究需要再等幾年。直到 1996 年,SuperMemo 才重新開始收集重復次數的完整記錄。

> **圖:** SuperMemo 1.0 for DOS(1987)是第一個使用間隔重復的計算機。它引入的算法 SM-2 在 30 年后仍然很流行
## 算法 SM-2
下面是在 SuperMemo 1.0 for DOS(1987)中使用的算法的描述。這個描述取自我 2.5 年后(1990 年)寫的[碩士論文](https://supermemo.guru/wiki/Master's _thesis)。SuperMemo 1.0 很快就被一個更好看的 SuperMemo 2.0 所取代,我把它送給了大學里的朋友們。重復間隔算法在 [SuperMemo](https://supermemo.guru/wiki/SuperMemo) 版本之后被命名為算法 SM-2。這意味著從來沒有算法 SM-1。
在使用的頭 8 個月里,我掌握了 1000 道生物題。更棒的是,在最初的 365 天里,我準確地記住了一萬對英語單詞。我平均每天工作 40 分鐘。這種學習速度在 SuperMemo 最初的商業時代被用作廣告的基準。即使在今天,每天花 40 分鐘來掌握[高級英語](https://supermemo.guru/wiki/Advanced_English)也是值得的。
[算法 SM-2 依然流行](https://supermemo.guru/wiki/Exponential_growth_of_the_popularity_of_Algorithm_SM-2),仍然被一些程序使用,比如[Anki](https://supermemo.guru/wiki/Anki)、[Mnemosyne](https://supermemo.guru/wiki/Mnemosyne)。
檔案警告:為什么使用文本存檔?
這篇文章是:“改進學習” [Piotr Wozniak](https://supermemo.guru/wiki/Piotr_Wozniak) (1990) 的一部分
**3.2. 應用計算機對SuperMemo方法的計算結果進行改進**
**我在 1987 年 12 月編寫了第一個 SuperMemo 程序(Turbo Pascal 3.0, IBM PC)。它旨在以兩種基本方式增強 SuperMemo 方法:**
- 將優化過程應用到盡可能小的[項目](https://supermemo.guru/wiki/Item)(在[基于紙張的 SuperMemo](https://supermemo.guru/wiki/paperbased_supermemo) 中被組織為頁面)
- 根據不同的[難度](https://supermemo.guru/wiki/Difficulty)來區分項目。
觀察到后續的重復間隔增加了一個近似常數的因子(例如英語詞匯量的 SM-0 算法增加了兩個),我決定用下面的公式來計算重復間隔:
> I(1) = 1
>
> I(2) = 2
>
> 當 n > 2 時 I(n) = I(n-1) * EF
>
> 上式中:
>
> - I(n) - 重復 n 次后的重復間隔(以天為單位)
> - EF - 簡易因子反映了記憶和記憶一個給定的項目的輕松程度(后來稱為[簡易度](https://supermemo.guru/wiki/E-Factor))。
簡易度允許在最困難的 1.1 和最簡單的 2.5 之間變化。在將一個項目引入 SuperMemo 數據庫時,它的簡易度被假定為 2.5。在重復的過程中,這個值會隨著回憶問題的出現而逐漸降低。因此,一個項目在回憶中引起的問題越大,其簡易度的降低就越顯著。
在第一個 SuperMemo 程序實現后不久,我注意到簡易度不應該低于 1.3。簡易度低于 1.3 的項目經常被重復使用,而且似乎總是存在固有的缺陷(通常它們不符合[最小信息原則](https://supermemo.guru/wiki/Minimum_information_principle))。因此,不讓簡易度降至 1.3 以下大大提高了流程的吞吐量,并為需要重新制定的項目提供了一個指標。計算項目新簡易度的公式是啟發式構造的,在接下來的 3.5 年里,使用基于計算機的 SuperMemo 方法并沒有太大的變化。
為了計算一個簡易度的新值,學生必須評估他在重復一個項目時回答問題的質量(我的 SuperMemo 程序使用 0-5 級量表——使用數字鍵盤的人機工程學決定的范圍)。公式的一般形式為:
> EF':=f(EF,q)
>
> 上式中:
>
> - EF' - 簡易度的新值
> - EF - 簡易度的舊值
> - q - 回答的質量
> - f - 用于計算 EF' 的函數。
函數 f 最初具有乘法特性,在 SuperMemo 程序的后續版本中,當簡易度的解釋發生重大變化時,將其轉換為加法因子,而不會顯著改變 EF'、EF 和 q 之間的相關性。為簡化進一步考慮,僅考慮最新形狀的函數 f:
> EF':=EF-0.8+0.28\*q-0.02\*q\*q
這是以下形式的簡化形式:
> EF':=EF+(0.1-(5-q)\*(0.08+(5-q)\*0.02))
注意,對于 q=4,簡易度沒有變化。
現在讓我們考慮在 1987 年 12 月 13 日和 1989 年 3 月 9 日之間的 SuperMemo 程序中使用的 SM-2 算法的最終形式,版本 1.0-3.0 (選擇 SM-2 是因為 SuperMemo 2.0 是目前實現該算法的最流行的版本)。
基于計算機的 SuperMemo 方法的變體所用的算法 SM-2,涉及對特定項目的簡易度的計算:
1. 把知識分成盡可能小的部分。
2. 所有項的簡易度都等于 2.5。
3. 使用以下間隔重復項目:
4. 每次重復后用 0-5 級量表評定重復的反饋質量:
5. 每次重復后,根據公式修改最近重復項的簡易度。
6. 如果反饋的質量低于 3,那么重復就重新開始,不要改變簡易度(即使用間隔 I(1),I(2) 等,就像重新記憶一樣)。
7. 在某一天的所有重復訓練之后,重復所有在質量評估中得分低于 4 分的項目。繼續重復,直到所有項目至少 4 分。
在使用 SM-2 算法(學習英語詞匯)的第一年,我記住了 10255 個單詞。創建數據庫和重復所需要的時間為每天 41 分鐘。這相當于 270 個項目/年/分鐘的學習率。整體保留率為 89.3%,但剔除近期記憶(間隔在 3 周以下)沒有正確確定簡易度后,保留率為 92%。比較 SM-0 和 SM-2 算法,我們必須考慮這樣一個事實:在前一種情況下,由于學生在重復給定頁面的項目時得到了提示,所以保留率被人為地提高了。問題前面的項目可以很容易地給出正確答案。
因此,算法 SM-2 雖然在定量比較方面并不令人驚嘆,但它標志著 SuperMemo 方法在 1985 年引入最佳區間概念后的第二次重大改進。將先前分組在頁面中的項目分離和引入簡易度是改進算法的兩個主要組成部分。SM-2 算法是通過試錯法構建的,它在實踐中證明了導向其概念的幾乎所有基本假設的正確性
- CONTRIBUTING
- 我永遠不會送我的孩子去學校
- 01.前言
- 02.箴言
- 03.腦科學
- 04.學習內驅力
- 05.學校教育對學習內驅力的影響
- 06.學習內驅力和獎勵
- 07.學習內驅力與習得性無助
- 08.教育抵消進化
- 09.毒性記憶
- 10.為什么學校會失敗
- 11.最佳推動區
- 12.自然創造力周期
- 13.大腦進化
- 14.嬰兒管理
- 15.嬰兒的大腦怎樣不起作用
- 16.童年失憶癥
- 17.幼兒園的苦難
- 18.壓力適應力
- 19.童年的激情
- 20.為什么孩子們討厭學校
- 21.爬山類比
- 22.術語表
- 23.參考文獻
- 24.拓展閱讀
- 25.摘要
- 間隔重復的歷史
- 01.前言
- 02.1985 SuperMemo 的誕生
- 03.1986 SuperMemo 的第一步
- 04.1987 DOS 上的 SuperMemo 1.0
- 05.1988 記憶的兩個組成部分
- 06.1989 SuperMemo 適應用戶的記憶
- 07.1990 記憶的通用公式
- 08.1991 采用遺忘曲線
- 09.1994 遺忘的指數性質
- 10.1995 SuperMemo 多媒體
- 11.1997 采用神經網絡
- 12.1999 選擇名稱——間隔重復
- 13.2005 穩定性增長函數
- 14.2014 SM-17 算法
- 15.間隔重復的指數發展
- 16.記憶研究的摘要
- 17.剖析成功與失敗
- 18.尾聲