終於,我也要出一本C#的書了 - 個人寫做歷程與C#書單推薦

我以前的面試題停了好久,是由於 - 我寫書去了。html

前言

我於2012年3月開始工做,到如今立刻就滿六年了。這六年裏,我從一個連Sql server是什麼都不知道,只會寫最簡單的c#的程序員開始作起,一步一步從一個籍籍無名的外包公司奮鬥到了一個比較大的金融機構的中層。在奮鬥的過程當中,我也走了不少彎路,一度十分消沉,但幸運的是,最終個人努力並無白費。程序員

我一直就是一個比較喜歡寫文章的人。在平時工做時,我也喜歡把不少必要的東西(例如服務器的ip地址,登陸密碼等)寫下來,並作成文檔以便隨時查閱。在前幾年,我對本身的公司不滿意,在業餘時間一直在準備跳槽,因而,我搜集了不少面試題和解答。後來我發現這樣準備毫無系統性,便去買了本書開始看。說來慚愧,我在工做的第三年纔開始系統的看書,那時買的第一本書是《精通C#》第6版。在讀書的同時,我也知道了其實C#領域最出名的書是clr via c#,並買了一本,重寫了本身的文章(以前它們只是面試題的解答),慢慢貼到網上,成爲了面試題系列。在這個系列的編寫過程當中,我也參考了博客園上不少傑出的網友的優秀文章。這個過程當中個人技術水平提升了不少。在寫博客的同時,我也獲得了某公司編輯的注意。經過博客園站內信,編輯但願我寫一本關於C#的書。當時我清點了一下本身文章存貨,發現總字數已經有大概10萬左右,並且那時候公司工做也不忙,就贊成了。面試

書籍寫做

在簽了初步合同以後,編輯將個人書命名爲C#筆試面試題集,由於畢竟我在網上的博客和麪試題關係比較密切。我根據本身電腦裏已有的文章存貨,提交了目錄,並擬定爲7大塊:
1 .NET基礎知識,包括類型基礎,面向對象等
2 C#重要特性,包括委託事件,泛型反射,LINQ等
3 設計模式
4 數據庫基礎知識
5 算法基礎知識
6 測試,部署和持續集成
7 多線程算法

之因此包括這麼多內容,是由於我在準備面試時對這些都寫了文章。但在寫書的過程當中,我逐漸發現,個人「野心太大」了。若是我按照上面的大綱去寫書,我不只時間不夠,目前的能力也徹底沒法勝任:個人算法水平很通常,也不是設計模式和數據庫專家,對測試和部署的經驗也很少。並且,即便在剛開始寫.NET基礎知識這部分我自覺得最「擅長」的部分時,我也在查資料和參考其餘書時,發現個人認知其實還頗爲皮毛。所以,在剛開始寫書時,雖然是在過去文章的基礎上改進,個人進度仍然很慢。有時候,我還會不時的在網上撞到一篇超強文章,它比個人認識透徹多了,致使以前寫的大部份內容都得重寫。數據庫

在寫書進行了幾個月以後,我決定從書中砍掉設計模式,數據庫,算法,測試和部署,並令書更加集中於c#的討論。這樣一來能夠不讓書的內容過於鬆散,二來也讓本身更有信心。如今,整個書已經寫了90%,這個月底就所有交稿了。在交稿以後,相信還會有一段審稿和與編輯討論的時間。等到該書正式出版時,我再來通知你們。如今這本書的內容包括:
1 .NET基礎知識,包括程序集,類型基礎,內存分配,面向對象,字符串,GC等。介紹了一點關於IL的知識。
2 C#,包括委託事件,泛型反射,LINQ,DLR,C#6和7的新特性等
3 多線程,包括多線程基礎知識,同步與鎖,異步模型,async/await等編程

第一部分主要參考了clr via c#的第一和第二部分以及其餘國內外相關書
第二部分主要參考了深刻理解c#以及其餘國內外相關書
第三部分主要參考了clr via c#最後一部分(關於線程的),深刻理解c#的async/await那部分。我試圖用較爲容易理解的語言將這兩本書的相關章節解釋清楚。c#

我對本書的定位是:適合有1-2年開發經驗的人士閱讀。該書的書名已經肯定爲《c# 從現象到本質》,將會有如下幾個特色:windows

  1. 與時俱進,對最新推出的C# 7的特性也有涵蓋,但不會介紹最基礎的c#語法
  2. 夯實基礎,深刻本質,並不是簡單的msdn搬運工 + 一段又長又沒有註釋的代碼這種風格的圖書,例如,《21天。。。》。本書會提到IL,並不時張貼IL代碼以便深刻分析各類語法糖背後的實質
  3. 目前市面上關於c#多線程的中文資料較少,大部分c#書籍在這部分都是簡單一提,但個人書中多線程將自成一篇,包括5章,使用通俗易懂的文字解釋c#多線程相關的各類各樣的鎖和同步工具,以及異步編程模型,直到最新的async/await
  4. 重視英語,不少名詞旁邊配有對應英文翻譯

參考書籍

我在寫做的時候參考了大量書籍,從大名鼎鼎的趙三本到不少博客園網友寫的書,和其餘中英文書籍。在閱讀他人的書籍時,我也發現有些書真的十分優秀,但卻默默無聞。有些書的某些章節頗爲精彩。這裏我也將它們列出來,做爲一個我本身推薦的C#進階書單。設計模式

若是你基礎不是很紮實,那麼能夠找來《精通C# 第6版》入門(不用看wpf,wcf那幾部分),或者《Learning hard C#學習筆記》也行。前者內容比較多,後者相對比較簡練,能夠加強學習信心。但最好的入門書我認爲是《NET 4.0面向對象編程漫談 基礎篇》這本。服務器

