程序員如何選擇入門編程語言?
原創【51CTO.com快譯自7月28日外電頭條】有一天,我的朋友Ned的表弟問他,對于一個想做程序員的人來說,從哪門語言入手***?他的表弟并沒有太多的編程經驗,但15歲的年紀,未來實際上也快得很,他似乎對編程很感興趣,希望這門語言可以給他打開編程世界的大門。“所以很自然的,”Ned解釋說,“我告訴他,去學習Scheme。”
嗯?!Scheme?既然Ned打開了類似于“哪種編程語言是***的”這樣的話題,看上去我們一定會陷進沒完沒了的爭論中去。有人可能說是Perl,別人會說C++,而估計有三分之一的人會推薦Visual Basic,他們會不停的爭論,從51CTO.com每月一期的編程語言排行榜來看,似乎每種語言都有自己的支持者和反對者,在***一期的榜單中,使用率***的Java也遭到了人們的質疑(詳細請參考7月編程語言排行榜:Java,正在老去的王者)。從口水上升到磚頭。但選擇Scheme?這我倒沒預料到。
Scheme:編程語言中的拉丁語?
請注意,Ned并不孤單。許多著名的大學在***年的計算機科學課程里都有Scheme。在實際的工作中也有許多人需要它。事實上,我敢說,如果你的大學只設立了C++或者Java的課程,你的學校可能不咋的,但如果你們學校有Scheme的課程,那很可能你幸運的去了一個***的學校。
Scheme是Lisp語言的一個分支,它是現今仍然在使用的最古老的編程語言之一。它提供了最少的語法和極少幾個操作符。同樣重要的是,Scheme支持函數式編程范式,這意味著它可以用數學函數表達式來編程。任何計算問題都可以使用稱為蘭布達演算的獨特數學符號來表達,從某種意義上說,Scheme算是一個蘭布達演算的解析器。
對于學生來說,這意味著Scheme可以讓你專注于算法本身,而不是語言的語法。主流的編程語言如Java和C++等都有著極其復雜的語法,這往往是由于語言在演變過程中不斷增加的新功能帶來的。它們迫使你學習許多種不同的控制結構和處理不同問題的不同方法。但Scheme不是這樣,它為每個計算問題提供同樣的簡潔而可預見的語法。“我感覺Scheme在給電腦下指令時更自然,相對于其他語言,”Ned說。
不過,Scheme?我無法看到它的優勢。為今后的編程學習打下簡單而堅實的基礎確實很好,但是當我15歲時,我對真正的邏輯和數學沒有什么興趣。我著迷的只是怎樣讓電腦完成各種各樣好玩的工作——我要很遺憾地說,“執行蘭布達演算的算法”,沒意思;而編個視頻游戲?很酷。
當然,除了運行算術題,你也可以讓Scheme做更多。今天,它已經是一個正式的語言,可以在幾乎所有平臺上運行。
但是,我對Scheme***的懷疑仍然是,它本質上是一個只寫的語言。一個程序看起來非常像另一個。它的語法很簡單,但副作用是你必須要讀懂源代碼才知道Scheme想要做什么。這使Scheme成為一門良好的教學編程語言,但對于一個15歲,對計算機能做什么非常好奇的孩子,Scheme是糟糕的。
軟件工程的現狀
不錯,有些人會說,我們不需要那么多黑客,需要的是更多受過訓練的軟件工程師;從Windows SDK入手學習編程,被漂亮的用戶界面吸引只會導致壞習慣;還有不理解基礎算法的程序員算不上好程序員——我自己就說過很多次。
可是 “軟件工程”的概念到底是什么呢?它是否真的算是工程學呢?也許不是,大西洋系統行會(Atlantic Systems Guild)會長Tom De Marco說。“軟件開發在本質上不同于自然科學比如物理,它的特性注定了無法非常準確的捕捉到所描述的東西,”這是De Marco在***一期IEEE軟件雜志上發表的文章。“軟件開發在某種程度是而且永遠是一種實驗。實際的軟件建設雖然不一定是實驗,但它在概念上還是實驗。”
換言之,編程是藝術的科學,無論程序員多么精通于實踐。創造有效的軟件解決方案需要洞察力、靈感、大膽,并經常要有些運氣。當然,有好的程序員和不好的程序員——但要把軟件開發和土木工程畫上等號是件愚蠢的事。正如Jeff Atwood所說的那樣,“我們做的是工藝,不是工程。”
如果單純從軟件工程和專業性角度解答程序員如何選擇合適的編程語言,那我們必須考慮具體的需求和應用場景,是做Web開發還是桌面端開發?是做前端還是服務端編程?這樣看來你講面對PHP、C++或者XML或者C語言之類的選擇。在51CTO.com與Windows教父一次關于未來編程語言的發展方向的對話中,Jeffrey提到了編程語言將向自動化和智能化發展,但這并不意味著我們不需要一些基本的編程邏輯和思考的訓練,編程語言可以讓我們控制硬件,但程序卻需要程序員來控制。
因此,15歲,我想說,Scheme可能是“***”的學習編程的方式,但可以等到大學里去教。在這樣一個年紀,我認為鼓勵學生發展天生的好奇心和熱情更為重要,這可能會造就出一位真正出色的程序員。如果這意味著在Visual Basic中編碼,那也沒問題。Scheme可以稍后。
***,我還是直說了吧,我建議的***門編程語言是Python,現在讓磚頭飛過來吧!
投票調查
您的***門編程語言是什么? |
C語言 |
C++ |
Java |
Pascal |
BASIC |
其他 |
您認為哪種編程語言最適合入門學習? |
C語言 |
Java |
Ruby |
Python |
PHP |
【更多關于編程語言的討論】
【51CTO.com譯稿,非經授權請勿轉載。合作站點轉載請注明原文譯者和出處為51CTO.com,且不得修改原文內容。】
原文:What's the best first language for a programmer? 作者:Neil McAllister