從純文科生到軟體工程師之路「你想學程式做什麼?」一個不簡單的問題,與我的答案

作者寫給那個兩年前徬徨不安的自己、那個曾經想過轉換跑道卻躊躇不前,或是正在經歷這個轉捩點的讀者。
評論
Photo Credit:Shutterstock/達志影像
評論

本篇來自 Alice Yang 投稿,同步刊登於 Medium,INSIDE 編審後刊登。關於作者:從純文科生轉換跑道,誤打誤撞來到矽谷當起軟體工程師,上班寫的是程式碼,骨子裡仍然是無可救藥著迷於 storytelling 的浪漫主義者,不想錯過任何生命中發生的新奇事物,因此決定持續用文字,去紀錄一段段世代的呢喃。

前言:

兩年前,我結束了在哈佛教育科技的學業。兩年後,我又重回寫作崗位,多了個不一樣的職位:後端軟體工程師,座標矽谷。

從高中畢業之後就此與理科脫節,埋首於人文科學、詩集和小說的純文科生,跨足軟體工程的巨變,一切的契機源自美麗的錯誤……。

對程式語言一竅不通,卻仍有個「程式夢」

說起來慚愧,雖然自己曾洋洋灑灑地寫過程式學習相關的文章,向讀者介紹「哈佛大學最『狂』的一門課」,大談程式語言:

這堂課(CS50)所涵蓋的知識含量甚廣,課程內容包括抽象化(abstraction)、 演算法(algorithms)、資料結構(data structures)、封裝 (encapsulation)、資源管理(resource management)、資訊安全(security)、軟體工程(software engineering),以及網路開發(web development),還有各種程式語言介紹:C、Python、SQL、JavaScript、CSS、HTML,都包含在 12 週的課程內!

但是大家有所不知,當時的我壓根沒有任何物件導向(Object Oriented Programming)的基礎,也不懂網路開發有前端(front-end)、後端(back-end)之分,更別提有能力自己寫下任何一行程式碼。

但說也奇妙,在我心中一直有個「總有一天要學程式」的念頭,於是我輾轉來到了柏克萊大學的資訊學院,從麻州搬到了加州,筆記型電腦裡裝上了各式各樣的 IDE(整合開發環境,Integrated Development Environment),踏上了另一段截然不同的學習之旅。

無數次試誤後,我的經驗分享

回首兩年來的學習路,到即將展開人生第一個軟體工程師的正職工作,我總想寫下點什麼,寫給那個兩年前徬徨不安的自己、那個曾經想過轉換跑道卻躊躇不前,或是正在經歷這個轉捩點的讀者。不管是那些 “ Things I wish I would have known earlier in my life “(我希望人生中早點知道的事),還是 “ Lessons I have learned from the failure “(我從失敗中學到的教訓),那些我們共同有的掙扎、懷疑、焦慮、痛苦和迷惘,就像是通往獵人試驗的過程,很少數的人能夠在無盡的黑暗中,懷有對於出口光明的遙想,我也不例外。但這終究只是過程,在這之中我領悟到的是,唯有保持強大的信念,才能驅使自己一步步往前。

那麼,問題回到「文科背景的我,該如何踏出學程式的第一步?」網路上已有許多自學程式的文章,以及各式各樣的學習資源和線上課程,身處程式新手村的我們,究竟什麼樣的學習法最適合自己?在經歷無數次 trial and error 之後,以下是我的個人經驗與觀察:

1. Learn it the hard way:「資料結構」與「演算法」是必要之惡

數年之後,我重讀了〈十年程式自學之路〉這篇文章,文章裡提到學資料結構跟演算法的重要:

假如你真的對這行很有興趣,想要一直待在這邊而且薪水越來越高的話,你就勢必要開始補足一些「自學的人通常不會有的本科系知識」。
因為自學者通常都直接從 html, css, javascript, php, rails 等等的開始,甚至連資料結構跟演算法都沒聽過!有接觸而且實作過的更是少數。

資料結構和演算法之於程式語言,如同文法和修辭之於英文,實屬必要之惡。也許這些「魔鬼藏在細節裡」的規則太過抽象,讓許多初學者退卻──我們既不明白物件(object)、類(class)的定義;對於封裝(encapsulation)、繼承(inheritance)的概念一知半解;我更永遠也無法忘記初學時對於反轉鍊錶(reverse linked list)的疑惑,和哈希(hash)的實現原理,這些「非人類」的概念宛如被搗爛的馬鈴薯,在腦袋裡狠狠地碰撞。

