「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

天文生
• 阅读 671

写在前面: 面对全面放开后多样的消费机会,开发者们如何在保障品质生活的同时,借助开源工具,全面、科学地规划和管理个人财务,把握资金动向,避开消费陷阱?

LigaAI 特邀我司 Nerd4me 大佬分享其个人财务管理经验,系列共分「概念篇」和「实战篇」。本篇「概念篇」,将详细介绍复式记账法的基本框架。

一、为什么要记账?

关于「为什么要记账?」,常见回答有这些:

  • 掌控收支情况,以便更好地制定理财计划;
  • 单纯地作为一种生活记录,以承载记忆;
  • 希望通过记账,改变或调整消费习惯;
  • 鼠鼠穷,希望通过记账寻找可削减的开支;

在我看来,记账所带来的好处远不止这些。记账能让我们更清晰宏观地了解自身的财务状况,通过合理的财富资源配置(让钱去该去的地方),更好地应对/规避风险,规划投资行为

一个维护良好的账本能够生成许多有用的账务报表,其中最有用的两个是:

  • 损益表 - Income Statement: 周期性地审阅损益表有助于了解周期时间内的资金流向和盈亏情况。也就是我们常说的:钱从哪来?到哪去?亏了还是赚了?
  • 资产负债表 - Balance Sheet:用于呈现我们拥有多少钱 钱分布在哪里?

想要更好地维护账本,我们需要采用一种更科学的记账方式——复式记账法。

二、图论 & 复式记账法

「有借必有贷,借贷必相等」 是复式记账法最出圈的口诀。它反映了用复式记账法记录的每一条帐目,至少会与两个交易账户和一条交易同时出现。

如果将「账户」视为「节点」,「交易」看做「有向边」,所有账目都可以被抽象成含若干个节点和有向边的「有向图」,其中有向边的方向是资金的流动方向。

这就是 Martin Kleppmann 大神在 Accounting for Computer Scientists 中提出的理论。本文将围绕「账簿与图论」揭开复式记账法的神秘面纱。

👉 账户 = 节点,交易 = 有向边

老王准备开一个煎饼摊,获得了老婆提供的 5,000 元启动资金支持(转入银行卡)。

他先花 1,000 元(银行卡支付)购买煎饼设备,又花 500 元(信用卡付款)采购煎饼材料,最后用银行卡支付了 250 元的信用卡账单。

老王按照「账户 = 节点,交易 = 有向边」的原则,将交易过程抽象成有向图。虽然节点的名称不太符合会计规范,但有向边的方向严格遵循交易逻辑,即资金永远从一个节点指向其他节点。

「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

👉 标记并更新账户余额

在会计学中,每个账户都有余额(Balance),而余额的多少完全由进出账户的交易决定。

「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

账户余额有两个特性在账目准确性的检查方面,非常有用;若违反了其中任何一条,都能说明账目有问题。它们分别是:

  1. 笔交易会同时关联两个账户(进账和出账),其余额此消彼长,所以图中节点的余额之和始终为 0
  2. 所有节点分成两个不相交的子集,子集的余额之和互为相反数

👉 经营煎饼摊

老王将自己做的账簿图给老婆看。她修改了一些的专业术语,比如将「启动资金」改成「实收资本」。

同时,王嫂指出「煎饼设备」的入账方式不对,应该将设备的使用损耗考虑进来,将采购费用分 4 年折旧,因为四年内老王可能将设备转让出去。

煎饼摊每天的生意都很火爆,经过计算目前已挣得收入 5,000 元。同时,老王对煎饼设备进行改造,并成功申请了专利;设备工厂决定以 10 元/台的价格,购买改良版设备的专利使用权,并为第一批生产计划的 500 台设备预付了 2,500 元。

另外,老王的朋友看生意不错,也注资了 25,000 元;他终于可以给自己发工资了。

「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

👉 如何将图转换成「财务报表」?

