-
1 # 新星321
-
2 # 功名盡在長安道
問這個問題的,說明你對計算機程式設計還沒有真正入門。不要相信網上那些什麼C語言已過時,現在是python的天下之類的營銷語言。那只是忽悠小白交幾萬塊錢去上程式設計課的。事實上對真正的計算機入門沒有什麼卵用。
計算機語言從早到晚從內到外從底層到前端,不同的環境層次需要不同的語言。
最早沒有程式設計需要這個概念,就是機器語言程式設計。在紙帶上打孔,代表0或1,然後把打好孔的紙帶放進讀卡器讀出來從而控制與非門來實現程式功能。
後來顯示器出現,終於可以不再打孔,直接程式設計機器語言。那時候的程式就是一個個二進位制的矩陣,需要你線性代數學的非常遛。再後來,有了組合語言,終於可以直接控制處理器了,還記得用匯編控制暫存器,累加器等等的場景。於是彙編也成了最底層最初級的程式設計語言,主要面向底層硬體,也可以編寫微控制器。彙編的效率也是非常的低,於是出現了一系列真正的程式設計語言如FORTON PASCAL delphi之流。。。。具體發展歷程就不介紹了,幾乎每本講程式設計的書都會提到。這些語言中,C語言靠簡潔的語言結構和高效的執行效率脫穎而出。C語言的應用場景非常廣泛,由於可以呼叫記憶體,C語言也可以面向底層硬體,keil C也可以寫微控制器,比彙編高效很多,但佔用儲存空間也相對更多。
嚴格來講,從硬體到作業系統之間的中間層,如介面程式,驅動程式,。。。大多用C語言實現。然後C語言的結構化程式設計也讓程式結構變得更加清晰易讀,所以C語言也可以用來很高效的編寫應用程式。可以說從底層到表層,C語言都可以很好的實現。當然C語言有他的弊病,結構化程式設計的通用性非常差,有點類似於私人定製,所以在此基礎上,提出了面向物件的概念,發展出C++語言。引入了類和繼承。這一拓展,大大的豐富了C語言的程式設計環境生態。特別是微軟開發的VS系列,發現至今已二十多年,經久不衰。就是因為WINDOWS程式設計的生態發展的非常好,記得當年有本書叫《深入淺出mfc》專門介紹windows上可以應用的公共類。mfc就是Microsoft Foundation Classes的縮寫。
c/c++雖然有相當多的優勢,但由於還是偏底層,最大的問題是所有的程式都需要編譯。特別是在網路程式設計時代,非常影響發揮。
於是JAVA橫空出世,JAVA是邊解釋邊執行的語言,不需要特定環境下的編譯器,因此程式設計環境相對簡單。而且JAVA取消了指標,不用操心記憶體控制,導致程式設計也更簡單。當然,相對C/C++,JAVA只能實現更加表層的功能。如各類b/s系統,mis系統等等,是JAVA的典型應用場景。
再往上,就是一度流行的各類網路程式設計jsp,asp,php。。。。。以及如今的python,號稱程式設計生態第一流。基本把程式設計變成了程式搬運。把程式設計師的工作變成了搬運工,只要搭積木式的程式設計就可以實現各類應用。
最後就是前端,各類指令碼語言,介面美工,html。。。。不介紹了,沒啥意思,基本不算程式開發了。
以上純屬個人淺見,不當之處請多理解。畢竟脫離專業十幾年了。
-
3 # 外老師
C語言,在開發最底層應用的時候,有不可替代性。而C++則屬於結合底層和上層技術的語言,不可替代性沒有那麼強了。下面探討一下這個問題。
底層應用嵌入式微控制器,作業系統,通訊等底層應用,一般使用C會更好,或者直接使用匯編語言。
高效能及伺服器應用高效能伺服器,遊戲渲染等偏底層的應用,或者對效能要求很高的應用,用C++的比較多。
當然這個層面沒有那麼絕對了,比如Java在伺服器領域也使用非常廣泛,新貴Go語言也在伺服器領域嶄露頭角,甚至JavaScript藉助於node也在後端應用發力。
同樣在遊戲領域,也有基於C#的unity跨平臺遊戲引擎,也非常出色,騰訊的王者榮耀就是使用C#開發的代表作。
前端上層應用再往上層應用走,使用C或者C++的就很少了。
Android是Java的天下,當然Google的flutter也有前景。
iOS是object C的天下,後來者Swift也在蘋果的強勢推動下,使用得越來越多了。
至於桌面端,基本上是C#和Java的天下了。
但是有一個例外,就是Qt,這個對跨平臺支援最全的框架,是基於C++的。從嵌入式到移動平臺,再到桌面平臺,Qt基本上可以通吃。不得不說,在需要支援多平臺的時候,Qt是一個不錯的選擇。
web技術但是目前最上層的前端應用,還是html,css,JavaScript三劍客的天下。web前端應用就不說了!現在還有很多基於web技術的跨平臺框架,可以同時開發桌面端,移動端應用,這其中的佼佼者有react native,week等。
這類框架的優勢在於技術棧相對單一,掌握好前端技術,就可以做各端的應用開發了,不需要學習新的技術。比如flutter,也能開發多端應用,但是需要學習dart語言,需要熟悉flutter框架。所以學習flutter的價效比就沒有那麼高了。
可能有人擔心web技術的效能!其實這個也屬於多餘的。web技術非常活躍,發展迅速。效能這塊,隨著webgl技術的成熟,已經完全不輸本地應用了。
另外現在有一種新技術,Web Assembly,可以很好的彌補JS的短板。目前各大瀏覽器,也在積極的推進該技術,同時有很多基於該技術的應用在不斷產生。
而且前面提到JavaScript(nodeJS)在伺服器端應用也很廣泛,而且效能不俗,長期發展,不排除JS一統天下啊(開個玩笑)!
總結總的來說,程式語言這個領域,使用什麼語言或技術,沒有那麼絕對!
另外軟體行業,很多東西都是分層結構的,在不同層次有不同的程式語言或者相關技術。
針對不同層次的應用,選擇合適的技術,才能事半功倍。千萬不要出現殺雞用牛刀的情況,比如說用C語言開發網頁!
-
4 # RaymondIT
C語言主要用於與硬體靠近的一部分軟體,還包括對演算法、執行效率要求非常高,希望開發者自己直接控制而不是交給編譯器或者平臺、框架去處理的那部分。應用領域包括底層硬體驅動、啟動載入,微控制器、工控底層協議處理;與作業系統以及CPU、GPU控制相關的記憶體管理、CPU排程、中斷處理、系統核心態程式碼;資料計算量較大的2D/3D圖形演算法、人工智慧演算法、加解密演算法、調製解調、訊號處理、高速資料路由和交換;此外,資料庫的底層為了高效也往往使用C語言。一些對計算要求很高的演算法,還會把原本C語言的處理程式固化成硬體電路,做成專用晶片。例如GPU就是一種特殊CPU,注重於向量、矩陣等計算;原本利用GPU向量計算的人工智慧演算法固化成AI晶片,此外還有加解密安全晶片、無線通訊的基帶晶片等。
C與C++並不是一回事,雖然C++對下相容大部分的C語言標準。但是C++更加複雜,甚至可以說是所有語言裡最複雜的,使用門檻比較高,培養工程師成本比較高,系統也比較難維護,主要用於更加複雜的基礎系統架構。Linux核心程式碼中也使用了一部分的C++程式碼。作業系統、伺服器框架、資料庫、瀏覽器、數字影象處理、遊戲引擎、虛擬現實等依然會使用C++。它們追求高效率執行、提供穩定而複雜的基礎功能。看這些行業公司,也就知道門檻是比較高的。而在其上的應用軟體,為了快速開發,迅速推廣業務,應對多變的市場需求,往往使用Java、.Net、Python、NodeJS等開發。
-
5 # 光明右使8787
在兩個領域必須用C,嵌入式開發和Linux核心開發。大部分基於開源專案的二次開發,也是用的C或C++,像APACHE、PHP用的是C,MYSQL、REDIS用的C++。圖形介面通常用的是C或C++,GTK用的是C,QT和VC用的是C++。
回覆列表
凡是涉及到硬體控制的韌體,都需要用C語言,在底層一些就要用微控制器組合語言,在上層更高一些用C加加,純軟體的應用程式一般用其他的開發語言!網緣的網管軟體往往也會用到c和C加加語言!其實現在的很多的開發有語言的都在橫向的發展,所以也有些拓展,例如他們都應用到網路的程式開發當中,都有跨界的模糊的地帶,只是有擅長與不擅長之分!