Each civilization has its own unique technology tree.
約維安文明
我們現在清楚業界中一些擅長以程式處理資料的分析師(The programming analyst)、有一些擅長分析資料的程式設計師(The analytic programmer),或者這些專業人士更常見的職稱可能是資料分析師(Data analyst)、資料科學家(Data Scientist)或者資料工程師(Data Engineer)。在正式踏上約維安養成路徑前,我們有點龜毛地想先預覽一下未來所要研習的技能與知識,就像是在玩經典的即時戰略遊戲「世紀帝國二」,投入時間與心力練習控兵、發展經濟與戰術之前,玩家一定會先將種族文明的科技樹仔細研讀,暸解相對優勢、特長與兵種相剋等資訊一般。
約維安的四個發展階段
我們將約維安文明分為四個階段:黑暗時代、封建時代、城堡時代與帝王時代,位於特定文明階段的約維安也有著對應的暱稱,處於黑暗時代的初心學習者被稱為「初級約維安」、邁入封建時代的入門學習者被稱為「中級約維安」、歷經城堡時代的中階學習者被稱為「高級約維安」、順利升級到帝王時代的進階學習者被稱為「資深約維安」,約維安計畫的目標,就是運用 52 週的時間,由經驗豐富的資深約維安(也就是數據交點文摘的主編,我)來引導一位對於程式設計與資料分析完全陌生的初學者,從黑暗時代開始逐步發展到封建時代、城堡時代以至於帝王時代,蛻變成能獨當一面的資深約維安。也由於有資深約維安的引導,預期在文明的升級會更有效率。接下來介紹在這四個不同發展階段中,應該具備哪些技能與知識,才能更游刃有餘地升級。
黑暗時代
初級約維安會從黑暗時代起步,在這個文明階段需要暸解 Jupyter 以及學習在基礎程式設計之前所需要的技能,包含命令列、Markdown 與 Git/GitHub。
命令列(Command line)是約維安與 Jupyter 溝通的一種介面,與在圖形介面作業系統使用滑鼠或觸控相似,但最大的差異為命令列乃是透過在鍵盤敲擊指令,來完成與電腦的溝通,而非使用滑鼠的點擊或者觸控的手勢,所有使用滑鼠或觸控能夠與電腦溝通的任務都能夠用命令列完成。
Markdown 是一個輕量的標記式語言(Markup language),約維安能夠使用它撰寫文件,只要在新增文字檔之後將副檔名更改為 .md 即可;它能夠透過非常簡單的語法為文件設置格式,像是加上粗體樣式、引用樣式以及建立文件的結構,像是標題、項目符號清單與數字清單等,更具備了圖片、表格還有數學式等全面性支援。約維安除了能夠撰寫獨立的 Markdown 文件,亦可以在 Jupyter Notebook 之中添加 Markdown 儲存格,比之傳統在程式碼中以「註解(Comments)」描述思維邏輯,更加美觀與易讀。
Git 是分散式的「版本控制系統」,GitHub 是以 Git 為核心技術基礎的「雲端版本控制系統服務」。如果約維安所從事的資料分析專案是與其他人一起合作,那麼就有可能會使用到 Git/GitHub 來與不同的合作對象交流檔案與程式碼,運作的原理像是提供多人共同編輯協作的 Dropbox 檔案、Google 文件,並且能夠追蹤不同版本的程式碼之間差異、修改程式碼的原因以及修改者是誰。版本控制系統是軟體開發團隊必備的工具,現今資料科學團隊與軟體開發團隊的分野,會視不同公司規模與組織設計而定,因此約維安若是在一個軟體開發的團隊中從事資料分析任務,就必定需要具備使用 Git/GitHub 的能力。
封建時代
升級到封建時代後,在這個文明階段中級約維安需要學習基礎的程式設計能力,包含 SQL、Python 與 R。
SQL(Structured Query Language)是一種專門用途(Special-purposed)的結構化查詢語言,透過 SQL 約維安能夠對資料庫中的資料進行建立(Create)、查詢(Read)、更新(Update)和刪除(Delete)的操作,處於封建時代的約維安會花費絕大多數的時間和心力投注於查詢的語句。SQL 在程式語言分類中屬於宣告式程式設計(Declarative programming)分支,這是與另外兩個程式語言 Python 和 R 最大的不同之處。
Python 是一種廣泛用途程式語言(General-purposed programming language),具有高階、直譯與簡潔的特性,由荷蘭電腦科學家 Guido van Rossum 於 1991 年創造,目前由 Python 軟體基金會維護。在 NumPy、SciPy、Pandas、Matplotlib、Scikit-Learn、TensorFlow 與 PyTorch 等套件的強力加持下倍受約維安的青睞。
R 是一種專門用途程式語言(Special-purposed programming language),具有高階、直譯與向量化的特性,由紐西蘭奧克蘭大學的 Ross Ihaka 和 Robert Gentleman 所設計、R 核心團隊維護,常用於開發統計和資料分析軟體系統,近年在 Hadley Wickham 與 RStudio 團隊所建構的應用套件以及大數據、資料科學與人工智慧的熱潮加持,廣受約維安的熱愛。
城堡時代
升級到城堡時代後,在這個文明階段高級約維安需要學習進階的程式設計能力,包含物件導向程式設計(Object-oriented programming, OOP)、函數型程式設計(Functional programming)、套件以及環境管理。
物件導向程式設計顧名思義是一種以物件作為程式碼執行中心的設計理念,同時也是應用程式開發的方針,它透過定義類別將資料封裝為屬性、將函式封裝為方法,並且透過初始化物件將類別中所封裝的屬性及方法實現出來。物件導向程式設計有別於在基礎程式設計中所仰賴的順序型程式設計(Procedural programming),它將物件作為程式碼中的基本單位,藉此能夠提高程式的重複使用性和可擴充性。
函數型程式設計程式設計顧名思義是一種以函數作為程式碼執行中心的設計理念,常見的應用場景在科學計算,執行方式為結合一個函數型函數、函數(或者一個匿名函數)以及物件,將在函式中定義妥當的運算,應用在物件中的每一個元素,藉此提高運算效率,減少迭代的程式碼。
Conda 應用程式是一個開源的跨平台工具,被設計作為程式語言的套件以及環境管理員。傳統 Python 軟體工程師以 pip 作為套件管理員(package manager)、以 venv 作為工作環境管理員(environment manager),而 Conda 應用程式則達成了「兩個願望、一次滿足」,它能夠管理套件亦能夠管理環境,高級約維安會在命令列介面中使用指令與 Conda 應用程式互動。
帝王時代
升級到帝王時代後,在這個文明階段資深約維安將應用程式語言的標準以及第三方套件,完成各式各樣的資料分析任務,這些任務可能涵蓋一個或多個資料科學應用場景,包含資料載入、資料處理、資料轉換、資料視覺化、資料模型與資料溝通。
標準套件指的是隨著程式語言直譯器一起發佈的套件,這些套件不需要額外安裝,會伴隨程式語言直譯器就被安裝妥當,像是 Python Standard Library 以及 R Core Packages。
第三方套件指的是由非程式語言核心維護團隊所開發並維護的套件,這些套件不會伴隨程式語言直譯器被發佈,需要自行安裝。Python 與 R 都具有數量極為豐富且威力強大的第三方套件生態系,資深約維安將能站在巨人的肩膀上看得更遠,在「不重複造輪」(Do not re-invent the wheel)思維下自在地使用程式語言完成各式各樣的程式設計與資料分析任務。
至此,資深約維安處於一個水到渠成的狀態,可能因為對於資料處理特別有興趣,開始研究資料管線建置、網頁後端框架或者資料庫管理;也可能因為對於資料視覺化特別有興趣,開始探索 JavaScript、D3.js 或者網頁前端框架;亦有可能因為對於資料模型特別有興趣,開始鑽研資料結構、演算法、數學以及統計。
預覽完約維安文明黑暗時代、封建時代、城堡時代與帝王時代的科技樹之後,約維安計畫:第一週來到尾聲,希望您也和我一樣期待下一篇文章。
對於這篇文章有什麼想法呢?喜歡😻、留言🙋或者分享🙌