-
1 # java攻城獅
-
2 # 老張聊IT和教育從學習的角度
大學軟體研發相關專業(計算機科學與技術、軟體工程等)的課程設定一般都是以一門高階語言開始,最常見的就是C/C++語言程式設計,也有少量大學選擇的是Java語言程式設計。
其實筆者一直在反思這個問題:從一門高階語言來入門是否合適。最終個人形成的結論是:應該增加一門“計算機組成概論”課程。這門課程應該先於高階語言程式設計、或者是在第一個學期同時開設必修。原因在於,“計算機組成概論”會給出一個軟體研發專業知識體系的全景圖,告訴初學者這個體系都有哪些知識點、哪些板塊,以及這些知識點和或板塊的關係。基於這個全景圖,初學者也會明白高階語言在這個體系中的作用:它是用來完成軟體構建的同時又便於人類理解的“媒介”,所以稱之為“語言”。
學習高階語言,其實要學習三方面的內容:
軟體的基礎演算法結構,即順序、迴圈、分支;特定於這種語言的語法;這種語言所體現的程式設計思想。程式設計思想要解決的問題是如何組織程式碼及模組,使得更易於實現複雜的業務邏輯、更容易讓團隊分工協作、程式碼更易理解易維護。常見的程式設計思想是:面向物件、面向過程、面向介面、函數語言程式設計等。對於第1)點,無論學習哪一種程式語言都是一樣的;對於第2)點,不同語言的差別其實很小。對於掌握一種高階語言的人去學習另外一種語言障礙最小的反而是在這一點上。對於第3)點,目前高校主流教授的C、C++、Java的情況如下:
因此,從學習的角度,C++、Java都是合適的。但為什麼高校往往會選擇C++而非Java呢?原因在於Java是一種基於“虛擬機器”的語言,會更多地遮蔽記憶體分配方面的細節,同時對於初學者再去理解虛擬機器等機制會帶來一些額外的干擾,不利於上述三個學習目的。當然,客觀講上述兩個原因不是非常“致命”的問題,或多或少還有習慣使然的原因吧。
從工作的角度在行業內,當前C/C++、Java以及其他一些語言各有應用場景。C/C++在單板開發、嵌入式系統開發中是絕對的主流;而Java在各種型別的伺服器後臺軟體開發中,也是絕對的主流。原因主要是兩點:
C/C++開發的軟體具備佔用計算/記憶體資源少的顯著特點,這是契合單板、嵌入式系統資源受限的特點的;Java的庫、支撐框架完善,語言層面具備諸如支援反射、執行時異常處理完善等特點,適合程式碼量巨大的大規模軟體系統研發,開發效率高。因此廣泛用於伺服器後臺軟體研發。所以,實際上到底會使用哪種高階語言,取決於工作中要研發的軟體系統的型別。
總結回到題主的問題。深入學習C++,會讓你掌握軟體的基本演算法結構、目前主流的程式設計思想。這兩部分會成為你在後續工作中,當需要學習一門新的高階語言(如Java)時堅實的基礎。你會發現門檻是非常低的。因此,在學習階段,假設學校開設了C++這門課程,那麼毋容置疑應該深入地學習它(反之若開設的是Java也是一樣)。
說些題外話吧。對於現代的一個程式設計師,至少要掌握兩門高階語言:一門靜態語言,如Java、C++;一門動態語言,如Python。前面也說過,在深入掌握一門語言後,再學習一門新的語言 is a piece of cake!
回覆列表
你既然說拍磚,我就拍一下好了。我覺得當你C++學好了,我相信你就不會有這種想法。如果BAT就因為一個人不會Java,而只是C++好,就拒絕他,我只能嘆息一聲。C++都能學的非常棒的人,我不認為他轉Java有多困難,假如有一天我要轉Java方面的工作了,我認為我也會超過很多人,於是如果某一天我去參加面試,面試官說你好像不會Java嘛,我這裡只要已經會Java的,那這家公司會直接被我黑到死。
其實在實際開發中,大部分時間是在思考問題,最難的往往是定位出問題在哪裡,只要定位出問題在哪裡了,最後程式碼部分只是表達出思考後的結果,寫程式碼的時間相比思考問題時間少太多了,這才是體現出優秀程式設計師能力與思維精華的地方,也是區別優秀的程式設計師與純體力的程式設計師的一點。
所以,若你喜歡C++,學就好。若你喜歡Java,也學就好。但是不要學到一半,就說好像另外一個語言更好,更容易找工作,只要你不是學BrainFuck這樣的奇葩語言,你完全不應該有這樣的擔心。
1. 我所回答的是針對應屆生學Java是否會比學C++更容易進BAT,我的答案是不會,因為BAT如果僅僅因為語言而判定一個應屆生的能力,我認為絕非是正確的,因為還有計算機基礎,思考能力,演算法,潛力等更重要的東西。
2. 下面有幾個不斷抓C++轉Java,甚至Android資深開發的,我不知道怎麼抓出來的,工作幾年後,如果不知道揚長避短,直接跑到對面說我C++牛逼,我要當你們Android高階開發,這不是傻叉,是什麼?我下面的回覆觀點是如果真牛逼,而且具有職場經驗的,應該懂得揚長避短,從已有的移動端需要技能,如影象處理強,在跨平臺上有經驗等等,先切入到你想轉的領域,再長期成長,有一個平滑過渡。
3. 我通篇沒有任何鄙視Java與Android的東西,你們能抓出來,我也是佩服,我鄙視的只是學一半看到另外一個似乎更火,就又跳到另外一個的半桶水。
1. 對於應屆生來說,我依然認為計算機基礎,演算法,作業系統等基礎更重要,這個重要性遠遠超過大學期間迎合市場需求而去做Android,SSH,Hadoop等,也超過了提到的C++抑或Java
2. 對於方向,我的建議方向就是大學生,尤其是重點大學生,紮紮實實的搞好計算機基礎課程。你可以有你感興趣的方向,無論是移動,雲計算,計算機底層等,但是依然是第一條提到的計算機基礎,演算法等更重要。大學,尤其是重點大學的學生,不是外面的培訓班學生,核心競爭力不是現在掌握多少Android,Hadoop的技能,而是紮實的計算機技能,以不變應萬變的能力,無論是現在的移動互聯時代,還是乃至未來的物聯網等,這些都是最核心的東西。
3. 對於面試被拒的,以我們這邊來說,絕對不是你的方向或者語言等有問題,而是你的基礎更重要,
@WBScan
也來我們這裡參加過面試,他應該深有體會
4. 無論是C++,還是Java,選定後堅定的走下去,結果絕對都不會太差。如果計算機基礎非常紮實,而擔心學的不是熱門的方向而找不到工作,歡迎來我們IBM編譯器組,我們非常歡迎計算機基礎紮實的應屆生,如果想去移動網際網路,M家 / G家,我也能幫忙推薦,因為計算機基礎紮實的應屆同學,是每個公司都搶的人才。