關于我們
書單推薦
新書推薦
|
Julia語言編程入門
l 從基本知識入手,包括語言語法和語義。 l 掌握各個編程概念的明確定義。 l 按照邏輯進度學習值、變量、語句、函數(shù)和數(shù)據(jù)結構。 l 了解如何使用文件和數(shù)據(jù)庫。 l 理解類型、方法和多重分派。 l 使用調(diào)試技術修正語法錯誤、運行時錯誤和語義錯誤。 l 通過案例研究探索接口設計和數(shù)據(jù)結構。 如果你要學習如何編程,Julia是一個絕J佳的即時編譯的動態(tài)類型語言,并且語法簡潔。這本實用指南使用Julia帶領你一步一步地學習編程,先從基本的編程概念開始,逐步轉(zhuǎn)向更高級的功能,如創(chuàng)建新類型和多重分派。 Julia的設計初衷是為了滿足高性能,所以無論對于數(shù)值分析和計算科學,還是對于Web編程和腳本編寫,Julia都是一種理想的通用語言。通過每一章的練習,會讓你邊學邊理解各章介紹的編程概念。本書特別適合高中和大學層次的學生,對自學者和需要學習編程基礎知識的專業(yè)人員也很適用。 為什么選擇 Julia? Julia的以下特點是決定性的因素: ?? Julia是一個高性能編程語言。 ?? Julia使用了多重分派,允許程序員選擇適合應用的不同編程模式。 ?? Julia是一個動態(tài)類型語言,可以很容易地交互使用。 ?? Julia有一種易于學習的簡明的高級語法。 ?? Julia是一個可選類型的編程語言,它的(用戶自定義)數(shù)據(jù)類型可以讓代碼更清晰,也更健壯。 ?? Julia 有一個擴展標準庫,還有大量可用的第三方包。 前言 2018 年我開始準備一門針對完全沒有編程經(jīng)驗的學生的編程課程。我想用Julia,不過我發(fā)現(xiàn)市面上沒有用Julia 作為第一編程語言來學習編程的書。確實有很多不錯的教程解釋了Julia 的重要概念,不過沒有哪一本書足夠重視學習程序員是如何思考的。 Allen Downey 的《Think Python》介紹了學習正確編程的所有重要概念。不過,那本書是基于Python 語言的。我的講義初稿可算是各種參考書的大雜燴,不過隨著準備的時間越長,講義內(nèi)容就越像《Think Python》中的章節(jié)。我有了一個想法,想把那本書移植到Julia,把我的講義整理成Julia 版的《Think Python》,這個想法很快付諸實施。 所有材料都可以從一個GitHub 存儲庫作為Jupyter notebook 獲取。我在Julia Discourse 網(wǎng)站上發(fā)布了有關這個課程進度的消息后,反饋像潮水般涌來。大家迫切需要用Julia 作為第一編程語言介紹基本編程概念的一本書,顯然,這是Julia 世界中缺失的一環(huán)。我聯(lián)系了Allen,詢問我能不能正式把《ThinkPython》移植到Julia 寫一本書,他的回答很干脆:“加油!”他幫我與他的O’Reilly Media 編輯取得了聯(lián)系,一年后,這本書終于完成,我對它做了最后的潤色。 這條路走來真是有些坎坷。2018 年8 月,Julia v1.0 發(fā)布,與所有Julia 程序員一樣,我不得不做代碼遷移。將源文件轉(zhuǎn)換為O’Reilly 兼容的AsciiDoc 文件時,這本書中的所有例子都經(jīng)過了測試。工具鏈和示例代碼都必須是Juliav1.0 兼容的。好在8 月份我不需要上課…… 希望你喜歡這本書,它不僅能幫助你學習編程,還能教你像計算機科學家那樣思考,至少能有那么一點點。 ——Ben Lauwens 為什么選擇Julia? Julia 最初由Alan Edelman、Stefan Karpinski、Jeff Bezanson 和Viral Shah 在2012 年發(fā)布。這是一個免費且開源的編程語言。 選擇編程語言往往很有主觀性。對我來說,Julia 的以下特點是決定性的因素: ?? Julia 是一個高性能編程語言。 ?? Julia 使用了多重分派,允許程序員選擇適合應用的不同編程模式。 ?? Julia 是一個動態(tài)類型語言,可以很容易地交互使用。 ?? Julia 有一種易于學習的簡明的高級語法。 ?? Julia 是一個可選類型的編程語言,它的(用戶自定義)數(shù)據(jù)類型可以讓代碼更清晰,也更健壯。 ?? Julia 有一個擴展標準庫,還有大量可用的第三方包。 Julia 是一種獨一無二的編程語言,因為它解決了所謂的“兩個語言問題”。 不需要任何其他編程語言,利用Julia 就可以寫高性能的代碼。不過,并不是說這會自動發(fā)生。要由程序員負責優(yōu)化形成瓶頸的代碼,不過只用Julia 本身就可以做到。 本書面向的讀者 這本書適合任何想要學習編程的人,無須先前掌握任何編程知識。 我們會循序漸進地介紹新概念,并在后面的章節(jié)介紹更高級的主題。 本書可以作為高中或大學一個學期課程的教材。 本書使用約定 以下是本書使用的排版約定: 斜體(Italic) 表示新術語、URL、email 地址、文件名和文件擴展名。 等寬字體(Constant width) 表示程序列表,以及段落內(nèi)部,用于引用程序元素,如變量或函數(shù)名稱,數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、函數(shù)語句和關鍵字等。 加粗等寬字體(Constant width bold) 表示由用戶所輸入的命令或其他文本。 斜體等寬字體(Constant width italic) 表示應由用戶所提供的實際值或根據(jù)上下文所確定的值來替換的文本。 使用代碼示例 本書中使用的所有代碼都可以從GitHub 上的一個Git 存儲庫(https://github.com/BenLauwens/ThinkJulia.jl)獲取。如果你不熟悉Git,應該知道這是一個版本控制系統(tǒng),允許你跟蹤一個項目里的有關文件。Git 控制下的一個文件集合就稱為一個“存儲庫”。GitHub 是一個托管服務,為Git 存儲庫提供了存儲空間,并提供了一個方便的Web 界面。 現(xiàn)在已經(jīng)有一個很方便的包,可以直接增加到Julia。只需要在Pkg 模式下在REPL 中鍵入add https://github.com/BenLauwens/ThinkJulia.jl,參見第4 章“海龜繪圖”一節(jié)。 運行Julia 代碼最容易的方法是訪問https://juliabox.com 并啟動一個免費會話。 可以使用REPL,另外它還提供了一個notebook 界面。如果想在你的計算機上安裝Julia,可以從Julia Computing 免費下載JuliaPro。這包括一個最新的Julia 版本、基于Atom 的Juno 交互式開發(fā)環(huán)境,以及多個預安裝的Julia 包。如果你喜歡研究,可以從https://julialang.org 下載Julia,安裝你喜歡的編輯器(例如,Atom 或Visual Studio Code),并啟用用于Julia 集成的插件。 如果是本地安裝,還可以增加IJulia 包,在你的計算機上運行一個Jupyternotebook。 這本書的目的是幫助你完成工作。一般來講,你可以在程序和文檔中使用這些示例代碼,不需要聯(lián)系我們來得到許可,除非你直接復制了大部分的代碼。例如,如果你在編寫一個程序,使用了本書中的多段代碼,這并不需要得到許可。但是出售或發(fā)行O’Reilly 書示例代碼光盤則需要得到許可;卮饐栴}時如果引用了這本書的文字和示例代碼,這不需要得到許可。但是如果你的產(chǎn)品的文檔借用了本書中大量示例代碼,則需要得到許可。 我們希望但不嚴格要求標明引用出處。引用信息通常包括書名、作者、出版商和ISBN。例如,“Think Julia by Ben Lauwens and Allen B. Downey (O’Reilly).Copyright 2019 Allen B. Downey, Ben Lauwens, 978-1-492-04503-8”。 如果你認為你在使用代碼示例時超出了合理使用范圍或者上述許可范圍,可以隨時聯(lián)系我們:permissions@oreilly.com。 O’Reilly 在線學習平臺(O’Reilly Online Learning) 近40 年來,O’Reilly Media 致力于提供技術和商業(yè)培訓、知識和卓越見解,來幫助眾多公司取得成功。 我們擁有獨一無二的專家和革新者組成的龐大網(wǎng)絡,他們通過圖書、文章、會議和我們的在線學習平臺分享他們的知識和經(jīng)驗。O’Reilly 的在線學習平臺允許你按需訪問現(xiàn)場培訓課程、深入的學習路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關的更多信息,請訪問http://oreilly.com。 聯(lián)系我們 請將關于本書的意見和問題通過以下地址提供給出版商: 美國: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中國: 北京市西城區(qū)西直門南大街2號成銘大廈C座807室(100035) 奧萊利技術咨詢(北京)有限公司 針對這本書,我們還建有一個網(wǎng)頁,列出了有關勘誤、示例和其他信息?梢酝ㄟ^以下地址訪問這個頁面:https://oreil.ly/think-julia。 如果對這本書有什么建議,或者要詢問技術上的問題,請將電子郵件發(fā)送至:bookquestions@oreilly.com。 要了解關于我們的圖書、課程、會議和新聞的更多信息,請訪問我們的網(wǎng)站:http://www.oreilly.com。 我們的Facebook: http://facebook.com/oreilly。 我們的Twitter: http://twitter.com/oreillymedia。 我們的YouTube: http://www.youtube.com/oreillymedia。 致謝 非常感謝Allen 寫了《Think Python》一書,并允許我把這本書移植到Julia。 你的熱情深深地感染了我! 還要感謝這本書的技術審校人員:Tim Besard、Bart Janssens 和David P.Sanders,你們提出了很多非常有幫助的建議。 感謝O’Reilly Media 的Melissa Potter,你讓這本書更出色。是你督促我少走彎路做正確的事,并讓這本書盡可能讓人耳目一新。 感謝O’Reilly Media 的Matt Hacker,是你幫助我解決了那些Atlas 工具鏈和語法高亮顯示問題。 感謝所有與我共同完成這本書初版的同學們,還有提出修改意見和建議的所有貢獻者(如后所列)。 貢獻者名單 如果你有建議或修改意見,請發(fā)email 至ben.lauwens@gmail.com 或者在GitHub 上開一個問題。如果我根據(jù)你的反饋做了修改,會把你增加到貢獻者名單里(除非你要求省略)。 要讓我知道你使用的是這本書哪一個版本,哪一種格式。最好至少給出有錯誤的那個句子的一部分,這樣更方便我查找。也可以給出頁碼和節(jié)號,不過這樣查找起來可能不那么容易。 非常感謝! ?? Scott Jones 指出Void 改為Nothing,正是在此之后,我開始把這本書遷移到Julia v1.0。 ?? Robin Deits 發(fā)現(xiàn)了第2 章的一些拼寫錯誤。 ?? Mark Schmitz 建議啟用語法高亮顯示。 ?? Zigu Zhao 找出了第8 章的一些bug。 ?? Oleg Soloviev 發(fā)現(xiàn)了增加ThinkJulia 包的URL 中的一個錯誤。 ?? Aaron Ang 發(fā)現(xiàn)了一些渲染和命名問題。 ?? Sergey Volkov 發(fā)現(xiàn)第7 章中一個已經(jīng)失效的鏈接。 ?? Sean McAllister 建議應當提到一個非常棒的BenchmarkTools 包。 ?? Carlos Bolech 發(fā)來一個長長的修改意見和建議列表。 ?? Krishna Kumar 修改了第18 章中的Markov 示例。 Ben Lauwens是比利時皇家軍事學院的一位數(shù)學教授。他擁有比利時天主教魯汶大學和皇家軍事學院的工程博士和碩士學位,以及皇家軍事學院的學士學位。 Allen B. Downey 是美國歐林工程學院的計算機科學教授。他曾在韋爾斯利學院、科爾比學院和加州大學伯克利分校任教。他獲得了加州大學伯克利分校的計算機科學博士學位以及麻省理工學院的碩士和學士學位。 目錄 前言 1 第1 章 程序之路 9 什么是程序? 9 運行Julia 10 第一個程序 12 算術操作符 12 值和類型 13 形式語言和自然語言 14 調(diào)試 16 術語表 17 練習 19 第2 章 變量、表達式和語句 21 賦值語句 21 變量名 22 表達式和語句 23 腳本模式 24 操作符優(yōu)先級 26 字符串操作 27 注釋 27 調(diào)試 28 術語表 29 練習 31 第3 章 函數(shù) 33 函數(shù)調(diào)用 33 數(shù)學函數(shù) 34 組合 35 增加新函數(shù) 36 定義和使用 37 執(zhí)行流 38 形參和實參 39 變量和形參是局部變量 41 堆棧圖 41 有返回值的函數(shù)和Void 函數(shù) 43 為什么使用函數(shù)? 44 調(diào)試 45 術語表 45 練習 47 第4 章 案例研究:界面設計 51 海龜繪圖 51 簡單重復 53 練習 54 封裝 56 泛化 57 接口設計 58 重構 59 開發(fā)計劃 61 Docstring 61 調(diào)試 62 術語表 63 練習 64 第5 章 條件和遞歸 67 向下取整除和求模 67 布爾表達式 68 邏輯操作符 69 條件執(zhí)行 69 選擇執(zhí)行 70 串鏈條件 71 嵌套條件 71 遞歸 73 遞歸函數(shù)的堆棧圖 74 無限遞歸 75 鍵盤輸入 76 調(diào)試 77 術語表 78 練習 80 第6 章 有返回值的函數(shù) 85 返回值 85 增量式開發(fā) 87 組合 90 布爾函數(shù) 91 更多遞歸 92 信仰飛躍 95 另一個例子 96 檢查類型 96 調(diào)試 98 術語表 99 練習 100 第7 章 迭代 103 重新賦值 103 更新變量 105 while 語句 105 break 107 continue 108 平方根 109 算法 111 調(diào)試 111 術語表 112 練習 113 第8 章 字符串 117 字符 117 字符串是一個序列 118 length 119 遍歷 120 字符串分片 121 字符串是不可變的 122 字符串插值 123 查找 124 循環(huán)和計數(shù) 124 字符串庫 125 ∈操作符 126 字符串比較 127 調(diào)試 127 術語表 129 練習 131 第9 章 案例研究:單詞游戲 135 讀取單詞列表 135 查找 138 利用索引循環(huán) 140 調(diào)試 142 術語表 143 練習 143 第10 章 數(shù)組 147 數(shù)組是一個序列 147 數(shù)組是可變的 148 遍歷數(shù)組 150 數(shù)組分片 151 數(shù)組庫 152 映射、過濾器和歸約 153 點語法 155 刪除(插入)元素 155 數(shù)組和字符串 157 對象和值 158 別名 159 數(shù)組參數(shù) 161 調(diào)試 163 術語表 165 練習 167 第11 章 字典 171 字典是一個映射 171 字典作為計數(shù)器集合 174 循環(huán)和字典 175 反向查找 176 字典和數(shù)組 178 備忘錄 179 全局變量 181 調(diào)試 184 術語表 185 練習 187 第12 章 元組 191 元組是不可變的 191 元組賦值 193 元組作為返回值 194 變長參數(shù)元組 195 數(shù)組和元組 196 字典和元組 199 序列的序列 201 調(diào)試 202 術語表 202 練習 203 第13 章 案例研究:數(shù)據(jù)結構選擇 207 詞頻分析 207 隨機數(shù) 208 單詞直方圖 210 最常用的單詞 211 可選參數(shù) 212 字典差 213 隨機單詞 214 馬爾科夫分析 215 數(shù)據(jù)結構 218 調(diào)試 219 術語表 221 練習 222 第14 章 文件 225 持久存儲 225 讀和寫 226 格式化 227 文件名和路徑 227 捕獲異常 229 數(shù)據(jù)庫 230 串行化 232 命令對象 233 模塊 234 調(diào)試 236 術語表 237 練習 238 第15 章 Struct 和對象 241 組合類型 241 Struct 是不可變的 243 可變的Struct 243 矩形 244 實例作為參數(shù) 245 實例作為返回值 247 拷貝 248 調(diào)試 249 術語表 250 練習 251 第16 章 Struct 和函數(shù) 253 時間 253 純函數(shù) 254 修改函數(shù) 256 原型與規(guī)劃 257 調(diào)試 259 術語表 260 練習 261 第17 章 多重分派 263 類型聲明 263 方法 264 另外一些例子 266 構造函數(shù) 267 show 269 操作符重載 269 多重分派 270 泛型編程 271 接口和實現(xiàn) 273 調(diào)試 274 術語表 274 練習 276 第18 章 子類型 277 撲克牌 277 全局變量 279 比較撲克牌 279 單元測試 280 一副牌 281 增加、刪除、洗牌和排序 282 抽象類型和子類型 283 抽象類型和函數(shù) 285 類型圖 286 調(diào)試 288 數(shù)據(jù)封裝 289 術語表 291 練習 292 第19 章 精選:語法 297 命名元組 297 函數(shù) 298 匿名函數(shù) 298 關鍵字參數(shù) 299 閉包 300 塊 300 控制流 302 類型 304 方法 306 構造函數(shù) 307 轉(zhuǎn)換和提升 308 元編程 309 缺失值 311 調(diào)用C 和Fortran 代碼 312 術語表 313 第20 章 精選:Base 和標準庫 317 測量性能 318 集合和數(shù)據(jù)結構 318 數(shù)學 321 字符串 321 數(shù)組 323 接口 324 交互工具 326 調(diào)試 328 術語表 329 第21 章 調(diào)試 331 語法錯誤 332 我一直在改,不過沒有區(qū)別 333 運行時錯誤 334 語義錯誤 339 附錄A Unicode 輸入 343 附錄B JuliaBox 345
你還可能感興趣
我要評論
|