DAVID MALAN: Bienvenue à nouveau, tout le monde. Donc hier, vous vous souviendrez que nous nous sommes concentrés sur ces sujets ici. Donc, nous avons eu quatre topics-- global la vie privée, la sécurité, et de la société; technologies de l'internet; cloud computing; et, finalement, le développement web. Quelqu'un at-il le la bande passante ou du temps pour regarder un peu John Oliver hier soir? Il est en fait assez amusant, sinon un peu effrayant. Toutes les questions sur quoi que ce soit nous avons fait hier? Toute précision? Toutes les questions que vous voulez faire que nous touchons aujourd'hui sous une certaine forme? ardoise Alors propre. Alors, quel est l'ordre du jour pour aujourd'hui? Je pensais que nous allions commencer aujourd'hui avec un coup d'oeil à ce qui est généralement connu sous le nom thinking-- de calcul au le risque de trop simplifier, pensant comme un ordinateur, peut-être penser comme un ingénieur, et essayer de commencer à organiser vos pensées ou pour vous donner une meilleure idée de ce qui est impliqué dans le fait commandant un ordinateur de faire quelque chose par le biais de la programmation. Et nous allons le garder à un joli de haut niveau, à peu près l'anglais, mais essayez d'utiliser des familiers exemples de formaliser la façon dont vous iriez sur la résolution de problèmes. Et nous allons revoir certains CS sujets, comme l'abstraction, qui est entré un couple de fois hier, algorithmes, puis la représentation. Et voilà où nous allons commencer aujourd'hui dans un instant. Ensuite, nous allons jeter un oeil à la programmation. Nous allons jeter un oeil à certains constructions fondamentales avec lequel vous pourriez être familier et pourrait même trouver assez intuitive. Nous allons voir, en effet, à une programmation de l'échantillon environnement qui est très accessible, très ludique, et bien ciblé pour 12 ans et plus. Nous allons passer quelques minutes il puis prendre les choses à un niveau inférieur et effectivement parler de certains les algorithmes et structures de données, pour ainsi dire, que programmeurs utilisent généralement pour résoudre des problèmes beaucoup plus efficacement que vous pourriez être en mesure de le faire sans eux tout à fait. Puis, après le déjeuner, nous allons jeter un coup d'oeil à piles de la technologie, qui est juste une façon élégante de dire collections de technologies que vous pourriez utiliser pour résoudre un problème. Et nous allons parler de l'alphabet soupe de langues qui existent today-- Java et Python et C ++ et PHP et Ruby et toutes sortes d'autres choses. Nous allons jeter un bref regard au design patterns. Les programmeurs, au fil du temps, ont des méthodologies adoptées qui tendent à les aider résoudre les problèmes plus facilement. Lorsque vous commencez à vous voir écrire le même type de code encore et encore, personnes formalisent ces répétitions et les noms de leur attribuer et ensuite les utiliser et promouvoir, en fin de compte. Et nous allons parler un peu sur les stratégies mobiles, comme ce que cela signifie réellement faire une application mobile ou un site Web mobile. Avez-vous le faire pour Android? Avez-vous le faire pour iOS? Avez-vous le faire pour deux personnes? Et quels sont les compromis? Et puis finalement, nous allons une programmation web de regard, qui est un terme collectif vraiment décrivant tout moment vous écrivez un logiciel qui est destiné à fonctionner sur le web, que ce soit sur les téléphones ou ordinateurs de bureau ou ordinateurs portables. Nous allons jeter un bref regard sur bases de données et la conception celui-ci, si seulement parce que presque tous les application web intéressante ces jours-ci a une sorte de base de données. Sinon, il serait juste être contenu statique. Et une base de données vous permet de faire les changements au fil du temps, que ce soit vous-même ou des utilisateurs. Et nous allons examiner comment vous irait sur la conception cette base de données et le type de jargon qui pourrait venir dans un ingénieur de discussion à un tableau blanc alors qu'en réalité, la mise en œuvre une application pour la première fois. Nous allons parler brièvement de API, services utiles que vous pouvez utiliser pour se tenir debout sur la épaules des autres, que ce soit les entreprises ou des individus, et résoudre votre propres problèmes plus rapidement. Et puis nous allons peut-être Dabble un peu avec JavaScript, un langage de programmation qui est utilisé les deux dans les navigateurs ces jours-ci, mais aussi dans les serveurs. Et peut-être, nous allons revisiter le temps le permet, quelques-unes des mains sur la toile des choses que nous a fait hier et intégrer les deux ensemble avant de lever la séance. Donc, avec ce qui est that-- ahead-- est il manque quelque chose que vous aimerait nous assurer que nous insérons et toucher à un moment donné. Si ses sources à l'esprit, le mettre avant longtemps. Mais pourquoi ne pas commencer avec un regarder la pensée informatique. Et permettez-moi de proposer que la pensée de calcul est, encore une fois, sorte de la description de haut niveau de quel informaticien pourrait faire. Et en effet, nous allons commencer avec trois ingrédients qui pourrait aller dans la pensée de calcul. Ceci est juste une façon de le décrire. Nous pourrions certainement définir ceci dans n'importe quel nombre de façons. Mais permettez-moi de proposer, pour l'amour d'aujourd'hui, que les problèmes du monde, tous les problèmes du monde, quand il est approché par un informaticien pourrait être considéré comme ce que nous allons entrées d'appel, qui besoin de se nourrir dans ce que nous appellerons algorithmes, qui donnent ensuite des sorties. En d'autres termes, la totalité monde de la I revendication de résolution de problèmes peut être distillée dans ces trois ingrédients. Alors qu'est-ce que je veux dire par les entrées? Entrées est juste ce que vous êtes remis afin de résoudre. Par exemple, voici un problème de vieille école. Si je dois un livre de téléphone ici et Je veux regarder quelque chose en elle, ceci est mon entrée. J'ai 1000 ou plus pages dans un annuaire téléphonique. Ceci est l'entrée à mon problème. Et je veux trouver quelque chose comme Mike Smith, donc un ami dont le nom et le numéro est nous espérons que dans ce carnet d'adresses. Ceci est avant les jours de cellule téléphones, donc je ne peux pas simplement chercher. Donc, je dois le faire vieux la recherche de l'école et fait ces entrées pour une certaine réponse. Et cette réponse va tout simplement à appeler la sortie. Donc, l'entrée est le livre de téléphone. L'algorithme est quelque ensemble de étapes que j'utilise pour trouver Mike Smith. Et la sortie est, espérons-le, le numéro de téléphone de Mike Smith. Et ce serait alors juste représentant de la plupart aucun problème à vous êtes entrées mains et que vous voulez produire des résultats. Donc, avant que nous considérons le processus par lequel nous pouvons résoudre ce problème, trouver Mike Smith et quelque chose comme ca, nous allons examiner la première et les entrées et sorties last--. Physiquement, bien entendu, ici l'entrée est tout un tas de papier collés ensemble sous la forme d'un annuaire téléphonique. Mais les ordinateurs, des ordinateurs portables course-- et les postes de travail et même les téléphones ces days-- ceux qui sont appareils électroniques. Et à la fin de la journée, ce qui est la seule entrée à un ordinateur? Eh bien, il est quelque chose comme ce cordon d'alimentation ici. Je branche dans le mur, et Je reçois un flux d'électrons, qui me permet de faire fonctionner la machine. Ou peut-être ces électrons sont créé par le biais de ma batterie. Mais à la fin de la journée, qui est la seule chose entrer dans mon ordinateur portable. Et tellement intéressant stuff est en fin de compte sortant, que ce soit par le biais de l'imprimante, ou l'écran ou déficients auditifs ou similaire. Donc, si tout ce que nous avons comme fondamentale entrée à un ordinateur est l'électricité, si juste électrons aller et ou arrière, et comment pouvons-nous utiliser cette entrée pour représenter effectivement l'information? En d'autres termes, comment pouvons-nous d'un simple flux d'électricité à la représentation réelle des chiffres ou des lettres réelles ou des images réelles sur l'écran ou des films réels ou des e-mails ou un nombre quelconque de ceux-ci concepts de niveau supérieur, si vous voulez, que, à la fin de la journée en quelque sorte doivent être stockées dans cette dispositif mécanique électronique en utilisant uniquement les simples ingredients-- électrons entrant et sortant? Donc, il semble que, dans la forme la plus simple, le seul type d'états J'ai dans mon monde, de sorte à speak-- conditions dans mon monde-- est soit Je électrons circulant, l'électricité qui coule, ou je pas-- ainsi de suite, au large. Et nous allons formaliser sur et en dehors, en tant que chercheur en informatique pourrait, avec juste 1 et 0. Disons simplement décrire une certaine arbitraire mais nombre constant à elle. 1 signifie sur, 0 signifie off. Ou vous pourriez aussi voir ce que vrai moyen sur et de faux moyens. Vous pouvez également faire noir et blanc ou rouge et bleu. Vous avez juste besoin de deux descripteurs. Et un des informaticiens serait utiliser généralement 0 et 1. Donc, si tel est le cas, mon seul alphabet est composé de 0 et de 1, comment pourrais-je obtenir pour égaliser le nombre 2 dans un ordinateur, et encore moins le nombre 3 ou une lettre de l'alphabet ou une image ou un film? Comment peut-on sorte de bootstrap nous-mêmes de ce principe de base de 0 et de 1 et effectivement représenter quelque chose de plus intéressant? Eh bien, nous allons mettre cette question en attente pour un instant et envisager quelque chose espérons-familier, même si vous ne l'avez pas vraiment pensé il en détail à 10, 20, 30, 40, 50 années. C'est quoi? Comment vous prononcer ce? Pas une question piège. Un certain nombre, mais qu'en est-il? 1, 2, 3 ou 123. Et j'aimé la façon dont vous avez dit 1, 2, 3, parce que c'est une façon de le visionnement. 1, 2, 3, il y a une séquence de trois symboles. Il est des images que nous ont maintenant des mots pour. Et si vous sorte de les lire tous ensemble, un humain typique en anglais dirait 123. Et c'est une sorte de supérieur concept de niveau, se sent comme un assez grand nombre. Mais comment avons-nous y arriver? Eh bien, il pourrait être un moment depuis vous avez pensé à ce sujet comme celui-ci, mais de retour dans ma journée, je sorte de appris cette comme la colonne du 1, les années 10 colonne et la colonne du 100. Donc, comme le dit Lakisa, il est 1, 2, 3, mais il y a aussi 123. Mais comment pouvons-nous obtenir de la première à la seconde? Eh bien, vous devez généralement faire la colonne du 100, j'ai 1. Voilà donc à dire 100 fois 1. Et puis, dans la colonne de 10, je dois 2. Voilà donc comme dire 10 fois 2. Dans la colonne du 1, je dois 3. Voilà donc comme dire 1 fois 3. Et si j'ajouter ces choses en même temps, ceci, bien sûr, 100 est plus les 10 plus 3. Et oh, voilà pourquoi je reçois ce supérieur notion de niveau de 123. Il est juste mathématiques de base, de sorte que ceux-ci symboles ont un poids pour eux, si vous sera, espace réservé ou les valeurs des colonnes. Et une fois que je multiplie tout , je reçois ce nombre. Alors combien d'entre vous savez comment parler binary-- 0 et 1's-- comme un ordinateur? OK, parfait, personne, ou aucun d'entre vous pense que vous faites. Mais je voudrais vous demander réellement savoir déjà. Nous avons juste besoin sorte de tordre notre modèle mental un peu de bits. Mais le processus est exactement le même. Permettez-moi de laisser celui-là et à la place tirer de cette baisse pour un moment. Dans le monde des ordinateurs, nous avons seulement de 0 et de 1. Et la chose qui est va changer est quoi? Eh bien, dans mon monde humain, système décimal, diminuer sens 10, Je dois le nombre de chiffres à ma disposition? 10, non? 0 à 9, bien sûr. Et voilà pourquoi nous avons la de 10 la place et la place du 100. Où est ce que vient? Eh bien, cela est 10 à la puissance de 0. Ceci est 10 à la puissance de 1, 10 à la puissance de 2, et ainsi de suite. Vous continuez à multiplier vos colonnes par 10, en commençant avec juste 1 dans la droite un ici. Ainsi, dans le monde de la ordinateurs, si vous ne avoir un sens bi binary-- 2-- ou 0 et de 1, nous avons juste vraiment besoin de changer la base de ce calcul. Donc, en d'autres termes, maintenant nous allons juste ont la colonne du 1 et the-- où est ce going-- la colonne du 2, la colonne du 4, et peut-être au-delà. Pourquoi donc? Eh bien, cela est 2 le 0-ième puissance. Ceci est le 2 1. Ceci est 2 à 2, et ainsi de suite. Donc, alors qu'ici, nous avons 1, 10 de, 100 de 1000, de 10.000, de, 100.000 de, 1 millions, et ainsi de suite, ici nous avons 1, 2, 4, 8, 16, 32, 64. Vous continuez à multiplier par 2, au lieu de continuer à multiplier par 10. Alors maintenant, si l'objectif à la main est de représenter numéros en utilisant uniquement de 0 et de 1, nous allons examiner comment nous y arriverons. Ceci, bien entendu, est le motif 0 0 0, mais ce nombre conceptuellement que cela représente? Eh bien, 4 fois 0 et 2 fois 0, plus 1 fois 0, ajoutons ceux ensemble. 4 fois 0 est, bien sûr, 0, plus 2 0 fois est, bien sûr, 0 plus 1 fois 0 est, bien entendu, 0. Donc, ah, cela représente la numéro nous, les humains savent que 0. Eh bien, maintenant, nous allons très rapidement de l'avant rapidement. Si je place ne représente pas 0 0 0, mais nous allons faire 1 0 1, qui pourrait être la façon dont Lakisa, plus tôt, serait tout simplement prononcer 1 0 1. Mais maintenant, comment pouvons-nous le prenons à la plus élevée niveler le nombre nous, les humains savent peut-être? Alors, quel est ce nombre? Il est 5, le nombre que nous savons que 5. Eh bien, pourquoi est-ce? Eh bien, nous pouvons vraiment sorte de marcher à travers méthodiquement 4 fois 1, 2 fois 0, 1 fois 1. Ajouter les ensemble, donc ceci est 4 plus 0 plus 1. Et c'est, en effet, 5. Donc, ça devient un peu fastidieux maintenant faire encore et encore l'arithmétique. Mais le processus est exactement le même. La seule chose qui a changé dans notre monde est que les colonnes 1, 2, 4, 8, 16, et ainsi de suite, au lieu de 1, 10, 100, 1000. Et ce qui est juste parce que notre alphabet a diminué de 0 à 9 pour seulement 0 à 1. Donc, comme un petit quiz ici, comment Vous représentez le numéro 7 en binaire? 0? Eh bien, 0, vous voulez dire 0 0 0? Dites-le à nouveau, Karina. Parfait. Pourquoi donc? Il est effectivement 4 plus 2 plus 1. Tellement bon. Comment représentons-nous un peu another-- diriez numéro 2? Fermer, mais à l'envers. Alors qu'est-ce? Est 4 plus 1, de sorte que ce 5 nouveau. Alors what's-- Je suis désolé, Karina? 0 1 0. 0 1 0 serait 2, car encore une fois, même si ce genre de ne saute pas sur vous, il suffit de faire le calcul. 4 fois par 0, 0, 2 fois 1 est 2, 1 fois 0 est 0. Donc, ceci est le nombre que nous savons que 2. Que diriez-vous le numéro 8? Hm? Bien. Nous avons donc besoin d'un autre type d'espace réservé. Nous avons besoin de 1 0 0 0. Et cela est vrai de notre espèce du vieux système scolaire décimal. Comment représentez-vous le nombre de 1000? Eh bien, vous semblez être en quelque sorte dans une situation difficile, si vous demandez à représenter le nombre de 1000, parce que même si vous vous donnez comme 9 d'entre eux, 9 d'entre eux, 0 de ceux-ci, qui est le plus grand nombre que vous ont, vous ne l'avez pas tout à fait obtenir à 1000. Donc, si vous 1000, vous avez juste besoin d'un autre la position, de sorte que vous pouvez faire 1 0 0 0, ergo le nombre 1000. Alors maintenant, nous allons map ce genre de discussion conceptuelle retour au matériel, où encore une fois, l'entrée était juste ce petit câble d'alimentation, l'électricité entrant et sortant. Et pour cela d'être mappé à partir d'ici là, eh bien, qu'est-ce que nous avons vraiment besoin? Eh bien, vous pouvez penser à être à l'intérieur d'un ordinateur, tout un tas d'ampoules, si vous voulez. Ils sont vraiment appelés transistors. Et les transistors commutateurs sont simplement qui peut être soit allumé ou éteint. Ainsi, vous pouvez penser à un transistor qui est sur permet à l'électricité de circuler et un transistor qui est hors de l'arrêt l'électricité de circuler. Et plutôt que de prendre sur les lumières ici, pourquoi dois-je faire pas ce genre du nouveau style de l'école. Donc, cela pourrait être un 1, une lampe de poche être sur, à peine si. Et cela pourrait être un 0, et maintenant il est hors tension. Donc, en utilisant ce dispositif physique, je peut maintenant représenter le système binaire. Je dois juste deux états. Il n'a pas d'importance ce que la couleur, il est ou ce qu'elle est. Tout ce qui importe est que je dois un Etat sur un autre état d'arrêt. Donc, en utilisant mon téléphone ici, comment puis-je représenter le nombre que nous savons que 0? Ou mettre équivalente, ce qui Numéro suis-je représente maintenant? 0, car l'appareil est hors tension. Et si je fais ça? Et maintenant, comment puis-je représenter le numéro 2? Puis-je emprunter votre téléphone ici, comme nous l'avons fait hier? Donc, nous allons voir, donc si je veux représenter le numéro 2, est-ce le numéro 2? Non. Quel numéro suis-je accidentellement représentant ici? Ceci est en fait le numéro 3. Alors, qui que je veux éteindre? Le téléphone noir ou-- bien, si they're-- téléphone noir ou le téléphone blanc? Le téléphone blanc. Donc, si je désactiver cette fonction et nous l'aligner ici, nous avons un 1 à la place de la 2 et un 0 à la place de la 1. Et donc je suis maintenant représentant le numéro 2. Et cela, bien sûr, serait le nombre 3, parce que maintenant ces deux lumières sont sur. Et je vais arrêter ici, mais il va de soi si je veux représenter le le numéro 4 ou 8 ou supérieur, Je vais avoir besoin de plus de téléphones. Mais c'est tout ce qui se passe. Donc, si vous avez jamais entendu que intérieur de a-- remercier ordinateur vous-- est des millions de transistors, c'est seulement des millions de minuscules petits interrupteurs. Et ils ne sont pas la lumière ampoules qui tournent sur et en dehors, mais ils ne permettent ni l'électricité à couler quelque part ou de l'arrêter. Et donc il y a vos deux Unis-- allumé ou éteint, allumé ou éteint. Donc, nous semble maintenant d'avoir cette capacité pour représenter ce concept nous aimerions en matériel réel. Mais tout ce que nous avons maintenant est la capacité pour représenter des nombres il semblerait. Alors, comment allons-nous représenter lettres de l'alphabet, qui se sent comme la prochaine sorte de fonctionnalité, vous voudrait ajouter à un ordinateur moderne une fois que vous avez des chiffres? Et en effet, si vous pensez elle, historiquement, les ordinateurs ont été introduits vraiment servir que les calculatrices numériquement. Mais bien sûr, ces jours, ils font beaucoup plus. Même quand ils démarrent, vous voir généralement un ou plusieurs mots. Alors, comment vous représentez des mots, si tout ce que vous avez est, encore une fois, l'électricité à la fin de la jour, ou de manière équivalente de 0 et de 1? Ouais. Ouais, je veux dire, nous sorte de fait hier sous une certaine forme, où à un moment donné, Je pense que je arbitrairement dit que, si nous voulons représenter la lettre A, nous pourrions simplement appeler cela un 1. Il est dans le cadre de la cryptographie, où nous voulions juste une sorte de code, une sorte de cartographie. Alors peut-être A sera représentée comme 1 et B seront représentés en tant que 2, et Z sera représentée en 26, par exemple. Et alors la seule réserve est que si je suis va encoder des lettres dans mes e-mails ou dans mes messages texte sous forme de nombres, vous tous se mettre d'accord pour utiliser la même ensemble de conventions. Et en effet, le monde a fait exactement cela. Il existe un système dans le monde appelé ASCII, American Standard Code pour l'échange d'information, qui est tout simplement une décision quelques années il y a que les humains ont fait que a décidé que A va égaler, pas 1, 2, et 26, et ainsi forth-- c'est un peu different-- mais 65, 66, 67. Et je vais tirer un graphique dans un instant. Mais il est arbitraire. Mais il n'a pas d'importance qu'il est arbitraire. Le monde doit juste être cohérent. Or, plus récemment, il y a quelque chose de l'amateur appelé Unicode, parce que le genre du monde de réaliser, après avoir inventé les ordinateurs, qu'il n'y a plus que bien 256 symboles dans le monde que nous pourrions représenter, surtout quand vous introduisez langues asiatiques et autres symbologies qui ont besoin de plus d'expressivité que vous peut tenir dans la première version de ce code, qui a été appelé ASCII. Donc Unicode permet effectivement d'utiliser plus 0 et 2. En particulier, vous continuez à entendre la octets de mots dans la société et même seulement hier. Et un octet est ce nouveau? Qu'est-ce qu'un octet? Il est à seulement 8 bits. Alors qu'est-ce que cela signifie réellement? Eh bien, cela signifie que, plus tôt, quand nous étions parler binaire et je suis en utilisant arbitrairement trois bits lorsque nous étions parler binary-- la place du 1, la place de la 2 et la 4 puits de place--, un octet signifie simplement que vous parlez pas en unités de trois, mais quatre, cinq, six, sept huit, ce qui nous donne la place de 8, De 16 ans, 32, 64 de son et de 128. En d'autres termes, un bit est pas toutes qu 'une unité de mesure utile, parce qu'elle est comme un minuscule élément d'information, ou le désactiver. Donc, il y a quelques années, le monde vient de décider il est un peu plus commode de parler en termes d'octets, huit choses à la fois. Et ainsi est né la notion d'un octet. Et nous avons donc huit bits ici. Et il se trouve, aussi, pour la même raisons, le monde a décidé ans il y a que pour représenter une lettre ASCII, vous allez utiliser des unités de 8 bits. Donc, même si vous ne le faites pas besoin que beaucoup, vous êtes allant toujours utiliser 8 bits pour représenter une lettre de l'alphabet. Et cela est pratique, car alors si vous recevoir un message qui a un 0 0 0 1 1 1 1 0 suivie d'une autre 1 1 1 0 1 0 0 1, donc si vous recevez 16 les bits, le monde peut simplement supposons que les 8 premiers sont une seule lettre et le second 8 sont une autre lettre. N'a pas d'importance combien il y a. Il importe simplement que nous sommes tous compatibles quand on interprète ces bits. Et ce fut tout simplement aléatoire. Cela signifie quelque chose, mais je ne vraiment penser à ce que cela signifie. Il est donc un petit mensonge. A l'origine, ASCII en fait utilisé que 7 bits. Et le huitième bit est appelé ASCII étendu. Mais le point est, en fin de compte, le même. Le monde en général normalisé sur 8 bits. Donc, cela semble être un peu limiter, parce que je ne peut représenter le capital A, le capital B à Z. du capital Mais en effet pas, si je vais to-- il y a un tas de ressources en ligne, par exemple, asciitable.com, cette va être un peu écrasante au premier abord. Mais je vais souligner ce qui est important ici. Cela se produit juste pour être-- et je vais walk-- nous allons voir, si je vais ici. Voici, dans la décimale colonne, le numéro 65. Et sur la lettre de la colonne de droite caractère, Chr, est la lettre A. Et vous pouvez ignorer, pour l'instant, tout au milieu. Ceci est hexadécimal, octal, et un code HTML. Pour ce site est juste essayer de jeter beaucoup d'informations à vous à la fois. Mais tout ce que nous soucions est la virgule colonne et la colonne de caractères. Donc, par cette logique, ce qui est le nombre que le monde a décidé représente un a minuscule? Oui, 97. Et juste pour confondre éventuellement légèrement, ce nombre a décidé le monde représenterait le numéro 1? Droit, parce nous-- 49, il semble ici, dans le coin inférieur gauche. Maintenant, qu'est-ce que je veux dire par là? Ainsi, il apparaît que dans les systèmes informatiques, il existe généralement une différence fondamentale entre un nombre et un caractère. Un nombre est la chose que nous appris en grandissant lorsque nous étions super-jeunes à l'école primaire. Il est des choses que vous comptez avec. Mais un personnage est juste une forme, une glyphe, pour ainsi dire, à l'écran. Maintenant, nous les humains sorte de voir quelque chose qui ressemble à ceci. Et nous disons, oh, qui est le numéro 2. Mais non, c'est juste un symbole qui ressemble comme ce que nous savons que le nombre 2. Et donc il y a cette distinction fondamentale entre les chiffres réels et des personnages. Ceci est un nombre. Mais de façon générale, dans le le contexte d'un ordinateur, si vous voyez la place quelque chose comme ça quoted-- et vous ne le faites pas toujours faut le voir cité, mais pour le bien de discussion-- si vous voyez des guillemets autour du nombre, ceci est maintenant un caractère. Donc, ce numéro 2 ci-dessous le capot à l'intérieur d'un ordinateur serait représenté avec un motif de bits représentant le nombre 50 selon le tableau en ligne. Cependant, si un ordinateur voit tout cela, ce serait représenté par le modèle de bit 0 0 0 0 0 0 1 0. Considérant que, ce personnage serait être effectivement représenté as-- et maintenant, Je suis arrivé à penser un peu harder-- donc ce caractère serait représenté avec 0 0 1-- que dois-je ici? 0 0 1 1 0 0 1 0. Comment ai-je fait cela? Eh bien, c'est le numéro 50, si vous multiplier à l'aide de ces colonnes, ceci est le numéro 2, etc. Voilà pourquoi il y a cette dichotomie. Et ceci est juste un Teaser maintenant fonctionnalités qui existent dans les langages de programmation que nous allons aborder brièvement plus tard aujourd'hui. Dans les langages de programmation, vous avez généralement, mais pas toujours, les choses appeler différents types de données. En d'autres termes, une programmer-- quand il ou elle est en train d'écrire, un programmeur doit décider dans quel le format pour stocker ses données. Les données peuvent être soit des magasins comme chiffres bruts, comme le numéro 2. Ou vous pouvez les stocker sous forme de chaînes, ou des séquences de caractères que vous généralement exprimer avec citations dans votre langage de programmation. Vous pouvez avoir des choses called-- Je vais trop simplifier et de les appeler réel numbers-- donc des chiffres qui ne sont pas des nombres entiers tels que le nombre 2, mais les chiffres aiment 4,56. Donc, les nombres réels peuvent également avoir des points décimaux, de sorte que c'est une autre fondamentale morceau de données dans un ordinateur. Et puis vous pouvez même avoir d'autres types de données fixes. Voilà juste un teaser vraiment de le plus simple des décisions de conception qu'un programmeur pourrait faire sous le capot. Donc, des questions pour l'instant? Donc, nous allons essayer de faire cela un peu plus réel. Ce matériel ne tellement plus utilisés. Mais presque tout le monde dans cette salle probablement a grandi avec et utilise encore les disques durs en quelque sorte. Même si la plupart des nos ordinateurs portables ne sont plus avoir des dispositifs qui fonctionnent comme ça, ordinateurs portables à la place aujourd'hui généralement ont des disques durs SSD sans pièces mobiles. Et qui a tendance à être plus cher, malheureusement, mais un peu plus rapide et a-- bien souvent, beaucoup plus rapide, qui est l'une des raisons. Et il ne fait pas générer autant de chaleur. Il peut être plus petit, il est donc généralement une nette positive. Mais cela nous permet de cartographier un peu plus concrètement ce que nous parlons au 0 et de 1 niveau maintenant à un dispositif physique. Il est une chose pour moi de parler environ 0 et de 1 dans les termes de mon téléphone ou abstraitement en termes des commutateurs étant sous et hors tension. Mais qu'en est-il des disques durs? Dans vos ordinateurs portables, si vous avez une ancienne un, ou dans votre ordinateur de bureau, ou certainement dans les serveurs aujourd'hui, où vous avez disques durs qui ont un téraoctet d'espace, 4 téraoctets d'espace, bien ce que cela signifie? Un disque dur avec 1 téraoctet de moyens spatiaux il y a 1 billion d'octets à l'intérieur de celui-ci en quelque sorte, ou de manière équivalente 8 billions de bits à l'intérieur. 1 téraoctet serait 8 térabits ou 1 billion de bits, signifie que si vous avez un disque lecteur, vous avez en quelque sorte ou d'autres un billion 0 de et de 1 l'intérieur de celui-ci. Et si nous prenons juste un oeil à un image arbitraire d'un disque dur représentant, voici ce que le disque lecteur peut généralement ressembler à l'intérieur. Elle aussi, est un peu comme un ancien joueur de phonographe mais en général, avec plusieurs enregistrements à l'intérieur, de sorte à speak-- multiples plateaux, comme on les appelle, disques circulaires en métal, et puis un peu la tête de lecture, un peu comme un vieux tourne-disque. Et que la tête de lecture se déplace en arrière et en avant et en quelque sorte lit les bits. Et ce qui est sur ces plateaux, même si nous, les humains ne peuvent pas les voir, soit dans la réalité ou dans cette image, il y a de minuscules particules magnétiques. Et même si vous avez longtemps oublié comment l'électricité fonctionne, une particule magnétique qui est accusé généralement a une extrémité nord et sud end-- donc au nord et au sud. Et ainsi le monde juste a décidé il y a quelque temps que, si un protocole magnétique essentiellement est aligné comme ça, nord-sud, disons que 1. Si elle est à la place sud-nord, disons simplement appeler cela un 0. Et donc si vous avez à votre disposition un billion minuscule magnétique particles-- et espérons-le, l'ingéniosité de matériel dans afin de retourner ceux autour comme vous le voyez fit-- si vous voulez représenter tout un tas de 0 de, vous juste besoin de 8 particules magnétiques tous alignés comme ça. Et si vous voulez représenter huit de 1, vous venez besoin de 8 particules magnétiques alignées dos à dos à dos comme ça. Qu'est-ce que je veux dire par la des particules magnétiques? Franchement, toutes ces années plus tard, le chose qui vient encore à l'esprit est ce gars, si vous a grandi avec cette chose. Ceci est un little-- pour ceux unfamiliar-- une petit jouet d'enfance qui a cet homme glabre ici qui a tous ces petits peu de noir des particules magnétiques qui viennent avec lui. Et en utilisant ce bâton rouge, qui est juste un aimant, vous pouvez sorte de lui donner une moustache ou les sourcils ou les cheveux ou quoi que ce soit sur lui. Donc, en fait, si on fait un zoom dans, par exemple, cela est le genre de jeu que vous peut jouer avec Wooly Willy. Et ce n'est-à-dire, ceux-ci sont des particules magnétiques beaucoup plus importantes que sont en fait sur un disque dur, et des particules magnétiques beaucoup moins. Mais voyons effectivement alors si vous ne possédez minuscules particules magnétiques dans un disque dur, comment vous pouvez réellement les utiliser pour représenter des données. [LECTURE VIDÉO] -Le Disque dur est où votre PC la plupart des magasins de ses données permanentes. Pour ce faire, les données se déplace le long de la RAM avec des signaux de logiciels qui racontent la disque dur comment stocker ces données. Les circuits de disques durs traduisent les signaux en fluctuations de tension. Ceux-ci, à son tour, contrôler le disque dur de déplacer parts-- certains des rares déplacement pièces laissées dans l'ordinateur moderne. Certains des signaux commandent un moteur, qui tourne plateaux revêtus de métal. Vos données sont en fait stocké sur ces plateaux. D'autres signaux se déplacent les têtes de lecture / écriture pour lire ou écrire des données sur les plateaux. Ce mécanisme est si précis qu'un cheveu humain ne pouvait même pas passer entre les têtes et la filature plateaux. Pourtant, tout cela fonctionne à des vitesses fantastiques. [FIN LECTURE] Et vous pouvez voir à la l'extrémité de queue de la vidéo, il y a généralement plusieurs plateaux. Et pour que la tête de lecture est non seulement la lecture de la partie supérieure. Il est un peu comme trois ou au moins quatre têtes de lecture ce mouvement comme celui-ci, la lecture de données simultanément. Donc, il y a beaucoup de la complexité et une sorte de calendrier qui est impliqué dans un disque dur. Et la chose tourne vraiment sacrément rapide, donc il y a beaucoup de complexité. Mais nous allons faire un zoom dans un peu plus profond et voir où sont ces particules magnétiques et comment nous obtenons à eux. [LECTURE VIDÉO] Le regard de -LET à ce que nous juste vu dans le mouvement lent. Quand une brève impulsion électrique est envoyé à la tête de lecture / écriture, il bascule sur un petit électromagnétique pour une fraction de seconde. L'aimant crée un champ, ce qui modifie la polarité d'un minuscule, minuscule partie des particules métalliques qui enrobent la surface de chaque plateau. Une série de motifs de ces minuscules zones chargées jusqu'à sur le disque représente un bit de données dans le système de numération binaire utilisé par les ordinateurs. Maintenant, si le courant est envoyé une chemin à travers la tête de lecture / écriture, la région est polarisée dans une seule direction. Si le courant est envoyé dans la direction opposée, la polarisation est inversée. Comment obtenez-vous des données depuis le disque dur? Juste inverser le processus. Ce sont donc les particules sur la disque qui obtiennent le courant dans la tête de lecture / écriture en mouvement. Mettez ensemble des millions de ces segments aimantés, et vous avez un fichier. Maintenant, les pièces d'un seul fichier peut être dispersés dans les plateaux d'un entraînement, un peu comme le gâchis de papiers sur votre bureau. Donc, un fichier spécial supplémentaire conserve piste de l'endroit où tout est. Voulez-vous pas que vous aviez quelque chose comme ca? [FIN LECTURE] Donc, étant fait allusion là, peut-être, est ce sujet d'hier de la suppression. Lorsque vous supprimez un fichier, hier, nous avons dit qu'un ordinateur ne fait ce que, lorsque vous faites glisser quelque chose à la corbeille ou poubelle? Il oublie tout simplement. Mais tout le 0 et de 1, les particules magnétiques ce regard comme le rouge et le bleu choses ici, ou mon bras ici, sont toujours là sur le disque dur. Et donc il existe software-- Norton Utilities et Antan et d'autres plus modernes software-- qui vient va scanner un disque dur entier à la recherche à tous ces 0 et de 1, parce qu'il se révèle que la plupart des fichiers formats-- documents Word, fichiers Excel, images, vidéo files-- ont tous certains les modèles qui sont communs entre eux. Chaque fichier vidéo pourrait être d'une autre vidéo, mais la première de plusieurs les bits sont généralement les mêmes. Ou les derniers plusieurs bits sont généralement les mêmes. Et donc avec une forte probabilité, vous pouvez rechercher ces modèles. Et même si le fichier a été oublié, vous pouvez dire avec une forte probabilité, mais cela ressemble à un document Word, laisse récupérer et non l'oublier, si vous voulez. Et voilà comment vous pouvez récupérer données qui soit été accidentellement supprimé ou supprimé ou délibérément supprimé les buts. En revanche, la suppression sécurisée fait quoi dans le contexte d'une image comme ça? Exactement, les rend tout hasard. Donc, ce genre de déplace certains les, certains d'entre eux jusqu'à, laisse certains d'entre eux inchangés, et fait généralement le bruit aléatoire hors de lui, ou tout simplement fait peut-être tous eux des 0 ou chacun d'eux 1 de. Et cela aussi peut généralement frottez vos données de distance. Revenons donc maintenant à la question de la pensée de calcul, de sorte que nous avons les entrées de la formule. Et algorithmes donne vous sorties en fin de compte. Nous nous concentrons maintenant sur les intrants et sorties, parce que maintenant, je la revendication que nous avons une façon de représentant les entrées et sorties. Nous allons juste utiliser binaire. Et peu importe ce que nous vouloir représenter aujourd'hui, que ce soit un numéro ou une lettre ou des milliers de ceux-ci dans un annuaire téléphonique ou des images ou des films, à la fin de la journée, il est tout 0 et de 1. Et je prétends que, même si cela est un monde super simple avec seulement des 0 et de 1, nous pouvons nous construire. Et nous avons vu un exemple de que des lettres à ce jour. Alors concentrons-nous maintenant sur ce ingrédient milieu, un algorithme. Et revenons à cette exemple de Mike Smith. Donc, dans ce livre de téléphone, ce qui est vrai, nous ne l'utilisons plus tellement, il y a un problème à résoudre. Nous voulons trouver quelqu'un comme Mike Smith. Et que pourrais-je faire pour trouver Mike? Eh bien, je ne pouvais ouvrir ce livre, commencer à la première page, et de réaliser, oh, je suis dans la section A. Mike est pas là. Je dois la section S pour Smith. Il suffit donc de continuer à tourner une page à la fois. Permettez-moi de prétendre que tout cela est pages blanches et pages jaunes, pas parce que nous ne trouverons Mike dans les pages jaunes de toute façon. Mais je suis dans les pages blanches. Et maintenant, je suis dans la section B. Je n'ai pas encore trouvé. Donc je continue à tourner une page à la fois. Ceci est un algorithme. Il est un ensemble d'instructions pour résoudre un problème. En d'autres mots, regardez page, si Mike est pas sur elle, tourner la page, et répète Encore et encore et encore, idéalement regardant vers le bas comme vous le faites. Ainsi est cet algorithme, ce processus, correct? Pardon. Non, j'entends des nos. OK, mais il est-- ouais, il est certainement fastidieux. Comme, nous serons ici toute la journée si je continuer à chercher Mike à cette vitesse. Mais permettez-moi de prétendre qu'il est correct. Il est stupide, mais il est exact. A la fin de la journée, tant qu'elle pourrait prendre, je vais trouver Mike s'il est là et je suis en accordant une attention. Et je fini par atteindre sa page. Et si je suis trop loin, si Je reçois à la section T, alors je peux légèrement optimiser et dire simplement, hm, tout est fait. Je ne suis même pas besoin de perdre le temps d'aller à la Z de. Mais ceci est un très approche linéaire, si vous sera, très sorte de gauche à droite approche, une ligne droite. Et son bon mais lent. Donc, je me souviens de l'école primaire, trier d'une optimisation d'une première niveleuse, où j'appris à compter pas par ceux mais si twos-- 2, 4, 6. Il est A, beaucoup plus difficile à faire, mais en théorie, il est faster-- 8, 10, 12, 14, et ainsi de suite. Que diriez-vous de cet algorithme? Est-il plus efficace? Est-il plus rapide? AUDIENCE: Il est efficace. DAVID MALAN: Oui, il est donc def-- il est littéralement deux fois plus vite, en supposant que je ne pas se trébucher avec mes doigts. Il est deux fois plus rapide, parce que Je tourne à travers deux pages à la fois au lieu d'un, mais il est potentiellement correct, parce que pourquoi? AUDIENCE: Vous sauter quelques-uns. DAVID MALAN: droit, si Mike arrive à sandwiched-- peut-être quand je suis plus tard dans l'annuaire téléphonique, Mike arrive à être pris en sandwich entre ces deux pages, et je viens de sauter aveuglément dessus. Nous avons donc besoin d'un peu fix là. Une fois que je frappe la section T, I ne peut pas dire tout simplement en toute confiance, nous avons trouvé pas Mike Smith. Je dois probablement doubler en arrière. Ou en fait, une fois arrivé à quelqu'un nommé S-N, au lieu de S-M pour Smith, immédiatement, je pouvais doubler arrière, parce que peut-être qu'il était sur la page précédente. Mais je ne dois pas doubler en arrière loin. En théorie, si je le fais à droite temps, je viens de revenir d'une page. il est donc l'ajout d'une seule étape supplémentaire. Donc, je suis allé deux fois plus vite, mais il m'a coûté une page supplémentaire. Mais cela se sent comme une victoire nette. Mais ce n'est pas la façon dont la plupart des gens cette chambre résoudrait ce problème. Que serait une personne typique, peut-être un Il y a quelques années le font, pour trouver Mike Smith? Ouais, n'a pas trouvé Mike. Que fais-je? Donc, obtenir un peu plus près, mais je ne know-- ce qui est vrai d'un livre de téléphone? AUDIENCE: Il est séquentiel. DAVID MALAN: Il est séquentiel. Il est alphabétique. Et donc, si je suis dans la section M, Mike est clairement à droite, Je peux littéralement déchirer le problème dans half-- il est généralement plus facile que la déchirure that-- le problème dans la moitié et le jeter, de sorte que maintenant, j'ai un problème qui est plus de 1000 pages-- qui était dur, parce que je pense que je réellement déchiré l'annuaire téléphonique ce time-- pas 1000 pages, mais 500. Donc, le problème est littéralement la moitié aussi grand. Et c'est assez convaincant, parce avec mes algorithmes précédents, la version 1 et 2, je ne gagnais que le problème une page plus petits, deux pages plus petites à la fois. Alors que maintenant, je l'ai fait 500 les pages plus petit à la fois. OK, maintenant, Karim propose que je vais à la moitié droite. Donc, je vais aller à peu près au milieu, donner ou prendre. Et si je l'ai fait mathématiquement, Je pourrais aller droit au milieu. Et maintenant, je me rends compte, oh, Je suis dans la section T. Je ne fait aller trop loin. Mais je peux, encore une fois, déchirer le problème dans la moitié, le jeter. Et mes octets pas aussi grand. Il est seulement, ce qui, 256 pages ou 250 pages, donner ou prendre en ce moment. Mais il est encore beaucoup plus d'une page ou deux pages. Et maintenant, je vais à peu près au milieu. Oh, je ne suis pas allé assez loin maintenant assez. Donc, je le répète, répéter, répéter, répéter, jusqu'à ce que je suis, espérons à gauche avec une seule page. Donc, qui invite à la question, si je a commencé avec environ 1000 pages, combien d'étapes at-il me prendre avec la version 1 de mon algorithme? Eh bien, si Mike est dans le S section, dans le pire des cas, qui est assez proche de la fin de l'alphabet. Donc, si le répertoire a 1.000 pages, Je vais trouver Mike à moins de 1000 pages, donner ou prendre. Peut-être qu'il est comme 800 ou plus, mais il est assez proche de 1000. Considérant que, dans le second algorithme, combien la page se tourne au maximum pourrait I besoin de trouver Mike Smith? Il y a 1000 pages, mais je suis les deux faisant à la fois. Bon, alors max comme 500ish, parce si je vais à travers l'ensemble du livre de téléphone, à quel point, je peux arrêter. Mais je peux raser quelques par juste arrêter à la section T. Mais il est au pire des cas, 500 pages. Alors, combien de fois puis-je diviser un 1,00o page annuaire téléphonique dans la moitié encore et encore et de again-- 1 000 500 à 250-125? Combien de temps avant que je frappe une page? Ouais, il est environ 10. Selon l'arrondissement et tel, il est environ 10 pages besoin total à être mis sous tension ou des livres de téléphone doivent être déchirés. Donc c'est assez puissant. Nous avons commencé avec un problème de 1000 pages dans tous les trois de ces histoires. Mais dans le premier algorithme, il m'a pris, le pire des cas, la page 1000 tourne pour trouver Mike. Deuxième algorithme, 500 pages pour trouver Mike. Troisième algorithme, 10 pages pour trouver Mike. Et il est encore plus quand puissant vous pensez environ une sorte de scénario inverse. Supposons que la compagnie de téléphone suivant année se confond peut-être deux villes ensemble, et le livre de téléphone est soudainement cette épaisseur, au lieu de ce que, donc 2.000 pages au lieu de 1000. Eh bien, mon premier algorithme à la recherche de Mike Smith dans un 2000 pages annuaire téléphonique, le pire des cas, il va prendre combien de pages tourne l'année prochaine? Répertoire est de 2000 pages, so-- bien, pas un de plus. Si le répertoire est deux fois plus épaisse le premier algorithme, le premier algorithme, 2000, non? Dans le pire des cas, Mike est vraiment près de la fin du livre, il est si 2000 page se tourne. Deuxième algorithme en passant par deux, comme 1.000 pages. Mais que diriez-vous dans ma troisième et le plus récent algorithme? Si la compagnie de téléphone double la nombre de pages 1000 à 2000, combien de fois ai-je besoin déchirer ce livre en deux pour trouver Mike? AUDIENCE: Juste une. DAVID MALAN: Juste une, car avec une seule page à la déchirure, Je peux littéralement diviser et de conquérir, si vous voulez, ce problème dans la moitié de prise une morsure massif en sortir. Et ceci est un exemple de efficacité et sans doute un algorithme avec laquelle nous sommes tous sorte de intuitivement familier. Mais il est tout aussi correct comme mes autres algorithmes avec ce tweak pour le second algorithme, mais il est tellement plus efficace. Et en fait, ce qu'est un ordinateur scientifique, ou à son tour un programmeur, serait généralement faire lors de l'écriture le code est d'essayer de comprendre, tout droit, je ne veux pas que mon programme juste pour être correct, Je veux aussi qu'il soit efficace et résoudre des problèmes bien. Imaginez dans le monde réel d'aujourd'hui, comme Google indexe, les recherches comme des milliards de pages, imaginez si elles utilisé le premier algorithme pour trouver les chats au sein d'un milliard de pages-- regardant la première page dans leur base de données, le second, le troisième, tout en regardant pour un chat, la recherche d'un chat. Cela est diablement lent, il semblerait. Ils pourraient plutôt utiliser quelque chose appelé recherche binaire, qui est pas bi coincidence-- signifie deux, nous garder quelque chose en divisant 2, en half-- ils pourraient utiliser la recherche binaire et peut-être trouver des chats encore plus rapide, ou quoi que ce soit que vous recherchez. Et franchement, il n'y a même algorithmes fantaisistes que faire beaucoup plus que juste divisant les choses dans la moitié afin de trouver rapidement des informations. Et nous allons parler un peu à propos de ceux qui, après le déjeuner aujourd'hui. Alors permettez-moi d'essayer de représenter cela. On n'a pas besoin d'aller dans toute les mathématiques ou les chiffres réels. Nous pouvons en parler dans l'abstrait. Mais laissez-moi vous propose, si vous ont été une discussion maintenant avec les ingénieurs proposant cet algorithme et vous essayez de faire une décision calculée, parce que peut-être le ingénieur vous dit, vous savoir ce que je peux mettre en œuvre un recherche linéaire comme deux minutes. Il est si facile. Recherche binaire est pas chic, mais ça va me prendre comme 10 minutes, alors 5 fois plus longtemps. Il y a un commerce ici, même en termes de décider quel logiciel à écrire. Écrivez-vous l'algorithme plus simple, qui va juste vous prendre deux minutes? Ou voulez-vous passer plus de temps, 10 minutes, écrire l'algorithme colombophile? Comment décidez-vous ce genre de question? Ou vous pouvez faire un peu plus réel. Je dis à mon patron, il va prendre moi non plus d'une semaine ou 10 semaines mettre en oeuvre le logiciel de cette façon, comment décidez-vous algorithme pour feu vert? Karim? AUDIENCE: Le public, je suppose. DAVID MALAN: Le public. Que voulez-vous dire par le public? AUDIENCE: Si ça va pour être utilisé par des utilisateurs qui [Inaudible] par les utilisateurs [Inaudible]. Mais si elle est quelque chose que vous êtes juste faire pour vous-même pour faciliter un problème, [Inaudible] plus rapide. DAVID MALAN: Oui, il est rapide et sale est une bonne façon de le décrire. En fait, si vous êtes décrivant une grande partie de mon temps à l'école grad, de sorte que souvent, J'ai écrit mauvais code consciemment so-- au moins, voilà comment je it-- rationalisée consciemment donc, parce que même si je suis en train d'écrire le code qui a été relativement lente à exécuter, Je suis capable d'écrire le code lui-même assez rapide, les dépenses à quelques minutes ou heures et non de jours. Et il est apparu, je de temps en temps nécessaire pour dormir. Donc, même si mon code requis 8 heures à courir, bien que très bien, Je vais aller dormir pendant son exécution. Donc, à l'époque, je pensais que cela était très intelligent, même si je semble travaillé à travers ma thèse très lentement. Mais l'inverse de cela est que, le logiciel si je devais écrire pour d'autres personnes qui importait plus que moi, eh bien, les avoir attendez 8 heures à récupérer leurs résultats de recherche est pas tout à fait convaincante. Et donc passer plus de temps à l'avant d'écrire des logiciels qui est plus efficace, plus comme notre troisième algorithme, profite probablement les utilisateurs au fil du temps. Donc, cela dépend vraiment plus temps comment ces coûts additionner. Si vous allez être écrit logiciel à utiliser une fois, probablement pourrait aussi bien faire rapide et sale, comme on dit. Il suffit de jeter ensemble. Il est le code qui embarrasse vous, il est si mauvais, mais il fait le travail correctement, même si ce n'est pas efficace. Inversement, vous passez plus de temps sur quelque chose, faites-le juste. Et puis amorti au fil du temps, coût initial du temps est probablement utile, si vous gardez optimisation pour le cas commun. Et en effet, c'est un thème programmation, ou l'informatique plus généralement, en essayant d'optimiser pas pour le cas rare mais les case-- communes quelle opération qui va se passer encore et encore? Si vous allez avoir des milliards des utilisateurs effectuant une recherche sur votre site Web, vous devriez probablement passer le supplément semaines à l'avant l'écriture de meilleurs logiciels, de sorte que tous vos utilisateurs bénéficient. Maintenant, nous allons essayer de capturer ce un peu picturalement, mais pas tellement numériquement. Alors, voici juste un vieux tableau de l'école. Et permettez-moi de dire que ce moment est venu. Et il n'a pas d'importance what-- en fait, non, pas le temps. Mettons que sur l'autre axe. Disons que le moment est venu, et ceci est la taille du problème. Et un informaticien peut généralement appeler ce juste n. n est comme notre go-to variable où n est un nombre, le nombre n, et il est le nombre de quelles que soient les entrées que vous avez. Donc dans ce cas, n est le nombre de pages. Il pourrait donc être 1000 en le cas que nous venons de dire. Donc, le temps peut être une unité de mesure. Peut-être, il est deuxième. Peut-être, il est temps. Peut-être, il est comme page se tourne. N'a pas d'importance. Quoi que vous voulez compter dans, que sera le temps ou le coût de manière équivalente. Donc, avec cette première algorithme, si je, par exemple, eu 1000 pages annuaire téléphonique, Je vais dessiner un point là-bas, parce que si elle est de 1000 pages, il a fallu environ 1000 pages tourne, donner ou prendre. Et puis si j'avais un 2000 pages annuaire téléphonique, et je vais dessiner un second dot ici, parce que pour 2.000 pages, il est comme 2.000 secondes ou page se tourne ou autre. Et quand je l'ai déjà dit, il est sorte d'une relation linéaire, qui était délibéré, parce que je voulais plus tard on-- droit maintenant-- de tracer une ligne. Il est une sorte de droit relation de ligne. La pente est 1/1, si vous voulez. Pendant ce temps, le second algorithme dit, si vous avez 1000 pages et vous utilisez le second algorithme, où je comptais par 2 de, tourner deux pages à la fois, dois-je dessiner un dot ci-dessous ou au-dessus de mon point original? AUDIENCE: Ci-dessous. DAVID MALAN: Ci-dessous, parce que, comme nous l'avons vu, il prend moins de temps, la moitié du temps. Donc, le point devrait être la moitié aussi élevé que l'autre. Et même beaucoup plus ici, ce point devrait probablement être à peu près là. Et donc mon second algorithme, de même, a une relation linéaire avec le temps. Et nous pouvons tirer comme tel. Alors maintenant, la troisième et dernière algorithme est un peu plus difficile à dessiner. Mais intuitivement, si j'ai 1000 pages avec mon troisième algorithme, il ne devrait me prendre comme 10 étapes. Et si j'ai 2.000 pages avec mon troisième algorithme, il devrait me prendre pas 10 étapes, mais 11, juste un de plus. Donc, nous sommes à peine d'aller voir cela. Et il se trouve, si Je zoome sur ce point, je suis aller à exagérer pour effet, la forme de cette ligne, en fin de compte, est pas une line-- droite parce que, en effet, si elle était, il ressemblerait plus à la others-- il est en fait une ligne courbe que, si on fait un zoom, va à regarder beaucoup plus comme ça. It-- bien, OK, ignorer cette partie. Ce fut ma plume va de l'angle. Il est une ligne courbe qui est toujours de plus en plus, toujours, toujours, toujours de plus en plus, mais seulement à peine. Et au fil du temps, vous avez un relation qui est plus comme ça. Il semble presque droite. Mais il est de plus en plus lentement. Mais pour presque tous les points le long de votre axe x, axe horizontal, il est plus bas que les autres lignes. Donc, cela pourrait être une relation n, de sorte que si vous avez n pages, vous n secondes prend. Cela pourrait être une relation n / 2. Vous avez n pages, il faut vous n / 2 secondes, la moitié. Et ceci est un logarithmique relation, qui si vous vous souvenez, connectez-base 2 de n captures ce type de croissance, pour ainsi dire. Voilà donc le genre de sainte Graal parmi les trois de ces ici, parce qu'il est tellement plus efficace, mais sans doute plus complexe implémenter. Des questions? Eh bien, laissez-moi faire, laissez moi ouvrir une fenêtre de texte afin que nous puissions essayer de officialiser quelque chose ici. Alors laissez-moi aller de l'avant maintenant et mettre en oeuvre cet algorithme pour trouver Mike Smith dans le code, si vous voulez, le code de pseudocode. Je ne vais pas utiliser Java ou C ++. Je vais juste utiliser sorte de syntaxe anglaise-like, que nous serait généralement appeler le code de pseudocode. Ici, j'ai une fenêtre vide. Et je l'étape 1 de la très disant premier algorithme est de prendre l'annuaire téléphonique. Étape 2 est à livre ouvert à la première page. Étape 3 sera regarder page pour Mike Smith. Si la page, appelez Mike. de tourner la page d'autre et passez à l'étape 3. Fait, disons. Et il est donc pas tout à fait parfait, que nous verrons dans un instant. Mais nous allons examiner ce que concepts que j'ai présenté ici. Donc, les étapes 1 et 2 et 3 sont à peu près les verbes. Ils sont énoncés, actions-- font cela. Et dans une programmation la langue, nous le ferions en général appeler les déclarations ou fonctions ou procédures, les appeler un certain nombre de choses. Mais ils actions-- juste faire cela. L'étape 4 est fondamentalement différent, parce qu'il est une sorte de poser une question. Il est dit que nous sommes en quelque sorte du à une bifurcation de la route. Si Mike est sur la page, appelez lui, donc tourner à gauche, si vous voulez. Et si non, revenir à une certaine autre page-- ou plutôt, désolé, revenir à une autre étape, qui induit une sorte de construction de boucle. Et nous le faisons encore et encore et encore. Et en fait, vous savez quoi? Ouais. d'autre si à la fin de l'arrêt de livre. Nous avons donc besoin d'un troisième type condition, parce que vous ne peut pas continuer à tourner la page ad nauseam, parce que finalement, je vais frapper la fin du livre. Et un bogue dans un programme pourrait être ne pas anticiper ce scénario. Et puis je viens de réaliser, oh, attendez une minute, je besoin d'un troisième scénario. Si je suis hors de pages, je devrait vraiment juste arrêter. Sinon, il est indéfini. Qu'est-ce qui va se passer si je garde dire tourner la page et de revenir en arrière, c'est lorsque les ordinateurs geler ou accident, quand vous frappez une situation imprévue comme ça. Maintenant, qu'en est-Mike troisième algorithm-- Smith prendre le livre de téléphone, livre ouvert à first-- à non, pas la première page cette fois, à middle-- oh, eh bien, ce serait le second algorithme. Disons simplement sauter à la troisième. AUDIENCE: Oh, je suis désolé. DAVID MALAN: Très bien. Disons simplement sauter à l'ouverture third-- au milieu et maintenant chercher Mike Smith. si la page, appelez Mike. Et puis qu'est-ce qu'on veut dire ici? d'autre quoi? Nous pouvons exprimer cette dans un certain nombre de façons. Il n'y a pas de bonne réponse. OK, sinon à nouveau, mais nous devons être-- OK, nous ne voulons diviser en deux, mais voulons-nous aller à gauche ou aller à droite? Comment pouvons-nous exprimons cette notion? Eh bien, dans le cas de Mike, oui, que ce soit juste. Mais OK, donc c'est en fait un bon point. C'est très bien. Nous allons continuer avec cette logique. Alors-- AUDIENCE: Moins de la moitié. DAVID MALAN: Oui. Donc, d'autre si la page est, nous disons, moins Smith que, à la gauche de Smith, alors-- nous allons voir, est cela va compliquer? d'autre si la page vient avant Smith, larme dans la moitié, jeter dont la moitié? AUDIENCE: Je pensais qui était [Inaudible]. DAVID MALAN: J'entends les deux réponses. AUDIENCE: Gauche. DAVID MALAN: OK, jeter loin laissé la moitié, comme Lakisa dit plus haut, la gauche la moitié, alors je sorte de veulent juste aller to-- je vais à droite. Ou équivalente, et je fait un petit peu de désordre du début ici, Je veux efficacement passez à l'étape 2 de nouveau, où ouvert au middle-- ou open-- oui, disons simplement, pages à moyenne. Et cela l'arrange. Il est plus un livre. Il est juste la moitié d'un livre, pages afin ouvertes à moyenne. else-- étaient presque là. Étape 6, d'autre si la page vient après Smith, déchirer en deux, jeter demie droite, puis passez à l'étape 2. d'autre cesser de fumer, un quatrième scénario si nous avons pas de pages restant à tourner. Donc, nous pourrions nettoyer cette place. Et nous devons nettoyer cette place. Ceci est un code très pseudocode, si vous sera, description très haut niveau. Mais il ne tient généralement l'idée. Et, encore une fois, dans ce scénario, nous avoir la notion d'une condition, une branche, une fourchette dans la route, ce qui un decision-- si cela, rendez-vous de cette façon, else if, aller de cette façon, else if, aller dans ce sens. Et ceci est un très commun la technique de programmation de décider quelle direction d'aller, pour ainsi dire. Et nous avons aussi une sorte de la structure en boucle, où nous faisons encore et encore quelque chose. Maintenant, il se trouve, bien comme dans cet exemple, être super précis est important. Mais nous avons aussi vu quelque chose que nous continuons d'appeler l'abstraction. Qu'est-ce que cela signifie pour ramasser l'annuaire téléphonique? Nous sommes juste sorte de prendre pour acquis dans cette salle que cela a un sens sémantique. Chacun d'entre nous juste genre de savoir, oh, bien, prendre le livre de téléphone. Qu'est-ce que ça veut vraiment dire? Eh bien, cela signifie vraiment prolonger main, pencher sur, étendre les doigts, pincer livre entre les doigts, debout, tirez vers vous. Et nous pourrions être vraiment pédant à ce sujet, vraiment être super précis à ce que je fais. Mais toutes ces étapes sont collectivement ce que cela signifie pour ramasser un livre de téléphone. Et plus tôt, quand je l'ai dit, chaque de ces deux premières déclarations peut être considéré comme un procéder ou une fonction, vraiment il représente ce que nous continuer à appeler une abstraction. Il est comme un haut niveau conceptuel Description d'un problème implique en fait assez peu d'étapes. Et cela, aussi, est un sujet récurrent dans la programmation, de sorte que je pourrais écrire un programme en utilisant la syntaxe comme this-- pick_up_phone_book (). Et puis syntaxiquement, je suis va voler quelque chose de la plupart des langages de programmation. Maintenant, l'étape 1 semble encore plus comme une fonction, en tant que programmeur pourrait l'appeler. Il ressemble à un code que quelqu'un a donné un nom à et donné me utiliser somehow-- dans d'autres mots, ce que la ligne que j'ai soulignés représente la fonctionnalité que peut-être Je ne me suis même pas mettre en œuvre. Quelqu'un plus âgé, plus sage que moi déjà figuré dehors comment vous exprimer la notion de ramasser un livre de téléphone. Et il est comme les cinq étapes que je viens roula, du haut de ma tête. Mais il ou elle déjà mis en œuvre cela a donné ces plusieurs étapes un nom, pick_up_phone_book. Et les parenthèses est juste ce que la plupart des programmeurs faire à la fin des déclarations de ce genre. Je peux maintenant se tenir debout sur son épaules et jamais, penser à ce que cela signifie pour ramasser un livre de téléphone. Je peux simplement dire, prendre le livre de téléphone. Et c'est exactement ce nous tous les humains ont fait ici. Quand nous étions probablement 1 ans, 2 ans, quelqu'un devait nous enseigner ce qu'il destiné à prendre un livre de téléphone. Et depuis lors, nous avons Détaché de ceux inintéressante les étapes mécaniques. Et nous avons juste un compréhension intuitive de ce que signifie prendre un livre de téléphone. Et vous pouvez extrapoler maintenant à things-- plus compliqué construire un bâtiment. Comme, pour certaines personnes, qui a fait sens. Pour les entrepreneurs, aux architectes, qui a un sens. Et ils savent ce qu'il faut faire, si Je l'ai dit, allez construire un bâtiment. Mais la plupart d'entre nous dans la chambre ne pouvait pas faire face à ce niveau d'abstraction. Vous devez nous dire aimons aller chercher la pelle et aller chercher le béton et clouer les morceaux de bois ensemble et tout le reste est impliqué dans la construction d'un bâtiment. Et c'est parce que nous avons pas encore été programmé pour comprendre ce que cela signifie pour construire un bâtiment. Nous ne disposons pas que l'abstraction. Nous ne disposons pas cette fonctionnalité. Et si ce que vous verrez dans les langages de programmation, en général, langues surtout plus modernes, comme Java, PHP, Ruby et Python, ils sont beaucoup plus matures que les langues anciennes, comme C et C ++ et d'autres encore. Et ils viennent avec plus fonctionnalité intégrée. Plus code a été écrit par les gens dans le passé que nous pouvons maintenant appeler ou invoquer ou utiliser, comme je suis allusion à cette ligne surlignée ici. Et même si nous ne parlons pas sur les langages de programmation en soi, code juste pseudocode, tous les les idées sont encore dans cette discussion. Et il se trouve précision est super important, tout comme l'abstraction. Et nous allons essayer de communiquer que comme suit. Je pourrais accidentellement ai gâté en faisant clignoter une diapositive à l'écran prématurément. Mais permettez-moi de demander à un volontaire courageux, si cela ne vous dérange pas venir. Vous seriez en face de la appareil photo, si vous êtes OK avec ça. Quelqu'un voudrait-il venir et de donner des instructions à vos collègues? Suffit de venir ici et se tenir ici et dire quelques mots. Victoria sourit le plus et en évitant mes yeux le plus. Seriez-vous prêt à venir sur place? D'ACCORD. Et si tout le monde à vos sièges pourrait prendre un morceau de papier brouillon, si vous voulez. papier doublé est très bien. Venez autour de cette façon. Ou une partie du papier qui vous a été donné hier, juste une quelconque feuille blanche de papier, si vous pouviez. Et si vous n'avez pas, tout simplement demandez à votre voisin si vous pouviez. Donc, pour le moment, pour cet exemple, Victoria va jouer le rôle de un programmeur, un ingénieur, qui a besoin de vous programmer tous, comme les ordinateurs, de faire quelque chose. Et nous verrons quelles hypothèses vous décidez de faire. Nous allons voir comment précise qu'elle choisit d'être. Et si cette démonstration va pédagogiquement bien, beaucoup d'erreurs sera fait, que nous allons ensuite utiliser que comme une opportunité pour la discussion. Mais le défi pour vous devriez être d'éviter ces erreurs, être un bon programmeur. Et donc le défi à relever, si vous auriez aimé marcher ici, est en face de Victoria sur l'écran ici-- et espérons-le, aucun d'entre vous rappelez-vous quand je flashé sur l'écran. Et ne pas tourner autour du tout, parce que il y a un autre écran dans cette salle que je peux désactiver. Donc, ne pas tourner autour. En face de Victoria est le même cri. Et son travail est maintenant de vous dire tout sur votre morceau de papier quoi dessiner. Et nous verrons, sur la base instructions verbales seules, code informatique, si vous voulez, comment vos dessins précis vos implémentations sont soient:. Donner un sens? AUDIENCE: Ouais. DAVID MALAN: OK, exécuter. AUDIENCE: Dessinez un carré. [RIRE] DAVID MALAN: Et pas peuvent être posées. Ne peut faire ce qu'on vous dit. Oh, et si vous avez des diapositives d'aujourd'hui ouvrir dans un onglet, ne regardez pas votre onglet. D'accord? AUDIENCE: OK, dessiner un cercle. A slope-- je peux dire la pente? DAVID MALAN: jusqu'à vous. AUDIENCE: Une pente. Et un triangle. DAVID MALAN: Très bien. Et rester ici pour un moment. Et je vais venir autour dans un instant. Et pas besoin de mettre vos noms sur elle. Permettez-moi de venir autour et recueillir vos dessins, si cela ne vous dérange pas les arracher. Voici ce que nous sommes rentrés. Je projette sur l'écran. Je vois un carré, un cercle, une pente et un triangle. Voilà donc une réponse là-bas. Et let's-- whoops. Je vous remercie. Voici un autre assortiment, et l'autre derrière elle. Donc, ils semblent tous de capturer l'esprit. Je vous remercie. Il y a un autre, et a un autre ici. L'interprétation de la pente est un peu différente, peu sinueuse. Et le plus proche, que ce soit à cause de la merveilleuse spécificité avec laquelle vous avez décrit, ou peut-être vous sorte de vu auparavant, c'est en effet ce que Victoria a été décrit en fait. Mais maintenant, ceux qui n'a pas eu tout à fait raison, nous allons offrir quelques objections ici. Donc, Victoria a d'abord dit dessiner un carré. Et maintenant, nous pouvons supposer pour l'amour d'aujourd'hui que tout le monde sait comment dessiner un carré. Mais ce n'est pas tout à fait clair, non? Sinon, comment pourriez-vous avoir dessiné un carré, ou lorsque peut-être quelques-unes des ambiguïtés ici pour l'ordinateur? AUDIENCE: Emplacement et taille. DAVID MALAN: Situation, non? Vous avez tous eu un papier d'une certaine forme, généralement des rectangles, mais légèrement des tailles différentes. Mais vous avez certainement aurait pu tirer, si vous voulez, une immense place, peut-être un petit carré. Peut-être, il a été tourné. Je ne pense pas que nous avons vu que. Mais il aurait pu être plus diamant comme toujours, mais, néanmoins, mathématiquement un carré. Donc, ce fut sans doute ambigu. Puis elle dit, dessiner un cercle. Certains d'entre vous ne le dessiner à côté de , ce qui est pas déraisonnable, parce que les humains ont tendance à penser ou lire droite à gauche dans la plupart des langues, donc pas une mauvaise estimation. Mais ce cercle pourrait avoir été à l'intérieur de la place, aurait pu être autour de la carré, aurait pu être ailleurs sur la feuille, de manière sans doute ambiguë. Pente aurait pu peut-être en prenant le plus de libertés verbalement avec ce que cela signifie. Et certains d'entre vous interprété comme une ligne ondulée ou une ligne droite ou similaire. Et puis triangle, aussi, pourrait avoir été orienté dans n'importe quel nombre de façons. Donc en bref, même avec quelque chose qui vous coup d'oeil et vous êtes comme, wow, donc simple, un enfant pourrait dessiner, eh bien pas vraiment, sauf si vous êtes super, super persuasive et dire à l'ordinateur exactement ce qu'il faut faire. Donc, si nous pouvions, si vous avez une autre feuille de papier, nous allons essayer une fois de plus. Et je vais donner une Victoria autre exemple sur l'écran ici. Et encore une fois, ne pas tourner autour et ne pas regarder vos diapositives. Et je vais lui donner un moment pour réfléchir à la façon de décrire cela. Ne les laissez pas voir la peur dans vos yeux. [RIRE] Et encore, cette fois l'effet de levier certains de ces plats à emporter et essayer d'obtenir presque tout le monde au moins la bonne réponse. AUDIENCE: OK, prendre un morceau de papier, regardez au milieu de ce morceau de papier. Au milieu de cette pièce de papier, dessiner un cube. [RIRE] DAVID MALAN: Qu'avons-nous appris? Nous étions si près. OK, répéter si vous le pouviez, pour tout le monde. AUDIENCE: Dans le milieu de la morceau de papier, dessiner un objet, qui ressemble à un cube. DAVID MALAN: OK, c'est tout ce que vous obtenez de travailler avec. Permettez-moi d'être analytique et pas tellement critique, mais pour faire la demande que Victoria définitivement semble penser en très abstractions de haut niveau, qui est pas déraisonnable. Parce que sinon, nous serions tous être assez dysfonctionnel, si nous devions être toujours si précis avec tout ce que nous faisons dans le monde. Mais dire aller au I middle-- pensé que nous étions sur une bonne piste là, comme aller au beau milieu de la page, puis dessiner un cube. Alors qu'elle pense dans les abstractions, parce qu'elle est encore la visualisation ce qui est sur l'écran comme d'ailleurs un cube. Mais il y a tellement de possibilités pour l'interprétation là. Et en fait, il y en a tellement d'autres moyens que vous pourriez exprimer que, que je propose dans un instant. Nous avons donc ici une incarnation de l'une whoops-- picture-- incarnation de l'image, donc un peu tridimensionnalité à elle, ce qui est agréable. Voici un autre, où vous avez la même, même si elle est une sorte d'un cube ouvert. Certaines personnes ont un peu plus plat, en deux dimensions. Et ça va. Il y a donc, en effet dans le centre du papier. Celui-ci, je pense que vous allez comme, parce que si nous allons ici, c'est ce qu'elle décrivait. Alors maintenant, je vous propose de quelle autre façon nous pourrions décrire cette situation. Retour dans la journée, l'un des plus façons les plus courantes pour apprendre la programmation était d'écrire du code, écrit lignes d'instructions, que contrôlait un peu tortue sur l'écran. Logo et d'autres variantes de cette est le nom de la langue. Et la tortue vivait dans un monde. Supposons donc que cette rectangulaire l'espace est son monde. Et vous commencez par assuming-- I ne savent pas vraiment comment dessiner la tortue, donc nous allons le faire comme ça. Et puis il a une coquille et peut-être quelques pieds. Donc, vous pourriez avoir ce petit personnage à l'écran. Et l'objet de cette langage de programmation était d'obliger la tortue pour aller haut, bas, gauche, droite et de mettre sa plume ou prendre sa plume jusqu'à, alors il pourrait en fait dessiner sur l'écran dans ce monde rectangulaire très plat. Alors, où je pensais que vous allez peut-être, et où vous devriez considérer la plongée bas mentalement en décrivant instructions plus généralement, Je revendication, est mis à votre plume dans le middle-- et nous allons nous débarrasser de la tortue, parce que je ne peux pas vraiment garder le dessin très bien. Et maintenant, sinon comment pourrait Je dis dessiner un cube? Eh bien, on pourrait dire quelque chose comme nul un nord de la ligne diagonale, par exemple, ou à un angle de 45 degrés vers le haut. Et qui aurait pu me obtenu ici. Et je suis loin d'être un cube. Mais maintenant, je pourrais dire quelque chose comme tourner à 90 degrés vers la gauche et tracer une ligne de égale au nord-ouest de longueur. Et je pourrais continuer avec des directions similaires. Et ça ne va pas être facile. Et franchement, nous aurions probablement ont été ici pendant cinq minutes. Mais peut-être que nous aurions obtenu à ce qui, à la fin de la journée, finit par être un cube, mais nous plongé à l'intérieur de cette abstraction de le faire à un prix aussi bas niveau que vous ne pouvez pas vraiment voyez ce que vous faites jusqu'à ce que l'ensemble chose est en fait là-bas sur la page. Et ceci est un principe général, encore une fois, de programming-- cette idée de l'abstraction. Il est si merveilleusement puissant, car encore une fois, elle a juste dit, dessiner un cube, dont tous nous aurions à peu près grok très rapidement. Nous voudrions simplement comprendre, OK, dessiner un cube. Nous ne pourrions pas savoir l'orientation, afin que nous puissions être un peu plus précis, mais nous pouvons généralement imaginer ou savoir ce qu'est un cube est. Et c'est utile, parce que si chaque fois que vous assis en tant que programmeur à votre clavier pour écrire du code, si vous deviez penser à une telle un faible niveau, aucun d'entre nous ne serait jamais rien fait. Et certainement, aucun de nous ne profiter du processus de l'écriture de code. Ce serait comme l'écriture en 0 et de 1, qui était franchement pas si longtemps les humains ont écrit le code dans 0 et de 1. Et nous très rapidement arrivés avec ceux-ci plus languages-- niveau C ++ et Java et d'autres. Essayons donc cette fois de plus juste retourner les tables, de sorte que chacun d'entre nous avoir la chance de penser au lieu de la même manière. Pourrions-nous obtenir un bénévole plus cette le temps de venir au conseil d'administration et d'en tirer, pas réciter? Ouais ok. Ben, allez vers le haut. Et, Ben, dans ce cas, une fois que vous face à la carte, ne pas regarder à gauche, ne regardez pas à droite. Seulement faire ce que votre collègues ici vous dire. Et pour tout le monde dans le chambre, vous êtes maintenant le programmeur. Il est l'ordinateur. Et l'image que je l'ai choisi ici à l'avance est celui-là. Ils just-- qu'ils pensent d'une drôle de plaisanterie est tout. Ainsi serait-ce que quelqu'un souhaite bénévole de la première instruction ou déclaration qui devrait la plume de commande Ben? Et nous allons faire cela collectivement, peut-être une instruction provenant de chaque personne. Je suis désolé? AUDIENCE: Tracez un cercle. DAVID MALAN: Tracez un cercle est la première chose que j'ai entendu. AUDIENCE: Up top. DAVID MALAN: Up top. OK, nous pouvons vous permettre de supprimer, d'annuler. Et maintenant, quelqu'un d'autre. Dan, pourriez-vous être à l'aise offrant l'instruction suivante? AUDIENCE: Bien sûr, dessiner le centre du fond du cercle, avec un peu small-- petit espace de cela, tracer une ligne droite vers le bas pour trois quarts du chemin en bas de la carte un léger angle à votre gauche. DAVID MALAN: Good. AUDIENCE: Un angle. DAVID MALAN: Undo, Control-Z. D'ACCORD. Andrew, vous voulez offrir jusqu'à la prochaine instruction? AUDIENCE: Bien sûr. À partir du bas de cette ligne, une nouvelle légère angle-- whoops-- peut-être environ un tiers de la longueur [Inaudible], léger angle vers le bas et comme un le tiers de la longueur de [inaudible]. Donc oui, à partir de ce moment-là, tracer une ligne d'un tiers de la longueur de la précédente ligne plus à gauche. DAVID MALAN: Ce OK? Ligne droite, qui est OK? OK, Olivier, vous voulez pour offrir le prochain? AUDIENCE: [Inaudible] de la bas du cercle, [Inaudible]. Dessinez sur le côté droit de [Inaudible] centimètres. [RIRE] DAVID MALAN: Je pense que vous allez ont pour convertir c'est pouces ici. AUDIENCE: Stop. [RIRE] DAVID MALAN: OK. [? Ara,?] Vous voulez pour offrir le prochain? AUDIENCE: Dessinez un [Inaudible] la partie supérieure [Inaudible] la même chose. [Inaudible] cercle, dessiner à la [Inaudible] et dessiner [Inaudible]. DAVID MALAN: OK, pas plus défaire. Faisons plus un ou deux instructions. Chris, vous voulez offrir un? AUDIENCE: Au fond du cercle, [Inaudible] dessiner une ligne slopping égale vers le bas vers la gauche [Inaudible]. DAVID MALAN: OK. Andrew? Nous did-- Karim? AUDIENCE: A partir de la ligne droite, la fin de la ligne gauche, le fond, vous allez aller à droite à propos de la même longueur que la ligne vous êtes sur, dessin à le droit [Inaudible]. [Inaudible] degrés, de sorte [Inaudible] degrés sur le côté droit. DAVID MALAN: Très bien. Arrêtons-nous. Ne pas tourner autour encore. Arrêtons-nous et allons laisser essayez une autre tentative avant que nous révélons Ben ce qu'il dessine. Pouvez-vous mélanger Ben à le fait droite- ou, non, nous allons vous donner juste un autre conseil, encore mieux. Alors Quelqu'un voudrait maintenant de prendre plus de l'approche que Victoria a pris plus tôt, où nous parlons dans une abstraction de plus haut niveau et juste une phrase ou deux décrivent à Ben quoi dessiner sans entrer dans les mauvaises herbes, pour ainsi dire, à ce niveau inférieur? Victoria. [RIRE] AUDIENCE: Dessinez une figure de l'homme à pied. Et ses jambes et les bras doivent être du côté droit. DAVID MALAN: OK, voilà tout ce que vous obtenez. D'accord. Pourquoi ne nous révélons pas Ben ce qu'il a fait. Donc, une salve d'applaudissements. Cela a été le plus dur peut-être. Donc, même si nous parlons en termes assez stupides à propos de tout dessin images, espérons-vous peut vraiment apprécier le degré de expressivité qui pourrait être nécessaire afin de dire à un ordinateur ce qu'il faut faire. En effet, le fait que Ben a été en mesure de tirer cette si vite est une sorte de testament à l'aide d'un langue, peut-être un niveau plus élevé version de l'anglais, qui lui permet d'utiliser simplement des mots, ou entendre des mots de Victoria, qui lui permettra ces abstractions-- simplement dessiner une figure de marche de la droite- ce genre de a une signification sémantique pour ce qui est pas presque aussi évident quand vous êtes juste dire, mettre votre stylo, dessiner à droite, tirer vers la gauche. Et cela, aussi, est très commune dans la programmation. Ce serait, dit-on comme un très faible niveau de langue, de programmation dans de 0 et de 1 si vous voulez. Et ce serait un niveau plus élevé la programmation en langage Java, ou quelque chose comme ça. Un peu d'un simplisme, mais qui est la sorte comme affective le sentiment que vous vous sentez quand en utilisant une sorte de chose ou une autre. Un peu de frustration ici par la nécessité pour une telle précision, mais la possibilité être un peu plus souple avec l'interprétation ici. Mais bien sûr, des bugs peut survenir à la suite. Si vous souhaitez à home-- nous ne fera pas celle-ci dans class-- mais si vous souhaitez amener celui-ci à la maison, Je pensais que nous allions plonger dans ce. Donc, si vous souhaitez jouer à ce jeu avec votre autre significatif ou les enfants ou autres, vous pourraient profiter de cela aussi. Donc, nous allons aller de l'avant et de regarder une dernière chose ici pour la pensée informatique. Et cela nous amène à John Oliver, pas pour le clip vous pourriez avoir vu la nuit dernière, mais à une question un peu récent. Il y a quelques mois, Volkswagen a pris un peu de flak pour quelle raison, si vous le savez? Qu'ont-ils en difficulté pour? Ouais, donc ils emissions-- ont été en essayant de battre les émissions des essais ayant essentiellement par leur les voitures polluent l'environnement moins lorsque leurs voitures ont été mis à l'essai et polluent l'environnement plus quand les voitures ne sont pas testés. Et ce qui est plus intéressant dans le monde, comme vous pouvez avoir inféré des discussions de like-- ce qui est it-- carplay, le logiciel d'Apple pour les voitures et le fait que de nombreux nous de plus en plus ont des écrans tactiles dans nos voitures, il y a une quantité effrayante des logiciels de personnes les voitures d'aujourd'hui, qui ouvre franchement toute une boîte de Pandore lorsque En matière de sécurité et de risque physique. Mais pour aujourd'hui, nous allons se concentrer uniquement sur ce qui est impliqué dans le logiciel d'écriture qui aurait pu gamed le système. Pour la définition de la problème, pour ceux qui ne connaissent, nous allons jeter un coup d'oeil à John Oliver. Et pour ceux qui sont familiers avec le problème, regardons ce dans une lentille fun via John Oliver ainsi. Alors permettez-moi de frapper le jeu sur ce, je penser, de trois minutes l'introduction. Bon sang. [LECTURE VIDÉO] -Des voitures-- DAVID MALAN: De toute évidence, sur YouTube, est-- - --les personnages les plus intelligents les films Fast and Furious. Cette semaine, le constructeur automobile allemand Volkswagen se trouve au milieu d'un scandale de proportions potentiellement criminelles. -Volkswagen Se prépare à des milliards d'amendes, d'éventuelles accusations criminelles pour ses cadres, comme la société présente ses excuses pour le gréement 11 millions de voitures à l'aider à battre les essais d'émissions. les modèles diesel ont été conçus -certaines avec un logiciel sophistiqué qui utilisé des informations, y compris la position du volant et véhicule la vitesse, afin de déterminer la voiture était soumis à des tests d'émissions. En vertu de cette circonstance, le moteur permettrait de réduire les émissions toxiques. Mais la voiture a été truqué pour contourner que, quand elle a été entraînée. Les émissions ont augmenté de 10 à 40 fois au-dessus des niveaux APE acceptables. -WOW, 10 à 40 fois plus que l'EPA permet. Telle est la pire chose Volkswagen a jamais fait, est quelque chose que vous pourriez dire si vous ne l'avais jamais entendu parler de la Seconde Guerre mondiale. Mais peut-être le signe le plus sûr de la façon dont beaucoup de peine Volkswagen est, est que les gens à la très dessus ont démissionné. Le PDG a démissionné mercredi après brouillage pour limiter les dégâts, en disant qu'il était sans cesse désolé, qui sonné grand jusqu'à ce qu'il est avéré il était seulement 10% désolé mais avait truqué sa bouche pour gonfler artificiellement son sorriness. Et pendant ce temps, US Volkswagen chef avait des excuses de la sienne. -LET Être clair à ce sujet, notre entreprise était malhonnête. Et dans mes mots allemands, nous ont totalement foiré. -Ouais, Mais totalement vissé up ne sont pas des œuvres allemandes. Et la langue allemande a beaucoup de belles phrases pour décrire des situations comme celle-ci, tels que [ALLEMAND], ce qui signifie à peu près, la tristesse qui vient des mensonges d'affaires liées, ou [ALLEMAND], ce qui se traduit par comme honte ceux impliquant le père nuages ​​d'essence. Il est une belle langue. Il navigue juste à côté de la langue. Et en passant, tandis que l'homme de des excuses peut avoir sonné sincère, il est intéressant de noter qu'il parlait au une soirée de lancement officiel pour 2016 Volkswagen Passat, ce qui signifie que peu de temps après avoir dit désolé, il a dit cela. mercie beaucoup d'être venus. Passe une belle soirée. est à côté de Lenny Kravitz. [MUSIC PLAYING] -OK, OK, mettre fin à votre excuses jusqu'à la prochaine Lenny Kravitz ne crier contrition sobre. Il crie, nous avons demandé Bon Jovi, et il a dit non. La marque Volkswagen a été gravement endommagée. Et franchement, leur nouvelle annonce campagne ne contribue pas exactement. - [ALLEMAND], nous Volkswagen aimerions de présenter des excuses pour vous tromper avec nos véhicules. [FIN LECTURE] DAVID MALAN: Donc, ce fut un manière détournée de-- sorry-- ce fut une façon détournée de l'introduction d'un problème fondamental dans le logiciel, qui est que vous besoin de détecter certaines conditions. Et donc la question à portée de main ici est, comment fonctionne une voiture potentiellement, mis en œuvre dans le logiciel par ces programmeurs, détecter qu'il est effectivement mis à l'essai? Donc, pour être super clair, ce qu'ils faisaient était, dans des environnements où les programmeurs ont figuré la voiture était testé, ils en quelque sorte fait la voiture émet moins d'émissions, moins les émissions, les fumées donc moins toxiques et autres choses de ce genre. Mais quand il est normalement conduite sur la route, il serait tout simplement émettre autant la pollution comme il voulait. Alors, comment pourrions-nous écrire le pseudocode pour cet algorithme? Comment pourrions-nous écrire le pseudocode pour le logiciel en cours d'exécution dans la voiture? Je veux dire, en un mot, il se résume à quelque chose comme ça. si l'essai, émettent moins. d'autre émet plus. Mais c'est un peu niveau trop élevé, non? Essayons de plonger à ce que cela abstraction d'être des moyens testés. En d'autres termes, même si vous ne savez rien sur les voitures, ce genre de questions pourriez-vous poser afin de déterminer si vous êtes en cours de test, si vous êtes la voiture? Quelles caractéristiques pourraient être présenter si une voiture est en cours de test? AUDIENCE: Test de l'équipement. DAVID MALAN: Equipements de tests. Donc, si l'équipement d'essai à proximité, puis émettre moins. Donc, je pouvais imaginer la mise en œuvre que, avec une sorte de caméras ou la détection de ce qui est autour de vous. Et permettez-moi de proposer que se sent tout simplement trop compliqué d'avoir réellement supplémentaire matériel juste pour cette fin. AUDIENCE: Si vous êtes dans parc, si votre capot est ouvert. DAVID MALAN: Dans un parc ou capot ouvert, de sorte que ce qui est bon. AUDIENCE: Et voiture en marche. DAVID MALAN: Donc, qui est un peu plus concrete-- et la voiture en cours d'exécution. Ce serait donc la conjonction d'un quelques conditions différentes, si vous voulez. Donc, si la voiture est dans le parc, et même bien que ce soit une chose très mécanique généralement, je pouvais imaginer un logiciel d'écriture, en particulier parce qu'il ya souvent une lumière là-bas ces jours, Je ne pouvais imaginer qu'il y ait logiciel qui peut interroger le shifter ou quoi, êtes-vous dans le parc, sont vous dans le lecteur, êtes-vous dans le sens inverse. Et je peux récupérer un répondre que ce soit oui ou pas à ce genre de questions. Et donc je pourrais aussi probablement répondre une question comme, est le capot ouvert. Peut-être, il y a une sorte de capteur que ce soit me redonne un 1 ou 0, vrai ou faux, le capot est ouvert. Et puis la voiture en marche, je ne pouvais détecter qui en quelque sorte par l'intermédiaire de ce mécanisme? Comme, la voiture est en marche, je pourrait détecter que ce soit sur, pourrais-je détecter en quelque sorte que la voiture est en mouvement? AUDIENCE: RPM. DAVID MALAN: Ouais, donc il n'y a toujours cette aiguille vous indique combien de rotations par minute les roues connaissent. Et donc je pourrais regarder ça. Et si ce n'est pas 0, que probablement signifie que la voiture est en mouvement. Mais nous devons être un peu prudent là-bas, because-- simplifions this-- si nous venons de le dire, si la voiture en cours d'exécution, nous ne voulons pas simplement émettre moins, nous voulons si la voiture est en cours d'exécution et il est testé. Donc, il y a quelques autres ingrédients que les gens ont émis l'hypothèse que le logiciel est en train de faire, car en l'absence du code source, vous ne pouvez sorte de déduire de la effets physiques de la voiture sur ce que pourrait se passer sous le capot dans le logiciel. Donc, si la voiture en cours d'exécution et peut-être, disons, les roues arrière ne bouge pas, pourrait-il être indicative d'une sorte de test? Que vais-je allusion ici? Ouais, peut-être, il est sur un de ces choses à rouleaux, où comme les roues se tournent à l'avant ou à l'arrière, selon qu'il est la roue avant ou entraînement de la roue arrière, de sorte que la moitié des roues sont en mouvement, mais le deux autres ne sont pas, ce qui est une situation bizarre dans le monde réel. Si vous conduisez sur la route, cela ne devrait pas se produire. Mais si vous êtes dans un entrepôt sur une sorte de système de rouleaux, qui pourrait bien se produire. Je pense que les gens ont également proposé que peut-être, si la voiture est en cours d'exécution et de direction roue ne bouge pas, que trop peut-être un signal, parce que ce raisonnable pour comme une ligne droite sur une route. Mais même alors, l'être humain est probablement déplacer un peu ou certainement en quelques secondes. Ou au cours d'une minute, les chances sont qu'il est pas va être obsédé dans exactement la même position. En d'autres termes, nous peut prendre soustractions, êtes-vous d'être testé, et briser cette fonctionnalité dans ces ingrédients composant. Et c'est vraiment ce que Volkswagen ingénieurs en quelque sorte fait. Ils ont écrit le logiciel consciemment détecter si le véhicule est en cours de test, donc émettre moins, sinon émettre de la manière habituelle. Et le problème ici aussi, est que le logiciel est pas quelque chose que vous pouvez vraiment voir moins vous avez le code que l'on appelle la source. Donc, il y a deux types de différents code-- au moins deux types différents du code dans le monde. Il y a quelque chose appelé source code, qui est semblable à ce que nous avons écrit, le code source. Ceci est le code source écrit en un langage appelé pseudocode, qui est juste quelque chose Anglais-like. Il n'y a pas de définition officielle de celui-ci. Mais C et Java, C ++, celles sont toutes les langues officielles qui, lorsque vous écrivez en eux, ce que vous avez est un fichier texte contenant le code source. Mais il y a aussi quelque chose dans le monde a appelé code machine. Et le code machine, malheureusement, est seulement 0 et de 1. Donc, le code de la machine est ce machines comprennent, bien sûr. Le code source est ce que les humains comprennent. Et généralement, mais pas toujours, il y a un programme qu'un programmeur utilise qui prend la source le code et le transforme en code machine. Et ce programme est généralement appelé un compilateur. Donc, votre entrée est le code source, votre sortie est le code machine, et le compilateur est un morceau de logiciel qui fait ce processus. Donc, cela correspond en fait très bien à nos entrées, les algorithmes, les sorties. Mais ceci est une incarnation très spécifique de ce qui est à dire que, même si vous possédez l'un de Volkswagen les voitures qui est coupable de cela, il est pas comme vous pouvez simplement ouvrir le capot ou ouvrir le manuel de l'utilisateur ou regarder au code source, parce que le temps il atteint votre voiture dans votre entrée, il a déjà été converti en 0 et de 1. Et il est très difficile, pas impossible, mais très difficile à glaner quoi que ce soit de simplement regarder la sous-jacente de 0 et de 1. Ainsi, vous pouvez le comprendre, en fin de compte, si vous comprenez comment une machine operates-- Intel inside-- si vous comprenez l'architecture Intel, mais il est consommatrice de temps très. Et même là, vous pourriez ne pas être en mesure de voir tout que le code peut réellement faire. Une question sur ceci ou cela sorte de processus plus généralement? Et effectivement, nous pouvons lier cette discussion à la discussion d'hier d'Apple. Cela, aussi, est la raison pour laquelle le FBI ne peut pas simplement aller chercher dans le téléphone du suspect et trouver les lignes de code, pour par exemple, qui permettent le mot de passe ou permettre que le retard de 80 millisecondes. Parce que par le temps, il est sur iPhone du boursier, il a déjà été converti à 0 et de 1. Eh bien, nous allons faire une pause ici pour notre regarder la pensée informatique. Pourquoi ne prenons pas une pause de 15 minutes. Et quand nous reviendrons, nous allons jetez un oeil à la programmation lui-même et commencer à cartographier certains de ces concepts de haut niveau à une réelle, si ludique, langage de programmation.