標籤:

學習C#的正確姿勢以及一些問題?

各位好。

小弟之前陸陸續續使用VB6.0編寫程序,想來也2年了。目前想學習C#,並且主要用於WEB開發,同時也想開發一些winform程序。

前幾天買了本書《精通C#5.0》花了3天看完,基本都能看懂。

現在有2個問題想請知乎的老司機解答下:

1、想請教下接下來的學習步驟,書籍和實戰類的

2、看MS的官方說C#準備支持.NET Native,是個好事,關於.NET Native的書也要到下半年估計才會有。對於像我這樣剛入門的人,還需要學習類似《CLR via C#》的書籍麽?這些書籍介紹的內容是否會和新出的.NET Native有出入?

PS:知乎上如何召喚大神?@vczh @趙劼


下面這些,都是我想對三年前的我說的,部分內容只代表自己的觀點,當然你也應該有自己的思考,不要盲從:

1、為自己做一些小工具,解決自己平時的需求,這樣可以增加興趣,C#非常擅長做這塊

2、購買或試用ReSharper :: The Most Intelligent Extension for Visual Studio,寫代碼時照著Reshaper的提示改,可以很快熟悉C#的高級語法

舉個例子,取Age大於20的User的Name,用循環可以這樣做:

List& names = new List&();
for (int i = 0; i &< users.Count; i++) { User u = users[i]; if (u.Age &> 20)
{
names.Add(u.Name);
}
}

可以被resharper格式化成:

var names = new List&();
for (var i = 0; i &< users.Count; i++) { var u = users[i]; if (u.Age &> 20)
{
names.Add(u.Name);
}
}

這樣就知道了var關鍵字。這時候resharper會提示for循環可以寫成這樣:

var names = new List&();
foreach (var u in users)
{
if (u.Age &> 20)
{
names.Add(u.Name);
}
}

這樣就知道了foreach語法。這時候resharper會提示還可以寫成這樣:

var names = users.Where(u =&> u.Age &> 20).Select(u =&> u.Name).ToList();

這樣就知道了LINQ,看LINQ的表達能力多麼強大。resharper就像一個隨時能給你反饋的老師一樣。一旦你學會的這些高級語法,完全可以不再使用resharper的。

3、在 LeetCode Online Judge 上刷題,可以練習編程基本功和C#語法,同時對面試有益

4、如果做Web的話,不要使用Webform

5、遇到問題,調試、Google(或者一些代理,如天外天搜索 - 基於Google的搜索引擎)、在Stack Overflow上提問

6、沒事逛逛GitHub · Build software better, together.,特別是:

quozd/awesome-dotnet · GitHub

.NET Foundation · GitHub

aspnet · GitHub

例如:

如果想參與C#的設計:

C# 7 Work List of Features · Issue #2136 · dotnet/roslyn · GitHub

C# Design Meeting Notes for Apr 14, 2015 · Issue #2134 · dotnet/roslyn · GitHub

C# should support indexed property · Issue #2144 · dotnet/roslyn · GitHub

如果想參與.Net框架庫的設計:

Propose: new method Enumerable.IndexOf · Issue #1415 · dotnet/corefx · GitHub

Add overloads to string trimming · Issue #1244 · dotnet/corefx · GitHub

New API for single-precision math · Issue #1151 · dotnet/corefx · GitHub

如果想參與CLR的設計:

Consider reference counter as alternative garbage collector · Issue #430 · dotnet/coreclr · GitHub

(Discussion) Lightweight Boxing? · Issue #111 · dotnet/coreclr · GitHub

7、《CLR via C#》是遲早要看的,配合工具ILSpy看,其它C#書沒事翻一翻就好了

8、其它通用的書:《編碼的奧秘》、《編寫可讀代碼的藝術》、《編寫高質量代碼》、《編譯原理》、《程序員的自我修養—鏈接、裝載與庫》、《程序員修鍊之道:從小工到專家》、《代碼大全》、《代碼整潔之道》、《演算法導論》、《重構.改善既有代碼的設計》等

9、不要局限在C#或.Net上,C++、node、linux、mysql、js等等,如果感興趣,都可以玩的,當然也不要局限在語言(咳咳...中文...咳咳)上


趙三本中,除了《CLR via C#》之外,其他書都可以通過經驗總結,或者其他網路信息中學到,唯獨《CLR via C#》不可以,因為太底層了。所以必須看,當然,看完其他兩本更好,縮短你的學習時間。

另外,個人還推薦《C#與F#編程實踐》,主要負責教你.net下如何使用函數式編程,為你打開新世界的門。


瀉藥

1大家回答已經很強了 不過不建議安裝重量級的非MS的插件

針對 2回答:沒有出入


語言底層的不用深究,多積累些經驗再看會比較有感觸。

正確姿勢就是Linq,http://Asp.Net MVC, WPF, EF, Web API。其他的c#也能幹,但沒什麼自己的特色。


給最高票的給點兒補充 趙三本另外兩本雖然代碼寫多了也可以領悟 不過看過之後能少走許多彎路


上面的都說的很全了,非常同意 @York Yao 的答案,寫web不要用webform 你可以使用http://asp.net mvc5


