C#书单

C#语言很好很强大,但是可能我以后会用得越来越少,阶段性总结一些自己的C#书单。

0x01. 基础与参考

1 Head First C

这本书我没看过,但是考虑到Head First的一贯质量很好,推荐给其他初学者看过,据反馈相当不错,能在学习C#语法的同时掌握一些面向对象设计的概念。

2 Beginning C# 2008 Objects

这本书已经绝版,网上能找到盗版的电子版,我大概翻过几下,以C#为例讲解面向对象设计。

3 C#本质论

这本书精讲了C#的语法与重要的类库,不单有怎么样,还有为什么。作为初步的进阶相当不错,有C++或Java经验的可以直接用这本书入门,这是我真正认真读完的第一本C#书。

4 果壳中的C

果壳中的C#

这本书和上一本风格有点像,也是涉及C#基本语法和类库,内容稍有不同,可以互为参考,比如关于序列化,这本书讲得比较多。

0x02 进阶

5 .NET设计规范

.NET设计规范

这本书是.Net类库设计师写的,对写出高质量的代码帮助很大,尤其是设计类库时,可惜也绝版了,网上可以找到盗版的电子版。

6 CLR via C

CLR via C#

这本书详细介绍了C#语法背后的原理,要想深入理解C#必读,比如属性到底是什么?事件本质上又是什么?

7 深入理解C

深入理解C#(第3版)

这本书的特点在于从C#的历史来介绍C#的语言特性,深入解析了背后的原理。

0x03 相关技术

8 WPF 编程宝典

WPF 编程宝典

如果要开发界面,推荐使用WPF而不是WinForm,这本作为参考书很不错。

9 WCF服务编程

WCF服务编程

如果要开发C/S架构的程序,推荐使用WCF,这本作为参考书很不错。

0x04 其他

10 C#函数式程序设计

C#函数式程序设计

这本书要偏门一点,C#通过lamda表达式等,对函数式编程是有一定程度的支持的。

11 C# 6.0 Cookbook

C# 6.0 Cookbook

这本我也没仔细看过,翻了一下,基于Cookbook系列的口碑来看,应该不错。

自由主义的亲子关系-读《父母效能手册》

父母效能手册这本书有着那种畅销书的土气的封面,如果不是看到刘未鹏老师的推荐,我是断然不会买这本书的,这倒也警示我以后挑书不能过于歧视封面土气的。

这是一本教父母如何和孩子有效沟通的书,自然可以归到方法论的范畴,这些方法需要在学习过后实践,我不想在这里做复述,我想说的是我最大的感触,也是这本书背后隐含的价值观:构建父母与孩子间自由主义的关系。

如果对书背后的价值观没有充分的认同与体会,书中的方法估计是很难真正去实施的。这牵涉到对自由的理解。1859年,严复翻译了John Stuart Mill的On Liberty,书名定为《群己权界论》,现在一般通译《论自由》。我觉得严复对自由的理解相当深刻,远胜过如今还把自由等同于随心所欲,然后进行稻草人论证的人。自由需要在人与人之间划界限,在不影响他人的情况下才能随心所欲。

使用群己权界的基本原理考查一下亲子关系:

  1. 当父母权利大大超过界限时,孩子成为父母的附庸,失去自由与独立人格,好一点能培养出一个社会需要的螺丝钉,糟糕时会在一定的时候引起孩子的反弹,亲子关系破裂。
  2. 当孩子的权利大大超过界限时,孩子娇生惯养,习惯于全世界都为其让路,缺乏合作精神,面对社会现实时会头破血流。
  3. 当父母和孩子的权利维持良好的界限时,父母和孩子在不影响对方的前提下自由生活,当发生冲突时,对界限进行协商,孩子拥有独立人格,同时具备合作精神,父母也不用活得那么累。