然而,回首來時路,我漸漸發現:初學時期,一頭栽進資料結構和演算法的決定,對於日後實力的積累,實為不可或缺的基礎。也許是因為熬過了那段迷失在五里霧的撞牆期,在實作的階段我才能漸漸領會那些抽象虛無的資料結構,在大大小小系統設計的權衡上佔有舉足輕重的地位。

學習資源分享:相較於哈佛大學的 CS50 一口氣教授了 C、Python、SQL、JavaScript、CSS、HTML,我選擇了柏克萊大學的 CS61B 作為入門。柏克萊大學的 61 Series 課程為 CS 本科生的必修課(61A61B61C),每門課以不同語言作為學習重點:61A 學的是Python、61B 是 Java,而 61C 則是 C。

61B 最為資料結構的入門課,從最基礎的 Java 語法和物件導向語言特性出發,到各種資料結構的實現和複雜度分析,再到進階的演算法介紹,每一週都有影片、討論課、作業和 lab。兩到三週有一個專案,還有三次的考試,學習量和作業量實屬龐大,大多數的學習資源都公開在網路上,若能每週保持進度並且完成作業,那麼,在 CS 的學習路上你已成功站穩了腳步。

2. Learn it the practical way:「你想學程式做什麼?」

初學者經常被問到的第一個問題,往往是:「你想學程式來做什麼?」在〈Hello World,寫給教程式的人:print(“誰是初學者?”)〉這篇文章裡,作者用了「悲鳴」兩個字來形容初學者的心境:

「我根本不知道有哪些選項可以選擇啊!」
許多初學者並不清楚程式語言的原理、邏輯跟應用的場景。就算網路上看過很多文章,但沒有看過 demo、沒有實作體驗,其實很難光靠腦袋「想」出程式語言可以「做」什麼。對我們而言,「我可以拿程式來做什麼」是個非常抽象的問句。

固然初學者必然有學習程式的動機──不管是想轉行、想了解後再決定是否轉行、想增加第二專長、想了解大家最近流行學什麼,甚或是「模糊地覺得自己可能有興趣」;然而,這個動機只是一個學習的起心動念,面目仍然很模糊,難以具象,且很可能在認識程式的過程中被推翻。就像是考大學時想要主修某個科系,或是求職時打算嘗試某份工作一樣,沒有實際進入瞭解,都只是腦中未經驗證的「假想」。也因此,在我個人看來,「你想學程式來做什麼?」這個問題的前提,是你先對程式程式原理和網路架構有一定程度的掌握之後,才有能力進一步思考的課題。

至於逐漸瞭解之後,該如何決定下一步呢?我覺得可以從專案式學習(project based learning)的角度出發,不妨從生活中「要是有___就好了」的想法作為出發點──你想解決什麼問題?如果你可以自己打造這個產品,那會是什麼樣子?可能是個網站、app,或是個遊戲,都是讓你開始運用程式語言一點一滴刻畫自己藍圖的時刻,你可以開始理解到前端和後端到底是如何溝通、不同語言框架的適用範圍,進一步到資料庫該怎麼設計,以及各種環境的建置。

又或許你發現你想加深特定領域的知識,不管是資料科學、機器學習、人工智慧,到區塊鏈、虛擬貨幣,這個時期的學習可以效法 “ speed dating “ 的概念,短時間內廣泛的蒐羅,但只挑選真正感興趣的項目專精,並且持之以恆直到做出一個「專案」──不管是產品prototype、小程序,甚至只是每週的學習總結,你都可以從中看出學習的軌跡,並且體驗到從無到有,自己建構學習成果的過程。

學習資源分享:我個人會將「理論」和「實作」課程的管道分開,「理論」的課程大多在 Coursera 或是 edX 上找由大學開設的課程,著名的包括史丹佛大學的機器學習、普林斯頓大學的演算法 III 等。重點在於觀念的理解和底層知識的建構,打好理論的基礎之後才開始上「實作」的相關課程,像是 UdemyUdacitycodecademy 或是 Hahow(中文學習平台)上都有各式各樣的程式語言課程,這個時期的學習重點應是「求精不求快」,選擇一門感興趣的課程,並且貫徹始終,方才是細水長流之道。

3. Learn it the fun way:程式需集眾人之力

