只精通一門C語言的人算不算程序員?
只會(huì)炒一個(gè)拿手菜,算不算廚師?應(yīng)該不算吧。那如果把C語言類比成一盤菜,精通C語言,可能也不算程序員。那我們換個(gè)問法:只精通川菜的人,算不算廚師?那所有都會(huì)回答:當(dāng)然算廚師了。

我的看法是:C語言不像一盤菜,C語言博大精深,它更像是一個(gè)菜系。
所以這個(gè)問題的答案也就清楚了:只精通一門C語言的人,算不算程序員?當(dāng)然算程序員了。具體有這么幾個(gè)原因:
一、C語言是菜系,能力強(qiáng)大,變化多端,是人類可以接受的最低層級語言。
再往下,就是匯編語言了,那是給機(jī)器看的編程語言,對人類完全不友好,只能干點(diǎn)迷你型的活兒。C語言為人類設(shè)計(jì),因?yàn)槌鰜淼奶?,很多地方麻煩、晦澀、易出錯(cuò),是人類可以接受的寫大規(guī)模應(yīng)用的最低層級語言。C語言勝在全面性,適應(yīng)性,效率也非常高。所以很多其他編程語言,甚至操作系統(tǒng),都是用C語言編寫的。
一旦精通C語言,你就有了“徒手制造一臺跑車”的能力,你說這算不算程序員?
二、精通C語言,已經(jīng)是很難的事情了,已經(jīng)是高級程序員。
因?yàn)闀r(shí)代久遠(yuǎn)的關(guān)系,C語言很多地方有點(diǎn)過時(shí)。比如指針之類的設(shè)計(jì),帶來了效率,也帶來了很難排查的Bug。能夠達(dá)到“精通”這個(gè)程度,按我理解,就是那些能夠充分利用C語言的優(yōu)點(diǎn),又能避開C語言缺點(diǎn)的程序員,已經(jīng)是高級程序員了。
三、只精通C語言,又是不足的,可能會(huì)讓人止步于高級程序員。
前面說了,C語言本身設(shè)計(jì)上有點(diǎn)過時(shí),為了效率,犧牲掉很多方便性。比如,C語言要額外花費(fèi)很多的力氣,才能支持基本的數(shù)據(jù)結(jié)構(gòu)。如果習(xí)慣了現(xiàn)在流行的Java、Python、Ruby,再回去寫C代碼,會(huì)有一種極大的不適應(yīng)——太不方便了。
在語言這個(gè)層級上花費(fèi)過多精力,就會(huì)讓人陷入“管窺效應(yīng)”,忽略表現(xiàn)層和業(yè)務(wù)層的因素。換句話說,只精通C語言的高級程序員,可能當(dāng)不了產(chǎn)品經(jīng)理,也更做不了市場銷售,將來靠C語言創(chuàng)業(yè),也是一件難度很高的事情。
那要怎么做才能打破這種限制呢?就是要做編程語言上的T型人才,“一專多強(qiáng)”。

幾個(gè)小建議:1、每年了解一種新語言。主要是體會(huì)不同的編程思路,打開思維。2、用新語言做一些“寵物小項(xiàng)目”。上手才學(xué)得快,學(xué)習(xí)新語言帶來的“整體解決方案”。3、把其他語言中優(yōu)秀的思想“移植”到C語言中。
每個(gè)語言中都有特別優(yōu)秀的思想,即便不能直接“移植”到C語言中,也會(huì)幫助我們發(fā)現(xiàn)C語言本身存在的局限性,調(diào)整今后的工作方式。
比如,我用慣了Ruby后,再看C代碼,就感覺自己每天一半的工作都是在寫數(shù)組、寫列表、寫語言本該天然支持的基本元素,就感覺很生氣,感覺C語言偷了我太多時(shí)間。那我這種觀察,可能就會(huì)幫助我調(diào)整對C語言的看法,在今后的項(xiàng)目上做出更合理的選擇。
再比如,我最早當(dāng)程序員,是用C語言做電子玩具。當(dāng)時(shí)我的組長,很癡迷面向?qū)ο缶幊?,生生用C語言做出了一套OO框架,讓我們可以直接用OO的方式去編程,大大提高了我們的工作效率。
說了這么多,小結(jié)一下吧:
只精通一門C語言的人,算程序員,甚至可以算高級程序員。但再往上,需要的就是“通才”了。所以,在精通C語言的基礎(chǔ)上,博采眾長,了解其他各種編程語言,很有必要。

