你真的理解什么是财富自由吗?

        作为全系列开篇的第一篇文章,笑来老师针对财富自由,下了一个清晰、准确、正确的定义:所谓的个人财富自由,指的是某个人再也不用为了满足生活必需而出售自己的时间了。

为什么笑来老师要在开篇就来下这么一个清晰、准确、正确的定义呢?因为他(笑来老师)希望看这篇文章的人,明确自己想要什么,起码知道自己的目标是什么,这很重要。

其实我更期望得到一个数字上定义。假设目前情况不变的情况下,一个人以30岁计,按照我国平均年龄70岁,实际上我们只需要计算40年的开支即可。生活费,包括每月吃住行衣,大概是5000元。社保和医疗保险,4000元。日常其他开销,购买电子产品等,每月1000元。那么40年大概是40*12*(5000+4000+1000) = 480w。再去买一个100平左右的房子,预计是500w。那么你大概需要赚到1000万,应该可以实现不用再去出售自己的时间的目标。

但是然后呢?赚到1000万,然后每天去葛优躺,天天去__?这一切的前提,按照目前情况不变。那假如世界一直在不停的变化的呢?举一个最简单的例子,假如年通货膨胀率为10%,这个也是按照最近几十年的年通货膨胀率的平均预估,可能不准。现在1000w购买力,到40年后就变成了多少呢?我找了一个计算器,算了一下。

你真的理解什么是财富自由吗?

1000W念成22w,直接缩水50倍。你还能说财富自由了吗?你还可以天天去__了吗?上面我只是加入一个年通货膨胀率的因素,现实世界的因素会比这个更多吧?货币超发,投资失败,各种亏损,遇人不淑等,这些一起加进来,实现财富自由的难度,立马成指数级的增长了吧?

世界终究还是一直在快速的变化。上面计算出来的数字,只是为了方便解释财富自由的目标。但不是说,实现这个目标后,就什么都不用做了。君不知,新闻报道有多少人买彩票中奖好几个亿,到最后还是归零了。为什么?可能的原因之一,他们认为赚到1个亿后就不需要去关心财富的事了。在那之后,他们一直都没有成长,一直还是原地踏步。所以财富终究也会归零了,也不是一件很难的事情吧。所以那些说,等我财富自由,就天天___的人,是多么的不靠谱!这也是笑来老师说,有这些想法的人没有希望获得财富自由了的根本原因吧。

文章也说了,财富自由也不是终点,认为达到财富自由就是终点的人,基本上也没有希望获得财富自由了。为什么这样说呢?达到财富自由后,我们应该把时间花在关注自己的成长上面。这只是对自己的时间自主权的开始,你可以安排你自己的时间,去做你自己想做的事情。财富自由之路,是持续的过程,简单的来说就是践行的过程。说再多的道理,也是无用的,实践是检验真理的唯一的标准。保持自己清晰独立的思考很重要。因为你不会因为别人的说法或想法而动摇,坚持自己的践行,才是财富自由的唯一途径。想清楚,财富自由这件事的真正意义是什么。

对我来讲,实现财富自由的真正意义,在于你再不用为了生活必需而去出售你的时间了。你拥有你自己的时间自主权。你可以花费时间在自己的成长上面。这才是我想要过的生活。这也是我一直想要的人生。

始发于微信公众号:神秘极客

不出局就出彩

       今天我加入了007行动第5天,开始每7天写一篇文章的征途。加入007,是对过去的人生做一个总结,每周花4-5个小时的时间,总结沉淀自己的想法感悟。

       常言道,人到三十而立,而现实情况是,我到现在还”跪着”的,一直在出售我的时间赚取生活费。从看财富自由之路,到吴郎的007行动,一切都是这么的顺理成章。加入007,是想了解如何做到践行7年以及自己是否有坚持7年的耐心。在007里有77多个小伙伴,一起相伴,一起成长,是多么一件有意思的事啊。

       这个公众号,很早之前就注册了,但是因为懒一直没有写在这篇文章之前,我已经想到2种结局,第一种是吹了一段时间的牛逼后,这个公众号被我遗忘在脑后,然后还是要面对惨淡的人生。一不小心到40岁的中年,依然是一无所成!第二种是一不小心就坚持了7年,把时间当作朋友,实现了我的目标,赚到第一个千万!

       但7年后的事,谁又能提前预知到呢?当初写这篇文章的自己,还在吗?

始发于微信公众号:神秘极客

读”学习C++:实践者的方法”

非常庆幸在寒假中读了有关C++方面的书,假如没有读这本书(郑莉,清华大学出版社)的话,我想我也永远不会了解C++的魅力,只沉浸在c语言的迷潭中, 尽管,现在我对它只是最浅薄的了解,但是C++的美让我魂不守舍!于是,找了很多有关方面的书和资料,下面我找到一篇觉得最有价值的指导性的文章,感谢作 者刘未鹏为我们初学者做了这么好的介绍,指导!文章讲了很多 关于C++学习的方方面面,如何学习,如何避过陷阱和缺陷…

摆脱自我服务偏见–理性的思考前提

为什么要要摆脱自我服务偏见呢?说小了,是为了成为一个更优秀的程序员。说大了是节省生命(因为偏见可能导致越陷越深,浪费时间)。如果你能够理性的思考我们将要讨论的问题,避免自我服务偏见(就当你从来没有花时间在C++上一样),那么我们便可以开始讨论真正的问题了。

为什么要学习并使用C++?

公认的事实是:

1.C++在工业界仍有稳定的核心市场。

2.C++程序员玩玩能享受到有竞争力的薪酬。

3. C++的整个生态圈这么些年来在学习C++的哲学上,是在没有多少改善。

4.市面上的绝大多数C++书籍(包括很多被人们广泛称为“必读经典”的)

原因:书中充斥的是介绍C++中的陷阱和对于C++的缺陷的各种workarounds(好听一点叫Idioms(惯用法)或techniques(技术))。这些书中列出来的缺陷和陷阱根本不区分常见程度。最最关键的是:这些书当中介绍的内容与成为一个好程序员根本毫无关系,它们顶多只能告诉你——嗨,小心跌入这个陷阱。

5.就算记住一门语言的所有细节也不能让你称为一个合格的程序员。

6.了解语言实现固然有其实践意义(在极端场合的hack手法,以及出现底层bug的时候迅速定位问题),然而如果为了了解语言机制而去了解语言机制便脱离了学习语言的本意了。

7. 80%的C++书籍(包括一些“经典”)只涉及到20%(或者更少)的场景。
建议:有辨别力地阅读(包括那些被广泛称为”经典“的)C++书籍。
养成随时查阅资料和文档的习惯(RTFM)。
8.每个人都喜欢戴着脚镣跳舞。
9.我知道它们很有趣,但实际上它们只是补丁方案。
C++的复杂性
C++的复杂性有两种分类办法,一是分为非本质复杂性和本质复杂性;其中非本质复杂性分为缺陷和陷阱两类。另一种分类办法是按照场景分类:库开发场景下的 复杂性和日常编码的复杂性。从从事日常编码的实践者的角度来说,采用后一种分类可以让我们迅速掌握80%场景下的复杂性。

二八法则

以下通过列举一些常见的例子来解释这种分类标准:

80%场景下的复杂性:

1. 资源管理(C++日常复杂性的最主要来源):深拷贝&浅拷贝;类的四个特殊成员函数;使用STL;RAII惯用法;智能指针等等。

2. 对象生命期:局部&全局对象生存期;临时对象销毁;对象构造&析构顺序等等。

3. 多态

4. 重载决议

5. 异常(除非你不用异常):栈开解(stack-unwinding)的过程;什么时候抛出异常;在什么抽象层面上抛出异常等等。

6. undefined&unspecified&implementation defined三种行为的区别:i++ + ++i是undefined behavior(未定义行为——即“有问题的,坏的行为,理论上什么事情都可能发生”);参数的求值顺序是unspecified(未指定的——即“你 不能依赖某个特定顺序,但其行为是良好定义的”);当一个double转换至一个float时,如果double变量的值不能精确表达在一个float 中,那么选取下一个接近的离散值还是上一个接近的离散值是implementation defined(实现定义的——即“你可以在实现商的编译器文档中找到说明”)。这些问题会影响到你编写可移植的代码。 (注:以上只是一个不完全列表,用于演示该分类标准的意义——实际上,如果我们只考虑“80%场景下的复杂性”,记忆和学习的负担便会大大减小。)

20%场景下的复杂性:

1. 对象内存布局

2. 模板:偏特化;非类型模板参数;模板参数推导规则;实例化;二段式名字查找;元编程等等

3. 名字查找&绑定规则

4. 各种缺陷以及缺陷衍生的workarounds(C++书中把这些叫做“技术”):不支持concepts(boost.concept_check 库);类型透明的typedef(true-typedef惯用法);弱类型的枚举(强枚举惯用法);隐式bool转换(safe-bool惯用法);自 定义类型不支持初始化列表(boost.assign库);孱弱的元编程支持(type-traits惯用法;tag-dispatch惯用 法;boost.enable_if库;boost.static_assert库);右值缺陷(loki.mojo库);不支持可变数目的模板参数列表 (type-list惯用法);不支持native的alignment指定。 (注:以上只是一个不完全列表。你会发现,这些细节或技术在日常编程中极少用到,尤其是各种语言缺陷衍生出来的workarounds,构成了一个巨大的 长尾,在无论是C++的书还是文献中都占有了很大的比重,作者们称它们为技术,然而实际上这些“技术”绝大多数只在库开发当中需要用到。)

