书籍作者:[美] 本拉瓦 | ISBN:9787519844493 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:8042 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
l 从基本知识入手,包括语言语法和语义。
l 掌握各个编程概念的明确定义。
l 按照逻辑进度学习值、变量、语句、函数和数据结构。
l 了解如何使用文件和数据库。
l 理解类型、方法和多重分派。
l 使用调试技术修正语法错误、运行时错误和语义错误。
l 通过案例研究探索接口设计和数据结构。
Ben Lauwens是比利时皇家军事学院的一位数学教授。他拥有比利时天主教鲁汶大学和皇家军事学院的工程博士和硕士学位,以及皇家军事学院的学士学位。
Allen B. Downey 是美国欧林工程学院的计算机科学教授。他曾在韦尔斯利学院、科尔比学院和加州大学伯克利分校任教。他获得了加州大学伯克利分校的计算机科学博士学位以及麻省理工学院的硕士和学士学位。
如果你要学习如何编程,Julia是一个绝J佳的即时编译的动态类型语言,并且语法简洁。这本实用指南使用Julia带领你一步一步地学习编程,先从基本的编程概念开始,逐步转向更高级的功能,如创建新类型和多重分派。
Julia的设计初衷是为了满足高性能,所以无论对于数值分析和计算科学,还是对于Web编程和脚本编写,Julia都是一种理想的通用语言。通过每一章的练习,会让你边学边理解各章介绍的编程概念。本书特别适合高中和大学层次的学生,对自学者和需要学习编程基础知识的专业人员也很适用。
为什么选择 Julia?
Julia的以下特点是决定性的因素:
?? Julia是一个高性能编程语言。
?? Julia使用了多重分派,允许程序员选择适合应用的不同编程模式。
?? Julia是一个动态类型语言,可以很容易地交互使用。
?? Julia有一种易于学习的简明的高级语法。
?? Julia是一个可选类型的编程语言,它的(用户自定义)数据类型可以让代码更清晰,也更健壮。
?? Julia 有一个扩展标准库,还有大量可用的第三方包。
前言
2018 年我开始准备一门针对完全没有编程经验的学生的编程课程。我想用Julia,不过我发现市面上没有用Julia 作为第一编程语言来学习编程的书。确实有很多不错的教程解释了Julia 的重要概念,不过没有哪一本书足够重视学习程序员是如何思考的。
Allen Downey 的《Think Python》介绍了学习正确编程的所有重要概念。不过,那本书是基于Python 语言的。我的讲义初稿可算是各种参考书的大杂烩,不过随着准备的时间越长,讲义内容就越像《Think Python》中的章节。我有了一个想法,想把那本书移植到Julia,把我的讲义整理成Julia 版的《Think Python》,这个想法很快付诸实施。
所有材料都可以从一个GitHub 存储库作为Jupyter notebook 获取。我在Julia Discourse 网站上发布了有关这个课程进度的消息后,反馈像潮水般涌来。大家迫切需要用Julia 作为第一编程语言介绍基本编程概念的一本书,显然,这是Julia 世界中缺失的一环。我联系了Allen,询问我能不能正式把《ThinkPython》移植到Julia 写一本书,他的回答很干脆:“加油!”他帮我与他的O’Reilly Media 编辑取得了联系,一年后,这本书终于完成,我对它做了最后的润色。
这条路走来真是有些坎坷。2018 年8 月,Julia v1.0 发布,与所有Julia 程序员一样,我不得不做代码迁移。将源文件转换为O’Reilly 兼容的AsciiDoc 文件时,这本书中的所有例子都经过了测试。工具链和示例代码都必须是Juliav1.0 兼容的。好在8 月份我不需要上课……
希望你喜欢这本书,它不仅能帮助你学习编程,还能教你像计算机科学家那样思考,至少能有那么一点点。
——Ben Lauwens
为什么选择Julia?
Julia 最初由Alan Edelman、Stefan Karpinski、Jeff Bezanson 和Viral Shah 在2012 年发布。这是一个免费且开源的编程语言。
选择编程语言往往很有主观性。对我来说,Julia 的以下特点是决定性的因素:
?? Julia 是一个高性能编程语言。
?? Julia 使用了多重分派,允许程序员选择适合应用的不同编程模式。
?? Julia 是一个动态类型语言,可以很容易地交互使用。
?? Julia 有一种易于学习的简明的高级语法。
?? Julia 是一个可选类型的编程语言,它的(用户自定义)数据类型可以让代码更清晰,也更健壮。
?? Julia 有一个扩展标准库,还有大量可用的第三方包。
Julia 是一种独一无二的编程语言,因为它解决了所谓的“两个语言问题”。
不需要任何其他编程语言,利用Julia 就可以写高性能的代码。不过,并不是说这会自动发生。要由程序员负责优化形成瓶颈的代码,不过只用Julia 本身就可以做到。
本书面向的读者
这本书适合任何想要学习编程的人,无须先前掌握任何编程知识。
我们会循序渐进地介绍新概念,并在后面的章节介绍更高级的主题。
本书可以作为高中或大学一个学期课程的教材。
本书使用约定
以下是本书使用的排版约定:
斜体(Italic)
表示新术语、URL、email 地址、文件名和文件扩展名。
等宽字体(Constant width)
表示程序列表,以及段落内部,用于引用程序元素,如变量或函数名称,数据库、数据类型、环境变量、函数语句和关键字等。
加粗等宽字体(Constant width bold)
表示由用户所输入的命令或其他文本。
斜体等宽字体(Constant width italic)
表示应由用户所提供的实际值或根据上下文所确定的值来替换的文本。
使用代码示例
本书中使用的所有代码都可以从GitHub 上的一个Git 存储库(https://github.com/BenLauwens/ThinkJulia.jl)获取。如果你不熟悉Git,应该知道这是一个版本控制系统,允许你跟踪一个项目里的有关文件。Git 控制下的一个文件集合就称为一个“存储库”。GitHub 是一个托管服务,为Git 存储库提供了存储空间,并提供了一个方便的Web 界面。
现在已经有一个很方便的包,可以直接增加到Julia。只需要在Pkg 模式下在REPL 中键入add https://github.com/BenLauwens/ThinkJulia.jl,参见第4 章“海龟绘图”一节。
运行Julia 代码最容易的方法是访问https://juliabox.com 并启动一个免费会话。
可以使用REPL,另外它还提供了一个notebook 界面。如果想在你的计算机上安装Julia,可以从Julia Computing 免费下载JuliaPro。这包括一个最新的Julia 版本、基于Atom 的Juno 交互式开发环境,以及多个预安装的Julia 包。如果你喜欢研究,可以从https://julialang.org 下载Julia,安装你喜欢的编辑器(例如,Atom 或Visual Studio Code),并启用用于Julia 集成的插件。
如果是本地安装,还可以增加IJulia 包,在你的计算机上运行一个Jupyternotebook。
这本书的目的是帮助你完成工作。一般来讲,你可以在程序和文档中使用这些示例代码,不需要联系我们来得到许可,除非你直接复制了大部分的代码。例如,如果你在编写一个程序,使用了本书中的多段代码,这并不需要得到许可。但是出售或发行O’Reilly 书示例代码光盘则需要得到许可。回答问题时如果引用了这本书的文字和示例代码,这不需要得到许可。但是如果你的产品的文档借用了本书中大量示例代码,则需要得到许可。
我们希望但不严格要求标明引用出处。引用信息通常包括书名、作者、出版商和ISBN。例如,“Think Julia by Ben Lauwens and Allen B. Downey (O’Reilly).Copyright 2019 Allen B. Downey, Ben Lauwens, 978-1-492-04503-8”。
如果你认为你在使用代码示例时超出了合理使用范围或者上述许可范围,可以随时联系我们:[email protected]。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
联系我们
请将关于本书的意见和问题通过以下地址提供给出版商:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
针对这本书,我们还建有一个网页,列出了有关勘误、示例和其他信息。可以通过以下地址访问这个页面:https://oreil.ly/think-julia。
如果对这本书有什么建议,或者要询问技术上的问题,请将电子邮件发送至:[email protected]。
要了解关于我们的图书、课程、会议和新闻的更多信息,请访问我们的网站: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 工具链和语法高亮显示问题。
感谢所有与我共同完成这本书初版的同学们,还有提出修改意见和建议的所有贡献者(如后所列)。
贡献者名单
如果你有建议或修改意见,请发email 至[email protected] 或者在GitHub 上开一个问题。如果我根据你的反馈做了修改,会把你增加到贡献者名单里(除非你要求省略)。
要让我知道你使用的是这本书哪一个版本,哪一种格式。最好至少给出有错误的那个句子的一部分,这样更方便我查找。也可以给出页码和节号,不过这样查找起来可能不那么容易。
非常感谢!
?? Scott Jones 指出Void 改为Nothing,正是在此之后,我开始把这本书迁移到Julia v1.0。
?? Robin Deits 发现了第2 章的一些拼写错误。
?? Mark Schmitz 建议启用语法高亮显示。
?? Zigu Zhao 找出了第8 章的一些bug。
?? Oleg Soloviev 发现了增加ThinkJulia 包的URL 中的一个错误。
?? Aaron Ang 发现了一些渲染和命名问题。
?? Sergey Volkov 发现第7 章中一个已经失效的链接。
?? Sean McAllister 建议应当提到一个非常棒的BenchmarkTools 包。
?? Carlos Bolech 发来一个长长的修改意见和建议列表。
?? Krishna Kumar 修改了第18 章中的Markov 示例。
目录
前言 1
第1 章 程序之路 9
什么是程序? 9
运行Julia 10
第一个程序 12
算术操作符 12
值和类型 13
形式语言和自然语言 14
调试 16
术语表 17
练习 19
第2 章 变量、表达式和语句 21
赋值语句 21
变量名 22
表达式和语句 23
脚本模式 24
操作符优先级 26
字符串操作 27
注释 27
调试 28
术语表 29
练习 31
第3 章 函数 33
函数调用 33
数学函数 34
组合 35
增加新函数 36
定义和使用 37
执行流 38
形参和实参 39
变量和形参是局部变量 41
堆栈图 41
有返回值的函数和Void 函数 43
为什么使用函数? 44
调试 45
术语表 45
练习 47
第4 章 案例研究:界面设计 51
海龟绘图 51
简单重复 53
练习 54
封装 56
泛化 57
接口设计 58
重构 59
开发计划 61
Docstring 61
调试 62
术语表 63
练习 64
第5 章 条件和递归 67
向下取整除和求模 67
布尔表达式 68
逻辑操作符 69
条件执行 69
选择执行 70
串链条件 71
嵌套条件 71
递归 73
递归函数的堆栈图 74
无限递归 75
键盘输入 76
调试 77
术语表 78
练习 80
第6 章 有返回值的函数 85
返回值 85
增量式开发 87
组合 90
布尔函数 91
更多递归 92
信仰飞跃 95
另一个例子 96
检查类型 96
调试 98
术语表 99
练习 100
第7 章 迭代 103
重新赋值 103
更新变量 105
while 语句 105
break 107
continue 108
平方根 109
算法 111
调试 111
术语表 112
练习 113
第8 章 字符串 117
字符 117
字符串是一个序列 118
length 119
遍历 120
字符串分片 121
字符串是不可变的 122
字符串插值 123
查找 124
循环和计数 124
字符串库 125
∈操作符 126
字符串比较 127
调试 127
术语表 129
练习 131
第9 章 案例研究:单词游戏 135
读取单词列表 135
查找 138
利用索引循环 140
调试 142
术语表 143
练习 143
第10 章 数组 147
数组是一个序列 147
数组是可变的 148
遍历数组 150
数组分片 151
数组库 152
映射、过滤器和归约 153
点语法 155
删除(插入)元素 155
数组和字符串 157
对象和值 158
别名 159
数组参数 161
调试 163
术语表 165
练习 167
第11 章 字典 171
字典是一个映射 171
字典作为计数器集合 174
循环和字典 175
反向查找 176
字典和数组 178
备忘录 179
全局变量 181
调试 184
术语表 185
练习 187
第12 章 元组 191
元组是不可变的 191
元组赋值 193
元组作为返回值 194
变长参数元组 195
数组和元组 196
字典和元组 199
序列的序列 201
调试 202
术语表 202
练习 203
第13 章 案例研究:数据结构选择 207
词频分析 207
随机数 208
单词直方图 210
最常用的单词 211
可选参数 212
字典差 213
随机单词 214
马尔科夫分析 215
数据结构 218
调试 219
术语表 221
练习 222
第14 章 文件 225
持久存储 225
读和写 226
格式化 227
文件名和路径 227
捕获异常 229
数据库 230
串行化 232
命令对象 233
模块 234
调试 236
术语表 237
练习 238
第15 章 Struct 和对象 241
组合类型 241
Struct 是不可变的 243
可变的Struct 243
矩形 244
实例作为参数 245
实例作为返回值 247
拷贝 248
调试 249
术语表 250
练习 251
第16 章 Struct 和函数 253
时间 253
纯函数 254
修改函数 256
原型与规划 257
调试 259
术语表 260
练习 261
第17 章 多重分派 263
类型声明 263
方法 264
另外一些例子 266
构造函数 267
show 269
操作符重载 269
多重分派 270
泛型编程 271
接口和实现 273
调试 274
术语表 274
练习 276
第18 章 子类型 277
扑克牌 277
全局变量 279
比较扑克牌 279
单元测试 280
一副牌 281
增加、删除、洗牌和排序 282
抽象类型和子类型 283
抽象类型和函数 285
类型图 286
调试 288
数据封装 289
术语表 291
练习 292
第19 章 精选:语法 297
命名元组 297
函数 298
匿名函数 298
关键字参数 299
闭包 300
块 300
控制流 302
类型 304
方法 306
构造函数 307
转换和提升 308
元编程 309
缺失值 311
调用C 和Fortran 代码 312
术语表 313
第20 章 精选:Base 和标准库 317
测量性能 318
集合和数据结构 318
数学 321
字符串 321
数组 323
接口 324
交互工具 326
调试 328
术语表 329
第21 章 调试 331
语法错误 332
我一直在改,不过没有区别 333
运行时错误 334
语义错误 339
附录A Unicode 输入 343
附录B JuliaBox 345