從純文科生到軟體工程師之路:離開哈佛後,「再也沒有標準答案」的嶄新旅程

「從純文科背景轉往軟體工程,我面對的,不僅止是換跑道、轉專業的挑戰;更加衝擊的是,被標準答案掛帥教育體制下長期豢養的我,一轉眼間被丟入這個由 0 和 1 建構的學習場域。」
評論
Photo Credit:Shutterstock/達志影像
評論

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

整整兩年沒有下筆寫過一篇文章,現在的我連起個「正常的」中文文章開頭,都略顯激動 — — 因為在這過去 700 多個日子天天陪伴我的,不是我最鍾情的中文字、也不是短篇小說或電視劇,而是一片漆黑的螢幕,運行著上百行的程式碼⋯⋯。

一個又一個漫漫長夜裡,只有解也解不出來的 bug 和一杯杯的咖啡因,在一旁冷眼看著時間流逝,一切都只為了等待螢幕上最終跳出的, “ all tests pass ”。

落入「外星文」的世界 — — 與程式語言的第一次接觸

Source: everyone’s very first Java code
Source:  everyone’s very first Java code everyone’s very first Java code


這是我這輩子第一次接觸的 Java 程式碼,我想我永遠不會忘記當時面對這段「英文字」時,腦海中排山倒海而來的不解 — — 大概是因為人生中第一次遇到「每個英文字都看得懂,但怎麼樣都無法領悟這些字結合起來的意義」的狀況。記得那時還想著:「喔,原來程式還有公開和非公開的隱私啊!」

學到物件導向(object oritened programming)的時候,也總是無法理解「類」(class)的道理,和為什麼要「創建」(new)一個「對象」(object);接觸了資料結構,覺得發明二元搜索樹(binary search tree)的人簡直來自異次元,遑論動態規劃(dynamic programming)、回溯法(backtracking)對我而言更宛如天書⋯⋯種種當時的懞懂,現在回想起來只覺得恍如隔世。

姑且拋開那些流不完的眼淚,和為了抵擋睡意支撐顫抖的深夜,從純文科背景轉往軟體工程,我面對的,不僅止是換跑道、轉專業的挑戰;更加衝擊的是,被標準答案掛帥教育體制下長期豢養的我,一轉眼間被丟入這個由 0 和 1 建構的學習場域:

它既不能容忍任何錯誤、卻又沒有「標準答案」,凡事只能靠不斷地摸索磨練中,追求優化再優化的成果、與自己的能力。

反思台灣教育 — — 保護傘底下,我們究竟學會了什麼

初學程式,我接受的是完全性的震撼。從小在台灣接受教育的我,不管是什麼科目,選擇題、填空題都有「正確答案」,應用題有「標準解法」,甚至連申論題和作文都有「參考範文」,在參考書的最後一頁靜靜地等待著。

這個教育體制的設計,仿佛深怕在學習路上的我們,因為碰到解不開的問題感到挫折,一絲一毫偏離正規軌道都覺得心疼不捨,小心翼翼地,架設從小到大的「學習保護傘」,就像學游泳從不脫掉的救生衣,學騎腳踏車從不拆掉的輔助輪。這導致我們往往覺得自己「學會了、理解了」,從成績單上亮麗的滿分、領不完的獎狀,獲得自我膨脹的滿足感。但其實卻是從未真正準備好,勇於面對沒有標準答案的真實世界。

在被程式問題連番擊倒,開始自我懷疑的同時,我總忍不住回想,當年那個在學習路上一帆風順的自己,究竟是抱持著怎麼樣的學習模式?

時間倒轉,回到高三那年為了準備七月指考的五、六月 — — 教室裡的電風扇孜孜不倦地旋轉,也抵擋不住夏日高漲的炎熱,台上老師口沫橫飛,一切只為了將學生送往好大學。台下的我們,則不知道畫乾了多少螢光筆,粗體、斜體、紅黃綠藍,在各大重點間徘徊。不知道寫滿了多少本參考書和模擬試題 — — 題目對我們而言不重要,而是全心全意要將考點和答案牢牢記住,只為追求那個上榜時那個不可一世的瞬間。高三時期,儼然是我一生中知識水平的巔峰,我們在考試的窄門中用盡全力的求生存,有如豺狼虎豹,飢渴地將書本上的內容全數掠食;我們為了排名爭鬥不休,卻對於獲取的知識往往不明就裡,只對分數的差距錙銖必較。

不諱言,在這樣的學習體制下,我做到了,進入了人人稱羨的名校。但作為表面上成功者的我,內心卻充滿著徬徨和悲哀。我為那些來得快、去得也快的速食知識感到悲哀,也為失去這些知識的自己,感到無盡的徬徨。

