本笔记来自于《程序员的思维修炼》的第六章:主动学习。
今天看到《好奇心日报》推荐的一个系列,新的一年来了,你的年度计划怎么样了?最近在看《程序员的思维修炼:开发认知潜能的九堂课》,作者就是《程序员修炼之道》的作者Andy Hunt。感触挺多,自己也去review了一下自己的计划,不仅仅是完成度,而且是计划和目标本身,是否是一个合理的计划,它的完成度是不是跟它本身有关。
当然,虽然书是程序员相关的书,知识都是通用的,书中只有举的一部分例子来自程序员界,我觉得大部分想要通过主动学习提高自己竞争力的理工科甚至文科小伙伴都可以看看这本书。自己最近看的一些书也有些有趣的想法。本文接近于读书笔记和自己的一些想法,比较粗糙。
有效的学习需要:
主动学习。
结合实践。
-
及时获取反馈,并针对反馈做针对性的训练、学习。
这也是任何一个具备足够心智的人的老师/导师对你学习最重要的形式*,在《万万没想到》、《暗时间》等书籍都有提及, *
只是掌握知识的提纲并不会提高你的专业水平。掌握当然有用,但是对你现实日常工作并没有贡献很多。
知识本身并没有那么重要,大脑构建的模型、为构建模型所提出的问题和你日常经验对你的业绩更加重要,它们才能提高你的竞争力和专长。仅有知识是不够的。
为了做到这些,需要持续的目标,需要及时的反馈以了解你的进展,需要更加主动的学习。
使用SMART目标和实用投资计划(Pragmatic Investment Plan)管理目标和计划。PIP来源于金融投资管理,使用在个人计划与目标管理也很合适。
设定SMART目标
如果你不知道去往何处,那么你必须多加小心,因为你很可能无法到达那里。
-- yogi Berra,前美国棒球手
为了实现你的愿望——职业生涯和个人生活中的学习和成长,你需要目标。目标不能保证你成功。
相信你自己也有过目标,年度目标,季度目标,whatever。这样的例子不少:
- 我要减肥。
- 我要换个学区房。
- 我要牛逼。
- 我要在母校做演讲。
- 我要学Scala,Haskel。。。
这样的目标都很好,尤其是能够做到的时候。
问题应该是:它们有没有被你做到?
如果有,这篇文章也对你没有价值了。这些目标,都是一个模式——泛泛而谈,崇高的,但是云里雾里。『我想要在XX方面更好。』这只是一个愿望,并不是一个明确的目标。
比如:我想减肥。你想减多少斤?你想通过无氧训练还是有氧的跑步减肥?你每天想跑多少公里?雾霾天耽误了计划怎么办?需不需要结合无氧训练?如何分配精力?你想学习Scala,想学习来做什么?学习到什么程度?如何开始?怎么学?
一个泛泛而谈的目标,大多数时候都只会泛泛地存在于你的计划里,你朋友圈里。如果想要更好地专注于它,更好地实现它,你需要一个可操作的、可实现的目标。来源于《管理实践》(The Practice of Management)的SMART方法可以帮助你制定目标。
SMART代表:Specific(具体的),Measurable(可度量的),Achievable(可实现的),Relevant(相关的),Timeboxed(时间可控的)。对于你雄心勃勃的任何目标,你都需要制定一个计划,制定出一系列帮助你实现目标的任务(objective)。每一个任务都应该具有SMART特性。
Specific 具体的
要把任务具体化,比如,『我想学习Scala』,就可以具体为:『我想用Scala编写一个scalable和reliable的实时计算框架』。
Mesurable 可度量的
如何知道你何时完成?制定计划和目标之前,问自己这个问题。
为了实现目标任务,不管用什么方法,必须要能够度量它。它与具体的相辅相成。
度量你的目标任务,但是要采取步步为营、增量进步的方法。
软件开发中,可以分解任务,设定很多小的里程碑,作为一步一步的方向,也是项目进度的度量。及时你现在可能只能看到近期的一两个可做的里程碑。
Achievable 可实现的
自己无法做到的不是目标,比如泡到世界小姐。或许是可能的,但是需要过度地付出时间和资源。
你需要确定目标是否合理。从你现在的情景和需求着手,让每一个目标都可以实现。
Relevant 相关的
目标需要与你相关,与你想要的东西相关,对你重要,你对此要有热情,是在你自己控制之下的事情。
『我想要特朗普下台。』就是不相关的,你没有绿卡还不赶紧写代码去?
时间可控的
这是对目标最重要的特性。你需要一个明确的Deadline。如果没有Deadline,目标便会衰退,永远被每天更紧急的事情排挤。它永远不会实现。
*『老师,我就差60分一分,就让我及格吧!』『老师,我就差59分1分,你让他59分及格了,你也让我也及格了吧...』。。。 *
永远不要把任何学习推到等我有空,事实证明,你永远没空,时间无法被创建,都是分配出来的。你需要定期的安排。
你的目标需要放到更大背景上看它的重要性。
设定目标只是第一步,下一步行动是创建小任务以帮助你每天或者每隔一段时间都能达到某种程度。你创建的小任务越多,就越容易看清自己与目标的距离。
*当你完成一个大的任务时,可能你根据任务开始时的预测与设计,分解出了多个里程碑和小任务,而在任务进行中,却发现了更多的复杂性,更多的里程碑、小任务会被插入进去是很正常的事情。越早动手越好发现路有多长多难,不要在空想和设计踌躇太多时间。 *
使用实用投资计划(PIP)制定计划
《程序员修炼之道》作者建议大家把技术和才干看做一个知识投资组合。像任何投资一样,用金融投资管理的方法论,把自己的时间与经历投资与知识与学习中,学会管理。
我们大多数人都会陷入一种默认的日程表:等我有空了我要好好学习一下Scala;我要好好学习一下分布式系统。
然而你有空了吗?把学习活动流放到『空闲』时间去,就等同于计划失败。
*这个挺常见的,看看你的Pocket的reading list有多长,稍后阅读(Read It Later) ~= 永远不读(Read It Never)。 *
时间是无法创造或者销毁的。时间只能分配。
管理你的知识投资有很多要点:
- 制定具体的计划。
- 多样化。
- 主动投资。
- 定期投资。
制定具体计划
使用SMART法则,在一个时间跨度内,设定你的目标。比如:半年内,自学完成MIT 6.824 分布式系统课程,完成全部lab作业和阅读论文,这样具体的具有时间跨度的目标。
做计划比计划本身重要得多。
多样性
当选择投资领域时,你需要有意识地多样化,不要把所有鸡蛋都放在一个篮子里。
多样化同样也要考虑风险和投资回报率的。
比如学习流行的Java语言风险非常低,因为它TIOBE排名持续前茅,很多大型互联网公司,以及银行都在使用,技术支持、论坛、书籍、课程、资源非常的多。但这也意味着它的投资回报率也非常低,有很多的程序员都在使用,就业岗位面临大量竞争。你学习它并不会变得特别。
而,高风险的技术也存在。比如NodeJS,依托Chrome V8引擎带来的高效率和互联网发展迅速将js推向了后端服务市场,发展迅速,严重缺人。这在曾经可能就是一个高风险高回报的投资选择。
Ruby可能就是下一个Java,WP可能成为移动互联网的基石。任何技术,都伴随着高风险降生,有些的回报率能够保持合理并持续降低风险,有些不能。
说到底,知识投资与金融投资的一个主要区别是:所有知识投资都或多或少有一些价值。即使你的工作里没有使用某项技术,他也会影响你的思维和解决问题的方式。
主动而非被动地投资
《程序员修炼之道》的一个主要话题就是反馈。你需要及时地评估你的计划和执行结果,如实判断运行状况。
金融投资讲究并非守着你的资产,而是要主动随时重新评估你的投资,主动积极投资。
知识投资也一样,主动汲取反馈,以最新发展眼光重新修改目标或者实施步骤。
定期投资(成本平均法)
你需要像金融投资一样,定期投资最低限度的时间量,养成一种习惯。安排最少需要消费的最低时间来在你对应的投资上。
实践
- 看看自己的2016年度计划/季度计划,每一个目标任务是否符合SMART原则?
- 尝试修改年度计划,并开始遵循SMART和PIP原则,草拟你的2017计划。