这几天,关于要不要学 C 语言这个问题,挺热闹的。一开始时觉得挺无聊的,就没有凑份子。但现在看了大家的文章,也想说几句了。不过我的重点,不在技术上,前面几位朋友的文章,已经说了很多了。我想从发展的角度来谈谈。
 
    1、什么是程序员——能捉老鼠的猫就是好猫
 
    正确的人,做正确的事,是成功的关键。既然说到“程序员与 C 语言”,那就不能不定义一下“程序员”的含义。
    头悬梁,锥刺股,苦练严冬与酷暑,最终艺成下山,凭语言利剑,携算法威风,闯出一片江湖……这是传统意义上的程序员。汇编、C 语言、数据结构,一个都不能少。在 1990 年之前,这几乎是天经地义的法则。不会这些,你就找不到工作,换句话说,那时的电脑,基本上也只能跑这些东东。
    到 2000 左右,大量会 VB、DELPHI 的编程从业者(暂且叫这个吧)走上了岗位。尽管你可以鄙视他们,“基础不好,难成大器”云云,然而,你不能否认,人家找到工作了,而且活得也不错。
    2000 年以后,VB、DELPHI 也逐渐淡出眼界,J2EE/.Net 又冒出来了。真是“编程代有语言出,各领风骚数百天”。这些用 JAVA/.Net 的人,又有多少人是懂汇编的?有几个人开发过设备驱动程序?他们照样活得挺好。
    那么,什么是程序员呢?我的定义是:能通过某种手段,写出程序的人,就是程序员;能通过写程序找到一份工作的,是活着的程序员;写出好用的程序的人,是好程序员。在程序员的定义中,没有“C 语言”的字样。
 
    2、技术更替与市场法则——谁是看不见的手?
 
    亚当·斯密在《国富论》中指出,经济的发展有一只“看不见的手”在发挥无形的作用。那么,IT 的发展呢?让咱们回到 100 多年前,看看近现代科学是怎么发展的。
  • 1665 年,胡克出版了《显微术》,影响了地质科学至少 30 年,尤其是在化石观测方面;
  • 1887 年,赫兹证实了电磁波的存在;1894 年,Guglielmo Marconi 有幸读到了赫兹的论文,并开始做无线电实验,1901 年,无线电波穿越了大西洋,掀起了无线通信技术的革命;
  • 1905 年 9 月 27 日,爱因斯坦发表了质能方程;1945 年 7 月 16 日,第一颗原子弹爆炸;
  • ……
    更多的就不写了,免得大家睡着了。引用上述事实的目的,是想让大家跳出“编程”这个思维圈子,试图去找到这只“看不见的手”。
  • 如果没有发现细胞、没有化石观测,显微术能否这么著名,还不一定;
  • 如果没有 Guglielmo Marconi,赫兹“看到”电磁波的意义,也许仅仅是个被记载在物理教科书中的经典实验;
  • 如果没有原子弹的爆炸,质能方程能否象今天这样家喻户晓还是个问题……
    我想要表达的,已经非常明确了。技术是要为“应用”服务的。而“应用”,来源于“市场需求”。市场,决定了技术之路能走多远。
    或者你会说,没有技术革命,哪来的市场?是的,新技术的出现能带来工业革命,但反过来说,如果没有工业革命,所谓的新技术又有什么用呢?不过是图书馆里多了的一篇论文而已。况且,编程语言与“能引起工业革命的新技术”之间的距离,似乎比地球与太阳的距离还要远那么一点点。
    所以,是否要学 C 语言,不是由 C 语言本身决定的,也不是由专家决定的,而是由市场决定。市场,就是那只看不见的手!
 
    3、再回头看看 C 语言——夕阳无限好
 
    1972 年,C 语言被发明出来,广为流行;现今的 UNXI/LINUX 系统内核,就是用 C 写的。在此后的很长一段时间里,或许是为了生存,或许是为了实现技术高手的梦想,C 语言一直程序员的不二法宝。
    但是,社会一直在进步。现在,C 语言的应用已经越来越少了,JAVA 等后起之秀,已经修成大器。你能看到这篇文章,就表明已经在关注,已经在反思,或者说,C 语言感觉到了自己的危机。
    不要害怕,害怕也没用。社会前进的步伐,不是任何人可以延迟或改变的。既然 C 语言在走下坡路,我们又有什么理由一定要严防死守,要求每个人都学呢?条条大路通罗马,C 语言并不是唯一的选择。
 
    4、适应社会——如果斗不过你,就让我跟你干
 
    如果你想活下去,那就要适应这个社会。如果你的公司不用 C 语言,你也不必抱残守缺,更不要认为“精通 C 语言的才是高手”。实际岗位中,需要你用什么,就去学什么。个人的力量,是很难改变社会环境的。
    说句闲话:做人做事,首先都要“识时务”。认清社会发展的大趋势,是成功的关键。就算自己认不清路,那也要跟着能认清路的人一起走。如果我斗不过你,那就让我跟你一起干吧!
 
    5、任何语言都会过时——保持积极的心态
 
    任何事物都有产生、发展、灭亡的过程,编程语言也一样。而且,语言的更新换代速度非常之快。现在是 J2EE 和 .Net,没准过几年,又出来啥玩意呢。作为编程从业者,应该保持“活到老、学到老”的积极心态,而不是“学一门手艺,吃一辈子饭”。
 
    不必唱挽歌,C 语言的时代已经结束。与其花时间在争论上,不如赶快去买一本新书。