只会炒一个拿手菜,算不算厨师?应该不算吧。那如果把C语言类比成一盘菜,精通C语言,可能也不算程序员。那我们换个问法:只精通川菜的人,算不算厨师?那所有都会回答:当然算厨师了。

程序员

我的看法是:C语言不像一盘菜,C语言博大精深,它更像是一个菜系。

所以这个问题的答案也就清楚了:只精通一门C语言的人,算不算程序员?当然算程序员了。具体有这么几个原因:

一、C语言是菜系,能力强大,变化多端,是人类可以接受的最低层级语言。

再往下,就是汇编语言了,那是给机器看的编程语言,对人类完全不友好,只能干点迷你型的活儿。C语言为人类设计,因为出来的太早,很多地方麻烦、晦涩、易出错,是人类可以接受的写大规模应用的最低层级语言。C语言胜在全面性,适应性,效率也非常高。所以很多其他编程语言,甚至操作系统,都是用C语言编写的。

一旦精通C语言,你就有了“徒手制造一台跑车”的能力,你说这算不算程序员?

二、精通C语言,已经是很难的事情了,已经是高级程序员。

因为时代久远的关系,C语言很多地方有点过时。比如指针之类的设计,带来了效率,也带来了很难排查的Bug。能够达到“精通”这个程度,按我理解,就是那些能够充分利用C语言的优点,又能避开C语言缺点的程序员,已经是高级程序员了。

三、只精通C语言,又是不足的,可能会让人止步于高级程序员。

前面说了,C语言本身设计上有点过时,为了效率,牺牲掉很多方便性。比如,C语言要额外花费很多的力气,才能支持基本的数据结构。如果习惯了现在流行的Java、Python、Ruby,再回去写C代码,会有一种极大的不适应——太不方便了。

在语言这个层级上花费过多精力,就会让人陷入“管窥效应”,忽略表现层和业务层的因素。换句话说,只精通C语言的高级程序员,可能当不了产品经理,也更做不了市场销售,将来靠C语言创业,也是一件难度很高的事情。

那要怎么做才能打破这种限制呢?就是要做编程语言上的T型人才,“一专多强”。

程序员

几个小建议:1、每年了解一种新语言。主要是体会不同的编程思路,打开思维。2、用新语言做一些“宠物小项目”。上手才学得快,学习新语言带来的“整体解决方案”。3、把其他语言中优秀的思想“移植”到C语言中。

每个语言中都有特别优秀的思想,即便不能直接“移植”到C语言中,也会帮助我们发现C语言本身存在的局限性,调整今后的工作方式。

比如,我用惯了Ruby后,再看C代码,就感觉自己每天一半的工作都是在写数组、写列表、写语言本该天然支持的基本元素,就感觉很生气,感觉C语言偷了我太多时间。那我这种观察,可能就会帮助我调整对C语言的看法,在今后的项目上做出更合理的选择。

再比如,我最早当程序员,是用C语言做电子玩具。当时我的组长,很痴迷面向对象编程,生生用C语言做出了一套OO框架,让我们可以直接用OO的方式去编程,大大提高了我们的工作效率。

说了这么多,小结一下吧:

只精通一门C语言的人,算程序员,甚至可以算高级程序员。但再往上,需要的就是“通才”了。所以,在精通C语言的基础上,博采众长,了解其他各种编程语言,很有必要。