學寫Code失敗之四大原因
![學寫Code失敗之四大原因](/static/3fdc87b2ef04555b3e82ed7d6c4acfd5/66ca4/5e3ada50ca689suit.jpg)
2020-03-21
不知不覺間,筆者從事編程教育已踏入第三個半的年頭:在這段時間之中,見證了二百多位同學由編程初哥開始,經過十多星期的努力、挫折、合作,最終成為專業的程式設計師。當然,在這段時間之中,筆者亦見證了一些學寫Code失敗的情況,固然每個人的天份才能有所不同,有些同學的思考方式天生就與編程較為契合,有些同學則要花九牛二虎之力,才能成為一個專業的程式設計師。
因此,筆者由數年的觀察所得,發現學寫Code失敗的同學皆有一些共通點,因此希望在此分享,如果你有意踏入資訊科技一行,或是想報讀我們Tecky的課程,不妨留意一下自己編程有否這些自己不察覺的問題啊!
四大原因
筆者在芸芸眾多共通點中,歸納出以下四大原因
沒有完成課程(Not Attending Classes)
這一點,不論套用在Tecky之課程上,還是在網上課程之上,都是非常重要的一點。誠然課程不會每一部份都非常有趣,有些人可能比較有興趣從事前端開發,有些則喜歡數據科學; 其實由學習量來說,與四年制的電腦科學學位相比,不論是Tecky的課程抑還是網上MOOC課程,已經是非常非常濃縮,如果跳過了一些課堂,往往會發覺在後面的課堂較難跟上,從而失去了學習熱情。
不少同學都會覺得相較正式課程,Youtube 的短片好像比較容易入口,短短的十數分鐘,教授東西較容易理解。筆者也相當認同這些Youtube 影片在介紹基礎知識時非常有用,不過也要注意的是,Youtube Videos由於長度所限(主要是受觀眾的注意力所限),難以探討較深入的主題。因此Youtube 的影片資源往往高度集中在非常基礎及非常抽象的範疇中。就像以下的一幅圖所示。
中間由編程初學者至專業的軟件工程師,網上所有的資源在這個範疇是非常缺乏的,所以這就是為何大家常常聽過一個講法,就是學會編程不難,不過學到一個能入行的水平卻很不容易。在這個位置,要成功衝破樽頸,最好的莫過於是找專業的軟件工程師去幫助,這亦是我們一開始創立Tecky的原因。
沒有與其他人合作(Not working with peers)
大家可能覺得奇怪,編程不是一個人與一部電腦就可以嗎?為何需要與其他人合作呢?也許在影視作品中,「獨狼式」天才程式員的形象太深入民心,令大眾有此誤解: 其實大家每日使用的軟件之中,絕大多數都是由很多程式設計師,一磚一瓦的建立出來,而非一兩個天才的神來之筆。因此要成為專業的程式設計師,學會與其他程式設計師合作是相當重要的一環。編程的本質是解決難題,經常出現以下情況: 一個自己久攻不克的難題,同事一眼就看出問題所在,頗有「旁觀者清,當局者迷」的韻味。而在編程團隊合作,當然亦會出現不少摩擦,如何解決這個團隊內的問題,亦是成為專業程式設計師的技能之一。
那正在一個人自學的同學怎辦?最好當然是找一些可以與他人合作的專案去完成,從中學習專業的軟件團隊到底是如何工作,實在無時間的話,多出席meetup(當然不包括現在這個抗疫時期) 與其他業界交流也是向他人學習的方法之一。
沒有落手編程(Not Coding by Hand)
這是甚麼意思呢?就是筆者觀察到有一些同學學習時,他們往往覺得能明其大意即可,不太想逐字逐字將程式打出來,又或者只是從網上copy and paste
一段程式碼去解決問題。其實編程是一個非常講究實踐的學問,真的逐字母從鍵盤打出整個程式,才能真正理解寫程式到底是甚麼一回事,所以如果你正在自學編程的話,千萬不要只是觀看影片,就覺得自己理解了編程的奧義,你必須逐字逐字自己用鍵盤打出來,才算是真正的編程,不然你會發覺數天後,你就忘記了絕大多數影片的內容。
為何會出現這個現象呢?因為據多年對人類學習的研究所得,學習很出現一個名為理解的錯覺(The illusion of understanding)的問題,就是人在學習之後,會有一種錯覺,以為自己理解所學之內容,如果這時給他一個小測,就會發覺實際上他所理解遠比自以為要少。因此要避免這種錯覺,最佳的方法就是在學習之後馬上實踐。在理解編程理論之後馬上逐字逐字用鍵盤打出,就可以幫助鞏固剛學的知識,因此要學編程,必須逐字落手編程,捷徑是不存在的。
沒有做好筆記 (Not taking notes)
為何做好筆記很重要呢?學習時,老師常常會為學生提供筆記,那為何還要自己做筆記呢?原因其實很簡單: 因為那筆記是老師的,不是你的。 這是甚麼意思呢?就是老師的筆記就是老師將他所理解的知識綜合(Summarize)而成,因此對老師而言,筆記每一部份都瞭如指掌。而於你而言,你從中學習到知識與老師所教的又有些許不同,又或者你在不同來源又學習了一些老師沒教的東西。如果你將你所理解的知識綜合成你自己的筆記,在做這份筆記過程之中,就能夠大大幫助對這些知識的深入理解。
即使是筆者本身,在從事科技教育之前,對編程的理解也與現今筆者有很大差距。正因為當你嘗試整合知識時,無形之間亦加深了對知識的理解。除了加深理解外,做好了筆記,就不需記住那排山倒海般的知識量了吧,正所謂「好腦袋不如硬筆頭」啊!
像上面Mindmap一類的圖表很適合理解複雜的編程的概念,大家有機會不妨一試。
總結
大家看完這四個原因,是否發覺沒有大眾心目中與天份、智力有關的原因呢?因為成為軟件工程師不需要天份正是筆者及Tecky所秉持的信念,這四個原因皆可以經用改變自己的習慣去避免。 而由筆者數年的教學經驗所得,即使你沒有編程底子,只要你懂得改善自己的學習習慣,終會達至自己的學習目標!
後話: 近日肺炎肆虐,常常困在家,正是學習的好機會,共勉之。
Comments
Read More
![平常人都能掌握的Programming 原則](/static/d391566ca6032ca8a9fa38d84d5c8821/3ab69/5c500ed029b27visual_studio_code.png)
平常人都能掌握的Programming 原則
![平常人都能掌握的Programming 原則](/static/3fdc87b2ef04555b3e82ed7d6c4acfd5/66ca4/5e3ada50ca689suit.jpg)
2019-01-29
大家會定時整理自己電腦中的文件嗎?大家看軟件工程師工作時,往往會發現他們的檔案總是井井有條,資料有條不紊地排列。難道學習軟件工程能使人變得 整齊?原因其實在於軟件工程師經常需要處理大量檔案及資料,因此發展出一套完整的工程原則(Engineering Practice),久而久之,就掌握了資料管理 的要訣。而如果平常人也掌握了這些工程原則,在日常電腦使用,其實也有不少好處。
![軟件工程師成長手冊](/static/c993481bdd1e8ecef25e016b5a1c9ec0/f82a0/5cc681e408b28evolution_of_programmers.jpg)
軟件工程師成長手冊
![軟件工程師成長手冊](/static/3fdc87b2ef04555b3e82ed7d6c4acfd5/66ca4/5e3ada50ca689suit.jpg)
2019-04-29
筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。
![學寫程式為何甚艱難?](/static/8ceb78f6a5584c131e77f22cf1e5bfec/f82a0/5d01fbb3b941fsnow_mountain.jpg)
學寫程式為何甚艱難?
![學寫程式為何甚艱難?](/static/3fdc87b2ef04555b3e82ed7d6c4acfd5/66ca4/5e3ada50ca689suit.jpg)
2019-06-13
如果你想學寫程式,在網上搜尋一下,不難找到不少「輕鬆學習XXX」、「YY天輕鬆學會Python」的教材及影片;去電腦書店逛一圈,很容易就可以找到「七天學會Java」等的書籍,這些教材其實都在推廣一個信念,也就是: 學寫程式很簡單,人人都可以學會。 筆者對此信念後半部深表認同,但是對前半部所謂「學寫程式很簡單」,卻真是不敢苟同。
![學好手勢 == 學好Coding](/static/f5a2c9f253449a54f66789e52053946d/3ab69/5d5d0e769cc36typing_fingers.png)
學好手勢 == 學好Coding
![學好手勢 == 學好Coding](/static/3fdc87b2ef04555b3e82ed7d6c4acfd5/66ca4/5e3ada50ca689suit.jpg)
2019-08-21
編程老手與編程新手在工作時,不論效率、思維方向、甚至打字速度都截然不同,不過在學習編程的道路上,有一個方面常被忽略,就是編程手勢(Coding Practice),有豐富實戰經驗的工程師,通常培養了良好的編程手勢,工作時,自然錯誤較少,也因為除錯得少,省略了不少寶貴的時間,整體結果也蔚然不同。