制定目标并努力达到,是一个主要的成长手段。 可是工做生活中,目标以及如何达到目标有时并不那么清晰,本文主要列出最近关于这些问题的思考和收获。本文中提到的算法,能够理解成一种为了实现目标,进行分析和制定具体可执行步骤的一种方法。本文将用编程的思惟和表达方式来阐述这个方法。下面的代码都是用JavaScript语法。前端
这里说的SMART是说我们只要足够聪明,聪明了天然就知道吗? 固然不是。 SMART是一种制定目标的方法,有些公司将SMART用于绩效考核指标的制定。react
SMART是五个单词的首字母拼起来的,即:程序员
那么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的可执行步骤也至关于制定可执行的计划了。
本文将这个方法做一个记录,以便本身能够长期使用。
不少人都有一些目标、憧憬、渴望,可是对如何实现目标常有困惑,特别是一些长期的,复杂的,不具体或不可量化的目标。
通过本文,但愿能够在你们面对这种目标时,帮助你们通过一步步的分析和拆分,制定出一个感受比较靠谱的可执行计划。
谢谢观看。
2019.12.08