本文發(fā)布于微信公眾號(hào):三玹
你知道現(xiàn)在的編程總共有多少門嗎?
這個(gè)問(wèn)題整得我橫豎睡不著,打開(kāi)電腦一查,從字里行間只看到了兩個(gè)字,“很多”!
是的,現(xiàn)在的編程語(yǔ)言可以說(shuō)是汗牛充棟、不計(jì)其數(shù)。甭說(shuō)所有,就現(xiàn)在常用的十幾二十種編程語(yǔ)言,就足夠一個(gè)人窮極一生去了解、研究,而且都未必樣樣都學(xué)得精通。
為什么編程語(yǔ)言會(huì)如此之多呢?
在網(wǎng)上有這么一個(gè)梗,恰好說(shuō)明了這種現(xiàn)狀:很久以前有個(gè)年輕人,來(lái)到了編程界。當(dāng)看到這方世界竟然秩序混亂,久久不能統(tǒng)一。不忍看到這個(gè)世界再繼續(xù)混亂下去,于是年輕人許下豪言壯志,誓要做出一套可以一統(tǒng)編程界的語(yǔ)言。
后來(lái),編程界就又多了一門編程語(yǔ)言……
回歸正題,什么是編程?
顧名思義,編程就是編寫程序,也就是程序員將解決問(wèn)題的步驟用編程語(yǔ)言編寫成代碼程序,然后交給計(jì)算機(jī)去執(zhí)行運(yùn)算,從而達(dá)到計(jì)算機(jī)可以重復(fù)解決問(wèn)題的目的。
打個(gè)比喻:假如程序是一本菜譜,那么程序員就是寫菜譜的大廚,編寫代碼的過(guò)程就是在寫菜譜。而不會(huì)做菜的人就是計(jì)算機(jī),他們收到了大廚寫的菜譜,按照上面條令執(zhí)行,至少能做出像模像樣的菜。
而編程語(yǔ)言就是大廚寫菜譜時(shí)所使用的語(yǔ)言。比如大廚是中國(guó)人,那么他寫菜譜時(shí)所用的語(yǔ)言是漢語(yǔ)。如果是俄羅斯人,那他用的是俄語(yǔ)。那么,想讓普通的俄羅斯人也能看懂中國(guó)大廚寫的菜譜,首先需要將中國(guó)大廚寫的菜譜用俄語(yǔ)翻譯一遍。翻譯的這一過(guò)程,在計(jì)算機(jī)中也被稱之為編譯。
目前,主流的、且工作上用得比較多的編程語(yǔ)言有:C、Java、Python、C++、C#、JavaScript、SQL、Ruby、PHP、Go、Swift等等。如此眾多的編程語(yǔ)言,它們之間也是各有不同,按照編譯以及運(yùn)行方式可以分出以下兩大類:
編譯型語(yǔ)言
代表語(yǔ)言:C、C++、C#、Go等。
通常是將代碼一次性全部編譯為二進(jìn)制碼(計(jì)算機(jī)看得懂的語(yǔ)言:10010101),然后再一次執(zhí)行。
編譯型語(yǔ)言的優(yōu)勢(shì)就在于執(zhí)行速度要比解釋型語(yǔ)言快得多,而且消耗的內(nèi)存也更少。
缺點(diǎn)在于編譯器遠(yuǎn)比解釋器要難得多,而且在調(diào)試過(guò)程中,編譯器往往提供不了太多的幫助,同時(shí)編譯型程序是面向特定平臺(tái),對(duì)平臺(tái)有一定的依賴性。
解釋型語(yǔ)言
代表語(yǔ)言:Python、Java、JavaScript等。
有專門的解釋器。首先將代碼翻譯為中間代碼,然后交給解釋器對(duì)中間代碼進(jìn)行解釋運(yùn)行,編譯一行,運(yùn)行一行。
解釋型語(yǔ)言最大的優(yōu)勢(shì)是具有平臺(tái)獨(dú)立性,不受限于任意平臺(tái),對(duì)平臺(tái)的依賴性沒(méi)那么高。只需要擁有相應(yīng)的解釋環(huán)境,就可以在任意平臺(tái)使用。
缺點(diǎn)就在于解釋型應(yīng)用會(huì)占用更多的內(nèi)存和CPU資源,同時(shí)解釋型應(yīng)用需要進(jìn)行【解碼-抓取-運(yùn)行】的周期,因而整體速度要比編譯型程序要慢很多。
把這兩個(gè)大類比作是兩個(gè)工廠。
A工廠是編譯型語(yǔ)言,一次性將所有產(chǎn)品都做好了,然后上交給相關(guān)部門進(jìn)行檢查。如果產(chǎn)品質(zhì)量過(guò)關(guān),那么A工廠就可以迅速搶占市場(chǎng)。但要是發(fā)現(xiàn)了質(zhì)量不過(guò)關(guān)的,就得重新返工,一個(gè)個(gè)去尋找質(zhì)量不過(guò)關(guān)的產(chǎn)品。
B工廠是解釋型語(yǔ)言,這個(gè)廠的廠長(zhǎng)非常謹(jǐn)慎,每做好一個(gè)產(chǎn)品,就提交一次檢查。雖然這樣的速度會(huì)非常的慢,但勝在保穩(wěn)。如果發(fā)現(xiàn)了錯(cuò)誤,那么及時(shí)將有問(wèn)題的產(chǎn)品返工重做,不需要費(fèi)時(shí)費(fèi)力地去檢測(cè)所有產(chǎn)品的問(wèn)題。
面對(duì)如此眾多的編程語(yǔ)言,該從哪個(gè)開(kāi)始?相信這是許多初學(xué)者的煩惱和顧慮。
其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單。根據(jù)自己的興趣選擇,興趣就是最好的老師。例如你想做游戲,可以入手C++或者C#;想做Web網(wǎng)站系統(tǒng)的,可以選擇Java;想做機(jī)器學(xué)習(xí)的,可以著手Python。
當(dāng)然,如果你不太清楚自己對(duì)什么有興趣,那么我的建議是以下兩點(diǎn):
如果是在校學(xué)生,或者時(shí)間較為充沛,同時(shí)想成為職業(yè)選手的朋友??梢韵葘W(xué)習(xí)C語(yǔ)言入門編程。C語(yǔ)言被稱之為現(xiàn)代編程語(yǔ)言之母,學(xué)習(xí)C語(yǔ)言可以了解一些底層基礎(chǔ),到后面學(xué)其他語(yǔ)言就會(huì)事半功倍。
如果是業(yè)余學(xué)習(xí),或者急于求職的朋友,那么可以根據(jù)興趣或者求職意愿和方向去選擇性學(xué)習(xí)補(bǔ)強(qiáng)。比如要做前端的,重點(diǎn)學(xué)習(xí)JavaScript、TypeScript等;后端系統(tǒng)的,可以學(xué)習(xí)Java、C++;爬蟲、數(shù)據(jù)分析類的,可以學(xué)習(xí)Python。
學(xué)習(xí)最重要的就在于一個(gè)“勤”字,編程學(xué)習(xí)也是一樣的。
勤動(dòng)手,勤思考。如果想要讓自己的編程技術(shù)更快地長(zhǎng)進(jìn),勤敲代碼是必不可少的,畢竟熟能生巧。同時(shí)在敲寫代碼的時(shí)候,加入一點(diǎn)點(diǎn)思考,比如為什么這段代碼是這樣敲的?這樣敲的理由是什么?有沒(méi)有更好的方法讓這段代碼更簡(jiǎn)潔、更好用?在學(xué)習(xí)、練習(xí)的過(guò)程中,多問(wèn)自己幾個(gè)為什么,怎么樣才能做得更好,想得透徹了,那么成長(zhǎng)就只是時(shí)間的問(wèn)題了。