【從 0 到 0.01】一個中文系學生是怎樣學 Programming ?

沒想過 flyagain.la 的文章會有如此回響,在此再一次感謝每一個讀者,以及給我不少意見的前輩。有人隨即在問 Python 、Scrapy 、Data Science 、 R 等等,撰文一篇分享心得。

我與每一位 CS 學生的經歷都不同,偏重單一範圍,有太多需要進修的,希望前輩們亦可以多加點撥。

雁橋的背景?(純血的)中文系!

聽過「百無一用是書生」嗎?雁橋就是一名書生!。

我是「純文科」背景,A-level 考中史、文學、高考成績不佳只有中化過得去,大學修讀中文系,整體 GPA 不過 3.0,簡單來說就是「讀不成書的壞學生」。

中文系是讀什麼的?形形式式的都有,然而樹仁中文系是比較偏重「古典文學」、「古典哲學」方面(最少我讀書的時侯如此),我選修的方向是先秦哲學,畢竟論文是《孔子詩論》研究(上博簡,如果有興趣的話可以 Google /百度一下,這東西有點偏門)。

可以說,我的理科背景接近零。
對於學編程這絕對不是問題,畢竟任何學科都需要邏輯。

立志:你為什麼要學程式語言?

為自己訂立一個目標很重要,我的目標很簡單-想要更多選擇。

蕭叔叔話學識英文,世界大好多;因為有著過得去的語言水準,在環遊世界的過程中認識到一些新朋友,去學 Python 是想在工作、前途發展有更多的選擇。

記得有篇文章談到 Data Science 、Machine Learning 都是將來大趨勢,我第一個想法是學習大數據,做數據科學家。現在知道這條路需要 5 年、10 年或者更久的努力,會按自己的步調去進步。

反正人生還有很多時間。

決定自己第一套(主力) Programming Language

學編程第一件事就是選擇「門派」,第一種學習的程式語式取決於「你想做什麼」與「你喜歡什麼」,我的路徑是數據分析、統計、科學研究,故此以 Python > R > Octave 這個方向學習(略懂 C 與 Javascript ,容後再談),同時因為 Python 是一把「萬用刀」,可以用它來完成各式各樣的事情,亦因而多了很多練習機會。

你是否需要了解所有程式語言的特點再入門呢?我倒認為不必(但無奈人就是有好奇心,你總會去 Google) ,下圖就有張《魔戒》角色與編程語言的對應表。

 

根據我的理解,我會有以下的意見:

  • 如果你想寫出一個網頁、一個簡單的遊戲、一切與前端(Front-End) 有關的知識,去學 Javascript 。它是近年很多人學的程式語言,加上各式各樣的框架可以打造屬於自己的作品。

    因為 Node.js 、React.js 、React Native 等等相關應用越來越流行,前輩指精通 Javascript 會令人比較容易找到開發者工作,在 Youtube 上亦有大量以 JS 快速寫遊戲的影片,老實說是幾過癮的。

  • 如果你想要一套「萬用」的程式語言,Python 將會是你不二之選。它有著大量的函式庫,網頁制作框架、爬蟲框架、數據分析框架、神經網絡框架,正因為如此使它「易學難精」,至今我的程式碼仍然不夠乾淨。

    它的語法簡潔,設計扣學是優雅、簡單、明確,程式語言可讀性言高,表達方式相當明確,運作速度比起 C++ 、Java 慢一點,可是適合快速開發,製作 Prototype 。

    缺點是當你開始學習 OOP ,會發現自己錯過很多基礎…不少精通其他編程語言的前輩,對於 Python 都有很深的了解,學懂它你不會後悔的。

    記住要學 Python 3 ,IDE 下載 Anaconda 或是免費版的 Pycharm。

  • Ruby on Rails 雖然退流行了,但這套網頁設計語言真的超級有趣。更確切來說 Ruby 是程式語言,Rails 是網站框架。在試玩 Amazon Cloud 9 的時侯裝過來玩兩天,寫出一個簡單的試作網頁出來。回顧一些舊文章,大家喜歡說 Twitter 、AirBNB 等 Startup 亦採用 Ruby on Rails ,可惜這個時侯它已經不及 Javascript 流行了,但也不能一口咬定它是「明日黃花」。
  • 很多人推薦 Swift ,這是 Apple 推出作 iOS 與 macOS 開發的。我在 iPad 玩過一陣子 Swift Playground 入門教學,覺得不適合自己。有 iPad 的可以立刻試試。

