我潑點冷水:建議還是要慎重選擇上來新手就自學Python。如果想認認真真打好基礎,還是要至少從Java學起。換句話說,先學會Java,然后再學Python不遲。
Python的最大優勢是簡單明快,最大問題也是簡單明快。
我面試過很多用Python的人,整體水平比用C++和Java的要差不少,尤其是計算機基礎和數據結構方面。我一開始認為是我自己(可能)的偏見,但時間長了發現,常用Python的人,和常用Java、C++的人,編程思維方式都不一樣。
Python最大的問題在于,容易給人一種“計算機編程非常簡單”的錯覺,不需要思考類型,不需要理解容器和數據結構,加上語法精簡,自然就認為“背后的原理很簡單”,也就懶得去深究更深層次的操作系統和數據結構知識。甚至,Python用多了,很多人連數字和字符串都懶得分辨,被我面試算法題時,回答得一塌糊涂。
我們公司大量用Python,似乎是很支持Python語言的學習對吧?
但壞消息是,我們Python很多都是寫Pipeline的,真正的難點和重點都在于Python里面的HIVE SQL語句,Python只是外邊一層薄薄的殼,甚至,不需要任何Python基礎也可以寫code。
更壞的消息是,如果只會Python,基本上很難過面試,因為面試除了要求編程,還要求對計算機的基礎知識、數據結構、系統設計等全方位的理解,那么只會Python的人如何理解Performance、Process VS Thread等?面對算法題時,包括Priority Queue等相對不那么直接的數據結構又如何去理解其實現?
什么時候適合學Python?只是想簡單了解一下“編程是什么”,興趣向的,或是給小孩子玩;
時間緊急,比如要求30天內必須學會一門語言,否則拉出去砍了;
確定不以軟件工程、編程為主要發展方向,只是為了處理數據、調用API等;
已經掌握了其它復雜、基礎的編程語言,或是至少一門OO語言之后;
如果有時間、追求長遠的基礎和效果,建議還是以相對難學、但基礎全面的Java開始。Java稍微有一定成果后,形成相對固定的思維方式,再回頭學Python,不過是小菜一碟。
當然,我完全理解萬事開頭難、Python起手容易這個特點。但是,編程道路上第一門語言特別重要在于,如果長期使用,它會形成人對編程的思維方式。
我怕的是,很多人以Python起手,并且成果非常好,很快就開始寫爬蟲之類的,以為進展極快、效果極好(事實上也的確如此),但之后容易陷入深耕Python方向和這些具體的應用場景,卻忽略了計算機最基礎的知識和原理。這樣即使找到了工作,但工作的難度也不高或是公司底蘊不深,就容易陷入惡性循環:因為技術不深所以只能在三流及以下的公司工作,因為工作經驗不值錢,所以更難跳槽。
如果換一種方式:以Java起步,學一段時間,不說精通但也至少理解和接觸了數據結構和系統等,鞏固具體的思維方式,然后再回頭學習Python可能只用幾天時間,然后再用Python去寫具體的應用來嘗試和“玩”(Play),不是更好些?
所以,這是個定位問題:如果只是計算機愛好者,學一學Python只有好處沒有壞處;但如果長期的目標成為計算機的專業碼農,一開始就要在基礎上下功夫,而不是盡快進入應用和實際層面。
這是因為,一旦進入工作后,基本上沒有多少時間補充基礎知識;反而是應用和實際層面,公司里面到處都是隨時可學。
這也解釋了為什么大公司愿意招募基礎扎實、知識完備的科班出身者,哪怕這人“只會刷題,沒有實際經驗”,而不去招募“10年工作經驗”的人——很多看似工作經驗很多的人,如果只是重復低級勞動,或是了解技術層面非常淺薄的話,那么進入公司后工作經驗并沒有太大用處,成長性可能還真不如基礎扎實的人。