[音樂] 這是哈佛CS50-- 大學介紹 到智能 計算機科學的企業 和藝術節目。 我的名字是大衛·馬蘭和 我只是在想今天上午, 它已經令人驚訝的今天20年 自從我上次坐的地方你們現在要做的。 那是1996年。 我是一個大二了,我正在 CS50的第一次。 而我什至沒有得到鼓起勇氣 把它自己大一的時候, 部分原因是時間。 計算機科學給我 是那種喜歡,MEH。 我是一個有點怪胎成長 ,但我真的不 有任何知識產權 在什麼似乎興趣 僅僅是一大堆 編程的人所有的時間。 而且我很害怕是誠實的。 本課程和計算機科學更多 通常具有和在一定程度上 還有一個領域的這種聲譽 當心,如果僅僅是因為我們許多人 不熟悉它並不能確定它。 它真的直到我逛過 這個類大二fall-- 即使這樣,我只招收 因為professor-- 我的第一個導師之一,布賴恩 Kernighan的現在Princeton-- 讓我走班通失敗。 事實上,這就是為什麼 今天我們允許和鼓勵 學生參加此類SAT /不飽和度。 也只有這樣,由 學期結束 我才意識到一樣,哇,這 沒有這樣一個陌生的領域。 實際上,這是一個 非常賦權領域, 而更令人興奮, 特別是後來, 因為我把課程 話劇藝術101和拉丁 然後最終 研究生院考古學, 我才真正開始看 此領域中,計算機的交點 科學與人文科學, 自然科學,藝術,醫藥, 和類似物。 所以這就是只是這麼 整齊的有關計算機科學 最終,因為我們希望您 see--是它的適用性 這些等領域,以及如何 採取一些今天和本學期的的 理念和實用技巧 回到你自己的域名, 實際上探討此交匯 的文科和理科。 因此,73%的你,如果最後 今年是任何跡象顯示, 以前從未採取了CS課程。 所以,如果像我一樣,你是 有點感覺了 害怕,或者坦白地說你不 知道為什麼你甚至在這裡。 也許你只是跟著一些 在桑德斯的朋友現在。 這是完全正常。 這裡的目標是勾 你和向你保證 如果你看 左邊和右邊, 你會看到有同學 很少或盡可能多的經驗 你自己可能有。 事實上,我們將分享 今天有人統計後 至於什麼樣的人口統計 類典型的模樣。 而作為補充reassurance--這個我們 做意味著自從我接手課程 幾年ago--在 課程的教學大綱 是this--什麼最終 在這個過程中的問題 與其說你在哪裡結束 達相對於你的同學, 但如果你在11個星期的結束 學期結束了相對於自己 0週,這是 在這裡我們今天在這裡。 而這也正是我意識到 所有這些年前。 我知道很多 班說,但它的 在計算機科學中尤其如此。 在一天結束時,此字段 是陌生的,因為它是我的 並可能對你,實在是 只是解決問題。 正因為如此,它確實有這 適用於獲取等領域。 而事實上,如果我們試圖 蒸餾這意味著什麼, 這是解決問題 在本質上,我敢說。 有input--所以無論它 是,你試圖解決的問題。 有輸出,這是希望 解決這個問題。 然後,當我們將 說,在計算機科學, 有這個黑盒子的 中間的那個你不一定 要關心它是如何工作的。 你自己可能最終 實現那是什麼盒子裡。 但對於今天的目的且更加 一般在生活中,你所關心 的是,這些問題得到解決。 而這是什麼課程 最終的就是探索 的交點 這些輸入和輸出, 這些所謂的 算法,我們很快就會看到, 實現什麼 底下還有,油煙機。 但這些投入和這些outputs-- 這是什麼實際上意味著? 那麼,在這一天結束時,我們需要 表示信息的一些方法。 這是在一個計算機尤其如此, 其中花哨和複雜,因為它 似乎,是一個非常愚蠢的設備。 這需要electricity--無論從 電纜或電池作為input-- 然後它產生一些 在屏幕上preprogramed響應。 但是,我們如何從中獲取 開始到結束嗎? 那麼,什麼是一個亟待解決的問題? 好吧,也許我們可能在 任何學期的開始, 嘗試點名 在一個房間裡是這樣的。 所以,我可能會做這樣一,二,三名。 或者,也許,如果我做到了 要排序的追踪 myself--的跟踪things-- 我可能很快用完手指。 所以,我可能只是做散marks-- 1 人,二,三,四,五,六, 七,八。 而我們每個人都有可能 做到了這一點,無論是在你的手中 或在一張紙上。 而這其實只是 所謂一元notation-- 在這裡,如果你只有一個字母 在字母表中,一個或哈希 標記在這種情況下,對於每一個 要計數輸入, 你需要放下其中之一 letters--這些標誌之一。 好吧。 這是所有罰款和好, 不是所有的複雜。 但電腦是不是全部 該更複雜。 事實上,大多數人可能 知道即使你不是真的 認為這是什麼意思,那 電腦只懂得零 和ones--的所謂的二元系統。 我們人類,相反,是這樣 更為複雜的範圍內 據我們了解,通過花枝招展零。 但即使是二進制文件,首先 一眼望去,不是所有的熟悉, 事實證明,這就像系統 和想法,我們已經知道了。 因此,例如,考慮一下。 這僅僅是一個碼元的序列。 和所有的你,當 看了一眼它,大概 想123--什麼 真的很有趣那裡。 但為什麼這個數字,123? 這些只是對字形 在screen--只是模式 有人可能會得出或打字。 但是,如果你像我一樣,你 大概從小學記憶 有幾分 這裡列或場所。 還有的人的地點和 十位和百位。 其原因,這是123和 不只是三個符號的格局 是因為,當然,如果我們 有數以百計的地方之一, 你做100次一個數學, 然後兩人在十位。 所以這是10次2,然後在三個 在一個人的地方,這是1次3。 而當你添加所有這些起來, 當然,你會得到100加20加3。 所以我們開始時只有一個模式 的symbols--的alphabet-- 但後​​來我們被映射到意義 它通過這些列的方式。 那麼,事實證明, 電腦是真的不 從你我所有的不同。 但是,而不是使用的10次冪, 所以speak-- 1,10,100,1000, 萬到位等 forth--他們實際上 只是使用的權力2-- 所以一,二,四,然後 如果我們把更多的數字,8,16, 32,64,128,等等。 所以這是怎樣一個計算機 將代表數字0, 就像我們人類。 0,0,0--你可能猜到 什麼零和一的格局, 如果一台計算機只能 說話0或1--什麼 模式將代表 數我們人類所知道的1? Yeah-- 0,0,1。 好吧。 所以,0,0,1是我們如何代表 1,所以你可能會再傾斜 代表數字2,如果你有 四的地方,這兩個的地方 作為一個地方,你可能會說,好吧, 如果我們在自己的地方有一個1, 現在我們要 數到2,你可能 做到這一點,留給這是一個零。 但當然這不是如何 十進制系統的工作原理無論是。 如果你把一個數字 這兩個欄目, 你必須做算術。 那麼什麼號碼我做 意外只是代表什麼? 所以這是3,因為2次1加1 次1,當然,給了我們三種。 所以,這將是兩個。 位排序的翻轉,可以這麼說,為0 成為一個,很像一個9角色過 當你攜帶1變成0。 然後,這將是三道的。 Four--另一個有趣的事情 發生,其中的那些翻轉 你隨身攜帶的1,可以這麼說。 因此,這當然,為4。 但是,如果你快進了, 這是怎麼回事的最大數量 是計算機能夠代表什麼呢? 所以它只是在這種情況下七,對不對? 因為你必須在四一, 一個在這兩個,一個在所述一個。 所以這是4加2加1。 所以,讓你七。 事實上,它會 乍一看 計算機能夠算 不高於此。 但是,這當然是不正確的。 什麼是我們人類做的時候,我們希望 算不是像999高? 只需攜帶一個公正 加的第四位到左側。 所以,我們確實可以。 我們可以有一個八的 放置和第16的位置, 和32的地方,64 128--你 可以只保留事情到無窮。 因此,這些零和ones-- 的所謂的二元系統 - 什麼是計算機科學家會 一般叫了一下,還是二進制數字。 但是現在,我們如何從一開始 概念或這些東西的圖形 一個實際的計算機? 我們似乎在這裡跳過了一步。 那麼,在最後唯一的輸入 一天,我的筆記本電腦在這裡 是電的這種流動。 即使它是一個漫長的 既然你想過時間 或者從來沒有想過 電力是如何工作的, 有一個在流動的電子或 出來,這是我的一種投入。 所以,如果這一切,我們是 讓作為輸入這裡, 我們可以做什麼用這些信息? 好了,我們可能會認為一個零的 只是一個沒有電。 沒有什麼是flowinw,沒有什麼是 動,什麼也沒有發生。 這只是默認state--為零。 但是,如果有電流淌,為什麼 不要我們只是隨意,但全球範圍內 始終,把那個叫之一。 所以,簡單地通過無電, 我們有一個零,是電力, 我們有一個one--沒有權力,是權力。 並以這種方式,使用的東西 多個物理或電子 我們開始實施的這個概念 東西要么是1或0。 事實上,我們可以做它在這裡。 所以在這裡,我不是三個,但 八塊光燈泡,其每一個 有它自己的交換機。 所以,如果我想代表 七位數這裡, 我可能會打開這三個燈泡。 事實上,裡面的 我的電腦是數以百萬計, 數十億的東西,只是 小於,稱為晶體管, 開關,你只需打開和關閉。 所以這些都是big--比較 我laptop--內big--開關 有很多,很多,很多, 更多的交換機。 但他們做的是完全that-- 打開一些東西,把東西掉。 正因為如此,一個計算機可以代表 與百萬或數十億 晶體管,地段和 大量的零和一。 而且還有其他的硬件仍然是 讓您存儲信息長期, 所以,當你拉 插,你不會失去它。 但是,這是另一天的故事。 那麼,我們可以用這些位? 也許我們只是拿 壓過的我 - 可能有人要來 在這裡,並提供了一個演示? 我第一次看到這個手。 你叫什麼名字? MADAY:Maday。 DAVID MALAN:Maday,上來吧。 很高興見到你。 MADAY:很高興見到你。 DAVID MALAN:這邊走。 我不會有嘴唇你。 好吧。 所以在這裡,我們有,notice--之一,two-- 我們將編輯out--一,二,四, 八,16,32,64,128。 這是經過深思熟慮的。 有八位這裡 - 二進制digits--零和一。 和一點是measure--一個有用的單位 不是有用的測量單位 到自身。 通常你至少需要 這些東西八,又名 一個字節。 所以我們這裡有位字節。 因此,如果我們想與你來挑戰, 例如,拼寫出,在二進制 這個值這裡 - 42。 要採取的一個刺? MADAY:[聽不清]。 DAVID MALAN:是的,只需輕輕一按 白色的小開關在前面。 而你要拼 出42,和待價而沽 這是CS50壓力 球,如果你得到這個。 好吧。 所以,你有32個。 我們將需要42。 所以這是一個八,所以這是40。 而excellent--非常好做。 謝謝。 [掌聲] 好吧。 因此,我們又多了一個壓力球。 我們如果我們可以的做一次。 另外一個志願者? 無壓力球,無壓力球。 好。 在這裡在中間, 你想下來? 好吧。 我知道。 在那裡,我們走了。 因此,數字這裡 - 下來吧。 你叫什麼名字? DAVEY:戴維。 DAVID MALAN:戴維。 好。 上來吧,戴維。 很高興見到你。 而我們要去有你 spell--如果你能留在那裡 只是一個moment--是數字50。 但是,但是,但是卻,但是,這些都是 小學磁鐵的一個原因。 只是有點困難,沒事吧? 目前仍然八強。 好吧。 那麼,我們有嗎? 我們有32個。 尼斯。 32加16給我們48--如此接近。 與精彩。 恭喜戴維為好。 [掌聲] 好吧。 因此,我們可以長期做這一切的一天, 它沒有得到所有的東西更多 有趣和更具挑戰性。 但是,這真的是point-- 是怎麼比較簡單 它是,在一天結束時,什麼 計算機確實存儲信息, 存儲投入和最終 存儲或代表那些輸出。 但僅靠數字不 那麼有趣。 所以人類,若干年前, 決定了,你知道嗎? 這將是很好的,如果 電腦不只是 計算器算術 操作,但實際上可能 做的事情,如文字處理,或 電子郵件,或更現代的化身 這些種類的技術。 這樣一來,世界決定 隨意,但普遍, 如果你想存儲的資本 在計算機字母A,你知道嗎? 就讓我們都同意存儲 零和ones--的一些模式 bits--最終 代表十進制數65。 我們只都同意這一點。 66將代表B, 67將代表C, 這裡面的的其他模式串 零和一,或底層號碼 這將是 其他字母依然。 所以,如果你有種精神 這個吸收了一會兒, 我特意提出了一個通過 我,其中H 72,我是73。 如果計算機然後,在的情況下 字處理程序或電子郵件, 引擎蓋下顯露有 bits--模式這些模式 代表位 72,然後73,然後33-- 什麼可能這個咒語在該程序? 所以喜,然後什麼。 我們不一定知道,但確確實實 33--沒有在圖表上先前已經 只是一個感嘆號。 所以72是H,73是我,發生了33 是一個感嘆號依然。 但是,這一切優秀和良好, 而事實上現今,而不是 只需用七八 位,這要感謝的東西 所謂的Unicode相 為ASCII早在一天, 我們實際上可以代表更 有趣的角色不僅僅是 這些原始英文字母偏頗。 但是,我們也可以代表甚至 整潔的東西喜歡的顏色。 如果你曾經聽過的縮寫 RGB,紅,綠,藍,這 只是意味著一台電腦 通常使用三套bits-- 某些數目的位表示 一個號碼,你要多少紅, 另一組的比特為 多少綠色的你想要的, 而另一組數字 多少藍你想要的。 因此,一個大的數字意味著大量的 紅,數量少意味著沒有紅。 所以這些都是種 這裡的中間值。 所以給我一些紅色的,給我一些 綠色,給我的藍一點點。 如果你混合這三個色調 顏色一起的,在這種情況下, 你得到這個黑暗的樹蔭 黃色或棕色。 但是八個這種模式加 八加eight--所以24 bits-- 從左到右,是如何在計算機 將代表特定的顏色。 現在,這只是一個屏幕上的一個點。 如果你看起來真的收於電視的 計算機,你會看到點或像素。 如果你有一整個網格 像素,水平和垂直方向, 你有圖像。 然後,如果你拿 一個圖像,然後洗 展示自己的另一個形象,另一 圖像,另一個圖像,另一個圖像, 真快,你當然得電影。 因此注意到我們開始的地方。 我們開始與這些零和一。 我們從那裡工作為十進制 數字,我們如何代表他們。 現在我們有英文字母。 但在其他情況下等待,我們可以使用 幾個比特和表示顏色。 只要你有 表示顏色的能力, 你有代表的能力 圖片和GIF動畫 及其他這樣的字符在屏幕上。 而當你有一大堆的 圖像飛被人一次, 它看起來像電影, 所以你得到的視頻也是如此。 因此,使用這些非常 簡單的基本難道我們 有代表的方式 最終,這些媒體形式的所有。 而我們又抽象 一次又一次,直到我們 從最低水平得到 這個最高水平。 所以這給了我們這個 抽象的總體思路。 但是,我們從這裡開始。 在這裡,現在,我們不妨 表示在一個計算機 我們與零和的投入, 我們在零和一輸出, 但所發生的盒子裡面? 這就是計算機 科學變得有趣。 這就是你真正把你 自己的心來承擔解決問題。 現在,我們可以規定,對於 本學期剩下的,是的。 我知道如何二進制的作品。 我記得ASCII或Unicode-- 映射到letters--作品。 它肯定代表 有理由相信,我們 可能代表紅色和綠色和 藍,和代表多媒體為好。 但是,這是有趣的東西。 這是什麼使一個人 能夠解決的問題。 和一個這樣的問題 我們喜歡做的事,事實上, 正在出席,或 算法這樣做。 再次,我可能做到這一點。 我可以做一,二,三,四 五,六,七,八九歲。 我可以把它寫 下降到跟踪它。 但是,這只是我如何會 表示的信息。 或者我能做到這一點faster--二,四, 六,八,十,12,14,16,18,20, 22--感覺兩倍 以最快的速度,但它仍然是 要採取一個整體大量的時間。 但事實證明,如果我們還充分利用 另一個resource--確實電腦 這些日子有多個CPU或大腦。 原來電腦可以 同時做很多事情, 而事實上,我們在這個房間裡, 可能代表正是這一點。 所以這是一個小社會 尷尬,但如果你願意我的幽默 只是一個三步驟的過程,讓 我的地方請大家那裡只是 站起來一會兒。 站起來。 所以想給自己,數 one--所以大家在這個房間裡, 但誰沒有人 成人之美,都在思考一個數字。 所以這是你的號碼現在。 這是第一步驟,或作為 計算機科學家或程序員 通常會做的,我們要去 要從零開始計數。 如果最小的數,我們可以 這些燈泡代表 為零,只需讓他們 所有的時候,我還不如乾脆 從開始計數 零是而不是一個。 所以這就是 計算機科學家做的。 所以零一步,站起來 想到頭號。 下一步驟是this--對 了與有人站在 並添加您的數字加在一起。 精彩。 因此,在這個時刻, 從字面上大家參與 正在考慮2號,除了 一個奇怪的人,如果我們有 奇數的人在房間裡。 現在這裡的第三步驟是要 是你this--應該坐下。 其中一個,你應該坐下來, 如果你仍然屹立不倒, 回到步驟之一。 好吧。 好吧。 因此,越來越多的人 應該坐下。 注意,這已引起 一個loop--某種循環。 你們有些人應該是笨拙卡住, 來回第一步之間 和二,一和二,一和二。 沒關係。 我們的第一個錯誤。 我們會處理這一點。 好吧。 讓我嘗試以刺激順水推舟。 理論上,只有一個人站在 大家都繼續交配。 但讓​​我加快速度 隨著人們仍然屹立不倒。 你在想什麼號碼? 46。 好。 來吧,坐下。 你們仍然站立。 誰在還站著? 你在想什麼號碼? 好。 因此,我們會回來給你。 在後面? 那是什麼? 22。 確定別人了top--是嗎? 34。 好。 在這裡我right--在這裡? 132,非常漂亮。 22? 好。 又是誰的還站著? 在這裡? 46,很不錯。 72。 我再也不能拖延。 是嗎? 30,美觀大方。 在這裡? 23? 23。 我認為這是每個人 除了你們,沒有壓力。 等一下。 28? 只是八強。 好。 只是八強。 到這裡? 30。 23。 24。 18。 這是最壞的實施 這個算法永遠。 好。 所以其他人? 還有誰? 好。 多一個。 16? 好。 16。 好吧。 所以,如果我沒有錯過任何人 這裡的眩光,當我敲回車, 我們將看到,算法的 總人數的桑德斯中。 因為再次,它好像每個人都 當你坐下來,通過你的號碼了 給別人,給別人, 給別人,因此,在理論上, 最終,只有一個尷尬 人要罰站。 但是,這很好。 我們手動加快東西。 這是特別難得一見 在這個特殊的空間。 和人的總數 我們認為這裡有546是。 總數有人遞給我 通過教學研究員, 誰做舊 學校緩慢的方式,是820。 [笑] [掌聲] 沒關係。 所以那麼肯定,有這些錯誤。 這很好。 等回想起這 在第一時間的東西 你寫的不一定工作。 這發生在我這裡。 但是,讓我們現在考慮我們如何 應用此相同的想法的東西 你可能已經見過的,這 這是老派技術這裡 - 一個真正的大電話簿。 並假設該電話簿 有1000頁和1000名 和數字字母順序在它的內部。 嗯,我們可以種應用相似 主意,這個非常實際的問題, 只是在利用我。 我只是有種被騙 通過利用大家 有很多很多不同的CPU 或大腦執行某種算法。 但是,如果它只是小 以前的我,我還是可以 利用一個想法相同的本質 分治的問題 一遍又一遍,這樣你一半, 一半的你,你一半,你一半, 理論上保持坐下, 直到我們被留下,理論上 只有一個人。 因此,在這個老同學 技術 - 我們不 需要這個map--這 老派的技術, 我們可能會開始找人 喜歡邁克·史密斯,一次一個頁面。 而我看​​到沒有,邁克不在這裡。 我仍然在A部分。 最後,我發現 自己在B部分。 這是一種算法 - 一步一步的指示。 從頭開始,一個頁面 在一個時間,找邁克·史密斯。 這是correct--這 算法或方法? 是的,這是正確的。 如果麥克在這裡,最終 我會得到他。 但它的效率不高。 這顯然很慢。 因此,我可以利用 同樣twosies接近。 我能做到幾分二, 四,六,八,十,十二。 它的快兩倍。 我會去麥克 如果他有速度更快。 這是對的嗎? 是的,但我聽到了little--沒有。 現在,我聽到了沒有。 是啊。 還有一個潛在的錯誤。 也許只是邁克不慎 夾在兩頁之間, 因為我飛過 這兩個位於一個時間。 所以,至少我們需要一些 這種條件修復。 我需要說,哎, 如果我打的人 名字為T,而不是一個S開始, 我更好的雙回至少一個頁面。 因此,車在第一,但可以解決的。 但是沒有人會去尋找 邁克·史密斯通過1000頁的電話 同時預訂一頁。 什麼是正常的人怎麼辦呢? 你會去到S的, 如果你知道S其中的。 你可以粗略地去中間 或接近尾聲略傾斜。 而我在這裡往下看, 我在M部分。 但是你怎麼知道 這個問題現在, 我們並不一定知道前 與我們所有的人只是計算自己 等效? 那麼,邁克顯然將 要在這一半的書 如果他在這裡,因為在所有它的排序。 所以你可以很dramatically-- [喘氣] 我知道。 [掌聲] 它實際上是很容易的,如果 你做下來脊椎那裡。 但是你可以再扔 問題的一半的路程。 現在,我留下了相同的problem-- 找到邁克·史密斯在接受電話book-- 但現在的電話簿在m啟動 並進入Z,但它的一半大。 但是,這是何等的令人印象深刻。 就像在理論上,你們這些傢伙,當 大家坐下來只有一半的時間, 這個問題得到了一半大, 一半大,一遍又一遍。 所以有這個問題成為了 同樣的問題,但一半大。 現在,這是一個250頁的問題。 當我意識到,哦,我 在T節意外。 太遠了,我走了。 我可以拋出一半 的電話本了。 現在,我到一個 問題的四分之一。 而且可以重複,重複, 重複,直到,在理論上,你 只剩下一個頁面。 如果邁克是在該網頁上, 我現在可以解決這個問題。 但如何迅速沒我解決呢? 在第一種情況下,花了我喜歡 也許1000步找到邁克·史密斯。 它可能採取我 - 我拿起電話本 於是我開始尋找 一個頁面的時間, 和邁克可能是1000頁之後。 第二條本辦法也許 花了我500步, 因為我飛 通過兩個一次。 而第三種方法雖然, 這是特別強大。 但是,讓我們考慮一下我們實際 做這種第三種方法。 我要什麼,我會打電話給這些剛 陳述在這裡,一次一個。 拿起電話簿。 打開到電話簿的中間。 看名字。 然後,事情變得有點 更有趣的智力, 如果仍然簡單。 如果史密斯是其中 即當前頁面上的名字, 然後做一些有條件。 這就像在一個岔路口。 呼叫邁克。 如果邁克是名中 在該網頁上,叫麥克。 但只能做四線如果線 樹,如果你願意,是真實的。 在回答這個問題是肯定的。 否則,如果史密斯早在book-- 換句話說,如果我在M節 我期待有人來 左邊,那麼我應該怎麼辦 是非常類似的東西。 然後,我應該開到中間 的書的左半部。 於是往左走,然後 回到第二步。 看名字在那裡。 因此,換句話說,做同樣的事情, 但是,一個問題一個已經減半。 你知道還有什麼? 如果史密斯後來在書 基於我期待在頁面上, 開放的中間 書的右半 然後再回去 步驟二,else-- 這裡有一個第四種可能性。 邁克的這裡或向左 或向右或不存在。 在這裡,我們更好地考慮這一點。 而事實上,如果你曾經 您的計算機崩潰只是你, 即有時但不總是,在 只是人類程序員的結果不 實現哦拍,有 其實這第四個場景。 如果你不寫代碼 處理這種情況, 有時候你不知道 哪些電腦可以做。 事實上一個程序可能會崩潰。 但是,在這種情況下,我想 這件事,和我說,別的不干了, 因為這是第四 邏輯可能的情況。 現在,讓我們只需添加 一些詞彙,所以我們 可以開始折騰圍繞該條款 在其他方面非常直觀。 所有的事情我已經只是 以黃色突出顯示在這裡, 我只是要去 函數或過程。 他們只是一種行動。 所以回暖,開放的,看 在,打電話,開,開, quit--這些都只是行動,否則我們將 叫他們更正式,功能。 同時,現在在黃, 我強調的東西 that--就讓我們開始打電話 這些條件或分支機構。 這些點決定在哪裡 你可能會走這條路,這樣一來, 或一些其它方向仍。 因此,那些會的條件。 而現在這個有點票友。 讓我們把這些問題 布爾表達式, 有人用姓布爾之後。 和布爾表達式 只是事 這是真或假,是或否。 因此,它的回答你的問題 關心,以便在條件 使decision--得到一個答案, 然後去左或右,或東西 否則乾脆。 然後最後,這些 線這裡 - 回去 步驟二,回去 步驟two--我們可以 實現這個想法的方式不同。 然後,那些有 編程經驗,可能會做 或者可以想像不同的這樣做。 但是今天的目的,這是 只是重要的想法。 這是什麼誘發 我們一般會打電話 一個loop--某種週期的,因為 它使我再做些什麼。 所以,現在,我們只考慮 怎麼好這種算法。 這是正確的。 如果麥克在書中,這是一個 這四個連連scenarios-- 又一次,我們會找到他的。 但是,它有多好? 好了,我們沒有 太正式在這裡。 但是,我們剛剛繪製 東西,x和y,以獲得 這個問題的形狀感。 在x軸這裡是 我的問題的規模。 他們y軸位置 將要解決的時間。 因此,也許這就是頁數。 也許這是秒 turns--任何網頁。 然而,你要算的 這是什麼畫面將代表。 而這第一個算法,我要去 描述只是一個直線。 如果有n個網頁 電話簿,然後將其 可能要花費許多 作為n步找邁克。 如果Verizon公司或電話公司 增加了一個更多的頁面,明年 它可能需要我多step-- 時間一個單位找邁克。 所以這是僅此一比一的比例。 這是一個直線的斜率。 與此同時,第二 算法 - 如果我 在時間 - 2去二, 四,六,八,或double-- 通過網頁去兩次 在一個時間,每次兩個, 它仍然是直線。 現在有一到兩 比,但只是有點低。 所以,如果有這麼多的網頁 在此圖中黃色, 這可能需要我這個 許多步驟或秒, 否則它會帶我 兩倍的紅線。 但是,綠線是真正的外賣。 這是我們一般什麼 調用logorithm--日誌 的n,其中n是頁數。 但它是重要的形狀 今天,因為我們沒有 別想繪製點。 想想一個極端的情況。 假設Verizon公司明天的雙打 在該電話本的頁數, 從1000至2000。 在第一算法,我 可能會浪費額外的1000 步驟尋找邁克,只是因為 Verizon的一倍書的大小。 算法 - 這第二個可能 帶我一個額外的500步。 1000多頁,我走兩頭在 時間 - 500多個步驟,找到邁克。 但是,第三算法 是種神奇。 Verizon的雙打數量 從1000至2000頁, 但究竟有多少更多的步驟做 它帶我去找邁克? 這只是一個,因為我可以 撕電話簿一次 從2000頁問題一 1000頁的問題,瞧。 我已經採取了大規模的咬出來。 如果你去非常極端的, 假設該電話簿 公司有什麼樣的瘋狂 4十億頁電話簿。 那麼它多少步可能需要 找到邁克·史密斯在4十億 頁電話簿? 這是一個大數目,但只有4十億到 2十億至1十億至500億美元, 250 million--仍 聽起來像大的數字, 但我很快 得到一個較小值。 而事實上,如果我做數學題 好吧,我只能分4個十億 前了大約32倍 我踏踏實實地只有一個。 因此,如果這電話簿分別為4 十億頁長,沒什麼大不了的。 在幾秒鐘內,也許32 秒,我可以一分為它 並最終找到麥克或 斷定他不在那裡。 這就是一個企業的本質 算法 - 一個好的算法。 這就是之一 像這樣一類的目標, 正在試圖找出我怎麼 只是正確地解決問題沒有, 就像我一直都知道怎麼做這件事 在時間 - 頁面,但正確和幸福。 如何設計好 解決問題的辦法? 因此,讓我們花點時間在這裡 現在給你一個感覺 CS50的過程itself--介紹 幾場的工作人員。 就在二點之前,我們將 短暫休息 使那些您 誰是購物能 逃避並採取 看一些其他類 看著這個網絡的其餘部分。 但現在,讓我來介紹 CS50,類本身, 特別是什麼新鮮事。 因此,在過去的春天,我們 花了相當多的時間 - 課程的工作人員和我 - 思考 它是什麼,我們希望CS50是, 和重返第一 的原則,可以這麼說, 要考慮什麼是我們想要的 本課程的樣子,並 像它的學生。 所以你會看到問題 設置零為好,邀請 看看那個 URL其中概述 一些背後的動機 以下2016年秋季的特點。 所以,你可能已經收集 從TL:DR講義, 今天的課程,以及從 課程目錄,今年CS50, 你只是將出席 today--這樣的工作做好done-- 並在11月21日最後一次演講。 而你是受歡迎的,但預計不會 參加這些講座在中間, 因為我們在做什麼 今年,正在拍攝 在實時過程中的材料。 所以一切都將保持 當前和合併 作為最好的,我們can--時事 和交談的人可能 在工業上具有在 世界,但使該材料 可用的,作為結果,即使先前已經 完整的全文成績單 和檢索性 其他資源的鏈接。 事實上,我們已經 聲稱了一段時間 而我們現在相信這一點, 我們可以創建,數字化, 更逼真,更引人注目 教育經驗,而不是 到這裡聚會大約23倍 在人,聽見有人喜歡我 簡單談談計算機科學, 相對於卡合更積極。 所以,你在使用過程中的教學大綱看 本學期的草圖在這裡, 隨著當宣講會 被拍攝下來,到你 歡迎,但預計不會, 當他們將 在球場上的網站上公佈。 而我們會在這裡做 週三下週開始, 很多更緊密,只有 誰不想參加那些人, 是所謂的穿行, 在那裡我和課程的頭 實際上讓事情 一點更貼心 到這裡的樂隊 節中,仍然有一些技術 並通過走 本週的習題集, 並為您提供particularly--如果中間 那些少comfortable--更加 您可能要指導或 需要一周的挑戰。 同樣,對於那些誰不能 參加那些人,沒什麼大不了的。 會有由類似地導致 課程的高級職員之一, Zamalya,同樣的機會嵌入式 在習題自己。 問題今年台 將在週五公佈 不再做七天後, 但10天later--故意 重疊的每個問題 設置,這樣才能更好地適應, 我們希望,潮起潮落 在學生的時間表, 尤其是在期中考試或競技 或學者或課外活動 往往來去 尤其是期中。 這應該給你多一點 自由裁量權是否你面前 與CS50或背部負荷加載週 它在接下來的週末吧。 所以,看該課程的教學大綱 此處其時間表。 你會發現其中也 今年的變化, 對於那些更熟悉 編程在過去, 我們將啟動該學期 我們今天會在划痕, 尤其是注重語言 所謂C,然後過渡不 到PHP,而是一個叫做語言 對學期結束的Python 在web編程的情況下, 隨著SQL和JavaScript, HTML,CSS,並且還更。 而在回答常見問題, 它的確是這樣的 即CS並不像我那麼可怕一次 以為是,但它是許多工作 因為我聽說它可能是。 但是,這是說,這裡有一些 從2015年秋季學生身上的統計, 從而水平藍線 代表的時間的平均數量 報導。 你會看到的平均 六至10〜12--也許16 左右等,但與 高方差予以明確。 因此意識到,不僅有 學生更舒適,減少 舒服在使用過程中, 但相應的支持 結構得到那些學生 通過成功的學期。 事實上,在回答常見問題,應 你把CS50作為第一年? 絕對。 而事實上,我很遺憾 沒有發現我的方式 或者發現了一個新的領域 第一年為好。 你應該採取與CS50 其他課程,一定會與well-- 和一般建議我們不妨 給學生,這CS50可能是 不是那種類或介紹類 你應該採取三個 其他或其他四名P-設置課程。 但是,如果你正在做另外兩個P-集 班,別的東西,和CS50, 絕對的管理。 我有很多學生在 過去這樣做相當成功。 並讓你往那 終點線成功, 它的過程中有sections-- 不同軌道的學生 不太舒服,更舒適, 和介於兩者之間, 因此在使用過程中的 第一個問題集, 你會被要求來形容自己。 如果你是在那些較少 舒適,它的那種東西 您剛才寧知。 事實上,這一直是該 在CS50人口不斷增長 了好幾年。 由於去年秋天對 例如,所述類的58% 言必稱 在那些不那麼舒服, 用在那些9% 舒服,然後 其他學生那裡 紅描述自己 如介於兩者之間。 你會總體看到這裡的主題 和調度部的,所有這些都 均以人, 實時,與課程的 教學研究員驚人的工作人員 當然助理,其中一些人 你會在短短的時刻見面。 自己的部分,因為你會看到,會 是週一和週二和週三, 這樣才能讓你潛水 在搞,如果你打完 選擇,在使用過程中的 那個星期早些時候的演講。 然後辦公時間,這 當然,每過一年, 已經沒有任何的少 挑戰的課程。 而今年,我們計劃不 僅任職hours-- 1 在為幫助,人的機遇 學生在週三週四 週日,最後那些 在下午的設計是 降低一些應力那 與深夜總是出現 加上一個期限對settting looming-- 但辦公時間也將提供 週一和週二和 星期三和星期五和星期六, 感謝我們的朋友HSA。 CS50現在有自己的空間 學生和工作人員CS50, 67之上奧本山街, 正確的,在哈佛廣場。 該願景這是CS50的 課題組中科院整個星期, 在大多數幾乎 天,將在那裡尋求支持。 所以,如果你有一些 上的p組質詢 或者你感覺有點 堵塞或有點困惑, 和Heck,你有一個小時 類之間的一個半小時​​, 尤其是在square--你能 流行的和有問題的回答 有這混亂clarified-- 非常的精神, 你熟悉的數學 部門自身的數學問題中心, 但圍繞每個時鐘幾乎 [?克卡?]我們將在網上發布。 家教也可用於那些 學生,自由地從課程的 自己的員工,如果你想 更貼心的一對一, 或者只有兩三個同學,工作 隨著病程的工作人員之一。 而事實上,這些在這裡都只是 有些課程的工作人員, 其中一些你會 在短短的時刻見面。 事實上,CS50自身 頭助教, 和頭部課程 助理,導師, 可以上來吧,讓 他們打招呼。 [掌聲] 解說1:[聽不清]。 [掌聲] 解說2:[聽不清]。 [掌聲] 解說3:[聽不清]。 [掌聲] DAVID MALAN:,讓我們 帶來CS50的董事會兩個最 高級職員,羅布和Zamayla為好。 [掌聲] 事實上,無論是羅布和 Zamayla一直伴隨著我們 這麼久了,我能夠 進入CS50的檔案 找到這個非常SD 他們的參與進尺 在舞台上自己幾年前。 羅伯:[聽不清]。 [掌聲] ZAMAYLA:[聽不清] [掌聲] DAVID MALAN:謝謝。 所以除了這些 這裡的團隊成員, CS50擁有一支近100 工作人員,所有的人 將可用於部分 和辦公時間和這麼多。 並作為羅布說太,這是 最顯著檢修 在10年CS50的那 我一直在[聽不清]。 [聽不清]特別是重點 在提供一個支撐結構, 修剪帶走了大量的 這一直是大頭 積累在10年內 迭代開發 在球場上的習題集。 所以今年,不僅在課堂上,但 還在使用過程中的問題的形式 集,你應該找事情 更精簡,修邊機,多 比更便於管理 在過去的幾年,因為我們 擺脫一些這就是行李 通過不斷發展的一年開發的性質 一年後的迭代。 所以今天的新的和改進的開始。 你會遇到更多的 當然公司在[聽不清]的工作人員出來 下午2:30,在那裡我們服務, 作為一個傳統的蛋糕。 有一個多一點的蛋糕 不僅如此,但你 滿足艾琳和Tobias等人還在。 讓我給你 我們聽到前遊 從一些其他工作人員 在類的東西等待為好,。 事實上,我們總是開始CS50的 學期本週六, 什麼叫做CS50益智日。 它無關 計算機科學本身, 但隨著有關問題 解決更普遍。 如果你這樣選擇參加, 每部分的邀請, 你可能已經看到門 掉落或在這裡的舞台上, 這是在團隊中的機會 的兩個或三個或四個, 參與的難題和比薩餅 和獎品,並緩慢 - 本週六, 敬請期待更多。 你會發現太多,每 週五,在火與冰, 不CS50帶來 一大堆學生 午餐,做一個大的 一流的手感更貼心, 一般匯集 校友和來自業界朋友 談論他們已經什麼 自從畢業以來最高。 同樣的,今年,我們將 開創了有史以來第一個50 CS50 編碼contest--一期中 機會,讓大家 在基礎的選擇,有一個 針對同學們鬥智斗勇的挑戰, 再次在兩個或三個或團隊 四個僅使用編程 精明的你就必須下 只是六七後,你的腰帶 類週,參與 在這種競爭 online--如果你想磨練自己 技能都在挑戰更多。 在學期結束是 所謂CS50 Hackathon-- 開始於7:00一個機會 下午結束於7:00 AM,沿途 是在潛水12日晚小時 到課程的最後project-- 一個機會來設計和 實行最感興趣的東西 你與你的教學 老鄉的指引。 大約9:00 AM做,我們通常 服務比薩餅1:00 AM, Philippe的,和我們幾個 誰是還醒著上午5:00, 梭乘坐大巴下來 路IHOP早餐。 然後幾天後 是所謂的CS50 fare-- 學期展覽在結束 多遠這麼多的慶祝活動 CS50的學生都來自 週零一路週 並牢記那些73% 同學們和你今年有 以前從未採取了CS類。 實際上,再次強調為多,這裡 從CS50的工作人員多了一些面孔。 揚聲器4:[聽不清]。 SPEAKER 5:[聽不清]。 揚聲器6:[聽不清]。 揚聲器7:[聽不清]。 SPEAKER 8:[聽不清] 揚聲器9:[聽不清]。 揚聲器4:[聽不清]。 揚聲器10:[聽不清]。 揚聲器11:[聽不清]。 SPEAKER 12:[聽不清]。 SPEAKER 13:[聽不清] 揚聲器14:[聽不清]。 SPEAKER 13:[聽不清]。 SPEAKER 15:[聽不清] SPEAKER 16:[聽不清]。 揚聲器11:[聽不清] SPEAKER 5:[聽不清]。 DAVID MALAN:有些團隊 是自己購物類。 但是,如果這些成員 CS50的工作人員都在這裡, 能來最多只是一瞬間。 CS50的轉錄因子和CA和[?工作人員?] 會員這裡 - 這些只是少數 其中的faces--一個你剛才 看見了,和幾個other--和其他幾個人 仍然。 我們為什麼不繼續前進,讓 你們五分鐘的休息時間。 如果你需要逃避到 店類,這很好。 五分鐘後,我們將重新開始, 採取一看Scratch--第一 我們的編程語言,滿足 在此過程中的工作人員多一些, 並注重最終 在問題設置為零。 因此,我們會回來的五分鐘。 [掌聲] 好吧。 所以我們又回來了。 而在我們剩下的 今天的時間,我們的目標 是公平的競爭環境 在一些術語方面, 在一些觀念方面。 因為事實上,按照 一些早期的圖表, 那裡將是一個範圍 在類的經驗水平, 其中一些人的學生 前採取了一些節目, 其中一些人還沒有。 所以這個第一個問題 置,並與該第一語言 我們有機會啟動 拿今天之後批出 一些常用的詞彙和概念。 我們會通過的方式做到這一點 課程的第一languages​​-- 除了C和Python和 JavaScript和SQL和HTML和CSS, 我們將首先著眼 和公正的問題設置為零 這個圖形語言,稱為 從無到有,由麻省理工學院媒體實驗室開發 下山的路,幫助 學生和孩子尤其是 表達自己algorithmically-- 的方式與什麼更一致 我們不妨稱之為計算思維。 這是一個非常有用的語言,因為 很快下週在一個星期內, 我們過渡到一個更 所謂的傳統和神秘語言 C,這是純粹的文本。 你只用鍵盤 為了寫指令 像這些在屏幕上。 但是,即使你從來沒見過 編程語言之前, 在剛剛一眼 這一點,所有的無論是神秘的, 你可能猜到 大概打印Hello World。 但是有一個很大的 句法開銷那裡。 有怪異的哈希 符號或散列標籤往上頂。 有尖括號,一些 括號,大括號,半colon-- 這裡只有這麼多的視覺 語法的方式獲得。 我們先從課程 劃傷,從而獲得 過去所有這些智力 無趣的雜念, 而專注於創意。 事實上,這可能是之前。 此,為此,週須後。 此,在該圖形 語言划痕, 是你將如何實現相同的 program--運行時,一個程序, 簡單地說,你好世界。 而關於划痕是很不錯 它的這種圖形化編程 使用拼圖或環境 塊,只有一起互鎖 如果它使邏輯意義這樣做。 並與划痕就可以開發 動畫和互動遊戲 和藝術,以及任何數目的東西 你可能想像你自己的心靈, 而僅僅通過實現它們 拖放拼圖。 事實上,我們將有能力 表達一些同樣的想法 我只是提了一下 以前,在邁克·史密斯的背景下 和搜索電話book--事 類似的功能,只是動作, 這樣的事情做循環 事連連, 變量,這是 這是我們來介紹, 但它也許是熟悉的 algebra--只是一些一種佔位符 存放一些價值你可能 需要later--布爾表達式, 如果這些是否或真 從之前假的問題。 條件是在那些叉 road--這些分支可以這麼說。 然後還有一些發燒友 特點我們可以看到即使在今天, 所謂的陣列和線程, 事件,我們會再重訪 時間在不同的語言。 但划痕讓我們 探索所有這些。 所以在這裡划痕中,這個紫 塊是一個功能是什麼通常 將會是什麼樣的。 有一些這紫一塊拼圖 字像說,這是動作, 然後它可能具有一個 參數或parameter--某種​​方式 一種定制的 那是什麼呢塊 所以,它不是通過預先確定 MIT這是什麼紫塊說。 事實上,你會看到一個 那一刻,我是能夠輸入 的話就像世界您好,或 您好大衛,或HELLO Zamayla, 或我想做的事情,在參數 該拼圖piece--白盒測試 那裡。 同時,如果我想要一個循環,我們將 看到有拼圖的 看起來有點橙這樣。 而它們的形狀樣的建議 事情頻頻發生 在一個週期。 所以,如果我換一個打招呼的世界塊 用刮中永遠阻止, 它只是要保持打招呼 世界永遠的,毫不誇張。 同時,還有另一種 在划痕循環型 我們將see--重演 block--在哪裡,如果你 提前知道有多少次 你希望循環執行 次在fact--你有限數量的 可以通過在數字輸入指定 或者甚至堵塞在一個變量, 像X或Y作為我們拭目以待。 事實上,變量,如 我在此情況下,這 一個共同的名字為 整型變量 只是存儲number-- 整數可能是, 在這裡使用的橙色塊 設置一個變量像我到零。 下面是一個綠色的例子 在划痕布爾表達式。 雖然這看起來像一個數學 公式,數學不等式這樣 真的是布爾表達式。 這是真或假。 我是小於50。 它要么是或否的答案 或真或假的答案。 而我們通常會打電話 這些布爾表達式。 它不必須是50。 它可以為x小於y, 大於y,等於y-- 任何數量的其他 問題可能會問。 現在,乍一看,這可能看起來 突然很大膽在這裡,它是。 但聰明的概念,它是 與以前相當熟悉。 比說如果x小於y,為多。 否則,如果x大於 比Y,然後說那麼多。 別人說x等於為y。 因此,我們有一個例子 第三scenario--的有 只有第三possibility-- x是 大於,小於或等於。 因此,我們必須在客場三路叉。 並注意什麼很酷這裡 - 划痕, 這似乎只有一個謎題 件,在這種情況下,如果else塊。 然而,這似乎意味著你可以 只有在路雙向叉子。 你可以去左或右,但 什麼關於第三種方案? 如果x等於ÿ什麼? 沒什麼大不了。 取一拼圖,把 它的另一個內 創建語義等值 如果,否則,如果,else--現在你 在路上你的三路叉。 正如我們看到的, 刮拼圖 可拉伸和成長,因此 作為對他們擠更多的東西。 你不必適合 一切都在它的默認大小。 這是我們要 很快看到被稱為數組。 這就像一個列表中 - 一些方式 存儲的多條信息 在一個變量中,不只是一個數字。 這些我們可以看到代表 所謂多線程。 事實上,所有的 Mac和PC,這些天 支持多線程, 這意味著你可以從字面上 在同一時間做多件事情。 您可以安裝Microsoft Word起來的 前景,在一些作文的工作。 你可能有一個瀏覽器 在後台開口 G-mail或Facebook或類似物。 您的計算機可以做多件事情 今天,因為它是多線程的, 和方案,他們在 特別是還多線程。 有東西叫做事件 以及在划痕的世界裡, 再有一種方法也使 我們自己定制拼圖,如果事情 事先不實際存在。 因此,讓我們這個激勵如下。 幾年前,當我 首先發現划痕, 當我實際上是一個 在麻省理工學院的研究生,我們 我們大夥兒做的功課。 我implemented-- 其中,回想起來, 是一個非常錯誤的決定,因為它是 在世界上最令人氣憤的歌 聽八小時 而在您的工作homework-- 但有些事我呼籲奧斯卡時間, 這也許是一個熟悉的歌曲。 CS50s擁有喬丹林,一 我們更多的高級職員, 已經升級了其2015年和 現在2016年,因為早在一天, 我擁有了一切只是去 進入奧斯卡的垃圾桶。 現在,我們支持回收和堆肥。 但畫的圖畫 什麼,我們可以在這裡做 並激勵一些 較低級別的例子, 我們可以得到一個其他 志願者剛剛上了 玩我的第一次 家庭作業永遠不會消失? 上來吧。 你叫什麼名字? 亨利:亨利。 DAVID MALAN:亨利​​,上來吧。 上來吧。 頭部無論哪種方式,和 你會看到一個時刻, 我要繼續前進並擊中了 在右上角的綠色標誌 角落,這意味著去。 小停止標誌圖標 會說停, 這就是當你開始 並停止該程序。 很高興見到你。 好吧。 所以,我們要看到的說明 在短短的瞬間在屏幕上。 而僅僅通過玩這個遊戲 幾秒 - 相信我, 我們不打算要想玩 一路的end--你會 得到的程序在做什麼的感覺。 而不僅僅是專注於亨利 處於這場比賽中,焦點是好是壞 並且又如何能夠實現我 最初再由喬丹。 換句話說,在這裡是變量? 在哪裡循環? 在哪裡的功能呢? 我們會看到,如果我們不看 這些引擎蓋下方。 只需點擊並拖動垃圾桶 以合適的紙槽。 [音樂] 好吧。 這是非常好的。 為什麼我們不存在停止。 謝謝。 恭喜亨利。 謝謝。 [掌聲] 試想一下,調試該程序。 如果有一個問題的兩種 分進入song--但如此 這是怎麼回事這裡真的嗎? 由於複雜的,因為它可能 開始似乎隨著時間的推移, 的確越來越多 東西霏霏, 有什麼有趣的左右 這種example--的 我們會看到一些 others--是,如果你 看過去的複雜性或 遊戲的複雜性, 有一個很簡單的建築 該演奏成所有的塊, 如果他們提煉出那些 積木,都十分便利 和可執行你們自己。 例如,它的 過了一段時間,但我 很肯定我最初做的時候 使得本場比賽的第一次 是我完全像個拖再拖。 我根本不注重 邏輯或拼圖, 我專注於圖形和發現 街道後和垃圾桶 和所有的。 但是,這些都是必要的 成分在第一。 一旦我完成了拖延, 佈局總體框架, 我決定,我只想做一個 一塊從天上落下垃圾的。 我們將看到划痕 支持東西叫做 sprites--字符,可以 對因此他們不同的服飾 看起來不同。 所以,我把一個垃圾桶 服裝上的這樣一個精靈。 我只是需要它 從天上掉下來。 所以事實證明,從無到有, 最喜歡的編程語言, 支持隨機數字或 技術上偽隨機數, 以便通過拖和 某些下探拼圖, 我能夠有垃圾桶 首先來自於左側。 再下一次下跌,從 右,然後從中間。 和所有的遊戲都只是 有垃圾從空中落下。 你不能在它指向或點擊它。 你不能打開垃圾箱。 你不能做任何事情。 但它是一個小步 對我的終極願景。 在這之後,我居然 實施某種 傳感所以如果你沒有點擊 並拖動一塊垃圾 在垃圾桶,奧斯卡 將蓋子打開和關閉。 沒有什麼會發生在垃圾桶裡,但 至少所述蓋將打開和關閉。 所以,再檢查,第二步中的兩個。 這是發生了什麼事情是 在這兩個問題的關鍵設置為零 和編程更一般地,是 採取這些非常謹慎的嬰兒的步驟。 因為它不僅讓你 老實說,感覺完成了多 quickly--它的 在世界上最糟糕的事情 嘗試實施所有奧斯卡時間, 然後小時後打綠旗, 並沒有什麼作品如預期 因為你在哪裡,甚至 開始調試或 故障排除程序? 這只是壓倒。 所以,真正擁抱這個想法 再次採取steps--嬰兒的步驟 和again--建立 東西是,在最後, 真是令人印象深刻和複雜的,但 起初,是不是幾乎一樣如此。 事實上,讓我們做到這一點。 讓我先走還有 - 本身划痕 存在於Scratch.MIT.edu在網絡上, 你會被告知為 在問題再多 設置為零,規範 這已經是在CS50的網站。 但是,這是什麼划痕本身。 而且也真的只是 三個主要領域。 在左上方有 是所謂的階段。 這是划痕。 默認的服裝是一隻貓。 這是矩形世界 你可以move--上,下,左, 右側和一些其他的東西。 在中間這是我們的類別 還是我們的拼圖托盤, 和不同的顏色 意味著不同的事情。 如果你閒逛,你會看到 之類的東西循環和條件 和變量等成分。 然後在這裡是腳本的區域。 這是我可以拖放 這些拼圖做的事情。 因此,讓我們做一這樣的事情。 讓我先走還有 - 我知道它在哪裡。 所以,我要立即點擊 在那裡,我知道的東西都準備好要, 但指向和點擊和 四處是不可避免的。 因此,當綠旗點擊, 我想要做什麼? 我要做到這一點。 我要拖到這個謎題紫 件,問好兩秒鐘, 讓我放大]。 而我要改變這種 是我希望它be--什麼 世界你好兩秒鐘的罰款。 現在,我要點擊 綠色食品標誌,或者如果我真正想要的, 我可以全屏幕,然後回來。 這將只是保持 一切在一個窗口。 綠色flag--世界你好。 好吧。 不是所有的有趣。 因此,讓我繼續前進,做到這一點。 讓我試試另一個。 當綠旗clicked--讓我們 做類似聲音。 並注意出 免費你得到的盒子 一隻貓的聲音,因為是默認的精靈。 所以,現在讓我去前進, 打到現在綠色環保標誌。 [喵喵叫] 胡。 這是可愛的。 我編程。 所以我做了什麼? 這是一個程序的等價物。 這顯然是超級簡單。 它並沒有真正採取所有的東西 努力和麻省理工學院做了大部分的工作, 但我已經調用的函數。 我已經使用的功能。 我做了一些動作,只使用 一個紫色的一塊拼圖。 好吧,如果我想要做的 3叫聲在一排? 讓我繼續前進,做兩三個。 並注意當你 懸停附近的一塊拼圖, 顯得有點白線 諸如此類的磁性, 它會捕捉 在一起的時候你放手。 讓我們來看看這裡發生了什麼。 [喵喵叫] 有一個錯誤。 我只聽到一喵。 為什麼會這樣呢? 是嗎? 是啊。 我們真的不聽到它, 但是這是很好的直覺。 他們都打在同一時間。 為什麼? 那麼,電腦正要 做什麼你告訴它做的事。 所以,如果你說,播放聲音, 播放聲音,播放聲音, 但你不告訴它發揮到及至 大功告成,玩到大功告成, 這將通過吹 該計劃真快 而且只做你告訴它做的事。 所以,我真的需要修復 這幾種方式。 我可以做到這一點,擺脫了這一點。 讓我試試這個謎題其他 piece--播放聲音喵直到完成, 然後將三 這些和單擊播放。 [喵喵叫] 這不是真的very-- 感謝你 - 很自然的。 那麼,為什麼我 - 讓 我去這裡控制。 尼斯。 等待一秒鐘,現在讓我回去 對聲音和播放聲音,直到完成, 然後讓我等待一秒鐘。 然後讓我去送一 更多的聲音,在這裡我們去。 [喵喵叫] 多一點自然的,但 這不是很有效。 就像我開始厭煩,都是 簡單來說,點擊來回 真正複製我的work-- 幾乎複製和粘貼。 事實上,如果我控制 點擊或右鍵點擊, 我可能只是複製和粘貼。 什麼會是一個更好的構造使用? 什麼想法來自之前? 是啊,這樣一個循環。 而事實上,如果我們周圍戳, 我們可能會發現這一點。 讓我去活動或者說控制。 所以repeat--我不 希望它是10倍。 這是怎麼回事招人煩快。 但我會重複三次。 讓我回去聲 直到把它完成播放聲音。 讓我回去控制 而只是等待一秒鐘。 和通知,您可能 覺得不適合, 但如果再次磁你讓它 在單元的地方,它會增長到填滿。 它是什麼,現在玩嗎? [喵喵叫] 好。 尼斯。 而這也正是將被稱為 一個程序,也是正確的。 它meowed相當三次 自然地,但它設計得更好。 我使用較少的冗餘。 我沒有複製和粘貼任何東西。 我只是用一個更好的主意。 現在,這仍然不是所有的 有趣的傷痕累累不做 任何東西。 因此,讓我們做別的事情來代替。 讓我們做一些事情永遠。 你知道嗎? 運動似乎很有趣。 讓我們動他10 步驟,現在打比賽。 好。 嗯,我們可以種阻力 他回來了,他仍然 運行,因為他永遠這樣做。 所以循環是做 它在說的事, 但是這並不是那麼有趣。 我們開工吧。 讓我補充一個控制模塊,並使用一個 的首次這些條件。 所以它要移動10 steps-- 10個點,10個像素的screen-- 然後它會問這個問題。 如果事情是真的,那麼做 這事塊中。 因此,原來傳感有一個整體 一堆布爾expressions--的 Yes(是)的問題沒有或真 假form--讓我這樣做。 如果touching--然後有 這個小下拉菜單。 我可以將其參數化。 如果觸摸edge--讓我們 做這樣的事情。 所以,如果觸摸edge-- 讓我回去運動。 而我們為什麼不只是 轉身180度? 好吧。 所以永遠,移動10步。 如果你接觸 邊,轉180度。 而這還不是該計劃的結束 因為你在一個被永遠擋, 所以它會再次去 一遍又一遍又一遍。 因此,讓我們看看會發生什麼。 好。 一個小馬車,但那種清涼。 我們可以添加到此一些無聊的事 那是不是所有的智力 有趣。 但是,如果我們打這個小 麥克風button--哎喲。 讓我打掃一下。 讓我加強這方面的作為 他們會說在電視上。 清理一下,保存, 現在去到腳本。 現在,讓我去的聲音。 讓我給它一個名字。 我會打電話給這個哎喲。 現在播放聲音哎喲。 請注意,它出現在 小下拉菜單。 讓我們來看看。 [哎喲] [笑] 但是,我們可以動態牛逼了改變。 我們可以兩倍煩人。 [哎喲] 或者,如果我們使它像 在時間 - 1000步 好。 所以,我們要獨自離開的那一個。 如此反复,建築blocks--我 開始與一些超級簡單, 然後我增加了一個功能, 增加了一個功能,增加了一個功能。 而我不再需要擔心 如何在第一的這些功能 被實現為我繼續 在上面一層的東西。 所以,事實上,讓我做另外一個在這裡。 讓我繼續前進,打開一個文件 我帶來了進步,所謂的羊。 因此它具有略微不同 字符,看起來像這樣。 讓我看看,如果我不能 使用計數器做些什麼 在此case--所謂變量。 我要繼續前進,Events--下 讓我得到一個綠色的旗幟點擊。 然後讓我去的數據,我知道 從僅僅玩弄之前, 就是變量。 而且我要繼續前進,這拖累。 因此,一個變量,名為計數器, 我將其初始化為零。 我可以稱之為anything-- x或 y或z--但在編程, 調用東西語義 有用的方法,如櫃檯, 描述它是什麼,它是一個 不少方便以後閱讀你的代碼。 讓我繼續前進,得到 一個永遠阻塞在這裡。 並讓我去長相 頁面,並做了說塊。 但是,什麼是酷的變量是我 不必只是在一些類型 像世界你好,我們已經過 完成後,我可以改為向數據 並拖動我的變量,甚至 雖然外形並不完全 看起來像它應該適合, 它會增長到填滿。 而我只想說一個計數器 second-- spoiler--他要算。 我們會說這一秒。 然後我會去 讓他等待一秒鐘, 所以這不算漲得太快。 然後最後,變更計數器 通過換句話說one--, 遞增一個計數器 附加價值,永遠做到這一點。 所以羊太像一個 程序員,從0計數。 如果我們等待足夠長, 他將永遠做到這一點。 但是,這並不完全正確,因為 事實上,正如我們將在一個星期內發現, 更一般整數和計算機, 技術上只有一個finite--好, 而計算機上,當 他們表示整數, 只有比特的數量有限。 這些燈泡有 只能算這麼高 你出的燈泡了。 和一台電腦也是如此, 只有這麼多的內存, 只是有這麼多的晶體管, 所以它只能算這麼高。 因此,原來的羊, 我認為,可以算為2十億 什麼蠻大的。 因此,我們不打算 等待這種情況發生。 但最終一些bug會發生 可以有一些非常現實世界 後果。 但是,除了羊,那 只是引入了一個變量。 讓我們繼續前進,開拓 這是我事先做 這裡所說的寵物Cat-- 寵物貓在這裡。 並注意這裡的幾 塊,但是當綠旗 點擊後,永遠做以下。 如果你去摸鼠標 pointer--使光標在屏幕上, 在arrow--玩喵喵聲 然後等待兩秒鐘。 而就在這樣做永遠。 只要堅持等待 看是否pointer-- 如果貓觸摸指針。 所以,我打遊戲。 什麼也沒有發生。 但是,當我將光標移到貓, [喵喵叫] 如果我將其移開,不 再撫摸貓。 因此,一些條件邏輯 嵌套在一個循環內。 怎麼樣這個例子中,故意 所謂沒有寵貓? 這是什麼打算做什麼? [喵喵叫] 你為什麼不應該寵物貓? [喵喵叫] 好。 所以這是的,如果別人的例子。 這是一個決策點和 因為它是坐在環, 他們都得到檢查。 這是真的? 這是真的? 這是真的? 這是真的? 最終,一個 那些將要應用 所以你聽到的要么喵或 在這種情況下,獅子的吼聲。 好吧,讓我們做一個稍微看上一眼 我事先太...線程進行。 這樣一個線程僅僅是一個 一台計算機可以做的事情。 因此,一個多線程程序是一個程序 可同時做多件事情。 和所有的這些實施例 迄今有 只是一個劇本,所以speak-- 一個程序像這樣在這裡。 但是請注意這個程序有 2精靈,兩個字符。 一個是鳥。 一個是貓。 並注意當我點擊這些下跌 左,他們每個人都有自己的腳本 或與之相關聯的程序。 而這兩項的 計劃,通知,啟動 同當綠旗clicked-- 讓我們來看看在cat-- 當綠旗點擊。 所以事實上,當我打到現在的發揮, 兩件事情會立刻發生。 貓和鳥都 要同時操作 創造這種效果。 你可能想像發生了什麼。 有一個循環和鳥 和貓是在一個循環。 鳥只是喜歡彈跳 我是當我說哎喲之前。 但貓顯然具有優勢。 還有另一種感應塊 故意指向貓 在這種情況下,這裡的鳥。 因此,我們可以梳理出,通過查看 通過這些塊,發生了什麼。 但這裡的關鍵因素之一。 鳥,讓這個遊戲是不是 完全boring--或本animation-- 開始於一個隨機的方向。 和計算機正在復甦 90和180之間的數 基本上,因此它是一個略 每一次不同的動畫。 然後注意到這裡,如果 貓接觸小鳥,然後 玩獅子4 sound--轟鳴聲。 但同時在鳥的 調色板,我們有這個。 永遠,如果不接觸貓, 只是不停的往前三個步驟。 然後這裡的另一個拼圖。 如果你是在邊緣,反彈。 所以鳥是正中下懷 在意自己的業務, 只是飛來飛去,並 彈跳,它真的 該份條件邏輯貓 以確定它是否已經抓到了小鳥。 好吧。 因此,讓我們做另外一個在這裡, 這個被稱為喜喜喜。 而這一次在這裡少了點 這一個永遠循環。 但是notice--我們怎麼停 這很煩人的程序? 敲空格鍵。 因為如果我這樣做, 左手program-- 察覺到它的不斷listening-- 關鍵是空間按。 如果空格鍵按下, 如果是這樣,它有什麼作用? 它非常普遍的技術。 它設置等於某個值的變量。 但是,切換該值。 [?所以外觀?] 基於所述shape--我 有一個變量,我 提前編寫了一個名為 靜音,這只是說yes或no。 是否設置為靜音或沒有? 對或錯? 和通知,我說如果this-- 靜音是零,然後換到一個, 否則設置靜音為零。 所以只是價值翻轉從零到一。 我可以done--改變 從兩到三和三比二 或四,五或四到六個。 但沒關係 我用的號碼, 只要我保持 改變它的對面。 而大多數任何程序員只想 選擇零和one--虛假和真實, 關閉並on--來表示這一點。 這是仍在運行。 如果我再敲空格鍵 [SEAL聲音] 該程序仍在運行。 因為有這等腳本 上面寫著,永遠做到以下幾點。 如果靜音變量等於 zero--所以如果你沒有靜音 是logic--如果它是假的 或者沒有,則播放聲音, 因為你沒有靜音。 您應該演奏的聲音,然後 想喜喜喜兩秒鐘 然後等待,並做到這一點 一遍又一遍又一遍。 因此在這種方式我們有一種方法 中場休息的人對程序進行交互。 並且它們不必 像日期為其他。 事實上,戳around-- 沒有雙關語intended-- 有人花了一個巨大的量 實施時間在互聯網上 PokemonGo在划痕。 它甚至geolocates你 劍橋或奧爾斯頓在這裡。 所以,如果你想看到過什麼人 能做的就是this--很花哨的菜單。 請點擊此處。 這是我與我的箭頭鍵了。 我打算在這之後去。 點擊。 現在你點擊PokeBall。 我的意思是,我覺得你 應該點擊PokeBall。 好吧。 所以,我做到了。 我可以在這裡走了過來。 而這個人實施一些 PokeBalls在這裡 - 3 PokeBalls。 我們會發布一個鏈接到這個 網上這樣你就可以玩了。 但通知有剛 一些基本的構建塊。 它看起來有很多票友,它是。 這是令人印象深刻,更 比我們通常會 期待,當然,對於問題設定為零。 我不知道多久 這個人上網時間。 但是,這一切都只是一個循環。 有一個聲音播放。 有一些類型的循環 聽了我是否 擊中向上或向下 箭頭或左和右, 然後如果是這樣,它的移動 它的一些數目的像素。 然後如果我點擊 另一個精靈,有 某種情況是否存在。 是啊,這是越來越過於激烈。 我們要停下來。 這是所有的基本組成部分。 有其他沒有其他成分 比那些我們已經看過了。 然而在這裡,讓我做 最後一個組的例子 用於繪製的圖片太 你可以做這裡。 這裡是一個非常簡單的程序, 少了點this--咳,咳,咳。 與僅基於什麼 我們已經看了到目前為止, 哪裡是顯而易見的 機會改善。 這個程序是正確的。 它咳嗽三次, 這就是我的本意。 但它的執行不力。 它的設計很差。 為什麼? 是啊。 這不是一個循環。 而且它是沒有這麼多 這不是一個循環, 那就是有很多冗餘。 有被複製和 粘貼代碼,可以這麼說。 而可能的解決方案 確實是一個循環。 因此,讓我先走 並呼籲改善。 而我要在這裡拖這些。 讓我先走,並得到一個重複 塊,這一變化為三個。 我要扔掉 其中的一些塊。 你會發現它非常直觀。 拖放和事 出現並最終消失。 而且我可以拖動該在這裡了, 現在我有一個更清潔的版本依然。 但是,你知道嗎? 有這樣的機會 現在abstraction-- 開始以限定新的詞彙 麻省理工學院沒有預料到的。 有等待和重複 永遠,如果, 但如果我想要什麼介紹 這個詞咳嗽作為一個塊? 如果我想要一個拼圖 他們的生活目的就是咳嗽? 好吧,讓我們來看看這個版本 在這裡,我提出如下。 奇妙的是,我已經創建 這一塊拼圖在這裡, 其中刮允許你這樣做。 事實上C和Python的 和JavaScript 打算讓你做這一點。 您可以創建自己的自定義 你打電話給你想要的作品。 在這種情況下,咳嗽感覺 像一個合理的定義。 然後用這些碎片倒 在這裡你能定義是什麼意思。 我拖著從下降 此調色板這裡 - 更多 blocks--這個大紫 塊,在那裡我的咳嗽類型 作為我的新拼圖的名稱。 然後我說,任何時候用戶 稱這種新的咳嗽一塊拼圖, 做一個發言權和等待。 所以,在這裡我重複塊, 我只能咳嗽三次。 而且我認為,特別是 如果現在你隱藏這個細節。 誰在乎咳嗽怎麼實現? 我所關心的一個 程序員,我可止咳。 我不在乎怎麼說的實現。 我只關心的 貓能說些什麼。 我可以抽象掉的細節, 只專注於屏幕上這裡什麼。 但我可以進一步藉此一步。 請注意,在這裡,我有 實施循環三次。 但是,如果不是我搶這個版本? 而如果不是 這裡這個版本, 我只是改變我的拼圖拿 參數,並輸入你們自己? 而且輸入可以是 一些像三個。 所以,現在,如果我寫一個程序 我想貓咳嗽, 其實,我可以告訴拼圖 拼湊多少次咳嗽, 因為這裡的底部,票友 這些定制拼圖版 讓我指定 咳,其實需要 一個input--需要一個像這樣的論點。 你知道嗎? 也許我知道,等一下。 咳嗽是same-- 這是從根本上 同樣的想法打噴嚏。 這只是一個不同的 字在屏幕上。 我可以抽象掉 進一步貫徹 的這個最終版本 咳嗽,乍一看 方法是更複雜的期待。 但是請注意我做了什麼。 我現在已經generalized--泛型化 真的 - 這拼圖 被稱為說字n次。 現在我有兩個新的拼圖 到這裡定義的咳嗽n次。 又是什麼止咳的功能呢? 什麼是我的自定義拼圖嗎? 它只是調用發言權塊, 傳遞我想說的話, 傳遞數 多少次我想說的話。 因為現在我可以實現 簡單地說ACHOO打噴嚏, 在這種情況下,一些次數。 所以我分層和層次感。 再次,這裡的關鍵是不 我是如何實現它,但事實 如果我只是從字面上 這些移動關閉屏幕, 怎麼看怎麼簡單,如果不 漂亮的我的計劃現在看起來。 因為它做的事情 說,我已經抽象 走什麼是黑盒子裡面。 它正好是一個紫色的盒子在這裡, 但我已經離開受阻裡面有什麼 因為我不關心它是如何工作。 我剛才它的工作原理在意。 事實上,在問題 設置為零,這正是 那種想法的層次感你會 要探索的機會。 這正是機會 適用於解決問題的技巧, 什麼是可能是一個 陌生的環境。 而無論你沒有編程 前或編程, 你會發現,有 一個小東西 在這種環境中的每一個人。 並與問題集 之一,一個星期的時間, 我們將過渡到聚焦 在被稱為高級語言 C--或相當的低級 所謂的高級語言 C--這更 功能強大,即使它的 有點乍一看更加神秘。 你會每今天的TL意識到:DR, 這個問題設置具有較短 時間會比將來的窗口,只需 因為你應該還算找到它 無障礙。 而不是擔心,如果 您添加上課遲到。 我們將解決這個不久。 而之前我們休會的蛋糕,讓我們 只有一兩分鐘的樣子完成 什麼,你在這裡等待著CS50。 [音樂] 好吧。 以上就是CS50。 我們很快就會看到你。 蛋糕現在擔任。 [音樂] 揚聲器17:你聽說過 的休假,首席? 揚聲器18:或許有 更引擎蓋下。