1. 程式人生 > >Think Julia:如何像電腦科學家一樣思考(第一節)

Think Julia:如何像電腦科學家一樣思考(第一節)

Think Julia:如何像電腦科學家一樣思考

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

後記

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

前言

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 + 642

值和型別

值是程式使用的基本內容之一,如字母或數字。 到目前為止我們看到的一些值是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 6H2Ø2žž3+=3 62žžžž3+=3+=@Engli 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公里比賽,你的平均速度(每分鐘的時間,以分鐘和秒為單位)是多少?你的平均速度是多少英里每小時?

相關推薦

Think Julia:如何電腦科學家一樣思考(第一)

Think Julia:如何像電腦科學家一樣思考 Ben Lauwens [email protected] Allen Downey [email protected] 後記 版權所有©2018 Allen Downey,Ben

電腦科學家一樣思考Python (第2版)高清PDF電子版下載

本書以培養讀者以電腦科學家一樣的思維方式來理解Python語言程式設計。貫穿全書的主體是如何思考、設計、開發的方法,而具體的程式語言,只是提供了一個具體場景方便介紹的媒介。 全書共21章,詳細介紹Python語言程式設計的方方面面。本書從基本的程式設計概念開始講起,包括語言的語法和語義,而且每個程式設計概念

電腦科學家一樣思考Python》學習筆記

第11章 字典 字典方法dict.get(key,default)和dict.setdefault(key,default)區別:   如果key在字典裡: 如果key不在字典裡: dict.get(k

電腦科學家一樣思考Python》練習4-3

題目:畫出如下的圖形思路:isosceles函式:畫一個等腰三角形。具體步驟如下:主要程式碼如下:import turtle import math bob = turtle.Turtle() bob.delay = 0.001 def isosceles(t, r, ang

電腦科學家一樣思考python

18 繼承(inheritance) 繼承 是面向物件程式設計 的一種語言特性; 它能 通過對現有的某個類稍作修改的方式 定義一個新的類。 現有的類 稱為 父類, 新的類 稱為子類。 之所以被稱為 繼承,是因為 子類 包含有 父類中的方法。 17

電腦科學家一樣思考Python pdf

《像電腦科學家一樣思考python》按照培養讀者像電腦科學家一樣的思維方式的思路來教授python語言程式設計。全書貫穿的主體是如何思考、設計、開發的方法,而具體的程式語言,只是提供一個具體場景方便介紹的媒介。《像電腦科學家一樣思考python》並不是一本介紹語言的書,而是一本介紹程式設計思想的書。和其他

電腦科學家一樣思考Python》——學習筆記1

學習是享受生活的樂趣——吾本 本書結構: 魔教口號!  print("Hello,World!") 資料型別:整型,浮點型和字串,元組…還有什麼呢? 使用自帶函式type()查詢 >>> a=(912,2,3,3,2) >>>

計算機科學家一樣思考Python》pdf

方法 padding add bbb 而且 文件 書籍 數據結構 引導 下載地址:網盤下載 內容簡介 · · · · · ·《像計算機科學家一樣思考python》按照培養讀者像計算機科學家一樣的思維方式的思路來教授python語言編程。全書貫穿的主體是如何思考、設計、開

資料科學家一樣思考:12步指南(上)

介紹 目前,資料科學家正在受到很多關注,因此,有關資料科學的書籍正在激增。我看過很多關於資料科學的書籍,在我看來他們中的大多數

資料科學家一樣思考:12步指南(中)

像資料科學家一樣思考:12步指南(上)《像資料科學家一樣思考》 7-工程產品 下一步是建立統計軟體。如果統計是分析和從

程序員一樣思考】 讀書筆記

尋找 讀書筆記 讀書 bsp 如果 重新 劃分 可能 抽象 通過梳理條件理清思路。 從最強約束條件入手。 如果沒有意識到所有可以采取的動作,很可能無法解決問題。列舉所有可能的操作,測試這些操作的每種組合,知道發現可行方案。 通過簡化問題尋找解決辦法。 通過抽象問題,與以往項

程序員一樣思考】讀書筆記4

concat 其中 同時 arr 產生 new con 例如 程序員 1.如果多個變量同時指向一個內存並且調用Delete刪除了其中任意一個變量,實際上就為所有的變量銷毀了這塊內存。如果沒有明確的把其他這些變量設置為NULL,他們此時就成為了野指針,對野指針調用delete

如何程序員一樣思考——解決問題的經驗

例子 最重要的 roc 現在 開始學習 事情 rod ~~ 更多 如何你對編程感興趣,你可能見過這句話: “Everyone in this country should learn to program a computer, because it teaches you

架構師一樣思考

很多程式設計師經常陷入迷茫,技術發展日新月異,沒有充足的時間精力去學習新技術,每天都疲於產品經理、市場、領導的各種需求的編碼實現,沒有絲毫的成就感。 如果要想有成就感,就需要了解業務,清楚自己做的東西對使用者和公司的價值。馬雲在建立阿里巴巴的時候,就明確了

如何程式設計師一樣思考

如果你對程式設計感興趣,你可能已經見過這句話: “這個國家的每個人,都應該學習程式設計,因為它教會了你思考。” — Steve Jobs 你也可能在尋思,啥叫像程式設計師一樣思考,我如何才能做到? 這篇文章,目的就是教你如何達到這個目標。 其實,核心是

Ansible:系統管理員一樣思考的自動化框架 | Linux 中國

直到我開始接觸 Ansible,我才覺得這才是系統管理員喜歡的東西。-- Shawn Power

產品思維——產品經理一樣思考

話說:不想做產品經理的程式猿不是好廚師,這幾年隨著產品經理這個崗位的火熱,越來越多的程式猿、設計師、專案經理等專業人士轉型去做產品經理。 做專業技術出身的人,往往會養成一種思維習慣,看問題的角度也會形成慣性,我們把這種思維習慣叫做工程師思維。 產品思維是產品經理應該具備

程式設計師一樣思考——提高解決問題的能力

在以前的文章中,曾經提過“技術人員的價值,不在於你能寫出多麼優美的程式碼,也不在於你能設計出一個多麼大而全的高屋建瓴的架構,而在於你實實在在的解決問題的能力,在於你使用技術手段服務於業務的能力”。 最近一段時間,因工作中遇到一些現象,讓我重又想起這句話,並且試圖思考如何來提高解決問題的能力,有沒有一種方法論

一樣思考更好的並行編程

Java 並發編程 高並發 高可用 介紹編寫一個應用程序並行運行很困難,對吧?我的意思是,它一定很難,否則我們會看到各處的並行程序。我們所看到的都是平滑的並行應用程序,可以毫不費力地使用每個可用的核心。相反,多線程應用程序是例外而不是規則。編寫並行程序似乎有兩個主要障礙:學習您選擇的語言提供的

經濟學家一樣思考,讓狡猾女人不再欺負我

策略 還得 fff nbsp 組合 hub 經濟 沒有 align 背叛愛情的人 不配玩我們節款遊戲 槍桿子裏出和平 納什均衡指的是博弈雙方一種穩定的策略組合。 在這種策略組合下,沒有人能夠通過單獨改變策略占到更多便宜,所以這種組合是平衡、穩定的。