为项目选择合适的语言
每次開始一個新項(xiàng)目,無論是一個獨(dú)立的程序還是現(xiàn)有計(jì)劃的一個組件,都會面臨著一個應(yīng)該選擇什么樣的編程語言的問題。只考慮之前用過的編程語言或者現(xiàn)在最流行的語言的話,你很可能會得到一個糟糕的結(jié)果。所以你應(yīng)該實(shí)時評估自己的選擇,并不斷尋找更好的替代方法。
?
評估一種語言的同時,你還需要考慮項(xiàng)目的整體架構(gòu),并不是項(xiàng)目的所有部分都適合用同一種語言來寫。選擇編程語言 的過程,實(shí)際上也是你項(xiàng)目初步設(shè)計(jì)中的一個重要組成部分。如何分解和連接組件也非常受語言選擇的結(jié)果影響。有些項(xiàng)目很容易就能看出最合適的語言,相信你能 夠自己得出結(jié)論。當(dāng)然語言也會隨時間而改變,所以兩年前的最佳選擇也許現(xiàn)在已經(jīng)不再適用,而當(dāng)初首先被排除的語言反而變成了最佳選擇。
你的團(tuán)隊(duì)有過什么樣的經(jīng)驗(yàn)?
雖然顯而易見,但是不得不說,你也許應(yīng)該選擇自己最熟悉的那門語言。雖然嘗試新的編程語言是一項(xiàng)偉大的創(chuàng)新,但非研究性項(xiàng)目并不是適合試驗(yàn)的地方。如果你需要預(yù)測出項(xiàng)目的時間表,并且避免大規(guī)模的未知變數(shù),相信你不會愿意使用任何不熟悉的語言。
這并不是說團(tuán)隊(duì)里的每個人都必須是這門語言方面的專家。你甚至可以讓團(tuán)隊(duì)的一小部分不熟悉這門語言的人加入開發(fā)中來保證其他人能有較高的效率。僅僅因?yàn)椴皇煜ろ?xiàng)目所需要的語言就把有經(jīng)驗(yàn)或者有才華的程序員排除在開發(fā)團(tuán)隊(duì)之外實(shí)在是非常愚蠢的行為!好的程序員都有不錯的適應(yīng)能力。當(dāng)然,即使優(yōu)先選擇熟悉的編程語言,肯定也有讓你不得不使用陌生編程語言的時候。
有沒有計(jì)算開銷大的操作?
比如視頻處理,圖形渲染,密碼學(xué),統(tǒng)計(jì)分析,信號處理這些對原始處理能力有巨大需求的功能。他們要執(zhí)行多長時間直接影響到計(jì)算機(jī)芯片的使用效率。
對于這些模塊,你幾乎肯定會需要一個靜態(tài)類型和編譯的語言?;蛘吆唵蔚卣f,這些地方你需要快速的編程語言。不論這是多么罕見的問題,這肯定是會出現(xiàn)的。通常這些性能密集組件是有限的,而且可以很容易地模塊化并且和其他語言組合。
會涉及到許多子流程和文件管理嗎?
很多軟件都是為了自動處理重復(fù)的手工勞動而存在的。過程中一步都已經(jīng)有了個非常適合的程序,你需要做的就是把他們組合在一起,這就是軟件開發(fā)系統(tǒng)管理員的主要關(guān)注點(diǎn)所在,當(dāng)然也包括很多保證系統(tǒng)和高級運(yùn)行的。
在這里,你需要執(zhí)行其他程序并且進(jìn)行文件管理,而腳本語言靈活又簡單,并且與生俱來地實(shí)現(xiàn)了這些功能,毫無疑問是你的最佳選擇!
有緊張的資源限制嗎?
雖然在一定程度上,現(xiàn)在硬件已經(jīng)夠用了,但是在某些情況下或者對于某些應(yīng)用來說,硬件還是十分受限的!這一點(diǎn)在嵌入式設(shè)備中尤其明顯。然而不是所有的編程語言都適合受限的硬件環(huán)境下開發(fā),你需要一種編出來的程序能夠在那樣的環(huán)境下運(yùn)行的語言。
有時候運(yùn)行時的內(nèi)存限制是主要問題,有時候可能加載過程的問題更大!也許你會遇到這樣的問題:你的應(yīng)用需要從EEPROM或者網(wǎng)絡(luò)中初始化,那么你可能需要靜態(tài)鏈表或者未修剪的庫。這并不是排除了使用基于VM的語言的可能,相反,有時你甚至需要一個小型的VM。
是否有明確的需求?
不管是什么語言所寫,好的程序總是能夠快速地重構(gòu)和調(diào)整。一些語言本身就可以建立快速原型。而且很多商務(wù)項(xiàng)目完全沒有規(guī)范,或者極其粗糙,這種情況下,客戶在看到最初產(chǎn)品前完全不知道它應(yīng)該是什么樣子。你會需要不斷地修改,直到每個人都滿意。
如果你需要在會議中頻繁修改程序來演示或者是為了作一份它的詳細(xì)報告,你會發(fā)現(xiàn)快速原型非常重要。動態(tài)語言在這里很有優(yōu)勢,它可以很容易地結(jié)合多個不相關(guān)的庫。當(dāng)然,隱藏“細(xì)節(jié)編程",比如內(nèi)存管理,也非常有助于建立快速原型。
產(chǎn)品的生命周期有多長?
不是所有語言都是足夠穩(wěn)定的,許多年輕的動態(tài)語言在升級中會變得不向后兼容或者大量修改它的核心代碼。瞬息萬變的項(xiàng)目,決不會真的有這些變化的一個 問題,事實(shí)上,許多項(xiàng)目甚至還會從這些變化中受益。因?yàn)闀r間向后兼容性成為一個問題,壽命短的項(xiàng)目也會因此變成沒有人關(guān)心的項(xiàng)目。
如果你的產(chǎn)品壽命長達(dá)五年,十年,甚至二十或更多年,無法向后兼容的問題可能會成為你的噩夢。我不認(rèn)為你會想繼續(xù)使用過久的編譯器和和其它古老的工 具,特別當(dāng)它們還跟老的硬件掛鉤時。項(xiàng)目支持新的版本或者新產(chǎn)品肯定會讓你受益。這個時候你最需要的肯定是一個有標(biāo)準(zhǔn)委員會管理,并以長期支持和向后兼容 為目標(biāo)定制的穩(wěn)定的語言。
需要支持什么平臺?
不是所有的語言都適用于所有平臺。如果目標(biāo)設(shè)備不支持你喜歡的語言,那么你肯定是沒法使用它的!當(dāng)然你也不能信任實(shí)驗(yàn)性的支持。你喜歡使用C語言, 而目標(biāo)OS上也有C編譯器也并不一定意味著它會很合適。定制化的芯片或者甚至是GPU之類有時只支持部分語言產(chǎn)生出來的二進(jìn)制文件。
芯片組兼容性問題并不唯一,對于需要同時工作的其它軟件也一樣。比如你需要在用戶的瀏覽器中運(yùn)行代碼,那就沒有多少語言可供選擇了。某些消費(fèi)設(shè)備供 應(yīng)商也只允許部分語言在自己的平臺上使用。 服務(wù)供應(yīng)商往往只專注于某些語言和框架,而并不在意別人的因此帶來生的犧牲。如果你打算為Linux編寫設(shè)備驅(qū)動程序,你會發(fā)現(xiàn)它的內(nèi)核小組只支持一種語 言。你可以宣傳你的想法會帶來怎樣的好處,但如果你想支持某些特定平臺,別無選擇,只能遵守該平臺的意愿。
是否會有大量的位操作?
文件格式和協(xié)議相關(guān)的工作往往會需要對字節(jié)和位操作。您將需要轉(zhuǎn)換格式到更高級的格式,然后再序列化成一個緊湊的格式。一些算法也會需要對數(shù)據(jù)進(jìn)行位操作。最低級的線路協(xié)議也會根據(jù)你的行為對比特流進(jìn)行操作。
做這樣的工作,你需要一個能夠很容易地進(jìn)行位操作并且能夠提供合適數(shù)據(jù)類型(比如無符號整數(shù)類型)的語言。但也并非所有的二進(jìn)制操作都這么麻煩,某 些二進(jìn)制結(jié)構(gòu)就很簡單,甚至經(jīng)過高級包裝的函數(shù)都可以對它們進(jìn)行操作。你需要仔細(xì)審查自己的工作對二進(jìn)制操作的需求,然后選擇一個不太麻煩的編程語言。
是否涉及到某些特定領(lǐng)域?
不是所有問題的最佳語言都是一樣,有很多非常具體的領(lǐng)域存在的專業(yè)語言。比如:人工智能、文本解析、數(shù)據(jù)轉(zhuǎn)換、專家系統(tǒng)、數(shù)學(xué)、財(cái)務(wù)分析等等。領(lǐng)域特定語言往往以節(jié)省大量的編碼工作,而不會產(chǎn)生大的缺陷,所以你應(yīng)該盡可能使用它們。在這里,你不妨選擇專業(yè)語言來代替你熟悉的編程語言。
領(lǐng)域特定語言的使用在一定程度上也限制了你可以在項(xiàng)目中使用的其他語言。一些被翻譯成另一種語言,而另一些則可以作為可調(diào)用模塊。無論哪種方式,你還需要某種方法來整合。
如果存在一個優(yōu)秀的庫也適用這一原則。無論它依賴哪種語言,我都建議你去使用它!
結(jié)論
要作出一個明智的選擇,你會需要了解足夠多的語言。如果你僅僅關(guān)注某一門編程語言,你會被這門語言以及它的思想 牢牢拴住。但相比于語言來說,它們的風(fēng)格可能更重要。良好地組合靜態(tài)和動態(tài)語言/函數(shù)式和命令式/高級和低級語言,再考慮具體領(lǐng)域環(huán)境的特點(diǎn),你才能評估 出最適合答案。在選擇語言之外,你還需要足夠的經(jīng)驗(yàn)來最佳地利用你最后確定的語言。
當(dāng)然上面也只是給你一個粗略的參考。很不幸的是第一條規(guī)則,也就是團(tuán)隊(duì)熟悉什么語言,通常才是實(shí)際上左右語言選擇中的最終結(jié)果的因素。盡可能地把項(xiàng)目分解開來,然后給每一個組件尋找一個最合適的語言,至少以我多年經(jīng)驗(yàn)來看,組合使用多種語言從沒有帶來過什么壞處。
你可能會認(rèn)為,只考慮上述因素也并不一定能確定下語言。事實(shí)上,這樣通常注意是排除不合適的語言而不是增加新的選擇。項(xiàng)目按組件拆分,給每個組件選 擇最合適的語言,最終你選擇語言的標(biāo)準(zhǔn)會越來越嚴(yán)格,直至剩下一兩個最佳答案。但如果你不分解項(xiàng)目,你能得到只是一兩個相當(dāng)糟糕的選擇,通常按模塊分解項(xiàng) 目會是更好的選擇。
原文地址:http://mortoray.com/2012/05/29/how-to-choose-a-programming-language/
轉(zhuǎn)載于:https://blog.51cto.com/xuqin/890268
總結(jié)
以上是生活随笔為你收集整理的为项目选择合适的语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache的Access.log分析总
- 下一篇: Oracle建立表空间,用户等环节