非本质复杂性&本质复杂性

此外,考虑另一种分类办法也是有帮助的,即分为非本质复杂性和本质复杂性。

非本质复杂性(不完全列表)

1. 缺陷(指能够克服的问题,但解决方案很笨拙;C++的书里面把克服缺陷的workarounds称作技术,我觉得非常误导):例子在前面已经列了一堆了。

2. 陷阱(指无法克服的问题,只能小心绕过;如果跌进去,那就意味着你不知道这个陷阱,那么很大可能性你也不知道从哪去解决这个问题):一般来说,作为一个合 格的程序员(不管是不是C++程序员),80%场景下的语言陷阱是需要记住才行的。比如深拷贝&浅拷贝;基类的析构函数应当为虚;缺省生成的类成 员函数;求值顺序&序列点;类成员初始化顺序&声明顺序;导致不可移植代码的实现相关问题等。

本质复杂性(不完全列表)

1. 内存管理

2. 对象生命期

3. 重载决议

4. 名字查找

5. 模板参数推导规则

6. 异常

7. OO(动态)和GP(静态)两种范式的应用场景和交互

总而言之,要告诉你从一个较高的层次去把握C++中的复杂性。其中最重要的一个指导思想就是在学习的过程中注意你正学习的技术或细节到底是80%场景下的还是20%场景下的。

说了这么多,还是列书一个书单来:

第一本

如果你是一个C++程序员,那么很大的可能性你会需要用到底层知识(硬件平台架构、缓存、指令流水线、硬件优化、内存、整数&浮点数运算等);这 是因为两个主要原因:一,了解底层知识有利于写出高效的代码。二,C++这样的接近硬件的语言为了降低语言抽象的效率惩罚,在语言设计上作了很多折衷,比 如内建的有限精度整型和浮点型,比如指针。这就意味着,用这类语言编程容易掉进Joel所谓的“抽象漏洞”,需要你在语言提供的抽象层面之下去思考并解决 遇到的问题,此时的底层知识便能帮上大忙。因此,一本从程序员(而不是电子工程师)的角度去介绍底层知识的书会非常有帮助——这就是推荐 《Computer Systems:A Programmers Perspective》(以下简称CSAPP)(中译本《深入理解计算机系统》)的原因。

第三本(是的,第三本)

另一方面,C++不同于C的一个关键地方就在于,C++在完全保留有C的高效的基础上,增添了抽象机
制。而所谓的“ 现代C++风格”便是倡导正确利用C++的抽象机制和这些机制构建出来的现代C++库(以STL为代表)的,Bjarne也很早就倡导将C++当作一门不 同于C的新语言来学习(就拿内存管理来说,使用现代C++的内存管理技术,几乎可以完全避免new和delete),因此,一本从这个思路来介绍C++的 入门书籍是非常必要的——这就是推荐《Accelerated C++》的原因(以下简称AC++)。《Accelerated C++》的作者Andrew Koenig是C++标准化过程中的核心人物之一。

第二本

C++是在C语言大行其道的历史背景下发展起来的,在一开始以及后来的相当长一段时间内,C++是C的超集,所有C 的特性在C++里面都有,因此导致了大量后来的C++入门书籍都从C讲起,实际上,这是一个误导,因为C++虽然是C的超集,然而用抽象机制扩展C语言的 重大意义就在于用抽象去覆盖C当中裸露的种种语言特性,让程序员能够在一个更自然的抽象层面上编程,比如你不是用int*加一个数组大小n来表示一个数 组,而是用可自动增长的vector;比如你不是用malloc/free,而是用智能指针和RAII技术来管理资源;比如你不是用一个只包含数据的结构 体加上一组函数来做一个暴露的类,而是使用真正的ADT。比如你不是使用second-class的返回值来表达错误,而是利用first-class的 语言级异常机制等等。然而,C毕竟是C++的源头,剥开C++的抽象外衣,底层仍然还是C;而且,更关键的是,在实际编码当中,有时候还的确要“C”一 把,比如在模块级的二进制接口封装上。Bjarne也说过,OO/GP这些抽象机制只有用在合适的地方才是合适的。当人们手头有的是锤子的时候,很容易把 所有的目标都当成钉子,有时候C的确能够提供简洁高效的解决方案,比如C标准库里面的printf和fopen(此例受云风的启发)的使用界面就是典型的 例子。简而言之,理解C语言的精神不仅有助于更好地理解C++,更理性地使用C++,而且也有其实践意义——这就是推荐《The C Programming Language》(以下简称TCPL)的原因。此外,建议在阅读《Accelerated C++》之前先阅读《The C Programming Language》。因为,一,《The C Programming Language》非常薄。二,如果你带着比较的眼光去看问题,看完《The C Programming Language》再看《Accelerated C++》,你便会更深刻的理解C++语言引入抽象机制的意义和实际作用。

