比如 C#的虚函数成员,开始并不明白为什么要这么做,为什么不直接写另一个函数或者干脆不继承。后来看到一个例子重载一个自定义类的 ToString 方法时才明白这个操作是很有必要的。我觉得编程语言从本质上都是殊途同归的,最终都是机器指令和内存中的数据,将这些结合起来就是最终的程序。那么高级语言只是在人类逻辑和机器逻辑的一个均衡,你要贴近人的逻辑提高人的效率,也要优化机器逻辑提高机器的效率。所以一个编程语言的好坏就是在特定的环境下达到人与机器的效率的最优。而这些语言的设计,既需要设计者的奇思妙想,也需要不断的工程经验总结优化。这些汇聚成一个语言的特性,但是一个初学者面对这么多的概念是不可能一下子就明白的。就像没看过《哈利波特》系列的人直接去看最后一本,你可能知道各个人物的结局,但是为什么会这样?与一个看过全系列的人相比,全看过的人看完会觉得了然,而只看最后的人会更多的是疑问。现在许多编程书籍我看都是和看结局一样的。那么问题就是,能不能推荐一下有没有能解释这些编程语言特性的,历史中产生了什么问题,出于什么样的考虑,诞生了什么样的概念的书?