跳到主要內容

是不是要「很聰明」、「數學很好」才能寫 code?




在我去年開始自學寫程式之前,我常常問是軟體工程師的朋友:「寫 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. 後天努力)

留言

  1. 結果現在The Complete Web Developer in 2020: Zero to Mastery是美金99... haha 但我還是會考慮 ^_^

    回覆刪除
  2. 不定時有特價 今天是370買的

    回覆刪除

張貼留言

這個網誌中的熱門文章

什麼是 Assertiveness? 你容易被情感勒索嗎?

來到美國後我才第一次聽到 assertive 這個單字。美國人將 assertiveness 視為很高的美德,因為那代表一個人具備足夠的自信、溝通技巧、人際成熟度,以至於能夠堅定、清楚地表達自己想要的與不想要的,卻不會因此傷害他人或顯得傲慢、無禮或威脅他人。 Psychology Today  是這樣定義 assertiveness 的: “Assertiveness is a social skill that relies heavily on effective communication while simultaneously respecting the thoughts and wishes of others. People who are assertive clearly and respectfully communicate their wants, needs, positions, and boundaries to others.  Individuals who are high in assertiveness don't shy away from defending their points of view or goals, or from trying to influence others to see their side. They are open to both compliments and constructive criticism. ” (「Assertiveness 是一種社交技能,依靠的是在有效溝通的同時尊重他人的想法及需求。Assertive 的人能清楚且尊重他人地說明自己的需求、渴望、處境以及社交界線。擁有 assertive 特質的人會積極地說服他人了解自己的觀點,也積極地爭取、辯護自己的想法。他們對於讚美及有建設性地批評同樣地歡迎。」) 美國人如此看重、欣賞的 assertiveness 這個單字在中文卻似乎沒有相對應的翻譯。Google translate 將 assertive 翻成「斷言的、斷定的、過分自信的」;我覺得這些翻譯充滿負面含義且非常不正確。 生長在台灣的我,認為台灣確實沒有 assertiveness 的文化。我觀察到的台灣人,普遍很少直接說出自己想要什麼;如果說出來,

常聽人說「現在人人都要學會 coding」-- 但到底是要學什麼?從何開始?去哪裡學?

最近換工作,要學很多以前我沒用過的程式語言技術,像是 TypeScript, GraphQL, Relay 等等。於是我上網找了很多免費的、付費的教學影片,像是在 YouTube、 Udemy、PluralSight 等等平台。 但很多教學影片從製作至今已經過了兩三年甚至五六年。在軟體的世界,過一年就人事已非了,何況是現在去看 2016年的教學說明。許多 web packages 的版本在六年間已經從 version 5.x 跳到 18.x 之類的... 因此即便那個教學影片再怎樣的手把手教學都沒有用。資訊已經完全過時。 軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。 軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。 許多人常萌生要自學 coding的念頭,但因為不得其門而入,一不小心熱情就會澆熄。身為一個自學 coding轉行當軟體工程師的人,我理解這種感覺。我們身在一個資訊爆炸的時代,但資訊量太大,找到對自己有用的教學資源其實就是自學最困難的一步。 很多人想到要學 coding,會想「課程會不會很貴?」「會不會很難?」「會不會需要花很久的時間?」其實這些問題都問錯了。自學 Coding是個知難行易的學問;如果知道怎麼找自學的資源,不用花多少錢甚至免費就能達成。如果找到對症下藥、適合自己的資源,認真跟著看跟著做也不會難上手。但如何找到那個沒有過時、資訊正確又適合自己的課程?很多人花了大把時間、大把金錢就卡在這個第一步。 我舉一個生活化的例子你就懂了。Ikea 的傢俱你說難組嗎?其實一點都不難,但先決條件是 Ikea的說明文件非常好懂、資訊正確,而 Ikea 家具的品管做得不錯,大部分我們買回家的包裝裡頭零件都正確,因此照著說明書一步一步完成不難還非常有成就感。 但我們也都買過很爛的家具組:說明書沒人看得懂、裡頭的零件缺一大堆,甚至連家具的裁切、材料本身都有問題,大小根本組不起來。不然就是說明書過時了:零件已經改版本了,但說明書沒有更新。如果組一個家具要一直打給客服補貨、換貨,而且甚至問題在哪裡我們都推敲不出來、客服那頭沒人回答我們問題... 我們一定非常洩氣,很快就放棄組家具了。我們一定心想「組家具太難了!」 以網頁開發這塊的 coding來說,