上大學時學習了C,C++,Java,後來工作中一直是Java開發,今年轉行Python開發。覺得Python是門學了不後悔的語言,而且入門相對比較容易。剛轉行的時候因為有其他語言的基礎看了一周文法和架構就進項目了。經常有讀者問我轉行學什麼語言好,我會毫不猶豫的推薦Python,因為他真的很強大。對于Python語言有很多小夥伴一直存在一些誤解,整理了一下自己的觀點還有網上的資料,供大家參考
今天不讨論xx是最好的語言,因為程式員都是非常real的。讨論這樣一個話題是不會有結果的,借用微軟Dmitry Kakurin的話說“這是一種信仰問題。是以,任何講道理和争論都會無窮無盡,而且也毫無意義……”,存在即合理,孰好孰壞在不同的應用場景下還真不好說。程式設計語言沒必要太認真,選擇能解決自己問題的就好。當然作為一個程式員不可能隻關注一門語言,如果不提升自己,那發展空間也就基本确定了。
近年來Python進入越來越多人的視野,論壇也時不時的會曝出Python超過xx語言。Pyton語言作為AI屆的‘網紅’,前段時間被要将Python加入聯考的新聞刷屏,2017年2月Python也正式遷移到全球最大同性交友平台(GitHub)上。如果大家身處網際網路,一定能夠切身地感受到Python語言的流行程度。Python語言由于其簡單易學、文法優美、應用領域廣泛等諸多優點,俘獲了大批的粉絲。
下圖是我從百度指數上獲得的資料