程式語言社群比我們想像的更加包容和多元,程式碼之間的交流溝通,其實是超越了各種文化背景、種族、性別的藩籬,因此在學習路上,最重要的心法是「不要害怕問問題」,並且能夠「勇於嘗試」。

程式的打造並非一人之力,因此在打穩知識基礎、做出了幾個個人專案之後,下一階段的學習目標將是「團隊合作」,究竟如何分工、一個產品如何從設計、開發、測試到上架,這些都是學校課程或是線上課程無法學習到、但在職場上不可或缺的能力。

能夠在短時間實踐,並且學習和不同人合作的場域非黑客松(hackathon)莫屬。黑客松宛如軟體工程師大會師的盛典,各方人馬無不盡全力角逐,只為打造出心目中理想的科技產品,從中激盪出的火花和對話,往往也孕育出了日後成熟的果實。

學習資源分享:黑客松往往有不同的主題,像是健康、智慧城市、區塊鏈、人工智慧、財務等等,這也是找尋志同道合夥伴的最佳場域,大家不妨可以搜尋學校或是企業舉辦的黑客松參加。另外也可以透過參加 meetup 或是工作坊等形式,從程式碼延伸出的科技社群,不止蘊藏了豐沛的技術含量,更寶貴的是與「人」的互動,我想,這也是其中的樂趣所在吧,為了編織共同的藍圖不眠不休,為了追求共同的理想日以繼夜,哪怕只是小小的科技產品,承載了創造者的夢想和智慧結晶,日後也足以撼動整個世界。

如果未來的共同語言是程式,我希望……

在被諸多專有名詞和技術框架包覆之下,回溯根源,程式的靈魂依然來自於人性。當今的企業龍頭用程式打造了龐大的科技帝國,但也間接摧毀了許多固有的傳統,程式宛如兩面刃,一面造就了新型態的服務,一面也無情的淘汰了追不上的產業。在這股科技浪潮上,我很幸運有機會能夠學習程式這樣技能,站在兩年學習的終點,和即將踏上職場起點的交叉路口,我想用「為臺灣而教」創辦人劉安婷在成大畢業典禮上的致詞來提醒自己:

這份幸運,叫做「選擇權」。選擇權讓我們徬徨,可是選擇權卻也是讓我們最幸運的地方。拿著這張很沈重的幸運,我會問自己:「我想要拿這份幸運,做什麼事情?」

是的,「我想拿程式來做什麼?」絕非只是對一個初學者的提問──這個問題也乘載了超乎你我想像的重量,關乎著善良與邪惡、理想與現實,以及責任與道德之間的拉扯。數年之後,程式也許讓世界變得更美好,也許讓世界變得更醜陋。

如果有一天,我們的共同語言是程式,我希望,字裡行間訴說的是善良,與勇敢。

我想用這句話送給未來的自己。

希望這篇文章對你有幫助,想看更多文章或分享歡迎來我的專頁/IG 逛逛。

責任編輯:Anny
核稿編輯:Mia

延伸閱讀:



智慧照護新革命!AI 機器人成為智慧醫療助手

高齡化浪潮來襲, 2025 年台灣將步入超高齡社會,65 歲以上人口佔比超過 20%。高齡化加上少子化,衍生勞動力短缺不足,經濟部工業局推動「電子資訊智慧製造服務系統推動計畫」,加速服務型機器人產業發展,借鏡日本智慧長照現況,把科技導入照護場域,提升更好的生活品質。
評論
Photo Credit:經濟部工業局
評論

日本是全球高齡化程度最高的國家,而台灣高齡化的腳步愈來愈快,僅剩不到 5 年的時間準備。因應長期照顧與醫療照護需求,各單位紛紛投入 AI 應用服務,解決人口結構改變問題。綜觀以 AIoT(物聯網 + 人工智慧)為核心的智慧醫療趨勢,可輔助醫療流程、節省人力成本,更提升照護服務效率,為高齡化社會帶來了新的解方。

Photo Credit:經濟部工業局
台日照護機器人交流會邀請各界分享照護機器人開發與應用案例與經驗。

人工智慧產業前景看好

人類壽命越來越長,智慧醫療正逐步顛覆傳統醫療模式,從遠距醫療、機器人、物聯網到穿戴式裝置,龐大潛在商機吸引國際科技大廠投入。台灣醫療服務水準居亞洲領先地位,尤其是資通訊科技實力鏈結全世界,創新能力與解決方案屢屢獲得市場矚目。當人工智慧遇上健康醫療,擴展未來醫療的無限可能,對社會大眾都有切身影響,不僅引領新一波商業浪潮,也創造出更多的照護服務模式。

