学编程发现许多概念或特性不知道为什么这么设计

2017-07-18 09:47:20 +08:00
 jadeity
比如 C#的虚函数成员,开始并不明白为什么要这么做,为什么不直接写另一个函数或者干脆不继承。后来看到一个例子重载一个自定义类的 ToString 方法时才明白这个操作是很有必要的。我觉得编程语言从本质上都是殊途同归的,最终都是机器指令和内存中的数据,将这些结合起来就是最终的程序。那么高级语言只是在人类逻辑和机器逻辑的一个均衡,你要贴近人的逻辑提高人的效率,也要优化机器逻辑提高机器的效率。所以一个编程语言的好坏就是在特定的环境下达到人与机器的效率的最优。而这些语言的设计,既需要设计者的奇思妙想,也需要不断的工程经验总结优化。这些汇聚成一个语言的特性,但是一个初学者面对这么多的概念是不可能一下子就明白的。就像没看过《哈利波特》系列的人直接去看最后一本,你可能知道各个人物的结局,但是为什么会这样?与一个看过全系列的人相比,全看过的人看完会觉得了然,而只看最后的人会更多的是疑问。现在许多编程书籍我看都是和看结局一样的。那么问题就是,能不能推荐一下有没有能解释这些编程语言特性的,历史中产生了什么问题,出于什么样的考虑,诞生了什么样的概念的书?
2219 次点击
所在节点    问与答
13 条回复
snnn
2017-07-18 09:53:04 +08:00
找本古老的面向对象的书看看。OOP。继承封装多态。
mx1700
2017-07-18 10:14:22 +08:00
《代码之髓》可能对你有帮助
jadeity
2017-07-18 10:20:24 +08:00
@mx1700 看了下目录,感觉是我要的方向,就是内容看起来比较少。
levn
2017-07-18 10:28:46 +08:00
daisykoo
2017-07-18 13:14:13 +08:00
SICP 可能对你有帮助
再深入一点的话可以参考这篇文章 http://www.yinwang.org/blog-cn/2012/07/25/semantics
SuperMild
2017-07-18 13:16:51 +08:00
《松本行弘的程序世界》
geelaw
2017-07-18 13:49:59 +08:00
我还以为必有高论……
jadeity
2017-07-18 14:03:54 +08:00
@geelaw 一般高论都是在回复中出现。
ech0x
2017-07-18 14:11:54 +08:00
这就是为什么要学历史(逃
sagaxu
2017-07-18 14:13:50 +08:00
脱离工程实践理解一切,那需要极高的抽象和逻辑能力,只适合少数人,普通人需要在实践中才能有比较深刻的感悟。

而特别笨的人,比如说写过树,宝树,宝宝树,宝宝宝树的人,看到递归之后,就会有一种顿悟的感觉。
ech0x
2017-07-18 14:15:18 +08:00
ech0x
2017-07-18 14:17:46 +08:00
可以到 https://www.zhihu.com/question/39932462 这里看看魔理沙的回答
buckyRRRR
2017-07-19 11:31:56 +08:00
这个问题提的真好, 看了回复中的一本书感觉非常有价值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/376076

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX