c/c++能做什麼?

(文中的c/c++我全用c++代替了,因為我更偏愛c++一些)我是一名正在學習c++的學生,我現在對於c++能做什麼有一點糾結。

我已經見過很多人說c++是全能的,什麼都能做的語言了,甚至有人列舉了哪個哪個軟體是c++發的,操作系統是c++開發的,編譯器是c++開發的.....可是我只想說我只能寫出那個黑窗子。我很想知道我到底需要學習些什麼才能讓我的c++變成這些人所說的全能語言呢?或者簡單點的話,我需要學些什麼才能寫一些軟體,遊戲,操作系統之類的東西呢?(我現在暫時還不想去學別的語言Java,Python之類的東西)當然也有人給我推薦了FMC和Qt之類的東西,難打c++沒有這些就什麼都幹不了了嗎?c++是不是已經落伍了呢?我看語言排行榜並像落伍的感覺啊。求大神解答。


等同於你問音樂工作者鋼琴能做什麼。。。。會作曲的可以用鋼琴作曲,會彈琴的可以用鋼琴演奏。但是,但是,但是如果你不從枯燥的練習曲開始學習,鋼琴永遠就是一個會發聲的物體而已。

你說你只能寫黑窗子,那就如同你只會彈do ri mi ,是的,你走了第一步,然後呢? 當然是走下去了,看入門書,做練習題,一步步入門,等有一定基礎了,C++能幹什麼自然就了解了。


只是個普通學生而已,不要把心力都花在擔心C++語言的前途上面,這個問題應該由C++標準委員會去擔心(其實他們應該也不擔心吧) 。你也沒必要一棵樹弔死,會說英語就不說漢語了?難道就不看日本動畫了?

C++作為一個主流語言肯定有它的不可替代性,但是實際的問題是你現在無法立即實現自己的小項目。所以解決方法無非是兩種:

1、用Unity或者Html5的遊戲引擎,快速開發一個遊戲,比如打飛機或者俄羅斯方塊,鍛煉遊戲開發的技術,還能對你未來C++的學習有指導作用。

2、用C++的遊戲引擎,比如Cocos2dx,直接做遊戲。缺點是在你目前架構能力不強的時候直接做會比較費勁,可能會多花點時間。

如果你不愛做遊戲,就做點帶UI的小程序也挺好,樓上說的QT就可以學學。總之別抱著C++的語法書死啃,那樣事倍功十分之一。


不不不,c艹是一個多範式的字典,字典什麼都有,幹什麼都可以但是字典幹什麼都不專業。

學c入門,剩下的都差不太多。(函數式除外)

想搞系統c,c艹更難,Rust已完成Unix核心

想搞網路Java,JS

想搞分散式Scala,Go

想搞函數式Haskell,CLisp

想搞學新語言Rust,Go,Elixir

簡單Python ruby Julia

統計 python Julia R

穩定Java

金融 go正在崛起,c艹暫時還壟斷大部分市場。

遊戲開發,圖像學 這個不學c艹有點說不過去

寫新的語言 c艹還是比較好用的(ocaml 更好用)

以上所有行業都有c艹的代碼,但是為什麼都不用c艹寫?因為c艹不容易多人協作,語法不好而已。


一個不成熟的建議,其實很多剛開始接觸C++的學生可能都得經歷過這樣一個特殊時期。

我自己悶頭去學一些看起來很Geek的技術時也常常會思考何以致用以及今後怎麼走的問題,這些問題也的的確確比較令人困擾。其實如果去做一些實際的小項目,造造輪子的話就會找到往下的路子了。你現在要做的大概就是通過實踐一些小項目發現自己需要補充哪一方面的知識,然後為自己規劃一個具體而正確的學習路徑(或者說是規劃好自己的技能樹)

舉個例子,可能不一定正確並且可能走的是彎路,權當拋磚引玉吧:

我想做一個識別人臉的門禁小項目,那麼我可能需要做這幾個方面的準備——

  • 人臉識別技術
  • 簡單的硬體(攝像頭硬體端+上位機)通信
  • 微型的資料庫讀寫功能