本书强烈批判的是那种“不是东风压倒西风,就是西风压倒东风”的零和博弈的亲子关系,据我观察,中国的亲子关系以前大多是父母压过孩子,而随着生活水平的提高,独生子女的显赫地位,很多家庭逐步变迁到孩子压过父母,从一个极端快速走向了另一个极端。

在具体的亲子沟通中,自然会面对具体的问题,需要具体的方法,但是父母的心中应该时刻明了的是:孩子不是父母的附庸、玩物,也不是父母实现自己抱负的工具,同时父母也不需要无条件、无限度的为孩子付出,不能一切为了孩子,而应该有自己的生活,更不能用这种付出进行情感绑架。

活给别人看

每到过年,三亚人就拼了命一般的放烟花爆竹,从年三十到十五,从晚上八点到早上八点,直到把三亚的优质空气也搞出不低的PM2.5来。也不知道是当了地主的当地人放得多,还是东北人放得多。

烟花这种东西,早几年我还挺喜欢看的,可是后来也就看腻了,现在看到人放烟花,就感觉人民币在空中灼烧,可能放的人要的也就是这个效果,你看你看,我在烧钱呢!我就是有钱,我就是有本事,我就爱烧钱,你管得着吗?有本事你也烧啊!

今天还看到一条新闻,说浏阳烟花产业不如过去红火了,曾经的花炮专业学校停摆了,毕业生大多数也都改行了。据说现在北京允许放烟花,但是放的人已经大不如前了。可见,整个社会的观念已经在转变了。这种暴发户般烧钱的爱好,这种活给别人看的new money,在很多地方已经开始转型了,从这个角度来看,中国人的自信力可能在逐步上升中。

说到底,我还是想黑一下三亚人或者三亚的东北人,虽然我现在是一个很喜欢钱的人,但还是希望他们能早日变成old monday,这样,至少我耳根清净一些。又或者,我还是跑掉比较现实一些,和这么多土豪生活在一个城市,真的感觉压力好大的。

中国人传统的爱面子加上现代消费主义,活给别人看简直成为了中国人生活的主线,一定程度上这是有上进心的表现,一定程度上这也是失去本心,变成攀比机器的表现,希望土豪们都能早日找到生命中更多的乐趣,活出自己的精彩,活给自己看,这样的中国应该会有趣很多。至于我自己,所谓未曾拿起谈何放下,希望有朝一日也能变成土豪,当然,我不会烧钱给人看就是了。

感动中国2016

今天看了一下2016年度的《感动中国》,央视评选的人物,自然昭显的事所谓的主流价值观。很多年没关注过这个节目了,应该是做了十几年了,能看到很多进步,但那种过度的利他主义气氛也还是非常浓厚。

比如有一个山村女教师,扎根35年,培养了两代人,对自己女儿都疏于照顾,现在到了能退休的年纪,虽然说觉得亏钱自己女儿太多,想着以后就帮着带带外孙,可是还是割舍不下大山,想要做到做不动为止。当然我看的时候也不免热泪盈眶,可是想想这样的道德标准,世间有几人能做到呢,如果能建立一个更合理的机制,又是否有必要让人一直奉献牺牲,如果这种感动,不能给人立下一个我也能做到的标杆,不能引发机制的革新,我们无非是每年替某个优秀的搭进入一辈子的乡村教师抹抹眼泪,然后继续该干啥干啥。老是宣扬老实人能吃亏,谁又会愿意当老实人呢。

当然,救火英雄重伤后,社会和政府全力救助的事则做得很好,虽然很遗憾最后英雄还是去世了。

之前央视还做过一个大国工匠的系列报道,总忍不住要去渲染那些工匠生活有多艰苦,可是如果技艺这么高超的工匠都没有顶级的收入,谁还愿意去当工匠呢?

论语中有一则“子贡赎人”和“子路受牛”的故事: 