在2014年之前Python搜尋指數很低,14年之後搜尋指數增加幅度很大,17年的時候甚至超過了老大哥Java。很多人認為Python是近幾年才出現的語言,其實Python在1989年就出現了。
1989年聖誕,Monty Python"s Flying Circus停播。Guido打算找點其他的事情打發自己的聖誕假期,于是他就發明了python語言。-- 或許這就是大佬吧
直到1991年才正式發行,算起來比Java還要早。Python默默的修煉自己,終成大器。能被這麼多Coder喜愛,自然有它獨特的魅力。
python之父--Guido van Rossum
Python跟Java非常的相似,兩者都是開源、面向對象語言而且都是跨平台的。Java跨平台是依賴于JVM(Java虛拟機)而Python的跨平台是自身語言特性決定的。Python都被稱為腳本語言或者膠水語言,在腳本方面确實處于領先地位,但不能忽略它如今也是一門獨立的程式設計語言,實際上他也有非常豐富的開發架構、第三方庫,無論在功能還是靈活性上并不亞于其他語言。
除了web開發中我們有Django、Flask、Sanic、Tornado等架構的幫助。Python也應用于學術研究及科學領域,因為Python有很強大的庫和簡潔的文法,即便是非計算機專業的人也能很快上手。在資料分析方面,Python有Matplotlib和numPy這樣強大的繪圖庫和科學計算庫,這就使得Python在該領域很難被替換。除此之外Python還被應用在機器學習、自然語言處理、大資料、雲計算、爬蟲、神經科學、心理學、電子制造、圖像處理、AI技術等方面都有強大的類庫以及架構。以緻有了“已經沒有任何語言能夠動搖Python在今後生産生活的核心語言地位”的說法。
聊聊Python并發性方面
聊到Python并發,那麼就不能避開GIL(Global Interpreter Lock)。其實GIL并不是Python的特性,它是為了實作Python解析器(CPython)引入的一個概念,官方給出的解釋是:
In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, since the GIL exists, other features have grown to depend on the guarantees that it enforces.)
說白了GIL就是一個全局鎖,這會對多線程的上下文切換有很大的影響,甚至可以說Python就是個單線程的程式。有很多人質疑Python缺乏并發性也是情有可原,但是Python也有很多并發性包和架構。
全局解釋器鎖GIL是在Python大多數使用情況下的性能優化,也是CPython 代碼在開發中的易用性優化。GIL可以讓作業系統的線程或綠色線程使用起來更容易,同時不影響多程序的使用。
目前大量伺服器端軟體采用Python開發,我們也看到Python伺服器每天每台機器有數百萬次的請求,但它們都可以輕松的處理。是以不能說Python缺乏并發行支援。
而且Python開發團隊在去年釋出了基于Python四大路線的修複點
- 縮短Python的啟動時間
- 加速Python的命名元組
- 重構CPython的内部API
- 甩掉Python中的GIL包袱
Python不能做大項目嗎?
豆瓣的崛起就是Python特性的執行個體見證,其創始人僅用了三個月的時間用Python搭建了最初的豆瓣社群架構。豆瓣成立于2005年,那個時候Python真的很冷門,為什麼不選擇當時相對主流的Java或者PHP呢。因為當時如果不選擇Python需要自己處理大量的工作,一個人短時間内完成一個功能齊全的網站是基本不可能的,是以Python就成了不二選擇,在國内大網站中不光豆瓣、比如知乎、網易、百度、阿裡、洋芋、新浪等都是用Python語言開發的
Instagram的注冊使用者達到了30億,月活使用者超過8億(作為對比,微信月活使用者為9.38億),每天億萬次的點選。在這麼龐大的資料後面竟然完全是靠以慢著稱的Python+Django。時至今日,即使已經擁有超過 30 億的注冊使用者。Instagram 仍然是 Python 和 Django 的重度使用者。Instagram 的工程師 Hui Ding 說到: 『一直到使用者 ID 已經超過了 32bit int 的限額(約為 20 億),Django 本身仍然沒有成為我們的瓶頸所在。』
什麼是大項目? 說白了現在我們認為的大項目随着技術發展和Coder能力、眼界的提升,再回頭來看可能就是一個小項目。直接的說,隻要人牛逼啥都不是問題。正如erlang的作者所說的一樣,維護簡單與否主要在于你是否能快速定位到你要修改的代碼。這同語言沒有關系,隻要保證清晰的結構就行。
Python :我不想這麼優秀!
Python确實存在的不足:
大家應該也都知道程式設計語言中,運作速度最快的是C,Python運作速度慢衆人皆知。其實這都不是事,Python運作慢,但是代碼量非常少。幾十行代碼就能做到C幾百行才能做到的東西。
究其原因,C是編譯語言而Python是解釋性語言,編譯語言和解釋語言,從本質上來說就是完全不同的:編譯語言能最終直接對應到機器碼。C/C++是典型的編譯語言。
語言僅僅是一個因素,單獨評估一個語言的快和慢,有時并不恰當。應該對一個應用程式,最好是針對一個特定的用例進行評估。比如用Java,Python同樣實作一個軟體進行評估。由于Python可以和C、C++很好的互相調用,對于真正需要性能的地方可以使用C、C++進行擴充,然後需要提高編碼效率的地方用Python實作,這樣寫出的整體軟體可能比Java快。而實際上Python從設計之初就把開發者的效率放在第一位。
Python程式員稀缺
Python在國内流行較晚,不可否認Python開發的數量比Java、PHP的Coder要少很多。就包括某些二三線城市的Python開發崗位屈指可數,這可能是由于行業需求和教育的關聯導緻的,但從目前的教育趨勢表明這很有可能會被改變。據招聘網站資料顯示,平均每月Python招聘人數需求12331人,在金九銀十的招聘旺季需求一度高達20600人。既然選擇成為一名網際網路人,不管你現在是從事的是什麼語言,不管你要選擇學習什麼語言。要相信自己的判斷,程式員一輩子要用到很多語言&&技術。多花時間投資自己,是永遠不會錯的!
總結
Life is short, you need Python
Python使用場景廣泛,衆多初創公司技術選型方面首選Python作為開發語言,雖然大部分公司失敗了,但也催生了Python在國内大火的景象,Python開發效率極高,但是運作速度是很多程式員诟病Python的主要原因。近幾年随着PyPy解釋器的不斷提升,Python在某些場景下的運作速度直逼C,是以未來速度可能根本不是問題。
近年Python開發工程師崗位數量激增。從業人員薪水還算不錯,是以一定會有大量的初學者入場,平均薪資被拉低也是必然。從業有風險,入行需謹慎。我們要成為的不是語言專家,而是要努力成為領域的專家,語言沒落了可以再換,如果沒有紮實的基礎,恐怕也要随着語言一起被淘汰。練武功既要練招式,也要練内功,讨論程式設計語言别太認真,選合适的解決自己問題的語言就好。
原文釋出時間為: 2018-11-07
本文作者:程式員共成長
本文來自雲栖社群合作夥伴“
程式員共成長”,了解相關資訊可以關注“
”。