如果現在問起,高三的時候學了什麼,我八成支支吾吾的答不上話,說也奇怪,當時可以說是自信滿滿把所有內容背得滾瓜爛熟的自己,為什麼這段記憶就像是從腦袋中某個區塊被狠狠拔除一樣,忘得乾乾淨淨了呢?

我想,這也許是因為我從來沒有,嘗試去驗證考卷上的答案、或思考答案背後的意義,這項能力也未曾在我的學習歷程上,受到過任何重視。

每個人都該學習程式,因為它教我們如何思考

Everybody in this country should learn to program a computer, because it teaches you how to think”

— Steve Jobs, Co-Founder, Apple

這個國家的每個人都該學習編寫電腦程式,因為它能教你如何思考

 — 史蒂夫.賈伯斯,蘋果共同創辦人

學程式給我的課題,首先來自於思考:我開始學著不靠關鍵字做題目,仔細地逐字逐句讀懂問題、釐清各種假設;也體認到「No one knows everything」(沒有人知道全部),和在面對問題時如何「擁抱未知」的心態。

在沒有了標準答案奉為圭臬,你會發現自己「真的開始思考」:思考題目的含義,思考如何設計答案。反觀以往習慣「一張考卷、50 題、60 分鐘」等的作答方式,在時間的壓力下往往不允許思考,更遑論「設計答案」 — — 這也是我認為在傳統體制內學習的學生,最欠缺的能力。

其實,不論面對什麼類型的問題,都需要「思考」和「設計」這兩項能力,不是事事都有標準答案;只要這答案是符合需求(能夠解決問題)的,都有存在的價值。

另外,就是在遇到問題時「找尋答案的能力」程式語言社群奇妙的地方在於,它像是一個集大成的智慧結晶(Collective Intelligence),在遇到程式相關的問題時,你絕對不是世界上唯一有過相同問題的人,另一個有趣的現象是,你也很難搜尋到一模一樣的答案,是可以百分之百複製貼上到你的程式碼裡的。所以,你需要的不僅僅是「找到答案」,更要做到「驗證答案」,最後並能夠「內化答案」。

程式語言的學習曲線,對我來說就像是座標軸上的垂直線,第一眼面對的,就是毫不留情的懸崖峭壁,我曾經狠狠地被撞得頭破血流,數不清在腦海裡萌生過多少次想放棄的念頭 — — 但說也奇怪的是,也許是這種「沒有防護繩索」的學習模式,我一次又一次被前所未有的挫敗感襲擊,卻也體驗到從小大到沒有感受過的成就感。感覺就像是電影《Free Solo》裡,男主角Alex 徒手攀登上優勝美地酋長岩的過程 — — 危險在指尖顫動、生離死別在眼前閃過,那種屏息以待的悸動,直到成功站頂峰上的瞬間,更是一種無法用言語形容的成就和滿足。

一段打破過往框架的學習之旅

Learning to write programs stretches your mind, and helps you think better, creates a way of thinking about things that I think is helpful in all domains.

— Bill Gates, Co-Chairman, Bill & Melinda Gates Foundation, Co-Founder, Microsoft

「學習如何寫程式,可以延展思路,讓你學習如何更好的思考,創造另一種思考事情的角度。我覺得這種思考能力在任何領域上都很有幫助。」

— 比爾蓋茲,比爾及梅琳達.蓋茲基金會聯合主席、微軟聯合創辦人

對我來說,學程式這兩年來所學到最重要的事情,不在於程式語言本身,而是在改變了一生的學習態度。而我也深信,這樣的學習態度,是任何專業領域都可以受用無窮的寶貴資產,因此希望能將這些體會分享給讀這篇文章的你:

1. 「萬事起頭難」但「貴在堅持」:在這個學程式儼然變成全民運動的時代,多少人前仆後繼,但到最後能夠堅持下來的卻寥寥可數,我也記不清自己曾經註冊了多少從來沒上完的網課,Introduction to Python, Programming Language for Everyone, Web Development Fundanmental,買了多少本「第一次學XXX程式語言就上手」,有如磚頭般厚重的工具書,經歷仿佛科技文盲的撞牆期⋯⋯但在初期階段,我發現,與其貪心地想要上完所有的課,不如先專精地選擇一門自己真正感興趣的領域,等你從頭到尾學完一門課的時候,想學下一門的恐懼和困難也必然大大減少。

