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