0:找一些好書,比如趙三本之類的。好書的作用是非常巨大的,前幾年再學習C#的時候總是在圖書館借什麼《**從入門到精通》,《C#開發**個實例》。但是從去年開始看《C# In Depth》 3rd Edition,這部書前前後後被我看了三四遍,每次看完都有新的領悟。最近在看《CLR via C#》 4th Edition。

1:不要一味的寫Application。一般而言,在Application中,自己既是類的生產者也是消費者,往往追求這個能work就行了,比如前一段時間我用C#寫了常用的數據結構(gaufung/DS · GitHub),寫了一些動態鏈接庫。在寫了過程中對C#語言的features有了進一步的了解,而對未來這些類消費可能出現的需求和問題有很多方面的考慮。

2:Keep practicing,Keep Learning。周圍有好多自認為會寫代碼,但絕大部分都是那些winform之類的 drag and drap的工作(這也是為什麼很多人黑C#的原因,門檻真低),他們的代碼幾乎都是Form1.cs

private void button1_Click(object sender, EventArgs e)
{
//這裡大概有50-60行
}

他們寫的代碼中只有欄位方法。沒有事件,沒有屬性,沒有委託,沒有繼承,沒有介面,沒有泛型……那些關於C#2以上的的語言特性,從來不會去用。我依然記得有個人為了值類型的引用傳參居然用了HashTable,而不去用ref的關鍵字……

3:工具。當然有了Visual Studio大利器省去了不少精力,但是什麼單元測試工具,Git,Resharper等等都值得你去嘗試。還有Google,不濟去Bing,堅決不去百度搜問題。如果Google上不去,用Chrome,裝上紅杏插件,一個月10塊錢,我相信帶來的體驗絕對大大超過那10塊錢。

4:形而上為道,學一個編程語言最終的目的是了解這個語言的思想,我個人認為C#中託管代碼是其最主要思想。當然最近我最近想回到C++,我想自己掌控我自己做的事情,所以最近入手一本《C++ Primer》 5th Edition 英文版。


一定要保持端正的坐姿,後背盡量挺直,長期低頭彎腰對腰椎和頸椎都不好。


  1. 眼睛平視, 不要俯視, 但是也不要仰望星空, 因為脖子有問題也別想靠反方向用力把它彎回來...

  2. 眼睛距離屏幕的距離, 不要太近, 但是也不要太遠 , 因為看不清難免你就會使用扭曲的姿勢...

  3. 背要挺直並且有堅實的依靠, 腰不要懸空

  4. 手肘, 膝蓋都應該自然保持90度彎曲


clr via c#就不用說了,必讀的書。另外再推薦一本c# in a nutshell,對於新手深入學習這門語言很不錯,可以在clr via c#之前讀,沒有那麼底層


買一張好椅子

一把好鍵盤

幾個好顯示器

將辦公桌分兩個,能坐著寫代碼也能站著寫代碼

經常運動


你只用3天時間,就看懂《精通C#5.0》了,恭喜你的能力很強,肯定是入門了,所以接下來你只要不斷寫代碼就可以了!


我會跟你說看書是浪費時間嗎,除非你一點基礎都沒有,沒有基礎乖乖去看基礎,跟著書上代碼,自己敲一遍。

確立一個項目,然後著手寫,不懂的百度!百度!百度! 然後兩年後,你身穿麻袋,頭頂鍋蓋,手拿鍵盤.似東方不敗,後你天下無敵,君領天下,被人們尊稱為攻城獅.。


最厚的那本C#高級編程,之前需要閱讀微軟VS自帶的C#編碼規範,如果是做Web應用開發就讀http://ASP.NET高級編程。


不用在乎自己是否靈通,不用在乎是否最新技術,只要C#能夠輕輕鬆鬆給你實現年薪二十萬,那就說明它是好工具!


1. 看書並實踐 ,噹噹排前幾的書都不錯

2. 購買別個優秀的源碼來看, 51aspx

3. 給自己列些要實現的功能, 並把它實現. (如實現個管理系統)


主要就用來寫web,真不建議用C#來寫,C#還是挺重的

PHP多快呀,nodejs也可以啊

你非要用C#來寫的話,去找個三層架構看看就O啦

知道怎麼寫MODEL-》DAL-》BLL-》VIEW(核心就是知道怎麼寫增刪查改)

MODEL:把資料庫的欄位映射成C#的class,一一對應

DAL:連接資料庫,拿著MODEL去把資料庫里的數據拿出來

BLL:小項目,小WEB這個層直接扔掉吧

VIEW:把你拿到的數據渲染到頁面上

然後VIEW層面看是你是用MVC還是webform(俗稱拖控制項)。

CLR不適合新手看,多數是底層的東西,比較晦澀的。


推薦閱讀:

UWP 程序可以載入插件嗎?
請問c# 做wpf程序是如何將圖片嵌入到exe程序裡面的?
MFC 作為 Windows 原生的 GUI 庫還可以在項目中用嗎?
程序員如何挽救日漸失控的項目?
如何評價王垠的 《討厭的 C# IDisposable 介面》?

TAG:C# |