c++不滿足於小黑框控制台,下一步還應該學什麼呢?


對於 CLI (命令行界面)以外的程序開發,如果限於 C++ 的話,

  • GUI:qt/wxWidgets/Win32/MFC 等
  • 計算機圖形:Direct3D/OpenGL/Vulkan、軟體光柵化/追蹤器
  • 遊戲開發:Cocos2d-x/Unreal Engine 4、自研引擎
  • Web:用 Emscripten 從 C++ 生成 HTML5
  • 硬體:可從 Arduino/Raspberry Pi 入門

一些和 C++ 相關的庫、框架:fffaraz/awesome-cpp

不限於 C++ 的話,選擇更多,不在此列舉了。


覺得各位答主的思路太窄了,不是說cui就一定對應gui,還可以是無ui啊。嘗試著和操作系統配合,做一些好玩的東西,如果在windows上就看看win32的api,linux就看看apue里的api,主要是那些內存管理,進程線程,文件io之類的,然後就可以做一個服務/守護進程啦,再學習一些進程間通信rpc,還有網路通信的東西,就可以搭一個伺服器,然後接受客戶端請求,慢慢模擬的擴大客戶端數量和數據量,然後不斷優化,重構自己的伺服器,提升性能,這樣才算學底層語言的正路嘛。不是說gui沒作用,但感覺把cpp只用來做界面,乃至一入界面深似海,就有點跑偏了。


題主說不滿足小黑窗,應該就是想要做界面。我也才大二,正要升大三。我曾經和題主一樣,感覺哇學長做的界面好棒!我學這個c++怎麼啥都沒有。那我來講講我的心理變化。

大一的時候,舍友csdn上下了個控制台做的貪吃蛇(bug還賊多),都能引來一宿舍圍觀。我大一c++學的還是算好的了,於是在某個周末吃完午飯後,突然決定,我要干一番「大事業」,我也要用控制台寫個有界面的貪吃蛇!於是廢寢忘食三天(現在想想都可怕,真的是三天沒怎麼吃飯瘋狂搞這玩意),第一次接觸到了windows.h這在老師教的以外的東西,已經覺得強大的不行。於是我就寫出來了??

用windows.h的庫換了個字體顏色,就感覺自己不得了不得了。

然後畢竟是我第一個作品,還做的比較精細,實現了一個對話框??

然後又想,人家ea育碧的遊戲都有片頭!加上加上??(這個片頭其實還是動態的,我的博客里複製來的截圖,沒gif)

嗯,感覺自己萌萌噠。私以為,比網上別人的控制台作品,不知道精細到哪裡去了,bug少到哪裡去了:P

於是一發不可收拾,又陸續完成了控制台俄羅斯方塊和掃雷,還加了點小特效??

你會發現這時候我已經有點返璞歸真了,玩了一次挺炫酷的「特技」,已經不想做開始界面、換字體顏色什麼的了 。

後來又知道了windows api(還不懂有mfc的存在),我竟然直接用API死扣出了一個能看能用的有界面的程序(沒截圖,因為不是什麼成品。)當時就了解了什麼是消息循環機制,感覺哇原來我按按鈕什麼時候的是這樣實現的,印象深刻(也就明白了為什麼「顯卡殺手」掃雷永遠只有一幀)。當老師上課閑扯說到沒人會無聊到用winapi直接編程,那玩意太難用了,一般都用封裝好的mfc的時候,我當時的感覺是這樣的:o.O

後來聽說mfc這玩意落伍了,就沒去碰它(結果還是有這門課要學...這算後話)

然後在老師教java之前就學掉了java,第一次發現,做界面這麼簡單的?add一下button就粗來了?當作練手,(當時也很迷魔獸、紅警的ai怎麼尋路的,也剛好在學數據結構)做了個各種尋路演算法的簡單的模擬程序??(又是廢寢忘食寫了三天)

模擬了bfs啊、貪心啊、自己寫的a*啊各種尋路演算法哈哈。自己感覺還是做的相當直觀好看的。

說一下關於java,學完之後才對老師天天口頭說的c++面向對象而c面向過程有所了解。(很慚愧,之前真的始終搞不懂什麼叫面向對象)然後開始愛上了java。為什麼呢?語法極為統一,強迫症福利,就像重甲兵,從頭到尾是一套裝備,很和諧好看,雖然有時太厚重了點(比如訪問容器下標要用lst.get(index),而c++可以重載lst[index])。回頭看看c++呢,像上半身穿著重甲下半生花短褲左手義大利炮右手繡花針的艦娘,什麼都能幹還很騷氣但這都什麼混亂的搭配嘛!

然後又接觸了c#,第一印象:咦?這和java有差嗎?於是上手很快。在學校的小比賽上練手寫了個八皇后演示??

雖然很簡單的界面,但是被人誇配色不錯還是很沾沾自喜哈哈哈哈哈哈嗝。