鲁国之法,鲁人为人臣妾于诸侯,有能赎之者,取其金于府。子贡赎鲁人于诸侯,来而让不取其金。孔子曰:“赐失之矣。自今以往,鲁人不赎人矣。取其金则无损于行,不取其金则不复赎人矣。”子路拯溺者,其人拜之以牛,子路受之。孔子曰:”鲁人必拯溺者矣。”孔子见之以细,观化远也。

几千年过去了,今人看问题还是不如孔老夫子通透啊。媒体和政府这种比惨的舆论和道德导向,就该发现一次敲打一次,否则永远都是电视上人人皆尧舜,现实中人人皆猥琐。

诗人和诗意

昨天读到一首顾城的诗:

生日

因为生日  我得到了一个彩色钱夹  我没有钱  也不喜欢那些乏味的分币 

我跑到那个古怪的大土堆后  去看那些爱美的小花  我说:我有一个仓库了  可以用来贮存花籽 

钱夹里真的装满了花籽  有的黑亮黑亮  像奇怪的小眼睛  我又说:别怕  我要带你们到春天的家里去  在那儿,你们会得到  绿色的短上衣  和彩色的花边布帽子 

我有一个小钱夹了  我不要钱  不要那些不会发芽的分币  我只要装满小小的花籽  我要知道她们的生日 

内人评价现代诗说,写得最好的可能是两个渣男:徐志摩、顾城。

顾城有多渣男我没研究过,但是这首诗我看的时候觉得很有诗意,又不禁哑然失笑了一番,“我没有钱”这一句说不定是他写诗的时候的真实写照,买了个钱包但是里面没装几个钱这种感觉我也是有过的。

诗人善于把普普通通的事情变得有诗意,对普通人而言,如果能偶尔感受到这种诗意,会发现生活很有趣,可是事情要是走到了极端,彻彻底底活得像个诗人,可能不是什么幸事,一旦无法将诗意和骨感的生活灵活切换,就变成了没钱的浪漫主义,可能诗人本人也不在意,但是往往给身边的人带来困扰甚至灾难。

书籍的未来

最近搬家的事情要开始认真考虑了,从去年开始,我们家逐渐接受了极简生活的理念,其实已经很少添置东西了,但是纸质书还是越卖越多,因为目前来看,首先纸质书的阅读体验还不能完全被电子书取代,其次电子书的书库还相当有限,很多书只有劣质的扫描盗版。

相信未来电子书的书库会不断扩大,撇开这个问题不谈,纸质书和电子书阅读体验上的差异可能才是更核心的问题。就我个人的体验来看,纸质书的优势在于:

  1. 实体感,这不单单是情怀的问题,从记忆理论来说,实体感能起到一个记忆索引或者锚点的作用,不同的阅读场景和不同的书会交织在一起,而电子书则抹去了书和书之间的差异;
  2. 模糊搜索,看书时要前后参考着看,再好的电子书软件似乎也还比不上用手指模糊翻页搜索的体验;
  3. 书写体验,虽然现在的电子书设备也开始有做笔记和批注的功能,但似乎也还远远赶不上纸和笔的体验。

电子书的优势在于:

  1. 无空间需求:如果你家里码了几百本书,就知道我在说什么了,尤其是你在考虑搬家的问题时;
  2. 精确搜索,你可以精确的搜索电子书中的字词,而纸质书几乎很难,除了少数书有索引外;
  3. 建立信息库,李敖读书号称买两本来撕,有一套强大的纸质书的信息库体系,不过他的方法在电子笔记面前就算不了什么了,只要有心,现在的人要建立一个读书笔记库简直太容易了。

仔细考虑一下纸质书的优势,其实都是建立在习惯上的,毕竟我已经看了二十几年的纸质书,接触电子书则不过十来年,精美一点的电子书更是没出现几年。我想对我的孩子来说,他出生就在一个读屏的时代,虽然也会看一些纸质书,加上以后电子书阅读体验的优化,他是不是会比我更喜欢电子书的阅读呢?而电子书相对纸质书的优势则是碾压式的。

