.net學到最後,到底是學什麼呢?

一個初入程序界的碼農,從大學起就開始學寫.net,越用.net 越感到深深的害怕,.net背後的運行機制,等等,我都不知道.net學到最後學什麼呢


學的是怎麼解決問題,企業級框架的目的就是生產力。

一個框架在設計之初的目的,就決定它為什麼會被設計成這樣。

C#/.net這種框架,不管是在閉源的從前還是開源的現在,都儘可能少的讓你接觸一些底層的、本不該你接觸的東西。或者說,不該讓你這個寫業務的而非讓你去寫演算法。

一個合格的企業級框架,起碼應該是,在你學會之後投入到生產的過程中,盡量少的讓你踩一些淵源甚遠的坑,讓你能專註把你的idea變現。

你會設計演算法,精通數據結構,會控制內存調度CPU之後,可能你會寫出來性能更高的程序,但不見得更健壯、更安全。

次奧。。老夫兩天不來,贊竟然破10了,好吧,老夫要開始裝x了

——————裝x分割線,以下大家不用看了,只是為了滿足私慾——————

當你寫代碼的時候,你寫的是什麼呢?是你心中的詩。

一首詩,你用Java/Ruby表達出來,跟用C#表達出來,區別不是很大。

因為你的目的在於,你要把這首詩寫出來,並且讀起來很順暢。

請問

var a = 0;

int a = 0;

Int32 a = new int();

哪個好呢?都一樣啊!你只是想拿到一個值是0的a啊!

但首先,你要心中有詩!

你當然可以去糾結這個字為什麼這樣讀,為什麼是這個意思,為什麼這樣它就等於0了,它怎麼就等於0了呢,如果我有一個這樣的數組,內存是怎樣的呢,對數組的修改,是釋放還是出入棧呢,我這裡應該clone一個引用,還是直接操作它呢?

也沒人阻止你去了解這些東西,不是么?


net也好,java也好,學到最後都是架構能力、某一領域解決問題的能力。

比如某天你需要消息隊列,你總不會非要找Net寫的吧,你可能會選擇java的RocketMQ或Scala的Kafka。

需要分散式緩存,可能會找C寫的redis或Memcached。

需要分散式計算,可能會找clojure寫的storm。

需要寫跨平台客戶端,可能會用選QT,而不是MFC。

需要圖形遊戲相關,可能會選Opengl或DX,而不是WPF。

...

專註於你所要解決的問題及領域上,而不是語言框架。


RTFM


當然是unity!


技術只是解決問題的手段,無論是.Net還是Java, Scala, Go,都有很多想通的地方。你需要一種技術入門,知道如何開始解決問題,.Net的這些機制應該算是比較簡單的,如果這個都讓你害怕的話,那你未來的技術道路會相當的艱辛啊,呵呵。


大學一直學這個的前來回答

.net是個平台,c#是為這個平台而生的一門較為好用的語言。

說下我的情況:大學期間,是以java作為入門語言,c和c++作為進階(其實就是對編程有個更深入的了解),到了這個時候,對編程有了自己的看法和了解,就在這個時候,學校又開了c# 為主的.net 編程和mfc 。然後c# 一學就兩年。這就是我的情況。

在學c# 的時候,剛上手就很輕易的做出一個小程序,後來我發現,只要有點基礎的,都能寫個東西出來。我覺得.net平台做的,就是讓你花更多的心思到你的想法,創意,演算法,以及功能等方面,而不是考慮如何輸出結果等問題,將面向對象做到了極致(個人看法)。

學到了什麼,學到了思考問題的方法,和處理問題的步驟,也增強了你對編程的理解。前提是你需要多寫。在大學快畢業的時候,老師說畢設中把android的部分加上吧,我當時也是有點蒙,就去嘗試做(java已經扔下快兩年了),只用了半個月的時間就做完了android 的東西,期間大部分時間是在刷教程看語法等,好多東西感覺都是來源於c# 的思路,也是到了現在,才終於真正明白楊中科老師(如鵬網講師,很喜歡他的"c語言也能幹大事"系列教程)的那句話,所有編程語言都是想通的。


謝邀,。

我列出幾點好了。

1、我還沒有做到無惑,所以也不知道最後學啥。

2、其他答主回答的也是一些比較淺層的東西,如果要劃定層面,那些要求應該是必須掌握(包括解決問題的能力、自學的能力、一定的眼界水平等)。

3、正如輪子哥群公告中提到「C++需要不斷練習」一樣,C#也需要不斷練習,因為他們所能涉及的方向太廣,能做的東西太多,隨意哪個領域都夠你吃一壺。

4、厲害的人都是拼演算法能力,次厲害的人都是拼搜索引擎的使用技巧。

5、與其問大Boss是誰,還不如先刷小怪升級,你以為是日本動作片啊,一上來就以谷以谷。

