修了edx上哈佛大學的CS50,一方面是想一探這門哈佛最受歡迎的課程,另一方面則是想好好複習一下C語言。
誤打誤撞進了碼農(?)這行,僅僅憑著從前在大學草草修過的C語言課程,與一路上同事們的熱心協助,就這樣載浮載沉地打滾了幾年。
總覺得基礎仍然薄弱,於是就趁著這個機會,帶上從前修課用的教科書-C Primer Plus(厚厚一本959頁),展開我的複習大業!
哈佛大學的這門CS50(Introduction to Computer Science)並不假設學生有寫過程式的經驗,事實上,這門課程也許是許多非工科的哈佛學生唯一的一門電腦課程,所以在課程設計上,也盡量不講得太過理論,而是用了許多比喻幫助學生理解程式如何運作,習題的設計也與生活盡量貼近。
課程一共為期十二週,每週的課程包含
lecture : 包含兩段各一小時David Malan教授在大教室的授課影片
walkthrough : David Malan帶著走一遍程式碼
section : 助教演習課
shorts : 針對學習主題解說的小短片
problem set : 習題
現在上到課程第四週,目前的感想是,如果想要有個人手把手地帶著你一步步由淺入深地學習,只是看過lecture的影片其實很不夠。課程並沒有指定的教材與講義,每週兩小時的課程也僅僅是帶著你走過幾個觀念及語法,長篇大論幾十頁的習題,卻要你集當週教學的大成寫個程式出來。
David Malan上課的模式比較像是先為他要你知道的東西做個摘要,並安排一些與學生互動的遊戲引發興趣。像是在談到swap-交換兩個變量值的步驟時,就準備了兩個裝了牛奶和柳橙汁的杯子,請學生示範如何交換兩個杯子的飲料。生動的比喻很容易讓學生印象深刻,但每週兩個小時的時間並不夠好好說明一個觀念並舉些應用的實例。
在這方面,針對一個個學習主題做的short彌補了上大堂課的不足,例如compile的步驟、何謂function、演算法、pointer...等等,每一個小短片都針對一個觀念詳細解說,知識的含量很高。但儘管如此,要真正變成自己的東西,還是得自己動手做過一遍才行。
課後的習題分成兩個部分,第一部分是程式實作題,融入了許多應用的場景作為題材,例如判斷信用卡號碼是否有效、加密程式、打磚塊遊戲等等,在練習之時也會感覺到自己學的東西是真的能做出一些有用的程式出來。不過每一次的習題對於初學者來說,可能都是一個很大的跳躍,可能才剛學會迴圈和if else判斷不久,就得做出一個複雜的結構判斷信用卡號碼的位數,並配合運算式判斷是否有效和是哪家的卡等等。課程並沒有在中間安排幾個小小的練習讓你慢慢摸熟,也因為這是一門網路上的課程,並不像親自在哈佛有個面對面的助教和同學能與你討論,所以自己查資料和debug的工夫可不能少。在完成程式實作的習題後,第二部分則是幾個問答題,像是何謂function、某個演算法為何要這麼作等等問題,幫助你抓住學習的重點。
我認為整個課程含金量最高的就是shorts和習題這兩塊,其實shorts裡講的觀念書上大都找得到,不過有個人帶著走過一遍後,再回去看書就很容易抓到重點。
在哈佛校園裡的這堂課,中間還不時穿插社交活動、課外的project,期末還有個要組隊參加的hackathon,只可惜在網路上無法參與。
回想起在高中、大學的階段,自己未來的方向就得在上過一堆課後逐漸做出選擇,中間遇到過很有心、卻不知道怎麼把學生帶起來的老師,也遇過嘗試突破傳統框架教學、充滿熱忱的老師,也曾經歷過自己上完課完全不知所云,到了做實驗時才領悟的成就感。大部分學過的東西早已還給老師,但幾個自己印象深刻的作品、幾個感動的時刻仍然記得。
學習一個東西,我想除了功利地考量到學會什麼樣的求生技能、多了點機會外,另一樣收穫在增加了見識,瞭解到看起來很厲害的表象,底下原來就是遵循著這一套規則在運作。
2015年9月3日 星期四
2015年6月21日 星期日
關於開放式課程...
現在網路上的學習資源越來越多,我在上大學時開始聽到"開放式課程"的概念,大致上就是將學校上課的實況做個錄影,有點像補習班的為補課做的錄影,配合上課的講義、作業,甚至包含考試題目和解答放到網上開放給大眾免費瀏覽。
到了研究所時,開放式課程越做越好,出現了像是Coursera, edX等等的教學平台,課程內容不再只是隨堂錄影,而是請到教授專門為線上課程錄製影片,影片長度不是以小時為單位的課堂長度,而是拆成一個個的學習點,一段影片針對一個學習點作約十分鐘左右的說明,中間不時穿插互動式的問答。課後也有計分的隨堂測驗、作業等等,當最後修課成績合格時,有的課程還會授與修課證明。
"開放式課程"的課程內容,從早期大學課堂上必修的微積分、普物、普化...,到現在教學平台上五花八門的課程,涵蓋歷史、哲學、心理學、音樂...各個領域。
從2012年開始關注開放式課程,也註冊了幾門Coursera上的課程,但一直要到2014年,才認真地從頭到尾上完幾門課程,包含愛丁堡大學的音樂概論、麻省理工的數位電路設計、和新竹清大的計算機網路概論...,現在正在上哈佛大學的CS50等課程。
其實就算是沒有這些開放式課程,照樣可以從坊間各式各樣的書獲取知識,但是開放式課程提供的是一個不同的角度、一個可相互討論分享的網路社群、和一個外在的動力。
到了研究所時,開放式課程越做越好,出現了像是Coursera, edX等等的教學平台,課程內容不再只是隨堂錄影,而是請到教授專門為線上課程錄製影片,影片長度不是以小時為單位的課堂長度,而是拆成一個個的學習點,一段影片針對一個學習點作約十分鐘左右的說明,中間不時穿插互動式的問答。課後也有計分的隨堂測驗、作業等等,當最後修課成績合格時,有的課程還會授與修課證明。
"開放式課程"的課程內容,從早期大學課堂上必修的微積分、普物、普化...,到現在教學平台上五花八門的課程,涵蓋歷史、哲學、心理學、音樂...各個領域。
從2012年開始關注開放式課程,也註冊了幾門Coursera上的課程,但一直要到2014年,才認真地從頭到尾上完幾門課程,包含愛丁堡大學的音樂概論、麻省理工的數位電路設計、和新竹清大的計算機網路概論...,現在正在上哈佛大學的CS50等課程。
其實就算是沒有這些開放式課程,照樣可以從坊間各式各樣的書獲取知識,但是開放式課程提供的是一個不同的角度、一個可相互討論分享的網路社群、和一個外在的動力。
就一個個來說吧!
1. 不同的角度 :
以我的學習經驗來說,一本教科書擺在面前直接硬啃,跟有人先帶你走過一遍再去啃,後者的效果要好得多,你會比較知道閱讀的重點,理解的速度也較快。
開放式課程的影片,就像是一個老師帶著你先走一遍,而且就我上過MIT的數位電路和正在上的CS50來說,我覺得著重的點也跟以往上課的點不大一樣。
這兩門課程,給我的印象是重視內容的廣度、而不會在課程上說明太多的細節。比如說數位電路關於布林代數的化簡和卡諾圖等等,在台灣可以講好幾節課,但MIT只是舉幾個例子稍稍帶過,不會說明太多繁瑣的計算。相對地,它會用啟發的方式引導學生了解資訊如何"數位化",如何用電路實現數位化,一個數位電路的基本單元如何構成、有什麼限制等等,它會告訴你這門課程在整個學問體系中的定位在哪裡。學生能比較知道學習這門課的意義為何,但也得自己花些功夫去掌握細節。
另一個印象深刻的是,這兩門課程都用了許多的比喻,比如說哈佛的CS50,要說明電腦僅僅是個一步步執行指令的機器,只不過執行的速度非常地快而已 - 這個概念,就請了幾個學生上台,要他們作出觀眾要求的動作...,相信要比一句話帶過令人印象深刻多了。
還有一點很不一樣的是,修的這兩門課程都很重視實作。舉MIT的數位電路為例,課程作業包含了幾個電腦模擬的lab,開出一個電路規格,學生自己要用基本的組件來組合出要求的電路。而在其他填空的問答題中,也以各種模擬情境來設計問題,比如說一家新創公司找你當顧問解決技術問題、或是政府出資支持你的研究,你要向議員說明這個東西為什麼有用,不是在浪費納稅人的錢...。整個課程營造的氛圍,讓你感覺這不只是一門課而已,而是真的可以作出一些有用的東西。
2. 網路社群 :
我覺得這是"自學"和"跟著開放式課程學習"兩者很大的不同。自己抱著一本書學,碰到不懂的地方或不會的題目,可以google找資料,但網路上的回答不一定切合你的問題,你必須推敲網友的回答該如何應用到你的問題上。
而在開放式課程的學習平台上,往往設有針對每一個學習點和習題的討論區或是臉書社團等等,不懂的可以直接在上面發問,或是先參考之前其他人的問答。討論區裡的網友們,就好像課堂上的同學,有些人還會在上面自我介紹或是分享修課的心得。網路無國界!你會發現同學來自四面八方。逛逛討論區也成了種樂趣!
3. 外在的動力 :
除了有個網路社群陪伴以外,開放式課程也往往設有一個繳交作業的截止日期,錯過了這著日期沒有繳交,就會影響到你最後的成績,直接影響到你最後的修課成績是否合格,能不能拿到修課證明。
雖然說一紙修課證明,不知道對未來有什麼用處,但畢竟是對自己的一個肯定,也就會成為一股鞭策自己的動力了!
學習這件事,在各個階段對我的意義都不大一樣。
上大學以前,學習是一個比較的籌碼,但當時總認為學習是老師與長輩的責任;
上了大學後,學習是一種對自我的試探,但習慣被動後已忘了如何主動學習;
上了研究所,學習是一個求生的手段,工作在即,開始想著如何讓自己有更多的機會;
出了社會後,載浮載沉過一陣子,在這個講求專業與瞬息萬變的行業中,學習-仍然是求生的必備技能,但屏除專業以外,學習,應當也是一種享受。
學習樂理,把玩和弦的變化;學習歷史,瞭解社會的演進;學習藝術,沉澱紛雜的心靈;
學習運動,享受與人的互動;回過頭來,學習專業,享受完成一件任務的成就感。
希望未來的路上,持續有種種的樂趣相隨!
2015年4月18日 星期六
數位電路設計 - 開放式課程筆記(一)
最近幾個月在複習數位電路,同時上了一門edx上MIT和交大OCW的數位電路課程。
EDX MITx: 6.004.1x https://courses.edx.org/courses/MITx/6.004.1x/1T2015/info
數位電路(Digital
circuit)是電機系大一的必修課,以前大四時想拿個電機輔系跑去聽這門課,但一直到下學期的實驗課寫verilog時才有一點感覺。
交大的這門課的規劃跟以前自己上的進度差不多,大概就是一整個學期先講組合電路(combinational
circuit)、再講順序電路(sequential
circuit)。
但MIT的進度要緊湊得多,edx上的Digital
Circuits不過是校內課程6.004
Computation Structure的三分之一,數位電路在台灣要講一學期的內容只講了6週,接著則進入programmable
architecture和computer
systems。
比較起來,MIT的這門課程要更注重與其他學門的關係,課後的練習也不時帶你去質疑一些看來基本、但也許不問,就從來不會去深究的電路。除了一般的填答題,還有幾個電路模擬的實驗,按照spec走過一遍更有感覺。
以下就每堂課做個簡單的筆記
:
第一講 : Basics of Information
第一講 : Basics of Information
1. 定量訊息 :
先對information下個定義
: Data communicated or received
that resolves uncertainty about particular fact or circumstance.
要定量一筆訊息,先知道該訊息出現的機率,再來計算要使用幾個0/1來為此筆訊息編碼,可由I(x)=log(base2)(1/機率)得到該訊息的量。
例如在一副牌中出現紅心的機率是1/4,訊息量即為2
bit;黑桃A則是1/52,訊息量為5.70
bit。
得到的訊息量越多,越能去除掉不確定性。
2. 編碼 :
編碼(encoding)
: an unambiguoug mapping between bit strings and the set of possible
data
原則上就是用一串bit的組合來表示一組data。若各個data出現的機率均等,可使用固定t;長度的bit組合;若不均等,可使用不定長度的編碼。
- ASCII共有94個字元,就可用log2(94) ~ 6.555約7個bit表示。
- Binary-Coded Decimal (BCD)可用log2(10) ~ 3.322約4個bit表示。
- 正整數可由二進制編碼表示,而為了閱讀方便,可將二進制改寫成十六進制
- 負數可使用signed magnitude將首位設成1,或是用2補數表示。
- * n個bit的數N,其二補數 = 2^n – N
- 不定長度的編碼可使用Huffman's algorithm, LZW...
3. 偵錯與除錯 :
當送出與收到的訊息不一樣時,表示有幾個bit出了錯。
Hamming distance : The number of positions in which the corresponding digits differ in two encodings of the same length.
兩段相同長度的編碼,對應位置不同的數值的bit數目,即為Hamming distance。
要能偵測單個bit的錯誤,可在原先的data再加上一位parity
bit,使得總共1出現奇數或偶數次。
原來兩組有效訊息之間的Hamming
distance就從1增加到2。
若是拿到的訊息出現1的奇偶次數與發送方不同,即表示可能出現單個bit的錯誤。
若是要偵測更多bit錯誤,Hamming
distance就要再增加。
- 偵測E個錯誤,兩組有效訊息之間的Hamming distance為E+1
- 更正E個錯誤,兩組有效訊息之間的Hamming distance為2E+1
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
第二講 : The Digital Abstraction
1. 編碼的bit怎麼來 :
使用電壓來編碼 – 電壓容易產生、偵測,也有可能較省電;但容易受環境影響,也有可能受到電容電壓的延遲影響。
但若要使用電壓來趨近一段連續的變化,例如0~10的變化分別以10個電壓位階來表示時,又容易受到干擾。
-> 用電壓僅表示bit的兩個值 0,1
- 有一個以上的數位輸入
- 有一個以上的數位輸出
- 有一份功能規格(functional specification)詳述每個輸出與輸入所有可能的值的對應關係
- 有一份時間規格(timing specification)至少包含了穩定有效的輸入至輸出所需的時間
- 沒有directed cycles,從輸入到輸出,每個元件僅會經過一次 * 沒有feedbach loop
訊息傳送的過程中,有可能會受到外界雜訊的干擾,造成上一級的訊號輸出到了下一級的輸入發生錯誤。因此,提高判斷輸出訊號為1或是0的標準,容許輸出在進入下一級的輸入時能有一定的誤差範圍,稱為noise
margin。
- 輸出 :
0
: V <= V(OL)
1
: V >= V(OH)
- 輸入 :
0 : V <= V(IL)
1 : V >= V(IH)
- 標準 :
對於低電位來說,輸出的電壓V(OL)
要小於 V(IL)
對於高電位來說,輸出的電壓V(OH)要大於V(IH)
即有效的輸出電壓須大於V(OH)或小於V(OL)
而有效的輸入電壓須大於V(IH)或小於V(IL)
而V(IL)和V(IH)之間則為Forbidden
Zone,當輸入電壓落在此區間時,輸出可為任何值
簡單地說 : V(OL) < V(IL) < V(IH) < V(OH)
output對於判斷是0或是1的要求較為嚴格,當signal從output到input之間若受到雜訊干擾,只要仍在input判斷0和1的範圍之內,仍為有效值。
允許雜訊干擾的範圍 : V(IL) - V(OL) 和 V(OH) - V(IH),即為noise margin。
2014年11月29日 星期六
生活有感
工作已有一年多的時間,跟以前的學生生活比起來, 想要支配自己生活的欲望要更多了一些.
因此,儘管週一到週五的工作忙得再昏天暗地, 儘管週六日有時還是要來加班, 但總是會要求自己在每週的生活中加點料.
有演唱會和音樂會,有興趣也在預算之內,有人沒人陪都去聽;
XMEN和變形金剛的續集上映,以前有看過沒看過都去追;
公司有人揪打羽球,足球,籃球,有打過沒打過都跟著一塊去打;
在網路上看到有聚會,烏克麗麗社團,跑步社團,台灣人聚會, 只要有興趣,報個名就去;
逛樂高店突然想買樂高來組,就真的買了組樂高回家組;
有一天想自己做飯,網上查了查資料,去超市買了鍋碗瓢,和飯菜, 回家就做;
有個三天以上的連假,訂個機票就出國,澳門,吉隆坡,香港... ;
好多好多,是我以前從來沒想過,或想過也不敢一個人做的事.
從前高中,大學時期, 苛刻地要求自己要去做些認為對自己未來有幫助的事情,
所以高中的假期塞了滿滿的補習班課表或是自修進度.
到了大學時期又是要求自己去修或是參加一些認為可以提升自己, 但卻沒什麼興趣的課程或社團.
自己有沒有成長不很清楚,但我很明白自己對生命的熱情- 就在這些不喜歡的人事物上一點一滴地被消耗掉.
到了研究所時期逐漸改變心態,向內探尋自己的聲音, 尋找真能打動自己,以及某些很想做,但一直沒有勇氣去做的事情.
所以,
我參加了一個國際交流的學生社團;
我參加了桌球社;
我加入了動物園志工隊;
我製作了英文教材;
我兼了兩份家教;
雖然結果並不一定盡如我意, 但我在這種種的嘗試之中也慢慢發現自己對於旅行,教學的熱情,
旅行對我來說是件很酷的事情,
儘管每次出發前心裡還是會滴咕著為什麼不在家裡睡大覺就好, 為何要自找麻煩
儘管每次一個人走在路上時心裡還是難免有些忐忑不安 胡思亂想
但又很享受每一次到一個新地方時, 親眼目睹某個景點的感動
還記得到馬來西亞坐著機場捷運往吉隆坡市區的路上,遠遠望見雙子星大廈兩座發亮尖塔時的悸動,
也還記得在香港的維多利亞港灣與太平山頂, 成排摩天大廈帶給我的視覺震撼,
我想...這都是看再多旅遊書,逛再多網誌所無法體會到的感受.
而每一次旅遊回來, 我也都好慶幸自己勇敢地踏了出去, 得到了好多特別又珍貴的回憶, 也更珍惜健康能到處跑跳的自己.
而教學這件事情, 我則是在"學"與"教"這兩個步驟得到了滿足.
教之前一般我會先準備教材, 有時在準備的時候弄懂了一些之前一直不懂的東西. 等到都弄懂了以後, 再循著邏輯架構組織成一份教材. 這整個過程走完, 我又自己學了一遍, 從"學"到"精通"再到"掌握"整個過程的感覺很好.
而在教這個步驟, 雖然說我的能力無法將每個學生都教到好, 但對於能教到會的學生,見證著他從陌生,到了解,到能使用我的方法去解決問題,甚至因此對我的態度變得親近, 這樣的感覺也很棒.
"旅行"和"教學"這兩件事情與我現在的工作似乎沒有太大的關聯, 也不確定對於這兩件事情的投資, 能對我的專業帶來多少貢獻.
但至少, 我在做這兩件事情時得到了感動與滿足, 也因此擁有了繼續走下去的動力.
2014年8月11日 星期一
音樂課筆記(一) : 課程介紹
七月到八月上了Coursera上的兩門音樂課,一門是愛丁堡大學開設的"基礎音樂理論";
另一門則是柏克萊音樂學院的"音樂技巧開發"課程。
另一門則是柏克萊音樂學院的"音樂技巧開發"課程。
(來源 : https://www.coursera.org/)
而"音樂技巧開發"課程則是著重在訓練音感,簡單地介紹C大調音階後就從C大調的大二度、大三度...一直到大七度,每介紹幾個音程,講者就會彈幾組音測驗學生是否能分辨是哪個音程。
雖然偶爾也有在聽些流行樂曲,和把玩一些樂器,但對於曲子背後的樂理我並不了解,想要練一首曲子也就是照著譜彈,不知道可以怎麼變化,總有種知其然而不知其所以然的感覺。
這兩門課對我來說就是個入門,而這一系列的文章則是我的課程筆記。
--------------------------------------------------------------------------------------------------------------------------------
在"基礎音樂理論"這堂課開始之前,講者提醒大家:
不會讀寫音符記號(musical notation)不代表你就不能作曲或演奏;相對地,會讀寫音符記號也不代表你就能成為一個作曲家或音樂家。
然而,了解音符記號卻能使你成為一位更圓滑的音樂家,它幫助你了解數世紀以來的音樂資產,表達,分析,記錄和發展關於音樂的想法。
音符記號是一個音樂上重大的發展,對西方音樂文化和思想有驚人的影響,掌握並精通音符記號並沒有甚麼特別的困難之處,只需要時間熟悉和練習。
它本身只是一個工具,並不是終點。
而"音樂技巧開發"這堂課的在開頭則邀請了幾位學生分享和聲及音感的重要性,講者也請網路上的學生們每週要花一定的時間練習,最重要的,是要能享受樂趣!
2013年7月10日 星期三
字言字語
時常有種想記錄當下生活的衝動, 不為什麼, 就是想寫下來讓自己舒坦些. 但又擔心自己胸中墨水太少詞不達意, 所以沒過多久就把這股勁兒給擱在一旁, 也因此, 有許多的生活點滴就這樣隨著時間逐漸褪去, 等有一天想再回首, 卻只發現一團團模模糊糊的輪廓, 想看也看不清了...
如果, 現在的我不能精確地捕捉當下, 但能至少試著描繪幾個有意思的生活片段, 至少至少, 為自己留下些曾經走過的痕跡, 未來再回頭看時, 心中會不會少了點遺憾呢?
如果, 現在的我不能精確地捕捉當下, 但能至少試著描繪幾個有意思的生活片段, 至少至少, 為自己留下些曾經走過的痕跡, 未來再回頭看時, 心中會不會少了點遺憾呢?
2013年6月7日 星期五
新手上路
完成學位論文、拿到畢業證書,到一連串密集的面試找工作…一步一步地,我已逐步踏出校園,走入社會。
其實上了研究所以後,就感覺一隻腳已踏入了社會 - 每週一次的研究進度報告,生活的重心必須要放在研究上面。即使參加了社團,但已不太能再像大學生那樣投入社團的運作,心裡頭掛念的,也不再是該修什麼通識課程,而是該繼續念博士?還是工作?工作的話要到什麼產業?什麼公司?
我喜歡大學生活的形式,學校要求你必須拿些專業領域外的學分,因此你有理由可以選你想修的課程;修課以外,你也沒有研究工作的包袱,因此你也有時間可以參與想參加的社團活動。但大學生涯也像個倒數計時,給你四年的時間探索,時間滴答滴答,到了大三大四時,就要做出選擇。
大學時期我修了許多許多的課,雖然不盡如意,但也漸了解到現實。物理很迷人,但我並沒有從中得到成就感;反倒是在電機系修的幾門實驗課,做出了一些成品像電子鐘、收音機等等,雖然比起理論力學、量子力學等等理論感覺平凡許多,但至少,我因此感到開心。
我是在服完兵役之後,才考了研究所來念。還是抱著一試的心態,去修了幾門物理相關的課程;也為了不負”電子所”的招牌,把製程、元件、和電路的核心課程都修了一遍。經歷了大學與服役的過程,研究所時期我自覺成熟了一些,也想要再複製一次大學時期的嘗試。這個階段我幾乎要把研究所當成大學來念,也因此,我到了研究所很後面的階段,才有時間用心在研究上頭。
也許我該感謝我的指導教授,他很早就提醒我們要專心做研究,我沒聽他的話,延誤了研究進度,但他也沒就這樣給我草率畢業。在最後獨自摸索的階段,過得痛苦,但也想通了幾個道理,到現在我工作了,還是覺得相當有用的。
1. 對於一個大的問題,可以先分解成幾個小問題,一個個逐步解決,最後再兜在一起 :
我在接到一個問題時,開始時往往因為沒有頭緒而容易慌亂。但靜下來想想,也許對這整個問題目前還沒有方法,但我可以把它分成幾個階段,再看看每個階段有甚麼是我已經會的,有甚麼是我還不會,要再查資料或問人的,一個時間做好一個階段的工作,最後再把每個階段的成品組合在一起。 就比如說我以前的論文是做一個感測器,我就先把感測器分成”物理結構”和”電路”兩個部分,物理結構又可分成 : 設計 -> 模擬 -> 佈局 -> 製程 …等等。關於”設計”有不懂的,就去查文獻,”模擬”和”佈局”不懂的;就去查軟體使用說明書,或問有經驗的學長;”製程”除了參考文獻的配方之外,也需要多次的trial and error來得到一組可用的製程參數;同樣的道理,電路也可分成 : 設計 -> 佈局 -> 量測…等等階段。 分解成幾個步驟來看,除了幫助自己理清頭緒之外,也可以比較清楚自己現在位在哪個階段,算是一個讓自己安心的方式。
2. 當一個問題卡住的時候,想想看可能造成的原因有哪些,再一個一個調整變數,觀察結果有沒有改變,來找出關鍵的原因 :
這個道理是我工作後才體會得比較深的。我現在在寫一個程式,拿去跑時很常出現bug或一些非預期的結果,這時候我就會先觀察程式執行到哪個階段才出現問題,先排除沒問題的部分,在對於幾個懷疑會出錯的地方,改一下代碼或是改變一下輸入,看看結果有沒有不一樣,若是有不一樣,那有可能就是這個地方出錯了。再回想從前的感測器研究,物理結構和電路個別應該都沒有問題,但把兩者組合在一起時就出現了問題,這時候就要檢查看看還有甚麼是有可能出錯的。原來量測系統的探針上帶有靜電,使得感測器上也會產生感應電荷,造成輸出的電位不穩定。這時候再改變一下探針的狀態---將探針接地,導出靜電,問題就解決了!
3. 一個問題可能有好多種解決的方法,每個方法都有它的優缺點,針對要應用的環境,選擇一個最適合的方法 :
剛開始做研究時,往往都是從”文獻回顧”開始。就拿我做的感測器來說,現在有好多種感測的方法,但每個方法使用上多少都有限制,比如有的可能製程很麻煩、有的容易受溫度影響、或很不敏感等等。這時候就要看看自己現有的資源,和要應用的感測環境,選擇一個最適合的方法來用。現在開始寫程式後,發現要實現一個功能,也有好多種方法,但同樣每個方法也是有些限制,有的速度快、有的比較準確…,這時候就要衡量一下使用者的環境,選擇一個適合的方法。
解決問題是件很有成就感的事情。但也逐漸發現自己懂得很少,當懂得越多時,對一個問題就會有更多的對策。現在覺得學校開了很多的課程,就是在幫助學生建立一個資料庫,以後有問題就可以從裡面去找。工作以後,人家就期待你能馬上幫他們解決問題了!
訂閱:
文章 (Atom)


