声明: 极速学习
你是一个文科生,数学是体育老师教的。天天用手机,但从没写过一行程序。现在你想做一个程序(或者是自用的工具,或者是你觉得可以拿出去和别人分享的小游戏,甚至是可以赚大钱的网络服务)。本教程教你3天24小时内可以开始自己做项目。最多一周,可以成为100offers之类的地方一个有竞争力的工作人。一个月,你很可能找到一个很好的IOS开发工作。
**不相信本声明的去看前言。不然可以直接跳过到第一章。 **
为了极速学习这个目标。本教程尽可能的避免使用技术语言。到完成本教程的一刻,读者自然就通过例子和事件学会相当部分的技术语言。
任何一个成熟的软件工程师,日常工作的80%部分,使用的知识是小学数学,加上大学入门课程的前几十页。原因不解释。本教程的目的是教会你一个最少部分内容,但威力最强大的技能集。这有一个额外的好处,Swift正在发展中,学的多将来可能错的多。本教程的目标是:学的少,会的多。
本教程是为零基础的人写的。零基础是优势。至少你没有各种坏习惯和错误的成见。坏习惯多,自以为是的各路技术控绕道。这些人是负基础,学新东西会及其吃力。去掉一个坏习惯,比培养好习惯要难的多(比减肥难)。负基础严重的人,可能十年学不会一行编程。例如你让莫言学编程,那基本不可能了。为什么婴儿学语言快?很重要原因是他们零基础。学习第二语言就极其困难。
前言: 真理何物
拥有真值的句子和真理是不同的。所有拥有真值的句子的真值,都是来源于最初几个被规定为真的命题,和一些被规定为合法构造句子的规则。所以有真值的具体必然是一个符号体系的内在产物。其真与否,和世界上其他东西无关。因为真理和符号体系之外的东西有关系。所以拥有真值的句子的真假,不能完全覆盖真理所指的东西。这就好比红楼梦和字典,红楼梦是好的著作,并不是因为它字字的用法都符合字典。
那么真理何物?在回答这个问题之前,我们必须弄清楚,世间是否有真理。如果真理是个不存在的东西,那就没必要给出“真理”这个名字,使用这个词也就没有意义。我的回答是,世间确有真理。只需要一个明确的例子,就足以证明世间确有真理。
例如:语言是有用的。
a 自有哲学以来,所有真理的讨论都承认上述真理。你可能会说,我不承认上述真理。但这必是谎言。人生几十年,思考交流都在用语言。所以你对待“语言是有用的”这句话的态度,无疑就是对待真理的态度。或者难道说你日日坚持使用了几十年语言,然而从不相信其有用?或者说,你上网几十年,不相信电脑是有用的?
b 社会上无疑会有少数人对待语言的态度不同,但这些人要么已经被社会淘汰,要么处在被淘汰和隔离改造的过程中。《疯癫与文明》讲述的就是这个被精神病的过程。从这个角度来讲,即便语言是有用的这条尚未完全的成为真理,它必将成为真理。
**例如:真理问题被思考,思考这问题的东西肯定不是真理问题本身。所以除了真理问题这个符号世界的东西之外,还有另一个东西,这个东西就是我。所以我在。
综合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. 去除约束
成见是学习的大敌。我们学习语言和编程的目的是为了做事。不是为了成为计算机专家。我们要写小说,不是为了编字典。上古时代的计算机社区,只有计算机专家才会编程序(甚至只有造计算机的才会)。现在时代早已不同了。现在的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知识,我估计大概是所有人在任何项目都有很大机会会用到的。这部分集中学习下,或者背下来,比临时查找更有效率。这部分知识,类似于小学数学,是每个工程师日常使用最频繁的。或者类似用最常用的1000英语单词。
想想看,英语这么复杂的语言体系,80%的网页,日常谈话,技术文档,只使用1000字而已。Swift之类的计算机语言远比英语简单,所以其最常用的,需要正向学习的东西,2小时足够。学不会也没关系。背下来也行。
3. 建立高质量的working flow。
准备好你的工作环境对于高效学习至关重要。闭上眼睛,设想下你最舒服的学习工作环境,实现它。如果不能实现,那闭上眼睛,想想什么东西将会在你学习时妨碍你使用全部精力。预先消灭它。如果不能消灭,那么忽视它。如果无法忽视,那么去改变它。
记录本,笔,笔记软件都要准备好。设想自己的工作流程,什么时候会用什么工具。什么工具最节省时间,效果最好。这些要预先选好,试过。作出决定。伴随你的工作流程的工具链对学习有决定性的影响,尽管这影响你可能看不到甚至短时间内感觉不到。
4. 反馈学习
无论正向还是反向,分解出来最小的原子知识之后,你需要边练边学。
第一步:写出你此刻要学习的原子知识。别急着动手,这步可以让你集中注意力,准备好。
第二步:在计算机上涂鸦实验,先写帮助文件的例子代码。然后自创一些短代码,看输入输出是否符合你的预期。重复。
第三步:在笔记上标记此点学习已经完成。复制粘贴练习代码到你的笔记软件。