[嘀咕]我的程式設計學習之路

我不是一個天生就會寫程式的人,在寫程式這條道路我也碰過很多的挫折,直到我到了一個對的環境,開始用正確的方式做學習,所以學習的環境真的非常重要,如果你剛開始學習,那一定要找一個正確的環境,什麼叫正確的環境呢?就是會讓你每天都覺得有學到新東西,而且有人會告訴你什麼是對的,什麼是不對的,那這個環境通常還不錯,環境對了,接下來就要靠自己努力了。


(http://devhumor.com/programmer/)

今天來談談,我進現在這家公司後,是如何學習程式設計這門知識,我還記得我剛進入公司時,我是進入一個寫Java的單位,對於Java我總有很多的恐懼感,因為大學的時候我Java就修了三次才過,研究所雖然鼓足勇氣又去修了JSP,但其實還是處於一知半解的狀況,期末報告還是交了一個屍體上去,雖然後來還是及格了,但我對Java還是完完全全的不熟悉,對SDK、開發工具都不太懂,物件導向的概念更逢提了,那是什麼?能吃嗎?

我就在這樣懵懵懂懂的狀況下又接觸到Java,開始工作的第一天,老闆給我一個任務就是把某個工具給改版,或許對其他人來說是件簡單的事情,但對我來說我卻連要把程式碼看懂都要花好久好久的時間,工作交代下來的前幾天,我都在看程式、看書、看程式、看書、查文件,三天下來,我一行程式都沒有動到,第四天,我主管來到我的座位問問看我的進度,我跟他說我還在看書,他跟我說:「不懂要問,光看書不動手是沒用的。」,其實那時我心裡很惶恐,因為我連要從何問起都不知道,很擔心自己真的不是那塊料子。

就這樣,又過了兩天,隔週的週一,老闆看我這樣子不行,就讓我去幫忙寫一些簡單的程式,透過基礎的教育訓練,會使用幾個簡單的物件,就開始撰寫一些程式中的商業邏輯,我就這樣子看著範本把自己第一支能run的程式給完成了,雖然其中有許多東西我還是不懂為什麼會這樣(因為library包裝起來),但自己終於寫了一支會動的程式,我還是感到雀躍不已,然後接連幾天,我又寫了幾支相同類型的程式,但當時的我,只是把Java的語法背下來,知道import是幹嘛的,知道什麼是jar檔,但對於為什麼有些物件要new有些不用,對於有些function要return有些沒有還是不太清楚,當時的我對於程式是真的非常非常的無知,有時候看著規格卻不知從何下手,跑去問其他人,人家給了我範例程式,我就照抄了。

就這樣子,過了幾個禮拜,我又開始動手修改本來的工具,程式碼我是看懂了,但我還是不會改,因為我不知道這工具為什麼要這樣寫,本來我只是很單純的寫商業邏輯,寫一些運算,一些判斷,然後把欄位值塞到資料庫中,我本以為我這樣已經算是會寫程式了,但是一面對這個同時有GUI與資料庫存取,同時又涉及工作流程的工具時,我才發現我還是很無知,我還是翻開了書,再把java.swing好好的看一看,這一看大概又花了我一個月的時間,雖然有些進展,但工具仍然是沒有改好,三個月即將過去了,我主管看我沒有半點產出,他就叫我去幫忙做測試,按照test case一個一個去測試,然後把測試的結果反饋給開發者,就這樣子,我每天進公司就是幫忙測試,前前後後測了一個禮拜,我開始覺得有些無聊,但我也到了該入營當兵的時間了,我就這麼離開了。

三個月過去了,我還是不太會寫java,也沒有太明顯的產出,就這樣帶著不安進到了軍中,三個月後我又回到公司上工,這一次我被重新分發到另一個單位,這個單位是以.net為主要的開發工具,剛到職的第一天除了我之外還有兩位大學與研究所同學,而帶我們的也是我大學的學長,進來的第一週他幫我們上課,包含C#跟ASP.NET,然後教我們使用VS.NET,並清楚的跟我們說明我們即將接手維護的系統,然後給我們一個禮拜的時間撰寫一支標準程式,並說明為什麼要這樣寫,接著他也要求我們要能跟別人介紹這個系統,所以我們就在懵懵懂懂的狀況下開始學習這個系統,每次我們幫其他新人上課時,他都會在一旁聽,然後針對我們講的好與講不好的地方給予指導,而為了不想丟臉,我也是卯足了力氣在準備課程的內容,那段時間能力累積的很快,有人帶,真的很好。

一個月後,另一個單位來協調我們部門的人力過去幫忙寫一個整合VSS的建構管理工具,其實當時我對VSS只有簡單的認知,但對於建構管理的觀念非常的模糊,更不要提ALM這種大東西了,不過當時的學姊很細心的跟我說明他們要我做的東西,包含程式碼的申請、核可、簽出、確認、簽入,以及透過Label建立基準的動作,我不熟悉VSS的API,所以也花了點時間去查資料,後來發現有兩種解決方法,一個是透過VSS本身提供的.net元件,另一種是透過command line的方式進行,我兩種都嚐試了,後來發現透過元件的方式程式碼較簡潔,所以我選擇了直接使用元件的方式,在撰寫這個工具的過程中,學長跟學姊也常常會幫我做code review,幫我糾正一些錯誤的寫法,包含magic nomber,string+、SQL Injection,並會告訴我為什麼不要這樣寫,而我也養成習慣當看到不懂的東西,會記錄下來,然後跟同事或者學長姊們請教,那段時間為期三個月,我順利的將成果交付了出去,這是我第一個從頭到尾獨力撰寫出來的程式,而我也真的開始感覺到自己對程式有了一些基礎。

任務完成,我回到原來的部門,當時我們維護的系統正面臨著效能緩慢的問題,我主管請我幫忙研究一下如何提昇ASP.NET網頁程式的執行效率,對一個剛寫了三個多月.net程式的我來說,「效能」對我來說就是意味著如何讓程式跑的更快一點,所以第一件事情我就是上網搜尋「.net效能」,想當然耳,我看到的就是那些針對.net做performance tuning的文章,那時還在.net1.1,其實資料並不是那麼的充足,我看了很久,把程式碼調整又調整,發現真正改善的比例還是很低,差距不到5%,然後我上了藍色小舖去提問,很感謝有一群人給了我一些建議,包含壓縮ViewState、做cache、網頁壓縮、減少html碼,然後我根據這些建議上網查了一些資料,把ViewState的觀念釐清,把網頁傳輸的觀念也搞懂了,也把瀏覽器render畫面的概念也摸熟了,除此之外,我也學會了用httpwatch,也弄懂了http request/response的觀念,把一些JS從網頁中一到靜態的js檔,前前後後我調整了好多東西,修修改改一個月左右,效能提昇了80%,我覺得非常滿意,當然了,需求單位也相當的滿意,這段時間讓我真的把ASP.NET的許多觀念弄懂了,而在這段過程中,自己也更了解google該怎麼下關鍵字才能查到自己想要的資料了。

經過前三個月的程式基礎訓練以及一個多月的效能問題排除,讓我看了不少高手的部落格,包含那時就很有名的黑暗執行緒聖殿祭司Will保哥聖哥的資訊站等部落格與網站都是我一定會看的,雖然有些東西一時之間還看不明白,但我已經養成習慣看不懂的東西就要再去查清楚,觀念就這樣一點一滴的搞懂了,所以說以上幾位都是我剛學習.net時給我帶來很大幫助的前輩,自己也沒想到有一天可以認識他們,哈哈,四個月的時間,讓我掌握了學習程式技術的方法,而我就這樣子一點一滴的成長。

回頭看看這四個月跟最早學java的三個月有什麼不同?我想有幾個根本的差別:
1.有人帶,有人教,有人一起學
2.我會主動問,主動找答案
3.有自己的作品,對自己的有了信心
4.覺得程式很有趣,想要更了解

我不是一個天生就會寫程式的人,在寫程式這條道路我也碰過很多的挫折,直到我到了一個對的環境,開始用正確的方式做學習,所以學習的環境真的非常重要,如果你剛開始學習,那一定要找一個正確的環境,什麼叫正確的環境呢?就是會讓你每天都覺得有學到新東西,而且有人會告訴你什麼是對的,什麼是不對的,那這個環境通常還不錯,環境對了,接下來就要靠自己努力了。

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。