初学者一定要注意编程能力是写出来的,不管你去写啥,只要不断的写,你就会感觉到编程能力的提升。
编程本质上还是一项技能,熟能生巧在这里一定是适用的。
当你写到1w、10w行、几十万行的时候,一定会感受到量变到质变
回答一(腾讯科技 后台开发工程师)
2,652 人赞同了该回答
代码就是要多写,不管写什么,只要写多了,水平就会从量变到质变。庸人写一万小时可以变成匠人,天赋异禀的人要成为绝世高手也需要一万小时,没有捷径。
但是人是有惰性的,学习的时候需要选择有趣味性、有成就感的东西来练手,否则就坚持不下去。当然了,更重要的是,学了以后能够为找工作积累经验,据我总结,至少有4个方向:
方向一:学做小游戏
比如说贪吃蛇、连连看、打飞机、2048、坦克大战等等。可以学做控制台游戏、qt 做游戏、unreal 做游戏,后两个方向都有详细教程。
如果只是想练习 C++ 积累代码经验,做控制台或者 qt 游戏就可以了。
如果自己对游戏非常感兴趣,以后想从事游戏客户端开发,可以学习 unreal。
qt 做游戏的教程:用C++编写游戏容易吗?有什么开源的小游戏吗?能分享一下吗?
unreal 的教程一大堆,自己去买书就可以,我的文章以后也会分享用如何 UE4 做小游戏,有兴趣的可以关注。
方向二:学算法
看《算法竞赛入门经典》,刷 Leetcode,记得尽量用 STL,把 C++ 搞熟。
入了算法的坑,只有时间不够用的,不存在不知道做啥的情况,因为很多题目几天做不出来太正常了。
现在面试一般都有算法题,掌握常用算法基本上是及格线,算法学好是加分项。各大厂校招待遇最高的一般都是算法岗。
当然,如果想从事算法方向的工作,光看这一本书还不够,还需要吃透西瓜书。
方向三:学习 Linux 编程
看《unix环境高级编程》,熟悉其中的命令,然后自己动手造轮子,把很多命令重新实现一遍**。
比如说 ls、find、tree、sort,很多命令随便一个都是上千行,一年之内实现十个命令就能学很多东西了。
在实现命令的同时把 Linux 的文件系统、进程模型都搞熟了,收获巨大。
方向四:学习网络编程
看《Unix网络编程》,然后自己做些网络程序,比如说 http 服务器、聊天服务器、文件服务器、代理服务器等等。
如果还有时间,可以学习一些网络框架、rpc等等。
对网络编程熟了,无论以后从事客户端还是服务器端开发,都很轻松。
上面的四个方向,随便进入一两个,大学四年写几万行代码,找工作就已经碾压很多人了,记得把学习的代码放在 Github 上,这个可是面试官提前了解你的很好途径。
其他
看 STL 源码,慢慢看懂并将其添加注释,放在 Github 上。
将 STL 中没有的容器算法写成 STL 的风格实现,这样也有成就感,但是比较枯燥,不如像 Leetcode 上 ac 一道又一道的题目然后看着数字增涨那样激励人心。
开源项目
另外,开源项目看哪些呢?随便找几个库的源码就可以学很久了:
A list of open source C++ librariesen.cppreference.com/w/cpp/links/libs
回答二
1,189 人赞同了该回答
各位校招走 C++ 开发岗的小伙伴看过来!
本人是21届哈工大机械硕士
走的是 C++ 后台开发岗位,
今年秋招拿下10+offer
拿过字节 阿里 腾讯的约 50w的 sp
摒弃掉一个思维上的 “误区”
很多搞 C++ 的小伙伴 包括曾经我自己 特别是后端方向的
或多或少都有过一个这样的疑惑 「搞 C++ 到底可以写哪些项目呢?」
在项目这个问题上 对于像我一样的非科班生 首先应该摒弃掉一个思维上的「误区」
拿我们机械举例 我们的课题是机器人
机器人作为一个交叉学科 在课题项目上所用到的东西就像「一锅乱炖」 电路设计,运动控制,视觉算法,机械结构,QT界面,PID优化 调参,维修,拧螺丝,搭硬件平台等等
这种类型的项目是会涉及到一些 C++ 比如用来写 QT界面 调算法API 控制下位机等等
但是目前求职市场上的 C++ 岗位以「后端技术栈」为主 也就是企业那边希望你的项目里面涉及到的技术是「数据库 操作系统 计算机网络」等等那一套
而不是「调调算法API 写写QT界面 控制机器人那一套」
总而言之 如果你要找互联网的 C++ 相关开发岗位
对于我们机械来说 课题所涉及到的项目最大的问题是「广而不精 不对口」
也就是说 虽然你可能会觉得「我在课题上投入了挺多工作量的 而且做的东西好像也挺复杂挺高端的啊 而且也涉及到了写代码啊 python啊 C++啊 面试官肯定会被我做的东西所吸引的吧」
但实际上呢 你做的再高端 付出的工作量再多 和企业那边的「需求是不对口的」
而且就算涉及到了一些编程的东西 也是一些「简单的CRUD 调调算法API 完事」
就算你把这段经历写在简历上 面试管面试的时候也是大概率不会感兴趣的 别人需要的是 C++后端开发
如果你是做这种类型项目的话 可能投递机器人相关公司的开发岗位会好一点
如果你想找互联网相关的开发岗位 就得自己取挖掘渠道 寻找切合相关技术栈的项目去做了
那么到底对于 C++ 技术栈的小伙伴 到底可以尝试哪些项目呢?
C++ 作为一门贴近底层的语言 不像 Java 那样快速的搭建一个业务系统 整不出一些「好玩儿」的东西 只能写一些轮子类型的项目
于是在给小伙伴们分享一下 我在准备秋招的一年多时间里 所搜集到的那些具有可以拿来练手的 C++ 项目
1、写一个Json库
链接: https://github.com/miloyip/json-tutorial/blob/master/tutorial01/tutorial01.md
2、写一个红黑树
链接: https://github.com/william-zk/RB_Tree
3、写一个 STL
链接: https://github.com/Alinshans/MyTinySTL
4、写一个 NoSQL
链接: https://www.lanqiao.cn/courses/1341
5、写一个高并发内存池
链接: https://blog.csdn.net/qq_41562665/article/details/90546750
6、写一个线程库
链接: https://github.com/Winnerhust/uthread
7、写一个网络库
链接: https://github.com/chenshuaihao/NetServer
8、写一个服务器框架
链接: https://www.bilibili.com/video/av53602631?from=search&seid=9029288577396826503
9、写一个 WebServer
可以参考一些书 《Linux高性能服务器编程》 还有陈硕的那本书 等等 WebServer 应该很多人都有做。。。
链接: https://github.com/linyacool/WebServer
10、写一个操作系统内核
搜一下「MIT 6.828」感觉课程里的一个作业都可以拿来当做一个项目了
全是压箱底的干货 整理不容易
发布于 2021-01-22 22:36
回答三
1,800 人赞同了该回答
学习完 c++ primer?
请问学习完是什么状态,而《C++ Primer》是哪一版?课后习题全都自己做过了?
如果你学习完,指的是把书看完了一遍,那容易忘是必然的,又不是读唐诗宋词,谁能不忘?再说,把自己当活字典有何用?
如果是第四版,我建议你再去看第五版,了解 C++ 11 的语法,基于 C++ 11 标准进行练手,在当前环境下,意义要更大一些。
课后习题实际隐藏着很多小项目。譬如:
- 第七章引入了两个类:Screen 和 Window_mgr,这实际是一个写字板程序的雏形,有没有想过继续完善下?结合 GUI 框架做出一个小玩意来?
- 从第十二章到第十三章,逐步引入以下类:StrBlob -> StrVec -> String,这实际是在指导你,从底层实现 STL 基础模板?有没有想过将 String 类完善一下?譬如如何实现 c_str() 的功能?你的 String 效率与 STL 有何区别?能否超越?vector 呢?(这个很难超越)set 呢?(这个有可能)
- 当然还有诸如 Folder 和 Message 类,实际是一个邮件管理系统的雏形,这样的例子不胜枚举。
所以,如果你真的认真做了习题,或是深入思考过这些题目,我觉得应该是不愁练手的。
而你表现的如此急切,倒是有点缘木求鱼的感觉。
==============干货分割线==================
C++ 开源项目
好的 C++ 开源项目不胜枚举,如:
- facebook/folly · GitHub
- TTimo/doom3.gpl · GitHub
- https://github.com/EpicGames/UnrealEngine
- v8/v8 · GitHub
- qtproject/qtbase · GitHub
- ideawu/ssdb · GitHub
- zeromq/libzmq · GitHub
- miloyip/rapidjson · GitHub
都很值得去研究学习,但你是否能够一口去吃这些胖子,深表怀疑。大多数人,应该是头晕眼花,不明所以的。
小项目练手
自己想做点小项目练手,我也可以提供一些思路:
- 高精度计时器:参考 QueryPerformanceCounter function (Windows)
- STL 容器类:上面提到了。
- 自己实现智能指针:其实还是习题的范围。
- 实现类似 Qt 底层的信号槽
- 实现一个 mini GUI 库
- 实现一个类似 http://alleg.sourceforge.net/ 或 SDL 这样的游戏引擎,并做一个小游戏。
- 实现一个简易的序列化框架,想想如何将对象存取于磁盘上。
- 有人抱怨 c/c++有什么非常好用的字符处理库吗?你来实现一个 std::string 的工具库?
- 将上面这些东西,都封装成 dll/so/lib 的形式,供自己或更多人日后使用。
经历以上过程的洗礼,C++ 能忘就忘了吧,没关系~
以上内容摘自知乎问答