zoukankan      html  css  js  c++  java
  • 目标分析与制定算法

    前言

    制定目标并努力达到,是一个主要的成长手段。 但是工作生活中,目标以及如何达到目标有时并不那么清晰,本文主要列出最近关于这些问题的思考和收获。本文中提到的算法,可以理解成一种为了实现目标,进行分析和制定具体可执行步骤的一种方法。本文将用编程的思维和表达方式来阐述这个方法。下面的代码都是用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的可执行步骤也相当于制定可执行的计划了。

    本文将这个方法作一个记录,以便自己可以长期使用。

    很多人都有一些目标、憧憬、渴望,但是对如何实现目标常有困惑,特别是一些长期的,复杂的,不具体或不可量化的目标。 

    经过本文,希望可以在大家面对这种目标时,帮助大家经过一步步的分析和拆分,制定出一个感觉比较靠谱的可执行计划。

    参考资料:

    1. 《哈佛 分享课》
    2. SMART (百度百科) https://baike.baidu.com/item/SMART%E5%8E%9F%E5%88%99/8575850?fr=aladdin

    谢谢观看。

    2019.12.08

  • 相关阅读:
    物流与仓库
    测试使用
    禅修的升级
    《引爆点 马尔科姆 格拉德威尔》读书笔记总结----《创业必读书第20本》--创业第三关做好业务:3,如何做好营销和增长第4本
    shell
    Vue中常用的方法记录
    前端工程化3-tapable
    Browser上传文件到华为云/七牛云 详细步骤
    immutable
    shell利用叮叮发送消息
  • 原文地址:https://www.cnblogs.com/bee0060/p/12004165.html
Copyright © 2011-2022 走看看