[Nagpe-play ng musika] [Music - ROSSINI, "RANZ des VACHES "FROM William sabihin] [Music - ang Ingles na matalo, "MARSO NG MGA umiinog ulo "] [Palakpakan AT pagpalakpak] David MALAN: Kaya ito ay CS50. Ang pangalan ko ay David Malan. At ang 73% ng sa iyo ay walang naunang karanasan may computer science, salungat sa kung ano ang iyong iniisip. Kaya ngayon naisip namin na gusto namin chip ang layo na sa kakulangan ng pagpapalagayang-loob, ngunit din bigyan ka ng isang pakiramdam ng, para sa mga ng sa iyo na may higit pang ginhawa, na direksyon maaari kang pumunta ito semestre. Kaya sabihin magsimula sa mga ito. Ako talaga ay walang mga ideya kung ano ang nasa loob ng isang computer, kahit na, tulad ng sa iyo, ako gamitin ito araw-araw. Ngunit ito ay ang ilang mga uri ng kahon, at mayroong Hindi maraming mga input sa dito. Nagnais ng pinakamababang, mayroong, ano? Malamang isang kapangyarihan kurdon. At tunay nga na may isang ito sahog, koryente, tila namin upang maging may kakayahang paggawa pa ng kaunti mga araw na ito. Ngunit sa pagtatapos ng araw, kami mayroon upang kumatawan sa mga bagay na pinapahalagahan namin ang tungkol sa. Mayroon kaming upang kumatawan impormasyon sa ilang mga paraan. At ikaw ay malamang na hindi bababa sa vaguely pamilyar sa mga ideya sa pamamagitan ng binary o bits sa paanuman o iba pang, mga computer mabawasan ng mga zero at mga bago. Ngunit maaari naming yakapin na at hindi bababa sa maglagay ng kaunting liwanag na iyon? Kaya Mayroon akong maliit na mga desk lamp dito. Mayroon akong isang electrical outlet dito. At ako pagpunta sa imungkahi na loob ng aking computer ay hindi bababa sa isa sa mga mga bagay na ito, isang bagay na may kakayahang ng inililipat on o off. Sa kasong ito, ito ay sa katunayan isang desk lamp, ngunit sa mas mababang antas, ito ay isang bagay na tinatawag na transistor. Ngunit sa ating mundo, ito ay isang desk lamp, kaya Pupunta ako sa sige at plug ito sa aking koryente dito. At inaangkin ko na gamit ito simple, simpleng aparato, ito simpleng switch, ko maaaring kumatawan impormasyon. Halimbawa, sa ngayon, ako ay na kumakatawan wala, tama? Ako na kumakatawan sa kung ano ang makikita ko tawagan o 0 hindi totoo, ang tapat ng isang bagay talaga pagiging kasalukuyan. Ngunit kung ko lang i-switch ito, ngayon ko na kinakatawan ng 1. Kaya gamit ang napaka-simpleng piraso ng memory, kung kalooban mo, maaari ko bang kumatawan impormasyon. Ngayon, sa kasamaang-palad, ang aking computer Hindi maaaring gawin ang lahat na magkano. Maaari lamang ito ay kumakatawan dalawang halaga sa buong mundo - 0 o 1. Ngunit kung ano ang isang halata na solusyon, ngayon, kung gusto naming mapalawak ang aming mga computer memory at kumakatawan higit pa pa sa 0 at 1? Well, sabihin grab ng isa pang tulad bit. Sabihin grab ng isa pang switch, isa pang transistor, gayunpaman nais mong isipin ang tungkol dito. Hayaan akong sige at plug ito sa aking computer pati na rin. At ako pagpunta sa i-claim, ngayon, na sa pamamagitan ng gamit ang isang bit higit pa koryente at pag higit pa sa mga switch sa at off, maaari ba akong kumakatawan sa higit pang mga katulad impormasyon. Kaya ngayon, ito ay 1. Kung gusto kong ngayon ay kumakatawan 2, maaari kong gawin ito. Ngunit karaniwan, convention, pati na bibigyan namin ng ay makakita, ay magkakaroon gawin sa akin ito. Kaya ito ay 0, ito ay 1. Ito ay magiging 2. At hindi nakakagulat, ito ay magiging 3. Kaya sa paraang ito, pa rin, maaari umaasa kami up kahit pa? Kung makakuha ako ng third bit, isang third switch, ano ang pinakamataas na bilang maaari ko ngayon bilangin hanggang mula sa 0? Kaya 7 kung ako nagsisimula sa 0, tama? Dahil kung ako i-on ito sa liwanag at talaga plug ito ikatlong at panghuling sindihan sa aking electrical socket dito, pagkatapos ay mayroon akong kakayahan na kumatawan sa alinman sa dalawang halaga dito, dalawang halaga dito, dalawang mga halaga dito - at sa gayon ay maaari kong kumatawan 2 beses 2 beses 2, o walong mga posibleng halaga. At kung sisimulan ko ang accounting sa 0, kaya na 0, 1, 2, 3, 4, 5, 6, 7. Kaya binary ito. Ito talaga ay kasing simple ng iyon. At gusto ko magpatunay na ito ay talagang medyo pamilyar sa pinaka- lahat ng tao sa kuwartong ito. Hayaan akong sige at buksan ang isang kaunting text editor dito. At maaari mong isipin ang mula sa mababang paaralan na nagkaroon kami mga bagay tulad ng mga daan-daang lugar, ang lugar ng sampu, at sana ang mga lugar. At isipin ang na kung ikaw ay may ilang decimal numero, tulad ng isang bagay random tulad ng 123, gagawin mo talaga isulat na out sa anyo sa mga ito ang tatlong haligi. At kung bakit ay 1, 2, 3 ano alam namin bilang 123? Well, sa pinakakaliwa haligi, mayroon kaming isa 100 plus dalawang 10s, kaya na 120, plus tatlong 1s, kaya na 123. Ngayon na ito mundo na lang namin iluminado ay eksaktong kapareho ng ka nakapunta pamilyar sa para sa taon, maliban ngayon, ang aming mga haligi ay hindi nagpapagana ng 10. Ang mga ito ay lamang ang kapangyarihan ng 2. Kaya samantalang iyon ang mga lugar, ito ay magiging ang twos lugar, ito ay pagpunta sa maging ang fours lugar. At dahil lamang ako gamit ang pinakasimpleng ng mekanismo upang i-bagay on at off - koryente ay umaagos o koryente ay hindi dumadaloy - Hindi ko pa masyadong magkaroon ng parehong nagpapahayag hanay ng 0 sa pamamagitan ng siyam. Kami ay pagpunta sa panatilihin itong napaka-simple dito sa mundo ng mga computer. Ako lamang magkaroon ng 0 o 1 - off o on, hindi totoo o totoo. At ano kaya ako na kumakatawan sa ngayon ay 1, 1, 1, dahil ang bawat isa sa mga mga ilaw ay iluminado. Well, na nagbibigay sa akin ang isa 4 plus isa 2, kaya na 6, plus isa 1, at iyon 7. At samakatuwid ang ibig magkakasunod na tatlo bits kumakatawan sa bilang 7. Kaya lahat ng mga oras na ito, sa loob ng iyong computer, naging anumang bilang ng mga transistors, ang anumang bilang ng mga piraso. Ngunit sa pagtatapos ng araw, kami maaaring kumatawan impormasyon bilang simpleng bilang na. Ngayon, sa kasamaang-palad, tanging namin binibilang hanggang sa 7 sa CS50 kaya sa ngayon, ngunit sana ay maaari naming gawin ang isang bit mas mahusay kaysa sa na. At tunay nga na aming makakaya. Ipagpalagay na namin bilang mga kawani na tao lang mang nagpasya na kami ay pagpunta upang iugnay ang mga numero tulad ng 1 at 2, 3, 4, 5, 6, 7, may mga tiyak na mga titik ng ang alpabeto. At para sa makasaysayang dahilan, pupuntahan ko simulan medyo mang, ngunit ako ay pagpunta sa sabihin, mga kawani na tao, kami ay pagpunta sa magpasya bilang batayang, sa buong mundo, na 65 kumakatawan sa bilang ng titik A. 66 ay kumakatawan B. Dot, tuldok, tuldok. 90 ay kumakatawan sa mga titik na Z. At sabihin ipagpalagay, kung namin talagang ilagay ang ilang mga naisip sa ito, maaari naming makabuo na may mga numero para sa mga punto ng tandang at maliliit na mga titik, at sa katunayan, iba pang mga tao na tapos na para sa amin. Kaya ngayon nagkaroon kami bits na kung saan maaari naming Kinakatawan mga numero, mga numero na kung saan Maaari naming kumakatawan sa mga titik, at may mga titik na maaari naming ngayong simulan ang pagbuo ng e-mail at pagpi-print ng mga character sa screen. Kaya hayaan mo akong mag-anyaya, kung magagawa ko, walong taong matapang boluntaryo - na hindi tututol hindi lumilitaw lamang sa camera pero sa internet - upang makabuo dito at kumakatawan sa walong tulad bits, sa halip na ang tatlong. Kaya kung paano tungkol sa isa, dalawa? Paano ang tungkol sa tatlong? Paano ang tungkol sa apat na mga ilaw asul, lima sa dulo? Tungkol sa isang tao sa paglipas dito? Anim na sa harap, pitong sa harap, at walong sa harap, pati na rin. Kaya ko lang kaya ang nangyari sa dumating naghanda kasama ang maramihang mga slips ng papel. At sa mga piraso ng papel ang mga numero ng na kumakatawan sa kung ano ang mga haligi ka guys ay pumunta upang kumatawan. Kaya ikaw ay - kung ano ang iyong pangalan? MAG-AARAL: Anna Leah. David MALAN: Anna Leah, mo ay ang magiging 128s haligi. Ikaw? MAG-AARAL: Chris. David MALAN: Chris kalooban maging ang 64s haligi. Ikaw? MAG-AARAL: Dan. David MALAN: Dan kalooban maging ang 32s haligi. MAG-AARAL: Pramit. David MALAN: Pramit kalooban maging ang 16s haligi. MAG-AARAL: Lillian. David MALAN: Lillian ang magiging 8s. MAG-AARAL: Jill. David MALAN: Jill kalooban maging ang 4s haligi. MAG-AARAL: Mary. David MALAN: Si Maria ang magiging 2s, at? MAG-AARAL: David. David MALAN: David kalooban maging 1s haligi. Kaya't kung ikaw guys maaaring hakbang ng kaunti inaabangan ang panahon nang sa gayon lahat ng tao na maaaring makita. Ano ka guys hindi nakakakita ay na sa likod ng mga slips ng papel ay isang maliit impostor sheet na tungkol sa atasan ang mga walong bits sa alinman sa itaas ang kanilang kamay o hindi itaas ang kanilang mga kamay. Kung ang kanilang mga kamay napupunta up, ang mga ito ay kumakatawan sa isang 1. Kung ang kanilang mga kamay ay mananatiling down, ang mga ito ay kumakatawan sa isang 0. Samantala, aming madla ang dapat na magagawang upang malaman kung, batay sa ito pagma-map, ano ang tatlong-titik na salita mga kakailanganin ng mga tao ay tungkol sa oras ng paggawa out. Kaya sa sandali lamang, ikaw ay pagpunta sa basahin ang unang linya off ang likod ng ang iyong mga impostor sheet, at ikaw ay alinman sa pagpunta sa taasan o hindi taasan ang iyong kamay. Kung ikaw ay isang 1, taasan mo, kung ikaw ay isang 0, tumayo ka doon awkwardly, tulad na. Pumunta. Ano ang numero, una at nangunguna sa lahat, ay ang mga guys na kumakatawan? 66. 66, tama? Mayroon kaming 1 sa 64s haligi, isang 1 sa hanay ng 2s. Na nagbibigay sa akin 66, kaya na lumilitaw na kumakatawan B. Kaya ka guys nabaybay - OK, tama na iyan. B. Kaya ngayon sabihin ilipat papunta sa ang aming ikalawang sulat. Pumunta. Sino ang pinakamabilis na sa math dito? Kaya 79. Muli, kung namin magdagdag ng hanggang ang lahat ng mga haligi kung saan mayroong isang 1, kasalukuyan, lamang tulad ng ginawa namin bago gamit ang pinakasimpleng ng mga halimbawa ng 7, na namin ngayon makuha ang numero 79. Aling ayon sa aming pagmamapa ay ang sulat O. Kaya hindi namin halos doon. B, O. At bilang wakas, pumunta. Ano ang kinakatawan nila ngayon? Mas pinagkaisahan. Ito lamang ay isang ganap na ungol. Oo, ito ay sa katunayan 87. Magandang. Kaya kung namin ngayon map na-back up sa - sabihin simulan ang pagtawag sa aming mga ASCII tsart, Amerikano Standard Code para sa Impormasyon Interchange. Na nagbibigay sa amin ng sulat - hindi "Bo" ngunit "bow." At iyon ay isang perpektong cue para sa iyo guys na kumuha ng isang bow at tumuloy sa likod. Maraming salamat sa inyo. [Palakpakan] David MALAN: Maaari mong panatilihin ang mga ito. Kahit na talagang, gusto sinuman tulad ng isang desk lamp, din? [Paghiyawanan MULA madla] David MALAN: Desk lamp? [Tawa] David MALAN: talaga? Desk lamp para sa lahat? Ayos lang. Kaya nagsisimula sa pinakadulo ng pinakasimpleng prinsipyo, na namin ngayon ang hindi tanging binibilang up mula sa 0 ang lahat ng mga paraan ng hanggang 7, na namin ipinapalagay na sa pamamagitan lamang ng ibinabato higit pa bits o higit pang mga ilaw o higit pang mga transistors sa ang problemang ito, kaya namin Kinakatawan mas malaki at mas malaking mga numero, at samakatuwid, mas malaki at mas malalaking mga saklaw ng titik, tulad ng Ingles. At lamang sabihin tumagal sa pananampalataya para sa ngayon na katulad kami maaaring magsimula sa Kinakatawan graphics at video at anumang bilang ng iba pang media na kung saan kami ay pamilyar na ngayon. Kaya ito ay CS50, at sa ganitong klase kasabay ng sa iyo ay, muli, napaka marami mga kaklase na may kakaunting makaranas ng bilang iyo. At banggitin ko lamang ito dahil masyadong madalas, kabilang ang bilang kamakailan bilang isa sa presman ang pagpapayo at mga kaganapan sa sopomor huling tagsibol ng pagpapayo kaganapan, madalas naming marinig na mga mag-aaral itatwa kapag darating up sa talahanayan sa CS, mahusay, Hindi ako nag-iisip tungkol sa pagkuha ito intro klase, ngunit hindi ako talagang isang computer na tao. O kaya naman, pero lahat ng tao ay tiyak alam ng higit pa kaysa sa akin. At ko bang ilagay ito sa mga pinakamalaking font maaari, upang ihatid ang mensaheng ito na hindi iyon sa katunayan ang kaso. At kung ikaw ay nagtataka, dapat Ako, sa katunayan, maging dito? Napag-alaman na hindi lamang ito ay kurso ng pamagat Panimula sa Computer Science, ito ay Panimula sa Computer Science I. Kaya doon ay talagang isang pangalawang tulad pagpapakilala. Kaya ikaw ay hindi, sa katunayan, nasa maling lugar. At kabilang sa mga layunin Mayroon akong para sa ngayon ay mapayapa sa anumang naturang mga alalahanin mo Maaaring mayroon, ngunit din upang ipinta isang larawan ng kung ano ang sa tindahan para sa mag-aaral na mas mababa at mas kumportable magkamukha sa kursong ito. Ngunit una, isang salita sa isa sa mga handouts mayroon ka ngayon, bukod sa kung saan ilang bilang ng mga FAQs. Naging paningin ng atin para sa ilang mga oras ngayon upang maipakilala ang isang bagong grading opsyon sa kursong ito - lalo, SAT / UNSAT. Philosophically para sa akin, ito ay magkano magkano, mas mahalaga na ang mga mag-aaral sa ganitong klase makaugnay ang materyal, ay hinamon sa pamamagitan ng materyal, at mag-alala sa ngayon, higit na mas mababa tungkol sa ang mekanika ng aktwal na mga marka at titik na grado sa semestre ni pagtatapos, ngunit talagang yakapin ang kurso at ang kanyang materyal. At talagang nararamdaman ito, higit pa sa pangkalahatan, para sa kung ano ang kawili-wili sa kanila, upang pakiramdam hinamon at gagantimpalaan ngunit walang takot sa pagkabigo. At sa katunayan, ito masyadong ay isang paulit-ulit na sa tema na ito at iba pang mga panguna kurso sa iba pang mga patlang, na mayroon ka ito pangamba pagdating sa paglalagay ng paa sa isa sa mga pamilyar na tubig. Ako sa aking sarili, bumalik noong 1995, ay isang primer anyo. Ako ay napaka nakatuon sa pagiging isang gov concentrator dito. At gayon pa man gusto ko laging lumago up sa isang bit ng isang interes sa computer science. Ako ay palaging hindi karaniwan. Ngunit pagkatapos ay bumalik, kahit na, ako ay nagkaroon na ito ng takot kahit stepping paa sa CS50, kaya magkano nang sa gayon ay hindi ko kahit na mamili ito presman taon. At ang tanging dahilan ko bang ilagay ang isang paa sa pinto sopomor taon ay dahil ako ay pinapayagan upang dalhin ito pumasa / mabibigo. Ngunit kahit na pumasa / mabigo kinakailangan na kumuha ako up ang lakas ng loob upang gumawa ng appointment may Professor Kernehan sa oras, dalhin ito malaking sheet ng papel, at hilingin sa siya para sa kanyang pirma at ang kanyang pahintulot upang galugarin ang mga pamilyar na tubig. At hindi ito ay nakatulong sa mga nakaraang taon na kapag ginagawa ito sa CS50, kapag kami ginamit upang maging pass / mabigo, katulad ng ginagawa dose-dosenang o daan-daan ng iyong mga kaklase mayroon upang makabuo, huwag sana, sa harap ng Sanders sa form na ito, na sa ilang mga pag-iisip ay kumakatawan sa isang kawalan ng kakayahan, Maglakas-loob ko sabihin, upang isagawa ang iyong mga kasamahan 'antas. Alin ang walang katotohanan, ngunit gagawin ko sa tingin mayroong kaisipan na. At mayroong hindi kailanman naging sa kultura ng SAT / UNSAT, o pumasa / mabigo higit pa sa pangkalahatan, sa kursong ito, o talaga ito sa campus. Kaya sa taong ito kami ay nagbago na. Gusto ko maging kalugud-lugod sa kalahati ng ito klase o higit pang mga natapos na up pagkuha CS50 SAT / UNSAT. Sa panahon ng taon, magiging kahanga-hangang kung halos lahat ng tao ay. Pagkatapos noon marahil ay makikipagtulungan kami sa sulat grado sa Harvard College sa mas pangkalahatang. Ngunit para sa ngayon, gagawin namin ito sa loob ng aming sariling globo, at gagawin ko nang buong kasiyahan Hinihikayat ka naming suriin ang mga FAQ at magtanong tulad ng nakikita mong akma, upang sana ay sa iyo, hindi tulad ng sa akin, ay hindi masyadong mayroon na parehong dahilan takot kapag tuklasin kung ano ang malamang ng hindi pamilyar na lugar. Kaya kung ano ang CS50? Ito ay isang panimula sa ang intelektwal na enterprise ng computer agham at ang sining ng programming. Ngunit ano ang nilalaman na talaga ang ibig sabihin nito? Well, kaya sa ngayon, usapan natin ang napaka daglian tungkol kumakatawan impormasyon. Ngunit ipagpalagay na namin talagang gusto upang gawin ang isang bagay na may ito. Kailangan namin upang ipakilala ang mga kuru-kuro ng kung ano ang makikita namin tumawag ng isang algorithm. Algorithm ay isang pamamaraan, isang proseso, isang set ng mga tagubilin para sa paggawa ng isang bagay. At isang algorithm ay maaaring maging isang bagay sobrang simple. Halimbawa, ang isang halimbawa na kung saan ang ilang mga ng maaari kang maging pamilyar ito ay bagay dito. Kaya ang aklat na ito dito ay nagiging napetsahan, ngunit minsan, ito Naglalaman ang isang buong maraming mga pangalan at numero ng telepono. At sa katunayan, kung Nais kong malaman isang tao sa aklat na ito ng telepono - sabihin, may isang taong nagngangalang Mike Smith - Maaari ko mahahanap ang Mike Smith sa anumang bilang ng walang kinikilingan tuwiran paraan. Maaari ba akong magsimula sa simula at lumipat sa pahina 1, hindi doon. Page 2, hindi doon. Page 3. Iyan ba ang algorithm, ay na proseso, tama? Kaya ito ay tama, tama? Ako ay uri ng isang tulala para sa paggawa nito sa na paraan, ngunit kalaunan kalooban ko hanapin ang apelyido S, at sana Mike ay nasa seksyon na iyon, at ako ay naging tapos sa aking mga algorithm. Ngunit tiyak na ito ay hindi madaling maunawaan. Karamihan sa bawat makatuwirang tao sa na ito room hindi sana ay tapos na. Ano ang gusto mo pa? Gusto mo na nawala na tuwid sa gitna, tama? Sa pahapyaw na sa gitna. At natanto, oh, narito ang mga Bb. Kaya Mike Smith, apelyido pagiging Smith, Hindi, malinaw, at pagkatapos ay sa kaliwa kalahati ng libro. Siya ay dapat maging patungo sa S ay nasa kanan. At sa puntong ito, bagaman karamihan sa amin huwag gawin ito sa katotohanan, aming makakaya Literal na mapunit ang problemang ito sa kalahati. [Pagpalakpak AT palakpakan] David MALAN: Salamat sa iyo. [Pagpalakpak AT palakpakan] David MALAN: Maaari mong literal mapunit ito problema sa kalahati, Aalis ako gamit, Literal, ng problema kalahati bilang malaki. Kaya kung ito phone book ay - at ito marahil ay - tungkol sa 1,000 mga pahina, ngayon ito ay lamang 500. Kung gagawin ko ito muli at Napag-alaman kong, oh, sumpain, nagpunta ako masyadong malayo, ako sa TS seksyon, maaari ba akong kaparehong - pasimbolo o literal - punitin ang telepono libro - ito ay talagang lubhang mas madaling oras na iyon. Maaari ko bang literal na punitin ang phone book sa kalahati, Aalis ako ngayon sa hindi 1000, hindi 500 - 250 mga pahina. At maaari ba akong mag-125, at kalahati ng na, at kalahati ng na, at kalahati ng na, hanggang sa wakas ay makikita ko maiwang may lamang ng isang solong pahina. [Tawa] David MALAN: Iyon ang bahagi mabigo ako sa. Isang solong pahina kung saan Mike sana ay. Ngayon mga iba't ibang mga algorithm ay maaaring maging uri ng pagtatasa o sinusuri sa iba't ibang paraan. Ang unang isa ay napaka-linear, tama? I-pahina, hanapin ang Mike. I-pahina, hanapin ang Mike. Ito ay napaka-linear. Kung may isa pang pahina sa telepono aklat, marahil ito ay pagpunta sa tumagal sa akin isa pa pangalawa, ang isa pang yunit ng oras, gayunpaman namin kino-compute ng oras. Kaya maaari kong gumuhit ganito ang linya na ito dito, kung saan bilang ang sukat ng problema ang mga pagtaas mula kaliwa papuntang kanan - phone book ay nakakakuha ng mas maliit sa mas malaking - at ang oras ng pagpunta sa dagdagan sa ang vertical axis, ang mas malaki ang phone book. Kaya n lamang ang isang pangkalahatang variable na computer na siyentipiko gamitin upang kumatawan ilang mga halaga, ang ilang mga numero. Kaya n ay pagpunta sa taasan ang linearly. I-double ang laki ng mga libro ng telepono, ito ay pagpunta sa dalhin ako nang dalawang beses bilang magkano oras, malamang, upang mahanap ang Mike. Ngayon ay maaari ko pa sa smart tungkol sa mga ito, tama? Ako ay nakakakuha nababato mabilis. Sana tapos na ito sa pamamagitan ng twos. Kaya dalawang pahina, pagkatapos ay i-apat, pagkatapos ng anim na, pagkatapos ay i-walo. At maaari ba akong magsimula na lumilipad sa pamamagitan nito ang isang kaunti mas mabilis, kahit na sa minor panganib ng overshooting Mike, ngunit curve na ay hindi pagpunta sa maging lahat na naiiba. Pa rin Ito ay pagpunta sa maging isang tuwid linya, ngunit bahagyang mas mabilis. Ngunit ano ang gagawin ko? Ako talagang ginawang isang bagay sa panimula mas mahusay. Nakamit ko kung ano ang makikita namin tumawag logarithmic oras, pag-log ng n, kung saan ito berde line ay may magkano, magkano, magkano mas tuwid na gilid upang ito. At sa halip, ito ay nagmumungkahi, tulad ng ito uri-uriin ng nalalapit sa infinity kailanman kaya dahan-dahan, na maaaring ko talagang maglaan ng 1,000-pahina phone book, i-double laki nito sa susunod na taon - dahil ipagpalagay ng maraming higit pang mga tao ilipat papunta sa bayan. Kaya ngayon Mayroon akong 2,000 mga pahina, ngunit kung paano marami pang hakbang ay ang mas matalino algorithm ng pagpunta sa tumagal? Isa lang. Ibig kong sabihin, na ang isang malakas na bagay. Kung pumunta kami sa 4,000 mga pahina sa susunod na taon, na pupuntahan dalhin ako lamang ng dalawang karagdagang mga hakbang. Kaya maaari mong magtapon ng mas malaki at mas malalaking problema sa akin, hindi hindi katulad sa web ay ibinabato mas malaki at mas malalaking problema araw-araw sa Googles at Facebooks ng sa mundo, at ito ay hindi tulad ng isang malaking pakikitungo. Dahil ko bang ilagay ang higit pang mga pag-iisip at pag-aalaga sa ang aking mga algorithm na kung saan upang malutas problema mahusay. At sa katunayan, iyon ay magiging isa sa ang layunin ng kursong ito. Kalooban mo, kasama ang mga paraan, malaman kung paano programa. Makikita mo malaman kung paano programa sa anumang bilang ng mga wika. Ngunit sa pagtatapos ng araw, ang mga kurso ay tungkol sa paglutas sa mga problema at pagkuha mas mahusay na sa paglutas ng mga problema - at, tulad ng sa mga kaso na tulad nito, solve problema nang mas mahusay. Ngayon kaya sa ngayon, ginawa namin ito medyo intuitively. Sabihin ipakilala ang isang bagay na medyo generic na tinatawag pseudocode. Kaya namin kalaunan makakuha, sa kursong ito, upang iba't-ibang mga wika programming. Ngunit ngayon gagawin namin ito sa Ingles-tulad ng syntax, kung saan mo lamang uri ng sabihin kung ano ang ibig sabihin sa iyo, ngunit ikaw ay napaka maikli at malinaw sa iyo at huwag mag-alala tungkol sa grammar at kumpletong pangungusap. Ikaw lamang ipahayag ang iyong sarili bilang concisely hangga't maaari. Kaya pseudocode ay Ingles-tulad ng syntax na kumakatawan isang programming language. At patungo sa layuning iyon, hayaan mo akong magpanukala na kami ngayon gawing modelo ang proseso lang namin inilarawan ng pagbibilang ng isang bagay ng kaunti magkakaiba, oras na ito tumatagal tingnan ang limang minutong video na ginawa sa pamamagitan ng aming mga kaibigan sa TED na Tinutukoy kung ano pseudocode ay, tumutukoy sa kung ano algorithmic na pag-iisip ay, at kahit na bagaman ang halimbawa ikaw ay tungkol sa upang makita ang ay, sa ng mismo, sobrang simple, ito ay pagpunta sa simulan upang bigyan kami ng mga kaisipan modelo, ang bokabularyo, na kung saan sa gawin magkano, magkano ang mas kumplikado algorithm masyadong mabilis. [BEGIN-playback ng video] [Nagpe-play ng musika] Tagapagsalaysay: Ano ang isang algorithm? Sa computer science, isang algorithm ay isang set ng mga tagubilin para sa pag-solve ng ilang problema hakbang-hakbang. Karaniwan, ang mga algorithm ay ipinatupad ng mga computer, ngunit hindi namin ay may mga kawani na tao algorithm, pati na rin. Halimbawa, kung paano mo pumunta tungkol sa pagbibilang ng mga numero ng mga tao sa isang room? Well, kung ikaw ay tulad ng sa akin, ikaw ay malamang na tuldok sa bawat tao, isa sa isang oras, at bibilangin up mula sa 0. 1, 2, 3, 4, at iba pa. Well, na ang isang algorithm. Sa katunayan, sabihin subukan upang ipahayag ang isang ito bit mas pormal sa pseudocode - Ingles-tulad ng syntax na kahawig isang programming language. Hayaan N katumbas ng 0. Para sa bawat tao sa room, nakatakda N katumbas ng N plus 1. Paano upang bigyang-kahulugan ito pseudocode? Well, isang linya declares, kaya na magsalita, isang variable na tinatawag na N at initializes nito ng halaga sa 0. Ito lamang ay nangangahulugan na sa simula ng ang aming mga algorithm, ang mga bagay na kung saan kami pagbibilang ay may value na 0. Pagkatapos ng lahat, bago simulan namin ang pagbibilang, hindi pa namin binibilang kahit ano pa. Pagtawag ito variable N lamang ang convention. Maaari ko pa ito tinatawag na pinaka-anumang bagay. Ngayon dalawang linya demarks sa simula ng isang loop, isang pagkakasunod-sunod ng mga hakbang na kalooban ulitin ang ilang bilang ng beses. Kaya sa aming halimbawa, ang mga hakbang na namin ang paglalaan ay pagbibilang ng mga tao sa kuwarto. Sa ilalim linya ay dalawang linya ng tatlo, na naglalarawan kung paano mismo ipagpapatuloy namin tungkol sa pagbibilang. Ang indentation nagpapahiwatig na ito tatlong linya na ulitin. Kaya kung ano ang pseudocode ay sinasabi ay na pagkatapos ng simula sa 0, para sa bawat tao sa kuwarto, bibigyan namin ng dagdagan N sa pamamagitan ng 1. Ngayon ay algorithm na ito tama? Well, sabihin sa Bang ito ng kaunti. Gumagana ba ito kung may mga dalawang tao sa kuwarto? Tayo'y makita. Sa isang linya, namin initialize N sa 0. Para sa bawat isa sa mga dalawang tao, pagkatapos namin dinagdagan N sa pamamagitan ng 1. Kaya sa unang paglalakbay sa pamamagitan ng loop, update namin N 0-1. Sa pangalawang paglakbay sa na parehong loop, update namin N 1-2. At ito sa pamamagitan ng pagtatapos ng algorithm na ito, ang n ay 2, na sa katunayan ay tumutugma ang bilang ng mga mga tao sa kuwarto. Sa ngayon, kaya magandang. Paano ang tungkol sa isang sulok kaso, bagaman? Ipagpalagay na mayroong 0 mga tao sa kuwarto - bukod sa akin, kung sino ang paggawa ng pagbilang. Sa isang linya, namin initialize N sa 0. Oras na ito, bagaman, tatlong linya ay hindi execute sa lahat dahil doon ay hindi isang tao sa kuwarto. At kaya N nananatiling 0, na kung saan ay tumutugma sa bilang ng tao sa kuwarto. Medyo simple, tama? Ngunit pagbibilang ng mga tao nang paisa-isa ay medyo hindi mabisa, masyadong, walang? Tiyak na maaari naming gawin mas mahusay. Bakit hindi mabibilang ng dalawang tao sa isang pagkakataon? Sa halip na bilangin ang 1, 2, 3, 4, 5, 6, 7, 8, at iba pa, kung bakit hindi mabilang, 2, 4, 6, 8, at iba pa? Ito kahit na tunog ng mas mabilis, at ito ay tiyak. Ating ipahayag sa optimization na ito sa pseudocode. Hayaan N katumbas ng 0. Para sa bawat pares ng mga tao sa room, itakda ang N katumbas ng N plus 2. Medyo simpleng pagbabago, tama? Kaysa sa bilang ng mga tao isa sa isang pagkakataon, kami sa halip bilangin dalawa sa kanila sa isang pagkakataon. Algorithm na ito kung kaya dalawang beses bilang mabilis bilang huling. Ngunit ito ay tama? Tayo'y makita. Gumagana ba ito kung may mga dalawang tao sa kuwarto? Sa isang linya, namin initialize N sa 0. Para sa na ng isang pares ng mga tao, pagkatapos namin dinagdagan N sa pamamagitan ng dalawang. At ito sa pamamagitan ng pagtatapos na ito algorithm, ang N ay 2, na sa katunayan ay tumutugma ang bilang ng mga mga tao sa kuwarto. Ipagpalagay na ang susunod na mayroong 0 mga tao sa kuwarto. Sa isang linya, namin initialize N sa 0. Tulad ng dati, tatlong linya ay hindi maisagawa sa lahat, dahil doon ay hindi anumang mga pares ng mga tao sa kuwarto. At kaya N nananatiling 0, na sa katunayan tumutugma ang bilang ng mga mga tao sa kuwarto. Ngunit ano kung mayroong tatlong mga tao sa kuwarto? Paano ito algorithm fare? Tayo'y makita. Sa isang linya, namin initialize N sa 0. Para sa isang pares ng mga taong iyon, pagkatapos namin dinagdagan N sa pamamagitan ng 2. Ngunit pagkatapos ay kung ano? May isa pang hindi ganap na pares ng mga tao sa kuwarto, kaya dalawang linya walang na nalalapat. At ito sa pamamagitan ng pagtatapos na ito algorithm, ang N pa rin ang 2, na kung saan ay hindi tama. Sa katunayan, ito algorithm ay sinabi na maging maraming surot, sapagkat ito ay may pagkakamali. Hinahayaan pagtutuwid na may ilang mga bagong pseudocode. Hayaan n katumbas ng 0 para sa bawat pares ng mga tao sa room. Itakda N katumbas ng N plus 2. Kung ang isang tao ay nananatiling unpaired, itakda ang N katumbas ng N plus 1. Upang malutas ang partikular na problema, na namin ipinakilala, sa apat na linya, isang kondisyon, na kilala bilang isang branch na lamang executes kung mayroong isa tao na hindi kami ng dati ipares sa isa pa. At kaya ngayon, kung mayroong isa o tatlong o anumang kakaiba bilang ng mga tao sa ang room, ito algorithm ngayon ay bilangin ang mga ito. Maaari ba kaming gawin mas mahusay? Well, maaari naming bilangin sa 3s o 4s o kahit 5s at 10s, ngunit lampas na ito, pagpunta upang makakuha ng isang maliit na bit mahirap na punto. Sa pagtatapos ng araw, kung pinaandar ng mga computer o mga kawani na tao, algorithm ay lamang ng isang set ng mga tagubilin sa kung saan upang malutas ang problema. Ang mga ito ay tatlo lamang. Ano ang problema mo malutas may isang algorithm? [END-playback ng video] David MALAN: Iyon ay ang tanging oras Ako ay lumitaw sa form na kartun. Ngunit kung saan ang kuwento na nag-iiwan off, ngayon, ay kung paano namin maaaring gawin mas mahusay? Threes at fours, i-claim namin, maaari naming bilangin mga tao mas mabilis, ngunit aming makakaya gawin sa panimula mas mahusay kaysa sa na? At ako pumusta ng aming makakaya. Kung naming ipakilala ang isang bit ng ating sariling pseudocode dito, pupuntahan ko ipanukala na maaari naming makamit ang isang linya tulad nito. Hindi kami pagpunta upang mabilang mga tao isa, dalawa, tatlo, apat. Hindi namin pagpunta sa pumunta dalawa, apat, anim, walo. Kami ay pagpunta sa gawin sa panimula mas mahusay na sa pamamagitan ng rethinking ang problemang ito, at sa ganitong kaso, pagdaragdag ng isang kung hindi man ay underutilized resource. Sa sandali lamang, Umaasa ako na makikita mo patawarin at katatawanan sa amin sa pamamagitan ng nakatayo sa lugar, kung saan kami ay pagpunta sa magtanong sa bawat isa sa iyo na kumuha sa sa iyong isip ang numero 1. Pagkatapos ka ng pagpunta sa nagiging awkwardly, bilang oras pumasa, hanapin ng ibang tao kung sino ang nakatayo, pagsamahin ang iyong mga numero ng magkasama sa pamamagitan ng pagdaragdag sa kanila up. Ang isa sa iyo ay pagkatapos ng pagpunta sa lahi upang umupo down na una, at ang iba pang mga tao ay pagpunta sa ulitin. Kaya sa ibang salita, sa pamamagitan ng seeding lahat ng sa iyo kasama ang numero 1, at pagkatapos ay pagsasama-sama ng mga 1s sa 2s at mga 2s sa 4s, sa lahat ng tao nagiging sitting down, dapat namin, sa dulo ng algorithm na ito, mayroon lamang ng isang utang kaluluwa na hindi umupo mabilis sapat ngunit sino ang may buong bilang ng mga madla sa kanyang isip. Kaya kung nais mo, sabihin sige at - basa-isa - tumayo sa lugar. At execute. [Karamihan ng tao MURMURING] David MALAN: Alam mo ba kung kung saan ay Lauren? 729? [Karamihan ng tao MURMURING] David MALAN: Ang lahat ng karapatan? [Karamihan ng tao MURMURING] David MALAN: Ang lahat ng karapatan, dapat namin ay malapit na sa wakas. Nakakakita kami ng isang kapwa nakatayo dito pa rin. Sino pa ay kailangang ipares? Kung ka guys nais upang ipares off. May isang tao up tuktok. Bakit hindi ko bang ipahiram sa isang kamay dito. Para sa napakakaunting mga taong pa rin nakatayo, kung ano ang mga numero ng gagawin mo mayroon ka sa iyong isip? MAG-AARAL: 78. David MALAN: 78 plus - na nag-down na nakatayo dito? MAG-AARAL: 39. David MALAN: 39 Plus. Plus sino pa ay nakatayo pa rin? 81? OK, sino pa? Isa pang 81? Wow. At pagkatapos ay kung ano ang nasa likod? MAG-AARAL: 49. David MALAN: 49, plus? MAG-AARAL: 98. David MALAN: 98 plus? Iyan ba ang ibang tao? 12? Magandang trabaho. [Tawa] David MALAN: Oh, 112 - oh. Mahusay! [Tawa] [Palakpakan] David MALAN: Kahit sino pa ang nakatayo pa rin? Paumanhin? MAG-AARAL: 99. David MALAN: 99. Kahit sino pa ang nakatayo pa rin? At ang kabuuang bilang ng mga mag-aaral dito ay tunay, ayon sa - huwag kang magkaroon ng isang numero? Oh, ang aktwal na bilang ng mga tao sa room, ayon sa mga account na ang pagtuturo Fellows ginagawa sa paraan ng lahat sa, noon ay 729. Kaya out ng isang punong silid ng mag-aaral sa Harvard sino binibilang ang kanilang sarili, ang sagot ay 637. [Tawa] David MALAN: So malapit. Ngunit pa rin. OK, sa gayon na ang isang pagtuturo sandali, tama? Ito ngayon ay ilarawan kung ano kami bilang isang bug. Sa isang lugar sa kahabaan ng paraan, ginawa namin ang ilan pang-aritmetika mali, o may taong nakaupo pababa, o pakaliwa, o may nangyaring mali. Ngunit iyon lamang ang fine. Dahil kahit pa rin, namin Nakakuha malapit sa katangian. At gusto ko magtaltalan na aming nakuha sa maling sagutin ng maraming mas mabilis kaysa Gusto ko magkaroon ginagamit ang aking mga mas linear na diskarte. Kaya sabihin ipinapalagay namin na sa katunayan na makakuha itama, ngunit ngayon sa tingin tungkol sa kung ano ang nangyayari sa bawat oras, kumpara sa aking sariling walang muwang pagturo algorithm. Ang isa, dalawa, tatlo. Kung mayroong mga talagang 729 o 637 mga tao dito, na sana ay kinuha sa akin Literal na 637 o 729 pointings ng mga daliri at incrementing aking kabuuang bilang. At maaari kong gawin ng kaunti mas mahusay sa pamamagitan ng pagpunta dalawa, apat, anim, walo, at dalawang beses na bilis, maaari ring maging triple o may apat na bahagi, depende kung gaano kahusay ang maaari kong gawin na pagbibilang sa aking ulo. Ngunit ang diskarteng ito na iyong kinuha guys sa panimula ay naiiba. Dahil sa simula, lahat ng ka nakatayo up. Kaya ang lahat ng 729. At pagkatapos ay literal kalahati ng umupo ka pababa. At pagkatapos na, isa pa kalahati ng umupo ka pababa. At pagkatapos na, isa pa kalahati ng umupo ka pababa. At ang kabuuang bilang ng beses na ikaw guys sana nakaupo pababa ay tinatayang walo o siyam o sampung beses kabuuang, depende sa kung ano ang aming kabuuang bilang ay. At maaari naming uri-uriin ng gawin ito ang iba pang mga paraan. Kung nagkaroon kami 1024 mga tao sa kuwarto, ang kabuuang bilang ng beses na maaari mong maghati 1024 mga tao ay 10. Ngayon isipin ang tungkol ito sa ang iba pang mga direksyon. Ipagpalagay, ridiculously, na nagkaroon kami, sabihin 4000000000 mga tao sa kuwartong ito, o isang bahagyang mas malaking kuwarto. Ilang beses gusto namin ang nawala sa pamamagitan ng algorithm, tulad na kalahati ng klase na nakapatong ang down? Lamang Ito ay pagpunta sa tumagal ng 32 tulad pagpapatakbo, kahit na sa isang klase ng mga laki 4000000000. Bakit? Dahil 4000000000 napupunta sa dalawang bilyon, napupunta sa isang milyong, napupunta sa 500 milyong, napupunta sa 250 milyon, tuldok, tuldok, tuldok. Maaari lamang akong gawin iyon division ilang 32 beses, sa puntong, lahat ng tao maliban sa ang isang tao ay nakatayo sa kaliwa. At iyon, masyadong, ay isang uri ng isang malakas na ideya na nagiging susubukan naming pakikinabangan sa kursong ito, at sa programming at computer science higit pa Sa pangkalahatan, ang mga mikrobyo ng isang ideya sa kung saan maaari naming pagkatapos ay malutas problema magkano, mas powerfully. Kaya't nagsimula kaming medyo simple na may pseudocode at isang tao sa isang silid, ngunit ngayon na may isang buong room na puno ng mga tao pa kami tapos sa panimula mas mahusay. Well, sabihin na ngayon ang paglipat mula sa pseudocode sa ilang mga aktwal na code. Ang wika ikaw ay tungkol sa upang makita ang mangyari upang tawagin ang JavaScript, at babalik kami sa patungo ito katapusan ng semestre. Ito ay isang programming language na sa iyo gamitin upang gumawa ng mga website at iba pang mga katulad software na mga araw na ito. At hindi na namin ginamit ito, salamat sa isang kaibigan sa atin sa Stanford, upang i-encode ilang mga nakatagong impormasyon dito. Ito ay ang sining ng steganography, kaya na magsalita, kung saan maaari mong itago impormasyon sa kung ano ang kung hindi man ay tila maging ingay o isang ganap na naiibang larawan nang sama-sama. Ngunit naka-embed sa ito partikular na larawan ay sa katunayan ng isang lihim na mensahe ng klase. Kaya ipaalam sa akin sige at hilahin pataas ang parehong imahe dito, ito oras sa isang web browser. At pupuntahan ko iwagayway ang aking mga kamay sa ilan sa ang mga detalye para sa araw na ito, lalo na para sa mga ng sa iyo kung sino ang kamukha hindi lamang JavaScript ngunit Griyego, bilang isang ganap na hindi kilalang wika. Ngunit ito ay isang halimbawa ng isang programming language. At sa ngayon, lumabas sa pananampalataya na ang unang linya ng code - at sa pamamagitan ng code, ko lang ang ibig sabihin ng teksto. Text na maaaring literal ko na-type sa Microsoft Word, kung ako ay nagkaroon ng karapatan software upang pagkatapos ay gawin ang isang bagay na may ito. Programming source code, programming code, ay talagang lamang ng teksto, at ito mukhang naiiba batay sa kung ano ang wika ang ginagamit mo, hindi hindi katulad ng Ingles at Espanyol at Russian lahat naiiba ang itsura kapag nag-type ang mga ito sa iyong keyboard. Kaya ang unang linya, para sa ngayon tumagal sa pananampalataya, simpleng bubukas isang graphic mula sa internet, maingay na graphic lang namin nakita. Ang susunod na linya dito ay isang halimbawa ng isang loop, at hindi na namin talaga nakita na pareho magulong pag-uusap sa video TED. Ang isang loop ay isang bagay na mangyayari muli at muli, at kahit na ito talagang mukhang misteriyoso, na may para sa mga keyword, at ang ilang mga panaklong, at ilang semicolons. Kami ay bumalik sa na bago ang haba, ngunit loop na may mahalagang ay na nagsasabi sa programa, umulit sa ibabaw ng lahat ng mga maingay na tuldok, mula kaliwa hanggang kanan, itaas hanggang sa ibaba. Dahil sa pagtatapos ng araw, isang larawan i ito - at maaari mong talaga uri ng makita ito sa projector na ito - ay talagang lamang ng isang grid ng tuldok. Kaya maaari naming tukuyin ang bawat isa sa mga tuldok sa pamamagitan ng isang coordinate, x, y, at may ito programa, ngayon maaari naming magsimula upang gawin ang isang bagay sa mga tuldok. Kaya kung ano pupuntahan ko sige dito at huwag ay Pupunta ako sa gumawa ng ilang mga pagbabago. Unang pupuntahan ko sige at mapupuksa ng lahat ng na maberde at mala-bughaw ingay, at pupuntahan ko sige at i-type ang mga sumusunod na tinatanggap na misteriyoso syntax. im para sa imahe. itakda bughaw sa lokasyon x, kuwit, y lokasyon, sa 0. Sa ibang salita, gusto kong lang i-off ang lahat ng mga asul na tuldok sa na larawan. Pupunta ako sa sige ngayon at i-click ang Run ito / I-save ang button, at bibigyan ka mapansin sa kanang bahagi, ang lalabas na imahe ay lilitaw. Ngayon nito super berde, ngunit hindi iyon Nakakagulat, dahil ako literal na naka- off, sa pamamagitan ng paggawa ng isang 1 0, ang lahat ng ang mga asul na sa larawan. Well, ngayon natin gawin ito nang kaunti pa. im para sa mga imahe, setGreen tuldok, x, y. At na lamang ay nangangahulugan na umulit mula sa kaliwa sa kanan at pagkatapos ay itaas hanggang sa ibaba. I-off na may halaga na 0, pati na rin. I-save. At sa projector, maaari mong hindi talaga talaga makita ang anumang bagay sa lahat. Sa aking laptop screen, kung peer ko sa loob lamang ang tamang paraan, maaari ko bang makita ang isang bit ng isang imahe, dahil sila pa rin ilan sa pula doon. Kung kailanman na iyong narinig ang acronym RGB - pula, berde, asul - ito ay nagre-refer na ito sa komposisyon ng isang larawan gamit ang lamang ang mga tatlong kulay. At ngayon, kami ay itinapon ang layo lahat ng berde, asul lahat, ngunit mayroong hindi magkano pula. Kaya ipaalam sa akin pihitan up ang pula. Paano ko gawin iyon? Well, una, pupuntahan ko magtanong ang program na ito sa isang katanungan. Pupunta ako sa sige at sabihin call ito isang variable, tulad ng sa algebra. Maaari kang magkaroon ng x o y o z. Pupunta ako sa ipinapahayag sa isang variable at sabihin, ilagay ito sa variable, pansamantala, ang halaga ng mga larawan getRed halaga sa x, y. At muli, kami ay bumalik sa lahat ito ng detalye sa hinaharap. Ngunit para sa ngayon, lang ang dadalhin sa pananampalataya na linya na ito ay humihingi sa programa, kung ano ang ay ang pula halaga sa x, y? Sa partikular na tuldok? Pagkatapos ay pupuntahan ko gawin ang isang bagay na ito. Pagkatapos Pupunta ako sa mga imahen na tuldok set pula sa x, y, y ngunit oras na ito pupuntahan ko mapalakas nito sa pamamagitan ng paggawa ng pulang beses, sabihin nating, 10. Kaya taasan ito sa pamamagitan ng isang factor ng 10. Hayaan akong mag-zoom out at ngayon click ma Patakbuhin / I-save. At voila, iyon ay naroon ang buong oras, kahit na ang aming mga mata ng tao Hindi ma masyadong makita ito. Kaya muli, ito ngayon ay tunay na code, isang halimbawa ng isang wika na kami ay dumating pabalik sa bago ang haba. Ngunit mapagtanto, lalo na ng mga mo na walang ganoong karanasan, ito ay lubos na Malapit na kami ay ating sarili maging sumusulat code na tulad ng doon. Sa katunayan, isang kasangkapan na kung saan ikaw ay ang lahat ng medyo pamilyar, marahil, ay CS50 ni sariling kurso-shopping tool, na noon ay talaga rebooted tag-init na ito sa pamamagitan ng ilang mga CS50 ng sariling dating mag-aaral, ngayon i-TFs. Kaya ito ang mangyayari sa maging isang website na binuo sa isang wika na tinatawag na PHP. Ito ay gumagamit ng isang database na tinatawag na MySQL, mga bagay na kung saan kami makakuha ng aming mga kamay marumi mamaya sa semestre. Ngunit naniniwala ito o hindi, kahit na isang bagay tulad nito sa huli binabawasan sa pinakasimpleng ng mga loop at kundisyon at sanga, tulad ng mga nakita natin lamang ilang sandali ang nakalipas sa video TED. Ano naisip ko na gusto kong gawin ngayon ay hindi ibahagi lamang ng isang bagay na namin ang staff ginawa para sa mga campus, ngunit sa halip ng isang bagay isang dating mag-aaral - tatlong mga mag-aaral, sa katunayan - ginawa ito nakaraang taon, Sierra, Daniel, at Sam, ang huling ng kanino ay walang bago programing karanasan kapag kinuha niya CS50. At para sa kanilang huling proyekto, ang mga ito exhibited, sa CS50 Fair, isang application na tinatawag na wrdly, na isang web-based na programa para sa kung saan sila ginawa ang video na ito na naisip ko na gusto kong ibahagi sa bigyan ka ng isang pakiramdam ng pagkakaroon ng lamang kung ano ang maaari sa pamamagitan ng pagtatapos ng termino. [Nagpe-play ng musika] David MALAN: Iyan ay mula sa Linggo Zero sa Linggo 12 na ito nakaraang taon. [Palakpakan] David MALAN: Bilang isang teaser, masyado, talaga sa paghahasa iyong gana sa pagkain ay ang kung ano ang posible, maaaring nakakita ka na nito, o maaaring sa lalong madaling panahon makita, market.cs50.net, isang bagong tool na koponan ng kurso ay may pinagsusumikapan, oras na ito sa pakikipagtulungan sa Harvard Mag-aaral Mga Ahensya, tulad na nagsisimula sa taong ito at sana ay magpatuloy sa ito darating na tag-araw, magkakaroon ka ng standard pagkakataon sa campus upang bumili at magbenta ng mga bagay ng interes sa iyo. At sa pakikipagsosyo sa pamamagitan ng HSA, bibigyan ka rin magagawang i-drop ang mga item off sa isa sa HSA aktwal na tindahan sa ilang mga punto sa hinaharap, upang proxy bagay, lalo na bilang ka magtapos at hindi kinakailangang nais na itapon ang mga bagay, ngunit talagang bayaran ito ipasa sa mga tao na maaaring sundin mo dito sa campus. Kaya higit pa sa na sa darating. Ngunit ng kaunti pa concretely, isang kasangkapan na dumating out sa CS50 sa kamakailang taon, na kung saan ang ilan sa iyo ay maaaring maging pamilyar at iba pa ng sa iyo ay maaaring maging Pag-Google ngayon, sa CS50.net/2x, makikita mo makahanap ng isang link sa isang extension ng Chrome na kung saan ay nagpapakilala ng kung paano maaari mong gumamit ng JavaScript, na parehong wika namin ginamit sa Eiffel tower ng ilang sandali ang nakalipas, upang ipatupad 2x playback bilis para sa lahat ng mga video Harvard iSites. Ito ay isang bagay na binuo sa sariling video CS50 ni player. Ngunit ito, masyadong, kung nagsimula ka upang kumuha sa lupa sa source code, na kung saan bibigyan namin ng maligaya gawing available, makikita mo kung paano maaari mong kahit na malutas problema tulad ng iyon, accelerating widgets sa mga website na may na kung saan ikaw ay isa nang mahusay pamilyar. Kaya isang salita ngayon sa kurso at inaasahan at kung ano ang namamalagi maaga. Sa pangkalahatan, ipapakita namin sa katunayan magtipon dito tuwing Lunes at Miyerkules - bagaman ito Biyernes, gagamitin namin ipunin dahil Pamimili ng Linggo - 1:00-2:00, bagaman minsan hanggang 02:30. Given na maaari mong samakatuwid nais o kailangang tumagal ng ilang klase sa 02:00 pasulong, o kahit na bago, huwag mapagtanto ang Siyempre ay suporta ng kung ano ang tinatawag na sabay-sabay na pagpapatala, kung saan bibigyan namin ng suportahan ang isang petisyon sa Board Ad at ang iyong mga residente deans sa iyong ngalan kung ikaw ay may isang kontrahan sa isang lugar sa ito 1:00-2:30 range. Tumungo sa URL na iyon para sa online karagdagang detalye. Ngunit sa mga tuntunin ng istraktura sa suporta na characterizes CS50, para sa mga mag-aaral mas at mas kumportable magkamukha, namin nag-aalok ng natatanging mga track ng mga seksyon. At ito ay isang pares ng mga linggo off, ngunit bago mahaba, hihilingin sa iyo bilang sa iyong kaginhawahan antas. Sigurado ka kabilang sa mga mas kumportable, mas kumportable, o sa isang lugar sa pagitan? At kami ay may tatlong natatanging mga mga track na magsilbi sa tiyak ang mga madla. Kaya nang walang punto sa term na dapat mong kahit na pakiramdam na tulad mo nakikipagkompetensya laban sa anumang mga mag-aaral na may higit o mas mababa kaysa sa background mo. Sa katunayan, ang mga kurso ay sinadya upang maging mas collaborative at magkano mas bukas kaysa sa na. Sa mga tuntunin ng mga hanay ng mga problema, bibigyan ka hanapin, masyadong, na bukod pa sa standard edition ng problema bawat linggo itakda, may madalas isang "Hacker edition "na sinadya upang ma-target sa 5% hanggang sa 10% o kaya ng demographic kung sino ang talagang kasama ng mga mas kumportable at nais nang higit pa ng isang hamon kaysa sa standard edisyon ng na pset Inaasahan ng. Higit pang mga detalye sa mga maging natagpuan sa syllabus. Ngunit din sa doon ay matatagpuan detalye sa kurso late araw. Karaniwan problema nagtatakda ay dahil sa Huwebes. Gayunpaman, maaari mong pahabain ang marami sa iyong deadlines ito pagkahulog mula Huwebes sa Biyernes lamang sa pamamagitan ng pagkamit sa amin nang kalahating, kaya na magsalita, ng pagsagot ng ilang pagpapainit katanungan sa ilan sa mga problema sa linggong ito hanay, na Awtomatikong pagkatapos ay magbibigay sa iyo ng dagdag na 24 na oras. Hindi rin namin i-drop ang iyong mga pinakamababang puntos, bilang bawat ang syllabus. Upang mabigyan ka ng ideya ng kung ano ang problema sets ay - dahil ito ay sa katunayan problema ang kurso ni Nagtatakda na sa huli tukuyin ang halos bawat karanasan ng mag-aaral, higit pa kaysa sa kaya aralin, mas kaya kaysa sa mga seksyon, mas kaya kaysa sa karamihan ng anumang iba pang aspeto ng kurso. Noong nakaraang taon, halimbawa, sinimulan namin, bilang sisimulan namin sa taong ito, may scratch. Partikular na ito Biyernes, gagamitin namin, para sa lang oras isang araw, isang graphical programming language, na kung saan bibigyan namin ng simulan programming sa pamamagitan ng pagkaladkad at bumababa piraso puzzle na lamang magtipon pisikal na kung ito ang may katuturan na gawin ito lohikal. Sa susunod na linggo, bibigyan namin ng mabilis na paglipat sa C, ang isang medyo lumang ngunit napakaliit at simpleng wika na magbibigay-daan sa amin upang talaga pumunta 0-60 sa ibabaw ng kurso ng lamang ng ilang linggo, at pagkatapos ay pinanaluhan parehong mga kakayahan at kaalaman ng basic programming constructs sa mas mataas na antas ng mga wika tulad ng PHP, JavaScript, at iba pa pa rin. Noong nakaraang taon, sa ikatlong pset sa kurso ay na ng cryptography, isang domain na tukoy sa application kung saan namin hinamon mga mag-aaral upang ipatupad ang anumang bilang ng mga ciphers, mga programa na kung saan sa pakikipag-agawan ipaliwanag o impormasyon, upang i-encrypt ito. Para sa mga Hacker edition, sa pamamagitan ng kaibahan, Ibinigay namin ang Hacker mga mag-aaral ng isang file mula sa isang standard na computer na naglalaman ng Unix user name at password, ang huli ng kung saan ay naka-encrypt, at kami hinamon ang mga Hacker mga mag-aaral upang i-decrypt, bilang pinakamahusay na magagawa nila, mga password, mga pa rin sa na parehong domain. Pag-aagawan, isang laro na kung saan ang ilang mga ng ikaw ay marahil pamilyar. Ang isang piraso forensics, kung saan hinihiling namin mga mag-aaral upang mabawi ang data na iyon ay hindi naging kung hindi man ay tinanggal mula sa aking sariling mga digital compact flash camera card, sa pamamagitan ng aktwal na pagsusulat ng software upang malaman, kung saan ay ang zeroes mga bago at sa na digital camera na dati binubuo ng isang JPEG graphic? Isang hamon ng klase noong nakaraang taon kinasasangkutan ng pagsusulat ang pinakamabilis na spell-checker hangga't maaari, na nakikipagkumpitensya laban sa mga kaibigan at mga kamag-aral kung nais nilang. Pagpapatupad n espongha magtampo ', isang compression programa. At pagkatapos ay nagtatapos ang semestre may CS50 Finance, isang web-based na application na may na lumikha ka ng isang ETrade-tulad ng website upang bumili at magbenta ng mga stock, kaya upang magsalita, sa pamamagitan ng aktwal na kumukuha ng halos real-time quote Yahoo! Pinansya. Ano ang hindi namin ginawa noong nakaraang taon ay isa problema set na nananatiling gayunman isang paborito. Kung hindi mo pa nawala sa shuttle.cs50.net, makakakita ka ng gumagamit interface ng isang maliit na tulad nito. Pero dalawang taon na ang nakakaraan, ang klase ipinatupad, gamit ang Google Maps at ang Google Earth plug-in at isang maliit na bit ng katalinuhan sa pagmamaneho sa paligid ng campus, sa gayon ay ang layunin ng larong ito ay, tulad ng maaari mong makita ang ilan sa mga mukha, ay upang magdala ng campus sa paligid hinahanap staff, pagtuturo Fellows at Cas, at kapag mo, paglalagay ng mga ito papunta sa iyong shuttle bus. Wala sa kanila ang talagang mukhang dito, kaya kami ay pagpunta sa magpasok ng isang impostor code. [Tawa] David MALAN: Mayroon kaming pumunta. Ayos lang. At dito ngayon ay ang mga tauhan laced sa buong campus. At bilang maaari mong makita, sa kanang kamay bahagi ng screen, ang shuttle bus May laman ang upuan. At ang layunin ay upang isulat ang code na kung saan upang gayahin ito pagmamaneho at pagpili ng up at pag-drop off ng pasahero. Na ang isa, masyadong, gamit ang isang wika tinatawag JavaScript. Kaya mapagtanto na programa tulad na kalooban maging sa aming parehong tilapon ito taon, pati na rin. Sa mga tuntunin, ngayon, ng karagdagang suporta, mayroon kaming oras ng opisina. Tulad ng maaaring nakakita ka sa iyong sariling bahay dining hall o sa Annenberg, kami ay magiging sa dining bahay halls apat na gabi sa isang linggo - Leverett, Pfoho, Eliot at Annenberg sa taong ito, 20:00-23:00. At kung ano ang naisip naming gawin ito taon ay isang bagay ng kaunti naiiba. Kung narinig rumblings nakaraang taon na ito ay isang bit masyadong nakababahalang, ito opisina na oras taon, dahil kakailanganin namin ilarawan susunod na linggo, ay magiging mas organic, kung saan sa pagdating, ikaw ay despatsado sa isang partikular na talahanayan kung saan maraming mga kawani ng mga miyembro naghihintay, at kami ay gumawa ng mga bagay mas organiko. Wala nang pila, wala nang mga iPad, ngunit sa halip ay may mas kilalang-kilala pag-uusap sa paligid ng isang talahanayan ng lang walong o kaya mag-aaral, kaya na namin humigit-kumulang na ang pakiramdam ng kung ano man ay magiging isang mas maliit na klase. Nag-aalok kami, pati na rin, ang mga bagay na aming tinatawag walkthroughs, video kumuha sa advance sa pamamagitan ng isa sa mga pagtuturo sa kurso ng Fellows, Zamyla, kung saan siya ay nagtuturo sa iyo sa pamamagitan ng problema ang linggong ito sets, nag-aalok ng mga tip at trick para sa hamon na maglatag maaga. At pasalungat, pagkatapos ng mga hanay ng mga problema dahil, sa taong ito, gagamitin din namin ilabas maliit na clip tumawag post-mortems na talaga ituturo sa iyo kinatawan solusyon, parehong mabuti at masama, sa pamamagitan ng na maaari mong ipahiwatig kung paano maaari kang magkaroon ng o dapat magkaroon ipinatupad ang iyong sariling solusyon. At kung ano ang makikita namin nag-aalok para sa unang pagkakataon sa taong ito pati na rin, lalo na para sa mga mag-aaral na mapakinabangan ang kanilang mga sarili ng mga kurso ng iba pang mga mga mapagkukunan ngunit gayunman ay struggling lahat ng masyadong maraming, ang mga kurso ay mismo ipares ang mga mag-aaral, bilang mga mapagkukunan pinahihintulutan, may tutors upang ang mayroon kang isang mas kilalang-kilala pagkakataon kaysa house halls dining payagan para sa isa-sa-isa sa tulong. Ngayon isang huling sulyap sa ilang mga ng mga laro sa dulo paningin. Maaari kang maging pamilyar sa ang CS50 Hackathon. Well, darating na ito Disyembre, mula 8:00 PM sa 7:00, sa simula ng Binabasa ang Panahon, ay magiging isang pagkakataon upang lumikom sa mga kaklase - ito ay magiging sa paligid 9:00 - sa panahon kung saan mo dive sa iyong panghuling proyekto pagpapatupad sa tabi kaklase, kaibigan, at pagkain. Ito ay magiging sa paligid ng 01:00, kapag ang unang batch ng mga dating na pagkain. At ito ay tungkol sa 04:00 na partikular na taon sa CS50 Hackathon. Ngunit ang tunay na rurok ng golf ay nilalayong ang Fair CS50, isang campus-wide exhibition ng iyong sariling mga huling proyekto, na kung saan ang pamilya at mga kaibigan ay ang lahat Inimbitahan, pati na ang aming mga recruiters at ang aming mga kaibigan mula sa industriya. Ito ay, halimbawa, ay isang sulyap ng 2,000-plus mga taong pinasukan nakalipas na taon. Expression na tulad nito ay hindi bihira, at katulad ang ginagamit ng iyong kaklase tuwa sa mga bagay na iyong natapos. At talagang, patungo sa layuning iyon, mayroon kaming isang panimula-ng-matagalang kaganapan, pati na rin. Kung ang mga bagay tulad ng pag-apila ito sa iyo, o ikaw ay hindi bababa sa hindi karaniwan bilang sa kung ano ang ito, alam na ang isang bagong tradisyon ng kurso ay tinatawag na CS50 Puzzle Day. At ito ay instituted isang pares ng mga taon pabalik sa talagang magsenyas sa campus na computer science ay hindi tungkol sa mga programa, at ito ay tiyak na hindi tungkol sa embracing lamang ang mga mag-aaral na mayroong naunang karanasan. Ito ay talagang tungkol sa problema-tuos mas pangkalahatang paraan. At kaya palaisipan Araw, sa loob ng nakaraang ilang taon na ngayon, ay lumaki sa isang magaling pakikipagsosyo sa aming mga kaibigan sa Facebook, kung saan makikita doon maging hindi kapani-paniwala premyo at pizza sa kabuuan ng ilog sa ang i-lab na ito darating na Sabado. Magtungo ang mga URL na iyon na may dalawa o tatlong mga kaibigan kung nais mong makibahagi sa bagong tradisyon. Kaya Gusto kong hilingin na panatilihin mo ang isa bagay sa isip, at kami nakakuha lang dalawang minutong clip sa kung aling upang isara ngayon. 73% ay ang bilang matandaan. Cake, masyadong, ay naghihintay sa iyo sa labas na ito transept bilang ipinid namin sa loob lamang ng ilang sandali, na kung saan ay isang tradisyon ng mga kurso, pati na rin. Ngunit ito ay ang susi quote mula sa syllabus ng course na dapat tandaan. Ano ang mahalaga sa huli sa kursong ito ay hindi kaya magkano kung saan sa huli kamag-anak sa iyong mga kaklase ngunit kung saan sa iyo, sa Linggo 12, magtapos up na may kaugnayan sa ang iyong sarili sa Linggo 0. Ngunit ang sulyap na kami ay iniwan mo may dito ngayon ay ang huling isa dito ayon sa aming parehong Daniel, na ginawa ang wrdly video sandali lamang ang nakalipas. Iwan ko sa iyo na may ganitong sulyap ng kung ano ang namamalagi maaga. At tulad ng ginagawa namin ito, kung maaari kaming magkaroon CS50 mga tauhan mula sa harapan ng kuwarto na dumating sa hanggang sa entablado upang ipinta lahat ang higit pa sa isang visual na larawan bilang sa kung ano ang naghihintay sa iyo sa taong ito - pagkuha ng mahirap. Susubukan naming tapusin na ito dito sa screen. [Nagpe-play ng musika] David MALAN: Ito ay CS50. [Music - Matt & Kim, "ITO oo"] Tagapagsalita 1: gustong-gusto ko CS50 higit sa pusa. Tagapagsalita 2: Whoaaaa! [Tawa] David MALAN: Ito, pagkatapos, ay CS50. Kami ay makita ka sa Biyernes. [Palakpakan AT pagpalakpak] Tagapagsalaysay: Sa susunod na CS50, isang onstage demo ay hindi pumunta bilang binalak. David MALAN: Gusto naming mahanap Mike Smith sa aklat na ito ng telepono. Well, ano ang iyong instincts? Maaari ko halos tumalon sa gitna ng ang phone book, sumulyap pababa, na makita Ako sa M, at alam ko na ngayon na Mike Smith ay hindi sa kaliwa. Siya ay dapat maging sa kanan. At kaya sa puntong ito, kami Maaari literal mapunit - sa puntong ito, maaari naming literal mapunit - sa puntong ito, maaari naming pasimbolo mapunit ang phone book sa kalahati. [UKELELE pagkala-kalabit]