在我去年開始自學寫程式之前,我常常問是軟體工程師的朋友:「寫 code 很難吧?感覺超難懂。」在我心目中,寫 code 跟「數學能力」最有關係。
有趣的是,凡軟體工程師給我的回答,幾乎都一樣:「不會呀。學寫 code 就像學英文、日文那樣,就是一個語言。」
但我不是很能夠被這個答案說服,因為我以往跟程式語言的歷史告訴我,寫 code 是很困難的。我從高一第一次接觸 C++,到後來大一上土木工程系的必修課也是修 C++,經驗都蠻慘的,因此我就宣判自己沒有寫程式語言的天份。直到去年我從零開始再次透過線上課程自學寫 code,我才終於體會朋友們說的「學 code 就像學任何一個異國語言一樣」這句話的意思。
就從我高一的時候,第一次接觸程式語言的故事說起吧!那時是我學校的物理老師鼓勵我學程式語言的。他以完全免費的方式輔導我在假日期間學 C++,大概也是看到我對理工科有興趣,想說我可以自學寫一些小程式、搞不好還能參加什麼比賽之類的。於是他給我開了書單,讓我買了兩大本比字典還厚的 C、C++ 教學工具書(這種書現在還存在嗎?)來看,並且給我出功課,要我自己研究怎麼做出一些程式。
但朽木如我,一直碰壁,步步都感到挫折。那時的我,還不知道怎麼「自己找答案」,因此我心中一直期待老師可以好好示範他到底要我做什麼,因為我連他出的功課的題目、他到底想要我做些什麼我都不了解,也不知道從何問起。現在回想起來,老師心中一定是想:「這有什麼難的?自己看書,看不懂去找答案,不就這樣嗎?實際做做看、做不出來用力想直到做出來為止,難道還要手把手教學嗎?」但要知道那時候的我,雖然很喜歡數學、物理,理工能力不差,但「電腦」對我而言,就是一個玩接龍和踩地雷的工具,因此我連怎麼按照書上的說明去設定寫程式的環境都搞不清楚。
總之,第一次學寫程式的經驗,就在我心中無限多個黑人問號中無疾而終。直到上了大一又再次遇到 C++。
這次我以為我可以學得比較好,畢竟這是我第二次跟 C++ 碰面了。我們用的課本,再次是那種厚得令我第一天就把它切割成三分的工具書。但豈知第一堂課老師也就講完差不多三分之一本課本,一下就上完一、兩百頁的進度。
「等等啊!」我心中吶喊。第一堂課我們就從 Hello World 上到 for loop,而且是雙層的 for loop, 因為要用程式語言畫出這個形狀:
*
***
*****
***
*
老師在台上說第一層 for loop 要 iterate i,第二層 for loop iterate j... 但到底 i 跟 j 對應的是星星的什麼?完全沒有時間消化,課程就快速飛過去結束。
於是,我再次宣判自己不是個寫程式的料。「多可惜呀!」我想著。其實我對於要如何畫出那些星星,蠻有研究的興趣。但我看見太多人理解這些概念的速度比我快多了。好像只有我一個人還在那裡 i 跟 j 傻傻分不清楚。「還是算了吧!」我聳肩心想。「應該就是要天才型的人才適合寫 code」。一方面我是對自己失去了信心,另一方面,我是覺得不會 code 反正也沒什麼。那時候的我,還是蠻喜歡在電腦上玩接龍跟踩地雷的。
光陰似箭,轉眼間來到了 2019年,而現今的世界,真的跟以往很不一樣了。「學寫程式」這件事,從教材、教學方法、資源、普及性、每個人的心態、業界的需求量....全部都不一樣了。以前學寫程式遇到挫折,其實就是想辦法那門課不要被當掉就好了,反正世界上會寫 code 的人又有多少呢?誰知道現今的世界是連五歲的孩子自己上 YouTube 看一下影片就會寫 code 了,而隨著 coding 語言的演變得愈來愈直覺化、coding 環境愈來愈好設定、現成的工具愈來愈多,真的是到了「人人都能 code」也「人人都必須會 code」的時代了。
去年我重新開始自學寫程式,發現現在學任何事情真的都比以前容易多了。我以前從來沒有上過線上課程,但我為了找 JavaScript 的教學課程,看了許多 YouTube 影片、Udemy 課程等等,發現在這個線上課程百家爭鳴的年代,真的是有好多好多品質好、價格又低的學習資源。以前我在學習上遇到的障礙,例如覺得老師講的聽不懂、不夠清楚、太快,都可以透過線上課程解決,因為線上多的是一步一步的手把手教學,我還可以同一個片段重複看、放慢速度看、以兩倍速度看... 況且選擇那麼多,我能夠輕易找到最適合我的教學 style。
我找來找去,覺得對我最有用的線上課程,一個是完全免費的 freeCodeCamp,一個是價格便宜的 Complete Web Developer: Zero To Mastery(這門課現不在 Udemy 上;若要 Udemy 平台可改上現在很受好評的 The Complete 2024 Web Development Bootcamp)。
經過我這一年從自學寫程式到成功轉行找到在矽谷的全職軟體工程師職位的經驗,我要來自問自答自己當時心中最大的疑問。「是不是要很聰明、理工頭腦超凡的人才能寫 code?」其實我現在同意我那些軟體工程師朋友們說的,寫程式與其說是在解數學難題,更像是在使用一個非母語的語言,只是溝通的對象是電腦而已。想想你學英語的經驗吧!要了解不同的動詞變化、句型、時態,當然是要理解背後的原理,但更重要的是不斷練習、使用那個語言,最後所有的「為什麼要這樣寫這句話?」都會變成「因為聽起來比較順」、一個直覺的反射。
當然寫程式語言除了習慣它特殊的語法、詞彙之外,也還是有很多需要邏輯判斷、推理、運算的部分,這部分確實是比較像數學。如果要我以一個半路出家人的身分來說我對於學寫 code這件事的看法,我覺得它真的就是一個介於學外國語言跟算數學題目之間的神奇技能。其實你就是在想辦法跟電腦溝通而已,但偏偏電腦聽得懂的語言很奇怪,要用一些等號跟邏輯運算來表達。
所以我不再覺得一定要天才型的人才能靠寫程式當飯碗了,但寫 code 確實還是要有一些些理工能力和興趣。所幸的是現在的網路世界教學資源真的太豐富了,我再也不用抱著一本跟字典一樣厚的工具書對書興嘆、或者因為不知道去哪裡尋答案而自我放棄了。
by Vanessa Wang 歡迎支持我的臉書專頁:【工程師作家的轉行人生】
想要聽我完整的轉行故事嗎?
我的自傳《文藝少女的矽谷進擊》博客來連結:https://reurl.cc/GdgLNW
延伸閱讀:
想學寫程式的我,是否太笨了?(探討先天條件 v.s. 後天努力)
結果現在The Complete Web Developer in 2020: Zero to Mastery是美金99... haha 但我還是會考慮 ^_^
回覆刪除不定時有特價 今天是370買的
回覆刪除