知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技

如何从只会 C++ 语法的水平到达完成项目编写软件的水平?

发表时间:2022-03-25来源:网络

核心是多动手玩项目,而不是只看书(虽然看书也很重要)。

我就简单点回答,找好不错的项目玩起来,做好以下七个步骤即可:

1、弄清楚这个项目的作用和主要用到的技术及框架

2、部署项目,并设置debug模式

3、先从前端每个主要功能都走一遍

4、每个action的方法打断点,action中因为有断点,故每个后台acting、service、DAO都走一遍

5、用visio或艺图把类结构图和代码流程图画出来(问下自己,有没有可以参考的visio文档?)

6、尝试修改一些代码逻辑,让项目继续跑起来,看看能发生什么奇妙的事情

7、抽离主干代码,重建工程,再重新填充逻辑代码,尝试是否能让项目跑起来且功能基本一致

这七个步骤不光能吃透C++项目,也可以用于其他语言开发的项目,也可以拿来学习各种开源项目。

要想快速达到项目编写软件的水平,多玩C++经典开源项目成长速度极快!

这里也推荐几个经典C++开源小项目,把他们玩会了,别说能开发软件,甚至直接晋升到高级C++工程师水准:

1.TinyWebServer

这是一个帮助初学者快速实现网络编程、搭建属于自己的轻量级Web服务器的小项目。

项目虽小但真的五脏俱全:

使用线程池、非阻塞Socket、epoll(ET/LT均实现)、事件处理(Reactor及模拟Proactor)的并发模型。使用状态机解析HTTP请求报文,支持解析GET和POST请求访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件实现同步/异步日志系统,记录服务器运行状态经Webbench压力测试可以实现上万的并发连接数据交换代码地址:https://github.com//TinyWebServer

2. OpenSSL

一个强大的安全套接字层密码库,加密HTTPS,加密SSH都贼好用,同时它还可以用于跨平台密码工具。

OpenSSL实现了以下功能:

数据保密性:信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。数据完整性:加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。安全验证:加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。代码地址:https://www.openssl.org/source

另外多看计算机经典书籍非常重要,对计算机专业学生和程序员来说,看计算机经典书籍永远是成长中性价比最高的事情。

我在过去12年学习过的书单:

以上这些书籍,我已经帮大家打包好了,点击下方链接直接获取:





3.log4cpp

一个支持多线程、重定向的强大日志库,精简的代码实现绝对能让你有所收获。

Log4cpp有以下优点:

提供应用程序运行上下文,方便跟踪调试可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等可以动态控制日志记录级别,在效率和功能中进行调整所有配置可以通过配置文件进行动态调整支持Java、C++、C、python等多种语言代码地址:http://log4cplus.sourceforge.net
作者:CSDN学院;链接:https://www.zhihu.com//39169728/answer/1262340820;来源:知乎

4.MyTinySTL

很多人表示学完C++不知道用来干什么,我觉得学完C++的第一个练手的好机会那就是自己试着实现一个小型的STL库。

MyTinySTL的作者它就用 C++11 重新复写了一个小型 STL(容器库+算法库)。代码结构清晰规范、包含中文文档与注释,并且自带一个简单的测试框架,非常适合新手学习与参考!

https://github.com/Alinshans/MyTinySTL

5.Tinyhttpd

Tinyhttpd 是J. David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。

建议源码阅读顺序为:main->startup->accept_request->execute_cgi, 通晓主要工作流程后再仔细把每个函数的源码看一看。这500行代码吃透了,C语言的功底就会大幅提升。

【注:图片来源于:http://www.cnblogs.com/nengm1988/p/7816618.html
https://github.com/EZLippi/Tinyhttpd

6.muduo

muduo是一个基于Boost库实现的现代C++高并发网络库,由陈硕大神编写。它一个高质量的事件驱动型的网络库,其核心代码不超过4500行,使用 non-blocking IO(IO multiplexing) + one loop per thread模型,适合开发 Linux 下的多线程服务端应用程序,通过阅读源码还可学习到 C++ 语言、Linux 网络编程等后端知识。

项目源码:https://github.com/chenshuo/muduo

7.musikcube

musikcube是一个使用C ++编写的跨平台,运行于终端上的音乐播放器。musikcube可以在Windows,macos和linux上轻松编译和运行。

它也可以在带有raspbian的树莓派上很好地运行,并且可以设置为流音频服务器。炫酷得一腿。

项目源码:https://github.com/clangen/musikcube

8.CppNet

CppNet一个封装在 TCP 协议上的 Proactor 模式 multi-thread 网络库。包含 OS 接口调用、回调处理、定时器、缓存管理等,这里有从操作系统到应用层的所有网络细节,便于初学者学习和实践。

简单:只导出了最少量的接口,其声明都类似系统 socket API。对客户端而言,只新增了一个 buffer 类型快速:采用性能最优的 epoll 和 IOCP 做事件驱动。每个连接都独享一个内存池,从内存池中申请的内存都由智能指针管理清晰:结构上分为事件驱动,会话管理,接口三层,通过回调向上通知。模块之间职责分工明确,最大的类不超过 500 行代码

https://github.com/caozhiyi/CppNet

9.oatpp

我们知道Java领域的Web框架非常繁荣,最知名的当属Spring全家桶,而C语言和C++阵营则几乎没有。那oatpp则是一个轻量、跨平台、高性能、完全零依赖,用纯 C++ 实现的 Web 框架,实在是难得,小伙伴们可以学习学习。

https://github.com/oatpp/oatpp

以上9个C++开源项目,非常值得深度阅读,不光是后台开发可以看,前端C++一样也可以学习。

接下来说说C++的三个阶段,推荐一些经典C++书籍。

一、C/C++入门阶段

这个阶段快则半年,慢则一年,是进入C++领域的必经之路。

刚入门的时候我们主要是学习培养编程思维和动手能力,深刻理解面向过程和面向对象的思想方法,这对以后的程序员之路非常重要!

所以学习语言更为重要:

面向对象编程思想:类的封装,构造和析构、静态成员、对象管理;类的构造(有参构造函数、无参构造、拷贝构造、默认构造函数)和析构;对象动态管理、友元函数、友元类、操作符重载。C++编译器对象管理模型分析:类对象的动态管理(new/delete);友元函数和友元类;运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载);类的继承、多继承及其二义性、虚继承;多态(概念、意义、原理剖析、多态案例);虚函数、纯虚函数、抽象类(面向抽象类编程思想案例);函数模板、类模板,模板的继承。C++类型转换:C++输入输出流(标准I/O 文件I/O 字符流I/O);C++异常处理(异常机制、异常类型、异常变量、异常层次结构、标准异常库)。IDE开发工具:Windows平台VC系列,Visual Studio2013, Visual Studio2015,Visual Studio2017,Visual Studio2019;Mac平台的XCode系列,还有CodeBlock,一些高级编辑器Notepad++, EditPlus,UE等一些开发工具的常用设置和一些常见快捷键的使用。

这个阶段推荐以下几本书:

《Essential C++》 这是一本内容不多但很实用的C++入门书籍,强调快速上手与理解C++编程。本书主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。你不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。

《C++ Primer》 本书对C++基本概念、技术、以及现代C++编程风格进行了全面而且权威的阐述,是C++初学者的最佳指南;本书可以帮助你编写实用的程序,而无需首先精通每个语言细节。对于中高级程序员,本书也是不可或缺的参考书。

二、C/C++开发进阶

在第二阶段学习的时候,就是比较重要的了,C++开发的进阶之路,更是一个让自己找份薪水比较体面的工作的筹码。

C++进阶之STL:STL = Standard Template Library,即标准模板库。这是提高开发效率的极品工具。通过学习此阶段,应掌握泛型编程技巧,理解容器类在C++语言中的应用模式,以及熟练掌握全部STL类的使用方法。C++进阶之设计模式:决定一个项目成败最重要的因素是项目总体的设计,通过本阶段的学习,可掌握面向对象编程中重要的一环,是编码前建模的技巧所在。单例模式;工厂模式;代理模式;迭代模式等,这些都是你要掌握的。C++进阶之数据结构基础:这是所有编程语言中最应该学习的部分,程序组成的基础之一。顺序存储、链式存储、循环链表;双向链表、栈(顺序和链式)、队列(顺序和链式);栈的应用、树基本概念及遍历、二叉树;排序算法、并归算法、选择、插入、快速、希尔。

这个阶段推荐以下几本书:

《Effective C++》和《More effective C++》 作者是Scott Meyers。你应该熟读它们,并清楚地理解每个项目。

本书围绕55条准则,每一条都介绍了一个可让你写出更好的C++程序代码的方法,并以特别设计过的例子详加讨论。

《Exceptional C++(C++编程剖析)》和《More exceptional C++》 这两本书中都包含了40个C++编程问题,这些问题会让你磨练自己的技能,最终成为优秀的C++程序员。

这些问题是Herb Sutter精心挑选,与ISO/ANSI C++官方标准相一致,帮助程序员在设计、架构和编码过程中保持良好的风格,从而使编写的C++软件更健壮、更高效。

《Inside the C++ object model(深度探索C++对象模型)》 本书专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承,帮助你理解程序的底层实现,以便写出更高效的代码。

《The design and evolution of C++(C++语言的设计与演化)》 本书作者也是C++语言的设计者Bjarne Stroustrup,作者在书中综合性地介绍了C++的发展历史,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景,既没有忽略关键性的详情,又没有过多地陷入技术细节。

三、C++开发高级

这个阶段几乎伴随了职场后续的整个生涯,只有更精没有最精,C++高手之路,任重道远!

C++进阶之QT开发:掌握QT类库构架,图形界面开发模型;掌握QT开发技巧,消息机制,图形处理;掌握QT网络编程,UDP,TCP使用方式;掌握QT文件处理方式,序列化;掌握QT在windows,linux,ios,android不同平台下的移植技术C++进阶之Windows/Linux网络服务器:掌握Unix/Linux平台开发方式;熟练使用系统调用;熟练Unix/Linux内存管理,进程,线程调度;掌握MFC界面开发,网络编程;熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;掌握同步/异步IO模型在网络编程中的使用方式。C++进阶之数据库开发:掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。

如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,这个时候月薪几万都是小意思了。

这就是所谓的程序员大牛了,当下炙手可热的全栈开发工程师,既通晓前端,又通后台。

快速定位问题,解决问题对他们来说已是小菜一碟,就是人们常说的神秘大牛,只在公司技术攻关的时候才会才看到他们的身影。

在C++领域成为高手意味着你已经飞跃愚昧之巅跨越绝望之谷,进入开悟之坡了。

这个阶段推荐以下书籍:

《The C++ standard library(C++标准程序库)》 这是标准模板库字典,你可以在本书中找到STL相关的一切知识。

本书焦点放在标准模板库、检查容器、迭代器、函数对象和STL算法上。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细节解说、陷阱、意想不到的危险,以及相关类别和函数等。

《Effective STL》 这是Scott Meyers的第三本C++专著,也是学习STL最权威的书籍。

作者对书中的50个指导方针都作了详尽的分析,并配以示例。通过这些规则,C++开发者可以最大限度地使用STL。

《Generic programming and the STL(泛型编程与STL)》 本书阐述了泛型程序设计的核心理念:concepts(概念)、modeling(模型)和refinement(改善),并为你展示这些观念如何导出STL的基础概念:iterators(迭代器)、containers(容器)和function objects(函数对象)。

按照本书所述,你可以把STL想象成一个由concepts组成的library,你将学习到STL正式结构并理解其强大的优势。

《Exceptional C++ style》 作者为Herb Sutter。本书同样提出了40个C++风格相关的问题,对一些至关重要的C++细节和相互关系提出了新的见解,为当今的关键C++编程技术(如泛型编程、STL、异常安全等)提供了新的策略,帮助开发者在开销与功能之间、优雅与可维护性之间、灵活性与过分灵活之间寻找完美的平衡点。

《C++ template》 这是一本关于C++模板的完整的参考手册和教程,它强调模板的使用实践,包含了现实世界中的例子。每个C++程序员都应该好好读一读这本书。

《Modern C++ design(现代C++设计)》 作者Andrei Alexandrescu为C++程序员打开了一个新的局面。本书提供了一些针对软件设计的前沿方法,如联合设计模式、泛型编程,使程序员可以编写有表现力的、灵活的、高度可重用的代码。

《Thinking in C++(C++编程思想)》 C++ 领域权威著作,介绍了C++实用的编程技术和最佳的实践方法。

C++的确难学,也的确恐怖,但如果我们能征服C++,基本上任何编程语言就再也难不倒我们了,要加油呀!

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