當前位置:編程學習大全網 - 編程語言 - 程序員應該選擇java還是c#?

程序員應該選擇java還是c#?

java還是c#?其實這不應該是我們真正的主題,而且入了行的也很少會java還是c#這麽比,但初學的,java和c#往往就代表了兩大流派,java代替了j2ee,c#代替了.net,ok,沒有關系,這麽作為title,不影響我們說事。如果從語言的角度上來講,c#毫無疑問勝出,易用、門檻低、優雅、較為簡潔。但java和c#的語言特性是相似的。在很多類的命名上,它們都如出壹轍:

//javaSystem.out.println("java比C#強!j-a-v-a!");

//C#System.WriteLine("妳沒看到#是4個+嗎,我比c++還強2個+,妳就歇菜吧!");

c#出現的時間比java晚,所以自然吸收、借鑒,同時又有它的創新,比如很早就支持lamda表達式、比如event和委托,比如var,比如linq。但如果從面向接口來講,java同樣可以做到event和listener,只不過對象引用的傳遞比較直接。而.Net的類庫和jdk則各有千秋。

如果從應用的角度來看,javaee和.Net體系幾乎都涵蓋了主流的開發方向:桌面、Web、服務端、數據庫、網絡、移動端、中間件。哪個方向,哪個更強?這個留給讀者自己體會吧。

微軟給.Net壹個宇宙最強的IDE,也給了各個方向統壹而平滑的編程體驗,不得不說,微軟的上手要容易的多。

而java則壹開始就和開源分不開,多如牛毛的框架、引擎、包,blabla,用java開發,程序員要懂得東西更多壹些。應為妳大部分情況下得自己整合。但整合的好了就是很強大的,比如SSH。

在近幾年很熱的大數據和雲計算領域,hadoop、spark、tez、leveldb、mongodb、mariadb、hive、hbase,還有oracle,都各自在自己不同的層面發力,大部分的這些都對java是極為友好的。

很多java程序員,都覺得搞.net開發的,就是拖拖控件而已,其實我可以告訴妳,說出這種話的java程序員壹般都還比較小白,如果妳是搞.net的,妳也可以說搞java的都是拷貝別人的開源軟件的代碼,然後改改而已。

當然改改沒什麽問題,誰都不喜歡重復造輪子,比如,google裏面也並非全部是創新,經常”拿“別人的東西自己改吧改吧,淘寶就很不用說了,招了壹些能改c、會點編譯的程序員,經常拿各種開源框架開刀,然後表明是自己的東西。比如雙11的那個問題。

當然不是說淘寶找的人有問題,而是這個企業的文化就是銷售和廣告文化,後來的google也如此。

回到正題,wpf和silverlight(雖然已經EOL)中最大的創新莫過於xaml技術,如果妳認為wpf只是winform的簡單升級,或者說妳只會在wpf中拖控件,說明妳還是壹個非常初級的.net程序員,不管妳工資上w沒有,或者妳已經是項目經理了。

xaml天生就是為mvvm模型而生,這壹點,搞前端的同學,應該熟悉,即使妳不懂wpf,js和html怎麽做mvvm,妳也應該體會過它的好處。

wpf中在xaml中布局控件,並支持INotifyPropertyChanged接口,可以非常容易的實現界面和數據分離,做出壹個mvvm模型出來。

說到標記性語言,我們看看jsp的jstl、struts2的tags,還有asp.netmvc3之後的razor引擎:

jstl和aspx的標簽類似,自由、強大,可以很容易的穿插交織到html標記中;

struts的標簽就是個另類,我個人反感這種既不遵循主流標準也不簡潔的東西,雖然好多人會說好用,那是個習慣問題,我這麽說,不是說這東西難學難掌握,只是比較壹下和razor引擎中的標簽語法,弱爆了。

razor,強大、簡潔、優雅。

妳肯定覺得我是微軟.net的粉絲,其實我想告訴妳的是,最強的標簽語言只有兩種,html和xml,穿插動態語句到服務端頁面上,然後刷出html,從來都不是好的做法,因為不只妳壹個人寫代碼,後面可能會有其他人維護這個頁面,本來這是需要由webdesigner來做的事情,但是有了語句,他的維護成本就很高。

規範的頁面開發,程序員是不會染指壹個css、style的,動態語言在aspx、view、jsp上面應該盡量少用。否則妳不如使用php和asp。這壹點,妳會在工作中會深有體會的。

青春的妳,怎麽選擇?

看看現在的招聘吧,動不動就是

精通j2ee,精通struts、springmvc、hibernate或者mybatis,對mysql、oracle有深入理解,精通webservice、精通多線程,能處理高並發,有的還得懂jvm,最好有hadoop等開發經驗。最後再來個211以上。

