顯示具有 工作隨筆 標籤的文章。 顯示所有文章
顯示具有 工作隨筆 標籤的文章。 顯示所有文章

2012年11月16日 星期五

粗心可以殺死一條狗~~


這幾天發生一個事件,因為我的不細心及不夠完整的思維,讓我所屬的開發團隊,遭到二線人員的質疑,說我們的程式沒有quality。這讓我對我的團隊感到很抱歉,尤其是我的leader,因為他是首先第一個被質詢的人。

這件事情是這樣的,我們從B系統移植一個X功能到A系統中,負責人就是我。我在移植的過程中犯了一些過失:

1. 系統中提示文字的顯示迷思
因為A系統和B系統處理顯示的文字是使用不同的動態連結檔,剛好A系統的某個設定有問題,使得A系統會連結到錯誤資料夾中的檔案,也連帶讓X功能可能存在顯示不正常的機會。只是剛好我的電腦在那個錯誤的資料夾中,存在了對的檔案,所以移植到A系統的X功能,在我的電腦可以顯示正常,但測試人員的電腦就出現問題了。
è 我應該更細心的檢查程式碼,發現他們是使用不同的DLL,並檢查出A系統呼叫到錯誤資料夾中的檔案。這樣我就可以修改它,使其可以永遠顯示正常的文字。

2. 忽視一個重要錯誤的不應該
因為我的開發環境是Win7,而使用的開發語言是VB6,所以常常在發生由Win7建構出的程式,在執行時會造成一些錯誤。而我卻把這次的一個錯誤,誤認為是由於Win7所建構造成的,結果最後被發現其實是程式的bug
è 我應該要用另一台XP電腦來建構這個程式,然後再加以測試。這樣就會發現到這個問題並不是由於win7的建構環境所造成,而是我乎叫某個函式的先後順序有誤所產生。

3. 忽視測試過程中每個數值變化的情況
在執行我想得到的測試案例時,我沒有注意到所有使用到的數值的變化,使得我沒有發現到,在寫入歷史紀錄時會誤用到預設的帳號,而不是真正當時在操作的使用者帳號。
è 我應該要更細心的查看每個數值得記錄與更動,只要稍微把每個資料都看過一遍,就一定會發現這個錯誤,但我沒有。

4. 思考到的使用案例不夠全面的後果
在測試的過程中我只著重在X功能本身的測試,沒有思考到與這個X功能有相關的其他功能。根據原本的設定,在X功能中設定某些資料後,啟動Y功能時,Y功能應該要讀取在X功能中設定的資料,並用這些資料來更新資料庫的數值。但因為我不夠全面的思維,沒有發現到Y功能這樣的行為沒有被啟動。
è 我應該更主動去瞭解X功能及與X功能相關的其他功能,並盡可能的找出這些功能的所有使用案例,如果可以依循使用案例來測試,這樣就可以避免掉產出半殘的X功能。

總結:
雖然大部分的問題,很多是由於我對於整個系統的架構和機制還不是很了解所造成,但這不應該作為藉口,因為現在負責的人是我。我應該要想辦法去瞭解,不過我卻沒有做到,只有簡單的測試一下,然後覺得看起來很OK應該沒問題了,這真的是要不得的想法。這些天來我也看了許多測試的書籍,發現上面我犯的許多錯誤,其實書中都有提到,也註明了這是許多測試人員會犯的通病,沒想到就真的發生在我身上了(雖然我是開發人員)。最後,這次的事件對我來說真的是一個很好的教訓,但也是一次很好的學習機會。希望這次的學習,可以讓我更加的成長,並在下次或將來開發時都能更加注意、更加細心地去思考及處理。

2012年11月4日 星期日

工作滿一年回憶錄之台積電篇

終於寫完了,沒想到寫得比宏達電篇還多,而且到後面很多都變心得分享了。反正就當作是自己的工作紀錄吧,因為很多部分應該都是蠻有用的,如果將來自己徬徨或疑惑時,看一看說不定可以引領我到另一片的海闊天空。