不過留意這是第一套「主力」語言,你第一套學習的編程語言應該是 C 。

用世界名校課程入門:Harvard CS50

都 21 世紀了,買書學習不是不可行,但網上那麼多資源不用是浪費。

本人推薦早前寫過文章介紹 Harvard 的 CS50 ,這是哈佛大學提供給所有學生的基礎 Computer Science 課程,你可以選擇在網上看課堂錄影/收看 Live ,整個課程除了完全免費更是每年更新,有大量的編程功課與課外閱讀/影片,同時 Facebook Group 可以隨時問功課。

然後你會學習 C 語言,一種我認為必須要認識的編程語言;每個星期你需要花 2 個小時聽完課堂,再花 8 ~ 10 小時去完成功課;當你利用自己的知識把所有功課完成之後,可以說你已經進行「零的突破」了!

老實說這個課程超花時間,花的時侯全部都是思考如何完成功課。當時我在搭車、食飯、睡覺前不斷思考程式的運作風式,然後有一天突然就懂了。老實說有部份功課我不是完成得很扎實,有一天重新回到 C++/Java 的世界我要重新 Pickup。

上堂、Youtube 、練習的瘋狂輪迴

完成 CS50 之後,我不斷挑戰 edx、Datacamp 、coursera 等等平台的 MOOC (Massive Open Online Course) 課程,但沒有花過任何錢在上面。我知道在 CV 上面寫 Harvard CS50 /Stanford Machine Learning / Microsoft Data Science 是很酷的一件事,但實力至上的世界練習更重要。

其次 Youtube 有超大量的編程影片,你不需要每天寫 Code ,但每天認識一些新知識很重要。

再來就是練習了,就像 CS50 內的功課一樣,你必須用 Programming Language 解決一些問題,可能是上司指派的一些工作、無聊的 Side Project 、為朋友寫一個小網站/Web App ,不懂的上 Stack Overflow 找答案,閒時上 Github 看看有什麼流行的。

簡單來說是用電腦資訊來打發時間,讓自己生活在這樣的環境中。

(秘技:找一些讀 CS 的朋友吹水,每日都有新野教你,幸運的是我身邊有幾個超強的 Programmer)

後話:Computer Science 是一種失傳的藝術

最後想談談我工作的環境,事實上不少前輩都懂得寫程式的,甚至說上一代懂上網的人,或多或少都是「電腦迷」。在回顧當年的環境,他們需要花心神時間解決一些問題,比如說被公司封了 ICQ ,就用純文字介面來玩;甚至用程式語言打造一個純文字 RPG 來蛇王。

在沒有 LIHKG、沒有高登、沒有 Facebook、沒有 Instagram 的年代,他們懂電腦,他們都需要明確的邏輯操作電腦,而現在電腦的「容錯率」提升了,令這門藝術失傳了。

就像有了拼音、九方輸入法,速度、倉頡變了某些用家的專利,這沒有所謂好不好;但編程用的是基本的「邏輯」,這種傳統技藝可不能失傳,故此我認同 STEM (或 STEAM ,加了 Art) 教育的重要性。

又寫了幾千字(我用字很繁瑣,完全不像中文系),都是一些個人經驗,未必有參考價值。

喜歡我的文章,請 Like 我的 Facebook Page 《雁橋曰》,可以發訊息問我關於旅行的任何意見。

雁橋

足跡踏遍 40 + 國家的旅遊者,旅人中年發現愛上科技與編程,戒酒後更喜歡咖啡香氣,希望以文字令世界變得更加美好。

發表迴響

%d 位部落客按了讚: