Ruddy Lee 分享空間

Emergent Design 演化設計

學習與解題

leave a comment »

.

詢問面試者:  當你()面對問題時,會如何思考? 如何蒐集資料以及如何做決定?

才是面試時最該弄清楚的重點。

  – 價值觀

.

我的職業是講師,專業的講師的生活就是講課(這是最少的一部份),然後是拼命的運動(健康凌架於一切),再過來便是學習了(這是一種無時無刻不在學習的職業生涯)。我是怎麼做到持續學習的呢?

.

生活.png.

 

好奇心才是學習時的首要之務

讓好奇心替自己做決定。好奇心驅動我的學習慾望,讓好奇的比重決定接下來要學什麼? 在這個資訊氾濫的時代,雜亂無序的訊息到處都是,過去我總是讓上天來決定接下來我該往哪裡去(也就是接下來該學點什麼?)而現在的我則是用好奇心來作判斷與區隔,看哪一件事比較吸引我的注意力,誰引發了我的學習慾望,我就一頭栽進去,一直到弄懂為止,不! 是一直要到可以教導別人為止。因為只有好奇心可以驅使我們不辭辛勞的持續去追求知識(Know how)。

.

英雄生於憂患

要捨得放棄舒適(這是成功的最基本因素,能夠擁有足夠的毅力下決定毅然地放棄心中的舒適情境,然後選擇較有挑戰的事去做。基本上;這就是我心中的「英雄作為」)、能夠毅然地放棄早已養成的習慣,堅持的去實現一種追求知識的衝動。也只有足夠的好奇心才能激發,這種持續追求知識的慾望,並驅動我們把它做好,在這樣的驅動力之下,成功的機率就自然提高了,所以總是把有限的時間放在好奇心的背包裡然後持續去追尋它。而這一點剛好是;如何讓團隊在專案開始之初盡快進入吸取專案相關學科的知識的方法。 請參考拉姆西的激發學習熱情 3法則。

.

激發學習熱情.png

參考: Ramsey Musallam 拉姆西 的「激發學習熱情法則」

.

20/80 法則

最容易澆熄好奇心熱情的是,你必須要面對接下來的複雜細節。任何一門學科在入門時總有門檻存在的,或許你可以稱之為撞牆期,要如何度過這段時期呢?它考驗著你的智慧、耐心與你對自己的人生規劃。一旦越過這堵高牆之後,快速成長的技能必將改變你的人生。我總是用帕累托法則(20/80法則,註 1.)來鼓勵年輕的學員,這是投入與回報的一種不平衡現象所誕生的理論,但;我一直以為經驗可以在這裡幫上忙,一種基本的專業的素養甚至可以在這裡左右成敗,我常把他稱之為 work smart。也就是讓自己只關注於20%的知識,然後能達成80% 的效益。其實重點在基礎上。也就是你是否弄清楚一些與這個問題最基本的學科知識了。它才是你能否做到 20/80 法則的關鍵因素(例如工程師對物件導向及模式架構的熟悉程度常常就是關鍵所在)。但無論如何,你一定會面對到這堵牆的,而最基本的解決方法是勇於面對和不去逃避它(小步前進是我最常採用的方式,當無法一步跨越它,當然就是多做幾次,用小步漸增的方式來達成囉!)。所以反覆思考,想清楚了就重新在來過是再務實不過的做法了,漸進的累積效果常常會給人持續下去的動力。

.

18.png

養成一種自我學習的本事

.

學會「自我學習」

工作來不及完成的時候就加班熬夜,以增加工時的方式來完成它。例外的是;這個世上有太多工作是屬於創作型的工作,這類型的工作完全無法用重複式的算法來估計進度,因此你問我「加班有用嗎?」這就好像你要求孩子去上課後輔導一樣,希望多上幾次就可以幫助孩子們學會這門學科。但是有關學習的效能,其實是好奇心決定了成果,不是時間的長短,只是家長們就是不信邪。就任由課後輔導與家教班的方式來充分的抹滅了孩子們的好奇心(這一點,反倒是成就了補習班老師的說故事能力。這群辛苦的老師,每天都要面對已經損失80%上課動能的學子,還要想盡辦法吸引他們的注意力,真是辛苦了)。所以學校真正該做的事,是養成孩子們「自我學習」的能力,而老師們真正該做的事,則是建立孩子們的好奇心。

一般人面對陌生知識的學習方法通常是嘗試錯誤法,這是人類最基本的學習方法,它有效的很! 只是挫折與付出就顯得高了些。如果你玩過魔術方塊的話就能體驗到,先嘗試一下解題遇到錯誤與挫折,在小小的成功之後記住教訓並設法在腦海裡印射出成功的模式,然後記住它,下次再遇到這種識曾相識的問題時就有解了。其實寫程式也就是這麼回事,這種成功的模式,在軟體界我們稱它為設計模式。它是需要長期的訓練與學習才會擁有的技能。

 

Dr. Strange 電影裡最吸引我的橋段:

古時候稱為咒語的這種東西,現在我們稱之為程式。

而魔法師便是現代的程式設計師了。

但是要如何才能成為魔法師呢? 回答是: 要透過不斷的訓練與學習。

 

–  奇異博士

{奇異博士古一大師,要如何成為魔法師古一反問奇異博士你是如何成為一名優秀的醫生的呢? 奇異博士 回答: 是透過經年累月不斷的訓練與學習。}

.

 

臨危受命

身為一個顧問,我經常臨危受命(有很多時候是我自願跳進去的),尤其是老闆們拍胸脯互相答應對方的專案事宜,(這種;完全沒有經過開發團隊的估算作業就已經被劃下結案日期的事情,在我做顧問的日子裡,還真是層出不窮),這時候當然不能讓工程師去受難啊!這是做顧問的基本職責。所以就養成自己這種跳火坑的習慣了,但在我介入之後,主管們總會在後面偷偷問我用了這些方法到底可以快多少呢? 此時,我心裡總是盤算著在20/80法則裡,團隊到底能掌握到多少? 是的,一般而言是可以快上幾倍之多,其實說穿了就是要 Work Smart,也就是盡量運用了解了的20%的知識去進行那80%的開發工作。我常常解釋這種Work Smart的成果,是來自於架構以及工程師的專業素養(註1.是否能善用設計模式及物件導向是影響最大的因素)。但這裡我要介紹的是軟技能一書作者John所發明的 「十步學習法」。是的;我把解題跟學習混為一談。

.

解題1.png

.

Learning – Doing – Learning – Teaching

學習 – 實作 – 掌握 – 教授

By: John Z. Sonmez

.

先期準備,形成自學模式

專案開始之初;首先要能看見全局,然後把範圍定下來,接著弄清楚我們可以做到那些(定義)目標,再來是把手上所掌握的資源過濾一下,想清楚從哪裡是最好開始的地方 (創建學習計畫)。 OK,這就是我們自學的前置過程了(前六個步驟是研究準備時期)。這便是十步學習法的前六個步驟,乍看起來還真像極了我們在專案開發初期地做法,先弄清楚專案的全貌,在把範圍也就是邊界畫出來,然後才能開始預估需要多少的資源與時間(所以我把十步學習法稱為十步解題法)。

.

10%e6%ad%a5_1

.

學習方法即解題法則

後四個步驟,就是透過「學習、實作、掌握、教授」進行學習,至於要學習什麼呢? 當然是專案領域的專業知識,這是寫程式之前的必須功課,就是弄清楚要開發的是什麼樣的東西。此時要運用敏捷的核心觀念,小步前進,才可以避免被大量的細節所誤導,而走錯路了,說穿了;就是善用 20/80法則,在正確的方向上持續前進,快速學習。讓我們回過頭來看一下學習金字塔,也就不會奇怪為何最後一步還要教授他人了,因為學習效果最好的是立即學以致用或拿來教授他人(團隊常常做code review的手法在這一點上,可能十分適用)。

.

15_1

.

學習就是解題

工程師需要快速形成自我學習的模式,因為在你開始動工寫程式之前,一定得先學會相關的學科知識才成,所以在學會它之前,你是很難開始動手coding的。所以學習是工程師一開始時的第一要務,而且大部時間裡不會有人主動來教你的,所以自我學習可能是你唯一的途徑了,而所謂的十步學習法,其實正是要教你如何展開自我學習的步驟罷了!至於後面的四步循環,則是強調人們總是透過實作才能進一步了解相關知識的重要性,然後在透過教學相長,才能客觀的評分自己到底學到了多少東西。(這一點正如學習金字塔所做的說明)

.

