目標分析與制定算法

 

 

前言

制定目標並努力達到,是一個主要的成長手段。 可是工做生活中,目標以及如何達到目標有時並不那麼清晰,本文主要列出最近關於這些問題的思考和收穫。本文中提到的算法,能夠理解成一種爲了實現目標,進行分析和制定具體可執行步驟的一種方法。本文將用編程的思惟和表達方式來闡述這個方法。下面的代碼都是用JavaScript語法。前端

 

S.M.A.R.T

這裏說的SMART是說我們只要足夠聰明,聰明瞭天然就知道嗎? 固然不是。 SMART是一種制定目標的方法,有些公司將SMART用於績效考覈指標的制定。react

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

相關文章
相關標籤/搜索