工作滿一年回憶錄之台積電篇
從宏達電到台積電,這中間的間隔只隔了一天,這也就表示我繳了一天的國民年金,不過這不是重點。不免俗的來描述一下到職的第一天。記得那天,我騎著車到了台積七廠的側門門口,然後停下車拿出公司寄給我的地圖,確認一下地點,接著就騎進了停車場內,直奔學習中心報到。跟到宏達電第一天一樣,人資先簡單的介紹公司,再來上一些人資安排的課程,中午則是吃便當,然後最重要的來了,上完課差不多六點,人資就說:「今天就到這邊,大家可以回家去了,報到資料有缺繳的明天記得帶喔」,聽完我就乖乖的回家了(原來下班後回家吃飯的感覺是這樣的啊!)。

到台積電沒多久我就發現了一件事,原來待在”辦公室”跟待在”公司”是差這麼多的啊!另外讓我很驚訝的是,我這個課竟然有舉辦樂活日的習俗,就是每個月找一天樂活一下,整個課一起出去玩。雖然才到台積電五個月,不過已經玩過不少地方,像是觀音鄉騎腳踏車之旅、到山上人家半日遊、到中秋內灣烤肉行等等。還有就是,每個新人都要在部門會議的時候準備PPT上台做自我介紹。當時還有一個比我早到的新人,因為我們兩個都會彈吉他,結果就被要求要在部門會議的自我介紹時上台表演。記得當時我彈了一首Drifting。

一開始到台積電其實很不習慣,因為早上八點半左右就要到公司,跟我在宏達電十點才到公司的習慣差很多。所以一開始我都會不小心在公司打起瞌睡,雖然說現在還是會但次數少很多了。另外還有一個很不習慣的是,要學習很多關於半導體製造流程的知識(domain knowledge),這個真的讓我吃足苦頭,因為本科不是念電機沒有足夠的基礎知識,很多根本就是有聽沒有懂。不過慢慢的還是有些瞭解了,雖然現在還是不能完全瞭解,但我想總有一天應該是可以克服的。

此外,由於工作的時程往前推到八點半開始的緣故,我現在幾乎天天都可以回家吃晚餐,而且還有大把的晚上時間讓我消磨。除了偶而上網查一下半導體的一些知識(偶爾真的是偶爾),剩下的時間則是跟在宏達電一樣看書學習,雖然現在看小說的時間比較多。另外,偶爾的上網查資料其實幾乎都查不太到,因為很多都是還在發展中的技術,且在公司也幾乎都算是機密,查得到才有鬼。不過真的要提一下現在的下班時間,因為提早的下班時間,讓我可以跟同事一起去報名公司開的風景畫課程或是騎車衝到台元科技園區聽謝哲青的演講。

至於在台積電學習到的內容,除了上面提到的domain knowledge外,在技術的部分倒是學得不多的,因為我分配到的工作主要是使用VB6,沒錯你沒看錯就是VB6,所以學好VB6還是可以吃的開的喔!其實還有Flex跟J2EE,不過我不負責寫這方面的程式,只是跟著隔壁的同事一起學而已。另外,由於VB6很容易上手,所以我常常會把空出的時間拿來學習Ruby、Javascript和Python,說是學習,其實也只是熟悉一下他們的語法,及試圖瞭解一些與JAVA和C很不一樣的設計概念。不過同時看三種語言,真的很容易把語法互相搞混,常常在寫Javascript時不小心寫成Ruby的語法,還會覺得很奇怪怎麼會無法執行呢?我想還是一次專注一種語言會比較好吧!

另外在在台積電還有一種技能是被非常重視的,就是軟實力。舉凡與user的溝通、和其他部門的協同合作、PPT內容的製作、上台報告的技巧 (下面我會稍微舉例說明) 等等,我想這些是我在台積電最大的收穫。雖然目前這些能力還不夠熟練,但我相信在這樣的環境下,一定可以愈來愈好的(其時是被多K幾次就會慢慢的好起來的)。

