《C# 从现象到本质》出版,免费送书10本

发布日期:2019-06-14

我的第一本书《C# 从现象到本质》已于近日正式在京东和淘宝天猫上开始销售了。至此,我的图书写作和出版活动正式告一段落。图书销售网址见下。

试读样章:http://images.china-pub.com/ebook8050001-8055000/8050831/ch01.pdf

京东:https://search.jd.com/Search?keyword=c%23%E4%BB%8E%E7%8E%B0%E8%B1%A1%E5%88%B0%E6%9C%AC%E8%B4%A8&enc=utf-8&wq=c%23%E4%BB%8E%E7%8E%B0%E8%B1%A1%E5%88%B0%E6%9C%AC%E8%B4%A8&pvid=73093e2a108a4e649073726bb58be173

天猫:https://list.tmall.com/search_product.htm?q=c%23%B4%D3%CF%D6%CF%F3%B5%BD%B1%BE%D6%CA&type=p&vmarket=&spm=a21m2.8958473.a2227oh.d100&xl=C%23_7&from=..pc_1_suggest

从看书到写书

借着图书出版之际,我也简单回顾一下我从工作到现在的整个心路历程。2012年3月我开始人生第一份码农工作,那时候真的是什么都不懂。我大学学的并不是编程专业,而比较偏金融一些,不过,由于种种原因,我在大学毕业之后并没有找到满意的金融方面的工作。在求职屡屡失败之后,我不得已将目标转为IT开发,这个我只有一点点背景的行业。大学四年跟编程有关的课我就上过两个:C语言和数据结构,数据结构还挂了一次。在上数据结构时,老师讲的云里雾里,我自己也是怎么看书也看不懂。在讲到树的时候,我始终无法理解它们的代码(树是递归定义的,而我见到递归就懵了),导致作业做不出来,最终光荣挂科。毕业之后本来也没想做码农,考了数个金融方面的证书,全部没用上,最后阴差阳错还是干了码农这行。我现在还记得自己曾经在笔试的时候闹过这样的笑话:问序列化是什么,有什么好处,我根本不知道真正的序列化的意思是啥,还以为版本号(v1.0v2.0v2.1)的递增就是序列化。于是,我说了“序列化”的好处 - 更高的版本对应的程序更新一些。显而易见,那次笔试之后就没有任何进一步消息了,我都没法想象判卷的人看见我的答案会呈现怎样的表情。还有一次面试问重载和重写什么区别,不知道,Web页面的生命周期是什么,不知道。最后走的时候我跟面试者说,我一定是失败了吧,面试者还强颜欢笑说还要内部讨论一下。现在想来,这位面试者确实拥有很高的素质。

失业期间也开始逐渐从零学起编程。那时第一次接触到了博客园(里面有很多基础文章)。那时前端的工作还为数不多,大部分职位不是手机开发就是后端。我对手机兴趣不大,就选了后端,C#和java都有温习,天天看书,慢慢知道的越来越多。整个找工作从2011年夏天毕业之后持续到了2012年初,最终我终于被一家小外包公司收留,拿着白菜价格的起薪,老板是我的学长。该公司使用C#进行开发,从此我便成为了微软大军中的一员。可能你们想问我当时我这么菜为什么还有公司敢要,实际也很简单,我的第一家小外包公司的同事们水平也没高到哪里去。 我刚进去没几天就被安排了任务,即继续开发上一个人临走之前写到一半的一个ERP系统。我刚拿到代码之后就傻掉了:代码极端复杂,充斥着各种长达几百行的函数。当时我还以为这样是很牛逼的:原来真正的开发的代码,一个函数这么长啊,果然厉害。

这家公司的ERP系统分为网页端和手持端。所谓手持,是一种比较特殊的手机,它比手机大很多,并且做了特别的加固,直接扔地下也摔不坏。这种装置被送货员大量使用,用于送货单的管理和签收。接下来在公司,我每天不是对着一堆现在看来十分垃圾的代码发愣,就是熟悉业务和玩手持。当时的手持用Windows mobile开发,因此实际上和C#写winform十分类似。众所周知winform的学习门槛很低,俗称拖控件的,因此我也很快就上手了,没有被老板发现我其实啥都不会的本质。一个月后来了一个新同事,他负责网页端的开发,那时候的网页开发也非常基础,就是html+朴素的jquery,也就是写页面的。拖控件的和写页面的在工作中,逐渐建立了深厚的友谊。在几个月之后,我决定摈弃之前那位哥们写的半成品,从头自己搞一个ERP的移动端。这个举措十分英明,因为代码量一下就下去了,之后的工作轻松多了。