我想,以后纸质书将成为像现在的实体唱片一样稀有的东西,成为一种怀旧的产物,或者成为艺术品。而且我已经想到了一种必然出现的用于怀旧的电子书阅读器,已经开始攒钱了,就等技术成熟之后苹果公司之类的初一款了。这种设备大概是这样的:

  1. 它看起来,用起来都像一本纸质书,但是它的每一页纸都是电子墨水屏;
  2. 但它同时又是一个智能设备,可以存储很多电子书,甚至联网下载电子书,需要看一本书时,就加载它显示,比如要看《红楼梦》,它就变成了《红楼梦》,要看《算法导论》,它就变成了《算法导论》;
  3. 它配一支电子笔,写起来体验和真笔差不多,写到这本书上,看起来也和真的写到纸上差不多,笔迹可以保存,也可以识别为文字。

如果过几年技术成熟了还没人做,我就去创业吧……

发展慢下来之后

今天有同事问了我一个问题:为什么中国经济增速降了一点点大家就大呼小叫,而西方国家发展一直很迟缓也没事?

我想可能有以下几点原因:

  1. 惯性,中国人习惯了快速增长,我们毕竟从一个落后的状态过了,伴随着经济的高速发展的是,人们生活水平的日新月异,如果慢下来自然有些不习惯,毕竟,大家都还在期待更好的生活;
  2. 快速发展掩盖的公平问题在速度降下来后会逐渐显山露水,过去因为蛋糕每年在增大而不那么尖锐,因为即使是底层分到的蛋糕也在增大,但是蛋糕增大的速度慢下来,可能有些人分到的蛋糕还在高速增大,而有些人则不再增大甚至开始变小;
  3. 钱更难赚了,粗放式经营将难以维系,人们对生活的追求会从量到质转变,对大部分以前轻松赚钱的人而言,自然是寒冬降临,即使是火热的互联网行业,人口红利也基本吃光了,互联网人口基本上达到了极限。

中国的经济按之前的速度一直高速发展下去是不现实的,关键是发展慢下来之后怎么办?作为一个蚁民能怎么办?如果能逐步缓解公平性问题,社会财富适当向低收入倾斜,还有很大的边际效应可以期待,如果走入困局,则可能要面对几十年来的最大变局。

速度慢下来之后,想要赚钱只能更加努力,更加认真,更加创新,所谓风停下来,才能看见谁是真正的会飞。去年我在雪球建立的股票组合叫“中产消费升级”,危和机一般都是伴生的,比如白酒企业可能会一天天难过下去,而高端白酒则会发展,各种山寨品牌会逐渐死亡,除非它及时转型。蛮荒之地会越来越少,刀耕火种赚大钱的时代可能越来越远了,厚积薄发、深耕细作则永远不会过时。

所以,经济发展慢下来,我只能更努力了。

重复的力量

走出校门参加工作后,发现在很多高中以前学的东西还是概念很清晰,而大学学的东西则有些不甚牢靠。

想了想最大的原因可能就是大学学的东西其实信息量远远大过高中的,但是总的学时不长,再加上自己当年不如上高中时目标明确,没有方向感也就没那么努力,所以对所学的材料其实总共没有看几遍,而高中的那点知识,可是经过了反反复复的练习的。

虽然我觉得高中那种强度的练习对学习知识本身是过度的,纯属为了把人划分三六九等分配大学而进行的军备竞赛。但是事情往往从一个极端走向另一个极端,被重复练习恶心坏了,进了大学则变得厌恶一切练习。及时反馈的练习,适当的重复是建立永久概念的有效方法,不但实践证明了有效,也符合脑神经科学的研究结论。

我们可以研究各种学习方法,去寻找省时省力的捷径,但是方法往往不是最重要的,最重要的还是那些说烂了的道理,比如要坚持下去,比如要重复练习,在这些基础之上,才有谈方法的意义。

