有位C++的大神在講課時提到了Python, 聽課的同學(xué)問道: 我是不是需要學(xué)習(xí)一下Python?
大神說:“Python 這么簡單還用學(xué)嗎? ”
在大神的眼中, 像Python這樣簡單的語言, 看半天就應(yīng)該能上手編程了, 根本不用戰(zhàn)戰(zhàn)兢兢地抱著一本大厚書去啃。
大神是有資格這么說,畢竟C++是一門非常復(fù)雜的語言, 這么復(fù)雜的都能搞定, 其他的自然不在話下。
從純語言的角度來看,這么說完全是沒有問題的,我相信很多人,如果你學(xué)會了一門編程語言,開始學(xué)第二門的時候,都會有類似的感覺。
比如你學(xué)會了Java, 然后開始看Python, 會發(fā)現(xiàn)有很多相似之處。
例如: 編程中最常用的一些數(shù)據(jù)結(jié)構(gòu)非常相像:
PythonJava
String
String
List List
ArrayList, LinkedList 等
DictionaryMap
HashMap, TreeMap,LinkedHashMap等
SetSet
HashSet, TreeSet, LinkedHashSet 等
流程控制語句也很像,無非都是if...else , for , while 等等。
面向?qū)ο蟮木幊潭家蓄惡蛯ο螅蓡T變量,成員方法,都要有封裝、繼承、多態(tài)。
文件IO也是如此,無非就是打開一個文件,定位到某個地方進(jìn)行讀寫操作,關(guān)閉文件。
每個高級語言都支持多線程編程, Python也不例外,可以輕松地創(chuàng)建線程,線程之間也有同步和互斥, 也使用ThreadLocal來保存每個線程獨有的數(shù)據(jù), 名稱都和Java一樣。
網(wǎng)絡(luò)編程無非就是Socket, XML解析就是DOM和SAX, 郵件發(fā)送使用SMTP, POP3......
所以有了一門語言相對復(fù)雜的語言做基礎(chǔ)(如Java), 再去學(xué)習(xí)Python, 確實非常容易。 半天時間就能把Python看個差不多,然后直接就可以寫程序了, 在寫的過程中如果哪個地方不清楚了, API接口名稱忘記了(尤其是那些細(xì)微差別的地方),去翻參考書、去網(wǎng)上搜,很快搞定。
剛開始編程的時候比較慢, 等你熟練了以后,會越來越快。
一門高級語言的基礎(chǔ)概念其實就那么多:數(shù)據(jù)類型、集合、流程控制、面向?qū)ο?、文件、Socket、XML、JSON 等, 你從某一門語言中學(xué)會了,切換到另外一門,所要變換的無非就是基本的語法、API接口、慣用法和最佳實踐。
可能有人要說了,這些都是基礎(chǔ)的東西,只能讓我寫點小程序,做不了什么大事啊。
沒錯,這些東西都是基礎(chǔ),想做出有用的程序,還必須得學(xué)會使用類庫和框架。但是不同類庫和框架所依賴的基礎(chǔ)知識和概念也是相通的。
就拿Web編程來說,必須要掌握幾個基礎(chǔ)知識是一樣的:HTTP協(xié)議,HTML, Javascript, CSS,SQL。 然后不同語言,不同框架要解決的問題也是一樣的:
URL 和 代碼的映射
數(shù)據(jù)的驗證、轉(zhuǎn)換和綁定
Web安全
數(shù)據(jù)庫的訪問, O/R Mapping
用什么技術(shù)來生成Web頁面?
如何把對象變成XML或者JSON字符串?
通過一門語言,把這些基本原理掌握了,換到另外一個語言和框架,真的不難 。
如果再向上走,進(jìn)入設(shè)計層面,把業(yè)務(wù)需求抽象成各種概念,設(shè)計高內(nèi)聚、低耦合的模塊,那和具體的語言關(guān)聯(lián)度就更小了。
回到文章最初的話題,我其實想表達(dá)的是:不用著急去追逐那些熱門的編程語言,只要把一門語言學(xué)精了,把一些基礎(chǔ)概念和基礎(chǔ)知識掌握了,再去學(xué)別的,真的不難, 就是一個知不知道,熟不熟練的問題。
特別要注意一些無良的機(jī)構(gòu),掛羊頭賣狗肉,什么火熱就培訓(xùn)什么,人工智能, VR, 物聯(lián)網(wǎng),云計算, 吸引人交錢入坑,真的開始學(xué)了發(fā)現(xiàn)只是學(xué)習(xí)一下Python而已。當(dāng)然了高薪就業(yè)是每個人的夢想,
傳智播客的python培訓(xùn)課程結(jié)合時下熱門的人工智能技術(shù),讓每個人成為實戰(zhàn)程序員。自然高薪。