慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

C/C++ 内功心法(入门篇)- 第一章 绪论(1,2)

返回:C/C++ 内功心法(入门篇)- 目录

1. C/C++ 的历史及特点

有关计算机的历史、C 语言的历史、C++ 的历史,以及各自有什么特点,甚至哪年谁谁谁发明了什么等等,请自行网上搜索。

2. 编程思维

乔布斯说过:“每个人都应该学习编程,因为它会教给你如何思考。”

从厨神的故事开始

我相信每个人对“编程”这个词都有自己的认识。我从一个小故事说起吧。

有个厨神,开了一下小饭店,人们非常喜欢吃他做的菜。

但是厨神也有累的时候,也有生病的时候,也有带着孩子出去玩的时候,这时候虽然有其他厨师烧菜,但顾客的满意度会下降。并且大厨也没有三头六臂,饭店的规模始终无法扩大。

所幸厨神的孩子是学编程的,给支了这么一招:让厨神将菜谱全部写出来,调料全部量化,炒菜过程标准化,整理出一份“超级菜谱”。这样,其他厨师按照这个“超级菜谱”烧的菜,能达到厨神的九成水准,这已经能满足绝大多数顾客的口味了。

然后饭店继续招聘厨师,以这个“超级菜谱”培训新人,然后开分店等等,饭店越来越红火。

再到后来,厨神的孩子还研发了炒菜机器人……

什么是编程

炒菜的过程,就是一个程序;把这个程序具体的写下来,就是编程。用人类语言写的程序可以让大厨去执行,用计算机语言写的程序可以让机器去执行。本书我们具体讨论的是“计算机编程”,是指用程序控制一切可以控制的元素。例如:

  • 工业自动化控制:程序可以获得各种传感器数据,控制机器动作
  • 玩游戏:程序控制屏幕显示、游戏角色运动
  • 查看天气:程序获取气象仪器的数据,保存入历史数据库,传输给用户
  • QQ聊天:程序控制消息数据在网络中收发
  • 办公自动化:自动控制 excel 表格、收发邮件
  • 网页编程:控制 web 浏览器元素

编程接口

什么东西可以被程序控制呢?以及怎样控制呢?

取决于这个东西有怎样的接口。

比如电灯,预留了两根线接一个开关可以控制灯的亮灭;有些灯预留了两个开关,比如楼道的灯,楼上可以控制开关,楼下也可以控制开关。这就是”灯“的接口,是”灯“自带的特性。

比如游戏,一些人刷装备,游戏玩好几天。作为程序员我们可以想:有个程序来控制游戏角色移动多好,碰见敌人自动打,血少了自动喝药瓶,药瓶少了自动去购买,打死敌人自动捡钱捡装备,装备太差自动卖掉等等。但问题是:游戏厂家不提供这些接口,你就无法控制游戏角色。但是有人通过非法手段找到了一些控制方法,这就是外挂。

非正常控制的方法很多,比如电话的合法控制方式是插一个电话机,但是有人在中途破开电线可以用非正常的方式获取到该电话的控制权,这就是最简单的黑客了。

注意“非法”,为什么说外挂与黑客违法呢,因为他们用非法的方式去控制不属于自己的东西。

API

我们编写的应用程序,通过接口来控制目标。这个接口的全程是:Application Programming Interface,简称 API。

比如,Windows API,就是应用程序用来控制 Windows 的接口。同时,微软还为 Windows API 准备了非常详细的开发手册,给开发人员以参考。

再比如,EasyX 是控制屏幕显示的 API,比如画条线、画个圆等等。

有了画线、画圆的 API,画一个五子棋的棋盘就很容易了,然后画个圆就可以表示棋子,这都很简单。难点是:当前局面是否已经某一方获胜?在哪里落子可以提高赢的概率?不管是在某个位置画圆,还是控制机械手移动到某个位置落子,都先要计算该在哪里落子。所以,控制什么东西不是重点,重点是决定控制的逻辑算法。

算法

厨神可以写出来超级菜谱,是因为厨神精通炒菜。不要指望有个不会炒菜的人能写出来菜谱。

所以,程序只是替你执行你的算法,程序不可能执行一个你自己都不了解的算法。

程序出错了,需要调试。调试的目的,就是检查程序的执行过程,和自己心中所想是否一致。如果程序和自己所设计的算法有一点不一致但却没有察觉到,或者自己的算法本身就不太完美,那么这就很可能会产生一个 bug(为什么把未发现的缺陷叫 bug?自己网络检索下吧)。

分享到