最近一直在思考要如何提高學習coding的效率,而今天在嘗試做“計算機”還有跟“電腦玩剪刀石頭布”(雖然感覺宅氣沖天,但是其實滿好玩的XD)的時候我突然發現,其實學習coding的過程,就像是養成任何一種其他工程師的步驟一樣。雖然我的發現很蠢,因為coding相關的工作基本上與Computer Science根本就是息息相關,而這個領域就是希望培育出許多專業的工程師,為人類解決各式各樣的問題。
為什麼要利用類比?
雖然我很愚蠢,但是我們在學習一件事情的時候,若是能夠利用類比(Metaphor)的方式幫助自己理解,其實是一件很有威力的事情。舉例來說,你要如何跟非天文學領域的人,簡單解釋太陽系和各個行星之間的概念?大部分的人可能不知道太陽系到底是什麼,但是如果這時候你說:太陽系由太陽和圍繞著他公轉的各個行星所組成,我們可以把每個太陽和其他行星,想像成一個又一個”球“,而這些”球“分別又繞著太陽系裡最的”球“太陽運轉,這樣是不是就好懂多了?
如果把學習coding的過程類比成培育工程師的過程,我們就很能清楚明瞭在學習coding的路上會遇到什麼,而藉由提早知道可能會遇到什麼,就能夠讓我們預先準備,避免很多不必要的坑。在我的認知中,我們環工系在培育一個工程師時,首先會教授我們系上認為重要的學科。而在各個學科當中,教師會帶領我們了解各個重要的知識、講解、分析,接著讓我們按照教科書上的概念(有時是公式),大量的練習解決問題。但是,在這個階段基本上還是以大量的做題目為主,目的就是讓我們透過足夠的練習,學習如何使用得到的知識。而大學教育結束之後,大部分工程學習的學生會進到實驗室,開始透過獨立的解決”更實際“的問題,學習面對更真實的世界。
學習coding與培養工程師
因此,學習coding的過程應該大致上會一樣,先學習基礎的概念,接著大量的做練習題,並在錯誤中得到反饋;接著學習新的概念、大量練習、得到反饋;甚至過程中會融合新舊觀念、大量練習、得到反饋。而在逐漸熟悉這個過程之後,就要開始解決更全面的問題,而不單純是一個小概念,並且在這個階段,會學著解決”真實社會“中遇到的問題,而不再是單純的練習題。
所以我們可以知道,在這個學習的過程中,最重要的事情可能就是大量練習、大量犯錯、大量學習反饋。因為你現在走過的坑越多,你未來越能夠避開他。而很多事情,若是一開始能夠降低犯錯的風險,就要及早避免(就像是你在寫作業的時候,總不希望花了好幾十分鐘解出答案之後,才發現自己根本就看錯題目一樣)。當我們有這個認知之後,我們就不應該把練習遇到的挫折視為失敗。因為這些都是必然會碰到,而且是越早碰到越好的問題。
接著,我們要開始學會解決真實世界的問題。想像人們在生活中會遇到什麼困難、有哪些東西可以提高人們的效率等等。而”思考“這件事,可能相較於coding能力,重要性絕不遜色。畢竟,如果無法解決真實的問題,就沒有存在的必要畢竟,就像是公司怎麼會想要僱請一個能力很強,但總是無法解決問題的人呢?
結論
而最終,學習coding就像是學習寫作或其他技能一樣,即使一開始表現出來的如此醜陋不堪,但是只要保持恆心地持續練習,讓自己一天比一天都變得更好。終有一天,我們不再是菜鳥、不再是素人、不再是業餘,而會被稱之為這個領域的專家。