很快就过去了一年,在之后的日子里,我逐渐接触到了数据库方面的一些知识,会用ado.net了,会写sql语句了。另外,还进行了一些web service的开发(应该还不是用的wcf,是更之前的技术),使得网页端和手持可以建立联系。随着工作年限的增长,我熟悉了这个外包公司的ERP系统开发流程,慢慢的再也学不到什么新的知识了。另一方面,由于公司销售团队的发展,开发部门的项目越来越多(虽然它们都很相似),导致码农不堪重负,加班成为家常便饭。当时我们还走瀑布流程,在交货时,需要跟着送货员走三天,并且随时解答他们的问题。于是,我便有了至今都很难忘的跟车体验:一早去到仓库看着司机和送货员拿货(有时是食品有时是酒),然后上车,跟着他们去送货。在烈日当空之下,虽然我不需要搬货,不停跟着他们走也疲惫不堪。有时,他们在送货签收时还会经常误操作。整整一天跟车下来,回到仓库还要盘点,最终我回到家都已经是12点了,但第二天早上8点又要去仓库。三天跟车结束,项目验收完毕,开发的各位同事无不叫苦不堪。加班没有加班费可拿,只能换成假期,而请假能不能批还不一定。在公司做了一年多,薪水也没有涨。这么多理由足够我考虑跳槽了。

然后,我便跳去了另一家公司,这次不再是外包了,因此我的工作负荷少了很多。老板对我也不错,虽然在面试我的时候,发现我的C#基础很一般,很多东西都不知道,最后还是选择了我。在他的授意之下,我开始系统的学习C#,买了第一本C#的书《精通C#》第六版。现在看来,该书的难度不大,很适合初学者。我看了一遍,大概把重点都走了一下,尤其是对接口,委托,反射,泛型这些概念死磕了好一阵。在那时,我也发现博客园有很多这方面的文章写的不错。有些大佬的文章深入浅出,很容易让初学者明白。我当时还无法写出那样的文章,也不知道怎么用一个实例去描述那些看上去非常晦涩的概念。我当时的所谓学习笔记,不过是把我认为写的很好的段落抄下来罢了。逐渐的,我接触到了博客园经常提到的C#神书《CLR via C#》《深入理解C#》等等,拜读了各个推荐博客的精彩文章,我对C#越来越有兴趣,积攒的学习笔记越来越多。在学习的过程中,我也遇到了很多困难,例如多线程的资料很少,逼的我不得不去啃英文资料等。必须要承认的是,在学习之后,我对代码质量,C#语言的使用等都和之前的水平不可同日而语,工作做的越来越好,也经常得到老板的称赞。老板有时还会不时的考察我的基础知识,发现我哪里比较差之后,会给我相应的文章推荐。在这个学习的过程中,博客园的文章是我看的最多的,我在看文章的同事,也逐渐形成了自己的知识体系。

16年年中我决定开始写一个C#面试题系列文章,这实际上就是我对之前自己积累的文章的一个梳理。在写文章的同时,我也结合了一些技术名篇,并润色自己的文字。因为我不希望自己文章中的代码是来自其他人的,我就需要自己去构思一个例子去描述,这可不是个简单事儿,它需要你真正彻底了解了才行。我每篇文章都争取做到认真准备,细致书写,没有明显错误。在和园友交流的过程中,我也学到很多新的东西。就这样,我发表了十几篇文章,包括了C#一些最常见的知识点,以及一些线程方面的知识。紧接着就是编辑找上门来,询问我是否有出书的意愿。

