计算机科学入门
为了写大型程序,程序员用各种工具和方法,所有这些形成了 软件工程
学科。
这个词由工程师 Margaret Hamilton 创造
她帮助 NASA 在阿波罗计划中避免了严重问题。
面向对象编程
把大项目 分解成小函数 可以让多人同时工作,不用关心整个项目,关心自己的函数就好了,如果你的任务是写排序算法,你只需要确保高效和正确就可以了。
然而把代码打包成函数 依然不够 ,如果只是这样,微软 Office 会有几十万个函数。
解决办法是:把函数打包成层级,把相关代码都放在一起,打包成对象(objects)。
例如,汽车软件中可能有几个和定速巡航有关的函数,比如 设定速度
, 逐渐加速减速
, 停止定速巡航
,因为这些函数都相关,可以包装成一个 定速巡航对象
。
定速巡航
只是引擎软件的一部分,可能还有 火花塞点火
, 燃油泵
和 散热器
,我们可以做一个 引擎对象
来包括所有 子
对象,除了子对象, 引擎对象
可能有自己的函数,比如 开关引擎
,它也会有自己的变量,比如汽车行驶了多少英里,总的来说,对象可以包其它对象,函数和变量。
当然,引擎对象
只是"汽车对象"的一部分,还有传动装置,车轮,门,窗等。
编程语言经常用类似这样的语法,把函数打包成对象的思想叫 面向对象编程 ,这种思想和之前类似,通过封装组件,隐藏复杂度,之前把晶体管打包成了逻辑门,现在软件也这样做。
API
把大型软件(如汽车软件)拆成一个个更小单元,适合 团队合作 。
一个团队负责定速巡航系统,团队里的一位程序员负责其中一些函数,定速巡航
要用到引擎的 其它 函数,来保持车速,定速巡航团队不负责这些代码,另一个团队负责。
因为是其他团队的代码,定速巡航团队需要 文档 帮助理解代码都做什么,以及定义好的 程序编程接口
-简称 API 。
API 帮助不同程序员合作不用知道具体细节,只要知道怎么使用就行了。
权限
API 控制哪些函数和数据让 外部访问 哪些 仅供内部 。
面向对象
的编程语言 可以指定函数是 public 或 private ,来设置权限。
如果函数标记成 private ,意味着 只有 同一个对象 内的其他函数能调用它。
面向对象编程
的核心是 隐藏复杂度 ,选择性的公布功能,因为做大型项目很有效,所以广受欢迎。
面向对象的编程语言
计算机上几乎所有软件,游戏机里几乎所有游戏,都是 面向对象
编程语言写的,比如 C++
, C#
, Objective-C
等,你可能听过 Python
和 Java
。
IDE
有一点很重要:代码在编译前就只是文字而已。
前面提过,你可以用记事本或任何文字处理器,有人确实这样做,但一般来说,现代软件开发者 会用专门的工具来写代码。
工具里集成了很多有用功能帮助写代码,整理,编译和测试代码,因为集成了所有东西,因此叫 集成开发环境
,简称 IDE 。
所有 IDE 都有写代码的界面,还带一些有用功能,比如 代码高亮
,来提高可读性,许多 IDE 提供实时检查,比如拼写,检查语法。
大型项目有很多源代码文件,IDE 帮助开发者整理和看代码。
很多 IDE 还可以直接编译和运行代码,IDE 可以定位到出错代码,还会提供信息 帮你解决问题,这叫 调试(debug)。调试很重要,大多数程序员会花 70%~80% 时间调试,而不是在写代码。
编辑器和 IDE
编辑器和 IDE 不是一回事,你可以把编辑器当作高级的记事本,它只有一些基本功能,你可以通过加 插件 来让它拥有更多的功能,相对的编辑器也更加 轻量 。
常见的编辑器:vscode、vim、sublime……
常见的 IDE :IDEA、Pycharm、Clion……
README
除了写代码和调试,程序员工作的另一个重要部分是 给代码写文档
。
文档一般放在一个叫 README 的文件里,告诉其他程序员,看代码前先看这个文件。
在代码托管平台中, README 文件会被展示在首页,让其他程序员 初步 了解你的代码。
注释
注释是标记过的一段文字,编译代码时注释会被 忽略 ,注释存在的唯一作用就是 帮助开发者理解代码 。
你可能第二天就忘记昨天写的代码是干什么的了。
对其他人也很重要,最糟糕的就是拿到一堆代码,没有任何注释和文档,结果得逐行读代码,理解到底干嘛的。
写代码最烦的有两种人:让我写注释的人和不写注释的人。
版本控制
除了 IDE,还有一个重要软件帮助团队协作,叫做源代码管理,也叫 版本控制
(version control)。
软件公司会把代码放到一个中心服务器上,叫 代码仓库
,当一段代码写好后可以将它上传到代码仓库中,别人也可以从代码仓库把代码拉取下来,不需要用 U 盘。
常用的版本控制软件是 git ,你可能听过 github 或者 gitee ,这都是基于 git 的代码托管平台。
代码的主版本 (master),应该总是编译正常,尽可能少 bug,但有时 bug 还是会出现,幸运的是,源代码管理可以跟踪所有变化,如果发现 bug ,全部或部分代码,可以 回滚
到之前的稳定版。
测试
写代码和测试代码密不可分,测试一般由个人或小团队完成,测试可以统称 质量保证测试
,简称 QA 。
严格测试软件的方方面面,模拟各种可能情况,看软件会不会出错,基本上就是 找 bug 。
解决大大小小的错误需要很多工作,但对确保软件质量至关重要,让软件在各种情况下按预期运行。
beta
你可能听过 beta 版 软件,意思是软件接近完成,但不是 100% 完全测试过,公司有时会向公众发布 beta 版,以帮助发现问题,用户就像免费的 QA 团队。
WARNING
作为用户,很多人喜欢尝试最新版本甚至是测试版本,但作为开发者,请不要使用最新版本,因为这意味着很多 bug 。
alpha
你听过比较少的是 beta 版之前的版本:alpha 版本。
alpha 版一般很粗糙,错误很多,经常只在公司内部测试