Think Julia:如何像计算机科学家一样思考(第一节)

Think Julia:如何像计算机科学家一样思考

Ben Lauwens [email protected] Allen Downey [email protected]

后记

版权所有©2018 Allen Downey,Ben Lauwens。版权所有。

Think Julia是根据知识共享署名 - 非商业3.0 Unported许可证提供的。作者在https://benlauwens.github.io/ThinkJulia.jl/latest/book.html上保留了在线版本。


前言


1.计划的方式

本书的目标是教你像计算机科学家一样思考。这种思维方式结合了数学,工程和自然科学的一些最佳特征。与数学家一样,计算机科学家使用形式语言来表达想法(特别是计算)。与工程师一样,他们设计事物,将组件组装到系统中并评估替代方案之间的权衡。与科学家一样,他们观察复杂系统的行为,形成假设和测试预测。

计算机科学家最重要的技能就是解决问题。解决问题意味着能够制定问题,创造性地思考解决方案,并清晰准确地表达解决方案。事实证明,学习编程的过程是练习解决问题技巧的绝佳机会。这就是为什么这一章被称为“程序的方式”。

在一个层面上,您将学习编程,这本身就是一项有用的技能。在另一个层面上,您将使用编程作为达到目的的手段。随着我们的进展,这一目标将变得更加清晰。

什么是程序?

一个程序是一系列指令,指定如何执行计算。计算可能是数学上的,例如求解方程组或找到多项式的根,但它也可以是符号计算,例如搜索和替换文档中的文本或图形化的东西,如处理图像或播放一段录像。

不同语言的细节看起来不同,但几乎每种语言都会出现一些基本说明:

输入
从键盘,文件,网络或其他设备获取数据。

产量
在屏幕上显示数据,将其保存在文件中,通过网络发送等。

数学
执行基本的数学运算,如加法和乘法。

条件执行
检查某些条件并运行相应的代码。

重复
反复执行某些操作,通常会有一些变化。

信不信由你,这几乎就是它的全部。你曾经使用过的每一个程序,无论多么复杂,都是由看起来非常类似的指令组成的。因此,您可以将编程视为将大型复杂任务分解为越来越小的子任务的过程,直到子任务足够简单,可以使用这些基本指令之一执行。

Julia运行

开始使用Julia的挑战之一是您可能需要在计算机上安装Julia及相关软件。如果您熟悉您的操作系统,特别是如果您熟悉命令行界面,那么安装Julia会毫不费力。但对于初学者来说,同时学习系统管理和编程可能会很痛苦。

为避免这个问题,我建议您开始在浏览器中运行Julia。之后,当您对Julia感到满意时,我会建议您在计算机上安装Julia。

在浏览器中,您可以在JuliaBox上运行Julia:https://www.juliabox.com 。无需安装 - 只需将浏览器指向该位置,登录并开始计算即可。

Julia REPL(读取 - 评估 - 打印循环)是一个读取和执行Julia代码的程序。您可以通过在JuliaBox julia上打开终端并在命令行上键入来启动REPL 。当它启动时,您应该看到如下输出:

   _ _ _(_)_ | 文档:https://docs.julialang.org 
  (_)| (_)(_)| 
   _ _ _ | | _ __ _ | 输入“?” 求助, ”]?” 为Pkg提供帮助。
  | | | | | | | / _` | | 
  | | | _ | | | | (_ | | | Version 1.0.0(2018-08-08)
 _ / | \ __'_ | _ | _ | \ __'_ | |官方https://julialang.org/ release 
| __ / | 

julia>

第一行包含有关REPL的信息,因此可能与您有所不同。但是你应该检查版本号是否至少0.7.0。

最后一行是一个提示,指示REPL已准备好输入代码。如果键入一行代码并点击ENTER,REPL将显示结果:

julia> 1 + 1
2

现在你已经准备好开始了。从这里开始,我假设您知道如何启动Julia REPL并运行代码。

第一个程序

传统上,您用新语言编写的第一个程序称为“Hello,World!”,因为它所做的只是显示“Hello,World!”。在朱莉娅,它看起来像这样:

julia> println("Hello, World!")
Hello, World!

这是一个print语句的例子,虽然它实际上并没有在纸上打印任何东西。它在屏幕上显示结果。

程序中的引号标记要显示的文本的开头和结尾; 它们没有出现在结果中。

括号表示这println是一个函数。我们将使用函数中的函数。

算术运算符

在“Hello,World!”之后,下一步是算术。Julia提供运算符,这些运算符是表示加法和乘法等计算的特殊符号。

运算符+,-并*执行加法,减法和乘法,如以下示例所示:

julia> 40 + 2
42
julia> 43 - 1
42
julia> 6 * 7
42

使用执行除法:

julia> 84 / 2
42.0

您可能想知道为什么结果42.0不是42。我将在下一节解释。

最后,运算符^执行取幂; 也就是说,它会增加一个数字:

julia> 6^2 + 6
42

值和类型

值是程序使用的基本内容之一,如字母或数字。 到目前为止我们看到的一些值是2,42.0和“Hello,World!”。

这些值属于不同的类型:2是一个整数,42.0是一个浮点数,”Hello, World!”是一个字符串,所谓的字符串,因为它包含的字母串在一起。

如果您不确定值的类型,REPL可以告诉您:

julia> typeof(2)
Int64
julia> typeof(42.0)
Float64
julia> typeof("Hello, World!")
String

毫不奇怪,整数属于类型Int64,属于字符串String,浮点数属于Float64。

那么像“2”和“42.0”这样的值呢?它们看起来像数字,但它们像字符串一样用引号括起来。

julia> typeof("2")
String
julia> typeof("42.0")
String

他们是字符串。

当您键入一个大整数时,您可能会想要在数字组之间使用逗号,如1,000,000。这不是Julia的合法整数,但它是合法的:

julia> 1,000,000
(1, 0, 0)

那根本不是我们所期望的!Julia将1,000,000解析为逗号分隔的整数序列。稍后我们将进一步了解这种序列。

形式和自然语言

自然语言是人们所说的语言,例如英语,西班牙语和法语。它们不是由人设计的(尽管人们试图对它们施加一些命令); 他们自然而然地进化

形式语言是由人们为特定应用程序设计的语言。例如,数学家使用的符号是一种形式语言,特别擅长表示数字和符号之间的关系。化学家使用形式语言来表示分子的化学结构。最重要的是:

编程语言是用于表达计算的形式语言。

形式语言往往具有严格的语法规则来控制语句的结构。例如,在数学中语句3 + 3 = 63 + = 3 6 H 2 Ø 2 ž ž 3 + = 3 6 2 ž ž ž ž 3 + = 3 + = @ E n g l i h句子,里面有无效的t * kens。这句话所有有效的令牌都有,但结构无效。

当你用英语读句子或用正式语言书写时,你必须弄清楚结构(虽然用自然语言你下意识地这样做)。此过程称为解析。

虽然正式语言和自然语言在共同标记,结构和语法方面具有许多功能,但存在一些差异:

歧义
自然语言充满了模糊性,人们通过使用上下文线索和其他信息来处理这些语言。形式语言几乎或完全是明确的,这意味着任何语句都具有一个含义,无论上下文如何。

冗余
为了弥补歧义并减少误解,自然语言采用了大量冗余。结果,它们通常很冗长。形式语言不那么冗余,更简洁。

文字的
自然语言充满了成语和隐喻。如果我说,“便士掉线”,可能没有便士而且没有任何下降(这个成语意味着有人在经过一段时间的混乱后理解了某些东西)。正式语言正是他们所说的。

因为我们都在说自然语言,所以有时很难适应正式语言。正式和自然语言之间的区别就像诗歌和散文之间的区别,但更多的是:

诗歌
词语用于他们的声音以及他们的意义,整首诗共同创造了一种效果或情感反应。歧义不仅常见,而且经常是故意的。

散文
单词的字面意义更重要,结构更有意义。散文比诗歌更适合分析,但仍然经常含糊不清。

程式
计算机程序的含义是明确的和字面的,并且可以通过对令牌和结构的分析来完全理解。

形式语言比自然语言更密集,因此阅读它们需要更长的时间。此外,结构很重要,因此从上到下,从左到右阅读并不总是最好的。相反,学会解析头脑中的程序,识别令牌并解释结构。最后,细节很重要。拼写和标点符号的小错误,你可以用自然语言来解决,可以在正式语言中产生很大的不同。

调试

程序员犯错误。出于异想天开的原因,编程错误称为错误,跟踪它们的过程称为调试。

编程,尤其是调试,有时会带来强烈的情绪。如果你正在努力解决一个棘手的问题,你可能会感到愤怒,沮丧或尴尬。

有证据表明,人们自然会对计算机作出反应,就好像他们是人一样。当他们运作良好时,我们认为他们是队友,当他们顽固或粗鲁时,我们会像回应粗鲁,顽固的人一样回应他们(里夫斯和纳斯,媒体方程:人们如何看待电脑,电视,和新媒体一样真实的人和地方)。

准备这些反应可能会帮助您处理它们。一种方法是将计算机视为具有某些优势的员工,如速度和精度,以及特殊的弱点,如缺乏同理心和无法掌握大局。

你的工作是成为一名优秀的经理:找到利用优势和减轻弱点的方法。并找到利用自己的情绪来解决问题的方法,而不会让你的反应干扰你有效工作的能力。

学习调试可能令人沮丧,但它是一项有价值的技能,对编程之外的许多活动都很有用。在每章的最后,有一节,像这一节,我的调试建议。我希望他们帮忙!

词汇表

解决问题
制定问题,找到解决方案并表达问题的过程。

REPL
读取另一个程序并执行它的程序。

提示
REPL显示的字符表示它已准备好从用户那里获取输入。

程序
指定计算的指令序列。

打印声明
导致Julia REPL在屏幕上显示值的指令。

操作者
一种特殊符号,表示简单计算,如加法,乘法或字符串连接。


程序操作的数据的基本单位之一,如数字或字符串。

类型
一类价值观。到目前为止我们看到的类型是整数(Int64),浮点数(Float64)和字符串(String)。

整数(integer)
表示整数的类型。

浮点(floating-point)
表示带小数部分的数字的类型。

字符串(string)
表示字符序列的类型。

自然语言
人们所说的任何一种语言都是自然而然地发展起来的。

形式语言
人们为特定目的设计的任何一种语言,例如代表数学思想或计算机程序; 所有编程语言都是正式语言。

代币
程序语法结构的基本元素之一,类似于自然语言中的单词。

结构体
令牌的组合方式。

句法
管理程序结构的规则。

解析
检查程序并分析句法结构。

窃听器
程序中的错误。

调试
查找和纠正错误的过程。

在电脑前阅读本书是个好主意,这样你就可以试试这些例子。

练习1-1
无论何时尝试新功能,都应该尝试犯错误。例如,在“Hello,World!”程序中,如果省略其中一个引号会发生什么?如果你遗漏两者怎么办?如果拼写println错误怎么办?

这种实验可以帮助你记住你所读到的内容; 在编程时它也会有所帮助,因为您可以了解错误消息的含义。现在和有目的地比以后和意外地犯错更好。

在一份印刷声明中,如果省略其中一个括号,或两者都有,会发生什么?

如果您正在尝试打印字符串,如果省略其中一个引号或两者都会发生什么?

您可以使用减号来表示负数-2。如果你在数字前加上加号会怎样?怎么样2++2?

在数学符号中,前导零是可以的,如02。如果你在朱莉娅这样做会发生什么?

如果你有两个没有运算符的值,会发生什么?

练习1-2
启动Julia REPL并将其用作计算器。

在42分42秒内有多少秒?

10公里处有多少英里?提示:一英里有1.61公里。

如果你在42分42秒内跑10公里比赛,你的平均速度(每分钟的时间,以分钟和秒为单位)是多少?你的平均速度是多少英里每小时?

猜你喜欢

转载自blog.csdn.net/m0_37696990/article/details/82710429
今日推荐