梅冠华-2019-04-20
翻译自C++学习网站 learncpp(www.learncpp.com) 第0章 第4节
https://www.learncpp.com/cpp-tutorial/introduction-to-cpp-development/
0.4 C++开发简介
在我们编写并执行我们的第一个C++程序前,我们需要深入了解下C++程序是如何开发的。下图给出了该过程的简要示意:
- 第1步 定义待求解的问题
- 第2步 定义求解方法
- 第3步 写程序实现该方法
- 第4步 编译程序
- 第5步 链接obj文件
- 第6步 测试程序
- 第7步 调试/排错(debug)
第1步: 定义你想要去解决的问题
这就是所谓的“什么”(“what”)步骤,你要凝练出你决定要去解决一个什么样的问题,并且关于你将会用最简单的步骤或者是最复杂的步骤来做编程有一个初步的想法。但是从概念上来讲,其是最简单的。你所需要的只是一个定义较好的想法,以便你可以开展后续步骤。
这儿有些例子:
“我想写一个程序,其允许我输入许多数,然后计算它们的平均值。”
“我想写一个程序,其生成一个2维迷宫,并且让用户在里面自由游览,如果他们到达了终点那么他们就获胜了。”
“我想写一个程序,其读入股票价格的文件,并且预测出股票会涨还是跌。”
第2步:定义你要如何去解决该问题
这就是所谓的“如何”(“how”)步骤,你要决定你将如何求解你在第1步所碰到的那个问题,这也是在软件开发中大多被忽略的步骤。问题的症结在于有很多方法去求解问题——然而,这些解法中有些是好的,而有些是坏的。绝大多数情况是,程序员有了个灵感,坐下来,立即开始着手编写求解,结果整出来的求解器往往属于较坏的那类。
一般来讲,好的求解器有如下特性:
- 它们简单直接(不过于复杂和令人困惑)。
- 它们论证严密(尤其是围绕一些已有的假设或限制)。
- 它们模块化构建,以便部分可以重复使用或是后续更迭,而不会影响该程序的其它部分。
- 它们鲁棒性好(robust,皮实耐操),当某些未知情况发生后,其能自我修复,或是给出有用的报错信息。
当你坐下来并立马开始着手编写代码,你基本上是想着“我想这样子做xx”,所以你实现的求解器是让你能最快实现的那种。这样子产出的程序是脆弱的,很难后续更迭或扩展,或者有很多的漏洞(bug,技术缺陷)。欲速则不达,程序只是算法的实现,只有构造了完美的算法,才能切实写出好程序来!
顺便说说
Bug这个词最早是由Thomas Edison在1870年代使用的!然而,直到1940年代,当工程师们发现早期电脑的硬件真的被飞蛾蛀蚀,导致了短路事故,这个词方才流行开来。记载该事件的记录薄以及那只蛾子现在成了史密森美国历史博物馆的一部分了。
研究表明只有20%的编程时间是真正用来编写最初代码用的。而其他80%则花在了维护上,包含了纠错(移除bug),更新代码来适应变化的环境(如,在新版本的操作系统上运行),强化(细微改变以提高适用性或函数),或是内部改进(以提高可靠性和可维护性)。
结果是,在你开始编写代码前,确实非常值得花上些额外的时间来想想怎么样最好地解决该问题,你做了哪些假设,以及你对未来有哪些计划,以便在后续的征程中给你自个儿节省大量的时间和麻烦。
我们将在后续课程中深入探讨如何高效地针对问题设计解法。
第3步:编写程序
为了写程序,我们需要做两件事:首先我们需要通晓一门编程语言——这也是该教程的作用!其次,我们需要一个编辑器,写程序的话你想用什么编辑器都行,甚至有时候简单到像Windows的notepad或Unix的vi或pico(基本上这些编辑器跟写字板和记事本差不太多)。然而,我们强烈建议你使用那种专门给编写代码设计的编辑器。如果你手头没有的话别担心,我们将会很快讲到如何安装一个代码编辑器。
专门设计的编写代码用的编辑器具有一些特征,使得编程更为简便,这些特征包括:
-
行号,行号非常有用,当编译器给出我们一个错误,比如一个典型的编译错误会告诉我们:“some error code/message, line 64. ”,如果编辑器不显示行号,那么找到64行将会非常麻烦。
-
语法高亮和着色,语法高亮和着色改变了你程序中不同部分的颜色,以便让人更容易识别程序的不同部分。这里有个C++程序的例子,其既有行号又有语法高亮:
#include <iostream>
int main()
{
std::cout << "Colored text!";
return 0;
}
该教程中我们所展示的例子将既有行号又有语法高亮以便它们更容易理解。
- 清晰的字体,不适用于编程的字体经常在区分数值0和字母O,或是数值1、字母l(小写L)和字母I(大写i)上含混不清。而好的编程字体将对这些字符加以明确的区分,以确保程序员不会把它们用在错误的地方。
你的C++程序通常会命名成name.cpp,其中name将会是你所选择的程序的名字(如calculator、hi-lo等)。而.cpp扩展名则告诉编译器(和你)这是一个C++源代码文件,其包含着C++的指令。注意有些人使用扩展名.cc来代替.cpp,但我们建议你使用.cpp。
最佳方案
给你的代码文件命名为name.cpp,其中name是你选择的名字,而.cpp是扩展名,其表明该文件是C++源文件。
你可能会注意到很多复杂的C++程序有很多个.cpp文件。尽管你一开始创建的许多程序将只有一个.cpp文件,但是你将来也是能够编写那些包含数十个或者数百个.cpp文件的程序的。
一旦我们写好了我们的程序,接下来的步骤就是将其转化成我们能运行的东西了,然后我们再看看它是不是能正常工作!我们将在下节课讨论这些步骤(4-7)。
梅冠华-2019-04-20
翻译自C++学习网站 learncpp(www.learncpp.com) 第0章 第4节
https://www.learncpp.com/cpp-tutorial/introduction-to-cpp-development/