要學好一種學問,最怕的是一開始就被錯綜複雜的細節所誤導了,尤其是現在的搜尋技術如此的強大,任何搜尋都能查到相當多的細項訊息,很容易就讓人輕易的掉入了訊息的洪流裡,導致我們分散了或忘了原本所想尋找的主題。這正是我所謂的 20/80法則的好處了,透過小量的資訊閱讀專注於 20%的基礎訊息。

.

kanban.png

運用看板來執行十步學習法

.

十步學習法

有二個大步驟,首先是研究準備: 1 ~ 6步(我把它隱含在 定義完成的欄位裡, DoR: Definition of Ready),接著是循環重複的過程 7~10步驟(明顯的學習後的回饋是很重要的)。前面的重點在弄清楚狀況,好擬定學習計畫。後面則是紮實而深入的學習動作,一點都不能偷懶(請參考上面的學習金字塔)。

很少有一個時代像我們這般被資訊淹沒的,10分鐘前才看到FB好友的留言,當時忘了按,事後想補按一下,結果就是在PO文的川流中開始找尋它的蹤跡了。這類訊息的流通方式及過多的流量資訊,真是可怕的很!千萬別輕視它,因為過多的訊息它相對的替我們製造了無比的壓力。這是一種新興事物或是群組所帶來的壓力,我們經常被迫必須快速的回應,自然會形成一股壓力。如果其中又牽扯到更多需要經過消化或學習才會了解的學科常識的話,就會經常觸發我們必須快速學習、消化資訊的壓力,因此不論你是從事何種行業的,快速學習好像都是一種必備的技能。而這種快速學習的方式又明顯得跟我們在學校時的讀書方式大異其趣,所以好像人人都應該建立一種自我學習的模式。運用科技的協助,快速的捕抓資訊,並轉化為對自己有用的知識體系,這裡所談的「十步學習法」正是一種能夠培養你自我學習的學習步驟。步驟雖然多了,但是工程師而言真是再適合不過的了。因為前六不跟我們做專案開始時的思維十分吻合,而後四步則是最基本的教學相長型的學習步調(它與費曼的快速學習法完全相同)。

.

21.png

我雖然是學物理的,但認識費曼先生還是從上面這本書開始的

.

結論

程式開發就是一場學習的過程,團隊必須透過學習才可能了解相關學科的專業知識,也才可能開始coding,因此什麼時候讓團隊開始學習的過程,便是專案開始進入狀況的時候,而工程師們學習得好壞則是開發作業是否順利的基本保證,這一點很難有例外的。一知半解的程式設計人員就會產出一缸子的缺陷bug,然後團隊必須在日後再花上數倍的時間來修正這些錯誤,這些修修補補的債務,也會間接的造成軟體生命週期的縮減,實在是最糟糕的一種開發模式。所以一如敏捷開發的小步迭代開發一般,程式設計人員也應該小量學習知識然後在了解之後,讓程式也採用小量前進的方式進行。此時的作業完全在考驗著程式設計人員的專業素養和他們自我學習的能力。這是何等重要的二大因素,專業素養是絕對需要花很長時間去培養的,但自我學的能力卻是有很多方法可以幫得上忙的。上面的十步學習法就是來自《軟技能》一書作者的佳作,目的正是在培養工程師的自學能力。借助經常性的練習,希望對工程師們能有所幫助。至於學習後再運用學會的知識來創作程式,別忘了筆記成文件,讓程式的生命週期更容易被維護或更容易新增需求,讓這些記錄著學習及撰寫程式過程的文件成為維護者的重要知識來源了。

.

10

開發人員最了解需求的時刻是最值得珍惜的時刻,應該設法補抓這一刻。

(應當運用筆記的方式來記錄知識並製作成文件)

.

  1. 80/20的法則認為:原因和結果、投入和產出、努力和報酬之間本來存在著無法解釋的不平衡。一般來說,投入和努力可以分為兩種不同的類型:

  • 多數,它們只能造成少許的影響;
  • 少數,它們造成主要的、重大的影響。

需求為何一定要排序的理由,20/80法則也說得通,只是業者從來就不認為 20%其實就夠了。

  1. 《軟技能》 作者 John Z. Sonmez

        十步學習法 在第三篇學習篇 的125頁。

.

Written by ruddyllee

2016 年 11 月 24 日 於 11:36:31

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: