自底向上设计

如今我们陷入了一个巨大的误区,认为学习编程就是学习各种时髦的工具,这些工具有着大量的特性以及难以记忆的细节,导致我们忘记了计算的本质。语言的特性在几年内不断变化,IDE 或命令行工具的参数在不断调整,今天学习的细节到了明年就得换成新的语法。各种号称解决了重大的问题的编程语言层出不穷,到目前为止编程语言有上百种之多,真的学习的完吗?

真正应该学习的是背后的原理,王垠的解谜计算机科学写的很不错。我们不必拘泥于各种语言的细节,我们应该把握核心,理解什么是计算。

“从最广义来讲,计算就是“机械化的信息处理”。所谓机械化,你可以用手指算,可以用算盘,可以用计算器,或者计算机。这些机器里面可以有代码,也可以没有代码,全是电子线路,甚至可以是生物活动或者化学反应。不同的机器也可以有不同的计算功能,不同的速度和性能”

计算的载体不限于现在我们所看到的计算机,任何按照有限的规则进行有限的变换得到结果的东西都称为计算机。理解了这些转而去推断编程语言需要哪些要素就显得顺其自然,甚至可以分辨很多编程语言中有的特性是有害的。我们就可以对语言的特性进行选择,只有那些经过审慎选择的特性才是值得使用的。

既然要避免学习编程语言和各种工具的说明书,我们应该学什么呢?我的答案是学习在未来 20 年都会不消亡的东西,而要预测未来 20 年就看过去 20 年哪些东西还一直存在。 C/C++ 构成了整个编程世界的基石,Linux/GNU 构成了整个开源世界的基石,TCP/IP 则构成了网络的基石,所有这一切存在于过去的 20 年,并且毫无被动摇的迹象,这是我们应该追求的东西。

阅读全文 “自底向上设计”