然後關鍵來了!!!!!!!!!!

這學期開了mfc課!沒錯就是那個用c++寫的已經過時的飽受詬病的太過抽象的mfc!賊雞兒難用!老師布置期末作業做一個類似win上「畫圖」的軟體作為期末成績!哇我做了三天,我從未見過如此難用的東西!做出來的東西又難看、實現還極其複雜,還總是不知道為什麼用著用著就卡的要死要死要死。

所以說之前的都是假象啊,人家從底層就都幫你搞定了,做個界面分分鐘。但是碰個mfc瞬間打回原形。

所以說,其實界面這個東西,學了之後你就會發現也就這樣啦,想要快速地做一個界面出來還是甚為容易的(你要搞美工啊特效啊、不想用自帶的控制項啊以及用mfc啊除外)玩多了就膩味了(除非你要搞美工做前端之類的)。

你看我最後還是返璞歸真用回了c++用回了小黑窗,大學裡多學學演算法、數據機構,比那些看上去花里胡哨的東西有用的多。沒事和同學開黑打場codeforces,c++、小黑窗,美滋滋。

(自從用上了linux,gui都看不上了,敲命令行的習慣都帶到了win上,搗鼓起了powershell。)

//------玩知乎都喜歡分割線?-------

#有人要我博客?

上面那些內容都有寫在博客里。

http://blog.csdn.net/xienaoban

糾結了一下還是貼出來了。本來是當作日記一樣寫的,同學都沒好意思告訴幾個。其實就是像筆記一樣寫寫。

但是想了想,如果你們去翻我博客並下載了我的那些個demo,我的csdn就有下載積分拿了!我就可以去下別人的資源了哈哈哈哈。於是厚顏無恥地貼了出來。

#關於Qt

評論里和其他答主很多推薦qt,這我確實沒用過。當時因為qt需要另外下一個專用ide qt creater,自己又不想裝除了vs eclipse以外的ide,還懶得自己配環境,就不管了(評論區里說有vs插件)。或許有了它c++能像別的語言一樣好用來寫界面。(其實雖然也有人附和我說mfc坑爹,但我也知道只是我太菜了,看到有個答主mfc寫的各種程序碉堡了)

#關於我說「做界面花里胡哨」

這是我言辭不對。之前回答的時候沒想這一塊。其實如果答主有意發展學習GUI什麼的,也是很好的方向。(做遊戲的話我就知道個directx和OpenGL,並不是很懂)

但是你想真正做個好看的界面,技術上問題不是最大的,最大的是審美。。。你得會ps,懂一些設計,最好學過畫畫。總之就是審美要好而且會設計出來。如果你是做美工的人口中的所謂「標準程序員審美」,那就沒轍了 。

其實我曾經也考慮過圖形界面方向。我小時候學過國畫、素描,雖然沒有怎麼考過級,但已經憑藉這個在班級里花了6+3+3=12年的黑板報,大概9年的宣傳委員,排版設計與繪圖都是我,要不是字太丑不能寫字,整個黑板都被我包了。而且我不喜歡重複,喜歡瞎搗鼓,保證每月每期黑板報都風格迥異。每期黑板報分數經常年級第一。

到了大學參加了校組織,我們辦的活動,海報也是我設計的,部長部員一致好評。

自己還很喜歡研究谷歌微軟蘋果三家的UI。

所以我要是向ui、gui這一塊發展,我對自己還是很看好的。

所以我選擇了演算法數據結構。

一方面聽說前端是最累的。

另一方面,感覺還是比不過人家美術科班出身的。

還有就是演算法真的很有用很好玩很神奇啊。

最後一點是,私以為具體的技術一直在變化,昨天c++排名第一今天java排名第一明天又不知道是誰,但是演算法不會變,比較好找穩定的工作(就是說不容易像華為34歲就被開除然後沒飯吃了)。以上是個人觀點,歡迎討論。


要是不滿足於小黑框控制台,那就用Visual Studio啊:-)


倒不如學學伺服器端編程,搗鼓個 http server 出來,C/C++ 的話這個最實用。寫 GUI 還不如用 js+electron,或者轉向 Android / iOS 開發。


用文件的輸入輸出嘗試讀取/修改文本文件。

然後從文本文件上面自己定義一些格式,讀進去用字元串等等操作解析之後,再輸出出來。

比如自己寫一個markdown分析器,輸出一個html文件。

了解一下Markdown的語法,然後讀進去之後各種操作下來,最後生成一個可以用瀏覽器打開的網頁,不覺得很酷么。

然後可以嘗試寫一些順序的遊戲腳本。比如galgame的腳本,然後也是一樣進行解析,通過腳本來調用c++裡面寫的各種函數。比如腳本裡面某一行是setBackground(「fuck.jpg」),然後解析到這一行便會調用你c++裡面某個位置寫好的setBackground函數,不管能不能實現功能,哪怕裡面只有一行代碼,也可以在這個基礎上完成很多很酷的事情。