而相應的解決方法大致如下——

  • 基於OpenCV的人臉識別技術,用C++完成圖像識別的基礎功能,這裡需要學習並點亮OpenCV的技能點。還有從攝像頭獲取到信息後圖像和信息的邏輯處理等等,這裡就涉及到那些基本的高級的C++編程知識了。
  • 使用Arduino作為攝像頭的硬體設備,所以這裡需要學習Arduino的一些硬體原理以及基於C語言的Arduino開發環境編程。
  • 上位機也就是整個系統的總控,讀取、分析數據並交由可視化界面讓你自己來預覽各種數據信息。這裡就需要可視化界面了吧,那就交給Qt去寫(你要是想用mfc也不是不行)。其次還有從Arduino的串口讀取數據,同樣也需要學習一些關於串口通信等等的C++編程知識。
  • 拿到了數據有時候你得存到資料庫方便管理吧?所以得選一個方便入門學習的資料庫練練手,懂得一些基本的資料庫操作編程,以後做其他項目指不定還能用得上。比如Sql Server和MySql,可以嘗試去用C++進行連接、增、刪、改、查等操作,這也算是一個能做的東西。
  • 最後可以嘗試把以上那些功能整合在你的服務端里

其實說了那麼多,不論是C/C++/C#還是其他類型的編程語言,同樣一個東西可以用不同的方式去實現了。比如上面使用MySql進行簡單的數據管理,你可以用Java去寫基本的邏輯代碼,也可以用C++/C#去實現同樣的功能。我當初接觸編程的時候也和你一樣到處亂撞不知道該學什麼。但是當你去做一個具體的項目時,你就會發現——通過發現問題、去學習解決問題的方法,最後解決問題時,這條路才是清晰的。不僅僅是在編程上,有時候在其他方面也可以借鑒這個方法,當你不知道該怎麼走下一步時,不妨先去發現(尋找)問題,然後再尋找並學習解決問題的方法,最後自然而然地就能知道怎麼解決問題了。

希望同樣是初學者的你我能夠順利入門並早日實現自己所想,共勉~


就像是在問:鎚子能做什麼

看場景,C++可以寫伺服器,可以做遊戲,可以做圖像處理,blabla 任何你想高運算高並發的都OK,只要你想在底層遊走,你想親自操刀內存,都OK。

其實:

1、別管什麼語言排行榜這些虛里虛氣的東西,想學就去干。

2、別對身邊人推薦你什麼去較真,好好學好一門語言,不要聽別人說什麼C++沒落了就中途放棄了,先學好基礎感受一下,在擴展學習中思考一下知識點之間的關聯,組合起來能做什麼就一目了然了,延續下去會有很多分支,你會很有收穫。

3、我不敢說C++能改變你日後思維方式什麼的,但再去學其他語言會容易上手很多這是真的。

4、既然你知道有qt,mfc的,與其再這考慮那麼多,倒不如快去探索一下這些東西?趁現在還能是個學生。

5、C++的學習曲線確實有時會讓人覺得做不出個成果,想放棄,但選好了路就堅持下來吧,你不會後悔的。

6、當然我也不是叫你貼臉C++而不摸其他語言,語言只是工具,以後你還是得熟悉其他語言的,最起碼要會語法吧!

所以說,還是得看自己喜歡什麼。


很簡單的,主要是找到開發框架,形成體系。框架可以找現成的,也可以自己在一些開源庫的基礎上自己整合下,擼一個出來。

上手先做一個問題,web、遊戲還是嵌入式。嵌入式不多說,普通級別的可以直接上qt,特別輕量級的那種,你找下相關的開發框架,或者自己擼一個。遊戲直接cocos 2d、unity 3d。

web沒有特別成體系的成熟框架,微軟、facebook、google都發布了開源的C++11框架,但我是建議自己擼一個。比如web伺服器部分你可以選用cinatra(基於asio、協程)、nghttp2(基於asio、線程),或者其他的諸如seastar,這個我沒試過。json處理推薦jsoncons,非常好用。後面的開發已經很容易了。主要就是要自己補一套庫,諸如log、string、uuid、random、hex、time、加解密(md5、aes、rsa、hmac),其實都有開源庫,或者自己封裝擼一下。其他諸如單例、隊列、cache、分詞、向量.....,都有現成的庫可以用。

