最近浏览到一个很有趣的问题,有国外网友问出这样的一个问题:为什么感觉学完C/C++后做不出有用的东西?然后评论里就热闹了,留言区火力全开。
这是其中一个老哥的留言:
「你正在使用的操作系统就是用C语言写的;
能让你在网站上问出一个如此愚蠢问题的计算机网络也是用C/C++写的;
你智能手机上运行的操作系统,C/C++写的;
驱动你路由器的软件,C/C++写的;
Java JVM,C++写的;
几乎驱动整个数字世界的Linux内核,毫无疑问,C语言写的」
你可以看下linux内核的语言组成,绝大部分都是C语言写的,还有一少部分汇编。
可以看到,操作系统、TCP/IP协议栈、编译器、解释器、驱动程序等这些都是基础设施,它们是整个数字世界的基石。
最重要的是几乎没有重新发明的必要性,除去教学等场景外,我们几乎没有可能要自己去实现一个内核、自己写一遍TCP/IP协议栈、自己写一个编译器等等。
当然,这些基础设施的实现也是有相当的难度的,不管是理论上还是工程上,就以操作系统来说,现在在理论上依然有宏内核与微内核的争论,工程实践上Linux内核进化也几乎永不停息,依然在开发中。因此刚学习完C/C++后你在没有任何操作系统、计算机网络以及编译原理等背景知识下几乎没有可能直接去参与构造这些基础设施,也就感觉学完没什么用。
在这种情况下我们只能把目光从基础设施转移到应用程序上,这里更加贴近我们的日常生活,比如写一个小程序、开发一个网站等,而在这些场景下其它语言的确更有优势,原因很简单,这些语言就是为这些场景而生的。
使用一个web框架可以轻易搭建出前端页面,使用java或者python可以快速搭建出后端,这些都可以解决我们的实际问题,但要知道没有前面提到的基础设施这些应用场景就无从谈起。
很多同学应该都玩过乐高,买过来后都是一个个很小的塑料块。
现在你想用它们搭建一个汽车模型,如果直接从头搭建就太麻烦了,可能需要组装上万个小小的塑料块。
而厂家针对这部分怕麻烦的消费者提前将汽车中的轮子、车门、底盘等大的模块用这些小塑料块搭建出来了,你只需要将它们拼接在一起即可快速组装成汽车模型。
这可比从一个个小塑料块从头搭建快多啦,但我想没有任何一个人在用大模块快速搭建出汽车模型的同时会觉得一个个的小塑料块不重要没什么用,很简单,因为这些大模块就是用一个个小塑料块拼接起来的。
在这里C/C++就好比小塑料块,高级语言就好比更大的模块。
好啦,今天这篇就到这里。