關於如何學習寫程式這件事情,前一篇提到,對我來說,我大概可以分成三個階段,今天要來談第二個階段,也就是我到英國念研究所的時期。

第一階段,有興趣想學,不知道從何學起

第二階段,到英國念研究所

第三階段,開始工作以後

還沒來唸研究所前,說實在的,即使一直說自己有興趣,也是半調子的心態。就像我時常認為自己對好多東西有興趣,對畫圖有興趣,對音樂有興趣,對影片後製有興趣,對打桌球有興趣,對創業有興趣,可是多半都只是三分鐘熱度,或者是半調子心態學習,沒辦法真正當成一門專業。直到真的來英國念了研究所,背負著巨額學貸,加上第一門課程如果被當就要回台灣的壓力,只好硬著頭皮努力學。

剛開始的確非常的艱辛,因為原本對於物件導向那些概念又亂七八糟,加上又是全英文的環境,時常連Tutorial的練習題都看不懂,並不是真的不會寫code,而是根本看不懂到底要我寫什麼。還有很多基礎的Class的概念,繼承、多型、封裝等等,都學得亂七八糟,定義都是死背的,背來考試。報告也亂寫一通,根本不會寫Unit Test。這就是當初的我,現在回憶起來,會覺得當初的我怎麼這麼愚鈍,這麼一點簡單的東西都學不會。但在你完全沒有基礎的時候,那個當下,就是相當的痛苦。所以一開始我也抱持著一種,反正我之後就要回台灣當PM的心態,甚至一種烏龜的態度,覺得反正是女的都可以當PM(這也是念資工的朋友們不斷亂灌輸給我的觀念)。

一直到聖誕節前夕,第一個學期就這樣結束了,我還是不知道自己在幹嘛,也不想真的成為一名工程師,覺得反正我根本不會寫程式,怎樣都學不好,回台灣跟男朋友結婚,隨便找個跨國的科技公司,英文好又有外國學歷,找工作應該很吃香。雖然當時也是硬著頭皮一直亂投履歷,但根本一點下文都沒有,每封履歷都石沉大海,讓我心情更加沮喪,就是一種,反正我怎樣都做不好的心態,日子過一天算一天。

於是我又繼續亂投履歷,亂寫code,一直到二月多的時候竟然拿到了一個面試機會,還一直到最後一關,雖然是Graduate Scheme,但還是讓我增加了很多信心,以為自己真的會寫code。當然中間也是因為,有一段時間跟當時的男友吵架,大約兩個多禮拜沒有聯絡,又要趕作業,原本都可以問男友(他也是工程師),突然一下子什麼都要靠自己,就變得開始真的會用腦袋去思考問題。因為我是一個固執的人,生氣絕對不會低頭,也不會道歉,所以根本不打算跑去問男友問題,就打算自己把作業解決。其實這也是好事,也是一個轉捩點。因為當你發現,你誰也依靠不了時,就會靠自己,靠自己Google,靠自己努力學,這也是當工程師最重要的技能之一。

之後到了Software Engineering這堂課,必須要分組完成作業,分組是隨機分的,大家要一起寫code,這也更讓我意識到了,我不想成為那個扯大家後腿的人,甚至我發現,我竟然是我們組裡面會寫code的那一半耶!我們當時是四個人一組,但有兩個人幾乎還是不大會寫,他們大學是念電子商務的,也是中國一本的大學畢業,只是他們本來對於寫code就沒興趣,大學的時候他們用過dreamwave那類的東西,但畢竟電商還是電商,會改改Html跟真的要實做一個軟體還是差很多,他們也學得很煩,現在兩個都不是工程師,一個好像是IT顧問。總之,在這樣的情況下,自己也覺得應該要有擔當,而且同組的另一個人是我們班寫code最強的人,當然我更不想扯他後腿,他本身是軟體工程系畢業的,工作了一年,又來唸研究所。而且不知道為什麼,當時我就變成的組長,也是因為這樣,我覺得自己應該要擔當起領導者的角色,應該要更有實力。當時我們還要學習使用軟體開發模式,我就選了敏捷開發,即使我根本不知道敏捷開發是什麼。

在學習的階段,很多時候你都不知道自己在幹嘛,就是胡亂搞一通,然後成功就成功,失敗就失敗,尤其是學生,你沒有什麼責任。