其实随着年龄的增大,理解力是不断增加的,而且如果在一个领域深耕细作,知识体系已经建立起来,面对新增加的知识,需要重复的次数会少一些,但这一切,都建立在之前的知识是牢固的基础上。

所以学习这个东西,来不得半点自我欺骗,缺下来的东西都是会有现世报的。这个道理当然是越早知道越好,但是没有人生目标的时候,知道也没什么用吧。

.Net框架中的算法与数据结构

最近复习基础算法,顺带浏览了一下.Net框架的源码,通过本文简要总结一下.Net框架中常见数据结构和算法的实现。

1 集合类

1.1 List

List<T>使用动态数组实现,列表为空时,数组长度为0,加入第一个数据后,数组长度为16,以后当长度不够时会加倍,这时需要新建长数组,并完成复制操作,所以数据量预计很大时,建议指定初始化时的capacity,否则会进行很多复制操作。没有进行数组的自动缩减,而是提供了显式的TrimExcess方法,当数组使用率低于90%时,会去除数组中未使用部分,此外也可显式设定Capacity,这些方法都会产生复制操作。支持二分查找和排序,算法都使用数组的。

1.2 LinkedList

使用双向环形链表实现,内部直接保存的只有一个head节点。

1.3 Stack Queue

基本类似List,都使用动态数组实现,默认大小均为4,

1.4 Dictionary<TKey,TValue>

字典使用散列表实现,具体使用的是桶加链表的实现,键值对使用数组存储(初始大小和桶大小相同),链表指针使用的是数组的index,桶的大小由大于指定capacity的一个最小质数确定,最小为3,最大为7199369。Tkey的哈希值去除符号位后对桶大小取模得到Hash位置,当键值对数组不够用时需要扩大(使用质数数组中的下一个大小),桶的大小也随之扩大,如果冲突数超过100,则重新进行Hash。

1.5 SortedSet SortedDictionary<TKey, TValue>

SortedDictionary<TKey, TValue>本质上使用SortedSet<T> 实现的,而SortedSet<T> 则是经典的红黑树结构。

待续…

最好的搜索

最近想要复习一下基础算法,主要方法除了刷题就是看书,刚刚我默默数了一下,一共是八本书同时看,创了我同时看书的新纪录。

以前上大学的时候,除开努力的因素,单看学习方法,一是目光短浅二是穷,根本不会去找资料辅助学习,学习资料只会使用老师的课件和指定的教材。工作以后,大多数的人则是很少再看书,遇到问题上网搜索一下救急了事。

从头到尾看一本书存在一定的问题,你的思维就被这本书的作者禁锢了,尤其是想要主题式学习的时候,每本书提供的可能都只是主题的一个侧面。以计算机领域的基础算法来说,红黑树是一种经典的数据结构,几乎每本算法书都会详细讲解,但是讲得最清楚的是它的发明者写的那本《算法》,从背后思想的出发点娓娓道来,远胜最广泛使用的《算法导论》。每本书都有它的可取之处,也有通读一遍时可以先略去不读的部分。

上网搜索也有它的优势,会有不同人的不同看法,但是问题是大部分看法都不值一看,资料的质量太差。通过搜索可以获得一些引用,但是真正有知识沉淀的还是论文和书籍,而书籍比论文更成体系,好的作者会阅读无数领域内的论文,把它们写到一本书里。而网上的文章,有真知灼见的还是比例很低,而且筛选起来太费时间。

所以想要知道一个领域内的必备知识,最好的搜索可能是在这个领域内所有的经典教材之中搜索,这样筛选资料的成本很低,按平均50块钱一本书来看,买10本书,也就是500块钱。如果实在太穷,无耻一点看盗版书成本简直为零。通过这些最优秀的资料构建自己的知识体系,获得知识的各个侧面的解读,而不是仅仅学习了一遍作者的思路,才能做到融汇贯通。

说了这么多,这么变态的读书方法我也是刚刚开始,目前感觉良好,仍需继续努力。