前言
制定目標并努力達到,是一個主要的成長手段, 但是作業生活中,目標以及如何達到目標有時并不那么清晰,本文主要列出最近關于這些問題的思考和識訓,本文中提到的演算法,可以理解成一種為了實作目標,進行分析和制定具體可執行步驟的一種方法,本文將用編程的思維和表達方式來闡述這個方法,下面的代碼都是用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. 我要月入超過5W2. 我每月要存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的可執行步驟也相當于制定可執行的計劃了,
本文將這個方法作一個記錄,以便自己可以長期使用,
很多人都有一些目標、憧憬、渴望,但是對如何實作目標常有困惑,特別是一些長期的,復雜的,不具體或不可量化的目標,
經過本文,希望可以在大家面對這種目標時,幫助大家經過一步步的分析和拆分,制定出一個感覺比較靠譜的可執行計劃,
參考資料:
- 《哈佛 分享課》
- SMART (百度百科) https://baike.baidu.com/item/SMART%E5%8E%9F%E5%88%99/8575850?fr=aladdin
謝謝觀看,
2019.12.08
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/47429.html
標籤:其他
上一篇:unity3D 5.6.1f1的Inspector下script組件為什么沒有Effect選項
下一篇:編程語言的思考
