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