- 相關(guān)推薦
論程序的三個(gè)基本要素:語(yǔ)言,API和工具
語(yǔ)言
語(yǔ)言通常是中立的,和特定的平臺(tái)無(wú)關(guān)(匯編語(yǔ)言與系統(tǒng)語(yǔ)言除外);但是,某些語(yǔ)言確實(shí)比較適合某些平臺(tái)。以Apple平臺(tái)來(lái)說(shuō),顯然objective-C會(huì)是最好的選擇;以NET平臺(tái)來(lái)說(shuō),顯然C#會(huì)是最好的選擇。好的語(yǔ)言選擇可以讓你具有更多資源,和平臺(tái)有更好的整合,且新版本推出的速度更快。
語(yǔ)言通常也和專(zhuān)業(yè)領(lǐng)域無(wú)關(guān)(當(dāng)然,像VHDL.這樣的語(yǔ)言除外),大多數(shù)語(yǔ)言在介紹自己時(shí),用到「General-Purpose」 (一般用途)形容自己。但不可否認(rèn)的,不同語(yǔ)言可能會(huì)有不同的適用性,有些語(yǔ)言適合開(kāi)發(fā)Web前端,有些適合開(kāi)發(fā)Web后端,有些適合開(kāi)發(fā)桌面程序。語(yǔ)言通常會(huì)帶有作風(fēng)(paradigm,也稱(chēng)為「范式」), 有些是00P的范式、有些是FPP的范式…。經(jīng)過(guò)多年的融合與演變,大多數(shù)的語(yǔ)言至少會(huì)同時(shí)具有兩、三種范式,有些甚至?xí)噙_(dá)七、八種。語(yǔ)言范式越多時(shí),程序設(shè)計(jì)師可以依據(jù)自己的需求和喜好,采用不同的范式。但范式多不見(jiàn)得是好事,有可能表示這個(gè)語(yǔ)言沒(méi)有中心思想,駕馭的難度可能更高,寫(xiě)程序時(shí)犯錯(cuò)的機(jī)會(huì)可能更大。
語(yǔ)言有高階和低階的分別,高階者比較接近人類(lèi),低階者比較接近機(jī)器。很多人誤以為越低階的語(yǔ)言越「難」,事實(shí)上可能不是如此。在我使用8086匯編語(yǔ)言的時(shí)候,我就領(lǐng)悟到,匯編語(yǔ)言其實(shí)相當(dāng)好學(xué),因?yàn)檎Z(yǔ)言元素(指令)相當(dāng)少,月變化不人,基本概念都差不多。多數(shù)人認(rèn)定匯編語(yǔ)言很「難」,其實(shí)是在于「難讀」(不容易借山閱讀源碼得知原作者的意圖)與「難寫(xiě)」(即使要表達(dá)一件簡(jiǎn)單的事,也必須寫(xiě)出很多程序碼),而非「難學(xué)」。
對(duì)于語(yǔ)言的選擇,除了平臺(tái)、領(lǐng)域、范式之外,還有相當(dāng)多面向需要考量,其中有-些是許多人所疏忽的,像是可讀性、可寫(xiě)性、上手快慢。 另外,也要考慮到API,如果你選擇的語(yǔ)言沒(méi)有你需要的[API],那么你的麻煩就大了。
API
API通常和特定的平臺(tái)無(wú)關(guān),但是和專(zhuān)業(yè)領(lǐng)域有關(guān)。至于那些和專(zhuān)業(yè)領(lǐng)域無(wú)關(guān)的API (例如排序、字串處理),我都把它們歸納到語(yǔ)言中,而傾向不認(rèn)定它們是API。
大多數(shù)的API都是以函數(shù)的方式存在。00P的API會(huì)將函數(shù)集合成類(lèi)別,將類(lèi)別集合成框架;FP的API會(huì)將函數(shù)集合成模組。API的單位很難認(rèn)定,你可以說(shuō)一個(gè)框架或模組是一個(gè)API.一個(gè)Class是一個(gè)API、或者一個(gè)函數(shù)是一個(gè) API。
我認(rèn)為語(yǔ)言、API、 工具這三者中,API是最難學(xué)的。以Java來(lái)說(shuō),package 有上百個(gè),類(lèi)別有上千個(gè),方法(函數(shù))更是有上萬(wàn)個(gè)。API牽涉到專(zhuān)業(yè)領(lǐng)域的知識(shí),有特定的呼叫次序和參數(shù)需求。
其中最難的API通常是GUI (圖形化使用者界面)。資料庫(kù)的API可能反倒很簡(jiǎn)單,因?yàn)樵S多資料庫(kù)API都只是CLI (Cal1-Level Interface),只負(fù)責(zé)將SQL語(yǔ)法送到DBMS。從某種角度來(lái)看,不只這些負(fù)責(zé)連線(xiàn)到資料庫(kù)的函數(shù)是API,SQL 語(yǔ)言應(yīng)該也算是資料庫(kù)API的一部份。而SQL是一種DSL (Domain Specific Language)。
這又牽涉到這幾年開(kāi)始流行的一一個(gè)話(huà)題-以DSL形式存在的API,例如Ruby-on-Railso由于DSL是語(yǔ)言,所以使用彈性自然比函數(shù)(類(lèi)別、框架)大,加上語(yǔ)言用途特定,所以很容易學(xué),這些都是DSL式的API受到大家的矚目的原因。而且,DSL 可以讓程序碼大幅縮短,有助于減少對(duì)某些開(kāi)發(fā)[工具]的依賴(lài)。
工具
當(dāng)然,最基本的開(kāi)發(fā)工具是編輯器、編譯器(或解譯器)、除錯(cuò)器,但這已經(jīng)是遠(yuǎn)古時(shí)代的事情了,F(xiàn)代的軟件開(kāi)發(fā),用的工具越來(lái)越多。尤其是程序產(chǎn)生器的地位越來(lái)越重要。
現(xiàn)在的開(kāi)發(fā)工具都很強(qiáng)調(diào)程序產(chǎn)生器,利用程序產(chǎn)生器提高生產(chǎn)力。以往只需要U1traEdit就能寫(xiě)程序,不需要這些龐大的開(kāi)發(fā)工具,現(xiàn)在卻很難辦得到,正是因?yàn)槌绦虼a產(chǎn)生器的緣故。很多人即使不知道底層的作法,也可以很快地把系統(tǒng)做出來(lái),可以在名片印上「 資深軟件工程師」,這也是拜程序產(chǎn)生器之賜。
現(xiàn)在的軟件開(kāi)發(fā)都已經(jīng)走火入魔了。開(kāi)發(fā)的速度提升,不是因?yàn)樾枰獙?xiě)的程序變短,而是程序碼產(chǎn)生器幫我們產(chǎn)生出更多程序,而這些產(chǎn)生出來(lái)的程序,如果沒(méi)有像Visual Studio 這樣的T具協(xié)助,以后會(huì)相當(dāng)難以維護(hù)。
我希望語(yǔ)言能更精簡(jiǎn),且支援建立DSL,而DSL類(lèi)型的API大幅度減少程序碼長(zhǎng)度,減低我們對(duì)于某些工具的依賴(lài)。語(yǔ)言、API、工具不應(yīng)該是三足鼎立,而應(yīng)該以語(yǔ)言和API為主,工具為輔。
【論程序的三個(gè)基本要素:語(yǔ)言,API和工具】相關(guān)文章:
收養(yǎng)孩子的條件和程序[1]06-03
論形體語(yǔ)言在戲劇表演中的重要地位08-30
我和語(yǔ)言文字作文09-05
我和語(yǔ)言文字作文07-09
探析漢語(yǔ)言文學(xué)中語(yǔ)言的應(yīng)用和意境08-25
中班語(yǔ)言:小狐貍的槍和炮02-27
(薦)我和語(yǔ)言文字作文11-17
中班語(yǔ)言《黑螞蟻和紅螞蟻》02-29