如何成为一个优秀的程序员( 六 )

这些被淘汰的程序员有一些共同的特点:只会用鼠标拖拽控件 , 离开IDE就不知道如何工作 , 学点儿花拳绣腿的功夫就想吃一辈子 , 对学习新技术不感兴趣 , 做一 天和尚撞一天钟 。 现在请回头看看FAQ1 , 在整个软件技术领域 , 这些变化快的技术其实只占了很小的一块 , 却成了这些人的全部看家本领 , 这样的人能不被淘汰 吗?

与这些流行的开发工具和语言相反 , 很多技术和思想是很少变化的 。 比如 , POSIX和SUS标准规定了一套系统函数接口和基本命令的语义 , 只有实现了这些才 可以称作UNIX , 因此今天的Linux、Solaris跟20多年前的UNIX在系统功能层上是基本一致的 。 而指导计算机科学发展的数学理论 , 甚至是老 祖宗们在计算机还没诞生的年代就替我们想好的:布尔代数发表于19世纪 , 直到一个世纪后发明了计算机和数字电路才有了用武之地;数论在17世纪就出现了 , 一直都被数学家们当成一套好玩的理论 , 但只是好玩而已 , 直到计算机密码学诞生后才发现它的实际用处 。

各种流行的开发工具和高级语言虽然变化很快 , 但是底层的编程语言却非常稳定 , 各种操作系统的内核都是用C语言写的 , 以前是这样 , 以后也不会改变 。 另一方 面 , 各种编程语言的设计思想也是非常稳定的 。 其实世界上只有两种编程语言 , 一种是C , 一种是LISP , 前者是imperative的 , 是对计算机模型的抽 象 , 后者是functional的 , 是对数学函数模型的抽象 。 面向对象是一种重要的软件工程思想 , 却算不上一种新的语言模型 , 应该归在C的一类 。 属于同一 类的各种语言其实都大同小异 , 一个精通C++的人学习Java需要多长时间?熟悉语法一个星期 , 熟悉类库三个星期 , 一个月足矣 , 以往的经验都可以套到新的 编程语言上 。 然而要想习得深厚的算法功底、逻辑思维和抽象思维修养 , 能够真正说清楚“系统”是什么 , 如何分析和设计“系统” , 需要多长时间?恐怕要数十 年 。

推荐阅读