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

「從純文科背景轉往軟體工程,我面對的,不僅止是換跑道、轉專業的挑戰;更加衝擊的是,被標準答案掛帥教育體制下長期豢養的我,一轉眼間被丟入這個由 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

延伸閱讀:



Akamai 服務上新,於邊緣處推動快速創新

Akamai EdgeWorkers 為開發團隊提供豐富功能和工具來創建新的微服務,利用 Akamai 提供的 25 萬台分佈式服務器組成的網絡,在邊緣執行安全而快速的計算,並在邊緣暫存內容,以實現快速交付。
評論
評論

在雲計算技術還沒有大規模普及前,絕大部分企業和組織都需要自建數據中心,或通過託管的方式來部署自己的硬體基礎架構,並在此基礎上為員工和客戶提供服務。取決於業務或其他方面的諸多要求,此時需要部署的數據中心可能有很多個,並廣泛分佈在不同地區,藉此為客戶提供流暢的體驗,並透過多個數據中心保障連續性。在發展的過程中,隨著「雲端」的出現,讓各個組織的計算開始集中。

而當在線直播、無人駕駛、智能家電、物聯網等應用開始陸續深入我們的工作和生活,情況又不同了。以往透過雲平台集中運行和服務的模式,因為距離導致的網絡延遲已經對用戶的使用體驗產生極大影響。為了提供更敏捷、靈活、快速、可靠的體驗,企業需要從最貼近用戶的地方提供服務。因此,邊緣計算就成為最有效的解決方法。

透過將數據的收集、分析和處理等工作,由「雲中心」重新分散到最接近用戶的邊緣位置,企業可以就近為用戶提供服務,通過延遲更低的響應打造更出色的用戶體驗。

「無服務器」的出現,帶來計算方式的革新

以前,當組織需要上線一套業務系統時,首先需要採購並部署相應的服務器硬體,並且要負擔服務器日常運維過程中的管理、維護、補丁安裝、配置等繁瑣任務。

上雲前,組織需要在自己的數據中心,以硬體服務器的方式執行這一系列工作;上雲後雖然簡單許多,但依然需要面對雲服務商提供的虛擬服務器,從本質上來看相關負擔仍相當繁重。

無服務器(Serverless)技術的出現,讓組織可以在不需要考慮服務器的情況下,構建並運行由微服務構成的創新式應用程式與和服務。藉此不僅可以省略基礎架構管理任務,還能為幾乎任何類型的應用程式或後端服務構建無服務器應用程序,更方便、靈活地構建出具備極高可用性的應用。

Akamai EdgeWorkers :為創新賦能

Akamai EdgeWorkers 為開發團隊提供豐富功能和工具來創建新的微服務,利用Akamai 超過 25 萬台分佈式服務器組成的網絡,在邊緣執行安全而快速的計算,並在邊緣暫存內容,以實現快速交付。

當開發團隊在邊緣開啟代碼時,他們會將數據、見解和邏輯推送到更靠近最終用戶的位置。Akamai 的高性能、可擴展式實施模型,可確保數據和計算不會被延遲問題困擾,進而避免對數字化體驗產生負面影響。

在該服務幫助下,開發者可直接在 Akamai 的全球分佈式平台上快速、迭代地創建和部署新服務,以解決問題和自定義交付。

長期以來,Akamai 在邊緣計算的創新和成功實施皆具有優勢。自 1998 年起,便開始為 Akamai 內容交付網絡(CDN)的客戶推出自定義交付邏輯,其他里程碑還包括 2001 年的 Edge Site Includes 、2002 年的 Edge Java 以及 2014 年的 cloudlet 應用程式。

目前, Akamai 在全球擁有超過 4100 個入網點,為 EdgeWorkers 用戶提供出色的邊緣基礎架構規模和範圍,開發人員可以在靠近最終用戶和他們的數字化接觸點的地方部署代碼,以實現盡可能低的延遲。EdgeWorkers 同樣獨立於雲,客戶可以選擇利用 CDN 供應商或雲供應商平台上的無服務器計算功能。在 Akamai 幫助下,客戶可以在整個混合雲或多雲環境中部署單一的無服務器計算平台。

更多相關資訊:https://www.akamai.com/solutions/edge

本文章內容由「猿聲串動」提供,經關鍵評論網媒體集團廣編企劃編審。