只精通一門C語言的人算不算程序員?
只會炒一個拿手菜,算不算廚師?應該不算吧。那如果把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語言的基礎上,博采眾長,了解其他各種編程語言,很有必要。

