c++不满足于小黑框控制台,下一步还应该学什么呢?
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++ 的话,选择更多,不在此列举了。 题主说不满足小黑窗,应该就是想要做界面。我也才大二,正要升大三。我曾经和题主一样,感觉哇学长做的界面好棒!我学这个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)。回头看看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岁就被开除然后没饭吃了)。以上是个人观点,欢迎讨论。 用文件的输入输出尝试读取/修改文本文件。
然后从文本文件上面自己定义一些格式,读进去用字符串等等操作解析之后,再输出出来。
比如自己写一个markdown分析器,输出一个html文件。
了解一下Markdown的语法,然后读进去之后各种操作下来,最后生成一个可以用浏览器打开的网页,不觉得很酷么。
然后可以尝试写一些顺序的游戏脚本。比如galgame的脚本,然后也是一样进行解析,通过脚本来调用c++里面写的各种函数。比如脚本里面某一行是setBackground(“fuck.jpg”),然后解析到这一行便会调用你c++里面某个位置写好的setBackground函数,不管能不能实现功能,哪怕里面只有一行代码,也可以在这个基础上完成很多很酷的事情。
再扩展扩展,读一读龙书虎书鲸书,慢慢的知道了一门编程语言的写法,自己用记事本独创一门属于自己的编程语言,完成各种操作,也很炫酷~
最后说不定接触到了统计学和自然语言,还可以做一个小小的输入法,传入拼音,输出汉字,或者翻译器,走向人工智能的大门。
再环顾我自己的编程史,学过qt,做过十几款游戏,也玩过很多别的炫酷的东西。但总体的道路,竟然还是如上述所说,几乎一样。这大概就是一种说不清的哲学吧。
祝早日接触到更广阔的世界。 觉得各位答主的思路太窄了,不是说cui就一定对应gui,还可以是无ui啊。尝试着和操作系统配合,做一些好玩的东西,如果在windows上就看看win32的api,linux就看看apue里的api,主要是那些内存管理,进程线程,文件io之类的,然后就可以做一个服务/守护进程啦,再学习一些进程间通信rpc,还有网络通信的东西,就可以搭一个服务器,然后接受客户端请求,慢慢模拟的扩大客户端数量和数据量,然后不断优化,重构自己的服务器,提升性能,这样才算学底层语言的正路嘛。不是说gui没作用,但感觉把cpp只用来做界面,乃至一入界面深似海,就有点跑偏了。 当你学了一门编程语言,反复 在“小黑框的控制台”下跑你的练习程序一段时间后,开始写一些有具体现实业务 需求的小项目 时,这时编程的困难开始从“语言”转向“业务 ”, 最终是“使用语言来解决业务 问题”的双重难度 。初学者“语言”本身就磕磕碰碰,何况又是C++这一样一门大到几乎快没边际的语言? 万一业务又很是不太清楚明白,就是难上加难。许多人败下阵来。
我建议是发挥“C++”这门语言“按需索取”的优点 。先做一些高度成熟业务领域。WEB领域就是这样一个领域 ,一边快速发展,但一边基本架构基本不变。用现代的C++写WEB,可迈出难度跨度较小的一步。
用C++ 写WEB 很小众,因为实际企业中C++人才相比JAVA等难找,找到以后也基本被安排去写相对底层或者对性能有极致要求的产品。但如果 是学习,或者练手,则相当合适(甚至熟练习你可以接点小活。)。不致于因为跨得太大太快扯到什么物体,比如不会有刚翻过了C++的语法大山,突然又要在面对一个巨大的新的知识体系 那种感觉 。
以桌面 GUI对比为例, 桌面 GUI (我这代人就是这里过来的)基本都 是另一座自成体系的知识大山,不管是 当年的OWL、MFC,还是wxWidgets、Qt或什么。 如果 你问的不是“下一步”,而是“后面一两年”应该 学什么,那是可以考虑学习GUI。
简单点说:
WEB后端还是在“小黑框”下跑程序,跨度小的重要原因之一。WEB后端却能输出漂亮的前端网站,这是很有意义的改变。WEB系统现在有“世俗”的应用意义 。桌面WEB、移动、公众号,小程序的后台都可以玩。
WEB 开发当然也有它“大”的地方,比如,你得学前端,html、css、javascript,甚至 学一些前端框架 vue 什么的。但这些不是C++的事——所以这是好事——因为对学习或实际工作来说,如果你所学的一切知识点,都 完全绑在一门语言,并非好事。
C++ 框架倒是不少。国内国外的都有。我另外有个回答提到了几个:
征集:如果见到C++之父Bjarne Stroustrup,你最想问什么问题?我用 da4qi4 框架写过一些网站 ,比如 :
第2学堂-首页-自学编程,从此开始框架在gitee上的开源项目 :
https://gitee.com/zhuangyan-stone/da4qi4_public这里是一些免费的视频演示或课程 :第一节:Hello Web
第2学堂-技术-课文 倒不如学学服务器端编程,捣鼓个 http server 出来,C/C++ 的话这个最实用。写 GUI 还不如用 js+electron,或者转向 Android / iOS 开发。 要是不满足于小黑框控制台,那就用Visual Studio啊:-) 初学者请尽快认识到:计算机语言和界面没有任何必然关系。
请分清:
语言
API
ABI
库
IDE
而且不用执着于做GUI,那都是小把戏。
搞清楚计算机的原理,深入的把自己的知识贯通起来,这才是通往专家的路径。
比如可以试着先回答这个问题:
printf的hello world是如何显示出来的?为什么messagebox的hello world就看上去不一样了?这背后究竟发生了什么?把这个问题拆解到用基本的计算机指令大概描述出个原理来,你就算彻底明白了。
万变不离其宗,gl dx背后的原理,也不会比上边这个问题更难。 学习怎么更改控制台颜色,只需几秒就学会啦,这样你就能用小白框,小粉框....了,颜色跨度从#000000到#FFFFFF随你选!