醫療與科技結合,帶來新變革也帶動數位時代轉型新契機,未來將有更多關於智慧醫療的布局,解決人口高齡化的社會問題。從另一個面向來看,人口快速老化促使長期照護需求,服務人力是建置完整體系的關鍵因素,衛福部在政策面不斷調整適當的滾動式管理。目前長照 2.0 擴增老年照護服務,以及任何年齡的失能身心障礙者,從長照人力需求來說,缺工現象嚴重,照護機器人將成為醫療、長照的主力。

台日照護機器人交流會

為提供台灣照護場域導入智慧科技之契機,在經濟部工業局指導下,服務型機器人聯盟與台灣智慧樂齡照護創新科技產業大聯盟於 5 月 6 日攜手舉辦「台日照護機器人交流會」,邀請各領域專家分享實務現況,作為研發製造與場域運用參考。經濟部工業局林青嶔簡任技正表示,隨著科技迅速發展,智慧醫療創新服務產業生態系逐漸茁壯,5G 落地、AI 應用更多元,機器人正在改革醫療世界。

圖2_經濟部工業局林青嶔簡任技正表示,超高齡社會即將來臨,透過服務型機器人創新科
Photo Credit:經濟部工業局
經濟部工業局林青嶔簡任技正表示,超高齡社會即將來臨,透過服務型機器人創新科技能解決照護人力議題。

「台灣和日本一樣,面臨急速老化的超高齡社會,因此對於熟齡及身障者的照護非常重要。呼應長照 2.0 政策,應用科技打造更多元化、人性化的服務,AI 及智慧機器人的運用更是未來顯學。」林青嶔簡任技正分享觀點,這場交流會聚焦台日相關經驗分享與討論,加速業者與國際連結。台灣具有精密機電與 ICT 產業供應體系的優勢,發展機器人科技的腳步正迎頭趕上歐美日等國家,尤其是服務型機器人產業,將是台灣製造業的明日之星!

圖3_因應疫情,透過網路視訊方式進行交流,雙邊合作討論熱烈。
Photo Credit:經濟部工業局
因應疫情,透過網路視訊方式進行交流,雙邊合作討論熱烈。

促成更多元的服務應用

透過「台日照護機器人交流會」,日本 ATA 協會五島清國部長、日方企業 Reif 與 Whill,以及台方微星科技、全智通機器人、福寶科技分享照護機器人的開發與普及應用現況,透過創新科技解決照護難題。照護機器人的開發,必須掌握使用者需求、符合未來照護趨勢,再藉由實體實驗場域的調校,完美融入生活當中。微星科技、全智通機器人、福寶科技旗下的產品已分別應用於物流、醫療、清潔等領域;因應新冠肺炎疫情的「低接觸」服務型態需求,更加快普及速度。

圖4_日本ATA協會五島清國部長強調照護機器人必須貼近使用者,幫助提升生活品質。
Photo Credit:經濟部工業局
日本 ATA 協會五島清國部長強調照護機器人必須貼近使用者,幫助提升生活品質。

服務型機器人的創新應用在不同領域逐漸成形,經濟部工業局透過政策資源、科專計畫等大力推動服務型機器人產業化,協助企業轉型發展機器人新事業動能或新創公司設立,包括微星、東元、佳世達、凌群等企業。另外,2018 年成立的「服務型機器人聯盟」,由資策會服創所與台灣智慧自動化與機器人協會(智動協會)合作發起,結合政府及民間力量整合產業鏈上中下游資源,共組國家隊搶攻國內外市場。

服務型機器人聯盟今年度規劃「2021 ROBO COM 蘿蔔控」創意實證競賽,延續場域實證的精神,擴大研發能量及市場化企圖。聯盟持續引入資源,推動機器人業者和學研團隊合作,展開技術及實務交流,共同激盪具市場潛力的創新方案。


 「2021 ROBO COM 蘿蔔控」服務型機器人創意實證競賽資訊

  • 報名期間:即日起至 5 月 15 日
  • 競賽期間:6 月 15 日 - 9 月 30 日
  • 報名資格:不限年齡、學生團隊、社會人士、非營利組織、地方社團乃至公司行號都可組隊報名
  • 組隊資格:接受個人挑戰或多人組隊,團體至多6人

立即前往活動報名頁面了解更多!

經濟部工業局 廣告