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