聲明: 極速學習
你是一個文科生,數學是體育老師教的。天天用手機,但從沒寫過一行程序。現在你想做一個程序(或者是自用的工具,或者是你覺得可以拿出去和別人分享的小游戲,甚至是可以賺大錢的網絡服務)。本教程教你3天24小時內可以開始自己做項目。最多一周,可以成為100offers之類的地方一個有競爭力的工作人。一個月,你很可能找到一個很好的IOS開發工作。
**不相信本聲明的去看前言。不然可以直接跳過到第一章。 **
為了極速學習這個目標。本教程盡可能的避免使用技術語言。到完成本教程的一刻,讀者自然就通過例子和事件學會相當部分的技術語言。
任何一個成熟的軟件工程師,日常工作的80%部分,使用的知識是小學數學,加上大學入門課程的前幾十頁。原因不解釋。本教程的目的是教會你一個最少部分內容,但威力最強大的技能集。這有一個額外的好處,Swift正在發展中,學的多將來可能錯的多。本教程的目標是:學的少,會的多。
本教程是為零基礎的人寫的。零基礎是優勢。至少你沒有各種壞習慣和錯誤的成見。壞習慣多,自以為是的各路技術控繞道。這些人是負基礎,學新東西會及其吃力。去掉一個壞習慣,比培養好習慣要難的多(比減肥難)。負基礎嚴重的人,可能十年學不會一行編程。例如你讓莫言學編程,那基本不可能了。為什么嬰兒學語言快?很重要原因是他們零基礎。學習第二語言就極其困難。
前言: 真理何物
擁有真值的句子和真理是不同的。所有擁有真值的句子的真值,都是來源于最初幾個被規定為真的命題,和一些被規定為合法構造句子的規則。所以有真值的具體必然是一個符號體系的內在產物。其真與否,和世界上其他東西無關。因為真理和符號體系之外的東西有關系。所以擁有真值的句子的真假,不能完全覆蓋真理所指的東西。這就好比紅樓夢和字典,紅樓夢是好的著作,并不是因為它字字的用法都符合字典。
那么真理何物?在回答這個問題之前,我們必須弄清楚,世間是否有真理。如果真理是個不存在的東西,那就沒必要給出“真理”這個名字,使用這個詞也就沒有意義。我的回答是,世間確有真理。只需要一個明確的例子,就足以證明世間確有真理。
例如:語言是有用的。
a 自有哲學以來,所有真理的討論都承認上述真理。你可能會說,我不承認上述真理。但這必是謊言。人生幾十年,思考交流都在用語言。所以你對待“語言是有用的”這句話的態度,無疑就是對待真理的態度。或者難道說你日日堅持使用了幾十年語言,然而從不相信其有用?或者說,你上網幾十年,不相信電腦是有用的?
b 社會上無疑會有少數人對待語言的態度不同,但這些人要么已經被社會淘汰,要么處在被淘汰和隔離改造的過程中?!动偘d與文明》講述的就是這個被精神病的過程。從這個角度來講,即便語言是有用的這條尚未完全的成為真理,它必將成為真理。
**例如:真理問題被思考,思考這問題的東西肯定不是真理問題本身。所以除了真理問題這個符號世界的東西之外,還有另一個東西,這個東西就是我。所以我在。
綜合a和b,這個例子已足夠肯定確有真理存在。注意上面第二段說明,真理不是純符號的東西,其必然而且只能在一個歷史的過程中完成。我們的擁有對未來的確定的態度,就是當下的真理。一旦我們擁有了對未來的絕對的確定態度,那么歷史就結束了。簡單的說,在我們絕對的認可了哪怕只是單個一條真理的時刻,歷史就結束了。這是Hegel到Kojeve和福山反復講述的事情。
所以真理何物這個問題,是無法用符號來完全回答的。真理是需要用人的實踐來完成的一個歷史的過程。
我們可以從另一個角度來論證:
任何事物都有“時間”這個屬性。下一時刻的這個杯子和這一時刻是不同的。下一時刻都是對這一時刻的否定。所以人不能踏入同一條河流。既然如此,怎么可能存在貫穿全部時間的真理呢?答案很簡單,只有通過實踐改造未來,才能完成真理。一旦事物被完成,成為過去和歷史,它就不能再被改變。
例如:“全球人類必將在同一個框架下進行貿易”。這是不是真理?它最開始不是的。但Kojeve 設計了WTO,完成了。就成了真理。從純粹抽象符號和時間的角度來講,沒有什么東西是真理。因為時間本身就被假設包括一切不同的可能。但是,一旦時間成為過去,沿著時間走的那些東西被你按約定路線完成了。那真理就被建成了。
According to Godel:
Hegel's logic need not be interpreted as dealing with contradictions.It is simply a systematic way of obtaining new concepts. It deals with being in time. Not Hegel's logic but some parts of it might be related to a proposition (not concept) producing its opposite. For example, if A is defined as in Russell's
paradox (namely, A is the set of all sets that do not belong to themselves), "A belongs to A" produces its opposite. In Hegel, a condition produces its opposite condition in history: that is a process in time, and truth depends on time. Hegel's interpretation is like the figures in a puppet show; the second beats the first down. In terms of the unity of opposites and the idea that contradiction gives direction, antinomies receive a different interpretation. The Russell set becomes a limiting case of a succession of belong-to and not-belonging-to; it is no longer circular.
所以真理從符號角度來講:就是一個實踐建設的路線圖。該路線圖對所有的時間內的否定因素都有處置,推論出所有的否定都會被再否定到原來的方向。沿著這個路線圖走,最后就到了預定的地點。這個過程就是辯證的否定之否定過程,也就是所謂的“揚棄”。你的路線圖是不是真理?你的路線圖好不好?答案是,不好的路線圖你把它完成成好的,那么這個路線圖就在所有情況下都是好的了。這就是否定之否定。
這個教程的目的就是給出這樣一個路線圖。從第一個字之始,作者已盡可能的考慮了所有字句的錯誤的, 不確定的或者否定的方面,期待讀者在踐行中辯證,完成本書標題的目的。這個路線圖展示了一個假設存在的人,如何24小時內,從零基礎學會用swift寫出app store里80%以上級別復雜度的app。
第一章:極速學習法
以下是幾本極速學習法的參考書:
The first twenty 20 hours by Josh Kaufman
Learn more, study less by Scott H Young
The 4 hour chef by Timothy
列舉這幾本參考書和講座資料。是為了證明極速學習這個技術是存在的。這些書的方法和本教程無關。這些書的方法也未必適合學 Swift+IOS 8的目的。作者的觀點是,沒有統一對各科目都適用的極速學習法。本教程就是定制的Swift+IOS8極速學習路線圖。
適合本書目的的極速學習方法的幾個原則如下:
1. 去除約束
成見是學習的大敵。我們學習語言和編程的目的是為了做事。不是為了成為計算機專家。我們要寫小說,不是為了編字典。上古時代的計算機社區,只有計算機專家才會編程序(甚至只有造計算機的才會)?,F在時代早已不同了?,F在的Mac Book, Iphone, Swift, Xcode,....這個強大的社區,足夠讓人飛速學會如何開發有價值的apps。前提是,不要相信技術語言。一旦你進入熱愛語法糖的技術控渠道,光是語法兩周你都學不完。技術語言是手冊性質的東西,對學習不利。嬰兒不可能靠字典學說話,哪怕是成語字典。
2. 反向學習,正向學習,分解任務
看著你的iphone 上任何一個app 5秒鐘,用日常語言,想想這是什么?你會發現,所有app都具有的一個最本質的特征(但任何一本 IOS 8 的計算機專家書籍不會告訴你的):
** 對不同的用戶手指動作序列,制造出由app作者規定的各種屏幕顯示**
反向學習是什么意思呢?就是把你想做的事,翻譯成一個個分開的手指輸入和你想要的對應的屏幕結果。然后到了不可分的(輸入,結果)之后,你再去查Swift,IOS8手冊和各種搜索引擎,開源代碼等等。或者你直接上論壇發問題去問。
簡單說,分兩步走:
1. 要做的事分解成輸入和輸出分任務
2. 查找,抄襲,上論壇提問,或者查手冊自學,如何用Swift+Ios8實現第一步里面的分任務
這樣做的好處是,因為你第一步里面給的目標很明確。所以每個分任務只需要極小量的學習。你不會學習任何一點冗余的東西。我們舉個例子,例如你想寫個計算器,我們假設這個計算器已經寫好了,在你腦子里面有了。但為了學習方便,我們假設這個計算器只有四個鍵,1,0,+, =
現在來分析分任務:
第一個任務:按計算器的圖標,全屏被打開。
[這個任務apple已經幫你完成了。這屬于正向學習的一部分。任何一個圖標被單擊,都會全屏打開。]
第二個任務: 按1+1這三個鍵,在一塊地方顯示1+1。
[你現在需要反向學習,你立即發現你要查Button的說明書,這是IOS 8的內容。你還要查顯示的說明書。等等。一個一個查。看不懂沒關系,粘貼到你的項目里,然后少做修改,觀察變化。如果不符合你要求的輸入輸出效果,繼續修改,繼續觀察。]
第三個任務: 按=,顯示結果。
[因為你已經在上一步學會了按鍵。也學會了怎么變化顯示。這步你需要學的就是如何用Swift實現數學計算1+1,1+0,...而已。10分鐘你就學會了]
相信現在你理解了什么叫反向學習了。這里要提醒一點,如何把一個復雜的目的,分解成{按哪個鍵,顯示什么}的一對對的分任務很可能是及其困難的。這往往取決于你對你要做的事的理解深度。還取決于你懂不懂取悅你的app用戶。
思考題:如何設計一個能讓人專注寫作的app? 答案:iAWrite的Blog。
正向學習是什么意思呢?在反向學習之前,你需要學習一點點知識。不然沒辦法開始使用Mac Book。另外,有很少很少的基本swift知識,我估計大概是所有人在任何項目都有很大機會會用到的。這部分集中學習下,或者背下來,比臨時查找更有效率。這部分知識,類似于小學數學,是每個工程師日常使用最頻繁的?;蛘哳愃朴米畛S玫?000英語單詞。
想想看,英語這么復雜的語言體系,80%的網頁,日常談話,技術文檔,只使用1000字而已。Swift之類的計算機語言遠比英語簡單,所以其最常用的,需要正向學習的東西,2小時足夠。學不會也沒關系。背下來也行。
3. 建立高質量的working flow。
準備好你的工作環境對于高效學習至關重要。閉上眼睛,設想下你最舒服的學習工作環境,實現它。如果不能實現,那閉上眼睛,想想什么東西將會在你學習時妨礙你使用全部精力。預先消滅它。如果不能消滅,那么忽視它。如果無法忽視,那么去改變它。
記錄本,筆,筆記軟件都要準備好。設想自己的工作流程,什么時候會用什么工具。什么工具最節省時間,效果最好。這些要預先選好,試過。作出決定。伴隨你的工作流程的工具鏈對學習有決定性的影響,盡管這影響你可能看不到甚至短時間內感覺不到。
4. 反饋學習
無論正向還是反向,分解出來最小的原子知識之后,你需要邊練邊學。
第一步:寫出你此刻要學習的原子知識。別急著動手,這步可以讓你集中注意力,準備好。
第二步:在計算機上涂鴉實驗,先寫幫助文件的例子代碼。然后自創一些短代碼,看輸入輸出是否符合你的預期。重復。
第三步:在筆記上標記此點學習已經完成。復制粘貼練習代碼到你的筆記軟件。