近來連續看到這樣兩個信息,一個是知乎上有個問題叫:如何學習C語言?,這個問題的答案中得票數第二高的是不要最先學習C語言;一個是看到了2012年金旭亮老師寫的第一門編程語言選誰?這文章,金老師也是支持不用C做第一門語言的,從投票來看大部分人也比較支持這個觀點。
這是比較讓我意外的事情,因為我正好持相反的觀點。
語言學習的兩種道路
我們有兩條路來學習編程,一條是厚積薄發,一條則是速成的道路。厚積薄發要一點點打根基,比如學習C語言、學習計算機系統的構造,去看《計算機程序的構造與解釋》這類書,去學習算法等,這么走有點吃力不討好,吭哧半天也還不一定能看到什么結果;速成的就可以先學習IDE,先學習腳本,先學習CSS,JavaScript,這樣沒多久就可以獨立干不少活了,比如創建個漂亮網站什么的。
這種不同道路的選擇最終決定了C是不是更適合做第一門語言。走前一條路的顯然就適合用C做第一門語言,因為不掌握這種系統級的語言就不太好理解什么是指針,什么Stack,什么是Stack Overflow,什么是寫超界,對打基礎形成不良影響,也理解不了《深入理解計算機系統》這樣的書。走后一條道路的就沒關系了,哪個實用學哪個。
想知道適合走哪條道路,請先拷問自己!
初學者到底適合選擇哪個方向?首先我們必須承認沒有哪種方法是適合所有人的,舉個例子來形象地說明這一點:松鼠桂魚是蘇州這邊的名菜,但對于不喜歡甜食的人來說,這道菜很糟糕。
因此我不想在技術上展開太多,這更主要是個人成長的現實問題,從怎么做更有利于實現自己的價值(包括現金價值)來探討可能更有現實意義一點。所以要想回答要不要從C開始,最好先回答下面這樣的問題:
- 你是不是想專職做程序員,把它作為自己未來的職業?
- 你是不是想成為比較杰出的程序員獲得更好的成長和收入?
上面這類問題的關鍵在于,如果你一直做程序員而不是做做就干別的去(比如管理、銷售等等),那么就要有專業,專業才能更好的創造價值,而專業需要一種高度,高度則需要基礎和積累。我們很難講不學C語言就成不了很專業的高手,但你可以看看身邊,很多高手就是打了基礎一點點磨練出來。
這么說也許有點抽象,我們來看看具體的故事:
2012年的時候Facebook花10億美元買下了照片共享應用公司Instagram。這事在當時引起了非常大的轟動。這事之所以引起極大關注,其關鍵點在于后者只有十幾個員工。十幾個員工支撐起10億美元的價值,這絕對是讓人震驚的事情。
做個簡單的比較就可以知道這個差距有多大。
假設一個公司是做外包的,非常厲害,人月單價有4萬RMB。同時這個公司包括支持人員在內有500人,公司里每個人都可以換成收入,那么這個公司一年的收入大概是4000萬美元,而Instagram用十幾個人達成10億美元價值只用了差不多2年。兩家公司中,單人一年創造價值的比率是差不多500萬倍。
這是怎么樣的一種杠桿率差異!大家可以想象都是寫程序,這兩種杠桿率回報上的差異。
這種杠桿率背后隱含了這樣一種基本現實:基于很多現有的框架,小而精的團隊已經可以通過產品撬動極大的生意,這并不僅局限于Instagram。而為了打造這種小而精的團隊,大家在聽一些分享時就會發現:很多人都有意愿找ACM上成績比較好的人,他們認為這類人更有以一當十的可能性等。
從這類現象中我們可以挖掘出來什么東西?
- 第一點,如果把程序員進行分級,一個極端是能做很高端的活,比如以小而精的團隊打造很牛的產品;一個極端是只能做CRUD的活,那收入與這種技能等級正相關是無疑問的,杠桿率在那里。
- 第二,做很高端的工作可以并不只局限于打造產品,也可以去弄系統底層等等,但總的來看,越往高端走對基礎要求越高,這里的基礎范圍可以廣點:可以是算法,可以是對體系結構的理解等。沒有這類基礎工作時,就很容易被卡在一些地方干瞪眼,不知道如何下手解決有點難度的問題,而事實上當你試圖創建一個新產品的時候,必然會碰到獨屬于你自己的問題。
要想成為名好程序員 學習C語言是非常必要的
在《程序員生存定律》里,我寫過一篇文章叫:程序人生的出口。其中列舉了程序員最可能的結局,比如:
1 成就超一流高手?
簡單來講就是繼續以程序員的身份進行奮斗成為牛人。
2 積累、爆發、開始創業
簡單來講就是自己做產品,努力當CxO去。
3 轉向管理之路
大多情形下是拋棄程序,內部轉行去喊口號。
4 維持原狀的老碼農
就是在CRUD這個層面打轉那種。
5 提前退場、向代碼說再見
眼看前途渺茫,轉行了。
這其中1對基礎要求很高,2與3對打基礎比較無所謂,這時候技術很像一種敲門磚,而4與5很可能正是忽視了基礎的結果。
這樣一來事情就非常清楚,如果你真想長時間做程序員,并且想比較好的實現自己的人生價值(包括現金價值),那么打基礎是很必要的,再進一步就是說從C語言開始學習編程其實是很必要的。
從C語言開始學習編程對大學生的另外重意義
從C語言開始學習編程對大學生而言還有另一重含義:除了大學的時間,你可能再也沒有大段的時間打基礎。容易的東西是可以用碎片時間學的,比如各種腳本語言,但難的東西是需要大片時間學的,所以一旦大學里不把硬骨頭啃掉,未來很可能就沒時間啃了,說回來還是要先打基礎再談其它。
歷史上趙匡胤曾經猶豫過是先搞定比較羸弱的南唐還是先搞定幽云十六州,最終他選擇了先易后難去搞南唐,從結果來看這是錯了,你不趁自己最巔峰的時刻搞定最難搞的,未來可能就再沒機會了,而羸弱其實一直會弱在那里,早搞晚搞差別不大。
當然我們也必須承認即使努力的去打基礎,也不是每個人向上走,都能成為高手、成為特別牛的程序員,還是有人會卡在某條線下面,要去維護垃圾代碼、寫垃圾代碼,但關鍵是我們談的是在學習階段應該怎么做,不爭一爭就放棄某種可能性,還是太可惜了。
此外,對于大學生或者那些有充足時間學習的人,我不太認可一種方式可以培養興趣,另一種就不能培養興趣的說法。這更多的可能是種借口,因為在有如此多好玩開源項目的年代,對于想學的人,C語言一樣可以有很多興趣,對于不想學的人再簡單的語言一樣也很無聊。
有沒有趣,是學習或者是教學方法的問題,而不是編程語言的問題。
最后我想再補充兩點
首先,我寫上面內容時,沒太考慮職業技術學校的情形,一旦考慮速成,考慮大規模生產,結果必然會掉過來,這并不令人意外。
其次,并不是只有我有這類觀點,大名鼎鼎的Joel在《軟件隨想錄》里專門有一章叫“學校只教Java的危險性”,其中所表達的觀點與這里的觀點類似。
作者介紹:李智勇,V眾投發起人,《完美軟件開發:方法與邏輯》作者。目前正在免費發布《程序員生存定律》,微博:李智勇SZ,微信:vfacebook。
《暢言》第三期:【[暢言]Android、Chrome OS長達四年的“戀情”,為什么會在今天確立關系?】Android和Chrome OS融合的傳聞早在2010年就有了,這個傳聞到2013年即被谷歌執行董事長Eric Emerson Schmidt和Android主管Sundar Pichai否定,時隔僅不到一年,谷歌為什么又允許Chrome OS上運行Android應用呢?
《暢言》第四期:【[暢言]流量變現——社交問答網站的生與死】互聯網流量真的就一定能變現嗎?如果是,那為何知乎、果殼的產品成功了、流量也可觀了,但為何它們至今仍沒有走出絕地?如果不是,那流量的繁盛為什么沒有給他們帶來盈利?社交問答網站路在何方?
《暢言》第五期:【[暢言]管理者:我不需要你喜歡我】愛奇藝上海PPS研發總監陸其明稱,有人若對你說,喜歡在你底下干活,別自喜!這不一定是在肯定你能力。如果他能力不強,那么他的言外之意卻是“在你底下混得比較舒服”。這是個危險信號!因此管理者,不要無原則地討好員工、不需要讓他喜歡你,而是需要:贏得他們的尊敬!
《暢言》是CSDN新欄目,供大家各抒己見。只要你看完CSDN文章或評論后有話說,都可以通過電子郵件(zhangyong@csdn.net)投稿,從而獲得上CSDN首頁表達自己觀點、想法的機會。《暢言》不怕觀點“雷人”,只要你邏輯表達清楚、數據引用可靠,你敢投稿,我們就敢首頁!歡迎大家暢所欲言。