7、沒了。。。。。


學業務啊 比如俺們現在學的都是期權期貨金融衍生品這種東西。。。


個人覺得隨著時間的發展最重要的還是功能的實現,然後才是性能的優化,功能實現關乎於能不能賺錢,性能的優化關乎於能不能省錢,在賺錢跟省錢方面來說,我相信大部分初創企業都是賺錢為主,而有了大規模的公司都會關注省錢。

根據摩爾定律,硬體性能能在18個月內翻一翻,這麼給你舉個例子,本來跑一段沒有優化的代碼需要10秒,硬體上去了只需要5秒,或者在未來只需要0.01秒,目前剛上手的話還是專註於如何寫邏輯吧。

還是看你未來想走什麼樣的路線,資深技術人員還是項目管理,亦或者是產品經理,要求的深度都不一樣,了解嘛總歸要了解點,至於到什麼程度是要看需求


.net學到最後學的是什麼?java學到最後學的是什麼?php學到最後學的是什麼?

這個問題很久很久之前我也想過,那時候我的問題是:C學到最後學的是什麼?

其實這幾個問題是不等價的,.net是一種框架,java、php、C是一種編程語言,但如果咱就把這些語言局限到他們最多應用的場景,最後跟.net應該是可以並行討論的。

那麼,引申一下,我們來看看這些東西,到最後學的是什麼:

======================================

先說題主的問題,.net學到最後學的是什麼?

微軟是一個偉大的公司,無論別人怎麼說,我堅持我這個觀點。.net框架是具有前瞻性和革命性的,從它底層的實現機制來說,整合幾乎所有常用語言最後映射成強類型的中間語言,然後編譯成效率幾乎沒有折扣的託管語言這一點,就秒了java幾條街。(強行吹噓一波有點扯遠了)

好吧,提到.net,就不得不提java,仔細對比.net的官方語言C#,會發現跟java一毛一樣,真的是一毛一樣~但是,上面提到了一個很關鍵的詞:託管!

可以這麼說,.net的精髓就在「託管」,而這個,就是你學到最後應該學到的東西。

那麼,來說一下「託管」這個詞:很多人對.net的託管局限於垃圾回收、異常處理等,而這也是java中用到的,但.net把這種思想用到了極致,比如屬性、非同步處理、安全檢查,等等。我認為屬性也是一種託管,它把原本需要複雜調用的過程,用一個賦值運算符「=」就全部搞定了,至於實現的細節,那是更底層人員的事兒。

有人覺得,malloc和free對應用起來才顯得高大上;.net的所有的東西都被打包到你無法看到細節,總覺得心裡慌慌的。但問題是,時代在發展,你讓一個web開發人員去解驅動模塊的bug本身就是一件不合理的事情。當接受了那種信手拈來、直接可用的過程,剩下更多的,是面向問題的結構和實現方法。

.net能學到的很多特性,你在其它語言中都能學到:比如數據結構及演算法、比如UI製作、比如多線程。

.net真能讓你學到什麼獨特的東西?應該就是「關心你關心的重點,瑣事讓其它模塊去做」的思想吧。

當然,話又說回來,微軟的夢很豐滿,但結局往往並非如此,就比如在windows裡面跑android的那個項目。.net的夢也很豐滿,比如開源,比如跨平台,比如開發Android應用……但現在我們能看到的,依舊是做個桌面小軟體、開發個網頁吧?或許這就是樓主疑惑的所在。(扯的不當之處望大神輕拍,畢竟要說的話感覺好多,但理不出一個清晰完整的思路,只能這麼有一搭沒一搭的寫了。如果大家覺得好,我會繼續說其它的語言~)

對了,這個地方補充點東西:有個軟體叫ILSpy,是個開源項目,可以瀏覽.net所有模塊的源碼!霸道吧~

========================================

等待放假無聊中,繼續扯點別的:C學到最後學的是什麼?

我先做個前提,把C局限到(類)Unix系統中。

有人會說了,windows api也是C的啊,turbo C在windows中支持的也很好啊,當年還用它入門來著呢~好吧,但畢竟是少數,現在用windows api直接寫程序的有幾個?邊邊角角用到的不算數哦~

那麼,在(類)Unix系統中,我們從C中學到了什麼呢?

有個很古老的說法,如果真要深入學習編程,那麼,C是必須要學習的編程語言。對於這個觀念,我不敢苟同,我不覺得在C中直接學慣用指針操作內存、調用內核態函數比學習jquery框架要深入到什麼地方去:現代編程發展到這個程度,分工太細,根本就沒有誰更深入這種說法了。

那麼,到底能從C中學到什麼?