其他語言直接塞給你至少一套開發框架,C++沒直接給你,因為常用的偏傳統的傳指針(智能指針)、現代傳引用、動態元素(any、variant)、模板泛型、lambda+function函數式幾個風格體系,需要不同的框架風格,否則配合起來工作偏困難,容易出錯。而且由於這幾年更新比較快,實在有必要擼個自己的框架用。傳統老式的指針用得特別多的庫和框架,說實在的不推薦,或者盡量封裝一層再用,否則做工程太麻煩,影響效率。


首先,學習語言不是學語法,而是學做同一件事的不同方法,進而鍛煉你的編程思維。其次C++目前主要應用在複雜而又需要壓榨機器性能的場景,比如複雜的Web瀏覽器,複雜的編譯器,總之你寫C++的話心裡就要一直想著內存怎麼擺,按照你的描述,我覺得你目前不應該大力投入學這個語言。

你要做的反而就是你所拒絕的,多學語言,學它們擅長的場景下怎麼編程。另一個重點就是,學習操作系統,編譯器這些複雜軟體的設計和原理,也就是計算機的課程,而不是在這兒想我要寫一個怎麼寫。你想不出來的。


C++是全能的,可你不是全能的。不是語言的問題,是使用語言的人的能力問題,你當然可以不用Qt,直接調用原生的winAPI寫gui或者自己寫個框架,不過,你還是得學winAPI,而且你寫出來的軟體千瘡百孔,安全性低,bug兼容等一大堆問題,用原生winAPI可讀性還差,開發效率也低有多少意義呢。?不要想著變成全能C++什麼都能寫。你很難做到,換成Python你也很難做到。找好自己的定位,才知道下一步要幹什麼,要學習什麼。


(mfc打錯了,而且有好多錯別字

講道理C++自己什麼都做不了,因為標準里沒有

但是各種平台都給C++開了後門,比如Windows上的Windows API Index,可以使用C++調用這些API進行開發

但是Java標準里有GUI,那麼實現了java的平台就要提供GUI。這些東西也需要操作系統支持,然而Windows並沒有官方的java api,充當Windows與java橋樑的還是C++

MFC也是API的封裝而已,完全可以扔掉


取決於你想幹嘛 你若了解的,編程語言能做的都能做,只是效率高低問題


什麼都能做


你把cpp想成是諸子百家裡的百家即可。

然後你看看二十四史。你看看百姓對百家的選擇。其實都不那麼純粹。

都是兩摻。

那麼,你想在通往進京的路上,保證自己能到達目的地,

你需要天時地利人和。

天時是什麼?人工智慧,ar,vr,mr,機器人製造與控制技術。

互聯網是永恆的話題。

人和是什麼?未來十年,國內最大的編程的社區里,都選擇了什麼。

地利是什麼?是你們家鄉的思想,與哪種語言的編程思想相匹配。

還有就是你家鄉編程的人都選擇了什麼。

有了這些,你還選擇cpp嗎?

那麼cpp進京之路上,有多少前輩提攜你,錄用你,換句話就是說,有哪些地方cpp企業想要進京。

人才和位置 是匹配的。一個人一個坑。

趕緊點個贊,打這麼多字,浪費了我一瓶飲料。

好吧,如果不幸看到了這裡,點個關注,因為,我幾乎每次回答都不會完全重複過去。

每次回答,都是在創新。

或許,你會在我陸續的回答之中,感受到了,新的思路。

思路決定出路。

我是cpp的受害者,我有這個話語權。


推薦閱讀:

從零開始寫個編譯器吧 - tao 語言的文法定義(上)
好好用滑鼠
程序列印字元畫?
【修真院「純潔」系列之五】醉酒和加班
NVDIA GeForce Experience 3.0 強制賬戶登陸是出於怎樣的考慮?

TAG:軟體 | 編程 | 程序 | CC | 遊戲編程 |