黄国强 2023/5/19
近半年比较空,思考多了一点。
之前工作比较忙,而且工作中遇到的问题都能用自己掌握的方法应付。这样思想就懈怠了。
个人打算写一个系列文章,试图用第一性原理来把我自己掌握的知识梳理一遍,看看是否能更深入的认识软件的本质。
第一性原理意思是:“每个系统中存在一个最基本的命题,它不能被违背或删除。”
这个原理因为马斯克而广为所知,马斯克对于事物的认知远高于常人,这和他经常用“第一性原理”分析事物分不开的。
下面这段 C++ 代码程序员都很熟悉,应该是学习编程的人看的第一段演示程序。
#include <iostream>int main()
{std::cout << "Hello World!\n";
}
这段程序运行会在电脑屏幕上输出一行"Hello,World!"。
这里 std::cout 是 c++的标准输出, "Hello,World!" 是内部字符串数据。
从这行代码我们获得两个基本概念,即输出和数据。我们先从输出开始分析,输出有很多形式,比如,显示器,打印机,磁盘,扬声器,网络等等。
而数据也有很多形式,比如,上面的是字符串,还有整形数,浮点数,图像等等。
我们的代码应该针对这些不同的形式写响应的代码,是不是应该写成下面这段伪代码形式呢?
#include <iostream>void func(int i, // 输出类型int j, // 数据类型void * pData) // 数据
{switch (i){case 0: // 屏幕{switch (j){case 0: // 字符串std::cout << (const char *)pData << std::endl;break;case 1: // 图像// 显示图像代码break;}break;}case 1: // 磁盘{switch (j){case 0: // 字符串// 保存字符串代码;break;case 1: // 图像// 保存图像代码break;}break;}}
}int main()
{func(0, 1, "Hello World!\n");return 0;
}
这段代码问题很大,这种 switch 里面套 swtich 的代码最大的问题是无法维护。每增加一个类型都要修改现有代码,属于典型的屎山代码。那么如何解决这个问题,下一篇文章将继续,今天不写了。
【参考文献】
1 https://baijiahao.baidu.com/s?id=1752365602831430393