就這樣,一直到論文階段,我都還不知道在幹嘛,然後莫名其妙的八月的時候拿到了offer,其實一直到開始工作時,我都還是很害怕寫code,害怕compile不了,害怕自己解決不了問題。時常有一種,無力感,你覺得自己已經學的很努力的,為什麼還是學不會、學不好。但是當過了一段時間,你回頭看的時候,就會覺得,好像也沒什麼,好像這就是一個必經的階段。

至於這段期間我到底是怎麼學習的,其實就是一般去上課,然後回家看投影片,不懂的就上網Google,不然就問看看有沒有別人懂。期間我有去旁聽大學部的課程,旁聽了好幾門課,包含數學系的離散數學、線性代數,當然我沒有全部從頭聽到尾,因為我去旁聽的時候已經是第二學期。英國一個學年有三個學期,第一、二個學期是上課,第三個學期就是專心準備考試,第三個學期的期末考就是一次考前面兩個學期學的,所以第三個學期完全沒有課程可以去旁聽了。

旁聽有用嗎? 其實我覺得見仁見智。很多學生上課的時候,也是自己已經把投影片看完了,自己已經在寫code了,根本不一定需要去上課,但也有去上課很認真抄筆記,卻完全不知道在幹嘛的學生。我想我是後者吧!唯一的好處是,那些投影片自己可以回家慢慢看,至於我到底有沒有全部看完,當然沒有。如果各位有興趣,可以去買一些書,像是作業系統恐龍本,演算法楓葉本等等,Google這些字應該都查的到。看書到底有沒有用呢? 對我來說大概沒有用,因為我完全看不下去。但是對很多人來說,還是有用的,因為你們愛看書。

我想,學習的方法,每個人都有非常大的差異,所以有句成語叫做「因材施教」。

並不是今天你上網看了A的學習過程,你照著學,就可以得到一樣的產出。同一本書,十個人看,十個人學到的內容也不一樣。

我並不知道其他人的學習狀況如何,但就我而言,一直以來我都覺得,很艱辛,甚至比念雅思還要辛苦。這大概是我這輩子,學過最困難的東西,至今還是一直在學習,一直覺得自己還是不太會。

網路上很多人分享,沒有經驗要如何開始學習,通常會先叫你去看一些,線上學習課程,或者買一些書來看,甚至去一些線上學習網站。有些人會推薦看Udemy之類的,也有些人選擇去上台大資訊系統訓練班,或者巨匠電腦的一些課程。

對我來說,這些好像都不太有用,真正督促我學習的是,Deadline。在必須要完成作業的壓力下,我就會很努力地去找方法,因為壓力真的很大。對於其他同學好像也是這樣,就是有種,你不得不做的狀態。即使現在工作也是一樣,如果你永遠沒有Deadline,好像就可以慢慢看影片,看不懂再慢慢看,慢慢看文件,看不懂再慢慢看,最後好像時間就這樣過了,也沒學會什麼。

另外,有同儕可以討論,或者可以問人也是相當重要的。當你自己寫code的時候,往往看不見盲點,但當我和其他人一起寫code的時候,可以互相討論,自己也安心一點。這個方法在職場上也很常見,所以才有很多code review。如果真的找不到人,可以建議上網問,像網路上都有很多論壇,在學校的時候我就是問同學或老師這樣。

很多人會問,所以到底來英國念研究所有沒有用? 對我來說,我的確是學到很多東西,畢竟我原本幾乎沒什麼基礎。至於唸完了以後,是不是就學會寫程式,我覺得當然不是。如同我前面所說,我念完了還是不知道自己幹嘛,大部分都是工作以後才學的,未來會再分享工作以後的學習路程。

其次,很多人也問說,那我完全沒有基礎,我可以去念這個研究所嗎? 學校當然都歡迎你來念,MSC Internet System and E-Business, 也標明了他們會收沒有相關背景的學生,根據學校的說法,也是希望讓更多學生可以投入科技業工作。至於你會不會學到東西、會不會畢業,當然都還是看你個人造化。就像你今天在台灣,不管念哪所大學,會不會學到東西、會不會畢業,當然都是看你怎麼念,這我也無法回答你。

