跳到主要內容

花九個月,靠自學轉行軟體工程師 -- 我所用的網路資源

by Vanessa Wang       歡迎支持我的臉書專頁:【工程師作家的轉行人生


因為身邊有許多半路出家的軟體工程師,包含我老公,我一直抱持著或許某天我也要轉行當軟體工程師的想法。但我到了成為媽媽、小孩快一歲的時候,我才開始自學寫程式。

從 2018年底開始,我花了九個月的時間自學寫程式,並於 2019年七月成功轉行、找到了在加州矽谷全職軟體工程師(front-end web development)的工作。我沒有參加 bootcamp,就是在網路上找資源、自修。我是台大土木工程碩士畢業,後來到美國讀創意寫作碩士。成為軟體工程師之前,我沒有在職場上當過工程師,以前主要的工作以當 technical writer 寫技術文件為主。(更多關於我轉職的動機、轉職前的履歷

這篇想整理一下我自學期間用過的教材、工具,但這些都僅供參考,畢竟每個人的狀況、目標都不一樣。我始終相信「盡信書不如無書」。我這九個月中學到最重要的一件事就是凡事要有自己的想法、相信自己。像我這樣的文章網路上有很多,每個人用的方法都不太一樣。參考別人走過的道路很好,但更重要的是規劃最適合自己的一條路,然後自信地走下去。

以下就是轉行的路上,對我最有用的網路資源、工具:

  • 一篇 Medium 上的文章 by Andrei Neagoie 


這是我還在當 technical writer 時,某天上班無聊隨便 google 找到的。那時候還不太確定自己要不要轉行軟體工程,所以常常在網路上參考他人的經驗。我不時地都會回來看這篇文章,這篇文章可以說是貫徹我自學期間的一個中心思想。我很欣賞他的理念,尤其是以下這段話:

“I spent the first month avoiding any tutorials or books. Instead, I spent this month looking at the best way for me to learn and get hired. I studied other people’s experiences, looked at job postings, spoke to established developers, reviewed online courses, looked at bootcamps, and even read articles by futurists on where we will be with technology in 20 years. Based on those, I created a curriculum for myself focused on efficiency: The critical amount of learning in order to be employable in the shortest amount of time.”

Andrei 有幾個重點理念我很欣賞:
    • 不要直接開始讀書。先花一個月擬好戰略、設計讀書計畫。
    • 目標明確:Andrei 清楚地知道他不要等到完全 ready、很強才開始找工作。他只想要先學會「能讓他找到第一份工作」的最低技能門檻,然後他在職場上便能一邊賺錢一邊學習。
    • 讀書的期間,他還到處旅行。讀書不等於當一個苦行僧;要認真,但也要記住人生還有其他的事情。



這是一個免費的網路課程,內容舉凡 web development front end (JavaScript, React, Redux), back end, database...都有涵蓋。

我就是從這邊入門開始學 HTML、CSS、JavaScript 的。這個教學平台設計地很像一個遊戲,每一個關卡小小的、很簡單,我第一天就破了大概一百關,從 Hello World 學到 CSS 的一些基本概念。我幾乎停不下來,因為很有成就感。而且每個關卡很小,我有時候就是在上班的空檔玩個幾關。

這個免費教學平台對於不確定自己喜不喜歡寫 code、想要入門體驗一下的人很有幫助。


  • Udemy 上的課程

經過幾個月在 freeCodeCamp 上玩來玩去,我已經確定我喜歡 coding,想轉行當軟體工程師了。有些人會問該學什麼? Web development? Mobile development? Machine Learning? Cryptocurrency? 前端?後端?老實說我一秒鐘就決定了,因為我老公是寫 JavaScript 的前端工程師,而且他也有參加 coding bootcamp,我知道這是最好入門的管道;為了方便有人讓我問問題,我就選了學 web development。

但 freeCodeCamp 上到 React、Redux 那邊之後,我就開始完全不能理解他的邏輯了。因為它還是維持每個關卡短短那種風格,沒有什麼說明,只是要你寫幾行 code 破關,但沒有前後文讓我覺得沒頭沒尾的。我感到很瓶頸,於是又開始在網路上到處看看找教材。這時再次回到 Andrei 那篇 Medium 的文章。重看一遍這篇文章,我才發現原來 Andrei 是 Udemy 上的名師,開了三、四門課都是暢銷課程。從他的文章中,我看得出來他是做事有方法、教學理念和我相近的人,於是我就買了他的一門課來上:

The Complete Web Developer in 2024: Zero to Mastery (這門課現不在 Udemy 上;若想要Udemy 平台建議改上現在很受好評的 The Complete 2024 Web Development Bootcamp

價格相當便宜的課程(特價期間出現過$20 USD 以下),反正不喜歡就算了。但開始上之後,我發現他的教學方式我非常能夠接受,這門課就變成我自學期間 60% 的資訊來源。

後來我也上了他另外幾門 Udemy 的課,特色都是價格低於 $20鎂、內容充實(30小時以上的教學影片)及注重實作:

Master the Coding Interview: Data Structures + Algorithms

The Complete Junior to Senior Web Developer Roadmap (2024)
     
Complete Python Developer in 2024: Zero to Mastery (這篇是我上這門課的詳細心得)

Complete Machine Learning and Data Science: Zero to Mastery (機器學習及資料科學)

  • Online developer groups

我有一個一歲的女兒,所以我讀書的時間就是她每天去保姆家的九個小時(這也是我沒有參加 bootcamp 的原因)。晚上跟週末基本上沒有什麼時間。也因為這樣,雖然我住在科技業重鎮的矽谷,但我沒有什麼時間去參加常常辦在晚上及週末的 networking 活動。

但我發現很多 networking 其實是可以在網路上發生的。我加入了好幾個 women developer 的臉書群組,有些有好幾萬個會員,有些只有一百個,但著實對我幫助不少。在這些群組中我找到歸屬感,知道很多人正經歷跟我一樣自學、找工作的掙扎,大家會互相分享經驗、吐苦水。也有好幾個人熱心地跟我視訊,提供我一些找工作的建議或分享當純 freelancer 的生活型態。我組隊跟一些人參加一個線上 coding 競賽。這些事情看似微不足道,但這些過程一點一滴地讓我慢慢以 software engineer 的身分看待自己。

我甚至在這些群組中找到了一些 freelance projects 的機會,用我新學成的 coding skills 賺到了第一張支票。這對於我的信心、堅持下去的動力幫助很大。

這樣的群組很多,我就列兩個比較大的:


這是一個找工作的平台,你把履歷放上去,公司有興趣就會主動找上你,你不需要自己去投履歷。這種平台很多,特別介紹這個是因為我有很多面試機會都是在這裡找到的。

我必須說這上面的公司都是蠻小的公司、新創公司,有些公司品質甚至不太好。但有時候找工作就是寧可多一點面試機會、練習的機會。把這當作一個開始,面試機會就會愈來愈多,總比投履歷完全沒有回應的那種感覺好。

我在 AngelList 上找到替一家小公司實習的機會,是遠端的,而且我一週只做十小時,原因是我的時間很寶貴(小孩白天去保姆家的九小時中我要學習、丟履歷、面試等等)。所以這個實習模式對我而言很理想:不會佔用我太多時間,又幫助我在履歷上多加了有用的經歷,讓我得以在面試時講得出我有哪些寫程式的經驗。

當我終於找到了全職軟體工程師的工作時,這家小公司的雇主就是我 reference list 上列出的推薦人。沒有這位給我實習機會的雇主,我也找不到正職工作。

我投履歷一陣子之後發現我缺的不是面試機會(至少一個禮拜會有好幾個 recruiter calls),但我常常過不了 technical interviews。

Software Engineer 的 technical interviews 八成是考 algorithm & data structure,然後有些小公司要你在幾天內照他們的指示做出一個 app。

做 app 的部分我只能一直自己練習,重複看 Udemy 上 web development 的課程,繼續累積 projects 實戰經驗,但 algorithm & data structure 部分我開始覺得有些瓶頸。

但因為 Udemy 是自己控制進度的課程,我學的不是很有效率。

這時我找到了 Outco 的課程。你可以把這個想成一個面試軟體工程師職位的補習班,專門教你 algorithm & data structure 以及幫你 mock interview 練習回答 behavioral questions。這個課程總共五週,一週上四天,一天上三個小時,可以去舊金山的教室上,也可以上線上課程。

它的教學進度快得有點嚇人,今天上 linked list,明天上 trees,後天上 graphs。雖然每天只有三小時的課,但那三小時中真的是滿到無法喘息。這個課程不便宜,要 $5000 USD(可以選擇找到工作後再慢慢還學費),但我覺得有它的價值。至少如果靠自學、沒有他人的督促,我沒有辦法在五週內把大部分的 data structures 學完。

但這個課程對我而言最有幫助的部分,是遇到了幾個目標相同的同學,我們常在課餘時間一起在線上 pair coding,討論我們對於 data structures 的理解、一起解題(就是每個人放一個白板在電腦前面用白板筆解題)。這個腦力激盪的過程對我幫助超級大;除了我們可以互相補足彼此不懂的部分,我也漸漸理解我解不出問題時,不一定是因為我比較笨或什麼的,因為這些題目真的就是需要不斷地練習。同學中有些是當了好幾年的軟體工程師,都當到 engineering manager了,但為了面試,還是得練習刷題。

進入 Outco 還有一個面試的過程。有人問這個面試難嗎?大概至少需要知道 array, hash table, 解過 LeetCode 上一些 easy 的問題吧!

如果你對這Outco 的課程有興趣,歡迎聯絡我讓我 refer 你吧!(透過我的 referral 學費可以折 $100 USD)


想要購買 LeetCode Premium 的讀者, 只要使用這個連結  , 就能有八五折優惠(原價一年 $159 USD 變一年$135)。

只要是美國的軟體工程師或者想要轉行成為軟體工程師的人,不可能不知道 LeetCode。大家都知道要成為軟體工程師,最大要跨越的門檻就是面試中的技術白板題,也就是要在面試官前面表演寫出一行一行的 code 解題。而 LeetCode 就是面試考古題的題庫大寶典,集結所有大小公司常出現的題目的練習平台以及詳解。我認識的許多軟體工程師,不管是找第一份工作或者往後要跳槽、換到更好的職位加薪,靠的就是每天上 LeetCode 網站做考古題、反覆練習。

軟體工程師面試的技術白板題一直帶給我很沈重的壓力。我從來不是一位理工科特別突出的人,而是屬於文科理科很平均的人,但軟體工程師的面試感覺 90% 決定在你的解題能力 .... 每次聽到別人說自己刷了幾百題、幾千題 LeetCode 考古題,而且還反覆刷不只一遍,我就覺得還沒開始刷我就想放棄了。

但我老公一直給我很好的觀念。他說他面試通過拿到第一份在 Solar City (現為 Tesla) 的軟體工程師職位時,只有刷 60 題 LeetCode。我老公也是非本科系靠自學轉行成為軟體工程師,而且「60」這個數字聽起來沒有太遙不可及,感覺是我可以做得到的。就像他文章裡所說的,要練習的是解題思考方式及面試中表達思路的方法,不然就算練一萬題也不一定會剛好考到你做過的題目。
如果你和我一樣,對於軟體工程師的面試白板題很害怕,那就跟我當初一樣,先把目標設定低一點,例如跟自己說至少做完 20題 LeetCode 吧!目標設太遠大,反而遲遲無法開始。



以上就是我整理的網路教材、工具。


猶豫「這麼老了」轉行還來得及嗎?可以看我這篇:
這麼老了轉行還來得及嘛? 一歲女兒顛覆我對「時間」的理解

想要聽我完整的轉行故事嗎?
我的自傳《文藝少女的矽谷進擊》博客來連結https://reurl.cc/GdgLNW

留言

  1. 現在是什麼人都可以當工程師了嗎? 門檻真低 前端真是把行情搞壞

    回覆刪除
    回覆
    1. ? 这个评论是针对作者吗?不是人人都在大学18岁一上来就找到了自己喜欢有可以糊口的专业的。如果你是科班出生,恭喜你是那一个幸运儿。(也希望coding就真是你内心所爱,而不是为了吃口饭而勉强为之)。半路出家,只要是有决心,有毅力,有一些天分也可以成为很好的工程师。所以,半路出家的工程师真的是要更加努力,不要成为被看不起的随便什么人都可以做前端的前端码农。

      刪除
    2. 會做出這麼沒建設性的批評,自己一定沒甚麼實力。

      刪除
    3. 就是有樓樓上這種人只敢匿名罵人。
      如果你認為作者拉低了你的門檻,我更認為你的言論拉低了做為文明人的門檻。
      你不喜歡你可以選擇不要看,但請你不要到處留這種言論,讓創作者和分享者覺得很難過。
      國外的公司和面試官都認可她的自學能力,為什麼同為寫中文的你卻不能給予鼓勵?

      作者可以自學成為軟體工程師非常的厲害,而且她還無私地分享很多經驗和工具。
      我非常的感謝~ :)

      刪除
    4. 謝謝妳的鼓勵與認同 TingYu!酸民到處都有,我儘量一笑置之!

      刪除
  2. 謝謝你的分享,我現在也在自學。
    想請問你在家自學的時候會容易分心嗎?是怎麼樣去安排專注學習的時間的呢?
    (話說我沒有辦法勾選左下角的notify me...?)

    回覆刪除
    回覆
    1. 會分心,但每個人都會。沒有人能夠 100% 有效率的利用時間,所以不要過度在意分心的時間。發現自己分心的時候提醒自己快點回去讀書就好了,或者不然乾脆就好好的休息一下出去走走。

      刪除
  3. 恭喜!!在這非美國人找工作難的年頭還能找到工程師工作真的很厲害!
    我明年畢業,因為不是CS的緣故,不知道找全端工程師工作履歷那方面會不會碰壁...
    目前只能努力在學校多做project,多學CS的知識。
    你的分享很有用,剛好我也是女生,立刻就申請加入社團了XD
    希望你未來也一切順利~

    回覆刪除
    回覆
    1. 太棒嘍!如此有行動力的妳,相信一定沒有問題。我覺得除了能力之外,勇往直前也很重要。許多人擔心東擔心西,怕自己底子不夠、怕自己沒有符合工作條件、怕自己還沒準備好,結果履歷遲遲沒有寄出去,或者投的數量不夠大,這樣真的很可惜。什麼都別想,一直試就對了,反正最慘就是被拒絕然後再投下一間。

      刪除
  4. 我覺得最重要的是freeCodeCamp的部分。 如果連不用花錢的都沒有興趣。 真的不應該有後面的部分。 因為那個只是白花錢。 我覺得轉職的重點不在是不是會不會coding 而是在有沒有興趣coding.

    回覆刪除
    回覆
    1. 如果轉行的目標包含找到能賺錢的工作,那光「有興趣」是不夠的,因為不會有人因為你對一件事有興趣就雇用你。還是得有實力以及有辦法通過面試才行。如果能夠不花一毛錢就學到能夠被雇用的程度那當然最好,但有時候花錢能省下時間,用更快速的方法達到目的。每個人自行衡量自身狀況,沒有任何方法適用所有人。

      刪除
    2. freeCodeCamp 超爛,整個用不下去。。

      刪除
  5. 很喜歡你們夫妻的文章,從老公的文章看到矽谷的視野,而從老婆的文章我看到的是驚人及讓我欽佩的勇氣。身為父親,同時也身為軟體工程師,知道面試刷題準備及育兒是多麼難兼顧的事情,真心佩服您,恭喜您 :)

    回覆刪除
  6. 我弟開了公司一家軟件工程公司,他是自學的;他公司裡最得力的員工也是自學的。

    回覆刪除
  7. 請問這些課程購買了之後能保存多久呢?

    回覆刪除
  8. 謝謝你的分享!我好喜歡 from junior to senior 那個課程,涵蓋了我好多困惑。

    而且,老師講英文的速度也很剛好XD

    回覆刪除
  9. 不好意思, 想請教一下, 我本身是設計方面出生, 再行銷的行業裡也打滾了10 多年, 因為興趣還有與網路的需求, 現在的職位是marketing website specialist, 公司網站的負責人, 使用的是wordpress. 我在CSS, HTML 應該都有基本的基礎, 但在JS方面, 就遠遠覺得不足夠, 我也用閒暇時間在udemy 上進修了JS 跟python 的課程, 雖然說在看完也照著tutorial 完成了一些project, 但感覺還是無法真正的從無到有寫出完整的project ... 我想請教的是, 是否需要很熟練的JS能力才能找到相關工作呢? 怎麼樣才能定義自我是否有機會能進入初階軟體工程師的職位呢? 我真的很希望能有一個轉換跑道的可能, 但由於年紀, 家庭, (無法真的搬去矽谷) 工作經驗, 都讓我有阻礙, 身邊周遭的人也都沒有任何可以切磋詢問的朋友, 感到無力. 還希望能聽聽你們夫妻的建議. 非常感謝.

    回覆刪除
    回覆
    1. 我覺得你可以直接投遞履歷,試著跟 recruiters 聊聊,就會理解自己距離被雇用還有多遙遠。缺什麼你就去補強那一塊。因為若要到達覺得自己準備好的程度,真的是很難的一個標準,因為永遠都學不完...

      刪除
  10. 你好! 十分感謝你的文章,我從前當了近10年的老師,現在在意大利修讀文科類的研究生,習慣了歐洲的節奏讓我希望能找一份較休閒又能去不同國家生活的正職,讓我能花時間鑽研自己的興趣,所以畢業後打算轉行做IT 方面的工作,想請問你一下在IT 行業裡哪一類型的工作比較能接受近30歲零經驗入行呢?金融領域會比較易找穩定不會加班的工作嗎? 我最開始對UIUX 比較有興趣,但查看了一下資料覺得這方面的工作一般招會本地語言的比較多,如果先由編程開始後再轉UIUX 會很奇怪嗎?
    不好意思問題有點多,年紀愈大愈擔心會轉錯行業,在網上找資料找了大半年還是對轉行猶豫不決,希望能聽聽您的建議,謝謝!:)

    回覆刪除
    回覆
    1. 還不到 30 還很年輕!做什麼都可以的。 UIUX 跟寫程式緊密相關,若是純做 UX設計,恐怕進入門檻還比做 UI engineer 高。

      刪除
  11. google引擎、臉書、uber等等程式,都是結合創意的計劃和程式變成偉大的發明,改變了人的生活、改變了人的思考模式、甚至創造了無數的可能和工作。
    於是我很好奇這背後的原理是什麼,怎麼生出來的。
    上網查了資料,發現「啊~這就是所謂的coding啊!!」
    我目前是一位老師,這個好奇心讓我想窺探coding的世界,並且夢想有朝一日能夠創造出造福人類的軟件。
    感覺這個夢很遙遠…因為我的數學真的非常不好,甚至前天我和朋友說我想學coding的時候還被嘲笑了一番!
    所以我就在網路打「數學不好可以學寫程式嗎?」意外找到你的blog,真的覺得又驚又喜!
    看完你的故事後,讓我了解,世界上真的沒有不可能的事情!
    透過努力跟練習真的能幫我們帶到想要的地方!
    謝謝你花時間寫這些心路歷程還分享這麼多學習的資源
    我也要努力下去!!

    回覆刪除
    回覆
    1. 謝謝你的留言。覺得數學不好不能 coding 真的是很舊的思維了,因為隨著程式語言演變得愈來愈人性化之後,入門門檻也愈來愈低。這就像是許多機器在以前的話是只有專業人士才能夠理解、使用,但現在老年人都會用 iphone,是一樣的道理。科技必定會愈來愈平民化;要趁現在還沒有人人都會寫 code 的時代入門較好。

      刪除
  12. 你轉職那段時間有看實體書嗎?還是都是網路上的資源?

    回覆刪除
  13. 版主您好,我也是在矽谷的二寶媽,原本職業是UI設計師,因為懷孕生產而離職,最近小孩們開始都去托嬰,就有種想趕快轉行並重回職場的感覺,原本就知道您的轉行故事覺得深受啟發,最近又看到您臉書的po文是有關於想要賺更多銀兩照顧長輩和小孩,幫忙老公一起分擔家計的心情,真的覺得太太太有同感。目前也是趁小孩托嬰時在家上網課自學,但是只要小孩前晚半夜沒睡過夜,隔天就會感覺疲勞沒有精神學習效率不佳,不知道您有沒有遇過這樣的情況而又是怎麼克服的呢?謝謝!

    回覆刪除
    回覆
    1. 辛苦妳了!別太逼自己,一天能做多少事就做多少事,睡覺也是很重要的。慢慢走也是會走到的。

      刪除
  14. Hi Venessa,
    我有跟圖書館借您的書來看,也在youtube上聽了您在電台上的分享,書包含了您的人生的各部分,但是在職涯方面,我覺得這篇網誌寫的比書更清楚呢!
    謝謝您的分享,我是文組本科生,從小就畏懼數學,常常考不好,所以大學讀了超級文組的科系,出社會後也做了文組的工作。看了您的書之後,也開始試著學習寫code,最近在freecodecamp上也完成了一些進度,雖然沒辦法跟您一樣一天完成一百多道題,但對于我這個純文組來說已經很知足了。

    Ps,您有說寫到自己比較喜歡被吳淡如主持人採訪的那集,但我比較喜歡林書煒主持人的風格,感覺她問的更細一點。

    回覆刪除
    回覆
    1. 哇,謝謝妳那麼仔細閱讀我的書及聽我的訪談!
      祝一切順利

      刪除
  15. 非常謝謝你的分享~~我也正在惡補演算法與資料結構! 希望有一天可以去矽谷!

    回覆刪除

