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