地產(chǎn)大佬潘石屹:人生苦短,我要學(xué)Python
房地產(chǎn)大佬潘石屹,突然決定學(xué) Python 了。
「人生苦短,我學(xué) Python」是眾多和計(jì)算機(jī)科學(xué)有些接觸的同學(xué)耳熟能詳?shù)亩巫?,不過最近這一風(fēng)潮有了蔓延的趨勢。11 月 14 日,著名房地產(chǎn)商、SOHO 中國董事長潘石屹在微博上發(fā)表了一段宣言:
潘石屹的大名常會(huì)出現(xiàn)在很多新聞報(bào)道中。在 2019 年福布斯全球億萬富豪榜上,張欣、潘石屹家族排名第 107 位,財(cái)富值 215.7 億元人民幣。年過 50 的房地產(chǎn)老總,現(xiàn)在也要搞人工智能了嗎?這一消息迅速引來人們的關(guān)注和轉(zhuǎn)發(fā)。
或許是為自己學(xué)習(xí) Python 的行為進(jìn)行充分解釋,又或許是想號召更多人加入這一行列。在發(fā)出「我要學(xué) Python」這條微博一天以后,潘總又為學(xué)習(xí) Python 找到了一些理由。
潘石屹認(rèn)為 Python 是計(jì)算機(jī)語言里「進(jìn)化最好的一種」
很多人都知道,隨著人工智能和數(shù)據(jù)科學(xué)的快速發(fā)展,Python 正在成為計(jì)算機(jī)領(lǐng)域里最流行的編程語言。在今年 9 月 IEEE 最新發(fā)布的編程語言排行榜中,Python 在趨勢、開源、職位需求等方面均排在第一。
當(dāng)然,Python「職位需求大」顯然跟潘總沒什么關(guān)系。在知乎上,人們對于這一事件展開了討論,有人指出在地產(chǎn)行業(yè)里,收集、分析數(shù)據(jù)正在變得越來越重要。使用 Python 語言進(jìn)行爬蟲、數(shù)據(jù)分析、機(jī)器學(xué)習(xí)算法預(yù)測是非常重要的技能。至少在學(xué)會(huì)這門編程語言后,潘總可能就不再會(huì)那么容易被 ppt 上的數(shù)字騙了。
潘石屹曾經(jīng)研究過攝影、木工,如今又開始進(jìn)入編程領(lǐng)域,其背后肯定有著很深的思考。
潘石屹大佬都選擇學(xué)習(xí) Python,究竟為什么有這么大的魔力?與其他一些編程語言相比,Python 語言又具備哪些顯著的優(yōu)勢呢?
Python 語言簡單易用、邏輯明確并擁有海量的擴(kuò)展包,因此不僅成為機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)的首選語言,同時(shí)在網(wǎng)頁、數(shù)據(jù)爬取可科學(xué)研究等方面成為不二選擇。此外,很多入門級的機(jī)器學(xué)習(xí)開發(fā)者都是跟隨大流選擇 Python。
具體而言,與其他編程語言相比,Python 具有以下幾方面的特征:
其一,Python 相對易于學(xué)習(xí)。我們都清楚,編程很難,因此從絕對意義上來說,除非你已經(jīng)擁有編程經(jīng)驗(yàn),否則編程語言難以學(xué)習(xí)。但相對而言,Python 的高級屬性、語法可讀性和語義直白性使得它比其他語言更容易學(xué)習(xí)。Python 社區(qū)非常強(qiáng)調(diào)遵循樣式規(guī)定和編寫「Python 式的」代碼,這意味著相比使用其他語言的程序員而言,Python 程序員更傾向于使用一致的命名規(guī)定、行的長度、編程習(xí)慣和其他許多類似特征,它們共同使別人的代碼更易閱讀。
其二,Python 是一種高級語言。與其他許多語言相比,Python 是一種相對「高級」的語言:它不需要(并且在許多情況下,不允許)用戶擔(dān)心太多底層細(xì)節(jié),而這是其他許多語言需要去處理的。此外,Python 傾向于隱藏需要在底層語言中明確表達(dá)的各種死記硬背的聲明。這使得我們可以編寫非常緊湊、清晰的代碼。
其三,Python 是一種通用語言。根據(jù)設(shè)計(jì),Python 是一種通用的語言。也就是說,它旨在允許程序員在任何領(lǐng)域編寫幾乎所有類型的應(yīng)用,而不是專注于一類特定的問題。在這方面,Python 可以與(相對)特定領(lǐng)域的語言進(jìn)行對比,如 R 或 PHP。這些語言原則上可用于很多情形,但仍針對特定用例進(jìn)行了明確優(yōu)化。
其四,Python 是一種(相對)快速的語言。從表面上看,Python 是一種快速語言的說法看起來很愚蠢。因?yàn)樵跇?biāo)準(zhǔn)測試時(shí),和 C 或 Java 這樣的編譯語言相比,Python 通常會(huì)卡頓。毫無疑問,如果速度至關(guān)重要,Python 可能不會(huì)成為你最優(yōu)選擇的語言,甚至不會(huì)是第二好的語言。但在實(shí)際中,許多科學(xué)家工作流程中的限制因素不是運(yùn)行時(shí)間而是開發(fā)時(shí)間。一個(gè)花費(fèi)一個(gè)小時(shí)運(yùn)行但只需要 5 分鐘編寫的腳本通常比一個(gè)花費(fèi) 5 秒鐘運(yùn)行但是需要一個(gè)禮拜編寫和調(diào)試的腳本更合意。
其五,Python 是天生面向?qū)ο蟮?。即使你正在做的只是編寫一些簡短的腳本去解析文本或挖掘一些數(shù)據(jù),Python 的許多好處也很容易領(lǐng)會(huì)到。在你開始編寫相對大型的代碼片段前,Python 的最佳功能之一可能并不明顯:Python 具有設(shè)計(jì)非常優(yōu)雅的基于對象的數(shù)據(jù)模型。事實(shí)上,如果你查看底層,你會(huì)發(fā)現(xiàn) Python 中的一切都是對象。甚至函數(shù)也是對象。
最后,很多人選擇 Python 是沖著 Python 社區(qū)的。在這里,Python 學(xué)習(xí)者既可以自由地獲得服務(wù)和 Python 資源,相互之間也可以進(jìn)行自由的互動(dòng)和交流。
Python 入門:把大象裝進(jìn)冰箱總共分幾步?
既然 Python 是一門非常重要的編程語言,那么入門它有多難?在很多人看來,Python 是一門用較短時(shí)間就能掌握的編程語言。至于學(xué)習(xí) Python 的時(shí)間,有人說是一個(gè)月,有人說是一周,還有人說一天就行。當(dāng)然,學(xué)習(xí) Python 也需要一點(diǎn)計(jì)算機(jī)理論知識(shí)和編程實(shí)踐經(jīng)驗(yàn)作為基礎(chǔ),但一天之內(nèi)上手 Python 的人確實(shí)不在少數(shù)。
這里介紹一種「一個(gè)月從入門到精通」的學(xué)習(xí)方法??此铺鞌?shù)不多,但如果每天都拿出 6-7 個(gè)小時(shí)認(rèn)真學(xué)習(xí),也是能精進(jìn)不少的,而且能夠有一個(gè)比較扎實(shí)的基礎(chǔ)。
首先你要確定好目標(biāo),第一個(gè)月的目標(biāo)最好不要太過「沉重」,比如:
- 熟悉基本概念(變量,條件,列表,循環(huán),函數(shù))
- 練習(xí)超過 30 個(gè)編程問題
- 利用這些概念完成兩個(gè)項(xiàng)目
- 熟悉至少 2 個(gè)框架
- 開始使用集成開發(fā)環(huán)境(IDE),Github,hosting,services 等
然后我們應(yīng)該把這個(gè)月度計(jì)劃細(xì)化為周計(jì)劃,再將周計(jì)劃拆分為天計(jì)劃,這樣才能更好地落實(shí):
第一周:熟悉 Python
- 第一天:基本概念(4 小時(shí)):print,變量,輸入,條件語句;
- 第二天:基本概念(5 小時(shí)):列表,for 循環(huán),while 循環(huán),函數(shù),導(dǎo)入模塊;
- 第三天:簡單編程問題(5 小時(shí)):交換兩個(gè)變量值,將攝氏度轉(zhuǎn)換為華氏溫度,求數(shù)字中各位數(shù)之和,判斷某數(shù)是否為素?cái)?shù),生成隨機(jī)數(shù),刪除列表中的重復(fù)項(xiàng)等等;
- 第四天:中級編程問題(6 小時(shí)):反轉(zhuǎn)一個(gè)字符串(回文檢測),計(jì)算最大公約數(shù),合并兩個(gè)有序數(shù)組,猜數(shù)字游戲,計(jì)算年齡等等;
- 第五天:數(shù)據(jù)結(jié)構(gòu)(6 小時(shí)):棧,隊(duì)列,字典,元組,樹,鏈表;
- 第六天:面向?qū)ο缶幊蹋∣OP)(6 小時(shí)):對象,類,方法和構(gòu)造函數(shù),面向?qū)ο缶幊讨^承;
- 第七天:算法(6 小時(shí)):搜索(線性和二分查找)、排序(冒泡排序、選擇排序)、遞歸函數(shù)(階乘、斐波那契數(shù)列)、時(shí)間復(fù)雜度(線性、二次和常量)。
在第一周的學(xué)習(xí)結(jié)束后,千萬不要急著安裝 Python 環(huán)境,因?yàn)楹芏嗳硕荚谡Z言工具包和 IDE 安裝失敗后逐漸失去了學(xué)習(xí)欲望。你可以使用幾個(gè)安卓 App 來繼續(xù)探索,比如編程英雄或者在線代碼游樂場、 Repl等等
第二周:開始軟件開發(fā)(構(gòu)建項(xiàng)目)
如果你在第一周已經(jīng)夯實(shí)了基礎(chǔ),那么第二周就可以朝著軟件開發(fā)任務(wù)進(jìn)軍了:
- 第一天:熟悉一種 IDE(5 小時(shí)): IDE 是你在編寫大型項(xiàng)目時(shí)的操作環(huán)境,所以你需要精通一個(gè) IDE。在軟件開發(fā)的初期,我建議你在 VS code 中安裝 Python 擴(kuò)展或使用 Jupyter notebook;
- 第二天:Github(6 小時(shí)):探索 Github,并創(chuàng)建一個(gè)代碼倉庫。嘗試提交(Commit)、查看變更(Diff)和上推(Push)你的代碼。另外,還要學(xué)習(xí)如何利用分支工作,如何合并(merge)不同分支以及如何在一個(gè)項(xiàng)目中創(chuàng)建拉取請求(pull request);
- 第三天:第一個(gè)項(xiàng)目——簡單計(jì)算器(4 小時(shí)):熟悉 Tkinter,創(chuàng)建一個(gè)簡單的計(jì)算器;
- 第四、五、六天:個(gè)人項(xiàng)目(每天 5 小時(shí)):選定一個(gè)項(xiàng)目并完成它;
- 第七天:托管項(xiàng)目(5 小時(shí)):學(xué)習(xí)使用服務(wù)器和 hosting 服務(wù)來托管你的項(xiàng)目。創(chuàng)建一個(gè) Heroku 設(shè)置并部署你構(gòu)建的應(yīng)用程序。
在第二周接觸項(xiàng)目是為了讓你獨(dú)立思考,學(xué)會(huì)將課程中的理論轉(zhuǎn)化到實(shí)際應(yīng)用當(dāng)中去。
第三周:讓自己成為一名程序員
第 3 周的目標(biāo)是熟悉軟件開發(fā)的整體過程。這個(gè)階段不用掌握所有的知識(shí),但是應(yīng)該初步了解一些常識(shí):
- 第一天:數(shù)據(jù)庫基礎(chǔ)(6 小時(shí)):基本 SQL 查詢(創(chuàng)建表、選擇、Where 查詢、更新)、SQL 函數(shù)(Avg、Max、Count)、關(guān)系數(shù)據(jù)庫(規(guī)范化)、內(nèi)連接、外連接等
- 第二天:使用 Python 數(shù)據(jù)庫(5 小時(shí)):利用一種數(shù)據(jù)庫框架(SQLite 或 panda),連接到一個(gè)數(shù)據(jù)庫,在多個(gè)表中創(chuàng)建并插入數(shù)據(jù),再從表中讀取數(shù)據(jù);
- 第三天:API(5 小時(shí)):如何調(diào)用 API。學(xué)習(xí) JSON、微服務(wù)(micro-service)以及表現(xiàn)層應(yīng)用程序轉(zhuǎn)換應(yīng)用程序接口(Rest API);
- 第四天:Numpy(4 小時(shí)):熟悉 Numpy并練習(xí)前 30 個(gè) Numpy 習(xí)題:https://github.com/rougier/numpy-100/blob/master/100_numpy_excercises.md;
- 第五、六天:作品集網(wǎng)站(一天 5 小時(shí)):學(xué)習(xí) Django,使用 Django 構(gòu)建一個(gè)作品集網(wǎng)站(https://realpython.com/get- start-with-django -1/),也要了解一下 Flask 框架;
- 第七天:單元測試、日志、調(diào)試(5 小時(shí)):學(xué)習(xí)單元測試(PyTest),如何設(shè)置和查看日志,以及使用斷點(diǎn)調(diào)試。
第四周:認(rèn)真考慮工作(實(shí)習(xí))問題
第 4 周的目標(biāo)是認(rèn)真思考如何用 Python 拿到 offer。即使你現(xiàn)在不想找工作,你也可以在這個(gè)過程中思考出很多有價(jià)值的結(jié)論。
- 第一天:準(zhǔn)備簡歷(5 小時(shí)):制作一份一頁的簡歷。把你的技能總結(jié)放在最上面,必須在寫項(xiàng)目的同時(shí)附上 Github 鏈接;
- 第二天:作品集網(wǎng)站(6 小時(shí)):寫幾個(gè)博客,將它們添加到你之前開發(fā)的作品集網(wǎng)站中;
- 第三天:LinkedIn 簡介(4 小時(shí)):創(chuàng)建一個(gè) LinkedIn 個(gè)人簡介,把簡歷上的所有內(nèi)容都放到 LinkedIn 上;
- 第四天:面試準(zhǔn)備(7 小時(shí)):準(zhǔn)備一些谷歌常見的面試問題,練習(xí)白皮書中的 10 個(gè)面試編程問題。在 Glassdoor、Careercup 等網(wǎng)站中查看前人遇到的面試問題;
- 第五天:社交(~小時(shí)):走出房門,開始參加聚會(huì)、招聘會(huì),與其他開發(fā)人員和招聘人員見面;
- 第六天:工作申請(~小時(shí)):搜索「Python Job」,查看 LinkedIn Job 和本地求職網(wǎng)站。選擇 3 個(gè)工作崗位并發(fā)送工作申請。為每個(gè)工作定制你的簡歷。在每個(gè)工作要求中找出 2 到 3 件你不知道的事情,并在接下來的 3-4 天里學(xué)會(huì)它們;
- 第七天:在拒絕中學(xué)習(xí)(~小時(shí)):每次你被拒絕的時(shí)候,找出兩件為了獲得這份工作你應(yīng)該知道的事情,然后花 4-5 天 的時(shí)間來掌握它們。這樣,每次拒絕都會(huì)讓你成為更好的開發(fā)人員。
以上是一個(gè)非常完美的學(xué)習(xí)周期,時(shí)間是 28 天。如果你是名課程繁重的學(xué)生、或者是需要花很多精力去參加社會(huì)活動(dòng)的職場人士,抑或你和潘石屹一般今年也已經(jīng) 56 歲了——這個(gè)學(xué)習(xí)周期也可以拉長,但是要記住,不能半途而廢。