下面的書都不是用來入門的。

CLR via C#第四版
這本書實在過重要了,太有名了。實際上,它幾乎出如今任何一本講C#的書的參考資料中。該書雖然如今看來已經有點「過期」了,但它對CLR的講解是十分透徹的。不少國人的C#書籍,都或多或少的受了這本書的影響。

該書雖然很厚,但結構十分清晰,分爲五大部分:
1. CLR基礎,講程序集的結構和部署,IL,JIT,類型系統。第一章很重要,必須好好看,第二章和第三章相對不那麼重要。
2. 設計類型,該部分遍覽了一個類型能夠擁有的全部成員,全部章節都很重要,第12章泛型尤爲重要。
3. 基本類型,13,14,16,17,19章很重要,15和18能夠大概看看。
4. 核心機制,主要包括異常處理,GC,應用程序域,反射和序列化。
5. 線程處理,做爲Windows操做系統的大師,做者對線程的理解很是深刻。26章主要是概念,27-30章全是多線程,通讀這部分對多線程的理解幫助極大。不過,該部分充斥大量專有名詞,對非windows高手來講不太友好。能夠和其餘多線程書配合着看。

這本書因爲成書較早,所以缺失了對C#一些較新版本功能的介紹,例如LINQ等。此時,就須要另一本大名鼎鼎的書 - 《深刻理解C#》出來救場了。

深刻理解C#
這本書相比上一本不那麼「底層」,不過,它的閱讀難度也不小。對於更喜歡特性而非原理的讀者,能夠通讀一遍此書,它按照演進順序講述了C#1-5的全部特性,對LINQ,異步的講解既實用又涉及原理。本書全部章節都很重要。

.NET設計規範:約定,慣用法與模式
在爭論應該是抽象類仍是接口,應該是類仍是結構時,咱們其實看看這本書就夠了,它早就給了咱們一大堆最佳實踐。不知道怎麼書寫異常處理?看看第七章吧。本書實際上就是一個代碼規範集合。

本書適合在須要的時候隨時查閱。以上三本書相輔相成,包括了一箇中級開發者須要掌握的全部主語言相關技能(實際上,即便只理解一半也已經足夠好了),故被某知名程序員稱爲「趙三本」。該程序員還認爲,充分理解了「趙三本」的開發者在大陸的待遇應至少爲20k人民幣每個月,即中級開發者。

Pro .NET Performance
本書以一個獨特的視角 – 性能做爲切入點,講述了.NET程序和類型在性能這一方面的體現。該書的前兩章主要討論了性能測試的衡量方法和工具,第三章深刻了類型系統,第四章詳細的講述了GC,這兩章值得細讀。

本書目前只有英文版,閱讀難度很大。

.NET本質論 第一卷 公共語言運行時(Don Box)
本書實際上就是在講CLR,它也是對CLR的探討中,我目前知道的書中,最底層,最深刻的一本。該書的做者同時也是COM專家,所以,對於CLR這個更好的COM來講,他必然也是得心應手。

本書中我最喜歡的部分是第6章,做者使用了一章的篇幅討論了方法調用。該書過於底層,成書年代也很早,讀起來可能有些脫離實際的感受。

NET 4.0面向對象編程漫談 基礎篇
本書的做者是金旭亮老師。他的這本書(以及後面相鄰的那本)以生動有趣的筆觸講解了.NET的方方面面。我我的很是喜歡這本書。若是你以爲《CLR via C#》太枯燥,行文方式又過於老外,看不下去,能夠先看這本。這本書雖然沒有《CLR via C#》那麼深,但對於底層也有頗多涉及,它和不少粗製濫造的「拖控件教程」有着本質的不一樣。

NET 4.0面向對象編程漫談 應用篇
做者在此書中着重分析了進程和線程以及在C#中的實地應用。這是多線程方面來自國人的爲數較少的好資料。這本書和上一本同樣,我強烈推薦。

你必須知道的.NET(第二版)
本書的編排順序十分獨特。它的視角是徹底面向對象的,而且將.NET各個知識點以逐個對比的方式呈如今了讀者面前,第一次閱讀時,可能會以爲不太適應。本書有必定深度,並且做者行文比較幽默,所以讀起來也不是很枯燥。

本書有不少SOLID和設計模式方面的內容,對開發者不無裨益。

Threading in C#
本書(以網頁形式在網上公開)提供了另外一個關於C#多線程的介紹資料,目前已經有翻譯版本https://blog.gkarch.com/threading/part1.html。該書對.NET提供的各類各樣的鎖都有所涉及,能夠和《CLR via C#》最後四章一塊兒看。

.NET之美 .net關鍵技術深刻解析
本書是博客園網友張子陽的做品。這本書的委託那章是經典之做。

其餘多線程書籍包括async in c#(只有英文),c#併發編程經典實例(這本內容新,但實在是。。。難懂)以及C#並行編程高級教程(這本難度還比較溫和但沒有async/await)。

結語

我接受並堅持把這本書寫完的驅動力主要是:首先,我對技術與.net有着濃厚的興趣,經常在寫書時搞到廢寢忘食,甚至在這段時間內以爲作其餘事情都沒意思了。另外,個人文章受到出版社編輯的賞識是對我能力的一種確定,既然我接下了這個任務就應該認真完成,對得起本身寫的每個字,不誤導讀者。最後,我也但願經過寫書這個契機認識更多的朋友,給本身帶來更多的機會。整個寫書的過程當中,我收穫了不少,也很快樂。

相關文章
相關標籤/搜索