
作為一個(gè)以開(kāi)發(fā)為生的程序員,在我心目中編程語(yǔ)言如同戰(zhàn)士手里的武器,好與不好主要看使用的人是否趁手、是否適合,沒(méi)有絕對(duì)的高低之分。
從2013年起,學(xué)習(xí)并使用Golang已經(jīng)有4年時(shí)間了,我想敘述一下我選擇Go語(yǔ)言的一些經(jīng)歷,希望能給考慮使用Go的開(kāi)發(fā)者們做些參考。
Golang和其他語(yǔ)言一樣并非完美,它有很多優(yōu)點(diǎn),也當(dāng)然有很多缺點(diǎn)
為了避免無(wú)謂的語(yǔ)言爭(zhēng)論,提前說(shuō)明一點(diǎn):Golang并不完美。
我在許多討論場(chǎng)合中都表達(dá)過(guò)這樣的觀點(diǎn),選擇適當(dāng)?shù)木幊陶Z(yǔ)言非常重要,甚至?xí)绊懸粋€(gè)程序員的職業(yè)發(fā)展歷程,但是編程語(yǔ)言本身確沒(méi)有絕對(duì)的高低之分。一名武術(shù)大師使用狙擊槍不僅不能發(fā)揮槍的優(yōu)勢(shì),而且可能會(huì)影響自己的招式,最重要的是,武術(shù)大師可能根本沒(méi)有使用狙擊槍的場(chǎng)景,一把精良的劍可能更適合他。
一些經(jīng)歷
我并非計(jì)算機(jī)專業(yè)科班出身,我學(xué)習(xí)的是土木工程專業(yè),在學(xué)校曾經(jīng)簡(jiǎn)單的學(xué)習(xí)過(guò)C語(yǔ)言,但是學(xué)校的計(jì)算機(jī)教育并沒(méi)有引起我學(xué)習(xí)編程的興趣(國(guó)內(nèi)學(xué)校的教育方式不扼殺學(xué)生的興趣就算是萬(wàn)幸了)。學(xué)習(xí)編程的原因是我當(dāng)時(shí)很想搞清楚怎么搭建一個(gè)漂亮平面設(shè)計(jì)網(wǎng)站和論壇,有一個(gè)朋友推薦我學(xué)習(xí)了ASP(用VB語(yǔ)言),在我大學(xué)那個(gè)時(shí)候,搭建一個(gè)網(wǎng)站對(duì)于大多數(shù)人來(lái)說(shuō)還是一個(gè)挺神秘的事情。后來(lái)又因?yàn)閼卸瑁幌牒推渌瑢W(xué)一樣手繪圖紙,于是專心學(xué)習(xí)了一段時(shí)間Lisp,以便于在AutoCAD(一款工程繪圖軟件)自動(dòng)繪制圖紙。對(duì)于編程,我一向是實(shí)用主義
大學(xué)畢業(yè)后,放棄了土木專業(yè)的就業(yè)方向,正式以編程作為自己的職業(yè),學(xué)習(xí)不同的編程語(yǔ)言也成為了工作必備的要求。
選擇CSharp
一開(kāi)始,我選擇了C#以便于開(kāi)發(fā).net框架下的應(yīng)用和網(wǎng)站,這次選擇非常有意義,在.net框架下不僅可以開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站,還可以開(kāi)發(fā)各種Windows系統(tǒng)下的視窗程序、控制臺(tái)和動(dòng)態(tài)鏈接庫(kù),微軟提供了非常好用的IDE,對(duì)于一個(gè)非科班出身的程序員,在.net框架完整的解決方案的幫助下,我盡可能快的接觸到了軟件開(kāi)發(fā)領(lǐng)域的各個(gè)方面。
選擇PHP
隨著Web2.0概念的提出,我的工作幾乎完全是Web開(kāi)發(fā)。在這個(gè)領(lǐng)域最被人們津津樂(lè)道的語(yǔ)言就是PHP。本來(lái)我并不以為然,直到我發(fā)現(xiàn)很多優(yōu)秀的項(xiàng)目都是用PHP開(kāi)發(fā)后,它成功的吸引了我的注意;另一個(gè)原因是微軟的服務(wù)器操作系統(tǒng)和IIS在當(dāng)時(shí)的版本下確實(shí)有許多問(wèn)題,我希望能擺脫微軟的控制,將軟件部署在Linux或Unix服務(wù)器上,LAMP(Linux+Apache+MySQL+PHP)組合方案就是我所需要的。PHP除了擁有學(xué)習(xí)快,上手容易這些基本的優(yōu)勢(shì)外,PHP開(kāi)源社區(qū)非?;钴S,你可以輕松的找到各種開(kāi)源的PHP項(xiàng)目,幾乎所有Web相關(guān)的開(kāi)源項(xiàng)目中最著名的都是PHP語(yǔ)言開(kāi)發(fā)的,比如 WordPress、Drupal、PrestaShop、Joomla、Opencart等,數(shù)不勝數(shù)。
選擇Java
后來(lái),我開(kāi)始帶領(lǐng)團(tuán)隊(duì),成為了公司開(kāi)發(fā)團(tuán)隊(duì)的小頭目,我不能只專心于自己的開(kāi)發(fā)工作,需要考慮整個(gè)團(tuán)隊(duì)的工作需要。PHP開(kāi)發(fā)公司經(jīng)營(yíng)的網(wǎng)站非常有效,但是團(tuán)隊(duì)里有一些項(xiàng)目的需求方會(huì)要求使用他們指定的開(kāi)發(fā)語(yǔ)言,比如Java。在當(dāng)時(shí),Java被認(rèn)為是最穩(wěn)定、最安全、最標(biāo)準(zhǔn)的解決方案,許多開(kāi)發(fā)領(lǐng)域的大神們也非常推崇Java,J2EE幾乎是政府、金融等領(lǐng)域大型項(xiàng)目的標(biāo)準(zhǔn)解決方案。出于市場(chǎng)需要,我不得不讓自己和團(tuán)隊(duì)學(xué)習(xí)和掌握J(rèn)ava以便于能夠有更多的項(xiàng)目機(jī)會(huì)。
選擇Python
Java本身很優(yōu)秀,再加上活躍的社區(qū)、完善的第三方框架和庫(kù),但是總讓我覺(jué)得太麻煩(或者是我越來(lái)越懶),團(tuán)隊(duì)常常會(huì)有一些簡(jiǎn)單的工作任務(wù),于是我選擇了Python來(lái)做這些簡(jiǎn)單的工作。Python的簡(jiǎn)單出乎預(yù)料,剛開(kāi)始學(xué)習(xí)的一段時(shí)間,我非常迷戀Python,它讓編程變得如此簡(jiǎn)單,并且它歷史悠久,擁有非常豐富的開(kāi)源資源,Web、桌面、服務(wù)器領(lǐng)域的開(kāi)發(fā)都有它的身影。
Python是我非常喜歡的語(yǔ)言,但是它的性能問(wèn)題是我的心結(jié),盡管如《黑客與畫(huà)家》作者所說(shuō),程序的運(yùn)行性能往往不是編程語(yǔ)言導(dǎo)致,而且未來(lái)計(jì)算機(jī)硬件的發(fā)展速度會(huì)讓編程語(yǔ)言的性能差異越來(lái)越微不足道,但如果能有一門(mén)語(yǔ)言能夠像Python那么簡(jiǎn)單又同時(shí)具備靜態(tài)語(yǔ)言的性能豈不更好。
很幸運(yùn),我在那段時(shí)間,遇到了Golang。
選擇Go
我非??粗匾婚T(mén)語(yǔ)言的入門(mén)門(mén)檻。我所在的團(tuán)隊(duì)并不大,我們需要精打細(xì)算每一個(gè)時(shí)間成本的投入,學(xué)習(xí)和進(jìn)步是必須的,但是也需要切實(shí)的考量成本問(wèn)題。
Golang入門(mén)非常快,當(dāng)時(shí)我獨(dú)自學(xué)習(xí)大概花了一周時(shí)間(我還要保持其他工作正常完成),然后我收集整理學(xué)習(xí)資料,再組織團(tuán)隊(duì)的其他成員學(xué)習(xí),整個(gè)開(kāi)發(fā)團(tuán)隊(duì)學(xué)習(xí)Golang非常的快,無(wú)論他們以前擅長(zhǎng)Java、C++或是其他語(yǔ)言,都能很快的上手。
我有一個(gè)好朋友,曾經(jīng)共事過(guò)一段時(shí)間,后來(lái)這位朋友專心于前端開(kāi)發(fā)領(lǐng)域。有一次我們討論團(tuán)隊(duì)配合的問(wèn)題,討論到前后端API開(kāi)發(fā)的一些事情,當(dāng)時(shí)我提到了Golang,我朋友看了一些簡(jiǎn)單的介紹和范例后問(wèn)了我一個(gè)問(wèn)題 “作為腳本語(yǔ)言,Golang與Python、NodeJS比起來(lái)有什么優(yōu)勢(shì)?”。聽(tīng)到這個(gè)問(wèn)題,我非常高興,原因是我的朋友把Golang當(dāng)作了腳本語(yǔ)言(我的這位朋友也有多年的開(kāi)發(fā)經(jīng)驗(yàn),而且在前端領(lǐng)域也是相當(dāng)厲害的大神了),這至少說(shuō)明作為靜態(tài)語(yǔ)言的Golang給人的初步影響是簡(jiǎn)單清晰的,如同腳本語(yǔ)言(動(dòng)態(tài)語(yǔ)言)一樣。
Golang的性能很好,根據(jù)官方的描述以及其他人的測(cè)試結(jié)果來(lái)看,它的運(yùn)行性能僅次于C/C++。當(dāng)然,會(huì)有很多人認(rèn)為這并不絕對(duì)有用,性能問(wèn)題還是得根據(jù)具體的代碼環(huán)境而言,純粹的循環(huán)IO沒(méi)有意義。不過(guò)一個(gè)語(yǔ)法上像腳本語(yǔ)言一樣簡(jiǎn)單的高性能靜態(tài)語(yǔ)言,對(duì)程序猿來(lái)說(shuō)還是很有吸引力的。
最后
- 隨著團(tuán)隊(duì)和我的成長(zhǎng),我們的項(xiàng)目需要能夠運(yùn)行在不同操作系統(tǒng)的服務(wù)器上,甚至有一些需要運(yùn)行在客戶機(jī)上,而不需要讓用戶安裝額外的虛擬機(jī)或解釋器;
- 現(xiàn)在的需求提供方也更加理性、專業(yè),不再把指定開(kāi)發(fā)語(yǔ)言放在需求清單中;
- 我們的團(tuán)隊(duì)依然不大(就算大,也沒(méi)有必要浪費(fèi)),所以我們需要一種編程語(yǔ)言可以同時(shí)勝任大型項(xiàng)目開(kāi)發(fā)、日常維護(hù)工具開(kāi)發(fā)、Web服務(wù)端API開(kāi)發(fā);
- 我們需要一種可靠的編程語(yǔ)言,開(kāi)源、社區(qū)發(fā)展迅速、有像Google這樣的科技巨頭的支持
所以,我選擇Golang
歡迎大家簡(jiǎn)書(shū)或我的個(gè)人博客與我交流