從純文科生到軟體工程師之路(二)「你想學程式做什麼 ...

文章推薦指數: 80 %
投票人數:10人

這堂課(CS50)所涵蓋的知識含量甚廣,課程內容包括抽象 ... 網路上已有許多自學程式的文章,以及各式各樣的學習資源和線上課程,身處程式新手村的 ... 換日線Crossing-最貼近你的國際新視野 主打 編輯部原創 策展專區 CrossingCampus Podcast 海外職場 專欄作者 訂閱季刊 頻道 人物故事 People 國際趨勢 Trends 文史藝術 Humanities 生活風格 Lifestyle 觀點評論 Perspectives 時事現場 News 編輯嚴選 Editors'Picks 換日線X施羅德 關於我們 歷年季刊 團隊成員 大事記 搜尋 投書 歷年季刊 團隊成員 大事記 註冊 登入 立即加入會員取得專屬服務 立即加入 首頁 CrossingCampus 學習 從純文科生到軟體工程師之路(二)「你想學程式做什麼?」一個不簡單的問題,與我的答案 AliceYang/哈佛姐的不正經學術之旅 2019/12/10 25309 PhotoCredit: 但說也奇妙,在我心中一直有個「總有一天要學程式」的念頭,於是我輾轉來到了柏克萊大學的資訊學院,從麻州搬到了加州,筆記型電腦裡裝上了各式各樣的IDE(整合開發環境,IntegratedDevelopmentEnvironment),踏上了另一段截然不同的學習之旅。

作者前言:兩年前,我結束了在哈佛教育科技的學業。

兩年後,我又重回《換日線》,多了個不一樣的職位:後端軟體工程師,座標矽谷。

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

前篇:從純文科生到軟體工程師之路(一):離開哈佛校園後,踏上「再也沒有標準答案」的嶄新旅程 圖/Shutterstock 對程式語言一竅不通,卻仍有個「程式夢」 說起來慚愧,雖然自己曾洋洋灑灑地寫過程式學習相關的文章,向讀者介紹「哈佛大學最『狂』的一門課」,大談程式語言: 這堂課(CS50)所涵蓋的知識含量甚廣,課程內容包括抽象化(abstraction)、演算法(algorithms)、資料結構(datastructures)、封裝(encapsulation)、資源管理(resourcemanagement)、資訊安全(security)、軟體工程(softwareengineering),以及網路開發(webdevelopment),還有各種程式語言介紹:C、Python、SQL、JavaScript、CSS、HTML,都包含在12週的課程內! 但是大家有所不知,當時的我壓根沒有任何物件導向(ObjectOrientedProgramming)的基礎,也不懂網路開發有前端(front-end)、後端(back-end)之分,更別提有能力自己寫下任何一行程式碼。

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

無數次試誤後,我的經驗分享 回首兩年來的學習路,到即將展開人生第一個軟體工程師的正職工作,我總想寫下點什麼,寫給那個兩年前徬徨不安的自己、那個曾經想過轉換跑道卻躊躇不前,或是正在經歷這個轉捩點的讀者。

不管是那些"ThingsIwishIwouldhaveknownearlierinmylife"(我希望人生中早點知道的事),還是"LessonsIhavelearnedfromthefailure"(我從失敗中學到的教訓),那些我們共同有的掙扎、懷疑、焦慮、痛苦和迷惘,就像是通往獵人試驗的過程,很少數的人能夠在無盡的黑暗中,懷有對於出口光明的遙想,我也不例外。

但這終究只是過程,在這之中我領悟到的是,唯有保持強大的信念,才能驅使自己一步步往前。

那麼,問題回到「文科背景的我,該如何踏出學程式的第一步?」網路上已有許多自學程式的文章,以及各式各樣的學習資源和線上課程,身處程式新手村的我們,究竟什麼樣的學習法最適合自己?在經歷無數次trialanderror之後,以下是我的個人經驗與觀察: 1.Learnitthehardway:「資料結構」與「演算法」是必要之惡     數年之後,我重讀了〈十年程式自學之路〉這篇文章,文章裡提到學資料結構跟演算法的重要: 假如你真的對這行很有興趣,想要一直待在這邊而且薪水越來越高的話,你就勢必要開始補足一些「自學的人通常不會有的本科系知識」。

因為自學者通常都直接從html,css,javascript,php,rails等等的開始,甚至連資料結構跟演算法都沒聽過!有接觸而且實作過的更是少數。

資料結構和演算法之於程式語言,如同文法和修辭之於英文,實屬必要之惡。

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

然而,回首來時路,我漸漸發現:初學時期,一頭栽進資料結構和演算法的決定,對於日後實力的積累,實為不可或缺的基礎。

也許是因為熬過了那段迷失在五里霧的撞牆期,在實作的階段我才能漸漸領會那些抽象虛無的資料結構,在大大小小系統設計的權衡上佔有舉足輕重的地位。

學習資源分享:相較於哈佛大學的CS50一口氣教授了C、Python、SQL、JavaScript、CSS、HTML,我選擇了柏克萊大學的CS61B作為入門。

柏克萊大學的61Series課程為CS本科生的必修課(61A,61B,61C),每門課以不同語言作為學習重點:61A學的是Python、61B是Java,而61C則是C。

61B最為資料結構的入門課,從最基礎的Java語法和物件導向語言特性出發,到各種資料結構的實現和複雜度分析,再到進階的演算法介紹,每一週都有影片、討論課、作業和lab。

兩到三週有一個專案,還有三次的考試,學習量和作業量實屬龐大,大多數的學習資源都公開在網路上,若能每週保持進度並且完成作業,那麼,在CS的學習路上你已成功站穩了腳步。

圖/Shutterstock 2.Learnitthepracticalway:「你想學程式做什麼?」 初學者經常被問到的第一個問題,往往是:「你想學程式來做什麼?」在〈HelloWorld,寫給教程式的人:print(“誰是初學者?”)〉這篇文章裡,作者用了「悲鳴」兩個字來形容初學者的心境: 「我根本不知道有哪些選項可以選擇啊!」 許多初學者並不清楚程式語言的原理、邏輯跟應用的場景。

就算網路上看過很多文章,但沒有看過demo、沒有實作體驗,其實很難光靠腦袋「想」出程式語言可以「做」什麼。

對我們而言,「我可以拿程式來做什麼」是個非常抽象的問句。

固然初學者必然有學習程式的動機──不管是想轉行、想了解後再決定是否轉行、想增加第二專長、想了解大家最近流行學什麼,甚或是「模糊地覺得自己可能有興趣」;然而,這個動機只是一個學習的起心動念,面目仍然很模糊,難以具象,且很可能在認識程式的過程中被推翻。

就像是考大學時想要主修某個科系,或是求職時打算嘗試某份工作一樣,沒有實際進入瞭解,都只是腦中未經驗證的「假想」。

也因此,在我個人看來,「你想學程式來做什麼?」這個問題的前提,是你先對程式程式原理和網路架構有一定程度的掌握之後,才有能力進一步思考的課題。

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

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

學習資源分享:我個人會將「理論」和「實作」課程的管道分開,「理論」的課程大多在Coursera或是edX上找由大學開設的課程,著名的包括史丹佛大學的機器學習、普林斯頓大學的演算法I、II等。

重點在於觀念的理解和底層知識的建構,打好理論的基礎之後才開始上「實作」的相關課程,像是Udemy、Udacity、codecademy或是Hahow(中文學習平台)上都有各式各樣的程式語言課程,這個時期的學習重點應是「求精不求快」,選擇一門感興趣的課程,並且貫徹始終,方才是細水長流之道。

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

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

能夠在短時間實踐,並且學習和不同人合作的場域非黑客松(hackathon)莫屬。

黑客松宛如軟體工程師大會師的盛典,各方人馬無不盡全力角逐,只為打造出心目中理想的科技產品,從中激盪出的火花和對話,往往也孕育出了日後成熟的果實。

學習資源分享:黑客松往往有不同的主題,像是健康、智慧城市、區塊鏈、人工智慧、財務等等,這也是找尋志同道合夥伴的最佳場域,大家不妨可以搜尋學校或是企業舉辦的黑客松參加。

另外也可以透過參加meetup或是工作坊等形式,從程式碼延伸出的科技社群,不止蘊藏了豐沛的技術含量,更寶貴的是與「人」的互動,我想,這也是其中的樂趣所在吧,為了編織共同的藍圖不眠不休,為了追求共同的理想日以繼夜,哪怕只是小小的科技產品,承載了創造者的夢想和智慧結晶,日後也足以撼動整個世界。

如果未來的共同語言是程式,我希望⋯⋯ 在被諸多專有名詞和技術框架包覆之下,回溯根源,程式的靈魂依然來自於人性。

當今的企業龍頭用程式打造了龐大的科技帝國,但也間接摧毀了許多固有的傳統,程式宛如兩面刃,一面造就了新型態的服務,一面也無情的淘汰了追不上的產業。

在這股科技浪潮上,我很幸運有機會能夠學習程式這樣技能,站在兩年學習的終點,和即將踏上職場起點的交叉路口,我想用「為臺灣而教」創辦人劉安婷在成大畢業典禮上的致詞來提醒自己: 這份幸運,叫做「選擇權」。

選擇權讓我們徬徨,可是選擇權卻也是讓我們最幸運的地方。

拿著這張很沈重的幸運,我會問自己:「我想要拿這份幸運,做什麼事情?」 是的,「我想拿程式來做什麼?」絕非只是對一個初學者的提問──這個問題也乘載了超乎你我想像的重量,關乎著善良與邪惡、理想與現實,以及責任與道德之間的拉扯。

數年之後,程式也許讓世界變得更美好,也許讓世界變得更醜陋。

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

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

執行編輯:邱佑寧、張詠晴 核稿編輯:林欣蘋 PhotoCredit:Shutterstock 文科 工程師 程式 海外留學 關聯閱讀 從純文科生到軟體工程師之路(一):離開哈佛校園後,踏上「再也沒有標準答案」的嶄新旅程 從工程師到創業家之路:「如果遵循常規,是找不到新解答的。

」 作品推薦 申請上了!然後呢?──5件出國留學前,做了絕對不會後悔的準備 哈佛大學最「狂」的一門課──「如果你沒聽過CS50,請別說你讀過哈佛」 參考資料 TOP AliceYang/哈佛姐的不正經學術之旅 無可救藥著迷於storytelling的浪漫主義者,最近的興趣是virtualreality和meditation,濃縮咖啡和希臘優格是每天賴以維生的精神食糧,沒有耳洞,但是喜歡欣賞美麗的耳環,心情不好的時候網路拍賣下單是唯一解藥。

骨子流著天生的記者血液,不想錯過任何生命中發生的新奇事物,立志成為熱血碼農但總是失敗,因此決定用文字代替程式碼,去紀錄一段段世代的呢喃。

Facebook:哈佛姐夢遊矽谷 Instagram Youtube Medium 看更多 上一篇 「學習是戰爭」、「做不到只能死」:韓國崛起背後的血淚代價 下一篇 曾一心離家的我,如今為「台灣人」驕傲──那些自卑與不平,來自錯誤的「定錨點」 你可能有興趣的文章 留學StudyAbroad 【作者通信】換條跑道不是夢!我如何從文科留學生,轉系又轉行到資訊領域? 職涯Career 高齡轉職困難嗎?矽谷軟體工程師這麼說 求職Job-hunting 新鮮人勇闖矽谷!無工作經驗、非本科系畢業⋯⋯這是我收到500封拒絕信後的體悟 學習Learning 第一份工作就上手信邦跟你想的電子業不一樣 熱門文章 1 政黨惡鬥、人心焦慮,中產階級受創深──加拿大通膨31年新高,我的在地觀察 2 「你以為的天賦,只是別人的皮毛」──我在巴黎音樂學院的領悟 3 台大資工系副教授陳縕儂:離開美國微軟,「回台灣教書讓我更快樂」 4 「在柬埔寨、東南亞工作都是詐騙!」排山倒海的聳動報導,解救了誰? 5 在穩定與自由之間:年過30的我辭去7年公職,赴蘇格蘭攻讀博士的三個考量 6 虔誠國度的人肉市場:《我的母親賣了我》爭議,與東南亞的雛妓剝削問題 合作推薦 合作推薦 換日線Crossing-最貼近你的國際新視野 歷年季刊 團隊成員 大事記 Copyright©2022天下雜誌.Allrightsreserved.版權所有,禁止擅自轉貼節錄 隱私權政策 著作權聲明



請為這篇文章評分?