目标分析与制定算法
前言
制定目标并努力达到,是一个主要的成长手段。 但是工作生活中,目标以及如何达到目标有时并不那么清晰,本文主要列出最近关于这些问题的思考和收获。本文中提到的算法,可以理解成一种为了实现目标,进行分析和制定具体可执行步骤的一种方法。本文将用编程的思维和表达方式来阐述这个方法。下面的代码都是用JavaScript语法。
S.M.A.R.T
这里说的SMART是说咱们只要足够聪明,聪明了自然就知道吗? 当然不是。 SMART是一种制定目标的方法,有些公司将SMART用于绩效考核指标的制定。
SMART是五个单词的首字母拼起来的,即:
- S=Specific (具体的)
- M=Measurable (可以衡量的)
- A=Attainable (可以达到的)
- R=Relevant (相关性,一般指与自己的工作内容相关)
- T=Time-bound (有时间限制的)
那么SMART怎么使用呢? 要成长,先要设定目标,然后制定计划,之后是执行和总结。 而SMART可以帮助我们根据制定可量化和执行的目标,有了清晰良好的目标,制定计划也就事半功倍。
过程目标和结果目标
最近看了一本书(《哈佛分享课》), 才知道原来目标之间也有区别。他们就是过程目标和结果目标。那么它们分别是什么意思? 百度了一下没得到满意的结果,那就用我自己的理解来解释吧。
结果目标: 我认为是某一个现实结果的表述,如我要上大学,我要当科学家,我要发达,我要当前端架构师。一个结果目标可以拆分为若干个过程目标.
过程目标:为了达成结果目标的阶段性目标。除了拆分自结果目标, 我们一般还期望过程目标具有可量化甚至可执行的特点,且过程目标也能拆分为更多更小的过程目标。拆分目标时我们会期望过程目标全部或部分实现后,就能达到结果目标。但请谨记,这个仅仅是目标拆分人的期望,未必与事实相符。但随着我们知识、能力的增长,这种期望实现的概率会逐步提高。以下是几个拆分例子:
结果目标: 我要上大学 过程目标: 1. 我每天要花3小时课余时间学习 2. 我周末要上2个培训班 3. 每个月额外完成一本习题册 等等
或者
结果目标:我要发达(发财) 过程目标: 1. 我要月入超过5W 2. 我每月要存4W5来投资 3. N年后买房投资 等等
就像前面说的, 拆分出来的过程目标未必能带帮你实现结果目标,而过程目标本身可能也依然是个过大或不可执行的目标,接下来就轮到我想说的目标拆分与制定算法了。
目标制定算法
好了,这一节就可以用程序员喜欢的表达方式了。首先,我们的最初目标是成长,在我们有了目标(结果目标)后,我们需要将其变成可执行的步骤(过程目标)。 怎样的步骤算是可执行的呢?
我们这里需要用到SMART方法。 在本文中,我们只认为符合SMART原则的过程目标,才是可执行的。
下面,我们会用到判断和递归的方法,来实现我们的算法。
首先我们列下这个算法的输入和输出:
输入: 结果目标 输出: 一个或多个可执行的过程目标
而因为我们仅将符合SMART的过程目标认为是可执行的,所以我们需要定义一个函数:
function isSmart(target) { // do your checking
// return true or false }
上文中我们已经列过SMART的定义, 要判断一个过程目标是否可执行,应该并不困难。
然后,我们还需要定义一个拆分目标的函数:
function breakDownTarget(target) { // 将目标拆分成若干个子目标,我们需要用尽我们的智慧和经验,来让子目标尽量覆盖到父目标的方方面面,因为我们的期望是子目标都完成后,就代表父目标的完成 // 返回子目标数组 }
这个函数的具体执行、正确性和可靠性只能依靠咱们自己的经验和知识。
上面说过,这里会用到判断和递归,因为一个大的结果目标未必一下就能拆分成符合SMART的过程目标,下面让我们来完善一下这个算法:
/* @parameter target: 可以是结果目标或过程目标 @return 最终的可执行过程目标集合 */ function definePlan(target) { if (isSmart(ftarget)) { return target } var subTargets = breakDownTarget(target) return subTargets.map(definePlan); }
好了, 当我们有一个结果目标,将这个结果目标传入这个算法,就应该能得到一系列的可执行的过程目标了。当然了,执行这个算法的不是电脑、CPU、内存, 而是我们的大脑,可能借助纸笔和朋友的辅助。 下面列举2个使用这个算法的小例子:
1. 结果目标: 我要减肥
这是个常见的目标。 但是这个目标不符合SMART,所以我们需要拆分。 而在拆分前,我们可能会想要量化目标。 例如,一个月,减5斤。
那么怎样才能一个月减5斤? 如果我们只是希望和喊口号,固然是得不到我们想要的结果的。 为了提高我们的结果目标实现概率,我们可能需要学习一些热量、运动、肥胖原因等知识。所以我们第一版的过程目标出来了:
[ "花一周时间上网查找肥胖原因、减肥方法等知识", "每天少吃一点", // 但因为缺乏知识,我们不知道少吃多少,也不确定这么做是否能达到减肥目的,不符合SMART "每天做运动", // 原因同上, 我们不知道当前身体状态适合做什么运动,应该做多大的量,不符合SMART ]
在进行一定学习后,我们可能知道了一些饮食的方法和适合自己的运动,然后可以将上述目标拆分为:
[ "学习减肥知识", ["一天三餐", “晚餐不吃米饭、面等碳水化合物”, “中午多吃牛肉、鸡蛋等补充优质蛋白”, 等等], ["每天走1万步左右", "每周至少跑3次步,每次4-5公里"] ]
经过一些学习, 这个过程目标列表看起来靠谱多了。不过, 体重是个很复杂的东西。这么做下来到底会减5斤还是10斤还是1斤,未必能保证。虽然最后体重应该会减少,身体会更健康。但若以结果目标是否实现为判断标准的话。 这些可执行的过程目标未必能实现结果目标。如果无法实现,那么可以认为这个计划是失败了的。就和上文提到的一样,结果目标是否成功,受我们的知识、能力、社会环境等诸多因素影响,真的是谋事在人,成事在天。但是,我们还有另一个解决方案,也就是适当的调整我们的结果目标。
例如, 把”一个月减肥5斤“, 改成: ”逐步解决肥胖问题,并让自己越来越健康“, 或者改回”我要减肥”这个目标,那上述的过程目标应该是可以很好实现结果目标的。
2. 结果目标: 我要成为前端架构师
我第一反应能想到的是以下这些过程目标:
[ "上网了解前端架构师、定义、职能、所需技能等", // 你可能已经了解一些 "精通JS", // Not smart "了解各端各浏览器差异", // Not smart "深入了解几个主流框架", // Not smart "项目初始化架构", // Not smart "制定工作流程能力", // Not smart "团队建设", // Not smart 等等 ]
具体内容大家不必较真,只是举个例子。 好了,一堆not smart。那么咱么继续拆分, 因为是个递归的过程,这里我就每个都拆了,拆一两个举个例子。
“精通JS” => [ "阅读某某(一或多本)JS权威书籍", "订阅某某(一或多个)前端大牛的博客", "每天花2小时阅读权威文档,如MDN,或做JS相关练习", ], ... “深入了解主流框架” => [ "阅读react源码和文档", "订阅react社区较权威的开发者的博客", "加入使用react的开发大中型项目" ], ...
这里需要提一下的是, 结果目标和时间长短、规模大小无关,短期、中期、长期目标均可作为结果目标。
而很明显的,越大的结果目标,需要拆分的过程目标层级越多,实现所需时间越长, 拆分不合理和失败的可能性越大。
小结
我把这个方法叫做目标分析与制定算法,因为涉及一些分析和拆分目标的建议和例子,而将目标变为符合SMART的可执行步骤也相当于制定可执行的计划了。
本文将这个方法作一个记录,以便自己可以长期使用。
很多人都有一些目标、憧憬、渴望,但是对如何实现目标常有困惑,特别是一些长期的,复杂的,不具体或不可量化的目标。
经过本文,希望可以在大家面对这种目标时,帮助大家经过一步步的分析和拆分,制定出一个感觉比较靠谱的可执行计划。
参考资料:
- 《哈佛 分享课》
- SMART (百度百科) https://baike.baidu.com/item/SMART%E5%8E%9F%E5%88%99/8575850?fr=aladdin
谢谢观看。
2019.12.08