C跟其它一些更「高級」的語言相比,有一個對於初學者來說很難理解或者說迷茫的概念:指針!當深入挖掘指針的意義的時候,你會發現,它已經深到硬體層面。指針是什麼?指針「加」是什麼?指針賦值是什麼?回調函數指針到底是什麼意義?什麼是棧?什麼是出棧?什麼是入棧?什麼是……Oh,my God!當弄清楚這些概念的時候,你發現自己:竟然想學彙編了!

C有最簡單粗暴的內存管理,有最簡單粗暴的多線程非同步管理,有最簡單粗暴的硬體管理——驅動層面中,C裡面插入彙編是再正常不過的事情了。

可以這麼說,C學到最後,甚至可以等價為彙編。對的,就是這麼粗暴的結論!

C能讓你理解操作系統運行時關於內存管理、進程調度等各方面的細節;對比Posix和SystemV的介面,你甚至能悟到在計算機編程史上那些重要思想的變遷。

可能有人會說,C只是一種語言,看到上面那些話,感覺更像是學linux會學到的東西。

沒錯,再說一下,C甚至等價於linux:先有了GNU C,然後linus為它及它所編譯出來的程序提供了一個運行平台,就是linux!先有雞還是先有蛋呢?

但現在,除非你真的是想要轉行做驅動開發(windows中的WDK也算),或者嵌入式開發,否則,沒必要把C學到「最後」。打一個不恰當的比方:覺得積木好玩,但沒必要了解伐木的細節吧?(這兒積木是指小時候那種木頭的哦~)。當然,學習一下,理解一下,尤其是指針,對於學習其它語言是大有好處的。比如為什麼要new?引用和傳遞到底是咋回事?為什麼一些帶垃圾回收機制的語言,有時候還是需要手動調用介面釋放空間,否則會內存泄漏?等等。

========================================


學習頸椎治療方法


學更多與語言/框架無關的東西,編碼最終的目的是解決問題,實際業務的問題,理解這句話話就能明白很多事。

比如不限於這些:

如何做需求分析,如何和需求方溝通

產品原型設計

系統架構及設計

單元測試

安全

各種開發思想,面向對象,TDD,DDD等


作為一個菜逼,我沒有這樣的煩惱。我最初學.net就是因為它入門簡單,學著學著我就想知道更多,所以我就反編譯http://asp.net,網上搜底層知識。隨著我閱讀資料的累積,我逐漸意識到,編程其實就是操作數據。操作數據其實就是為了得到我想要的結果。。。。滿足這個結果,是.net java 還重要嗎?


記得我第一次做一個項目的時候,當時剛學習VC++沒多久,光是搭建一個界面就經常被指針搞得電腦藍屏,更別說主體業務了。語言不是越底層就越牛逼,關鍵是要能夠有效快速的解決業務問題。


想要吃豬肉,不用自己去養豬殺豬。參觀下就行了。

想要理解得更深可以看看 CLR via C#


不建議學習.net。

雖然 Windows + VS + C# + .net + EF + SQL Server + http://asp.net + MVC + WCF 等這一套,可以極大地提高開發效率,但由於它不是開源的,因此如果遇到.net框架級、SQL Server引擎級甚至Windows系統級的Bug時,會非常麻煩。

如果你是正版,你只能向微軟請求協助。微軟理你,你則需要等微軟反應,時間按天來計算,如果項目很急,那可能就糟糕了。如果微軟不理你,甚至你們用的是盜版,那麼你們要不就只能去掉這個需求或模塊,要不就只能把項目推翻重做,或者就意味著項目失敗。京東之前的那套.net系統最後死掉就是血的教訓。

用Linux + IntelliJ IDEA + java + mysql,會麻煩很多,學習量會增加很多,坑會多很多(Windows,網上的教程不能全信,但官方的話可以信;到了Linux,就連官方的話也不能全信了),而且開發效率也會降低一些。但是,一旦你掌握了,就算Mysql甚至Linux系統出問題,也不用擔心,因為你有源碼,遇到問題後,來一次帶源碼調試,什麼問題都能找到原因,最後自己改下源碼,問題解決。


打個比方,你想做個木匠。

師父給了你鎚子刨子。

你得知道每個幹啥的,怎麼用。

知道基本用法後,你還得知道每個傢具的製作工藝,裡面有哪些標準。

你就基本上可以做一個正經的傢具了。

後面嘛,繼續學


學的是編程的思想和一種解決問題的能力


我感覺學到最後,跟語言已經沒有關係了,跟平台有一定的關係 ,關係不算大,


最後學習頸椎病康復治療


推薦閱讀:

為什麼遊戲行業加班如此普遍?
作為甲方的信息安全負責人是一種什麼樣的體驗?
怎麼回答面試官的題目:你是怎麼理解 http?
有哪些IT初學者(新人)成長為技術大牛的真實經歷?
知乎上有哪些有趣的程序員?

TAG:NET | 能力 | IT行業 | C# |