再擴展擴展,讀一讀龍書虎書鯨書,慢慢的知道了一門編程語言的寫法,自己用記事本獨創一門屬於自己的編程語言,完成各種操作,也很炫酷~

最後說不定接觸到了統計學和自然語言,還可以做一個小小的輸入法,傳入拼音,輸出漢字,或者翻譯器,走向人工智慧的大門。

再環顧我自己的編程史,學過qt,做過十幾款遊戲,也玩過很多別的炫酷的東西。但總體的道路,竟然還是如上述所說,幾乎一樣。這大概就是一種說不清的哲學吧。

祝早日接觸到更廣闊的世界。


你可以自己寫gui,這是我在做的一個庫(滑稽)或者用垃圾QT(賊丑!)或者VB調用C程序(敲複雜)或者...或者轉行C#,你會發現世界多美好!

---附張在做的圖,C#實現系列---

更新:退坑CPP保平安(逃)

為何程序員深夜離奇失蹤,為何編譯器開發者慘遭毒手,這一切的背後是人性的泯滅還是道德的淪喪,敬請關注今晚八點CCTV1頻道『代碼慘案』讓我們跟隨鏡頭走進程序員的內心世界。


圖形學 DirectX unity這些絕對有意思


C# + UWP + XAML

C# + Unity3D

二選一


寫個編譯器吧,別藉助現有的工具,你會懷疑人生的。

不想寫編譯器,造點輪子吧,寫個TinySTL,和模板元談笑風生,你會懷疑人生的。

不想造輪子,那乾脆用C++寫GUI吧,MFC,Qt,GTK等等,你也會懷疑人生的。

棄坑吧…C++坑太多了。


試試寫個自己的小黑控制台


學手繪, 學平面設計, 學PS, AI, CDR, 學Maya.

否則, 你會發現你能做出各種你想要的功能, 但是就是丑. 妹子不喜歡丑軟體, 也不會喜歡你.

然後你就會懷疑人生, 然後你就會轉去ACM, 然後你會變成大佬, 再然後你就會去女裝, 然後你會被王♂的聖♂光所感化, 最後變成程序♂媛.

不要讓你的軟體和組態王一樣丑, 不要變成基♂佬

所以去學手繪


安個 QT 吧。跨平台跨編程語言。


學膜版元編程。

附書一本:https://drive.google.com/file/d/0B3GaYojkXvj4X1lFWUthTWx2RFU/view?usp=sharing

----

世界真美。

我們是同志了。


下面幾張圖,最後一張是上學時用MFC做的,過程非常枯燥和苦逼,前面幾張是我目前做的,用directx/lua/C++,比MFC效果好多了,當然想節省時間的話推薦Qt

2048,我想應該可以算高仿了。

direct2d 【遊戲框架系列】2048 - 知乎專欄

元胞自動機,速度比較慢,經過漫長的時間後列印出質數。

direct2d 【遊戲框架系列】Wireworld元胞自動機 - 知乎專欄

-------------------------------------------------------

下面是不推薦的內容:

【MFC】圖形編輯器(一) - 知乎專欄

-----------------------------------------------


QT


學習怎麼更改控制台顏色,只需幾秒就學會啦,這樣你就能用小白框,小粉框....了,顏色跨度從#000000到#FFFFFF隨你選!


初學者請儘快認識到:計算機語言和界面沒有任何必然關係。

請分清:

語言

API

ABI

IDE

而且不用執著於做GUI,那都是小把戲。

搞清楚計算機的原理,深入的把自己的知識貫通起來,這才是通往專家的路徑。

比如可以試著先回答這個問題:

printf的hello world是如何顯示出來的?為什麼messagebox的hello world就看上去不一樣了?這背後究竟發生了什麼?把這個問題拆解到用基本的計算機指令大概描述出個原理來,你就算徹底明白了。

萬變不離其宗,gl dx背後的原理,也不會比上邊這個問題更難。


1,有沒有考慮過開發CGI,這個好,抗DDOS攻擊跟玩似的。

2,GUI先玩成熟類庫開發軟體,然後做自己的輪子。

3,開發個DSL,玩轉編譯器解釋器。

4,來個CS專業永恆的浪漫,30天開發操作系統吧。

5,為開源項目做貢獻。


控制台編程是很純粹的東西,另一個比較純粹的就是圖形渲染。

gui就比較混沌了,也是極其不穩定的一種東西。


推薦閱讀:

C中未初始化的全局變數是弱符號,這句話對嗎?
C「帶壞了」多少程序語言的設計?
如何高效的學習C++?
有哪些能炫技的代碼寫法?
如何寫優美的c++代碼?

TAG:編程 | 計算機科學 | C | CC | 電子計算機 |