[MUSIC PLAYING] Ceci est CS50-- Harvard L'introduction de l'Université à l'intellectuel entreprises de l'informatique et l'art de la programmation. Et mon nom est David Malan et Je pensais juste ce matin, il a été étonnamment 20 ans aujourd'hui depuis ma dernière assis où vous les gars faites maintenant. Il était 1,996. J'étais un étudiant en deuxième année, et je prenais CS50 pour la première fois. Et je l'avais même pas eu le courage de prendre moi-même première année, en partie à cause du temps. Informatique me était comme, meh. J'étais un peu d'un geek de plus en plus , mais je ne l'ai pas vraiment avoir une intellectuelle intérêt pour ce qui est apparu juste être tout un tas de les gens tout le temps de programmation. Et j'avais peur d'être honnête. La science des cours et ordinateur plus généralement eu et dans une certaine mesure, a encore cette réputation d'un champ à méfiez-vous, si seulement parce que beaucoup d'entre nous ne sont pas familiers avec elle et peu sûr de lui. Et ce fut vraiment pas jusqu'à ce que je magasiné cette classe que sophomore fall-- et même alors, je n'inscrit parce que le professor-- un de mes premiers mentors, Brian Kernighan maintenant à Princeton-- m'a permis de prendre la passe de classe sûr. Et en effet, voilà pourquoi aujourd'hui, nous permettons et encourageons les étudiants à prendre cette classe assis / unsat. Et alors seulement, par le fin du semestre je me rends compte que, wow, ce était pas un tel champ inconnu. En effet, il était très stimulant terrain, et plus excitante, notamment par la suite, comme je l'ai suivi des cours de Arts dramatiques 101 et latine A et puis finalement grad archéologie de l'école, ai-je vraiment commencer à voir le intersections de ce champ, ordinateur la science, les sciences humaines, sciences naturelles, les arts, la médecine, etc. Et pour que ça qui est tellement ordonnée au sujet de l'informatique en fin de compte, comme nous espérons que vous aurez see-- est son applicabilité à ces autres domaines, et comment vous pouvez prendre un certain d'aujourd'hui et le semestre de des idées et des compétences pratiques retour à votre propre nom de domaine, et effectivement explorer cette intersection des arts libéraux et les sciences. Donc, 73% d'entre vous, si la dernière année est une indication, ont jamais pris un cours CS avant. Donc, si, comme moi, vous êtes sentir un peu peur, ou franchement vous n'êtes pas vraiment pourquoi vous êtes encore ici. Peut-être que vous venez de suivi quelques-uns amis à Sanders en ce moment. C'est tout à fait bien. Le but ici est d'accrocher vous et pour vous rassurer que si vous ne regardez à la gauche et vers la droite, vous allez voir avec ses camarades de classe comme l'expérience peu ou autant que vous vous pourriez avoir. Et en effet, nous partagerons quelques statistiques plus tard aujourd'hui à ce que les données démographiques de la classe regarde généralement comme. Et comme ajouté reassurance-- et cela nous ne veux dire que j'ai pris au cours le dans de quelques années Le programme du cours est que ce qui est finalement this-- questions dans ce cours est pas tellement où vous finissez up par rapport à vos camarades de classe, mais où vous en semaine 11, la fin de la semestre, finissent par rapport à vous-même à la semaine 0, ce qui est où nous sommes ici aujourd'hui. Et voici ce que je réalisais toutes ces années auparavant. Et je sais que beaucoup de les classes disent cela, mais il est particulièrement vrai dans la science informatique. A la fin de la journée, ce champ est familier car il était pour moi et peut-être à vous, est vraiment à peu près la résolution de problèmes. Et en tant que telle, elle ne dispose ce applicabilité pour obtenir d'autres domaines. Et en effet, si nous avons essayé pour distiller ce que cela signifie, c'est la résolution de problèmes dans son essence, j'ose dire. Il y a donc tout ce qu'il input-- est que vous essayez de résoudre. Il y a sortie, qui est je l'espère la solution à ce problème. Et puis, comme nous le ferions dire en informatique, il y a cette boîte noire dans la milieu que vous ne faites pas nécessairement avoir à se soucier de la façon dont cela fonctionne. Vous vous éventuellement pourrait mettre en œuvre ce qui est à l'intérieur de cette boîte. Mais pour les besoins d'aujourd'hui et de plus généralement dans la vie, tout ce que vous souciez est que ces problèmes sont résolus. Et ce que ce cours est en fin de compte au sujet explore l'intersection de ces entrées et sorties, et ces soi-disant algorithmes, comme nous le verrons bientôt, qui mettent en œuvre ce qui est dessous là, le capot. Mais ces entrées et ces outputs-- qu'est-ce que signifie réellement? Eh bien, à la fin de la journée, nous avons besoin d'une certaine façon de représenter l'information. Cela est particulièrement vrai dans un ordinateur, qui, comme la fantaisie et complexe, car elle peut sembler, est un dispositif assez stupide. Il faut que ce soit à partir electricity-- un câble ou d'une batterie input-- et puis il produit quelques-uns réponses préprogrammée à l'écran. Mais comment pouvons-nous obtenir de commencer à y terminer? Eh bien, ce qui est un problème à résoudre? Eh bien, peut-être que nous pourrions, à le début de tout semestre, essayer de prendre les présences dans une chambre comme ça. Donc, je pourrais faire comme un, deux, trois. Ou peut-être, si je l'ai fait en quelque sorte de garder une trace de myself-- garder une trace de things-- Je pourrais rapidement manquer de doigts. Donc, je pourrais juste faire marks-- un de hachage personne, deux, trois, quatre, cinq, six, sept huit. Et nous avons tous probablement fait cela, que ce soit sur vos mains ou sur une feuille de papier. Et cela est en fait juste quelque chose appelé notation-- unaire où si vous avez une seule lettre dans votre alphabet, un ou hachage marque dans ce cas, pour chaque entrée que vous voulez compter, vous avez besoin de mettre bas l'un de ces letters-- une de ces marques. D'accord. C'est tout beau et bon et pas si compliqué que ça. Mais les ordinateurs ne sont pas tous beaucoup plus compliqué. En effet, la plupart d'entre vous avez probablement savoir même si vous avez pas vraiment considéré ce que cela signifie, que ordinateurs ne comprennent que des zéros et ones-- le soi-disant système binaire. Nous, les humains, en revanche, sont si beaucoup plus sophistiqué dans la mesure où comme nous l'entendons zéros à travers neuf. Mais même si binaire est, à première vue, pas du tout familier, il se trouve qu'il est un peu comme les systèmes et les idées que nous savons déjà. Ainsi, par exemple, considérez ceci. Ceci est juste une séquence de symboles. Et vous tous, quand, regardant, probablement penser 123-- rien vraiment intéressant. Mais pourquoi est-il ce nombre, 123? Ceux-ci sont seulement sur glyphes l'screen-- seulement les modèles que quelqu'un aurait tiré ou dactylographiée. Mais si vous êtes comme moi, vous souvenez probablement de l'école primaire qu'il ya sorte de des colonnes ou des lieux ici. Il y a la place de l'un et l' de dix lieu et place de la centaine. Et la raison que ce soit 123 et pas seulement un motif de trois symboles En effet, bien sûr, si l'on en avoir un à la place des centaines, vous faites le calcul de 100 fois un, puis deux à la place de dix. Voilà donc 10 fois 2, puis trois en la place de l'un et qui est 1 fois 3. Et lorsque vous ajoutez tous ceux up, de Bien sûr, vous obtenez 100 plus 20 plus 3. Nous avons donc commencé avec juste un motif de symbols-- un alphabet-- mais ensuite nous avons cartographié sens sur par le biais de ces colonnes. Eh bien, il se trouve que les ordinateurs ne sont pas vraiment si différent de vous et moi. Mais au lieu d'utiliser des puissances de 10, ainsi speak-- 1, 10, 100, 1000, 10.000 place et donc forth-- qu'ils ont effectivement il suffit d'utiliser les pouvoirs de 2-- si une, deux, quatre, puis si nous mettons plus de chiffres, 8, 16, 32, 64, 128, et ainsi de suite. Et voilà comment un ordinateur représenterait le nombre 0, tout comme nous, les humains. 0, 0, 0-- et vous pouvez probablement le deviner ce modèle de zéros et de uns, si un ordinateur ne peut parler 0 ou 1-- ce modèle va représenter le nombre que nous les humains savent que 1? Yeah 0, 0, 1. D'accord. Donc, 0, 0, 1 est la façon dont nous représentons 1, de sorte que vous pourriez être tenté alors pour représenter le nombre 2, si vous avez la place de quatre et la place de deux comme un seul endroit, vous pourriez dire, eh bien, si nous avions un 1 à la place de l'un, et maintenant nous voulons compter jusqu'à 2, vous pourriez faire et laisser cette tâche à un zéro. Mais bien sûr, ce n'est pas comment le système décimal fonctionne soit. Si vous mettez un chiffre ces deux colonnes, vous avez à faire le calcul. Donc, ce nombre a I accidentellement représenter juste? Donc, il est 3, parce que 2 fois 1 plus 1 fois 1, bien sûr, nous donne trois. Donc, ce serait deux. Le bit sorte de bascule, pour ainsi dire, comme 0 devient un, un peu comme un 9 rôles plus et devient un 0 lorsque vous portez le 1. Ce serait alors trois cours. Four-- une autre chose intéressante arrive, où ceux roulent sur et vous portez le 1, pour ainsi dire. Donc, ceci, bien sûr, est de quatre. Mais si vous avance rapide maintenant, ce qui est le plus grand nombre va être qu'un ordinateur peut représenter? Donc, il est juste sept dans ce cas, non? Parce que vous avez une chance sur quatre, celui dans les deux, celui dans l'un. Voilà 4 plus 2 plus 1. Cela vous donne sept. Et en effet, il serait paraître à première vue que les ordinateurs peuvent compter pas plus haut que celui-ci. Mais cela est bien sûr pas vrai. Qu'est-ce que nous les humains quand nous voulons compter plus que comme 999? Il suffit de porter l'un et juste ajouter un quatrième chiffre à gauche. Et bien que nous pouvions. Nous pourrions avoir un huit de placer et le lieu de la 16e, et lieu de 32, 64, 128-- et vous peut simplement continuer sur jusqu'à l'infini. Donc, ces zéros et ones-- l'system-- dite binaire sont ce que un informaticien serait généralement appeler un peu, ou un chiffre binaire. Mais maintenant, comment pouvons-nous obtenir de la concept ou les graphiques de ces choses à un ordinateur réel? Nous semblons sauter une étape ici. Eh bien, la seule entrée à la fin de la journée, à mon ordinateur portable ici est ce flux d'électricité. Même si elle a été longue le temps depuis que vous avez pensé à ou jamais pensé comment l'électricité fonctionne, il y a des électrons circulant dans ou out, et c'est mon genre de commentaires. Donc, si c'est tout ce que nous sommes obtenir ici comme entrée, que pouvons-nous faire avec cette information? Eh bien, nous pourrions penser à un zéro juste une absence d'électricité. Rien flowinw, rien en mouvement, rien ne se passe. C'est tout simplement la valeur par défaut state-- zéro. Mais s'il y a de l'électricité circule, pourquoi ne pas simplement arbitraire, mais globalement toujours, appeler cela un. Donc, simplement en ayant aucun pouvoir, nous avons un zéro, oui puissance, nous avons un One-- aucun pouvoir, oui pouvoir. Et de cette façon, en utilisant quelque chose plus physique ou électronique nous commençons à mettre en œuvre cette notion de quelque chose qui est un ou un zéro. En effet, nous pouvions le faire ici. Donc ici, je n'ai pas trois mais huit ampoules, dont chacun a son propre interrupteur. Et donc si je voulais représenter le nombre sept ici, Je pourrais tourner sur ces trois ampoules. Et en effet, à l'intérieur de mon ordinateur est des millions, des milliards de choses qui sont inférieure à celle, appelés transistors, commutateurs, que vous venez de tourner sur et en dehors. Donc, ce sont big-- relativement commutateurs big-- l'intérieur de mon laptop-- sont beaucoup, beaucoup, beaucoup, beaucoup d'autres commutateurs. Mais tout ce qu'ils font est exactement that-- tourner quelque chose sur, mettez quelque chose hors tension. Et en tant que tel, un ordinateur peut représenter, avec ces millions ou des milliards des transistors, lots et beaucoup de zéros et de uns. Et il y a d'autres matériels encore que vous permet de stocker des informations à long terme, de sorte que lorsque vous tirez la branchez, vous ne le perdez pas. Mais c'est une histoire pour un autre jour. Alors, que pouvons-nous faire avec ces bits? Pourrions-nous juste prendre la pression hors de moi-- quelqu'un pourrait vouloir venir ici et offrir une démo? J'ai vu cette main d'abord. Quel est ton nom? MADAY: Maday. DAVID MALAN: Maday, allez vers le haut. Ravi de vous rencontrer. MADAY: Ravi de vous rencontrer. DAVID MALAN: Venez de cette façon. Je ne vais pas devoir vous lèvres vers le haut. D'accord. Donc, ici, nous avons, notice-- un, two-- nous éditons que out-- un, deux, quatre, huit, 16, 32, 64, 128. Ceci est délibéré. Il y a huit bits ici-- binaire zéros et des uns digits--. Et un bit utile est une unité de measure-- pas aussi utile une unité de mesure sur lui-même. Habituellement, vous voulez au moins huit de ces choses, alias un octet. Nous avons donc un octet de bits ici. Donc, si nous voulions vous mettre au défi avec, par exemple, épelant, en binaire, cette valeur ici-- 42. Voulez-vous prendre un coup de couteau à cela? MADAY: [Inaudible]. DAVID MALAN: Oui, il suffit de pousser la petits interrupteurs blancs devant. Et vous voulez épeler sur 42, et à gagner est ce stress CS50 balle si vous obtenez ce. D'accord. Donc, vous avez 32. Nous allons avoir besoin de 42. Voilà donc un huit, de sorte que ce 40. Et excellent-- très bien fait. Je vous remercie. [APPLAUDISSEMENTS] D'accord. Nous avons donc encore une balle anti-stress. Faisons-le encore une fois, si nous pouvons. Un autre volontaire? stress balle, sans stress balle. D'ACCORD. Ici, au milieu, voulez-vous descendre? D'accord. Je connais. Nous y voilà. Donc, les chiffres viennent ici-- vers le bas. Comment vous appelez-vous? DAVEY: Davey. DAVID MALAN: Davey. D'ACCORD. Allez jusqu'à, Davey. Ravi de vous rencontrer. Et ce que nous allons vous avez spell-- si vous pouviez y attarder pour un seul moment-- est le numéro 50. Mais, mais, mais, mais, mais, ceux-ci sont aimants de l'école primaire pour une raison. Juste un peu plus difficile, d'accord? Il y a encore huit. D'accord. Alors qu'est-ce que nous avons là-bas? Nous avons 32. Agréable. 32 plus 16 nous donne 48-- si près. Et merveilleux. Félicitations à Davey ainsi. [APPLAUDISSEMENTS] D'accord. Donc, nous pouvons faire toute la journée, et il ne peut pas faire tout ce que beaucoup plus intéressant et plus difficile. Mais c'est vraiment le point-- comment relativement simple il est, à la fin de la journée, quel ordinateur fait pour stocker des informations, pour stocker les entrées et, finalement, stocker ou représenter ces sorties. Mais les chiffres seuls ne sont pas tout ce qui intéressant. Donc, les humains, il y a quelques années, décidé, vous savez quoi? Ce serait bien si les ordinateurs ne sont pas seulement calculatrices pour l'arithmétique opérations, mais en fait pourrait faire des choses comme le traitement de texte, ou email, ou incarnations plus modernes Ces types de technologies. Et le monde a décidé arbitrairement, mais universellement, que si vous voulez stocker la capitale lettre A dans un ordinateur, vous savez quoi? Disons simplement tous d'accord pour stocker un certain motif de zéros et ones-- bits-- que finalement représente le nombre décimal 65. Nous allons tous d'accord là-dessus. 66 représenterait B, 67 représenterait C, et il y a des grappes d'autres modes de zéros et des uns ou des nombres sous-jacents, cela représenterait autres lettres encore. Donc, si vous genre de mental absorber ce pour un moment, Je délibérément mis en place A travers I, où H a 72 et I est 73. Si un ordinateur puis, dans le contexte de un programme de traitement de texte ou un e-mail, révélé sous le capot pour avoir ces schémas de configuration bits-- de bits représentant 72, puis 73, puis 33-- ce qui pourrait ce sort dans ce programme? Alors salut, et puis quelque chose. Nous ne savons pas nécessairement, mais bien 33-- pas sur le graphique heure, à savoir était tout simplement un point d'exclamation. Donc, 72 est H, 73 est I, 33 arrive d'être un point d'exclamation encore. Mais tout cela est bel et bon, et en fait, de nos jours, plutôt que il suffit d'utiliser sept ou huit bits, grâce à quelque chose appelé Unicode par opposition Ascii retour dans la journée, nous pouvons représenter effectivement encore plus personnages intéressants que juste ces lettres originale anglaise biaisée. Mais nous pouvons aussi représenter même les choses plus nettes comme les couleurs. Si vous avez déjà entendu l'acronyme RVB, rouge, vert, bleu, que signifie simplement qu'un ordinateur utilise généralement trois ensembles de bits-- un certain nombre de bits qui représentent un certain nombre pour combien de rouge que vous voulez, un autre ensemble de bits pour combien verte que vous voulez, et un autre numéro de série pour combien bleu vous voulez. Donc, un grand nombre signifie beaucoup de rouge, petit nombre signifie pas rouge. Et ceux-ci sont un peu des valeurs moyennes ici. Alors donnez-moi un peu de rouge, me donner quelques vert, et me donner un peu de bleu. Et si vous mélangez ces trois nuances de couleur ensemble, dans ce cas, vous obtenez cette teinte sombre de jaune ou de brun. Mais ce modèle de huit plus huit plus eight-- donc 24 bits-- de gauche à droite, est de savoir comment un ordinateur représenterait cette couleur particulière. Maintenant, ceci est juste un point sur un écran. Si vous regardez vraiment proche à votre téléviseur à votre ordinateur, vous verrez des points ou pixels. Et si vous avez toute une grille de pixels, horizontalement et verticalement, vous avez des images. Et puis si vous prenez une image, puis lavage montrez-vous une autre image, un autre l'image, une autre image, une autre image, vraiment rapide, vous avez bien sûr des films. Et remarquez où nous avons commencé. Nous avons commencé avec ces zéros et des uns. Nous avons travaillé à partir de là en décimal numéros, comment nous les représentent. Maintenant, nous avons des lettres de l'alphabet. Mais dans d'autres contextes attendent, nous pouvons utiliser un peu plus de bits et représenter les couleurs. Dès que vous avez le capacité à représenter les couleurs, vous avez la possibilité de représenter des photographies et des gifs animés et autres caractères à l'écran. Et quand vous avez tout un tas de images de vol par l'homme à la fois, il ressemble à des images animées, et ainsi vous obtenez des vidéos. Donc, en utilisant ces très primitives simples ne nous avoir la manière de représenter finalement, toutes ces formes de médias. Et nous avons encore une fois abstraite et encore et encore, jusqu'à ce que nous obtenir à partir du niveau le plus bas à ce plus haut niveau. Donc, ce qui nous donne cette idée générale de l'abstraction. Mais nous avons commencé ici. Voici maintenant, nous pourrions représenter dans un ordinateur nos entrées avec des zéros et de uns, nos sorties en zéros et des uns, mais ce qui se passe à l'intérieur de la boîte? Voilà où l'ordinateur la science devient intéressant. Voilà où vous avez réellement apporter votre propres esprits à supporter pour résoudre les problèmes. Nous pouvons maintenant prévoir, pour la reste du semestre, oui. Je sais comment fonctionne binaires. Je me souviens comment Ascii ou Unicode-- la mise en correspondance de letters-- travaux. Et il va certainement à la raison que nous pourrait représenter rouge et vert et bleu, et représentent multimédia ainsi. Mais ceci est les choses intéressantes. Ce qui fait que quelqu'un capable de résoudre les problèmes. Et un tel problème nous aimons faire, en effet, est la prise des présences, ou Ce faisant algorithmiquement. Et encore, je pourrais le faire. Je pourrais faire un, deux, trois, quatre cinq, six, sept, huit neuf. Et je pourrais écrire vers le bas pour garder une trace de celui-ci. Mais c'est juste comment je représenter l'information. Ou je pourrais le faire faster-- deux, quatre, six, huit, dix, 12, 14, 16, 18, 20, 22-- il se sent comme deux fois aussi vite, mais il est encore va prendre beaucoup de temps. Mais il se trouve, si nous exploitons encore un autre ordinateur et, en fait resource-- ces jours-ci ont plusieurs processeurs ou le cerveau. Il se trouve des ordinateurs peut faire beaucoup de choses à la fois, et en effet nous, dans cette salle, pourrait représenter exactement cela. Donc, il est un peu socialement maladroit, mais si vous voulez me faire plaisir juste un processus en trois étapes, laissez me demande tout le monde en place là juste de se lever pour un moment. Se lever. Alors, pensez à vous-même, le nombre One-- que tout le monde dans cette salle, à l'exception des personnes qui ne l'ont pas oblige, sont penser numéro un. Voilà donc votre numéro dès maintenant. Telle est la première étape, ou en tant que informaticien ou un programmeur serait généralement faire, nous allons pour commencer à compter à zéro. Si le plus petit nombre possible représenter avec ces ampoules est nul, simplement en les laissant tout, je pourrais tout aussi bien commencer à compter de zéro est au lieu d'un. Et c'est ce que les informaticiens font. Donc, l'étape zéro, se lever et penser au numéro un. La prochaine étape est this-- paire avec quelqu'un debout et d'ajouter vos numéros ensemble. Formidable. Donc, à ce moment dans le temps, littéralement tous les participants est en pensant au numéro 2, à l'exception pour une personne bizarre si nous avons un nombre impair de personnes dans la salle. Et maintenant la troisième étape ici va être this-- de vous devriez vous asseoir. L'un de vous devriez vous asseoir, et si vous êtes encore debout, revenir à la première étape. D'accord. D'accord. Alors, les gens de plus en plus devrait être assis. Notez que cela a induit un loop-- une sorte de cycle. Certains d'entre vous devrait être maladroitement coincé, va-et-vient entre la première étape et deux, un et deux, un et deux. C'est bon. Notre premier bug. Nous allons traiter de cela. D'accord. Je vais essayer de stimuler les choses. En théorie, une seule personne est debout comme tout le monde continue à apparier. Mais permettez-moi d'accélérer les choses avec le peuple toujours debout. Quel numéro pensez-vous? 46. D'ACCORD. Allez-y et asseyez-vous. Vous les gars sont encore debout. Qui est encore debout? Quel numéro pensez-vous? D'ACCORD. Donc, nous allons revenir à vous. Dans le dos? Qu'est-ce que c'est? 22. OK quelqu'un d'autre jusqu'à top-- ouais? 34. D'ACCORD. Ici sur mon droite- ici? 132, très agréable. 22? D'ACCORD. Et qui est toujours debout? Par ici? 46, très agréable. 72. Je ne peux pas bloquer beaucoup plus longtemps. Ouais? 30, agréable. Par ici? 23? 23. Et je pense que tout le monde est sauf les gars, pas de pression. Oh, attendez. 28? Juste huit. D'ACCORD. Juste huit. Ici? 30. 23. 24. 18. Ceci est la pire mise en œuvre de cet algorithme jamais. D'ACCORD. Donc, quelqu'un d'autre? Quelqu'un d'autre? D'ACCORD. Un de plus. 16? D'ACCORD. 16. D'accord. Donc, si je ne l'ai pas oublié quelqu'un dans l'éclat ici, quand je frappe Entrée, nous verrons, algorithmiquement, la nombre total de personnes à Sanders. Parce qu'encore une fois, il est comme si tout le monde que vous vous êtes assis, passé votre numéro de à quelqu'un d'autre, à quelqu'un d'autre, à quelqu'un d'autre, de sorte que, en théorie, à la fin, un seul maladroit personne ne devrait être laissé au repos. Mais ça va. Nous hâtés les choses manuellement. Il est particulièrement difficile de voir dans cet espace particulier. Et le nombre total de personnes nous pensons qu'il ya ici est 546. Le nombre total I a été remis par les boursiers de l'enseignement, qui l'a fait l'ancien façon lente de l'école, était de 820. [EN RIANT] [APPLAUDISSEMENTS] C'est bon. Aussi sûrement puis, il y a ces bugs. Et ça va. Et alors pensez sur cet la première fois que quelque chose vous écrivez ne fonctionne pas nécessairement. Cela est arrivé à moi ici. Mais nous allons examiner maintenant comment nous pourrions appliquer cette même idée à quelque chose vous pourriez avoir vu auparavant, ce qui est ce vieux ici-- de la technologie de l'école un très grand livre de téléphone. Et supposons que ce livre de téléphone a 1.000 pages et 1.000 noms et les numéros par ordre alphabétique à l'intérieur de celui-ci. Eh bien, nous pourrions genre d'appliquer un même idée de ce problème très physique, me utilise. Je viens de sorte de triché en tirant parti de vous tous avec beaucoup, beaucoup de processeurs différents ou cerveaux exécuter un algorithme. Mais si elle est juste un peu vieux moi, je peux encore tirer parti de cette même essence d'une idée de diviser et de conquérir ce problème encore et encore, de sorte que la moitié d'entre vous, la moitié d'entre vous, la moitié d'entre vous, la moitié d'entre vous, théoriquement gardé assis, jusqu'à ce que nous sommes partis, en théorie, avec une seule personne. Donc, dans cette ancienne école technology-- nous ne faisons pas besoin de ce map-- cette la technologie de la vieille école, nous pourrions commencer à chercher quelqu'un comme Mike Smith, une page à la fois. Et je vois que non, Mike est pas ici. Je suis toujours dans la section A. Finalement, je trouve moi-même dans la section B. Et ceci est un algorithm-- étape par étape instruction. Commencez à la page de début et une à un moment, chercher Mike Smith. Est-ce correct-- cette algorithme ou approche? Oui, il est exact. Si Mike est ici, par la suite Je vais chercher à lui. Mais ce n'est pas efficace. Il est évidemment très lent. Je peux donc tirer parti de la mêmes twosies approchent. Je peux le faire en quelque sorte deux, quatre, six, huit, 10, 12. Il est deux fois plus rapide. Je vais arriver à Mike plus vite s'il est là. Est-ce correct? Oui, mais j'ai entendu un pas little--. Maintenant, j'entendu un non. Ouais. Il y a un bug potentiellement. Peut-être que Mike obtient juste accidentellement pris en sandwich entre deux pages, parce que je vole à travers ces deux à la fois. Donc, au moins nous avons besoin type de solution conditionnelle. Je dois dire, hey, si je frappe quelqu'un dont nom commence par un T au lieu d'un S, Je ferais mieux de double back au moins une page. Donc, poussette au premier abord, mais réparable. Mais aucun d'entre nous allons chercher Mike Smith à travers un téléphone de 1000 pages réserver une page à la fois. Qu'est-ce qu'une personne normale va faire? Tu vas aller les S, si vous saviez où les S. Vous pouvez aller à peu près au milieu ou légèrement biaisé vers la fin. Et je regarde ici et Je suis dans la section M. Mais que savez-vous à propos de ce problème maintenant, que nous ne savions pas nécessairement avant avec nous tous simplement nous compter équivalente? Eh bien, Mike va clairement d'être dans cette moitié du livre s'il est ici du tout parce qu'il est triée. Et donc vous pouvez très dramatically-- [HALÈTEMENT] Je connais. [APPLAUDISSEMENTS] Il est effectivement très facile si vous le faites dans le dos il. Mais vous pouvez jeter la moitié du problème de distance. Maintenant, je suis parti avec le même problem-- trouver Mike Smith dans un téléphone book-- mais maintenant le livre de téléphone commence à M et va à Z, mais il est à moitié aussi grand. Mais ceci est ce qui est impressionnant. Tout comme dans la théorie, vous les gars, quand vous tous assis seulement la moitié à la fois, le problème a la moitié aussi grand, la moitié aussi grand, encore et encore. Donc a ce problème devenu le même problème, mais la moitié aussi grand. Maintenant, il est un problème de 250 pages. Dès que je me rends compte, oh, je suis dans la section T accidentellement. Je suis allé trop loin. Je peux jeter que la moitié du livre de téléphone. Maintenant, je suis à un quart du problème. Et vous pouvez répéter, répéter, répéter jusqu'à ce que, en théorie, vous êtes à gauche avec une seule page. Et si Mike est sur cette page, Je peux maintenant résoudre ce problème. Mais la rapidité ai-je le résoudre? Dans le premier cas, il m'a fallu comme peut-être 1.000 étapes pour trouver Mike Smith. Il aurait pu prendre moi-- Je pris le livre de téléphone et je commencé à regarder une page à la fois, et Mike pourrait être 1.000 pages plus tard. Deuxième approche peut-être me prend 500 étapes, parce que je vole par deux à la fois. Et la troisième approche cependant, il est particulièrement puissant. Mais nous allons examiner ce que nous avons en fait a fait avec cette troisième approche. Je dois ce que je vais appeler simplement ceux-ci déclarations ici, une à la fois. Procurez-vous un annuaire téléphonique. Ouvert au milieu de l'annuaire téléphonique. Regardez les noms. Et puis les choses deviennent un peu intellectuellement plus intéressant, si elle est encore simple. Si Smith est parmi les noms sur cette page en cours, puis faire quelque chose conditionnellement. Il est comme une bifurcation de la route. Appelez Mike. Si Mike est parmi les noms sur cette page, appelé Mike. Mais seulement faire quatre lignes si la ligne arbre, si vous voulez, est vrai. La réponse à cette question est oui. Sinon, si Smith est plus tôt dans la book-- en d'autres termes, si je suis dans la section M et je suis à la recherche de quelqu'un pour la gauche, alors ce que je doit faire est quelque chose de très similaire. Ensuite, je dois ouvrir au milieu de la moitié gauche du livre. Alors, allez à gauche, puis revenir à l'étape deux. Regardez les noms là-bas. Donc, en d'autres termes, faire la même chose, mais sur un problème qui a été réduite de moitié. Vous savez quoi? Si Smith est plus tard dans le livre sur la base de la page Je regarde, ouvert au milieu de la la moitié droite du livre puis revenir en arrière à l'étape deux, else-- il y a une quatrième possibilité ici. Mike soit ici ou à gauche ou vers la droite ou non. Et ici, nous considérons cela mieux. Et en fait, si vous avez déjà eu votre ordinateur juste planter sur vous, qui est parfois, mais pas toujours, résultat de tout un programmeur humain ne réaliser, oh tirer, il y a effectivement ce quatrième scénario. Et si vous n'écrire du code pour gérer ce scénario, parfois vous ne savez pas ce que l'ordinateur pourrait faire. Et en effet, un programme peut se bloquer. Mais dans ce cas, je pensais à ce sujet, et je l'ai dit, sinon cesser de fumer, parce que ce quatrième scénario logique possible. Maintenant, nous allons juste ajouter un peu de vocabulaire pour que nous peut commencer à jeter autour des termes sont par ailleurs assez intuitif. Toutes les choses que je viens surlignés en jaune ici, Je vais à la les fonctions ou procédures. Ils sont juste genre d'actions. Donc ramasser, ouvert à, regarder à, appeler, ouvert, ouvert, quit-- ce ne sont que des actions, ou nous allons appeler plus formelle, les fonctions. Pendant ce temps, maintenant en jaune, J'ai mis en évidence les choses that-- commençons simplement appeler les conditions ou les branches. Ce sont des points de décision où vous pourriez aller de cette façon, de cette façon, ou encore une autre direction. Donc, ceux-ci seront les conditions. Et maintenant, celui-ci est un peu plus fantaisistes. Appelons ces questions Les expressions booléennes, après que quelqu'un avec un nom Bool. Et une expression booléenne est juste quelque chose que ce soit vrai ou faux, oui ou non. Il est donc la question dont vous répondre soucier, de manière à en condition faire un decision-- revenir une réponse, et puis aller à gauche ou à droite, ou quelque chose d'autre tout à fait. Et puis enfin, ceux-ci lignes vont ici-- retour à l'étape deux, revenir en arrière à l'étape two-- nous pourrions mettre en œuvre cette idée de différentes façons. Et puis ceux d'entre vous avec expérience de programmation aurait pu faire ou peut imaginer faire cela différemment. Mais pour les besoins d'aujourd'hui, il est juste l'idée qui compte. Ceci est induit ce nous allons généralement appeler un loop-- une sorte de cycle parce ça me rend fais quelque chose de nouveau. Alors maintenant, nous allons simplement considérer comment bien cet algorithme est. C'est correct. Si Mike dans le livre, il est l'un des ces quatre scenarios-- encore et encore et encore une fois, nous allons le trouver. Mais à quel point est-il? Eh bien, nous ne disposons pas être trop formel ici. Mais disons simplement tracer quelque chose, x et y, pour obtenir un sens de la forme de ce problème. Sur l'axe des abscisses est ici la taille de mon problème. Et ils un axe y-ici sera le temps à résoudre. Alors peut-être cela est le nombre de pages. Peut-être cela est secondes Page turns-- que ce soit. Cependant, vous voulez compter est ce que cette image représente. Et ce premier algorithme, je vais de décrire comme une simple ligne droite. S'il y a n pages le livre de téléphone, puis il pourrait me prendre autant que n étapes pour trouver Mike. Si Verizon ou la compagnie de téléphone ajoute une autre page de l'année prochaine, il pourrait me prendre un plus step-- une unité de plus de temps pour trouver Mike. Donc, il y a juste ce rapport un à un. Il est une pente en ligne droite. Entre-temps, cette seconde algorithm-- si je suis allant de deux à deux time--, quatre, six, huit ou double-- en passant par les pages deux fois à la fois, deux à la fois, il est toujours en ligne droite. Il y a maintenant un à deux rapport, mais juste un peu plus bas. Donc, s'il y a beaucoup de ces pages sur le graphique ici en jaune, qui pourrait me prendre ce de nombreuses étapes ou secondes, sinon il va me prendre deux fois plus nombreux sur la ligne rouge. Mais la ligne verte est la vraie livraison. Ceci est généralement ce que nous appeler un journal logorithm-- n, où n est le nombre de pages. Mais il est la forme qui compte aujourd'hui, parce que nous ne disposons pas de même penser à tracer des points. Pensez à un scénario extrême. Supposons Verizon demain double la nombre de pages dans ce livre de téléphone, de 1000 à 2000. Dans le premier algorithme, je pourrait perdre un supplément de 1000 étapes à la recherche de Mike, juste parce que Verizon a doublé la taille du livre. Le second algorithm-- il pourrait me prendre un supplément de 500 étapes. 1000 plus de pages, je vais deux à la time-- 500 autres étapes pour trouver Mike. Mais ce troisième algorithme est une sorte de magique. Verizon double le nombre pages 1000 à 2000, mais combien d'autres étapes ne il me prendre à chercher Mike? Il est juste, parce que je peux juste déchirer le livre de téléphone une fois de plus d'un problème de 2.000 page à un 1000 problème de la page, et le tour est joué. J'ai pris une bouchée énorme hors de lui. Et si vous allez vraiment extrême, supposons que le livre de téléphone entreprise avait quelque chose de fou comme à 4 milliards de pages du répertoire. Eh bien combien d'étapes pourrait-il pour trouver Mike Smith dans un 4 milliards page de livre de téléphone? Il est un grand nombre, mais seulement 4 milliards de dollars pour 2000000000 à 1000000000 à les 500 millions 250 million-- encore sonne comme de grands nombres, mais je suis très rapidement obtenir des valeurs plus petites. Et en fait, si je fais le calcul à droite, je ne peux que diviser 4 milliards par environ 32 fois avant Je descends à un seul. Donc, si ce livre de téléphone étaient 4 milliard de pages, pas une grosse affaire. En quelques secondes, peut-être 32 secondes, je pourrais diviser en deux et éventuellement trouver Mike ou conclure qu'il n'y est pas. Et c'est l'essence d'un algorithm-- un bon algorithme. Et c'est l'un des objectifs d'une classe comme celui-ci, est à essayer de comprendre comment puis-je résoudre le problème non seulement correctement, comme je l'ai toujours su comment faire un page à time-- mais correctement et bien. Comment puis-je concevoir une bonne des solutions aux problèmes? Prenons donc un moment ici et vous donner une idée maintenant de CS50 cours itself-- introduire Les membres du personnel de quelques cours. Juste avant 02h00, nous allons prendre une courte pause de telle sorte que ceux d'entre vous qui peut faire du shopping canard et prendre un regarder une autre classe et de regarder le reste de cette ligne. Mais pour l'instant, permettez-moi de vous présenter CS50, la classe elle-même, et en particulier ce qui est nouveau. Ainsi, le printemps dernier, nous passé un peu de time-- Le personnel de la formation et je-- penser à propos de ce que nous voulons CS50 soit, et de revenir à la première principes, pour ainsi dire, de réfléchir à ce que nous voulons ce cours pour ressembler et être comme pour ses étudiants. Et donc vous verrez dans le problème mis à zéro et, une invitation de jeter un oeil à ce URL qui résume quelques-unes des motivations derrière la suivant les caractéristiques de l'automne 2016. Donc, comme vous avez pu glaner de la TL: document DR, le programme d'aujourd'hui, ainsi que de le catalogue des cours, cette année à CS50, vous ne devez assister today-- donc le travail bien done-- et la dernière conférence le 21 Novembre. Et vous êtes les bienvenus, mais ne devrait pas assister à ces conférences dans le milieu, parce que ce que nous faisons cette année, est en tournage en temps réel le matériau du cours. Donc, tout va rester courant et incorporée mieux que nous can-- l'actualité et des conversations que les gens pourraient être ayant dans l'industrie dans le monde, mais rendant ce matériel disponible, par conséquent, même heure, à savoir avec pleins transcriptions de texte et consultabilité et liens vers d'autres ressources. Et en effet, nous avons été réclamé quelque temps et nous ne croyons ceci, que nous pouvons créer, numériquement, un plus immersif, un plus convaincant expérience éducative, par opposition à la collecte d'ici quelques 23 fois en personne, entendre quelqu'un comme moi simplement parler de l'informatique, par opposition à engager plus activement. Vous verrez donc dans le programme du cours un croquis du semestre ici, ainsi que lors des conférences sera être filmé, à laquelle vous êtes bienvenue, mais ne devrait pas, et quand ils seront être publié sur le site Web du cours. Et ce que nous allons faire ici sur Mercredis à partir la semaine prochaine, est beaucoup plus intimement, avec seulement ces gens qui veulent participer, est un soi-disant à pied à travers, où I et les têtes de cours va véritablement faire les choses un peu plus intime ici-bas dans l'orchestre section, ont encore une certaine technologie et de marcher à travers la L'ensemble des problèmes de la semaine en cours, et offrez-vous particularly-- si parmi ceux qui sont moins comfortable-- d'autant plus des conseils que vous pourriez vouloir ou besoin pour le défi de la semaine. Et de même, pour ceux qui ne peuvent pas assister à ceux en personne, pas une grosse affaire. Il y aura conduit de façon similaire par l'un des cadres supérieurs de la formation, Zamalya, par la même occasion intégré dans le problème eux-mêmes ensembles. Problème fixe cette année sera publié le vendredi et ne plus faire sept jours plus tard, mais 10 jours later-- délibérément chevauchement avec chaque problème définir, de manière à mieux répondre aux besoins, nous espérons, Ebb and Flow dans les horaires des élèves, surtout quand midterms ou l'athlétisme ou universitaires ou extracurriculars ont tendance à aller et venir en particulier à mi-semestre. Cela devrait vous donner un peu plus discrétion quant à savoir si vous devant charger votre semaine avec CS50 ou la charge de retour sur le week-end suivant à la place. Alors regardez au programme du cours ici pour le calendrier de celle-ci. Et vous remarquerez aussi parmi les les changements cette année, pour ceux qui connaissent mieux la programmation dans le passé, nous allons commencer le semestre comme nous allons aujourd'hui dans Scratch, mettre l'accent en particulier sur la langue appelé C, puis une transition non PHP, mais dans un langage appelé Python vers la fin du semestre dans le cadre de la programmation web, ainsi que SQL et JavaScript, HTML, CSS, et plus encore. Et en réponse à une FAQ, il est en effet le cas que CS est pas aussi effrayant que je fois pensait qu'il était, mais il est aussi beaucoup de travail comme je l'avais entendu qu'il pourrait être. Mais ceci est l'exemple que voici les statistiques de l'automne 2015 corps étudiant, de sorte que les lignes bleues horizontales représenter le nombre moyen d'heures signalé. Et vous verrez une moyenne de six à 10 à 12-- peut-être 16 environ, et ainsi de suite, mais avec variance élevée pour être clair. Et ainsi se rendre compte qu'il n'y a pas seulement étudiants plus confortable et moins à l'aise dans le cours, mais un support correspondant structure pour obtenir ces étudiants à travers le semestre avec succès. En effet, en réponse à une FAQ, devrait vous prenez CS50 comme une première année? Absolument. Et en fait, je ne regrette ne pas avoir trouvé mon chemin ou trouvé un nouveau champ cette première année aussi bien. Et si vous prenez CS50 avec d'autres cours, certainement que well-- et les conseils généraux que nous pourrions donner aux étudiants, que CS50 est probablement pas le genre de classe ou en classe d'introduction que vous devez prendre avec trois autre ou quatre autres classes de p-set. Mais si vous prenez deux autres p-set les classes, autre chose, et CS50, absolument gérable. J'ai eu beaucoup d'étudiants dans le passé fait de façon tout à fait avec succès. Et pour vous vers ce la ligne d'arrivée avec succès, ne cours ont sections-- différentes pistes pour les étudiants moins à l'aise, plus confortable, et quelque part entre les deux, de sorte que dans le cadre de première série de problèmes, vous serez invité à vous décrire. Et si vous êtes parmi ceux qui sont moins confortable, il est le genre de chose que vous venez de connaître plutôt. Et en effet, que cela a été le croissante démographique CS50 pour un certain nombre d'années. À l'automne dernier pour par exemple, 58% de la classe se décrit comme parmi ceux qui sont moins à l'aise, avec 9% chez les plus confortable, puis les autres étudiants là-bas en rouge se décrivant comme quelque part entre les deux. Et vous verrez ici les thèmes d'ensemble et le calendrier des sections, qui sont offerts en personne, en temps réel, avec le cours de personnel fantastique des boursiers d'enseignement et les assistants de cours, dont certains vous allez rencontrer dans un instant. Les articles eux-mêmes, comme vous le verrez, sera être les lundis et les mardis et mercredis, de manière à vous permettre de plonger après engagement, si vous le choisir, au cours de conférences plus tôt cette semaine. Et puis les heures de bureau, qui certes, avec chaque année qui passe, ont pas été moins d'un défi pour le cours. Et cette année, nous prévoyons pas seulement à titre heures-- un sur une des possibilités de l'aide pour étudiants mercredi jeudi et le dimanche, le dernier de ceux être dans l'après-midi par la conception pour réduire une partie du stress que se pose toujours avec la fin de la nuit p-settting avec un délai looming-- mais les heures de bureau seront également offerts les lundis et mardis et Mercredis et vendredis et samedis, grâce à nos amis de HSA. CS50 a maintenant son propre espace pour les étudiants et le personnel CS50, au sommet de 67 Mount Auburn Street, là à Harvard Square. La vision qui est que CS50 de TFs et CA tout au long de la semaine, à peu près dans la plupart jours, seront là pour les soutenir. Donc, si vous avez quelques question sur un p-set ou si vous vous sentez un peu bloqué ou un peu confus, et Heck, vous avez une heure ou une demi-heure entre les classes, en particulier dans le square-- peut vous pop et ont répondu à cette question d'avoir cette confusion clarified-- tout à fait dans l'esprit, vous êtes familier, de mathématiques propre centre de questions de mathématiques du département, mais à peu près autour de l'horloge par [? Gcal?] Que nous publierons en ligne. Le tutorat est également disponible pour ceux étudiants, librement du cours de propre personnel si vous souhaitez plus intime sur une base individuelle, ou deux ou trois camarades de classe seulement, en travaillant avec l'un des membres du personnel du cours. Et en effet, ceux-ci sont juste ici certains des membres du personnel du cours, quelques-uns d'entre eux vous aurez rencontrer dans un instant. En fait, propre CS50 de tête enseignement garçon, et bien sûr de la tête assistant, et précepteur, pourrait venir sur place, permettre leur dire bonjour. [APPLAUDISSEMENTS] ENCEINTE 1: [Inaudible]. [APPLAUDISSEMENTS] SPEAKER 2: [Inaudible]. [APPLAUDISSEMENTS] SPEAKER 3: [Inaudible]. [APPLAUDISSEMENTS] DAVID MALAN: Et nous permettent de apporter à bord deux des CS50 de plus cadres supérieurs, Rob et Zamayla ainsi. [APPLAUDISSEMENTS] En effet, à la fois Rob et Zamayla ont été avec nous depuis si longtemps, que je pouvais d'aller dans les archives de CS50 et de trouver ce SD très des images de leur participation sur eux-mêmes scène il y a quelques années. ROB: [Inaudible]. [APPLAUDISSEMENTS] ZAMAYLA: [Inaudible] [APPLAUDISSEMENTS] DAVID MALAN: Je vous remercie. Donc, en plus de ces derniers membres de l'équipe ici, CS50 dispose d'une équipe de près de 100 les membres du personnel, qui ont tous sera disponible pour les sections et les heures de bureau et bien plus encore. Et comme Rob dit aussi, cela est la révision la plus importante de CS50 dans les 10 ans qui Je suis allé dans [Inaudible]. [Inaudible] axé en particulier en fournissant une structure de support, meulant beaucoup de l'essentiel qui a été accumulées en 10 ans l'évolution des itératives sur les ensembles de problèmes du cours. Ainsi, cette année, non seulement en classe, mais également sous la forme du problème de cours ensembles, devraient vous trouver des choses à être plus rationalisée, régleur, beaucoup plus maniable que dans les années passées, comme nous jeter un peu de bagages qui est mis au point par la nature de l'année en évolution après année et itérer. Ainsi, le nouveau et amélioré commence aujourd'hui. Vous allez rencontrer un peu plus de la Le personnel hors du cours dans le [Inaudible] à 2:30, où nous servons, comme une tradition, gâteau. Il y a un peu plus de gâteau que cela, mais vous aurez rencontrer Erin et Tobias et d'autres encore. Et permettez-moi de vous donner un tour avant que nous entendions à partir d'autres membres du personnel dans la classe, de ce qui attend aussi. En fait, nous commençons toujours CS50 de semestre ce samedi, avec ce qu'on appelle la Journée CS50 Puzzle. Cela n'a rien à voir avec l'informatique en soi, mais avec environ problème résoudre de façon plus générale. Et si vous choisissez de participer, par certains des invitations, vous pourriez avoir vu la porte tombé ou sur la scène ici, il est une occasion en équipes de deux ou trois ou quatre, de participer pour des puzzles et des pizzas et des prix et plus-- ce samedi, restez à l'écoute pour plus. Vous trouverez aussi que tous les Vendredi, à Fire and Ice, ne CS50 apporter un tas ensemble des étudiants déjeuner, de faire un grand classe se sentent plus intime, et réunissent généralement anciens et amis de l'industrie pour parler de ce qu'ils ont fait depuis son diplôme. De même, cette année, allons-nous inaugurer le premier CS50 50 codage contest-- mi-semestre possibilité de permettre à tout le monde sur une base opt-in, d'avoir un défi des esprits contre des camarades de classe, encore une fois en équipe de deux ou trois ou quatre, en utilisant seulement que les émissions savvy que vous avez alors sous votre ceinture après seulement six ou sept semaines de la classe, et la participation dans ce genre de compétition online-- si vous souhaitez parfaire votre propre compétences d'autant plus dans ce défi. A la fin du semestre est le soi-disant CS50 Hackathon-- une occasion qui commence à 7:00 PM se termine à 07h00, et le long du chemin sont 12 heures du soir dans lequel plonger en project-- final du cours l'occasion de concevoir et mettre en œuvre la plupart rien d'intérêt à vous avec votre enseignement les conseils de collègues. Autour de 9:00-nous généralement servir des pizzas, 01h00, Philippe de, et quelques-uns d'entre nous qui sont encore éveillés à 05h00, sont transportés par autobus navette en bas de la route de IHOP pour le petit déjeuner. Et puis quelques jours plus tard est le CS50 soi-disant fare-- fin de l'exposition de semestre célébration à quel point tant de des CS50 étudiants sont venus de semaine zéro tout le chemin à la semaine, et en gardant à l'esprit que 73% des personnes camarades de classe et les vôtres cette année ont jamais pris une classe CS avant. En effet, pour autant remettre l'accent, voici est un peu plus de visages de personnel de CS50. ENCEINTE 4: [Inaudible]. SPEAKER 5: [Inaudible]. ENCEINTE 6: [Inaudible]. ENCEINTE 7: [Inaudible]. SPEAKER 8: [Inaudible] ENCEINTE 9: [Inaudible]. ENCEINTE 4: [Inaudible]. ENCEINTE 10: [Inaudible]. ENCEINTE 11: [Inaudible]. ENCEINTE 12: [Inaudible]. ENCEINTE 13: [Inaudible] ENCEINTE 14: [Inaudible]. ENCEINTE 13: [Inaudible]. ENCEINTE 15: [Inaudible] ENCEINTE 16: [Inaudible]. ENCEINTE 11: [Inaudible] SPEAKER 5: [Inaudible]. DAVID MALAN: Une partie de l'équipe sont eux-mêmes Shopping classes. Mais si les membres du personnel CS50 sont ici, pourrait venir sur place pour un instant. de CS50 TFs et CA et [? Personnel ?] membres ici-- ce ne sont que quelques-uns de l'faces-- dont un vous venez vu, et quelques other-- et quelques autres encore. Pourquoi ne pas aller de l'avant et de permettre vous les gars une pause de cinq minutes. Si vous devez esquiver à cours d'atelier, qui est très bien. Et en cinq minutes, nous allons reprendre, jeter un oeil à la première Scratch-- de notre langage de programmation, rencontrer Le personnel de cours ici un peu plus, et de se concentrer en fin de compte le problème posé zéro. Donc, nous allons être de retour dans cinq minutes. [APPLAUDISSEMENTS] D'accord. Donc, nous sommes de retour. Et dans notre restante temps aujourd'hui, l'objectif est de niveler le terrain de jeu en termes de certains termes, en termes de quelques idées. Car en effet, selon quelques-uns des tableaux précédents, il va y avoir une gamme de les niveaux d'expérience dans la classe, dont certains élèves ont pris un peu de programmation avant, certains d'entre eux ne l'ont pas. Et ainsi, avec ce premier problème définir et avec cette première langue avons-nous une occasion de commencer à prendre pour acquis après aujourd'hui un peu de vocabulaire et de l'idée commune. Et nous allons faire cela par le biais de premier languages-- du cours en plus de C et Python et JavaScript et SQL et HTML et CSS, nous nous concentrerons d'abord et juste pour le problème mis à zéro dans ce langage graphique, appelée Scratch, développé par Media Lab du MIT sur la route, pour aider les étudiants et les enfants en particulier s'exprimer algorithmically-- d'une manière plus conforme à ce que nous pourrions appeler la pensée informatique. Et il est une langue utile car très rapidement la semaine prochaine dans la première semaine, ne nous faisons la transition vers un plus langue traditionnelle et arcane appelé C, ce qui est purement textuelle. Vous utilisez votre clavier afin d'écrire des instructions comme celles-ci sur l'écran. Mais même si vous ne l'avez jamais vu un langage de programmation avant, en seulement regardant cela, tout ce que ce soit cryptique, vous pouvez probablement deviner que imprime probablement Bonjour tout le monde. Mais il y a beaucoup de tête syntaxique là. Il est le hachage bizarre symbole ou hash tag en haut. Il y a les équerres, certains entre parenthèses, accolades, semi-colon-- il y a juste tellement visuelle syntaxe qui est dans la manière. Nous commençons le cours avec Scratch afin d'obtenir passé tous ceux intellectuellement distractions sans intérêt, et se concentrer plutôt sur les idées. En fait, cela pourrait être avant. Ce, pour cela, la semaine sera après. Ceci, en ce graphique, Scratch de la langue, comment vous souhaitez mettre en œuvre cette même program-- un programme qui lorsqu'il est exécuté, dit simplement bonjour monde. Et ce qui est agréable au sujet Scratch est qu'il est cette programmation graphique environnement qui utilise des pièces de puzzle ou blocs, que verrouiller seulement ensemble si elle est logique de le faire. Et avec Scratch pouvez-vous développer animations et jeux interactifs et de l'art, et un certain nombre de choses qui vous pouvez l'imaginer dans votre propre esprit, et les mettre en œuvre simplement en glisser-déposer les pièces du puzzle. Et en effet, nous avons la capacité d'exprimer certaines des mêmes idées que je viens de mentionner un moment Il y a dans le contexte de Mike Smith et la recherche des choses d'un téléphone comme des fonctions, des actions justes, des choses comme des boucles qui font les choses encore et encore, variables, qui est quelque chose que nous allons présenter, mais il est familier peut-être de algebra-- juste une sorte d'espace réservé pour stocker une certaine valeur que vous pourriez besoin d'expressions booléennes later--, où ceux oui non ou vrai fausses questions avant. Les conditions sont les fourches dans le road-- ces branches pour ainsi dire. Et puis il y a quelques colombophile fonctionnalités que nous allons voir aujourd'hui encore, appelés tableaux et les fils et événements, que nous allons ensuite revoir plus temps dans différentes langues. Mais Scratch nous permet d'explorer tout cela. Donc, ici, dans Scratch, ce pourpre bloc est ce qu'une fonction est généralement va ressembler. Cette pièce de puzzle pourpre qui a une certaine mot comme par exemple, qui est l'action, puis on pourrait avoir un argument ou une certaine façon parameter-- du type de personnalisation ce que le bloc ne de sorte qu'il est pas pré-déterminé par MIT ce que dit ce bloc violet. En fait, vous verrez dans un moment que je suis capable de taper les mots comme bonjour le monde, ou bonjour David, ou bonjour Zamayla, ou ce que je veux, dans l'argument à ce casse-tête piece-- la boîte blanche Là. Pendant ce temps, si je veux une boucle, nous allons voir qu'il ya des pièces de puzzle qui regarder un peu d'orange comme ça. Et leur forme type de suggère que quelque chose se produit encore et encore dans un cycle. Donc, si je conclurai un dire bonjour bloc monde avec un bloc à jamais dans Scratch, il va tout simplement continuer à dire bonjour monde pour toujours, littéralement. Pendant ce temps, il y a une autre type de boucle dans Scratch que nous allons see-- une répétition block-- où, si vous savoir à l'avance combien de fois vous voulez la boucle pour exécuter un nombre fini de fois que vous fact-- peut préciser que en tapant dans un certain nombre ou même de brancher une variable, comme x ou y comme nous le verrons. En fait, les variables comme i dans ce cas, qui est un nom commun pour un variable de nombre entier stocke juste un number-- un nombre entier pourrait être, d'utiliser ce bloc orange ici pour définir une variable comme i à zéro. Voici un exemple en vert d'un expression booléenne dans Scratch. Même si cela ressemble à un calcul formule, les inégalités de mathématiques comme celui-ci sont vraiment des expressions booléennes. Ceci est vrai ou faux. I est inférieur à 50. Il est soit une réponse oui ou non ou une réponse vraie ou fausse. Et nous allons généralement appeler ces expressions booléennes. Et il ne doit pas être 50. Il peut être x moins y, supérieur à y, identiques Y- un nombre quelconque d'autres pourraient être posées. Maintenant, à première vue, cela peut paraître tout d'un coup assez gras ici, et il est. Mais le concept sage, il est assez familier d'avant. Si x est inférieur à y, que dire autant. Sinon, si x est supérieur à y, puis en dire autant. Autre dire x est égal à y. Donc, nous avons un exemple il y a un troisième scenario-- le seul troisième possibility-- x est soit supérieur, inférieur ou égal. Nous avons donc une fourchette à trois voies de la route. Et remarquez ce qui est cool ici-- Scratch, il semblerait, n'a qu'un seul casse-tête pièce, dans ce cas, si d'autre bloc. Et pourtant, cela semble vous impliquer peut ont seulement une fourche à deux voies de la route. Vous pouvez aller à gauche ou à droite, mais Qu'en est-il que le troisième scénario? Que faire si x y est égal? Pas grand-chose. Prenez un morceau de puzzle, mettez une autre à l'intérieur de celui-ci pour créer l'équivalent sémantique de si, d'autre si, else-- et maintenant vous avoir votre fourche à trois voies sur la route. Et comme nous le verrons, le pièces de puzzle Scratch peut être étiré et de croître, de sorte que de caser plus de choses en eux. Vous ne devez pas adapter tout à sa taille par défaut. Ceci est quelque chose que nous voir bientôt est appelé un tableau. Il est comme un films-- un moyen de stocker plusieurs éléments d'information dans une variable, pas seulement un numéro. Ce que nous allons voir un représentant de ce qu'on appelle le multi-threading. En fait, l'ensemble de votre Mac et PC ces jours-ci support multi-threading, ce qui signifie que vous pouvez littéralement faire plusieurs choses à la fois. Vous pouvez avoir Microsoft Word dans le au premier plan, en travaillant sur un certain essai. Vous pourriez avoir un navigateur dans l'ouverture de fond G-mail ou Facebook ou similaire. Votre ordinateur peut faire plusieurs choses aujourd'hui, car il est multi-thread, et les programmes qu'ils sont en en particulier sont également multi-thread. Il y a des choses appelées événements comme bien dans le monde du Scratch, et puis il y a une façon aussi, de faire nos propres pièces de puzzle personnalisé si les choses ne pas réellement exister à l'avance. Donc, nous allons motiver cela comme suit. Il y a quelques années, quand je d'abord découvert Scratch, quand j'étais en fait un étudiant diplômé du MIT, nous nous ont été chargés de faire les devoirs. Et j'implemented-- qui, avec le recul, était une très mauvaise décision parce qu'il est la chanson la plus exaspérante dans le monde à écouter pendant huit heures tout en travaillant sur votre homework-- mais quelque chose que j'avais appelé Oscar Time, ce qui est peut-être une chanson familière. CS50s possèdent Jordan Hayashi, l'un des nos membres hauts fonctionnaires plus, a mis à jour pour 2015 et maintenant 2016, depuis retour dans la journée, J'avais tout simplement aller dans trash can Oscar. Maintenant, nous appuyons le recyclage et le compostage. Mais pour peindre l'image de ce que nous pouvons faire ici et de motiver certains les exemples de niveau inférieur, pourrions-nous obtenir un autre volontaire pour venir seulement sur place et de jouer mon premier devoirs cession jamais? Monte. Quel est ton nom? HENRY: Henry. DAVID MALAN: Henry, allez vers le haut. Monte. Tête de toute façon, et vous verrez dans un instant, Je vais aller de l'avant et a frappé le drapeau vert dans la main en haut à droite coin, ce qui signifie aller. Le petit arrêt signe icône va dire stop, et c'est lorsque vous démarrez et arrêter le programme. Ravi de vous rencontrer. D'accord. Donc, nous allons voir les instructions sur l'écran dans un instant. Et juste en jouant ce jeu pour quelques seconds-- me faire confiance, on ne va pas vouloir jouer tout le chemin à l'end-- vous voulez avoir une idée de ce que le programme fait. Et plus de se concentrer uniquement sur Henry étant bon ou mauvais à ce jeu, l'accent et comment at-il été mis en œuvre par moi à l'origine, puis par la Jordanie. En d'autres termes, où sont les variables? Où sont les boucles? Où sont les fonctions? Et nous allons voir si nous ne voyons pas ceux sous le capot. Il suffit de cliquer et faire glisser des ordures le bac approprié. [MUSIC PLAYING] D'accord. C'est très bon. Pourquoi ne nous arrêtons pas là. Je vous remercie. Félicitations à Henry. Je vous remercie. [APPLAUDISSEMENTS] Imaginez le débogage de ce programme. S'il y a un problème à deux minutes song-- mais tellement ce qui se passe ici vraiment? Aussi compliqué que cela pourrait commencer à sembler obtenir au fil du temps, en effet de plus en plus choses ont commencé à tomber, ce qui est intéressant ce genre de exemple-- et nous verrons quelques-unes others-- est que si vous regarder au-delà de la complexité ou la sophistication du jeu, il y a un bâtiment très simple play-- blocs qui sont tous, si vous les distiller à ceux blocs de construction, sont très accessibles et implémentable à eux-mêmes. Par exemple, il est été un certain temps, mais je suis à peu près sûr d'abord ce que je faisais quand faisant de ce jeu pour la première fois étais-je tout à fait comme tergiversé. Je ne suis pas du tout concentrer sur la la logique ou les pièces du puzzle, Je me suis concentré sur les graphiques et conclusion le poste de la rue et la poubelle et tout cela. Mais ceux étaient nécessaires ingrédients d'abord. Et une fois que je fini de tergiverser et établissant le cadre général, Je décidai, permettez-moi de faire un morceau de détritus tombent du ciel. Et nous allons voir Scratch soutient des choses appelées caractères sprites-- qui peuvent ont des costumes différents sur de sorte qu'ils semble différent. Et donc je mets une poubelle costume sur un tel sprite. Et je avais besoin à tomber du ciel. Et il se trouve, Scratch, comme la plupart des langages de programmation, prend en charge des nombres aléatoires ou nombres aléatoires techniquement pseudocode, de sorte qu'en faisant glisser et laisser tomber certaines pièces du puzzle, J'étais en mesure d'avoir la poubelle viennent de la gauche au premier abord. Et puis la prochaine fois il est tombé, de la droite, puis à partir du milieu. Et tout le jeu n'était juste ont poubelle tombant du ciel. Vous ne pouviez pas pointer ou cliquez dessus. On ne pouvait pas ouvrir la poubelle. Vous ne pouviez pas faire quoi que ce soit. Mais ce fut un pas de bébé vers ma vision ultime. Et après cela, je fait mis en place une sorte de détection de telle sorte que si vous avez cliqué et faites glisser sur le morceau de poubelle au cours de la poubelle, Oscar couvercle serait ouvrir et fermer. Rien ne se passerait-il à la poubelle, mais au moins le couvercle serait ouvrir et fermer. Alors vérifier, étape deux de deux. Et voici ce qui va être clé à la fois problème réglé zéro et dans la programmation plus généralement, est de prendre ces mesures très délibérées de bébé. Parce que non seulement il vous permet se sentir honnêtement accompli beaucoup plus quickly-- c'est la pire chose dans le monde pour essayer de mettre en œuvre tous Oscar Temps, puis heures plus tard frappé le drapeau vert, et rien ne fonctionne comme prévu parce que là où vous faire encore commencer à déboguer ou dépanner ce programme? Il est tout simplement écrasante. Et si véritablement embrasser cette idée de prendre à nouveau les étapes steps-- bébé et mise en place again-- quelque chose qui est, à la fin, vraiment impressionnant et complexe, mais au premier abord, est loin d'être aussi bien ainsi. En fait, nous allons le faire. Laissez-moi aller de l'avant et-- se Grattage existe sur le Web à Scratch.MIT.edu, et vous serez informé que bien encore dans le problème mis à zéro, le cahier des charges qui est déjà sur le site Web de CS50. Mais voici ce que gratter est lui-même. Et il y a vraiment juste trois principaux domaines. Au sommet, il a quitté est l'étape dite. Ceci est Scratch. Le costume par défaut est un chat. Et ceci est le monde rectangulaire que vous pouvez move-- haut, en bas, à gauche, à droite et quelques autres trucs. Au milieu voici nos catégories ou nos palettes de pièces de puzzle, et de couleurs différentes signifier différentes choses. Et si vous fouillez, vous verrez des choses comme des boucles et des conditions et variables et autres ingrédients. Et puis ici est la zone de scripts. Ceci est où je peux glisser-déposer ces pièces de puzzle à faire des choses. Donc, nous allons faire une telle chose. Laissez-moi aller de l'avant et-- et je sais où il est. Donc, je vais cliquer immédiatement sur où je sais que les choses sont prêts à être, mais pointant et en cliquant et farfouillé sont inévitables. Ainsi, lorsque le drapeau vert cliqué, qu'est-ce que je veux faire? Je vais le faire. Je vais faire glisser ce puzzle violet pièce, dire bonjour pendant deux secondes, et laissez-moi un zoom avant. Et je vais changer cette être ce que je veux qu'il être-- Bonjour tout le monde pendant deux secondes est très bien. Maintenant, je vais cliquer sur le drapeau vert, ou si je veux vraiment, Je peux plein écran, puis revenir. Il va tout simplement continuer tout dans une seule fenêtre. Vert flag-- monde bonjour. D'accord. Pas tout ce qui intéressant. Alors laissez-moi aller de l'avant et de faire cela. Permettez-moi d'essayer un autre. Lorsque le drapeau vert clicked-- de laisser faire quelque chose comme un son. Et remarquez que sur la boîte gratuitement, vous obtenez un son de chat, comme cela est le sprite par défaut. Alors maintenant, laissez-moi aller de l'avant et frapper le drapeau vert maintenant. [Miauler] Aw. C'est adorable. Je programmation. Alors qu'ai-je fait? Ceci est l'équivalent d'un programme. Il est évidemment super simple. Il n'a pas vraiment pris tout ce que beaucoup efforts et MIT ont fait la plupart du travail, mais je l'ai appelé une fonction. Je l'ai utilisé une fonction. Je me suis fait une certaine action, en utilisant seulement qu'un morceau de puzzle pourpre. Eh bien, si je veux faire trois miaule dans une rangée? Laissez-moi aller de l'avant et de faire deux et trois. Et remarquez que lorsque vous hover à proximité d'un morceau de puzzle, une petite ligne blanche apparaît sorte de magnétiquement, et il se cassera ensemble quand vous laissez aller. Voyons voir ce qui se passe ici. [Miauler] Il y a un bug. Je n'entends un miaulement. Pourquoi pourrait-il être? Ouais? Ouais. Nous ne pas vraiment entendre, mais cela est une bonne intuition. Ils jouent tous en même temps. Pourquoi? Eh bien, l'ordinateur va tout simplement de faire ce que vous lui demandez de faire. Donc, si vous dites, le jeu sonore, jouer son, jouer son, mais vous ne pas dire de jouer jusqu'à ce que vous avez terminé, jouer jusqu'à ce que vous avez terminé, il va souffler à travers le programme très rapide et ne seulement ce que vous lui demandez de faire. Donc je vraiment besoin de fixer cela dans un couple des manières. Je pourrais le faire, se débarrasser de cela. Je vais essayer cette autre casse-tête piece-- jouer meow sonore jusqu'à ce que fait, puis faites glisser trois ceux-ci et cliquez sur Lecture. [Miauler] Il est pas vraiment very-- vous-- remercier très naturel. Alors, pourquoi ne pas laisser je-- moi aller à contrôler ici. Agréable. Attendez une seconde, et maintenant je reviens aux sons, et la lecture du son jusqu'à ce que fait, puis laissez-moi attendre une seconde. Et puis laissez-moi aller chercher un plus de bruit, et ici nous allons. [Miauler] Un peu plus naturel, mais ce ne sont pas très efficaces. Comme j'ennuyais, tous être brièvement, en cliquant en arrière et vraiment dupliquer mon work-- à peu près copier et coller. En effet, si je contrôler cliqué ou à droite cliquée, Je pourrais viens copié et collé. Quelle serait une meilleure construire à utiliser? Quelle idée d'avant? Ouais, donc une boucle. Et en fait, si nous poked autour, nous pourrions trouver exactement cela. Permettez-moi de passer à des événements ou plutôt de contrôle. Alors repeat-- je ne veux que ce soit 10 fois. Cela va parfois ennuyeux rapidement. Mais je vais répéter trois fois. Permettez-moi de revenir au son et jouer le son jusqu'à ce qu'il soit fait. Permettez-moi de revenir au contrôle et juste attendre une seconde. Et remarquez, vous pourriez pense qu'il ne convient pas, mais encore une fois, si vous laissez magnétiquement encliquetage en place, il passera à combler. Qu'est-ce qu'il joue maintenant? [Miauler] D'ACCORD. Agréable. Et voici ce que l'on appellerait un programme qui est aussi correct. Il miaulait trois fois assez naturellement, mais il est mieux conçu. Je suis en utilisant moins de redondance. Je ne suis pas copier et coller quoi que ce soit. Je viens d'utiliser une meilleure idée. Maintenant, ce n'est pas encore tout ce que intéressante avec Scratch ne pas faire n'importe quoi. Alors, faisons quelque chose d'autre à la place. Faisons quelque chose pour toujours. Et tu sais quoi? La motion semble intéressante. Ayons bouger 10 étapes et a frappé le jeu maintenant. D'ACCORD. Eh bien nous pouvons sorte de glisser le dos, et il est toujours en cours d'exécution parce qu'il fait cela pour toujours. Ainsi, la boucle est en train de faire ce qu'il dit de le faire, mais ce n'est pas tout ce qui intéressant. Faisons cela. Permettez-moi d'ajouter un bloc de contrôle, et d'utiliser un de ces conditions pour la première fois. Donc, il va déplacer 10 steps-- 10 points, 10 pixels sur le screen-- alors il va se poser cette question. Si quelque chose est vrai, alors le faire quelque chose à l'intérieur de ce bloc. Donc, il se trouve de détection a un tout bouquet de expressions-- Boolean questions du oui non ou vrai false form-- me laisser faire cela. Si touching-- et puis il y a ce petit menu déroulant. Je peux le paramétrer. Si toucher le edge-- de nous faire quelque chose comme ça. Donc, si touchant edge-- permettez-moi de revenir à la motion. Et pourquoi ne pas nous venons de tourner autour de 180 degrés? D'accord. Donc, pour toujours, déplacer 10 étapes. Si vous touchez la bord, virage à 180 degrés. Et ce n'est pas la fin du programme parce que vous êtes dans une éternité bloquer, donc ça va aller encore et Encore et encore et encore. Donc, nous allons voir ce qui se passe. D'ACCORD. Un peu buggé, mais plutôt cool. Et nous pouvons ajouter à cela des choses stupides qui ne sont pas tout ce qui intellectuellement intéressant. Mais si nous avons frappé ce petit microphone button-- ouch. Permettez-moi de nettoyer cette place. Permettez-moi d'améliorer ce que ils diraient à la télévision. Nettoyez ça, Enregistrer, maintenant aller jusqu'à scripts. Et maintenant, laissez-moi aller au son. Permettez-moi de lui donner un nom. Je vais appeler ce ouch. Et maintenant jouer ouch son. Notez qu'il apparaît dans le peu menu déroulant. Voyons voir. [AIE] [EN RIANT] Mais nous pouvons changer t son à la volée. Nous pouvons être deux fois plus ennuyeux. [AIE] Ou si nous faisons comme 1000 marches à time-- D'ACCORD. Nous allons donc laisser qu'un seul. Encore une fois, la construction blocks-- I a commencé avec quelque chose de super simple, puis j'ai ajouté une fonctionnalité, ajouté une fonction, a ajouté une fonctionnalité. Et je ne dois plus à se soucier de comment la première de ces caractéristiques a été mis en œuvre que je continue à la couche des choses sur le dessus. Donc, en fait, laissez-moi faire un autre ici. Laissez-moi aller de l'avant et d'ouvrir un fichier J'ai apporté à l'avance, appelé Sheep. Donc, il a un peu différent caractère qui ressemble à ceci. Et permettez-moi de voir si je ne peux pas faire quelque chose en utilisant un compteur dans ce case-- une variable dite. Je vais aller de l'avant et sous Events-- laissez-moi un drapeau vert cliqué. Ensuite, laissez-moi aller aux données, que je connais à partir juste à jouer avant, est où les variables sont. Et je vais aller de l'avant et faites glisser ce. Donc, une variable appelée compteur, et Je vais l'initialiser à zéro. Je peux l'appeler anything-- x ou y ou Z-, mais dans la programmation, appelant quelque chose dans un sémantiquement manière utile, comme compteur, qui décrit ce qu'elle est, il est un beaucoup plus facile à lire votre code plus tard. Laissez-moi aller de l'avant et obtenir un bloc pour toujours ici. Et laissez-moi aller aux regards la page et faire un bloc Say. Mais ce qui est cool à propos des variables est I ne pas avoir à simplement taper dans quelque chose comme bonjour le monde, que nous avons déjà fait, je peux aller plutôt aux données et faites glisser ma variable, et même si la forme ne pas tout à fait ressembler à elle doit être adaptée, il se développera à combler. Et je vais juste dire le compteur pour une spoiler-- second-- il va compter. Nous disons pendant une seconde. Ensuite, je vais aller ont fait attendre pendant une seconde, donc ça ne compte pas trop vite. Et puis enfin, changer counter par One-- en d'autres termes, incrémenter le compteur d'une unité valeur ajoutée et faire ceci pour toujours. Donc, les moutons aussi, comme un programmeur, compte de 0. Et si nous attendons assez longtemps, il le fera toujours. Mais ce n'est pas tout à fait vrai, parce que en fait, comme nous allons découvrir dans la première semaine, entiers et les ordinateurs plus généralement, ont techniquement seulement finite-- bien, plutôt ordinateurs, lorsque ils représentent des nombres entiers, ont seulement un nombre fini de bits. Ces ampoules là-bas ne peut compter que si haut avant que vous êtes hors d'ampoules. Et un ordinateur aussi, ne dispose que de mémoire, ne dispose que tant de transistors, donc il ne peut compter que si haut. Ainsi, il apparaît que les moutons, Je pense que, peut compter jusqu'à 2 milliards ou quelque chose d'assez grand. Donc, on ne va pas à attendre que cela se produise. Mais finalement, un bug qui va se passer qui peut avoir un monde très réel ramifications. Mais au-delà du mouton, qui introduit juste une variable. Allons de l'avant et d'ouvrir quelque chose que je fis à l'avance ici appelé Pet the Cat-- Pet the Cat ici. Et remarquez ici, il est quelques-uns blocs, mais quand le drapeau vert cliqué, faire toujours ce qui suit. Si vous touchez la souris pointer-- de sorte que le curseur sur l'écran, le jeu arrow-- meow son puis attendre deux secondes. Et tout cela pour toujours. Juste attendre constamment pour voir si le pointer-- si le chat est en contact avec le pointeur. Donc, je frappe le jeu. Rien ne se passe. Mais comme je déplace le curseur sur le chat, [Miauler] Et si je me déplace loin, pas caresser le chat plus. Donc, une certaine logique conditionnelle niché à l'intérieur d'une boucle. Que diriez-vous cet exemple, délibérément appelé Ne pas caresser le chat? Qu'est-ce cela va faire? [Miauler] Pourquoi devriez-vous pas caresser le chat? [Miauler] D'ACCORD. Donc, ceci est un exemple d'un cas d'autre. Il est un point de décision et parce qu'il est assis dans la boucle, ils sont tous deux se vérifier. Est-ce vrai? Est-ce vrai? Est-ce vrai? Est-ce vrai? Et finalement, l'un des ceux qui va appliquer et vous entendez soit le miaulement ou le rugissement du lion dans ce cas. Eh bien, nous allons faire un un peu plus de fantaisie que je fis à l'avance too-- threads. Donc, un thread est juste un chose qu'un ordinateur peut faire. Ainsi, un programme multi-thread est un programme qui peut faire plusieurs choses à la fois. Et tous ces exemples, jusqu'à présent ont eu un seul script, ainsi speak-- un programme comme celui-ci ici. Mais notez ce programme a deux sprites, deux caractères. L'un est un oiseau. L'un est un chat. Et remarquez quand je clique sur ces bas à gauche, ils ont chacun leurs propres scripts ou des programmes qui leur sont associés. Et tous les deux de ceux programmes, avis, début avec quand drapeau vert clicked-- regardons la cat-- lorsque le drapeau vert cliqué. Et en effet, quand je frappe jouer maintenant, deux choses vont se produire à la fois. Le chat et l'oiseau sont à la fois va fonctionner simultanément pour créer cet effet. Et vous imaginez peut-être ce qui se passe. Il y a une boucle et l'oiseau et le chat sont dans une boucle. L'oiseau est tout simplement rebondir comme J'étais avant, quand je l'ai dit ouch. Mais le chat a clairement un avantage. Il y a un autre bloc de détection que les points le chat délibérément à l'oiseau dans ce cas ici. Donc, nous pourrions démêler, en regardant à travers ces blocs, ce qui se passe. Mais l'ingrédient clé ici est un. L'oiseau, de sorte que ce jeu est pas complètement boring-- ou ce animation-- commence à une direction aléatoire. Et l'ordinateur est la cueillette un nombre compris entre 90 et 180 essentiellement, de sorte qu'il est un peu différente animation chaque fois. Et puis notez ici, si le chat est en contact avec l'oiseau, puis jouer le lion quatre sound-- le rugissement. Mais entre-temps dans l'oiseau de palette, nous avons cela. Toujours, sinon toucher le chat, juste continuer à avancer trois étapes. Et puis voici une autre pièce du puzzle. Si vous êtes sur le bord, rebondir. Donc, l'oiseau est juste un peu garde sa propre entreprise, juste voler autour et rebondir, et il est vraiment le chat qui avait la logique conditionnelle pour déterminer si elle avait attrapé l'oiseau. D'accord. Alors, faisons un autre ici, celle-ci étant appelé Salut Salut Salut. Et celui-là ne vient cela dans une boucle pour toujours. Mais notice-- comment arrêter nous ce programme très ennuyeux? Appuyez sur la barre d'espace. Parce que si je fais ça, le program-- de la main gauche notez qu'il est constamment listening-- est la clé de presse de l'espace. Si la barre d'espace enfoncée, et si oui, que fait-il? Il fait une technique très courante. Il définit une variable égale à une certaine valeur. Mais il fait basculer cette valeur. [? Alors apparence?] sur la base du I shape-- une variable I écrit à l'avance appelé Muted, qui dit oui ou non. Est-ce que le son en sourdine ou non? Vrai ou faux? Et remarquez, je dis this-- si sourdine est zéro, puis changer pour un, le reste muet mis à zéro. Donc, il suffit de retourner la valeur de zéro à un. Je pourrais avoir done-- changer deux à trois et trois à deux ou quatre à cinq ou quatre à six. Mais il n'a pas d'importance quels sont les numéros que j'utilise, aussi longtemps que je garde changer le contraire. Et la plupart tout programmeur serait juste choisissez zéro et One-- vrai et faux, off et on-- pour représenter cela. Et cela est encore en cours d'exécution. Si je frappe à nouveau la barre d'espace [SEAL SOUNDS] Le programme est encore en cours. Parce qu'il ya cette autre scénario qui dit, pour toujours faire ce qui suit. Si la variable est égale à sourdine zero-- donc si vous n'êtes pas en sourdine est le logic-- si elle est fausse ou pas, puis jouer le son, parce que vous n'êtes pas coupé. Vous devez jouer le son, puis penser salut salut salut pendant deux secondes et puis attendre, et de le faire Encore et encore et encore. Et de cette manière ne nous avons un moyen pour personnes to-- pour les programmes d'interagir. Et ils ne doivent être comme date d'autres. En fait, piquer around-- sans jeu de mots-- quelqu'un a passé une énorme quantité de temps sur Internet la mise en œuvre PokemonGo dans Scratch. Il vous géolocalise même dans Cambridge ou Allston ici. Donc, si vous voulez voir aussi ce que les gens peut faire est this-- le menu très chic. Cliquez ici. Ceci est moi avec mes touches fléchées maintenant. Je vais aller après cela. Cliquez sur. Et maintenant, vous cliquez sur le pokeball. Je veux dire, je pense que vous êtes censé cliquez sur le pokeball. D'accord. Donc je l'ai fait. Je peux aller ici. Et cette personne mis en œuvre un peu plus Pokéballs plus ici-- trois Pokéballs. Nous publierons un lien vers cette en ligne de sorte que vous pouvez jouer. Mais remarquez il y a juste certains éléments de base. Il ressemble beaucoup plus fantaisistes, et il est. Ceci est impressionnant et plus que nous le ferions normalement attendre, certainement pour le problème mis à zéro. Je ne sais pas combien de temps cette personne a passé en ligne. Mais il est tout simplement une boucle. Il y a un jeu sonore. Il y a une sorte de boucle l'écoute pour savoir si je suis frapper la flèche vers le haut ou le bas une flèche ou la gauche et la droite, puis le cas échéant, il se déplace il un certain nombre de pixels. Et puis si je clique sur un autre sprite, il est une sorte de si l'état là. Ouais, ça devient trop intense. Nous allons arrêter. Ce sont tous ces éléments de base. Il n'y a pas d'autres ingrédients autres que ceux que nous avons examiné déjà. Et pourtant, ici, laissez-moi faire une dernière série d'exemples qui brosse un tableau trop de ce que vous pouvez faire ici. Voici un programme très simple qui juste fait this-- la toux, la toux, la toux. Et sur la base uniquement sur ce que nous avons examiné jusqu'ici, où est l'évidence possibilité d'amélioration. Ce programme est correct. Il tousse trois fois, qui est ce que je voulais. Mais il est mal appliquée. Il est mal conçu. Pourquoi? Ouais. Ce n'est pas une boucle. Et il est pas tellement que ce n'est pas une boucle, il est qu'il ya beaucoup de redondance. Il est copié et code collé, pour ainsi dire. Et la solution probablement est en effet une boucle. Alors laissez-moi aller de l'avant et d'améliorer cela. Et je vais faire glisser ces ici. Laissez-moi aller de l'avant et obtenir une répétition bloc, modifier ce à trois. Je vais jeter certains de ces blocs. Et vous remarquerez qu'il est assez intuitive. Vous faites glisser-déposer et les choses apparaître et disparaître à terme. Et je peux simplement faire glisser cette ici, et maintenant j'ai une version plus propre encore. Mais tu sais quoi? Il y a cette possibilité maintenant abstraction-- pour commencer à définir un nouveau vocabulaire que le MIT n'a pas anticipé. Il y a attendre et répétez et pour toujours et si, mais si je veux introduire le mot toux comme un bloc? Que faire si je veux un morceau de puzzle dont le but dans la vie est de tousser? Eh bien, regardons cette version ici, que je fis comme suit. Magiquement, j'ai créé ce puzzle morceau ici, qui Scratch vous permet de faire. Et en effet, C et Python et sont JavaScript va vous permettre de faire aussi bien. Vous pouvez créer votre propre morceaux que vous appelez ce que vous voulez. Dans ce cas, la toux se sent comme une définition raisonnable. Et puis avec ces morceaux vers le bas ici vous pouvez définir ce que cela signifie. Je glissés et déposés à partir cette palette ici-- plus blocks-- ce grand violet bloc, où je tapais dans la toux comme le nom de ma nouvelle pièce du puzzle. Et puis je veux dire chaque fois qu'un utilisateur appelle cette nouvelle pièce toux puzzle, faire un exemple et une attente. Et ici, dans mon bloc de répétition, Je peux juste tousser trois fois. Et je dirais, en particulier si maintenant vous cachez ce détail. Qui se soucie de la façon dont la toux est mis en œuvre? Tout ce que je me soucie comme programmeur que je peux tousser. Je ne me soucie pas comment dire est mis en œuvre. Je me soucie seulement que le chat peut dire quelque chose. Je peux abstraire ce détail et seulement se concentrer sur ce qui est sur l'écran ici. Mais je peux prendre un peu plus loin. Notez que ici, je dois mis en œuvre la boucle trois fois. Mais si je prends la place de cette version? Et si au lieu dans cette version ici, Je viens de changer ma pièce de puzzle à prendre un argument et entrée à elle-même? Et cette entrée peut être un nombre comme trois. Alors maintenant, si je vous écris un programme et je veux que le chat à tousser, Je peux effectivement dire le casse-tête reconstituer le nombre de fois à la toux, parce qu'au fond ici, un amateur version de ces pièces de puzzle personnalisé me permet de préciser que la toux prend effectivement un input-- prend un argument comme celui-ci. Et tu sais quoi? Peut-être que je me rends compte, attendez une minute. Tousser est le same-- il est fondamentalement la même idée que les éternuements. Il est juste un autre mot sur l'écran. Je peux abstraire plus loin et mettre en œuvre cette version finale d'un toux, qui à première vue est beaucoup plus complexe à la recherche. Mais ce que je remarque ai fait. J'ai maintenant generalized-- genericized really-- cette pièce de puzzle d'être appelé disent mot n fois. Et maintenant, j'ai deux nouvelles pièces de puzzle ici définir la toux n fois. Et qu'est-ce que la fonction de la toux faire? Qu'est-ce que ma coutume pièce de puzzle faire? Il appelle simplement le bloc de dire, passant dans le mot que je veux dire, passant du nombre de fois que je veux dire. Parce que maintenant je peux mettre en œuvre éternuer en disant simplement achoo, dans ce cas, un certain nombre de fois. Et donc je suis la superposition et la superposition. Et encore une fois, la clé ici est pas comment je mis en œuvre, mais le fait que si je viens littéralement déplacer ceux-ci hors de l'écran, regarder comment simple sinon joli mon programme ressemble maintenant. Parce qu'il fait ce qu'il dit, je suis abstrait loin de ce qui est à l'intérieur de cette boîte noire. il arrive à être une boîte violette ici, mais je l'ai obstrué loin ce qui est à l'intérieur parce que je ne me soucie pas comment cela fonctionne. Je me soucie seulement maintenant que cela fonctionne. Et en effet, dans le problème mis à zéro, c'est exactement le genre de superposition des idées que vous aurez ont la possibilité d'explorer. Il est exactement l'occasion de appliquer les techniques de résolution de problèmes, à ce qui est sans doute une environnement inconnu. Et si vous ne l'avez pas programmé avant ou programmé, vous trouverez qu'il ya un petit quelquechose dans cet environnement pour tout le monde. Et avec problème posé l'un dans le temps d'une semaine, nous serons passés à se concentrer sur un langage de niveau supérieur appelé C-- ou plutôt un faible langue de niveau appelé C-- qui est encore plus puissant, même si elle est un peu plus cryptique au premier coup d'œil. Et vous vous rendrez compte par la TL d'aujourd'hui: DR, que ce problème posé a une plus courte fenêtre de temps que celles à venir, tout simplement parce que vous devriez trouver assez accessible. Et ne vous inquiétez pas si vous ajoutez la classe en retard. Nous allons aborder cela avant longtemps. Et avant de lever la séance pour le gâteau, nous allons finir avec juste un regard de deux minutes à ce qui vous attend ici à CS50. [MUSIC PLAYING] D'accord. Voilà pour CS50. Nous vous reverrons bientôt. Gâteau est maintenant servi. [MUSIC PLAYING] ENCEINTE 17: Avez-vous entendu d'un congé sabbatique, chef? ENCEINTE 18: Peut-être il y a plus sous le capot.