編程該怎麼學下去(C#)?
自學.net一年半,和工作略微相關,算是邊學邊用,所在部門不搞開發,只有自己根據需求隨便寫寫,都是規模很小的桌面軟體,現在看 深入理解C#(C# in Depth)裡邊關於lambda linq Enumerable原理之類的根本看不懂!用還能簡單用一用,《CLR via C#》這本書表面的還行,只要設計到原理深層的都一片茫然,現在該怎麼學下去,身邊沒有行內的前輩和同事,今天下午實在看不下去了,斗膽到知乎上請教大家,先謝謝大家!
謝謝各位前輩有點懷疑自己是不是鑽牛角尖了,現在想補C++、數據結構、演算法,感覺不懂這些C#學不下去了,外邊找工作,蘇州這邊月薪給到8k,但心裡沒底,不知道需要到什麼水平才能勝任C#程序員要求!
瀉藥。
lambda linq Enumerable原理之類的根本看不懂
現在看不懂原理沒關係,你先學會LINQ的使用就好了。
編程該怎麼學下去(C#)?
- 學習C#本身,可以跳過不懂的地方以後看。
- 挑選一個方向,比如桌面還是WEB還是WP。
- 學習挑選的方向的主流框架,WPF,http://asp.net mvc還是UWP。
- 使用C#做相關方向項目,有目的的使用各種語法。
- 補充自己的Windows體系或者Web體系相關知識。
- 寫一個軟體來解決實際問題,比如一個全平台的搶票軟體。
- 擴充軟體功能,有意識的按照學習體系實現新的知識點。
用不到就很難學會,最好找點用得著的例子來練手,不行就換開發的工作。
謝邀。
C#是一門簡易且華麗語法糖的語言,配合VS2013上手很快,用之頻繁高潮。可以看看傳播智客.NET視頻講的很好!最後,和你說一句,基礎才是硬實力?
我覺得知道自己寫的每一行代碼後面幹了什麼就行了吧。比如new出來的東西在內存中放了什麼東西,未來什麼時候會被自動銷毀。比如,值類型放進列表等的時候,發生了什麼過程。知道LINQ是擴展方法實現的。由於很多東西都能放在一個C#的項目里,知道哪些是.Net,哪些下層是COM,哪些是WinRT……知道基本就可以了……
其實我覺得.Net 學起來很容易,因為很多東西微軟已經幫你寫成類了,實例化就好。它與c++不同,不需要思考底層實現,不需要過多的面對指針,所以一些功能的實現實際上會麻煩一點。
馬一個時間2016.3.24
這次的更新刪掉以往一些回答,作為一次比較大的補充。
答主今年參加了一次競賽,但是很遺憾,身體素質不好,中途退出了。這次更新的回答,主要是集中在說明該怎麼學,如何學這方面。編程無非就是寫三個方向的程序:數據處理,業務代碼或者說功能模塊,可視化。
數據處理一般偏向於底層,考驗個人知識的紮實程度,不乏考驗一些少用的位運算。數據處理應該算是一塊知識面吧,如果你基礎不紮實,寫與底層或者伺服器數據,運算數據相關的程序可能會比較吃力,關注過我往期回答的童鞋可能會懂我當初寫的是什麼。
業務代碼或功能模塊,這方向主要是用面向對象的思維去思考。注重的是功能的實現。裡面會涉及代碼效率優化,以及其他一些與速度相關的問題,同樣也是考驗個人的知識水平。好與壞完全看個人的經驗以及知識面。其中還會涉及到演算法。
可視化就不說了,UI相關。
總結了一下最近的學習成果,學好編程需要達到四個層面:
1.第一個語法層面,在這個層面上你能照葫蘆畫瓢算是及格了,舉一反三算優秀,隨便看看一門語言的書就能是算是觸類旁通了。2.第二個語法特性層面,在這個層面上,應該少一些人云亦云,多一點自我判斷,對程序語言有一定意義上的熟悉,並且開始接觸編程語言獨有的語法特性以及前沿技術。能夠對技術有一定的預判。熟練使用算是入門,懂得利弊是及格,能夠揚長避短算是出色3.某種技術的底層實現
要到達這個層面不只需要對數據結構、對演算法、對語言熟練作用,更是需要對系統底層以及新技術有足夠的了解。本人沒有這個實力,所以不談。最後一個層面 那就是看你怎麼定目標了#############
2016,6,26更新這次更新不會刪除以前的回答,讓大家作為一個參考。感受一下,幾個月以來給我的改變。我的更新是獨立的,和之前回答沒有上下文關係。首先,我們還是得回到問題之中,該怎麼學C#?
我記得,去年十月開始從Vb.Net轉到C#,但我不是正統的Vb.net開發者,我之前都在用VB6,只用了兩個月的Vb.net。也就是高考結束,我還是一個半吊子的代碼愛好者。
十一月,我寫了一個抽獎軟體,那時候我還不會用List集合。也沒有任何編程思想。
那時候做抽獎軟體的時候需要我去思考如何排除重複中獎的問題。那時候我的做法很蠢,定義一個定長的數組,預先估算中獎人數之後設定上限,然後每次抽獎的時候都會遍歷一次數組。十二月的時候,我就開始接觸List類了,但如果只是單純的看教材我懷疑你四個月的時候你都用不到也學不到。不要刻意的追求按部就班,有時候需要自己主動去尋找某些東西!我要說明什麼看官自己領悟,有些東西說太明白反而不好。
一月的時候也進入期末考試了,所有自學活動都結束了。
二月份放假的時候,我開始構思爬蟲這個框架。個人覺得C#爬蟲框架很少,所以我打算自己造輪子。但是這時候我得到了賺人生第一桶金的機會!我記得那時候接的單子是讓我寫一個網站,老闆讓我仿照別人的網頁做一個就好了,個人覺得很簡單,就接下來了。然而我什麼時候學過網頁製作了?
既然答應了,就要一本正經的胡說八道,首先談好了價格,那時候我問了很多問題,摸清了對方底細,然後只想寫一個靜態網站,後來做出來!
我很奇怪的做出來了,老闆說還不錯。後來他讓我幫他部署,然而這蠢驢居然不捨得買伺服器,最後~我明白了他賣走私車的。總而言之,我坑了奸商一次~這是題外話,但是我就為此忙了一個月。
忙這個網站的時候我用了Winform幫忙解決重複的工作,也開始自學了怎麼使用文件流。四月做Socket聊天軟體,開始了解什麼是非同步操作。
五月完成爬蟲框架,現在一天到晚都在下小黃片。同時,五月也開始接觸事件,接觸lamda,接觸委託,接觸同步編程。但是每天都在充實自己!
怎麼學?實踐!一個想法把它實現了,你就能學到許多了。由於手機碼子太麻煩我就直接說重點———————————Biu Biu Biu————————————
再做一次完善,同樣是不刪原答案,進步大家有目共睹如何學習C#我覺得應該歸類到 如何學習編程 這一方面。學習編程開發,首先你最好要明白你要達到什麼高度,目標決定你最終能夠達到哪一個高度,同時目標也決定你還碰到多少困難
剩下的就是不斷努力了。
至於怎麼學,實際上學習編程都是一樣的,最重要的是基礎,熟練掌握變數定義,變數賦值以及訪問等等,再然後就是四種語句,條件,順序,循環,選擇,再之後就是方法以及函數
學完之後,基礎知識已經差不多了,接下來就是面向對象編程,類,派生與繼承等等
當你學多了,練多了,編程的問題都可以簡化成∶
數據處理
邏輯判斷系統抽象以及 整體優化當然這些東西都是對實際問題的抽象,一般人是不能直接通過這裡學到什麼的。
正確的做法是∶
尋找一個問題,比如編程實現九九乘法表。
尋找解決方案,
實現九九乘法表,我要知道行和列,比如1 * 1=1,我要在第一行第一列輸出 1*1=1其次是我要重複,所以設計循環最後輸出結果
寫下具體實現,敲代碼
最後測試,總結這樣才能學好編程題主,緣分不,我也在蘇州,也在自學C#!非專業,我業務時間寫代碼,幫我們小部門寫工具!坦白講,在這之前,我也曾想有此一問,但是後來,我自己想清楚了!
我不知道題主是否與我一樣,我沒有就業的壓力,我目前從事的工作收入還能湊合,寫程序純粹是為了學習!我要搞清楚,計算機到底是怎麼工作的,除了硬體我可能真的沒法搞得那麼清楚了,軟體我一直是充滿好奇並且想一探究竟的!是否成高手,那不重要!我現在的層次在對編譯器,操作系統,資料庫,網路這些都讀了一些書,有概念性的了解!自學過C.可能連門都沒入,但對內存分配,指針什麼不那麼陌生!作為練習,也學了鏈表啊,樹啊什麼的一些數據結構!我能慢慢的體會其重要性!半年前,我開始學習C#,我每周搞懂一個大的知識點,泛型,委託,事件,匿名函數,Linq已經是學習的第二周了!我學習這些,我就會在我寫的項目中去用!當然,我經常會忘記我學過的內容,哪怕我曾經使用過,畢竟也是35歲的人,而且平時還要工作!我的辦法,其實沒有別的辦法,就是重複!多寫代碼,反覆的用!然後,就是看別人寫的代碼,我覺得GitHub上那麼多的項目,網上搜搜優秀的項目,看看別人是怎麼實現的,怎麼組織代碼的!我用.FCL如果我想知道微軟是怎麼做到,我就會看源碼,有些看不懂,有些看得懂!收穫挺大的!我目前的做法,就是擬定一份學習的路線圖,保持好奇心,保證時間投入,持續看書,看視頻,繼續完善我的項目!謝邀。
『補C++』絕對沒必要。
『補數據結構、演算法』作為一個追求可以慢慢地、有計劃地補。首先要搞清楚自己的目標:
短期目標:你要能用 C# 來寫一個像樣的項目,解決實際問題。你的短期目標不是:從最小的內功練起,成為無懈可擊的專家(長遠目標)。所以說,很多語言 feature,你先會用就好了。
你最好能先得心應手地用 C# 寫中等規模的軟體,給自己一個有力的正反饋,然後開始各種投企業,根據企業的要求來補充自己的相關知識。你的情況不等同於大一新生。事情要一步步地做。其他,參考 @fantiny 的回答,不重複了。看不懂就跳過那兩本書。試著用學到的東西去做點東西。反正我寫c#好多年,書裡面很多東西還是不明白。太高深的東西給老趙、輪子這樣的高手去琢磨吧。你要承認人的智力是有高低之分的。
用解決現實中的問題就好。拿我舉個例子。因為很久以前用Visual FoxPro寫過程序,對關係資料庫有所了解,所以兩年前轉學C#時,對Linq的作用就很有感觸——光從C#本身來理解Linq是狹隘的,其它更難知識點,也是這樣。建議你多看多寫多想,多接觸一些其他知識點,逐漸進入狀態吧!
沒有好的項目練習的話,你永遠都到不了一個較高的境界。如果你想要在這條路上走下去,要麼跳槽去有更多項目機會的公司。要麼在github上參與一些有意思的開源項目。
你知識結構斷片了,基礎的數據結構和演算法不夠好,另外應用經驗也不夠豐富,所以看不懂,和智商什麼的,一般關係不大。
先看明白最好的辦法是,在知乎上找幾個回答的詳細的帖子對照著看,入門資料和演算法原理科普這種事情,真心沒有比知乎做的更好的了。我是一個愚鈍的人,在工作半年後才明白event , delegate是怎麼一回事怎麼用。使用lamda至今,我依然不明白其原理。但是,我會用!對我來說已經足夠了。很多東西倘若一直深究下去,將會是一個無底洞。
所有的技術都是為了解決問題,沒有問題,學個毛線技術啊?
語言功底深厚的話可以直接重點突破,哪裡不會查哪裡。功底一般,還是找本磚頭多翻翻吧。當年第一次接觸Lambda也是死去活來,看多了感覺也能接受。
與題主十分相似的經歷:
畢業做了硬體開發一年,現在進入了蘇州科技城這邊一家醫療器械公司做測試,公司小,軟硬體測試都要做。年初接觸到c#,開始自學到現在,也是偶爾為公司做一點小工具用用,不成大器,不過沾我老大的福公司的大項目我也有緣參與看看(真的就看看…)談談自身感受:
不是科班學習起來一開始比較盲目,入門到放棄系列也看了幾本,現在想來,還是以任務為導向學起來更快一點也更有興緻一點。建議你盡量去做一下些東西,公司的、github、自己用的。基礎不能不看:比較經典的書(圖靈系列)、網上視頻都可以看看,不能急躁,要有耐心,畢竟就算是科班程序員也是要不斷學習的嘛,給自己多一點信心!一定要多看多練!多看多練!多看多練!哈哈,其實我是寫給自己看的,與君共勉!你需要一個JetBrain Resharper,同志
上網找些c#的項目教程,跟著視頻做項目,權當練手,或許會有一些領悟呢,哈哈!
多寫代碼多看書多思考不斷增漲知識
推薦閱讀:
※c#中為什麼async方法里必須還要有await?
※感覺被C#慣壞了,想實戰運用C++該怎麼入手?
※就Unity 3D的C# 而言,有什麼是你code review時一看到就是問題的地方?
※unity的UnityEngine.dll中extern非static函數是什麼原理??
※C#的這個語法是在哪一個版本出現的?