作者序一
近年來資料科學與⼈工智慧技術大行其道,不少研究領域與創新應用紛紛出爐,相對傳統的科學計算與數值計算領域已經有不少成熟
的演算法與軟體。資料科學,除了需要統計及資料處理的技術外,還非常仰賴基礎的數值運算功能,在大數據的情境下,數值運算的加速更是重要。人工智慧技術也非常仰賴資料科學的分析結果,以及模型運算上的效率。然而傳統科學計算與數值計算領域的研究成果對資料科學與人工智慧的助益非常大。舉凡矩陣運算、數值分析、應用線性代數或是最佳化方法上的成果都化為一行行的演算法及程式提供給資料科學家或是機器學習專家,用來建造更為貼近人心的人⼯智慧產品。資料科學與人工智慧技術很需要數值計算的演算法為基礎。很自然地,Python 就被選為這些技術的發展平台,近十年來,不少科學運算的功能都挹注在這個語言當中。最重要的兩塊基石可以說是numpy及scipy 套件,提供了很棒的數值運算及科學運算基礎,使用介面上也不算煩雜。然而,這還不夠,當開發者開發出新的功能或是套件時,卻會受限於語言本身的執行效能,而需要以更低階的語言實作來取得效能。程式語言的效率及開發彈性一直是魚與熊掌不可兼得的,選擇了程式效率就勢必放棄開發的彈性,選擇了開發的彈性與速度就勢必放棄執行效率。Julia語言,作為⼀一個新興語⾔言,同時兼有效能以及開發彈性,吸取了各家語言的優點,並且在語⾔及編譯器技術上的設計,讓Julia成為了兼有效能及彈性的優美語言。Julia語言設計者一開始著重科學運算以及數值運算上,而將這個語言設計為一個泛用型的語言。對多數的科學家來說,效能是非常需要的,往往一個理論模型的實驗需要數天以上的時間。對一個非資訊領域的領域專家來說,方便易用的語言會是得心應手的工具,不需要去了解太多的底層細節可以節省非常多的時間,專注在他們自己有興趣的事物上。Julia語言在設計之初就考慮了非常多的語言特質,讓他在很多面向可以被顧及,成為受到各個領域專家所喜愛的語言,更是資料科學與人工智慧技術的最佳搖籃。
作為⼀個年輕的語言,套件的豐富程度遠遠不及其他發展長久的語言,但是他有一群活潑積極的開發者。在語言發展初期借了了不少其他語言來的套件以補足缺少的部份,然後逐漸發展出純Julia寫成的套件,一個兼具效能及彈性的套件。以最富名氣的 Flux.jl 深度學習框架為例,他本身是⼀個純 Julia 實作而成的套件,底層有GPU 的 CUDA ⽀支援,上層有可拆解組合的模型元件,由於語言本身的特性,套件可以與語言本身無縫接軌,語言本身的特性可以直接被套用在模型上。為了效能及可讀性,一群熱情的開發者正積極地開發著這樣純 Julia 的套件,也為了真正地解決問題。在語⾔進入穩定之後,套件開發者們更可以放心的實作,期待未來可以看到在這個語言上套件百花齊放的燦爛姿態。
在國外的開發者社群開心的討論著這個新興的語言,台灣卻難掩寂寞。於是我決定自己來發起社群,將好語言介紹給大家。不少在台灣的開發者都不具備相關科系的背景,而且在台灣的環境中比較難培養好的英文能力,這使得廣大而豐富的英文技術資源難以被台灣的開發者所使用。語言的確是個隔閡,技術底蘊更是身為開發者需要修煉的。我也決定在中文的使用者社群中投入自己的心力,撰寫本書,讓更多中文使用者可以接觸到這個語言、理解這個語言。
本書的定位是從完全沒有程式基礎的人到有基礎的程式設計師。在書的章節編排上,由淺入深,前六個章節是基礎的程式設計篇章,
7~9章節是這個語言的核心觀念,也是比較進階的程式設計方式,會對應到物件導向風格的設計方式,10~12 章節是關於串流及檔案的存取方面,最後的三個章節會晉升到更高層次的討論,介紹物件導向設計、函數式程式設計及metaprogramming。對於語言的初
學者可以不用把書全部看完,可以邊實作專案,有一些實務經驗的同時慢慢閱讀後續的章節。
Julia Taiwan
杜岳華
作者序二
在校園裡同學們最常問我的一個問題就是:「老師,我該學哪個程式語言比較好?是R、是Julia 是Python?」我的答案是,都好!因為重點不在於選擇,而是當你做出選擇之後的每一個嘗試、學習、堅持、突破與精進,這過程所積累出來的實力,才是你該追求的。為了提供學生更多元的學習場域,引動學習動機,我成立了資料實驗室(Data Lab),並長期與企業合作,透過實際的專案項目培養資料科學人才,同時也定期開設相關課程,鍛鍊同學們的基礎能力,一個因緣巧合,我認識了本書的另一位作者--杜岳華老師,岳
華讓我印象非常深刻,是個有想法、有才華、有熱情、有能力,堅持理想並付諸行動的年輕人,有一次他跟我說,希望有更多人認識Julia的這個語言,更希望台灣在國際Julia社群中的能見度可以提高!我聽了非常感動,也跟著熱血了起來!於是,我們在資料實驗室中開設了Julia程式語言的課程,接著就是撰寫本書,讓更多中文使用者可以認識這個資料科學語言中的新星--Julia 。
這個時代的學習和過去很不一樣,有太多的新知識與新技術鋪山倒海的湧入,就像這幾年年大家常常在談的IoT、Big Data、ML、AI、
Blockchain,似乎沒有人能明確又清楚的告訴你那些是什麼?它沒有教課書,也沒有結論,因為這一切都還在發展與演化當中,不過可以肯定的是,倘若我們仍舊以過去的學習態度和方法,要能夠跟上這個時代,掌握這些風口,肯定很困難,那我們該如何因應呢?
既然確定性的知識越來來越少,那就保持開放的頭腦與心胸吧!當思考世界的角度越多,你的未來就充滿了無限可能。
最後,我想引用Ratatouille的經典台詞並稍做修改來鼓勵各個領域的朋友:
"Not everyone can become a great Data scientist, but a great Data scientist can come from anywhere."
衷心祝福各位讀者!
東吳大學巨量資料管理學院 副教授
胡筱薇