在一开始,实际上我是拒绝的。虽然我积攒了一些文章,但这些文章加起来也没有多少页,而且,它们深度也不太够,至少在我看来,还没够出书的标准。我并不希望自己的书和那些快餐技术书的水平相同(台湾有大量这样的书,全书50%都是截屏,剩下30%是代码)。既然要做,那就要做有点不同的事情。那么,我可以做些什么呢?首先,我发现目前C#方面的书,除去那些外国大牛写的之外,对于多线程,尤其是C# 4之后的多线程的内容着墨不多。而多线程恰恰是我学习中最痛苦的地方,我不得不看了很多国外的资料,积攒下不少心得。因此,我如果要出书,我希望可以补上这一块。另外,我会加入C#最新的特性(直到截稿为止加入到7.1),这是目前市面上其他书所没有的。我也会将自己的书中加入一些较为底层的内容,例如IL,内存分配,GC等等。这些内容在很多C#名著中也有所提及。而且,当时我的工作很闲,所以我有充足的时间去创作。

写书感想

写书是很累的。它不同于简单的发篇文章在网上,也没有人知道你是谁。即使你实名发表,也无所谓,毕竟人们不需要花钱才能看到你的文章。写书则完全不同,首先你的书是收费的,因此人们自然希望这笔钱花的值。另外,你的书代表了你的技术水平,书的质量也反映出你是否有认真负责的态度,因此,一定程度上,你的书是你的一个门面。本着对读者负责,对自己问心无愧,我开始了写书的历程。整个写书过程中,我参阅了大量文献,赵三本,国内的书,国外的书,博客园优秀文章都读了不少。有时,我发现自己写的东西已经被某篇文章用更深刻的话语讲过一遍了,我只能立刻推翻自己的草稿重来。例如,《pro .net performance》这本书对于类型在内存中的分配有着深刻的解释,但它还没有中文译本。我便找来了英文版去读,读了没两页,我就知道自己的第三章可以重写了。凑巧的是,我的书7月定稿,这本《pro .net performance》在8月也被翻译了,让我还有点遗憾,如果我那时读了它的中文版,我的书会不会写的更好?毕竟英文版读起来比较累,我没有全看完。

现在,知识变得越来越值钱了。各种不同的网络课程铺天盖地,收费若干。对于我们开发者而言,我们的工作本来就比较特殊:需要不断的去适应新的环境和技术。在学习新的技术,和巩固深挖已有技术的过程中,我们既可以提升自己的工作效率,也可以对工作本身有着更深刻的理解。我现在都不能忘记自己在使用windbg之后,第一次探测一个对象的内存分布并最终走到仅有0和1组成的”内存地图“时的兴奋。大家都知道计算机只认识0和1,那么我们现在看到的互联网,中国字,程序这些东西又是如何存储在计算机上的呢?为什么我们敲打Console.WriteLine("hello world"),就可以看到信息?搞清楚(即使只是一定程度上)这些事情,难道不是非常有意思的事情吗?

写书赚不了多少钱,毕竟现在的稿费都是按销量而不是字数算的(除非你非常非常有名),而技术书的销量通常都不高,和小说完全无法相比。对于我来说,写书只是我对社区贡献的一种方式,当然也有其他的贡献方式例如为开源项目做贡献。我在社区中受益良多,写书回馈也是十分自然的。我自己本身也是一个喜好码字的人,相比赚巨量数额的钱,我更喜欢被人认为是一名知识丰富的专业人士。

再次感谢

在这里,我也向为本书撰写推荐语的四位朋友道谢,其中,有三位我之前也并没有见过。但他们的文章却写的鞭辟入里,在我的学习过程中,给了我很多的启发。他们就是learning hard (李志)王清培和张子阳。他们也各出了一本书,分别是

Learning hard C#学习笔记 (李志) http://product.china-pub.com/4581218.NET框架设计:模式、配置、工具 (王清培) https://www.amazon.cn/dp/B00S8IVPCI

.net之美 .net关键技术深入解析 (张子阳) https://book.douban.com/subject/25832203

另外一位,凌光,则是我的大学同学和好朋友。张善友大哥和腾飞(Jesse)为本书也提出了很多建议。在这里,衷心的感谢你们,祝你们一切顺利。

送书规则

送书规则很简单,9月5日和6日每天13点(这个时间应该不会妨碍大家工作)的前5个评论者将会获得一本书。不得使用程序大量轰炸,一个ID仅限中奖一次。如果出现一个ID多次中奖,则顺延中奖者。当我拿到书之后,就组织发货。

我的后端学习至此就告一段落了,在之后的日子中,我会主要集中在前端和新技术例如.NET Core的学习上。如果对于本书有任何意见或评论,也欢迎大家给我回帖。对于C#,我只是做了一点微小的工作,谢谢大家!