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

作者寫給那個兩年前徬徨不安的自己、那個曾經想過轉換跑道卻躊躇不前,或是正在經歷這個轉捩點的讀者。
評論
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

延伸閱讀:



上雲猶如太空探險之旅,iKala Cloud AIOps Services協助企業輕鬆穿梭多雲環境

人類從上個世紀積極探索外太空,為了將太空人送上天際必須克服各式挑戰,而現代企業要從「地端」飛向「雲端」,困難程度有過之而無不及。iKala Cloud AIOps Services 提供多項關鍵服務,幫助 IT 團隊輕鬆悠遊多雲環境。
評論
評論

探索外太空,曾經是國際間的科技競賽,近年 Tesla 創辦人馬斯克更準備把太空旅行當成商業服務,預計 2026 年要帶著人類登陸火星。完成一趟星際旅行,需仰賴嶄新的科技及跨科學精密計算,但你知道嗎?現代企業要從「地端」飛上「雲端」,其實挑戰程度不亞於飛向太空。

對企業資訊管理者來說,有限的 IT 資源無法應付繁重的維運項目,加上同時管理公私有雲架構更顯困難、資安管理複雜,例如需要人工執行過濾警示,各種大大小小挑戰不勝枚舉。換言之,企業想航行雲端,就像打造火箭需要龐大資源及人力。不過,現在有更輕鬆穿梭雲端的方式,就是使用雲端技術服務商 iKala 所提供的 AIOps Services(自動化雲端託管服務)

火箭升空前的全盤規劃:iKala AIOps 擬定系統架構規劃、教育訓練

完成一趟太空之旅,必須做足各種研究,例如精準計算飛行軌道、降落定位點、燃料耗用數、與地球通訊設定…等。

對沒有雲端架構經驗的企業來說,就如同當時的科學家,必須用土法煉鋼的方式檢查數據是否有誤。換言之,企業 IT 在升級之前,就需要有經驗的「雲端顧問」來釐清需求、協助規劃「升雲」之旅。而 iKala 就是企業的最佳雲端顧問,旗下 iKala Cloud AIOps Services 會搭配一位專責的技術客戶經理,協助企業提供即時的技術服務與專業建議。

究竟 IT 升級之前,iKala Cloud AIOps Services 有哪些服務?首先是「系統設計規劃」,涵蓋系統架構規劃書、系統上線/遷移計畫書,可因應客戶產業需求,提供對應的解決方案以及顧問服務。而越來越多企業會使用到 Google 的雲端資源,iKala 也有提供 Google 雲端平台訓練服務。

GCP 教育訓練課程多元,包含 GCP 基礎架構(網路設定規劃、權限控管、計算資源等)、大數據與機器學習(大數據分析 Pipeline、BigQuery、ML 模型訓練與應用)、軟體開發技術與流程(容器化、CI/CD、DevOps)等。因為 iKala 團隊取得 10 多項 Google 專業技術證照,才能在企業規劃雲端轉型的前期就一步到位,規劃出整體藍圖,提供更全面的解決方案建議。

火箭升空中的精密操作:iKala AIOps 輔助即時技術維運、資安管理

當火箭準備就緒、升空倒數之際便是決定這趟太空之旅能否成功的關鍵時刻。從太空人的行前訓練與身體檢查,到火箭的引擎測試完成,如果有靜電或一點火花都可能引發爆炸事故。光是在升空階段,太空總部就要有結構、熱控、姿態控制、資料處理、電能、遙傳指令、推進以及飛行軟體等龐大的系統工程師在旁待命。

換言之,企業 IT 移轉雲端過程就像火箭發射的當下,需要有專業、經驗足夠的工程師,才能即時協助企業順利上雲,甚至快速排除緊急的狀況。對此,iKala Cloud AIOps Services 提供兩大關鍵的幫助:技術維運、資訊安全管理。

iKala Cloud AIOps Services 的技術維運服務內容,提供 7 x 24 的 Help Desk,像是緊急 GCP 問題報修、產品使用技術諮詢;或是事故管理,如搭建監控系統、設定規劃告警政策、規劃日誌收集與留存。每月也會提供企業維運報告,報告書有營運效率檢討、流程優化、新服務項目、營運系統建議等。

至於資訊安全管理方面,除了基本的 GCP 專案權限控管掃描、應用程式 OWASP(Open Web Application Security Project)前 10 大項目資安弱點掃描,同時也針對近年相當受重視的 DDoS 防護,iKala 可協助企業導入 GCP 平台的 DDOS 防禦機制。iKala 掌握多年軟體開發和雲端管理經驗,可分享給客戶 DevOps、AI 第一手實務的作法與經驗。

火箭升空後啟動自動導航:iKala AIOps 提供 AI 自動化監控、帳務管理

當火箭成功升空後,太空人為了執行下一階段任務,這時候火箭就需要轉換成自動駕駛模式,或在探索其他星球時,出動機器人來協助執行人力無法負荷的任務,讓太空人專心處理更關鍵的工作。換言之,上雲後的 IT 架構就像升空後的火箭,應該減少 IT 人員的負擔,甚至不需浪費例行時間,就能夠快速掌握整體資訊系統的運作狀況。

不過要讓 IT 架構像火箭具備自動駕駛功能,勢必需要相當高的技術門檻,而 iKala Cloud AIOps Services 正好有相對應的服務。如此一來,IT 人員的生產力就能投入在更具商業價值的研發專案,讓 IT 部門轉型成可創造產值的單位,而非單純的後勤支援角色。

盤點 iKala Cloud AIOps Services 在此環節共有三大類服務。其中一項是 AI 自動化監控與通報服務,幫助 IT 成員主動監控系統,掌握是否有異常操作狀況。其二是帳務方面的管理,幫助企業產出雲端服務月用量帳務分析報告,針對軟體授權需求,整合出帳至  Marketplace 與第三方服務商,自動化做到 License 採購管理。

第三項則是針對服務級別協定(SLA)iKala Cloud AIOps Services 提供 24 x 7、5 x 8 兩種模式,在重大 GCP 服務異常中斷服務時,提供電話、e-mail 聯繫。而且每月會舉辦 1 次月會(以 on-site 或遠端視訊會議方式)提交書面報告。目前 iKala 的企業客戶服務超過 400 多家、涵蓋數 10 種產業,可說是企業成功上雲,最能安心託付的合作夥伴。 

事實上,雲端託管服務(CMS)是目前最夯的新趨勢,根據市調公司 MarketsandMarkets Research 報告指出,全球雲端託管服務的市場規模,預計從 2020 年的 624 億美元,到 2025 年成長至 1,162 億美元,複合年增長率(CAGR)為 13.3%。代表未來有大量企業採用 CMS,以降低 IT 基礎設施的投資成本及風險,藉此提升企業營運的競爭力。

由此看來,企業的數位轉型,就像上個世紀的太空軍備競賽一樣。「時間就是決勝點」,越晚起步的公司與其他數位能力領先群的企業相比,差距只會越來越大。現在就攜手 iKala 嘗試 iKala Cloud AIOps Services,打造穩定的 IT 系統、邁向數據驅動的商業模式,讓企業在數位世代站穩腳步,輕鬆穿梭多雲之間。

了解更多 iKala Cloud AIOps Services