Beancount複式記賬(一)

我在在Google的這四年(三)這篇文章中提到了一個「祕密武器」Beancount以及「複式記賬」的概念。我說過我要專門寫一篇文章來分享我的經驗,這篇文章就是我承諾的兌現了。

如何實現財務自由

這個章節標題有點吸引人眼球,像是成功學教程。但是我保證我下面說的內容都是嚴肅,而且有明確定義和方法的。

爲什麼要記賬,我來用一句話總結就是爲了提升對自我的認識。記賬是個人理財的基礎,更是通往財務自由的必經之路。財務自由這件事情固然是根本需要賺錢來實現,但並不是只有一夜暴富纔能實現的。財務自由其實並不是一件虛無縹緲的事情,而是每個人都可以努力達到的一種狀態,換句話說就是「退休」,只不是有人能在三十多歲退休,有人要六十歲,有人則要到八十歲。

財務自由的一般定義是由資產產生的收入不少於生活開銷。如果不知道自己有多少開銷,甚至不知道自己有多少資產、收入,即便是一夜暴富,財務自由是一件不可能的事情。

接下來我來解釋爲什麼財務自由是可以實現的,而且應該是每個人的目標。首先需要強調的概念是資產(Assets)淨資產(Net Assets)的區別,雖然我之後還會詳細解釋,但是這裏需要記住,財務自由並非對個人淨資產的要求,這也就是爲什麼不需要暴富就能實現。像所有投資都有期限一樣,個人的壽命也是有期限的。每當我想到我總有一天會死,都會覺得有些憂傷,但這是無法改變的自然規律。只要在預期的壽命之內資產(而不是淨資產)產生現金流能夠滿足生活所需的開銷,這就是財務自由。我對資產產生現金流的定義較爲寬泛,不僅包括利息、分紅、租金、版稅這類收入,還包括了直接通過資產折現的收入,即淨資產減少。

要想達到財務自由,需要三點要求:對支出的預期、對資產和收入的瞭解、對壽命的期望。這三點都是說起來容易,做起來難的,但是記賬可以幫助你很大程度上解決至少前兩個問題。至於第三個問題,纔是財務自由的根本困難所在,不過這個問題的解決方案已經超出了本文探討的內容了。

爲什麼要複式記賬

記賬這件事是那種容易讓人因爲一時衝動開始,但是很快就放棄的事情。每個記過賬人都有不同的原因和契機,但能堅持下來的則鳳毛麟角。記賬的好處是提升對自己的瞭解,解決那種不知道自己賺的錢都到哪裏去了的問題。但記賬的困難也顯而易見,那就是麻煩,還容易遺漏、錯誤。一般來說普通人對記賬的理解就是每筆消費都幹什麼了,所以就是每一筆消費都有一個金額和類別就可以了。這種記賬方式一開始簡單,但能帶來的價值有限,只是開支記錄而已,長期看來難以說服自己爲了這些價值而忍受麻煩的記賬過程。

相比普通的流水賬,複式記賬的核心理念是賬戶之間的進出關係,要求所有的記錄全部入賬,它可以保證賬目的完整性和一致性。複式記賬可以提供除了開支記錄之外的損益表、資產負債表、現金流量表、試算平衡表等報表。複式記賬還可以把投資和消費輕易區分,譬如購入電腦、手機,可以作爲資產項目入賬並定期折舊。同理對各種代金券、點數積分的購入一樣要算入資產而不是消費。

雖然有各種各樣的手機應用號稱可以簡化記賬,它們把用戶交互做得更加簡單友善,有的還可以從銀行賬戶、信用卡公司直接抓取數據,降低心理障礙,但與此同時它們卻帶來了另一個問題,就是數據所有權、安全性和持久性的疑慮。這些工具大多都是把數據存儲在雲端的,泄漏隱私的可能性不言而喻。更麻煩的是,它們幾乎都是自己的專有格式,無法導出保存,或者哪怕可以導出也難以使用。這也意味着你不得不一直用一個產品,直到有一天倒閉或者服務關閉爲止。這對我來說是不可接受的,因爲在互聯網時代能活過十年的產品非常稀少,無論是像Google這樣隨意關閉服務的大公司,還是隨時有可能倒閉的小公司。複式記賬的價值在於數據的完整性,我對其數據壽命的要求是二十年以上。

複式記賬是一種劃時代的發明,這個發明被認爲是源於中世紀的地中海城邦(意大利或者埃及猶太人)。複式記賬技術成爲中世紀至大航海時代複雜貿易的支柱性工具,使得複雜的合約、信貸成爲可能。後世會計學、金融學的許多概念都來自於複式記賬,可以說體系化的資本主義是從複式記賬的實踐中誕生的。

如何複式記賬

網上對於複式記賬的文章也是汗牛充棟了,但各種晦澀難懂的名詞可能會嚇跑人。我不打算在這裏介紹什麼是複式記賬,因爲很難一句話說清楚,說得複雜了又沒有意義。其實你並不需要懂很多纔能開始複式記賬,只需要一些最基本的概念就可以了。這個概念就是會計恆等式。

會計恆等式

作爲會計學的核心,複式記賬是一種實踐中誕生的技術。除了最基本的會計恆等式之外,複式記賬只有規範,沒有對錯。那麼什麼是會計恆等式呢?最基本的形式就是:

資產 = 負債 + 權益(淨資產)

這個等式對於沒有接觸過會計學的人來說可能不太容易理解,但是記賬實踐過馬上會明白的。理解的難點在於,會計學上的「資產(Assets)」和一般人對一個人富有程度的理解不太一樣,因爲資產是負債和權益的總和,負債(Liabilities)也是資產的一部分。

更容易理解的部分其實是權益(Equity),在個人理財的上下文中,又和淨資產(Net Assets)是等價的,也就是經常說的「個人淨值」。淨資產需要由總資產排除負債,一個人到底是否富有,看的是淨資產,而不是資產

舉例說明,一個人首付20萬美元,貸款80萬美元,買了價格爲100萬美元的房產。假設這個人沒有別的資產和負債,那麼他的資產就是100萬美元,負債是80萬美元,而淨資產是20萬美元。在房價沒有變化的情況下,買房對一個人的淨資產沒有什麼影響(忽略手續費的話),而他的資產和負債都暴增,也就是所謂的「擴大資產負債表」。

如果你理解了會計恆等式,那麼複式記賬的一切知識障礙已經掃除了。

使用Beancount

再說一遍,複式記賬在於實踐,在開始實踐之前學很多艱深的會計學概念沒有任何意義。要開始實踐,就要有工具上手了。在衆多工具中我推薦使用Beancount,原因如下:

  1. Beancount是一個開源工具,用Python實現的,可以本地運行。
  2. 賬本是一套基於文本的語法,方便存儲和管理,個人擁有全部的數據,還可以使用Git管理。
  3. 賬本的語法很規範,也具備靈活度,像編程語言一樣可以嵌套引入,也有語法高亮和代碼檢查工具。
  4. 有完整的命令行工具鏈和可視化工具fava,還有基於SQL的查詢和報表生成。
  5. 沒有預先定義的類別、貨幣等現實世界概念,可以輕鬆實現多幣種記賬,包括各種點數、虛擬貨幣。

除了Beancount,Plain Text Accounting網站還列出了其他的開源工具比較,類似的具有競爭力的開源工具還有Ledger和hledger,其中Ledger是這類工具的開創者。無論使用裏面介紹的哪個工具,其基本理念都差不多,即記錄賬戶之間的資金流動。最重要的是,你是賬本的所有者,如果不喜歡一個工具了,可以輕易轉換到另一個工具。雖然它們語法有些許區別,但寫一個腳本來轉換不難。

使用Beancount之前首先需要Python 3運行環境。Beancount可以輕易從PyPI獲得,使用以下命令:

pip install beancount fava

上面的命令其中beancount是核心包,包括了命令行工具,fava是網頁可視化工具。這裏是一個示例賬本:鏈接。示例文件可以在Beancount的Bitbucket上下載

下載之後可以在命令行中運行:

fava example.beancount

即可看到:

Running Fava on http://localhost:5000

Beancount

至此爲止Beancount環境就已經設置好了。

這篇文章到此爲止,下一篇我會介紹Beancount具體的使用方法和操作經驗。同時歡迎加入Beancount中文討論:t.me/beancount_zh

相關日誌