在台積電常常會有user來跟IT提需求,因此我們常常就需要跟他們一起討論,說是討論其實有點想吵架。不同於宏達電的工程師,我們可以很大聲的拒絕user的一些需求,或將其導向對IT較有優勢的局面。所以必須要有良好的domain knowledge及溝通能力才能不被user牽著走,甚至主導需求的走向。另外當user的需求有跨到不同部門(也就是跨系統)時,常常就必須要與其他部門的開發者一起開會討論實作的方式:你需要支援什麼部分;我需要提供什麼服務等。因此就必須要學會預約會議室、發會議通知(Meeting Notice)和會議記錄(Meeting Minutes)和主持會議等。

至於報告目前的工作進度的部分,這個是最困難的。你必須要製作PPT和練習報告,不然你可能很容易的就會跟報告論文一樣被釘在上面,更甚者可能直接下台一鞠躬。其中尤以PPT的製作最不容易,你不能只是描述性的或條列式的來撰寫,必須要附上很多圖來說明,因為這樣主管才可以比較快的瞭解你的狀況跟問題,如果都是字的話主管可能會看不下去。還有在問題的描述部分,最好要先說明現行的做法(AS-IS)是什麼、有什麼問題;未來解決以後(TO-BE)是怎樣的情況。另外,千萬不能只帶著問題去報告,不然你一定會被K到死,一定要連解決方案一起帶去,最好要有兩三種。而且在報告的時候,一定要提出你自己的想法及觀點(Pros. & Cons.),然後說明你偏好的是哪一個解決方案,以及選擇的原因是什麼。

總結這個在宏達電和台積電的一年:在宏達電我得到了在硬實力方面的啟發,而在台積電則讓我得到了軟實力方面的啟發。有了這兩方面的啟發,讓我可以更有方向的來加強自己的能力。最後,很感謝宏達電和台積電的同事在這一年中的幫忙與照顧,尤其是宏達電的同事,有手機員購的時候記得通知一下,還有可以進場的時候也不忘提點一下小弟;至於台積電的同事,我想我們應該還有很長的路要一起走下去,彼此都要好好的加油囉!

工作滿一年回憶錄之宏達電篇

昨天11/1是我工作滿一年的日子,為了紀念它想說寫一個工作滿一年回憶錄,結果一不小心就寫了一大篇,索性將它分成宏達電篇和台積電篇。宏達電篇如大家所見的已經完成,希望我可以很快的完成台積電篇。


工作滿一年回憶錄之宏達電篇
不知不覺從開始上班(2011/11/1)到現在已經一年了,雖然不是都在同一間公司,但收穫一樣都很多。短短的一年我在宏達電待了七個月,在台積電待了五個月,很多人可能會覺得怎麼這麼沒定性不到一年就換工作了,關於這個部份我想之後可能會說明一下。

宏達電是我的第一份工作,也是第一個拿到offer的公司,雖然拿到offer後還是到處去面試,說是面試其實是順便去到其他地方晃晃、看看。結果這個舉動反而為難了我自己,在玩玩的過程中殺出了台灣網路認證這個程咬金,真的讓我左右為難了好一陣子,因為都是很不錯的公司。最後我還是因為地點的原故,放棄了位在台北的台灣網路認證,選擇了就近的宏達電。現在想想,用地點作為考量好像不那麼的明智,不過也很難說是好還是不好了。

我記得在宏達電的第一天,我一早七點多就坐火車到桃園總部報到,上了一些人資安排的課後,下午就坐計程車回到竹北辦公室。報到第一天雖然沒做什麼事,但我還是在公司待到了晚上九點,因為其他跟我一起進去的人(當時包含我有三個人一起到這個Team)都沒人提早下班。很快的在一個月內,我們三人組有一個人離職了;又很快了,在試用期內又有一個人離職了(至於他們離職的原因我就不詳述,因為每個人都有自己的規劃)。突然以前的三人組瞬間就剩下我一個,雖然我撐了很久,但還是在半年多一個月後,離開了我的第一份工作、我待的第一間公司。

