软件开发的确是一个系统性的工作,需要很多方面的知识和技能。根据我的研究,一个合格的程序员,单单是专业能力,就需要从技术栈、工具链、程序设计、架构设计、工程化、软件环境、软件开发模型、业务、产品这9个方面来学各式各样的东西。

当然并不是每个方面都要学很多很多,而是根据个人所处的阶段不同,有选择的学习。选择的原则是——满足本阶段的工作需要。

你刚开始,属于新手,典型的特点是在别人指导下完成非常具体的工作,那架构设计、业务和产品这三个方面基本可以略过,所以下面我只说技术栈、程序设计、工具链、工程化、软件环境和软件开发模型这六个方面都要学点什么,然后再给出项目实战怎么学。

一、技术栈

技术栈指软件开发特定技术方向的一系列技术的组合。

你学习C++,那以这个方向为例来说明。技术栈可以细分为语言、应用开发框架、数据库这三个方面。

语言方面,C++你已经在学了,可能还会牵涉到一些标记性的语言,比如XML,还可能会有混合语言的编程,需要学JS、Lua、Python等,根据项目需要来选就好。你初学,又没有明确的项目要求的话,先搞定C++本身就好。

关于C++本身,推荐两本书。

第1本是——《C++大学教程》(英文名C++ How to program)。这是很经典的教程,写的很通俗,我家里的是第2版,现在已经出到第9版了。

第2本是《C++编程思想》。这是经典中的经典,除了C++语言和标准库,还讲了编程实践的一些东西,比如调试、极限编程、测试先行、设计模式等等。

应用开发框架方面,就特别多了,比如STL、Qt、ffmpeg、libevent、Vorbis、OpenAL、OpenCL、C++React、Crypto++、OpenSSL、CppUnit、Cocos2d-x、CEGUI、wxWidgets、Ogre 3D、Skia、CxImage、OpenCV、Caffe、SDL、GStreamer、ACE、ZeroMQ、libcurl等等,干什么的都有,根据你要做什么样的项目来选择一两个就好。

数据库方面,也有很多,MySQL、Redis、SQLite、MongoDB等等,你要做的项目需要数据库,就挑一个,不需要,就不管它好了。

二、程序设计

广义的程序设计包含很多过程,比如分析、设计、编码、测试、排错等等。我这里说的是狭义的程序设计,仅仅指如何让程序变得更简洁有效更优雅的代码层面的设计。

这块需要了解数据结构、算法、编程惯用法、设计模式等等内容,初学的话,了解一些数据结构和常见的算法就好,其他的等干上两三年再来学也成。

推荐这本《数据结构、算法与应用:C++语言描述》:

三、工具链

工具链指的是在特定平台上的一套用于支持代码编写、编译、调试、运行、分析的工具组合。

就C++而言,你可以掌握一种IDE,比如Qt Creator、VS Code,这些IDE,一般都打包了编辑器、编译器、调试器和各种分析工具,一站式解决你的问题了,初学时基本不用别的了。

用VS Code的话,推荐这本《Visual Studio Code 权威指南》:

四、工程化

工程化工具,指的是编程、调试和分析等工具链之外的各种支持软件开发工作顺畅进行的工具。

你现在是新手,掌握两个方面的东西就好:

  • 掌握一种代码版本管理工具,git、svn、github、gitlab,都可以;

  • 掌握一种安装包制作工具(C++的程序有各种依赖,不做安装包的话,装到别的机器上很费劲),比如Inno Setup、NSIS或者VS自带的,都可以。

这块推荐一本Git的书——《Git版本控制管理(第2版)》:

五、软件环境

软件环境指的是完成开发所需要的支持环境和软件产品运行所需要的支撑环境。

假如你用C++编写的软件,在Windows下运行,就需要Windows操作系统、Windows上的各种运行时,这些也是你需要了解的,比如C++的运行时库、MFC的运行时库、OpenSSL的运行时库,起码要了解他们是什么,从哪里可以找到,应该放到系统中的什么地方。

如果你在Linux环境下开发,软件在Linux下运行,那你就要熟悉Linux的常见命令、脚本(Shell/Python)等。

除了操作系统和各种运行时,还有你软件所需要的协作软件,比如你用了数据库,那你还要了解数据库的安装、驱动的配置等等。

这块推荐三本书。

第一本是操作系统基础,看经典的《深入理解计算机系统》:

第二本是Linux的基础学习,看《鸟哥的Linux私房菜 》:

第三本是一本老书《程序员的自我修养:链接、装载与库》,能帮助你更好的理解C++程序是怎么运行起来的。绝版了,可以买到二手的。

六、软件开发模型

软件开发模型是指软件开发全部过程、活动和任务的结构框架。常见的有瀑布、迭代、精益、敏捷等。各种模型现在都有在用,推荐看经典教材《软件工程》,里面有各种开发模型的简要介绍。

七、项目实战

以上分门别类介绍了要学什么,但往往是,我们学了很多东西,不知道怎么做项目。对初学者,我建议是分三个阶段:

  1. 刷题

  2. 照抄项目

  3. 自己设计项目

第1个阶段——刷题,一方面你要做你用的C++教材上的课后练习和小项目,另一方面,也可以使用leetcode来刷题。

第2个阶段——照抄项目,可以找专门的项目类的图书、课程等,跟着学,跟着。这里做推荐一本书好了,《C++项目开发实战入门》,上面有一些项目,可以参考。

第三个阶段——自己设计项目,可以从自己看到的需求出发,比如图片浏览器、音乐播放器、录音机、文件管理器等等,都可以做做看。这个阶段你做出来的,就属于真正的程序了。

等你完成这三个阶段,能自己搞定一些小项目,基本上,C++就算是入门了。以后,再做个十年八年,差不多就能精通了。

更多推荐

一个合格的程序员除了编程语言还要学什么?