至於課程內容,相信各位上Durham官網都可以查的到。我當時沒有選修,只有必修,似乎現在也是一樣,都是學校已經排好密集式的課程,就跟著學校的安排走就對了。

在英國念研究所的期間,我想改變我的一點也是,這裡的老師都相當熱情,當你完成一點小內容時,大家都會鼓勵你。考試也不是錯一點就全錯,作業也是,都是部分計分。即使你的程式run不起來,老師也會根據你寫的內容給予部分分數,所以相對會真的有種,自己是有在學習、在成長的感覺,而不只是為了考試而努力。另外就是,老師在課堂上也比較會鼓勵學生思考,鼓勵學生發問,鼓勵學生互相交流,老師也說,今天你如果對哪個領域有興趣,就直接寫信去問那個教授,或走到那個實驗室裡面,跟他們說你對他們做的研究有興趣,問他們能不能為你介紹。或者是主動寫信給一些公司,問說能不能和他們一起工作,幫他們做志工這樣,可以得到很多經驗值。

在英國唸書就是一種,跟以前不一樣的態度。以前在大學的時候,都覺得好像只是,為了學位、為了找好工作,但英國讀書的期間,更多是去思考,自己對這個真的有興趣嗎? 很累,但為什麼我要做? 我真的想學嗎? 我到底為什麼要學? 這真的是我以後想做的工作嗎? 我有興趣嗎? 會開始去思考很多事情,甚至整體的環境,當看到大學部的學生很優秀的時候,例如上課都會跟老師互動,老師可能丟一個題目出來,大家會快速解出來這樣,或者針對老師上課的內容提出質疑等等,這些都讓我覺得,自己是不是也可以那樣,就是整體的自我提升,不知道該怎麼說。有一種感覺是,當你身邊的人都很優秀的時候,就會有個錯覺,覺得自己好像也很優秀,自己是Durham的學生,自己對於科學有興趣,自己對寫程式有熱情,然後思考,自己是一個軟體工程師(即使當時只是學生)。

說真的,這跟我來到劍橋的時候一樣的感覺,覺得自己好像變得比較高端XDD 聽起來很好笑,但就是有一種,當你踏入一個學術殿堂時,有一種,求知的渴望。即使時常覺得學得很痛苦,但當你跨越了那道障礙時,就好像昇華了一樣。學習寫程式到現在,時常讓我有這樣的感覺。即使常常覺得自己像個笨蛋一樣,怎麼好像很簡單的內容都解不出來,怎麼好像別人學個三天就學完的東西我要學三個月,怎麼好像大家都是天才,大家都很聰明,就自己最笨。但是當學了一段時間以後,再來看自己,就發現自己好像真的學會了什麼。

如果大家真的很想要學習寫程式,我覺得,實做真的是最重要的。在Durham的期間,每堂課幾乎都要實做,即使你一開始根本什麼概念都不懂,但做了一段時間後,真的會發現,好像就是那樣,一點都不難。就像玩樂高一樣,你空有那些想法,卻了解如果做出好的樂高模型,倒不如直接動手做。做出了一個小東西後,去想,怎樣可以讓他有變化,怎樣可以讓他變得更厲害。

我並不會說,如果你要學習寫程式,要學什麼語言什麼的,每個語言都有不同的特性,物件導向也只是一種Design Pattern 一種設計模式,所以挑選你自己有興趣的東西去學,思考自己未來想走的路,像是你想走Web,你想走Gaming,你想走Destop App,你想走Mobile App,你想走IOT還是什麼的,去看他們需要什麼,這樣會比較有動力。而且每個人擅長的學習方式跟學習曲線也不同,好好思考自己過去怎麼學習一項新技能,不管是語言、生活技能還是什麼都可以,找出對自己最好的學習方式。

寫程式就是不斷的學習,即使你寫了二十年,還是不斷在學習,如果你不喜歡學新的東西,我想你可能可以思考,是不是不該把寫程式當成你的吃飯工具。寫程式並不是,上了課、念了大學、念了研究所就學會了,應該說就,學完了。因為寫程式這件事情,軟體工程這件事情,根本像個無底洞一樣,你學了一個東西,別人就開發出十個東西,除非你就是開發的人。
 

相关文章