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
























