.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初學者(新人)成長為技術大牛的真實經歷?
※知乎上有哪些有趣的程序員?