“一周一语言”是如何做到的?

96
作者 stay4it
2016.10.26 11:36* 字数 1697

精益创业中推崇的是最小可行产品MVP(minimum viable product), 找到痛点,计算出最简原型,转为最小可行产品,在用户的反馈下不断做迭代。在产品从0到1的阶段,'最小可行产品'MVP非常实用。

在我们学习新知识时也一样,从0到1应以'学以致用'为主。将我们的最终目标简化到让它能够跑起来的配置,再用最快的速度搞定这些配置让它跑起来,之后再折腾什么也有个依托,这样就不致于变成孤立的知识点,转身就忘掉。

单纯的语言本身学习起来不难,主要是语法,函数,作用域。要掌握它们,一个月足够了。

对小白来说,对于新知识体系是没有感知的,只觉得最全最详细的最好。但真正去学的时候,大而全的体系会让人找不着北。一个个新知识蜂拥而上,消化不掉很容易放弃。

假如我们还是按填鸭式教育那样学习。买一本从入门到'精通'的书,从第一章顺序往下看。很有可能学到一半就放弃。就像是在用大石头画一幅巨图,在下面堆石头的人不知道现在画到什么程度了,一开始推石头还挺轻松,堆多了之后就不行了。

一门从入门到'精通'书籍,描述的是一个最终态。必需每一章都顶配,才能构建出这个最终态。而'最小可行系统'只要求最简配置就能跑起来,得到一些正反馈后再去强化升级。如果跟着书一章章学习,验证和反馈机制太漫长,学习效率就慢下来了。

'最小可行体系'是为了掌握某个新知识所需要的最简环境。每款游戏都有最小配置要求,你要做的就是配好最简环境,让你的知识先跑起来。只要它跑起来,惯性使它短时间不会停下来,然后再慢慢添加配置,最终达到稳定。

如何找到'最小可行体系'?

  1. 学习这个知识体系的目标是什么?
  2. 最短时间内到达目标需要那些知识点?
  3. 排好优先级
  4. 专注,一次只学一个知识点

举个例子:

打算学PHP,目标是做一套系统,提供API给移动端使用。

随便找本从入门到精通的PHP书,你会看到这样的学习路线


Paste_Image.png

如果按步就班的去学,那学习周期会非常长,如果还是业余学习,很容易就搁置了。

我们得筛选出最最简配置,PHP基础语法得学,最基本的数据结构以及函数。目标是为了提供API给移动端,可以暂时不用提供web端,前端内容都pass掉。数据库可以暂时优先级放低,先能让移动端调用到API,静态假数据都足够用了。再来就是部署到服务器,不用管分布式,也不用加cache,买个带PHP环境的vps,直接ssh部署就好了。

最最简配置(含优先级):语法,静态API,部署,RESTful API,数据库,权限

这是最核心内容,只要这些配置跑起来了,接下来就是不断往里面添加配置或者丰富配置。(怎么丰富我们在后续的文章中详细描述)

再看打算学Android,目标是以此找份工作。


Paste_Image.png

看,Android知识体系,东西不少对吧。假如一个个学过来,容易懵逼,整个UI component就得花一个月时间来学。反馈的太慢,越学越没有信心。

换个最简配:环境搭建,最小可行app(列表页,详情页,设置页),网络,缓存,权限

事实上,如果已经熟练掌握一门语言,其他语言的部分知识体系是重复的。例如网络,缓存,线程,权限设计等。无非是那些语言wrapper出来的API不一样罢了。

这样一周就能完成'最小可行体系',体验过后才能知道自己是否喜欢这个语言,是否想要深入下去。

其实我们学习时也是一个个'最小'知识节点,但它们是零散的,无法交织成体系。'可行体系'不是孤立知识点的堆积,而是对它们结构性的整合和组织。

从0到1的阶段,别盲目的听别人的建议,容易困惑。比如:

"java有什么好学的,PHP才是最好的语言。"
"Android要学的东西太多了。插件化,Material Design,Retrofit,Rxjava,lambda,gradle,ndk。还是学iOS吧,iOS简单"
"现在都不兴OC了,学swift吧"

假如你对什么语言感兴趣,设想一个'最小可行产品'场景,把需要的内容列出来,转换成需要的用到的知识点,碰到不会的再针对性的问google,问大神。Stay通过这个方法,陆续入门了OC Swift Ruby PHP Python。离全干工程师还有一个JS的距离。

学以致用,从0到1,相信你一定可以。

但有了'最小可行体系'还远远不够,这只是快速评估该语言是否适合你的开始。如果你还想让这个小体系变成一张知识结构网,就需要不断地围绕着它做优化,直到它能够成为你技术变现的一个出口。

如何优化,如何深入学习,如何将语言输出变现?这些大家怎么看呢?不妨讨论下吧。

本文为开篇,Stay会陆续出一个系列来展开自己的观点。希望和大家一起交流,寻找最佳算法。

​推荐阅读:
还需要再学习一门语言吗?
还在用应试教育那一套学编程?
程序员在'抽象化的OOP世界'里该如何发展?

日记本