Hashcards: 일반 텍스트 기반의 간격 반복 시스템

1 month ago 11

  • Hashcards로컬 우선(local-first) 방식의 간격 반복 학습(spaced repetition) 앱으로, AnkiMochi와 유사하지만 데이터베이스 대신 Markdown 파일을 사용함
  • 각 플래시카드는 일반 텍스트로 작성되며, 질문(Q) , 답변(A) , 클로즈 삭제(C) 형식을 지원하고, FSRS 알고리듬으로 복습 일정을 관리함
  • 카드 데이터는 텍스트 해시값으로 식별되며, SQLite에 복습 기록이 저장되고, Git 저장소를 통해 버전 관리 및 공유 가능
  • 기존 Anki의 복잡한 인터페이스와 Mochi의 비효율적 알고리듬 문제를 해결하기 위해, 입력 마찰 최소화와 완전한 소유권을 목표로 설계됨
  • Markdown 기반, Git 통합, FSRS 스케줄러의 결합으로, 개발자와 학습자가 투명하고 자동화된 학습 관리를 수행할 수 있는 새로운 접근 제공

Hashcards 개요

  • Hashcards는 로컬에서 실행되는 오픈소스 간격 반복 시스템으로, Anki나 Mochi와 유사한 학습 경험을 제공
    • 복습 일정은 FSRS(Free Spaced Repetition Scheduler) 알고리듬으로 관리
    • 웹 인터페이스는 localhost:8000에서 실행되며, 복습 기록은 SQLite 데이터베이스에 저장
  • 핵심 차별점은 데이터베이스를 사용하지 않고, 각 플래시카드를 Markdown 파일로 관리하는 구조
    • 예: Cards/Math.md, Cards/Chemistry.md 등으로 구성
    • 각 파일은 여러 개의 Q/A 또는 클로즈 삭제(C) 카드 포함

텍스트 기반 카드 구조

  • 플래시카드는 간단한 텍스트 형식으로 작성
    • Q: 질문, A: 답변, C: 클로즈 삭제 형태
    • 예시: Q: What is the role of synaptic vesicles? A: They store neurotransmitters for release at the synaptic terminal. C: Speech is [produced] in [Broca's] area.
  • Markdown 문법을 그대로 활용할 수 있어, 일반 노트 작성과 유사한 경험 제공
  • 복습 실행 명령은 $ hashcards drill <path> 형태로 수행

설계 철학과 이점

  • Hashcards의 설계는 “마찰 없는 카드 작성” 을 최우선 목표로 함
    • 카드 입력과 편집이 빠르고 직관적이어야 학습량이 증가함
    • 대괄호([]) 사용으로 클로즈 삭제 입력을 단축 (Shift 키 불필요)
  • Git 저장소와의 통합을 통해 다음과 같은 이점 제공
    • 버전 관리, 변경 추적, 협업 및 공개 공유 가능
    • 표준 Unix 도구나 스크립트를 이용한 카드 검색·수정 가능
    • CSV 등 구조화된 데이터로부터 자동 카드 생성 가능
  • 카드가 텍스트 해시값으로 식별되어, 내용 기반의 안정적 참조 가능

기존 시스템(Anki, Mochi)에 대한 평가

  • Anki
    • 장점: 오픈소스, FSRS 지원, 풍부한 통계, 자동 카드 생성(note types) 기능
    • 단점: 복잡하고 비직관적인 인터페이스, WYSIWYG 입력의 비효율성, 플러그인 의존성
  • Mochi
    • 장점: 깔끔한 UI, Markdown 기반 입력, 단축키 중심 조작
    • 단점: 클로즈 삭제 문법이 장황, note types 부재, 단순한 알고리듬
    • 기존 알고리듬은 간단한 배수 기반(multiplier) 방식으로, 장기 기억 유지에 비효율적
    • 최근 FSRS 베타 지원을 추가했으나, 기존 카드 스케줄링 문제는 여전함

Hashcards의 구현 및 워크플로우

  • 사용자는 텍스트 편집기로 직접 카드 작성 및 수정 가능
    • 예: Q: What is the atomic number of carbon? / A: 6
    • 여러 줄 카드나 복잡한 형식도 Markdown 내에서 자연스럽게 표현 가능
  • 지식의 변화에 따른 카드 수정이 용이
    • 챕터별 Markdown 파일로 구성해, 교재 구조와 일치시킬 수 있음
    • 관련 개념을 인접 카드로 배치해, 수정 시 탐색 효율 향상
  • Git 기반 관리로 다음 기능 활용 가능
    • 커밋, 브랜치, 병합, PR 등 완전한 버전 관리
    • 공개 저장소를 통한 학습 공유 및 협업 가능

텍스트 기반 접근의 시너지

  • 편집기 매크로를 통한 카드 자동 생성 및 탐색 가능
  • Unix 명령어(wc, awk 등) 로 카드 통계 및 일괄 수정 가능
  • 스크립트와 Makefile을 이용해 CSV 등 외부 데이터로부터 자동 카드 생성 가능
  • GitHub 공개를 통해 개인의 학습 과정을 공유할 수 있으며, 이는 학습 문화 확산에 기여

결론

  • Hashcards는 간단한 텍스트 포맷, 고급 스케줄링 알고리듬(FSRS) , Git 통합을 결합한 새로운 형태의 간격 반복 시스템
  • 카드 작성의 마찰을 최소화하고, 데이터의 완전한 소유권을 보장하며, 자동화와 확장성을 동시에 제공
  • 개발자와 학습자 모두에게 투명하고 제어 가능한 학습 환경을 제공하는 도구로 제시됨

Read Entire Article