01 Preface 一切與自學(xué)相關(guān)的技巧都是老生常談。 因?yàn)榘?,歷史上留下來(lái)的所有關(guān)于自學(xué)的技巧,都是人類史上最聰明的人留下來(lái)的 —— 你我這樣的人,照做就可以了…… 現(xiàn)在你明白怎么回事兒了吧? 千萬(wàn)不要一不小心就把自己搭進(jìn)去…… 02 Proof-of-work 最主要是要有學(xué)習(xí)過的記錄: 比如學(xué)習(xí)這本書就可以通過github來(lái)體現(xiàn), 那么關(guān)于git的學(xué)習(xí)就要通過 Pro Git來(lái)進(jìn)行 在這里我學(xué)會(huì)了如何向別人的github項(xiàng)目來(lái)進(jìn)行修改并且提交! Fork——修改——commit——pull request 這樣看來(lái)我之前做了太多的無(wú)用功了 git學(xué)習(xí)之Progit: https:///book/zh/v2 git的常用操作命令如下: 03 Part.1.A.better.teachyourself 最有用的一段話: 自學(xué)能力是唯一值得被不斷磨練的長(zhǎng)技。 磨練出自學(xué)能力的好處在于,無(wú)論這世界需要我們學(xué)什么的時(shí)候,我們都可以主動(dòng)去學(xué),并且還是馬上開始 —— 不需要等別人教、等別人帶。 靠什么呢?人么,一個(gè)都靠不上。到最后,我覺得只有一樣?xùn)|西真正可靠 —— 自學(xué)能力。于是,經(jīng)年累月,我磨練出了一套屬于我自己的本領(lǐng):只要我覺得有必要,我什么都肯學(xué),學(xué)什么都能學(xué)會(huì)到夠用的程度…… 編程,我不是靠上課學(xué)會(huì)的;英語(yǔ),不是哪個(gè)老師教我的;寫作,也不是誰(shuí)能教會(huì)我的;教書,更沒有上過師范課程;投資,更沒人能教我 —— 我猜,也沒人愿意教我…… 自己用的東西自己琢磨,挺好。 04 Part.1.B.why.start.from.learning.coding 學(xué)校里的課本,都很嚴(yán)謹(jǐn) —— 任何概念,未經(jīng)聲明就禁止使用。所以,學(xué)完一章,就能學(xué)下一章;跳到某一章遇到不熟悉的概念,往前翻肯定能找到……在學(xué)校里習(xí)慣了這種知識(shí)體系的人,離開學(xué)校之后馬上抓瞎 —— 社會(huì)的知識(shí)結(jié)構(gòu)不僅不是這樣的,而且?guī)缀跞疾皇沁@樣的。工作中、生活里,充滿了各式各樣的**“過早引用”**。為什么總是要到多年以后你才明白父母曾經(jīng)說(shuō)過的話那么有道理?為什么總要到孩子已經(jīng)長(zhǎng)大之后才反應(yīng)過來(lái)當(dāng)初自己對(duì)孩子做錯(cuò)過很多事情?為什么在自己成為領(lǐng)導(dǎo)之前總是以為他們只不過是在忽悠你?為什么那么多人創(chuàng)業(yè)失敗了之后才反應(yīng)過來(lái)當(dāng)初投資人提醒的一些觀念其實(shí)是千真萬(wàn)確的?—— 因?yàn)楹芏喔拍詈芏嘤^念是“過早引用”,在當(dāng)時(shí)就是非常難以理解……自學(xué)編程在這方面的好處在于,在自學(xué)的過程中,其實(shí)你相當(dāng)于過了一遍“模擬人生” —— 于是,面對(duì)同樣的“過早引用”,你不會(huì)覺得那么莫名其妙,你有一套你早已在“模擬人生”中練就的方法論去應(yīng)對(duì)。 盡量只靠閱讀學(xué)會(huì)編程,哪怕僅僅是入門,這個(gè)經(jīng)歷和經(jīng)驗(yàn)都是極為寶貴的。(哎,我看了太多視頻真的浪費(fèi)了很多時(shí)間啊) 05 Part.1.C.must.learn.sth.only.by.reading 習(xí)得自學(xué)能力的終極目標(biāo)就是:有能力只靠閱讀就能習(xí)得新技能。 滾蛋吧:不是什么東西都可以從書本里學(xué)到的! 一技傍身的人,總是不愁生活…… 那些靠閱讀機(jī)器算法推送的內(nèi)容而殺時(shí)間的人,恰恰就是因?yàn)樗麄冇虚喿x能力才去不斷地讀,讀啊讀,像是那只被打了興奮劑后來(lái)死在滾輪上的小白鼠。如果這些人哪怕有一點(diǎn)點(diǎn)自學(xué)能力,那么他們很快就會(huì)分辨出自己正在閱讀的東西不會(huì)刺激自己的產(chǎn)出,只會(huì)消磨自己的時(shí)間;那么,他們就會(huì)主動(dòng)放棄閱讀那些殺時(shí)間的內(nèi)容,把那時(shí)間和精力自然而然地用在篩選有繁殖能力的內(nèi)容,讓自己進(jìn)步,讓自己習(xí)得更多技能上去了。 所以,只要你有一次“只靠閱讀習(xí)得一項(xiàng)新技能”的經(jīng)驗(yàn),你就變成另外一個(gè)人了。你會(huì)不由自主、哪怕下意識(shí)里都會(huì)去運(yùn)用你新習(xí)得的能力…… 從這個(gè)角度看,自學(xué)很上癮!能上癮,卻不僅無(wú)害,還好處無(wú)窮,這樣的好事,恐怕也就這一個(gè)了罷。 我有很多偶像,英國(guó)數(shù)學(xué)家喬治·布爾就是其中一個(gè) —— 因?yàn)樗褪莻€(gè)基本上只靠閱讀自學(xué)成才的人。十八、九歲,就自學(xué)了微積分 —— 那是將近兩百年前,沒有 Google,沒有 Wikipedia…… 然后他還自己創(chuàng)辦了學(xué)校,給自己打工…… 從來(lái)沒有上過大學(xué),后來(lái)卻被皇家學(xué)院聘請(qǐng)為該學(xué)院第一個(gè)數(shù)學(xué)教授。然后,人家發(fā)明的布爾代數(shù),在百年之后引發(fā)了信息革命…… 達(dá)芬奇也是這樣的人 —— 要說(shuō)慘,他比所有人都慘…… 因?yàn)閹缀鯊囊婚_始就貌似沒有誰(shuí)有資格有能力教他。 講真,你沒有選擇,只靠閱讀習(xí)得新技能,這是你唯一的出路。 06 Part.1.D.preparation.for.reading 編程既不是文科也不是理科…… 它更像是“手工課”。你越學(xué)就越清楚這個(gè)事實(shí),它就好像是你做木工一樣,學(xué)會(huì)使用一個(gè)工具,再學(xué)會(huì)使用另外一個(gè)工具,其實(shí)總共就沒多少工具。然后,你更多做的是各種拼接的工作,至于能做出什么東西,最后完全靠你的想象力……十來(lái)歲的孩子都可以學(xué)會(huì)的東西,你怕什么? 別怕,無(wú)論說(shuō)給自己,還是講給別人,都是一樣的,它可能是人生中最重要的鼓勵(lì)詞。 07 Part.1.E.1.entrance Last Checkpoint: 14 hours ago “速成”,對(duì)絕大多數(shù)人[1]來(lái)說(shuō),在絕大多數(shù)情況下,是不大可能的。編程如此,自學(xué)編程更是如此。有時(shí),遇到復(fù)雜度高一點(diǎn)的知識(shí),連快速入門都不一定是很容易的事情(所以我經(jīng)常想快速掌握什么什么,甚至連難度都不進(jìn)行評(píng)估一下,想來(lái)有點(diǎn)天真哦,早些時(shí)候遇到簡(jiǎn)單的東西,憑借一點(diǎn)小聰明還是可以的,到后來(lái),發(fā)現(xiàn)需要真才實(shí)學(xué)的時(shí)候,真的已經(jīng)需要大智慧了!) (只有當(dāng)自己已經(jīng)掌握了自學(xué)的方法之后再去談速成才是有意義的?。?/p> 有本書可以閑暇時(shí)間翻翻,The Logician and the Engineer: How George Boole and Claude Shannon Created the Information Age??梢哉f(shuō),沒有喬治·布爾的布爾代數(shù),沒有克勞德·香農(nóng)的邏輯電路,就沒有后來(lái)的計(jì)算機(jī),就沒有后來(lái)的互聯(lián)網(wǎng),就沒有今天的信息時(shí)代 —— 世界將會(huì)怎樣? 最重要的差異在于計(jì)算機(jī)能做布爾運(yùn)算(Boolean Operations) (所以這里的邏輯就是:布爾的布爾代數(shù)——香濃的邏輯電路——互聯(lián)網(wǎng)——信息時(shí)代) 計(jì)算器和計(jì)算機(jī)都是電子設(shè)備,但,計(jì)算機(jī)更為強(qiáng)大的原因,用通俗的說(shuō)法就是它“可編程”(Programable) —— 而所謂可編程的核心就是布爾運(yùn)算及其相應(yīng)的流程控制(Control Flow);沒有布爾運(yùn)算能力就沒有辦法做流程控制;沒有流程控制就只能“按順序執(zhí)行”,那就顯得“很不智能”…… 08 Part.1.E.2.values-and-their-operators 我們可以把函數(shù)看作是“子程序”; 在 Python 中每個(gè)函數(shù)都有返回值,即便你在定義一個(gè)函數(shù)的時(shí)候沒有設(shè)定返回值,它也會(huì)加上默認(rèn)的返回值 None……(請(qǐng)注意 None 的 大小寫?。?/p> 回到最開始:從結(jié)構(gòu)上來(lái)看,一切的計(jì)算機(jī)程序,都由且只由兩個(gè)最基本的成分構(gòu)成: 運(yùn)算(Evaluation) 流程控制(Control Flow) 1 2 09 Part.1.E.3.controlflow 任何進(jìn)步,無(wú)論大小,其實(shí)都相當(dāng)不容易,都非常耗時(shí)費(fèi)力 —— 在哪兒都一樣。(我不知道自己為什么會(huì)有如此想法,而且根深蒂固,之前一直以為這些東西都很是輕松,簡(jiǎn)單到輕而易舉,這樣的想法對(duì)我而言簡(jiǎn)直就是災(zāi)難!) 包含了分支與循環(huán) —— 無(wú)論多復(fù)雜的流程控制用這兩個(gè)東西就夠了,就好像無(wú)論多復(fù)雜的電路最終都是由通路和開路僅僅兩個(gè)狀態(tài)構(gòu)成的一樣 Python 語(yǔ)言中,for 循環(huán)不使用其它語(yǔ)言中那樣的計(jì)數(shù)器,取而代之的是 range() 這個(gè)我稱其為“整數(shù)等差數(shù)列生成器”的函數(shù) Range()函數(shù) :只有一個(gè)參數(shù)的時(shí)候,這個(gè)參數(shù)被理解為 stop,生成一個(gè)從 0 開始,到 stop - 1 的整數(shù)數(shù)列.這就解釋了為什么有的時(shí)候我們會(huì)在 for … in range(…): 這種循環(huán)內(nèi)的語(yǔ)句塊里進(jìn)行計(jì)算的時(shí)候,經(jīng)常會(huì)在變量之后寫上 1,因?yàn)槲覀?range(n) 的返回?cái)?shù)列中不包含 n,但我們有時(shí)候卻需要 n 寫嵌套的判斷語(yǔ)句或循環(huán)語(yǔ)句的時(shí)候,最常用 pass,因?yàn)閷懬短淄M(fèi)腦子的,一不小心就弄亂了。所以,經(jīng)常需要先用 pass 占位,而后逐一突破 for 更適合處理序列類型的數(shù)據(jù)(Sequence Type)的迭代,比如處理字符串中的每一個(gè)字符 ,比如把 range() 返回的數(shù)列當(dāng)作某種序列類型的索引。while 更為靈活,因?yàn)樗竺嬷恍枰由弦粋€(gè)邏輯表達(dá)式即可 10 Part.1.E.4.functions 在函數(shù)定義中,帶有 = 的,即,已為其設(shè)定了默認(rèn)值的參數(shù),叫做 Keyword Arguments(關(guān)鍵字參數(shù)),其它的是 Positional Arguments(位置參數(shù))。(位置參數(shù):就是因?yàn)槲恢貌灰粯泳驼f(shuō)明意義不一樣,有位置決定其參數(shù)的值) 11 Part.1.E.5.strings 字符串屬于有序容器。 字符串里的每個(gè)字符,對(duì)應(yīng)著一個(gè)從 0 開始的索引。比較有趣的是,索引可以是負(fù)數(shù) 我們可以使用索引操作符根據(jù)索引提取字符串這個(gè)有序容器中的一個(gè)或多個(gè)元素,即,其中的字符或字符串。這個(gè)“提取”的動(dòng)作有個(gè)專門的術(shù)語(yǔ),叫做“Slicing”(切片)。索引操作符 [] 中可以有一個(gè)、兩個(gè)或者三個(gè)整數(shù)參數(shù),如果有兩個(gè)參數(shù),需要用 : 隔開 在 Python 中,字符串是一個(gè)對(duì)象 —— 更準(zhǔn)確地講,是 str 類(Class str)的對(duì)象 這些寫在對(duì)象內(nèi)部的函數(shù),有個(gè)專門的名稱,類的方法(Method) 12 Part.1.E.6.containers 包括字符串、由 range() 函數(shù)生成的等差數(shù)列、列表(List)、元組(Tuple)、集合(Set)、字典(Dictionary)。 遇到由不同類型數(shù)據(jù)構(gòu)成的列表,我們更可能做的是想辦法把不同類型的數(shù)據(jù)分門別類地拆分出來(lái),整理清楚 —— 這種工作甚至有個(gè)專門的名稱與之關(guān)聯(lián):數(shù)據(jù)清洗。 初學(xué)者總是很好奇 List 和 Tuple 的區(qū)別。首先是使用場(chǎng)景,在將來(lái)需要更改的時(shí)候,創(chuàng)建 List ;在將來(lái)不需要更改的時(shí)候,創(chuàng)建 Tuple。其次,從計(jì)算機(jī)的角度來(lái)看,Tuple 相對(duì)于 List 占用更小的內(nèi)存 創(chuàng)建空集合的時(shí)候,必須用 set(),而不能用 {} Map 是容器中的單獨(dú)一類,映射(Map)容器。映射容器只有一種,叫做字典(Dictionary)。先看一個(gè)例子: 枚舉:迭代的同時(shí)獲取索引 13 E.7.files 如果把字母 a 計(jì)為 1、b 計(jì)為 2、c 計(jì)為 3 …… z 計(jì)為 26,那么: knowledge = 96 hardwork = 98 attitude = 100 14 Part.1.F.deal-with-forward-references 首先是要學(xué)會(huì)一個(gè)重要的技能: 讀不懂也要讀完,然后重復(fù)很多遍。從一開始就要做好將要重復(fù)很多遍的準(zhǔn)備,從一開始就要做好第一次只能讀懂個(gè)大概的準(zhǔn)備 失敗的原因竟然是因?yàn)椤疤屑?xì)了' 但是:但是,若是為了習(xí)得新技能去閱讀,就要施展“只字不差地閱讀”這項(xiàng)專門的技能。 絕大多數(shù)自學(xué)能力差的人,都是把一切都當(dāng)作小說(shuō)去看,隨便看看,粗略看看……(簡(jiǎn)直就是我本人了) 好的記憶力很重要,反復(fù)做整理歸納總結(jié),記不住才怪呢 自學(xué)能力強(qiáng)的人有個(gè)特點(diǎn),就是不怕麻煩。小時(shí)候經(jīng)常聽到母親念叨,“怕麻煩!那還活著干嘛?。炕钪嗦闊┌?!” —— 深刻 先關(guān)注使用再研究原理 尊重前人的總結(jié)和建議 15 Part.2.A.clumsy-and-patience 反復(fù)學(xué),最鍛煉的是“歸納整理”的能力。而且,最有意思的,這在大多數(shù)情況下還是自動(dòng)發(fā)生的 —— 只要你不斷重復(fù),你的大腦會(huì)在不自主之間把那些已經(jīng)掌握的知識(shí)點(diǎn)與當(dāng)前尚未掌握的知識(shí)點(diǎn)區(qū)分開來(lái),前者處理起來(lái)輕松容易,甚至可以跳過;后者需要投入更多的注意力去仔細(xì)處理…… 在這個(gè)過程中,絕大多數(shù)的歸納整理工作自動(dòng)完成了。最后再加上一點(diǎn)“刻意的、收尾性的歸納總結(jié)整理工作” —— 大功告成 一般手藝性的東西:主要靠時(shí)間 以用帶練 —— 在不斷應(yīng)用的過程中帶動(dòng)刻意練習(xí)。 首先要明白,這肯定是個(gè)比“天真的想象”要長(zhǎng)得多的過程。其次要明白,并且要越來(lái)越自然地明白,哪兒哪兒都需要很多重復(fù)。讀,要讀很多遍;練,要練很多遍;做,要做很多遍…… 絕對(duì)不做預(yù)算不夠的事情?!龊眠@個(gè)就能超過一大部分的人了 學(xué)完了也就學(xué)完了,真沒地兒用。沒地兒用,當(dāng)然就很少練 于是,我學(xué)的時(shí)候重復(fù)得比別人多;練的時(shí)候重復(fù)得比別人多;到最后用得也相對(duì)比別人多很多 —— 這跟是否有天分或者聰明與否全然沒有關(guān)系 人生很長(zhǎng),何必驚慌——反正,這事兒跟天分與智商幾乎沒有任何關(guān)系。 16 Part.2.B.deliberate-practicing 手藝這個(gè)東西,尤其需要刻意練習(xí)。我們說(shuō),手藝么,主要是靠時(shí)間…… 這里的“時(shí)間”,準(zhǔn)確地講,就是“刻意練習(xí)”的時(shí)間,而不是任何時(shí)間 最有用的道理最沒人聽 下面也是我最困惑的地方 而那些看起來(lái)“一出手就是高手”的人,則恰恰相反,他們不僅花很多時(shí)間刻意練習(xí),還總是刻意思考在哪些地方尤其要刻意練習(xí) —— 就是這一點(diǎn)差別造成了那么大的差距 不做刻意練習(xí)的人就是在混時(shí)間 準(zhǔn)備個(gè)專門的地方記錄:我現(xiàn)在用的最多的就是 iPhone 上的 Notes,一旦遇到什么“疑似需要刻意練習(xí)”的點(diǎn),就順手記錄在那里以防不小心忘記或者不小心遺漏。而后有時(shí)間的時(shí)候就拿出來(lái)看看,排列一下優(yōu)先級(jí),琢磨一下刻意練習(xí)的方式,而后找時(shí)間刻意練習(xí),如此這般,做到“盡量不混日子”…… 凡事兒,就怕琢磨…… 17 Part.2.C.why-start-from-writing-functions —————————20190408——————————— 18 Part.2.D.2-aargs這里的知識(shí)還蠻重要的,需要返回來(lái)再學(xué)習(xí)哦1 帶一個(gè)星號(hào)的參數(shù),英文名稱是Arbitrary Positional Arguments 帶兩個(gè)星號(hào)的參數(shù),一會(huì)兒會(huì)講到,英文名稱是Arbitrary Keyword Arguments 在函數(shù)內(nèi)部,位置參數(shù)被當(dāng)作容器處理,所以,在調(diào)用函數(shù)的時(shí)候,可以吧一個(gè)容器傳遞給函數(shù)的位置參數(shù)。 在定義可以接收一系列值的位置參數(shù)時(shí),建議在函數(shù)內(nèi)部為該變量命名時(shí)總是用復(fù)數(shù),因?yàn)楹瘮?shù)內(nèi)部,總是需要 for 循環(huán)去迭代元組中的元素,這樣的時(shí)候,名稱的復(fù)數(shù)形式對(duì)代碼的可讀性很有幫助 關(guān)鍵字參數(shù)是可以接受很多值的!兩個(gè)星號(hào),在函數(shù)內(nèi)部處理關(guān)鍵字參數(shù)的時(shí)候,用的是對(duì)字典的迭代方式,所以在調(diào)用函數(shù)的時(shí)候也可以直接使用字典的形式! 關(guān)于參數(shù)的順序:位置參數(shù)、一顆星的位置參數(shù)、關(guān)鍵字參數(shù)、兩顆星的關(guān)鍵字參數(shù) 19 Part.2.D.3-lambda 匿名函數(shù),一般是很小的函數(shù),如下: lambda x, y: x y 1 先寫上 lambda 這個(gè)關(guān)鍵字,其后分為兩個(gè)部分,: 之前是參數(shù),之后是表達(dá)式;這個(gè)表達(dá)式的值,就是這個(gè)函數(shù)的返回值。 20 Part.2.D.4-recursion 遞歸函數(shù):在自身內(nèi)部調(diào)用自己的函數(shù) 在函數(shù)內(nèi)部絕對(duì)不調(diào)用全局變量。即便是必須改變?nèi)肿兞?,也只能通過函數(shù)的返回值在函數(shù)外改變?nèi)肿兞?/p> 地柜的三個(gè)原則:(1)根據(jù)定義,遞歸函數(shù)必須在內(nèi)部調(diào)用自己; (2)必須設(shè)定一個(gè)退出條件; (3)遞歸過程中必須能夠逐步達(dá)到退出條件…123 歸函數(shù)是程序員為了自己方便而使用的,并不是為了計(jì)算機(jī)方便而使用 —— 計(jì)算機(jī)么,你給它的任務(wù)多一點(diǎn)或者少一點(diǎn),對(duì)它來(lái)講無(wú)所謂,反正有電就能運(yùn)轉(zhuǎn),它自己又不付電費(fèi)… 理論上來(lái)講,所有用遞歸函數(shù)能完成的任務(wù),不用遞歸函數(shù)也能完成,只不過代碼多一點(diǎn),啰嗦一點(diǎn),看起來(lái)沒有那么優(yōu)美而已 21 Part.2.D.5-docstrings 其實(shí)就是函數(shù)的說(shuō)明書,必須在函數(shù)定義的內(nèi)部語(yǔ)句塊的開頭而且需要注意保持一樣的縮進(jìn)。 書寫規(guī)范: (1)無(wú)論是單行還是多行的 Docstring,一概使用三個(gè)雙引號(hào)擴(kuò)起; (2)在 Docstring 內(nèi)部,文字開始之前,以及文字結(jié)束之后,都不要有空行; (3)多行 Docstring,第一行是概要,隨后空一行,再寫其它部分; (4)完善的 Docstring,應(yīng)該概括清楚以下內(nèi)容:參數(shù)、返回值、可能觸發(fā)的錯(cuò)誤類型、可能的副作用,以及函數(shù)的使用限制等等; (5)每個(gè)參數(shù)的說(shuō)明都使用單獨(dú)的一行…… 1 2 3 4 5 22 Part.2.D.6-modules 任何一個(gè)可以被調(diào)用的.py文件都可以被稱為模塊 基本就是import相關(guān)的東西 23 Part.2.D.7-tdd 算法:解決問題的步驟 這一節(jié)沒有什么特別需要注意的東西 24 Part.2.D.8-main 當(dāng) Python 文件被當(dāng)作模塊,被 import 語(yǔ)句導(dǎo)入時(shí),main() 函數(shù)不被直接運(yùn)行; 當(dāng) Python 文件被 python -m 執(zhí)行的時(shí)候,main() 才被執(zhí)行。12 25 Part.2.E.deliberate-thinking 這東西能用在哪兒呢? 找活干,是應(yīng)用所學(xué)的最有效方式,有活干,所以就有問題需要解決,所以就有機(jī)會(huì)反復(fù)攻關(guān),在這個(gè)過程中,以用帶練… 勞者多能 —— 你看,都想反了吧? 26 Part.3.A.conquering-difficulties 這一章講的東西蠻好的,我自己好像也指導(dǎo)但就是講不出來(lái)。 然而,相信我,所有的難點(diǎn),事實(shí)上都可以被拆解成更小的單元,而后在逐一突破的時(shí)候,就沒那么難了。逐一突破全部完成之后,再拼起來(lái)重新審視的時(shí)候就會(huì)發(fā)現(xiàn)那所謂的難常常只不過是錯(cuò)覺、幻覺而已 —— 我把它稱為困難幻覺。 有什么必要干前功盡棄的事情呢?要么干脆別學(xué)算了,何必把自己搞成一個(gè)半吊子? “突然”之間一切都明了了! 開始“自學(xué)”的活動(dòng),本質(zhì)上來(lái)看,和斷奶其實(shí)是一回事兒。 幽默與生動(dòng),是要自己去扮演的角色;有趣與歡樂,是要自己去挖掘的幸福 平靜地接受了它枯燥的本質(zhì);其次,就是經(jīng)過多次實(shí)踐已然明白,無(wú)論多枯燥,總能讀完;無(wú)論多難,多讀幾遍總能讀懂…… 于是,到最后,只不過是習(xí)慣了而已。 27 Part.3.B.1.classes-1 (需要繼續(xù)看) 面向?qū)ο缶幊蹋?/p> 面向?qū)ο缶幊蹋∣OP),是使用對(duì)象(Objects)作為核心的編程方式。進(jìn)而就可以把對(duì)象(Objects)的數(shù)據(jù)和運(yùn)算過程封裝(Encapsulate)在內(nèi)部,而外部?jī)H能根據(jù)事先設(shè)計(jì)好的界面(Interface)與之溝通。 屬性:必要的特征,通常是名詞 方法:必要的行為,通常是動(dòng)詞 28 Part.3.B.2.classes-2 (需要繼續(xù)看) ———初始化相關(guān): Class里面的self的意思:這里的 self 就是個(gè)變量,跟程序中其它變量的區(qū)別在于,它是一個(gè)系統(tǒng)默認(rèn)可以識(shí)別的變量,用來(lái)指代將來(lái)用這個(gè) Class 創(chuàng)建的 Instance 在 Class 的代碼中,如果定義了 init() 函數(shù),那么系統(tǒng)就會(huì)將它當(dāng)作用來(lái) Instance 在創(chuàng)建后被初始化的函數(shù)。這個(gè)函數(shù)名稱是強(qiáng)制指定的,初始化函數(shù)必須使用這個(gè)名稱;注意 init 兩端各有兩個(gè)下劃線 _。(所以就是在實(shí)例化一個(gè)class之后真的需要給初始化一下) 比如實(shí)例化后g = Golem(‘Clay’),那么當(dāng)g被創(chuàng)建的時(shí)候,g就需要被初始化 ———繼承相關(guān): Interface:界面 Attributes:屬性 Methods:方法 私有變量是兩個(gè)下劃線開始的,不能被外部引用 作用域哪里不太明白,先這樣吧回過頭再看! 29 Part.3.B.3.decorator-iterator-generator (需要繼續(xù)看幾遍) 函數(shù)工具:迭代器、生成器、裝飾器。都是真正掌握Python的關(guān)鍵 迭代器(Iterator): 生成器(generator): 生成器表達(dá)式: 用生成器創(chuàng)造的迭代器(Iterator) 若是用了方括號(hào),那就是用生成器創(chuàng)造的列表(List)—— 當(dāng)然用花括號(hào) {} 生成的就是集合(Set)…… 修飾器(Decorator) 函數(shù)也是對(duì)象,所以可以作為其他函數(shù)的參數(shù)或者返回值 裝飾器的操作符 裝飾器我還沒遇到過,所以暫時(shí)還不曉得有啥用哦,完了再來(lái)看幾次! 30 Part.3.B.4.regex 最強(qiáng)大且不可或缺的文本處理工具,用處就是在文本中掃描/搜索(Scan/Search)與某一規(guī)則(Pattern)匹配(Match,即,與規(guī)則一致)的所有實(shí)例,并且還可以按照規(guī)則捕獲(Capture)其中的部分或者全部,對(duì)它們進(jìn)行替換(Replece)。 正則表達(dá)式本質(zhì)上是個(gè)獨(dú)立的語(yǔ)言,短小卻格外強(qiáng)悍 —— 乃至于,如果你竟然沒學(xué)會(huì)它的話,你的之前學(xué)的編程技能干脆與殘疾無(wú)異。 一個(gè)正則表達(dá)式(Regular Expression)通常被稱為一個(gè)模式(Pattern)。 一個(gè)規(guī)則表達(dá)式(Regular Expression)通常被稱為一個(gè)規(guī)則(Pattern)。 我們可以用書寫特定的規(guī)則,用來(lái)在文本中捕獲與規(guī)則一致的字符串,而后對(duì)其進(jìn)行操作…… 正則化主要就是用來(lái)處理字符串文本咯?? 聊天機(jī)器人什么的~~~ 31 Part.3.B.5.bnf-ebnf-pebnf 巴克斯諾爾范式:暫時(shí)不接觸吧 32 Part.3.C.breaking-good-and-bad 自學(xué)的重要技巧:把那些很難的任務(wù)無(wú)限拆分 —— 直至每個(gè)子任務(wù)都很小,小到都可操作為止。 編程,更多是拿著紙筆梳理細(xì)節(jié)的工作。一旦所有的細(xì)節(jié)都想明白了,落實(shí)成代碼其實(shí)是飛快的 —— 越是工程量大的項(xiàng)目越是如此。 莊辰超認(rèn)為,成功是不能復(fù)制的,失敗是可以復(fù)制的 33 Part.3.D.indispensable-illusion 只有真正掌握了那個(gè)技能之后,那個(gè)技能才會(huì)“變”成剛需 要學(xué),想學(xué),那就自顧自去學(xué)吧,用不著征求別人的意見! 做個(gè)自驅(qū)動(dòng)的人,而非被外部驅(qū)動(dòng)的被動(dòng)的人。 找活干 一切的技能都是剛需。 34 Part.3.E.to-be-thorough 全面——自學(xué)的境界 全面,是掌握一門手藝的基本。 所謂的不混時(shí)間,無(wú)非就是刻意練習(xí)、追求全面。 絕對(duì)不能只靠一本書 多讀幾本書。狠一點(diǎn),就是多讀很多本書。 教是最好的學(xué)習(xí)方法。 盡快開始整理歸納總結(jié) 一定要自己動(dòng)手去做…… 有同學(xué)問,你就一定要耐心講講 —— 對(duì)自己有好處。 35 Part.3.F.social-selfteaching 當(dāng)我們看到另外一個(gè)人正在做什么的時(shí)候,鏡像神經(jīng)元會(huì)盡力給我們足夠的刺激,讓我們“體驗(yàn)”那個(gè)人的感受。 No matter what you choose, build stuff and be around smart people. 我個(gè)人最看重的個(gè)人品質(zhì)之一,就是有沒有像樣的作品 學(xué)就學(xué)得全面; 做就做得完整。 1 2 給自己足夠長(zhǎng)的時(shí)間去學(xué);在充足“預(yù)算”之下耐心地練;不斷找活干,以用帶練;然后,最重要的是,一定要盡快嘗試著做出屬于自己的完整作品,無(wú)論大小。只有這樣,你才是個(gè)值得被交往的人。 36 Part.3.G.the-golden-age-and-google 能 Google 出答案的問題,就不需要去麻煩別人。 37 Part.3.H.prevent-focus-drifting 好奇心越重的人,越是容易被注意力漂移所拖累。 把“全面完整”放到最高優(yōu)先級(jí) 注意力要放在該放的地方上 |
|