2. 不追求「囫圇吞棗」和「一夜速成」:學程式好比學武功,達到高峰絕非一夜練成,體會其中的精妙之處也不是一蹴可幾,有別於以往考試前可能還可以「臨時抱佛腳」,學習程式更加看重的是點點滴滴的積累和反覆思辨。同時很重要的是,學習如何在「精疲力盡」和「苦無進展」之中取得平衡點 — — 學程式的過程並非平穩上升的直線,更會經歷許多百思不得其解的問題點,與其正面對決,你更應該做的是適時暫停,放下手邊的問題,過一段時間後,也許你會驚訝的發現尋覓已久的答案往往近在眼前。

3. 「永不止息的熱情」:學無止境,是從事軟體工程師必須恪守的志業,要如何能夠時時刻刻保有信念呢?我想,唯有無可抹滅的熱情 — — 那是一種不需要靠別人認可,由內部而生的動力,才能帶給你誰也偷不走的滿足感。

持續不斷的「書寫」

有人說,程式語言像一面鏡子:即便是同樣的運行結果,卻可以反映出書寫者最真實的心境,苟且、急躁、縝密、多疑,都可以從程式碼的樣態中一覽無遺。

又有人說,程式語言是世界上最誠實的語言:不存在任何僥倖和模糊空間,不心軟、也不刁難,老老實實一行一行地運行著;也有人說,程式語是唯一只能透過書寫(而非口語)詮釋的語言⋯⋯。

或許正是上述種種原因,造就了程式語言的「高冷」,彷彿兀自處在只屬於「自己人」的小宇宙內,彼此無聲而熱切地交談著。

但在曾為人文學科的我看來,程式語言的字裡行間,更潛藏了一種「病態的美」:那種「病態美」正來自於書寫者的投入與狂熱,像是畢卡索作畫時的轟轟烈烈,張牙舞爪卻只改動了畫布的冰山一角;又像是達文西雕刻時的百般斟酌,反覆推敲只為了那寥寥數行文字。
現在的我,對於這種狂熱美感,也許還有那麼一點似懂非懂的迷惘,但現在我清楚知道的是,程式語言也好、中文字也罷,我只希望自己能夠用這些語言持續書寫,留下點什麼。

Write once, build everywhere,simple, yet beautiful. 

後記:寫這篇文章的出發點,並不在於教導人如何「從零開始、學程式一學就上手」,但若大家想知道更多關於學程式的實戰面心得或學習資源,歡迎留言給我。希望這篇文章對你有幫助,想看更多文章或分享歡迎來我的專頁/IG 逛逛。

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

延伸閱讀:



開發應用趨勢 X 產業轉型策略:DevDays Asia 2021 亞太技術年會報名開跑!

DevDays Asia 2021 Online 亞太技術年會活動即日起開放報名,7 月 25 日前報名即可參加早鳥抽獎活動,8 月 11~13 日準時上線參與更有機會獲得Gogoro VIVA Lite、Xbox Series X 等豐富大獎。
評論
評論

面對疫後變化莫測的商業局勢,如何透過開發者的力量增強企業韌性、保持競爭優勢是勝出的關鍵策略。為賦能台灣開發者,引發企業轉型與創新動能,由經濟部指導,經濟部工業局、台灣微軟、iThome 共同主辦的「DevDays Asia 2021 Online 亞太技術年會」邁入第六屆,今年將於 8月 11 日(三)至 8 月 13 日(五)以「賦能創新.疾速突圍」為題,線上盛大登場。豐富議程包含線上論壇、實作坊、社群活動、以及國際與在地實際案例展示,匯集全球技術資源,協助開發者透過科技力量共同型塑疫後新未來,向世界展現台灣的創新能量。

過去一年全球各產業面臨各種挑戰,無論是疫情的衝擊、經貿環境的變化等,促使企業加速數位轉型的進程。在導入雲端、AI 等技術之中,開發者成為企業數位轉型的關鍵,更是承擔企業成功數位轉型、突破困境的重責。各領域與產業的技術人才需求皆有顯著提升,顯示開發者的力量已成為企業決策與建立韌性的重要一環。台灣微軟致力提供完善的開發平台,不僅分享全球豐沛的研發能量予在地人才,更結合理論與實務,以在地產業案例展現應用面向,期望藉技術年會賦能台灣產業創新發展,迎向疫後新未來。

關鍵 9 大主軸技術演講:勾勒創新科技想像,探索量子運算無限潛力

為期三天的「DevDays Asia 2021 Online 亞太技術年會」,特別邀請微軟全球副總裁 Charles Lamanna、微軟亞洲 Teams 資深工程總監 Dan Stevenson、微軟全球人工智慧業務開發總監 Matt Sinclair、微軟大中華區全球合作夥伴解決方案事業群首席技術長 徐明強博士、微軟 Teams Platform 產品行銷總監 Daniel Canning 等重量級講師進行主題演講,分享建立高生產力的未來工作模式、資安、工業物聯網價值鏈等主題,全方位幫助開發者即時掌握前瞻科技趨勢。

看好量子技術強大運算力將為資安、產業、金融與國防等領域帶來突破性發展,微軟首席架構師 Ujjwal Kumar 將以「量子運算」精彩開場,分享微軟於量子運算技術上的更新與應用情境,帶領開發者一同探索潛力無窮的量子運算領域。

此外,今年年會將聚焦於「實現創新應用開發」與「加速強化企業韌性」的 9 大關鍵議題:

  • 大數據與人工智慧(Data & AI):AI 已然成為驅動產業前進的原動力,企業也逐漸擁抱整合數據平台,微軟推出六大 Applied AI Services 產業應用場景,協助企業將 AI 落地,並透過雲端現代化資料倉儲與分析中台、數據治理與安全、資料為先的混合雲應用,協助企業在面對日趨增加的數據資產強勁轉型需求中,建立疫後時代的企業韌性。
  • 雲原生應用(Cloud Native):以微軟最新發表內容的開發者工具如 Visual Studio、GitHub,介紹智慧雲原生應用程式包含 Cloud Native App、Micro Services 等,助企業可隨環境動盪迅速反應、敏捷開發,提升 IT 即戰力。
  • 開源技術(Open Source):掌握開源將助企業洞燭市場先機,而開源發展與社群關係更是環環相扣,年會將邀請多位開源社群一同擔任協辦單位,包括軟體人才培訓學校(Build School)、台灣雲原生使用者社群(Cloud Native Taiwan User Group)、DevOps 台灣社群(DevOps Taiwan community)、STUDY4、Taiwan Java community、台灣 PostgreSQL 使用者社群(Taiwan PostgreSQL User Group)等單位,分享自身經驗,提供第一線開發者的獨到見解。
  • 開發與維運(DevOps):為實踐 DevOps 理念與架構,快速依需求更迭軟體產品與功能,年會中將以 Azure DevOps 解決方案展示更快速、方便的應用程式開發。
  • 商務流程優化(Business Process):展現如何使用 Microsoft Cloud 建構差異化的 SaaS 應用程式,極大化發揮雲端工具綜效,建構新一代為企業量身打造的解決方案,解決企業營運困境。
  • 混合式工作模式(Hybrid Work):面對後疫情時代,開發者將可運用 Microsoft Teams 輕鬆協作溝通、簡化工作流程,以一站式生產力平台整合多元企業所需功能,迎向智慧工作時代。
  • 產業情境應用解決方案(Industry Solution):微軟長期與台灣產業建立深厚合作關係,更將在年會中力邀製造、醫療、金融等產業合作夥伴,深度剖析產業實例,助開發者結合理論與市場經驗,解決產業切身痛點。
  • 物聯網應用(IoT):以日趨成熟的 IoT 技術加乘 AR 與 VR 的虛實整合概念,向開發者展示未來的智慧工廠價值鏈。
  • 資安新思維(Security):全球遠距辦公需求劇增,駭客攻擊比率大幅增加,企業急需建立零信任文化與部署全面資安防禦系統。透過微軟 Microsoft XDR、Azure AD、Azure Defender、Azure Sentinel 等解決方案,開發者將更能幫助企業避免網路威脅、守護寶貴的數據資產。

呼應疫情下各企業對遠端實作與數據分析的需求激增,此次年會中也專門設立實作坊,藉由線上與講師零距離互動與即時問答,手把手教學如何使用 Microsoft Teams 進行遠距工作,並善用 Power BI 分析數據、發現洞察,滿足開發者對於持續深化技術以及實戰經驗累積的熱切期待。

「DevDays Asia 2021 Online 亞太技術年會」預計將再次創下參加人數新高,吸引數千人次線上參與,促進台灣技術人才接軌國際,培養開發者技術實力,共同構築更完整的開發生態系。活動即日起開放報名

7 月 25 日前報名即可參加早鳥抽獎活動,8 月 11~13 日準時上線參與更有機會獲得包括 Gogoro VIVA Lite、Xbox Series X、Surface Go 2 等豐富大獎;欲了解更多,或報名參加亞洲區域旗艦技術社群年度交流的盛會,請參考官方網站

本文章內容由「台灣微軟」提供,經關鍵評論網媒體集團廣編企劃編審。