1. 程式人生 > >目標分析與制定演算法

目標分析與制定演算法

原創內容,轉載請註明出處: https://www.cnblogs.com/bee0060/p/12004165.html

目錄:

  1. 前言
  2. S.M.A.R.T
  3. 過程目標和結果目標
  4. 目標制定演算法
  5. 小結
  6. 參考資料

 

前言

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

 

S.M.A.R.T

這裡說的SMART是說咱們只要足夠聰明,聰明瞭自然就知道嗎? 當然不是。 SMART是一個使用廣泛的方法,或也可以叫原則。 

SMART可用於目標制定,有些公司將SMART用於績效考核指標的制定。

很多朋友可能已經知道,SMART是五個單詞的首字母拼起來的,即:

  • S=Specific (具體的)
  • M=Measurable (可以衡量的)
  • A=Attainable (可以達到的)
  • R=Relevant (相關性,一般指與自己的工作內容相關)
  • T=Time-bound (有時間限制的)

為什麼突然說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的可執行步驟也相當於制定可執行的計劃了。

本文將這個方法作一個記錄,以便自己可以長期使用。

很多人都有一些目標、憧憬、渴望,但是對如何實現目標常有困惑,特別是一些長期的,複雜的,不具體或不可量化的目標。 

經過本文,希望可以在大家面對這種目標時,幫助大家經過一步步的分析和拆分,制定出一個感覺比較靠譜的可執行計劃。

 

參考資料:

  1. 《哈佛 分享課》
  2. SMART (百度百科) https://baike.baidu.com/item/SMART%E5%8E%9F%E5%88%99/8575850?fr=aladdin
  3. 過程目標(百度百科) https://baike.baidu.com/item/%E8%BF%87%E7%A8%8B%E7%9B%AE%E6%A0%87/19677749?fr=aladdin

 

 

謝謝觀看。

2019.1