老王煎饼摊的故事先讲到这。交易抽象成有向图后,我们如何根据图中的信息,生成损益表和资产负债表?

01 分类处理

首先,对图中的节点进行分类、着色处理,使用不同颜色标记不同的含义。

🟢 绿色表示拥有的东西即资产(Assets) ,例如银行存款、现金或者已经买了且将来可能折旧卖出的东西,就像老王的「煎饼设备」。

另外,要收回来/还回去的欠款 ,也应做绿色标记。其中,欠你钱的企业/个人称为债务人(Debtors),你为债权人(Creditors);而你要还的钱为负债(Liabilities)。

🔵 蓝色表示销售产品或知识产权转让的收入(Income)和花出去且永远不会再回来的钱(花费,Expenses) 。购买煎饼设备的费用是绿色的,因为它还能以「设备」形态再次卖出;而食材买回来做成煎饼就没了,因此是蓝色的。

🌸 粉色表示来自 投资者或自己的钱,即权益(Equity)

「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

02 损益表

损益表反映了一定时间内的利润实现情况,也是关于图中蓝色节点的财务报表。

将图中所有蓝色节点的余额相加,若值为负数,说明煎饼摊「盈利 Profit」,其绝对值为煎饼摊的「净利润 Net Profit」;若值为正数,则代表经营「亏损 Loss」,其绝对值为「净亏损 Net Loss」。

将蓝色节点的信息整理成下图所示的会计学标准格式。为了易于理解,这里对收入余额取绝对值。

「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

损益表指出,老王靠销售煎饼和专利转让获得了 10,000 元的收入,产生了 8,750 元的花费,所以煎饼摊的净利润为 1,250 元。

「损益表」的统计和分析常以月、季度或者年为单位。 通过对比不同时期的数额变化与账户增减,我们可以更全面地了解收支明细,调整开支项目,评估或预测未来的收支水平。

需要注意的是,由于债务人的存在,「盈利」不能代表「银行账户」的余额增加。 这也是为什么一些财报呈现盈利的企业,最终会因资金流紧张(账上没钱)而无法良好运转。

03 资产负债表

资产负债表,又称财务状况表,用于揭秘资产、负债、权益的金额明细和分布状态。

前文提到,将图中所有节点分成任意两个不相交的集合,集合的账户余额之和为 0 ——这正是资产负债表的由来。

将蓝色节点(收入和花费,即损益值)和粉色节点(权益)分为一类,其余额之和应与绿色节点(资产和负债)的余额之和互为相反数。

老王煎饼摊的资产负债表如下,此处数额同样做了绝对值处理。

「钞能力养成指北」前传:开发者开年变富,如何迈出第一步?

三、参考资料

[1] 复式记账法,又称为复式簿记(Bookkeeping),是商业及其他组织上记录金融交易的标准系统。

[2] 图论是研究事物之间关系的科学。万事万物皆有千丝万缕的联系,而任何有联系(联接)的事物都可以抽象成图结构,以便展开全面而强大的分析,包括但不仅限于分析节点影响力、寻找关键路径、预测发展情况等等。

[3] Martin Kleppmann 是剑桥大学「分布式」系统研究人员,著有 Designing Data-Intensive Applications 一书。


编者语:# 编程之外 是 LigaAI 开设的全新栏目。在这里,我们将与开发者朋友们一起发现和分享生活中的「技术时刻」,并通过极具创意与实用的「生活代码」,感受「技术改善生活」的真谛。如果你也对「代码提升幸福感」感兴趣,欢迎关注 LigaAI 帐号

LigaAI 是新一代智能研发协作平台,我们关注研发协作与效率,重视开发者个人的价值创造。往期文章中,我们分享了许多敏捷开发、项目管理、个人成长与提升的文章,欢迎朋友们阅读交流。

体验新一代智能研发协作,请 点击这里 展开了解。LigaAI 助力开发者扬帆远航,期待与你一路同行!

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这