第四本

《Accelerated C++》固然写得非常漂亮,但正如所有漂亮的入门书一样,它的优点和弱点都在于它的轻薄短小。短短3百页,对现代C++的运用精神作了极好的概述。然而要 熟练运用C++,我们还需要更多的讲解,这个时候一本全面但又不钻语言牛角尖,从“语言是如何支持抽象设计”的角度而不是“为了讲语言特性而讲语言特性” 的角度来介绍一门语言的书便至关重要,在C++里面,我还没有见到比C++之父本人的《The C++ Programming Language》(以下简称TC++PL)做得更好的,C++之父本人既有大规模C++运用的经验又有语言设计思想的最本质把握,因此TC++PL才能 做到高屋建瓴,不为细节所累;同时又能做到实践导向,不落于为介绍语言而介绍语言的巢臼。最后有一个需要提醒的地方,TC++PL其实没有它看起来那么 厚,因为真正介绍语言的内容只有区区500页(第一部分:基础;第二部分:抽象机制;以及第四部分:用C++设计),剩下的是介绍标准库的,可以当作 Manual(参考手册)。

参考文档:
第二本

《C++ Coding Standard》。无需多作介绍,这是一本浓缩了C++社群多年来宝贵的经验结晶的书,贴近实践,处处以80%场景为主导,不钻语言旮旯,用本为主…总 之,非常值得放在手边时时参阅。因为书薄所以也不妨先往脑袋里面装一遍。书中的101条建议的介绍都很简略,并且指出了详细介绍的延伸阅读,在阅读的时候 还是要注意不要陷入无关的细节和不必要的技巧中,时时抬头看一看你需要解决的问题。在C++编码标准方面,Bjarne也有一些建议。

第一本

《The Pragmatic Programmer》,用本程序员的杰作;虽然不是一本C++的书,但其介绍的实践理念却是所有程序员都需要的。

第三本

《Code Complete, 2nd Edition》,这是一本非常卓越的参考资料,涉及开发过程的全景,有大量宝贵的经验。你未必要一口气读完,但你至少应该知道它里面都写了哪些内容,以便可以回头参阅。

其它

所有优秀的技术书籍都是资料来源。一旦养成了查文档的习惯,所有的电子书、纸书、网络上的资源实际上都是你的财富。不过,查文档的前提是你要从手边的问题分析出应该到什么地方去查资料,这里,分析问题的能力很重要,因此:

第四本:

《你的灯亮着吗?》。不作介绍,自己阅读,这本书只有一百多页,但精彩非常,妙趣横生。
如对本文章干兴趣,可参考作者的原文

读”读书写是为了更好的思考”

书写是为了更好的思考,这篇文章很好的诠释了书写的重要,如果不想为博客而博客,那么赶快找个博客写下自己的心路旅行吧。

书写是对思维的备忘

我们的工作记忆资源是有限的,认知负荷也是一样,将思维过程记录下来,让我们可以完全的回溯自己的思维轨迹。

书写是对思维的缓存

我们在头脑中思考问题的时候就往往只能将几个最重要的核心概念保持在工作记忆中!人类的理性之光能够走得如此之远正是因为用纸笔缓存思考的中间结果!

书写是与自己的对话

用黑底白字书写自己的思想,将空出来的思维精力用于反思你自己的观点。

这样就可以在思考一个问题的同时对自己的思考进行反思!

书写是与别人的交流

每个人的的思维都有一些盲点,写下来, 与别人交流,每个人的盲点不一样,你的盲点可以在别人那里得到补充,别人的盲点也可以被你纠正,最重要的价值就在于此。除了盲点之外,我们对于自己的知识 体系中的缺口一般是很难觉知的,而把自己的思考写出来让别人发现漏洞,则是对自己知识体系的善莫大焉。

语言自己也会思考

你会因为用了某个特定的词语从而想到另一个词语,你写着写着就会发现一些词语就像本身有灵性一样,将其他的词语都带出来了。

我知道很多人不书写的原因是因为觉得没有什么可写的,其实这是一个怪圈,你越是不开始书写,总是拿有限的思维缓存去默想一个问题,就越是没有内容可以写,如果你逼着自己将一些不成熟的想法写下来,看着自己写的内容,试着进一步拓展它们,就有可能在理性的道路上走得很远,很远。祝大家书写快乐!

如果对本文章感兴趣请看原文