.net方面呢?

精通.Net,精通mvc3-5、精通wpf、wcf、多線程,mssql等等等等。

我現在處於離職狀態,所以每天收到獵聘上的壹些推薦,都很郁悶,因為沒有壹項是我精通的。

但是不妨礙我在2012年實習中,就拿到了13K的月薪,比壹些正式員工可能還要高。

而且,仔細想想,代碼中經常講到要容易維護、這個設計模式、那個AOP,這個大並發,那個高性能,我個人沒有見到容易維護的代碼。學習壹個新公司的壹套模式,壹套老產品,比學習壹門新技術需要的時間長得多,妳會發現,99%的情況下,妳最需要的,不是什麽代碼,模式,而是對產品的理解、對業務的理解,很多情況下,除非太菜太小白,大家的代碼都差不多,誰有時間重構代碼?程序員又為何加班?

這是行情,壹個項目接壹個項目,公司需要掙錢的,這是大部分公司的現狀。

壹些疑問

訪問數據庫,隨便找個高效的connector或者driver就行了,壹般提供數據的廠家,誰不提供connector?ORM是很必要,但是追求性能和反框架泛濫的公司不在乎ORM帶來的那點便利性,用壹個jdbc+sql照樣寫穩定高效的數據訪問。

做web前端,真的需要自己寫壹個框架出來?真正需要這種開發的項目有幾個呢?jQuery和d3,原生的javascript就夠了,妳寫的也許不叫框架,最多就是個wrapper。

數據庫的唯壹性索引、聚合索引、輔助索引都沒搞清楚,就開始搞hadoop、spark、hbase、mongodb,用人單位也壹再這麽要求的,妳的項目中真的有那麽大的數據量?在傳統的rdbms下解決不了?

妳開始知道輪子的概念了,並且知道不要重復造輪子。可是妳快不是程序員了,而是框架員了。

所以,回到java還是c#,這個問題,要比我遇到的技術分裂要簡單的多。

我的意見是,忘記java或者c#的對立,如果要做壹個開心、有自我追求、同時滿足就業的程序員,妳需要重視以下方面:

1.函數調用棧,這個很多高級程序員只知其然不知其所以然。妳可以不懂的匯編、函數入口、返回地址、寄存器,但妳需要調試,妳得深刻理解函數調用棧,無論是在dev模式調試struts開發的jsp頁面,還是debug模式調試aspx頁面,妳得看懂調用棧的信息;

2.基本的數據結構和算法,數據庫中索引的組織方式,是B+樹還是Hash,還是堆,妳的公司有Web、桌面、移動用戶,有社區,有產品,妳可能要做個推薦什麽的,或者研究個社交圖譜什麽的,這門技術可以幫助妳。

3.壹門動態語言。lua、python、javascript,都可以,妳需要隨時和系統進行交互,或者實現壹個原型,或者用程序的方式來畫點界面、數據圖什麽,它們夠輕量、夠快捷?

4.壹門重量級語言。比如java或者c#。妳靠它們吃飯。

5.理解跨平臺的含義。掌握壹些基本的跨平臺技術,比如xml、c、html、json。

6.重視網絡編程的練習和理解,在妳使用URLConnection或者MySqlConnection或者WebRequest的時候,妳是否理解它們的生命周期和底層實現,用什麽語言無所謂,妳要記住tcp/ip協議和http的基本特性。這樣不至於妳寫了幾年程序,還不知道method=post是什麽原理。

7.找壹個順手的IDE,我個人不是CLI控,雖然不得不CLI,壹個順手的IDE真的可以提高生產效率。搞.Net推薦vs+resharper,搞java推薦intellijIDEA.?

8.關註壹些熱門而經典的領域,比如機器學習、圖像處理、數據挖掘,即使已經有了mahout,不代表妳不需要了解這些領域,妳可能永遠不會在工作中使用它們,但它們的思想值得妳擁有,因為妳選擇了做程序員,而不是哪個公司的程序員。?

剩下的,就是妳的解決問題的思路和妳實現的硬功夫(編碼能力),我相信,很多看這篇文章的人,不能夠輕易寫出壹個ftp服務器,不能夠不參考、不聯網查詢資料寫出壹個簡單的快速排序,也不能夠輕易寫出壹段通用分頁SQL,但他們依然可以正常工作。

所以外面的功夫容易忘記,有網絡就能拾起,內功才是入骨的東西

  • 上一篇:中國最早能中500萬的是哪種彩票?
  • 下一篇:為什麽我的QQ空間打不開?總是出現HTTP 400 錯誤的請求 — TENCENT TRAVEIER,這是什麽意思?怎麽回事啊?
  • copyright 2024編程學習大全網