然后是“绝对不要钻研微机原理”,好吧其实微机原理很酷,搞懂x86处理器和系统总线,对设计操作系统有很大帮助。搞懂存储器和网络适配器对设计数据库和分布式系统有很大帮助。
所以,我觉得还是删掉第二条吧,在我想到更好的表达方式之前。
-----
其实一个程序的写法,是随着计算架构在不断变迁的。比如说高性能计算会用到GPU,GPU就不能当图灵机来用(也不是不行,就是特别慢),因此给GPU编程就需要专门的语言,也需要了解GPU原理及架构。
-----
计算机的架构发生变化的一个主要原因,就是摩尔定律输给了量子物理,图灵机的工作频率不能无限制地提升。于是程序员们想了很多办法,把原来串行运行的程序一点点地修改,让它们适应并行架构,以充分利用并行架构带来的性能提升。
-----
随着技术的进步,计算机科学家们提出了很多新的思路,比如程序可以仍然按照串行方式书写,然后自动转换为并行形式运行。古有Erlang, OpenGL, 今有MapReduce, TenserFlow, 其实都是这个意思。
-----
那么随着时间的流逝,也许有一天我们可以用某种很高级的语言,比如现代汉语,告诉计算机应该做什么。我们只需要描述程序逻辑,背后的并行化、运行时优化都是自动的,运行速度也快得吓人。
-----
到那时,程序员最重要的能力就是逻辑和抽象能力,而完全不需要了解系统底层架构(反正优化都是自动的,速度很快,要干啥都行)
-----
但是我仔细想了一下,这是不符合经济学原理的。计算机系统就算再快再廉价,也无法满足人类的无限需求,换言之“怎样让同一个程序跑得更快”将成为永恒的话题。换言之,50年之后我们仍然需要很多通晓计算机原理的人才。