自学编程,从此开始

上第2学堂,听有趣的编程课

课文: 《准备篇概述》 (点击查看完整内容:视频+评测+讨论+……)

作者:第2学堂

学习C++编程,需要准备一些最基本的工具,以及几乎是无穷无尽的,各类强大的第三方开发库。本节还讲解了编译器、链接器、调试器、制作器以及IDE的基本作用和彼此的关系

课文题图

 

准备篇概述

从我们第一天写第一段代码“Hello world”开始,我们就在用别人帮我们写好的东西,比如有关:cout 和 endl 那行代码:

cout << "你好,C++的世界" << endl;

如果没有cout,我们根本就没办法在屏幕上输出任何的问候。

当我们写程序,我们是第一方,C++以及它自带的标准库,是第二方,然后,全世界大量程序员们开放出来的C/C++各种各样的,以及要钱的不要钱的功能库,称为第三方。

我们的教学,主要使用不要钱的,并且开源的C/++库。这类库又分成两大类,一是直接给我们源代码,我们使用时再编译它们。二是给我们已经编译好的库,我们需要将它们部署在自己的开发机上。

准备篇中将来会有大量内容,就是在讲各类C/C++第三方库的获取和安装,其课程内容形式几乎是手把手的视频或图片加文字的说明。比如说,据说天底下的应用软件,80%以上需要连接数据库;我们写的C++程序如何连上数据库呢? 以MySQL为例,它所在公司提供了一个功能库, 这个库就是以C或C++语言写的,这对身为C++程序员的我们,实在是很方便了,在学习这个库之前,你要做的一件“杂活”,就是下载安装这个库。

在整个白话C++编程学习过程,我们将(至少)要涉及到:

一、图形用户界面(GUI)编程。

  1. 比如,我们会教你如何为Windows写一个屏幕保护程序。一个程序员,有一台运行Windows的电脑,为它写一个自己的屏保程序,这难道不是一件再自然不过的事情吗?
  2. 比如,我们会教你与一个“异形窗口“(可以在Windows下、Linux下、苹果电脑Mac下)程序。别担心,那个“异形”不是什么丑陋吓人的东西,是指一个“窗口”程序长得并不是四四方方的,而是一朵玫瑰花的样子。这朵玫瑰会在你和女友的相识纪念日那天,开放在女友的桌面上,还可以附上一段文字。一个程序员,用自己写的程序表达爱意,这又难道不是一件再自然不过的事情吗?你没有女友?那也可以写给自己的父母亲啊!
  3. 写一个小画笔的程序,可用来装逼画出类似那种作战图……
  4. 写一个小小记事本……
  5. ……

二、数据库编程

​ 比如,我们会将2008年北京奥运会的一些数据,放在MySQL数据表中,前端用C++程序加以查询。

三、网络程序

  1. 一个完整的,可以在公司或家庭局域网内运行的多人聊天程序,有客户端有服务端。服务端当然少了一个C++程序在这后台服务端并发处理能力上的天然的强悍……

  2. 一个从网络上“爬图”(重点是美女图)的程序,别以为这事只有Python语言能干。

  3. 一个FTP下载程序。

  4. 一个和腾讯的微信公众号服务器打交道的程序——虽然,该厂没有提供C++语言的开发包,但这怎么可能难得倒一个C++程序员。(真正能难倒并让人泣血而亡的,是该厂写的相关开发文档之凌乱……)

  5. 甚至,我们会教你如何用C++写WEB网站后台,在很多人看来,这是险途,险途之上的风光,真正的一览众山小。

  6. ……

四、游戏编程

关于游戏编程,我们准备谈到一个沉重的话题:人性。

作为一门语言的入门教程,我们当然不是在教你如何写一个吃鸡的大型游戏……但我这编程的一生都认为:会不会给自己、家人、朋友写游戏,是这个世界上两大类程序员。会,那就是有人性的程序员;不会,那你拿代码赚再多钱,也不过是一个失去人性的,职业化的程序员而已。大家可以拿写诗、写文章、写歌或唱歌、拍电影的行业来类比:在当今社会,一个人,写诗、写文章、写歌或唱歌、拍电影……都可以赚钱营利……但可怕的是,这个人终其一生,写的诗、文章、歌、电影……竟然全部是为了商业化,从来就没有一首诗、一篇文章,一段歌,是想单独给自己或给某个人的……

你是一程序员,你可以辩解说,我自己以及家人朋友中,就那么凑巧,他们对我没有任何程序上的需要。接受这样的辩解,但是,别忘记了,游戏、娱乐,几乎是所有人类天然的需求;你居然没想过写段代码不是为了赚钱,只是想图自己或家人朋友一个乐子……这就是没人性嘛!

第2学堂断断不想教出这类没有人性的程序员。我的审美观是有温度的程序员。

离题万里。书归正传:使用C++写程序写数据库、GUI、网络、游戏等等等等,都需要用到第三方库。因此这些库如何获取、安装、基本使用方法等,都会在《准备篇》的课程中出现。

你当然不必在学完整个《准备篇》再继续后续的C++课程。正确作法应该是按需而学。比如,需要学习数据库编程了,再回到《准备篇》找MySQL服务端和客户端的安装教程。不过,在此之前,你必须先至少学习《准备篇》的四节课。

  1. 第一节就是现在这节课(除了人性那一段离题的讨论之外,其余的倒不算重要);
  2. 第二节讲如何安装GCC编译器套件(编译器、链接器、调试器)的课程;
  3. 第三节讲如何安装Qt Creator这个IDE(集成开发环境);
  4. 第四节讲如何安装制作器。

有关编译器、链接器、调试器、制作器以及IDE的作用及彼此关系,在视频中已经有完整讲解了。此处做一归纳:

  1. 编译器: 将你使用高级语言写的源代码文件,“翻译”成机器语言的文件。
  2. 链接器:源代码可能有多个,或者程序可能会用到第二方或第三方的已经编译好的库的功能,此时需要使用链接器将多个已编译的中间文件,“链接”成一个完整的程序文件。
  3. 制作器:同一套(多个)源文件,可能需要编译出不同的最终程序,也可能在不同编译环境下(典型的如不同的操作系统下)进行编译,此时需要有结合实际需求和外部环境的各类条件,更加具体的“制作步骤”的说明,称为“制作文件”。制作器用以生成这类制作文件。
  4. 调试器:代码编译通过,只是说明代码语法上没有错误(没有编译错误),另外,程序中需要的各个功能实现、外部库也都没缺失或重复(没有链接错误);但不代表程序没有逻辑错误。程序的逻辑错误多数和只会在程序运行中发作,为了定位排查程序的逻辑错误,需要调试器让程序在运行时,可以随时暂时,并可以在暂时时观察程序内部的数据状态,这就是调试器的作用。
  5. 集成开发环境:一个强大的代码编辑器,并且至少将以上功能集成在一起的软件,就叫IDE。通常一个现代的IDE现在还会集成源代码版本管理,甚至一个专注于C++开发的IDE,还会集成图形界面功能等。