學寫Code失敗之四大原因

Gordon Lau

Gordon Lau

2020-03-21

不知不覺間,筆者從事編程教育已踏入第三個半的年頭:在這段時間之中,見證了二百多位同學由編程初哥開始,經過十多星期的努力、挫折、合作,最終成為專業的程式設計師。當然,在這段時間之中,筆者亦見證了一些學寫Code失敗的情況,固然每個人的天份才能有所不同,有些同學的思考方式天生就與編程較為契合,有些同學則要花九牛二虎之力,才能成為一個專業的程式設計師。

因此,筆者由數年的觀察所得,發現學寫Code失敗的同學皆有一些共通點,因此希望在此分享,如果你有意踏入資訊科技一行,或是想報讀我們Tecky的課程,不妨留意一下自己編程有否這些自己不察覺的問題啊!

四大原因

筆者在芸芸眾多共通點中,歸納出以下四大原因

four-big-reasons-why-you-failed.png

沒有完成課程(Not Attending Classes)

這一點,不論套用在Tecky之課程上,還是在網上課程之上,都是非常重要的一點。誠然課程不會每一部份都非常有趣,有些人可能比較有興趣從事前端開發,有些則喜歡數據科學; 其實由學習量來說,與四年制的電腦科學學位相比,不論是Tecky的課程抑還是網上MOOC課程,已經是非常非常濃縮,如果跳過了一些課堂,往往會發覺在後面的課堂較難跟上,從而失去了學習熱情。

不少同學都會覺得相較正式課程,Youtube 的短片好像比較容易入口,短短的十數分鐘,教授東西較容易理解。筆者也相當認同這些Youtube 影片在介紹基礎知識時非常有用,不過也要注意的是,Youtube Videos由於長度所限(主要是受觀眾的注意力所限),難以探討較深入的主題。因此Youtube 的影片資源往往高度集中在非常基礎非常抽象的範疇中。就像以下的一幅圖所示。

coding_is_hard_resource_density.png

Images by thinkful.com

中間由編程初學者至專業的軟件工程師,網上所有的資源在這個範疇是非常缺乏的,所以這就是為何大家常常聽過一個講法,就是學會編程不難,不過學到一個能入行的水平卻很不容易。在這個位置,要成功衝破樽頸,最好的莫過於是找專業的軟件工程師去幫助,這亦是我們一開始創立Tecky的原因。

沒有與其他人合作(Not working with peers)

大家可能覺得奇怪,編程不是一個人與一部電腦就可以嗎?為何需要與其他人合作呢?也許在影視作品中,「獨狼式」天才程式員的形象太深入民心,令大眾有此誤解: 其實大家每日使用的軟件之中,絕大多數都是由很多程式設計師,一磚一瓦的建立出來,而非一兩個天才的神來之筆。因此要成為專業的程式設計師,學會與其他程式設計師合作是相當重要的一環。編程的本質是解決難題,經常出現以下情況: 一個自己久攻不克的難題,同事一眼就看出問題所在,頗有「旁觀者清,當局者迷」的韻味。而在編程團隊合作,當然亦會出現不少摩擦,如何解決這個團隊內的問題,亦是成為專業程式設計師的技能之一。

Pair_programming.jpg

Image from Wikipedia

那正在一個人自學的同學怎辦?最好當然是找一些可以與他人合作的專案去完成,從中學習專業的軟件團隊到底是如何工作,實在無時間的話,多出席meetup(當然不包括現在這個抗疫時期) 與其他業界交流也是向他人學習的方法之一。

沒有落手編程(Not Coding by Hand)

這是甚麼意思呢?就是筆者觀察到有一些同學學習時,他們往往覺得能明其大意即可,不太想逐字逐字將程式打出來,又或者只是從網上copy and paste一段程式碼去解決問題。其實編程是一個非常講究實踐的學問,真的逐字母從鍵盤打出整個程式,才能真正理解寫程式到底是甚麼一回事,所以如果你正在自學編程的話,千萬不要只是觀看影片,就覺得自己理解了編程的奧義,你必須逐字逐字自己用鍵盤打出來,才算是真正的編程,不然你會發覺數天後,你就忘記了絕大多數影片的內容。

typing_code.jpeg

Image from Freecodecamp

為何會出現這個現象呢?因為據多年對人類學習的研究所得,學習很出現一個名為理解的錯覺(The illusion of understanding)的問題,就是人在學習之後,會有一種錯覺,以為自己理解所學之內容,如果這時給他一個小測,就會發覺實際上他所理解遠比自以為要少。因此要避免這種錯覺,最佳的方法就是在學習之後馬上實踐。在理解編程理論之後馬上逐字逐字用鍵盤打出,就可以幫助鞏固剛學的知識,因此要學編程,必須逐字落手編程,捷徑是不存在的。

沒有做好筆記 (Not taking notes)

為何做好筆記很重要呢?學習時,老師常常會為學生提供筆記,那為何還要自己做筆記呢?原因其實很簡單: 因為那筆記是老師的,不是你的。 這是甚麼意思呢?就是老師的筆記就是老師將他所理解的知識綜合(Summarize)而成,因此對老師而言,筆記每一部份都瞭如指掌。而於你而言,你從中學習到知識與老師所教的又有些許不同,又或者你在不同來源又學習了一些老師沒教的東西。如果你將你所理解的知識綜合成你自己的筆記,在做這份筆記過程之中,就能夠大大幫助對這些知識的深入理解。

mindmap.jpg

Image from Wikipedia

即使是筆者本身,在從事科技教育之前,對編程的理解也與現今筆者有很大差距。正因為當你嘗試整合知識時,無形之間亦加深了對知識的理解。除了加深理解外,做好了筆記,就不需記住那排山倒海般的知識量了吧,正所謂「好腦袋不如硬筆頭」啊!

像上面Mindmap一類的圖表很適合理解複雜的編程的概念,大家有機會不妨一試。

總結

大家看完這四個原因,是否發覺沒有大眾心目中與天份、智力有關的原因呢?因為成為軟件工程師不需要天份正是筆者及Tecky所秉持的信念,這四個原因皆可以經用改變自己的習慣去避免。 而由筆者數年的教學經驗所得,即使你沒有編程底子,只要你懂得改善自己的學習習慣,終會達至自己的學習目標!

後話: 近日肺炎肆虐,常常困在家,正是學習的好機會,共勉之

Comments

Read More

學好手勢 == 學好Coding

學寫程式為何甚艱難?

軟件工程師成長手冊

平常人都能掌握的Programming 原則