雖然只有短短個七個月,但過很愉快,也學到很多知識與技術,而我學習到的這些東西,其實是等我到了台積電且多看了幾本書後才慢慢感覺出來。遙想當初,在剛到宏達電的前幾個月我還蠻焦慮的,因為很多東西都不會也不懂,當時每天八九點下班回家後,還會繼續的念書充實自己,不過愈念愈焦慮,愈念愈覺得自己什麼都不會。在這一段的鬼打牆後,我突然想通了,幹嘛囫圇吞棗的念一堆不知道在幹嘛的書。我應該踏踏實實的學習與累積經驗來充實自己,因為這樣才是真正最快的捷徑;而不是想著靠亂七八糟的方法在短時間內追上別人幾年的經驗,我想這樣的最終結果應該只會自取滅亡吧!(其實也沒這麼嚴重啦)

除了晚上的自我學習外,在宏達電我還學到了很多Android的開發技術,舉凡效能的改進、安全漏洞的填補等。還有就是公司要求使用的許多系統,像是公司自行開發的用來build整個ROM和用來prebuild apk(使用hudson系統)的持續整合系統、控制apk版本的Release系統、ITS(Issue Tracking System)系統、程式碼版本控制系統等等,我想這些系統很多在一般的小公司應該很難看到。除了這些系統外,還有主管推薦的兩本參考書:深入淺出物件導向程式設計和深入淺出設計模式。雖然在離職前我還是都沒有看完它們,但還是讓我學到了不少的觀念。最後很感謝就是讓我有機會一個人負責GoogleTask plugin這個AP,雖然在過程中發生了不少事,像是資料儲存機制的打掉重練、重建消失的刪除功能和實踐app update的機制等,不過真的讓我成長不少。

即便生活得很愉快也學到了很多東西,但我還是轉換了跑道到了台積電。會有這樣的轉變,其實都是一些因緣巧合所促成的,這大約是在我到宏達電已經五個月左右發生的。一天我在Facebook上看到當兵的同梯post一則台積電徵才消息,而一切的開始就是我在上面留了一次言,然後就被鬼上身的抱著玩玩的態度(因為之前已經被拒絕過一次)將履歷給了我的同梯去內薦。結果過了一個月竟然接到了面試通知,沒辦法,於是就請了一天假去面試,至於面試的過程我之前已經有寫過分享心得。其實真的就是一堆的巧合,要不是那一天我運氣很好的英文考得還不錯,要不是那天我運氣很好的遇到很不錯的面試官、要不是我運氣很好的又拿到一個很不錯的單位的offer,如果沒有以上的這些"要不是",我想我現在應該還會在宏達電吧!

那究竟是什麼原因讓我決定到台積電呢?當時的情況是這樣的,大概在GoogleTask plugin完成的差不多以後,每天到公司都覺得很無趣,都是解一些奇怪的issue,過著解issue為生的日子,沒有issue就沒什麼事,有issue就加班到比較晚(當然沒有加班費,無敵的責任制),這個時候就已經開始讓我萌生去意的種子。不過突然的一個機會,讓我換去負責另一個跟Verizon合作的AP,於是我堅持了下來。但過沒多久,我發現又是一樣的生活,只是issue比較少了;但卻多了另一件事,就是要看NewBay(另一個參與Verizon專案的公司)嘴臉來跟他們要API,這個部份其是也還好,因為協同合作本來就不容易,更何況是跨國的(對方是在美國的公司)。就在這個時機點我拿到了台積電的offer,不過我還是思考了很久,打聽了很多消息,才做了這最後的決定,至於這個決定是好還是不好,可能還要往後幾年看才會知道。所以就如大家所知的,我現在在台積電了。