張貼留言

這個網誌中的熱門文章

什麼是 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來說,

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

在我去年開始自學寫程式之前,我常常問是軟體工程師的朋友:「寫 code 很難吧?感覺超難懂。」在我心目中,寫 code 跟「數學能力」最有關係。 有趣的是,凡軟體工程師給我的回答,幾乎都一樣:「不會呀。學寫 code 就像學英文、日文那樣,就是一個語言。」 但我不是很能夠被這個答案說服,因為我以往跟程式語言的歷史告訴我,寫 code 是很困難的。我從高一第一次接觸 C++,到後來大一上土木工程系的必修課也是修 C++,經驗都蠻慘的,因此我就宣判自己沒有寫程式語言的天份。直到去年我從零開始再次透過線上課程自學寫 code,我才終於體會朋友們說的「學 code 就像學任何一個異國語言一樣」這句話的意思。 就從我高一的時候,第一次接觸程式語言的故事說起吧!那時是我學校的物理老師鼓勵我學程式語言的。他以完全免費的方式輔導我在假日期間學 C++,大概也是看到我對理工科有興趣,想說我可以自學寫一些小程式、搞不好還能參加什麼比賽之類的。於是他給我開了書單,讓我買了兩大本比字典還厚的 C、C++ 教學工具書(這種書現在還存在嗎?)來看,並且給我出功課,要我自己研究怎麼做出一些程式。 但朽木如我,一直碰壁,步步都感到挫折。那時的我,還不知道怎麼「自己找答案」,因此我心中一直期待老師可以好好示範他到底要我做什麼,因為我連他出的功課的題目、他到底想要我做些什麼我都不了解,也不知道從何問起。現在回想起來,老師心中一定是想:「這有什麼難的?自己看書,看不懂去找答案,不就這樣嗎?實際做做看、做不出來用力想直到做出來為止,難道還要手把手教學嗎?」但要知道那時候的我,雖然很喜歡數學、物理,理工能力不差,但「電腦」對我而言,就是一個玩接龍和踩地雷的工具,因此我連怎麼按照書上的說明去設定寫程式的環境都搞不清楚。 總之,第一次學寫程式的經驗,就在我心中無限多個黑人問號中無疾而終。直到上了大一又再次遇到 C++。 這次我以為我可以學得比較好,畢竟這是我第二次跟 C++ 碰面了。我們用的課本,再次是那種厚得令我第一天就把它切割成三分的工具書。但豈知第一堂課老師也就講完差不多三分之一本課本,一下就上完一、兩百頁的進度。 「等等啊!」我心中吶喊。第一堂課我們就從 Hello World 上到 for loop,而且是雙層的 for loop, 因為要用程式語言畫出這個形狀: