1 00:00:00,000 --> 00:00:09,580 2 00:00:09,580 --> 00:00:14,060 DAVID MALAN: Bien, esto es CS50, una introducción de la Universidad de Harvard 3 00:00:14,060 --> 00:00:16,340 para proyectos intelectuales enfocados en ciencias de la computación 4 00:00:16,340 --> 00:00:18,110 y en el arte de la programación. 5 00:00:18,110 --> 00:00:21,800 Y según parece, así era yo en la época 6 00:00:21,800 --> 00:00:24,620 en la que estaba de su lado, chicos. Ahora estoy de este lado gracias a 7 00:00:24,620 --> 00:00:28,370 un colega que pasó mucho tiempo merodeando por la Biblioteca Lemont, 8 00:00:28,370 --> 00:00:32,000 donde los novatos que se inscribieron en 1995, al parecer aún lo siguen siendo. 9 00:00:32,000 --> 00:00:36,200 Y señalo esto, porque para mí fue un enorme problema 10 00:00:36,200 --> 00:00:37,910 volver a cuando era un novato y en definitiva, un estudiante 11 00:00:37,910 --> 00:00:41,600 de segundo año, que evaluaba tomar una clase como esta, CS50, pero en general, 12 00:00:41,600 --> 00:00:42,690 ciencias de la computación. 13 00:00:42,690 --> 00:00:45,599 Y si ustedes, como yo, perciben a las ciencias de la computación 14 00:00:45,599 --> 00:00:47,390 igual que en la preparatoria, o incluso en la secundaria, 15 00:00:47,390 --> 00:00:51,390 pueden tener la percepción de que esto se basa totalmente en la programación. 16 00:00:51,390 --> 00:00:53,170 Quizás es un poco antisocial. 17 00:00:53,170 --> 00:00:55,512 O tal vez en el laboratorio de computación, bajen la cabeza, 18 00:00:55,512 --> 00:00:58,470 un tipo de codificación para algo que no necesariamente entienden. 19 00:00:58,470 --> 00:01:01,855 Y sí, yo también tenía esa percepción durante el primer año en este curso, 20 00:01:01,855 --> 00:01:03,980 y en general, me atrevo a decir que esta área realmente logró 21 00:01:03,980 --> 00:01:05,450 tener muy mala reputación. 22 00:01:05,450 --> 00:01:07,730 Desde luego, asumí que la mayoría de las personas a mi alrededor 23 00:01:07,730 --> 00:01:09,555 con seguridad sabían más que yo. 24 00:01:09,555 --> 00:01:11,180 Y para mí no fue cierto solo en las CS. 25 00:01:11,180 --> 00:01:14,690 Fue cierto para la mayoría de las clases del catálogo de cursos de Harvard, 26 00:01:14,690 --> 00:01:16,220 con las cuales no estaba familiarizado. 27 00:01:16,220 --> 00:01:18,650 Y entonces, en lugar de eso me incliné hacia lo más cómodo. 28 00:01:18,650 --> 00:01:21,410 Y tomé muchos cursos sobre gobierno, economía e historia 29 00:01:21,410 --> 00:01:24,165 solo porque es lo que comprendía mejor y me gustaba en la secundaria. 30 00:01:24,165 --> 00:01:27,290 No me encantaba, pero era conocido y estaba en mi zona de confort. 31 00:01:27,290 --> 00:01:29,930 Y fue hasta el segundo año cuando tuve el valor 32 00:01:29,930 --> 00:01:32,490 suficiente para tomar esta clase, CS50. 33 00:01:32,490 --> 00:01:36,080 Y solo lo hice porque mi profesor me dio a elegir entre aprobar o suspender, 34 00:01:36,080 --> 00:01:37,324 lo que conocemos como SAT/UNSAT. 35 00:01:37,324 --> 00:01:39,740 Y eso me permitió sobreponerme a esta especie de barrera mental 36 00:01:39,740 --> 00:01:42,830 que me había impuesto yo mismo por el miedo a reprobar 37 00:01:42,830 --> 00:01:46,170 o simplemente a no hacer las cosas tan bien como estaba acostumbrado. 38 00:01:46,170 --> 00:01:48,980 Así que tuve cuidado de no tomar una clase como esta, hasta entonces. 39 00:01:48,980 --> 00:01:51,420 Y siempre he lamentado no haber explorado esto antes. 40 00:01:51,420 --> 00:01:53,044 Y este curso no tiene por qué ser así. 41 00:01:53,044 --> 00:01:56,210 Tampoco es exclusivo de las CS, pues puede suceder en cualquier ámbito. 42 00:01:56,210 --> 00:01:59,630 Esas fueron las lecciones que aprendí cuando yo era como ustedes. 43 00:01:59,630 --> 00:02:03,290 Y me he sentido más cómodo desde que superé este curso 44 00:02:03,290 --> 00:02:07,940 y me parece inspirador que hoy, el 68 % de los estudiantes en esta sala 45 00:02:07,940 --> 00:02:11,720 y los que estuvieron aquí el año pasado, nunca hayan tomado un curso de CS. 46 00:02:11,720 --> 00:02:14,780 Entonces, si tienen ese modelo mental en donde todos lo que están a la izquierda 47 00:02:14,780 --> 00:02:17,690 y a la derecha seguramente saben más que ustedes, lo más probable es que, 48 00:02:17,690 --> 00:02:18,770 de hecho, no sea así. 49 00:02:18,770 --> 00:02:21,890 Y en CS50 tenemos diferentes vías y tipos de secciones 50 00:02:21,890 --> 00:02:25,074 para los que no se sienten cómodos, para los que se sienten cómodos 51 00:02:25,074 --> 00:02:26,490 y para los que están en algún punto intermedio. 52 00:02:26,490 --> 00:02:28,190 Y no existe una definición formal para estas etiquetas. 53 00:02:28,190 --> 00:02:29,900 Solamente ustedes saben en cuál de ellas se encuentran. 54 00:02:29,900 --> 00:02:32,401 Y si hoy mentalmente tienen un pie fuera del curso, 55 00:02:32,401 --> 00:02:34,358 porque no están realmente seguros de si esto es para ustedes, 56 00:02:34,358 --> 00:02:36,260 probablemente se encuentran entre los que no se sienten cómodos. 57 00:02:36,260 --> 00:02:40,192 Aún así están entre la mayoría, entre el 56 % de los estudiantes del año pasado. 58 00:02:40,192 --> 00:02:41,900 Si por el contrario, han programado 59 00:02:41,900 --> 00:02:43,730 desde que tenían ocho o 10 años, 60 00:02:43,730 --> 00:02:45,860 la edad que sea, pero han sido autodidactas, entonces 61 00:02:45,860 --> 00:02:47,568 quizás tengan muchas deficiencias en sus conocimientos 62 00:02:47,568 --> 00:02:49,610 o realmente no entiendan todas estas formalidades, 63 00:02:49,610 --> 00:02:52,640 Si son de los que averiguan todo, tal vez están entre los más cómodos. 64 00:02:52,640 --> 00:02:54,556 Y si no, tal vez son de los que están en algún punto intermedio. 65 00:02:54,556 --> 00:02:57,800 De modo que en las secciones de CS50 tendremos juntos a estudiantes similares, 66 00:02:57,800 --> 00:02:59,786 con antecedentes y niveles de comodidad parecidos, 67 00:02:59,786 --> 00:03:02,660 para que todos se sientan cómodos al hablar de las cosas, sin saber mucho 68 00:03:02,660 --> 00:03:04,490 de ellas, aprender más e ir más allá. 69 00:03:04,490 --> 00:03:09,200 Porque, en definitiva, el curso se califica y se evalúa al final de forma 70 00:03:09,200 --> 00:03:12,680 manual, con mucho tacto y con respeto a los conocimientos 71 00:03:12,680 --> 00:03:14,690 previos de los estudiantes, o a la falta de ellos. 72 00:03:14,690 --> 00:03:17,060 En realidad, al final del semestre lo más importante 73 00:03:17,060 --> 00:03:19,700 no es tanto dónde finalicen en relación con sus compañeros de clase, 74 00:03:19,700 --> 00:03:23,930 sino dónde terminan en la semana 11, con respecto a dónde se encuentran 75 00:03:23,930 --> 00:03:25,830 hoy en la semana 0. 76 00:03:25,830 --> 00:03:30,384 Y de hecho, gracias a los CS50, a Haley James y a un gran número 77 00:03:30,384 --> 00:03:32,300 de miembros del equipo de CS50, quienes este verano, pasaron 78 00:03:32,300 --> 00:03:34,790 gran parte de su tiempo viajando por el país para traer gente de regreso 79 00:03:34,790 --> 00:03:38,930 al campus, alumnos, antiguos alumnos y personal, quienes alguna vez tuvieron una 80 00:03:38,930 --> 00:03:41,297 conexión al tomar o impartir cursos en CS50. 81 00:03:41,297 --> 00:03:44,630 Y si desean ver las historias de algunos de sus predecesores y de personas que 82 00:03:44,630 --> 00:03:46,630 han encontrado accidentalmente su camino, incluso cuando 83 00:03:46,630 --> 00:03:49,500 encontraron en él los desafíos de las ciencias de la computación, 84 00:03:49,500 --> 00:03:53,810 den un vistazo a esta página que el equipo preparó: project5050.org. 85 00:03:53,810 --> 00:03:58,490 Ahora, el curso en sí no tiene que ver con la programación como tal. 86 00:03:58,490 --> 00:03:59,990 Es, en efecto, una herramienta que utilizaremos. 87 00:03:59,990 --> 00:04:01,110 De verdad, solo se trata de eso. 88 00:04:01,110 --> 00:04:03,960 Y en realidad, eso es lo que son las CS de manera general. 89 00:04:03,960 --> 00:04:07,160 Ya sea que comiencen con el hardware, los gráficos, la teoría o cualquier otro 90 00:04:07,160 --> 00:04:10,444 campo, como la inteligencia artificial, el aprendizaje automático y más allá, 91 00:04:10,444 --> 00:04:12,110 en realidad solo se trata de resolver problemas. 92 00:04:12,110 --> 00:04:14,540 Y lo que encontré desde el principio, y que es realmente genial en las CS, 93 00:04:14,540 --> 00:04:17,970 es que no siempre tienen un fin en sí mismo. 94 00:04:17,970 --> 00:04:21,140 Esta área permite hacer cosas cada vez más interesantes, 95 00:04:21,140 --> 00:04:24,410 más impactantes en las humanidades, las ciencias físicas y sociales, las artes, 96 00:04:24,410 --> 00:04:27,590 en cualquier cosa, porque proporciona un nuevo modelo mental para resolver 97 00:04:27,590 --> 00:04:31,070 mejor y más eficazmente los problemas, cómo pueden resolverlos correctamente, 98 00:04:31,070 --> 00:04:34,250 y cómo pueden, en cierta forma, analizar grandes conjuntos de datos 99 00:04:34,250 --> 00:04:37,790 o resolver problemas que, de otro modo, habrían estado fuera de su alcance. 100 00:04:37,790 --> 00:04:38,880 Entonces, ¿qué significa esto? 101 00:04:38,880 --> 00:04:40,390 ¿Qué es la resolución de problemas? 102 00:04:40,390 --> 00:04:42,140 Bueno, quizás podríamos sintetizarlo de manera sencilla 103 00:04:42,140 --> 00:04:45,290 como una enorme caja negra, como una salsa secreta, 104 00:04:45,290 --> 00:04:47,910 en donde van las entradas, a modo del problema que queremos resolver, 105 00:04:47,910 --> 00:04:51,680 y del cual obtenemos las salidas, es decir, las soluciones que queremos. 106 00:04:51,680 --> 00:04:54,290 Entonces, es una forma muy general de describirlo, pero lo que 107 00:04:54,290 --> 00:04:57,202 representamos en esta caja negra son los llamados algoritmos. 108 00:04:57,202 --> 00:04:58,910 En un momento volveremos 109 00:04:58,910 --> 00:05:01,250 a los ingredientes necesarios para resolver problemas. 110 00:05:01,250 --> 00:05:04,150 Pero, ¿de qué manera representamos las entradas y las salidas? 111 00:05:04,150 --> 00:05:08,420 Es posible, incluso si no son expertos en computación y tampoco piensan como uno, 112 00:05:08,420 --> 00:05:12,150 que sepan que las computadoras comprenden un vocabulario muy limitado. 113 00:05:12,150 --> 00:05:16,260 Por ejemplo, ¿cuál es el alfabeto que hablan?, por así decirlo. 114 00:05:16,260 --> 00:05:17,232 Posiblemente ASCII, pero uno mejor. 115 00:05:17,232 --> 00:05:17,940 PÚBLICO: Binario. 116 00:05:17,940 --> 00:05:21,180 DAVID: Binario, binario, bi significa dos, es decir, ceros y unos. 117 00:05:21,180 --> 00:05:23,940 Entonces, mientras los humanos comúnmente usamos decimales, 118 00:05:23,940 --> 00:05:27,330 que significa 10, del 0 al 9, al igual que nuestro alfabeto de letras, 119 00:05:27,330 --> 00:05:31,380 las computadoras, como ya saben, solo utilizan ceros y unos. 120 00:05:31,380 --> 00:05:32,940 Ahora, ¿por qué esto es tan poderoso? 121 00:05:32,940 --> 00:05:36,210 Bueno, tan pronto como tengan al menos dos dígitos en su alfabeto, 122 00:05:36,210 --> 00:05:39,900 pueden comenzar a representar cosas de una manera más poderosa y mucho más 123 00:05:39,900 --> 00:05:40,410 eficiente. 124 00:05:40,410 --> 00:05:43,326 Por ejemplo, en caso de que quisiera contar a las personas en esta sala, 125 00:05:43,326 --> 00:05:46,130 ¿a cuántos de ustedes podría contar con solo una mano? 126 00:05:46,130 --> 00:05:46,876 Posiblemente a cinco. 127 00:05:46,876 --> 00:05:47,750 Entonces podría contar a cinco. 128 00:05:47,750 --> 00:05:51,350 Serían uno, dos, tres, cuatro, cinco. 129 00:05:51,350 --> 00:05:52,490 ¿Pero saben qué? 130 00:05:52,490 --> 00:05:55,640 Si fuera un poco más inteligente, apuesto que podría usar la misma mano 131 00:05:55,640 --> 00:05:59,750 y contar al menos 32, tal vez a 31 de ustedes. 132 00:05:59,750 --> 00:06:00,620 Bueno, ¿cómo es eso? 133 00:06:00,620 --> 00:06:04,400 Pues justo ahora estoy utilizando el sistema unario, donde uno significa uno. 134 00:06:04,400 --> 00:06:07,710 Entonces solo sería un dígito en este alfabeto, un dedo o ninguno. 135 00:06:07,710 --> 00:06:09,630 No es exactamente lo mismo el cero que el uno, 136 00:06:09,630 --> 00:06:11,720 entonces contamos una persona, dos, tres, cuatro, cinco. 137 00:06:11,720 --> 00:06:14,720 Pero, ¿qué pasa si sustituyo mis dedos de manera tal 138 00:06:14,720 --> 00:06:17,720 que el patrón de los dedos que tengo arriba realmente importe 139 00:06:17,720 --> 00:06:19,010 y no solo la cantidad de ellos? 140 00:06:19,010 --> 00:06:22,310 Entonces tal vez este aún sea 0 y que este ahora sea 1, 141 00:06:22,310 --> 00:06:26,205 y en lugar de que este sea 2, quizás podría ser esto. 142 00:06:26,205 --> 00:06:28,580 Entonces, si mi segundo dedo está levantado, voy a llamarle dos. 143 00:06:28,580 --> 00:06:32,010 Y si mis primeros dos dedos están levantados, podría llamarlos tres. 144 00:06:32,010 --> 00:06:34,010 Si solo este dedo está levantado, de un modo un poco ofensivo, 145 00:06:34,010 --> 00:06:37,220 podría llamarle cuatro y luego cinco, 146 00:06:37,220 --> 00:06:38,750 y luego se vuelve doloroso, 147 00:06:38,750 --> 00:06:40,910 seis, siete. 148 00:06:40,910 --> 00:06:43,010 Y lo que estoy haciendo realmente, es contar en binario. 149 00:06:43,010 --> 00:06:45,530 Ahora, esto puede parecer completamente enigmático, 150 00:06:45,530 --> 00:06:47,990 pero ocurre que, tan pronto como se tienen dos dígitos, son suficientes 151 00:06:47,990 --> 00:06:51,890 para representar cualquier cosa de un modo endiablamente eficiente. 152 00:06:51,890 --> 00:06:52,730 Pero, ¿por qué? 153 00:06:52,730 --> 00:06:56,120 Lo más probable es que, si son como yo, seguramente crecieron 154 00:06:56,120 --> 00:06:58,250 con el sistema decimal, el que va del cero al nueve. 155 00:06:58,250 --> 00:07:01,166 Y quizás tuvieron que escribir en el pizarrón algunos símbolos, como el número 156 00:07:01,166 --> 00:07:02,030 123. 157 00:07:02,030 --> 00:07:04,610 Pero, ¿por qué pensamos en eso como el número 123? 158 00:07:04,610 --> 00:07:06,950 En realidad solo se trata de un bonito arreglo de símbolos o glifos 159 00:07:06,950 --> 00:07:10,790 en la pantalla, al que atribuimos algún tipo de propiedad matemática 160 00:07:10,790 --> 00:07:11,370 cuyo significado es, 161 00:07:11,370 --> 00:07:12,650 123. 162 00:07:12,650 --> 00:07:17,240 Pero en realidad solo fue que alguien dibujó símbolos en la pantalla. 163 00:07:17,240 --> 00:07:19,290 Bueno, si ustedes son como yo, y regresamos a la escuela primaria, 164 00:07:19,290 --> 00:07:22,280 probablemente aprendieron que el número que está aquí, a la derecha 165 00:07:22,280 --> 00:07:25,040 está en lo que llamamos, ¿en qué lugar? 166 00:07:25,040 --> 00:07:26,120 El de las unidades, ¿correcto? 167 00:07:26,120 --> 00:07:27,870 De modo que si quisiéramos etiquetar estas cosas, 168 00:07:27,870 --> 00:07:30,530 deberíamos poner aquí las unidades y desde luego, el lugar para las decenas 169 00:07:30,530 --> 00:07:33,290 y el lugar de las centenas, quizás el de los miles, diez miles y así sucesivamente. 170 00:07:33,290 --> 00:07:35,600 Así que como base, hemos tenido este tipo de modelos mentales. 171 00:07:35,600 --> 00:07:38,600 Y tengan en cuenta que luego se vuelven potencias de 10. 172 00:07:38,600 --> 00:07:40,860 10 para el 0 es 1. 173 00:07:40,860 --> 00:07:42,290 10 para el 1 es 10. 174 00:07:42,290 --> 00:07:43,667 10 para el 2 es 100, y así sucesivamente. 175 00:07:43,667 --> 00:07:46,250 Ese es el patrón, incluso si su maestro en la primaria no 176 00:07:46,250 --> 00:07:48,860 les habló en ese momento sobre los exponenciales. 177 00:07:48,860 --> 00:07:51,860 Entonces, ¿por qué este número es 123? 178 00:07:51,860 --> 00:07:55,970 Bueno, es porque tenemos un uno en la columna de las centenas, 179 00:07:55,970 --> 00:07:57,410 eso significa 100 veces 1. 180 00:07:57,410 --> 00:07:59,330 Tenemos un dos en la columna de las decenas 181 00:07:59,330 --> 00:08:00,860 y tenemos un tres en la columna de las unidades. 182 00:08:00,860 --> 00:08:01,050 Estos. 183 00:08:01,050 --> 00:08:03,410 Y desde luego, si ahora nos ponemos a hacer aritmética, 184 00:08:03,410 --> 00:08:08,056 es decir, 100 más 20 más 3, evidentemente es igual a 123. 185 00:08:08,056 --> 00:08:10,430 Y actualmente todos, sin lugar a dudas, lo damos por hecho. 186 00:08:10,430 --> 00:08:12,860 Cuando ven un número, matemáticamente saben qué es. 187 00:08:12,860 --> 00:08:15,570 Pero las computadoras trabajan de la misma manera. 188 00:08:15,570 --> 00:08:18,650 Entonces, incluso si nunca han pensado en ustedes mismos como expertos en 189 00:08:18,650 --> 00:08:20,630 computación, o en realidad no tenían idea de lo que significa 190 00:08:20,630 --> 00:08:23,570 hablar solo con ceros y unos, lo único que deben hacer 191 00:08:23,570 --> 00:08:24,880 es actualizar los lugares. 192 00:08:24,880 --> 00:08:29,360 En lugar de las potencias de 10, es decir los decimales, usaremos el número dos para 193 00:08:29,360 --> 00:08:30,440 potencias binarias. 194 00:08:30,440 --> 00:08:34,409 Así que ahora tendremos 2 a la 0, 2 a la 1, 2 a la 2, 195 00:08:34,409 --> 00:08:35,419 2 a la 3, con el mismo concepto. 196 00:08:35,419 --> 00:08:37,039 Solo se trata de una base diferente. 197 00:08:37,039 --> 00:08:38,510 Nuestra modificación tiende hacia el 2. 198 00:08:38,510 --> 00:08:41,659 Y ahora tenemos lugares como este, 199 00:08:41,659 --> 00:08:46,440 1, 2, 4, y si continuamos así, 8, 16, 32, 64 y así sucesivamente. 200 00:08:46,440 --> 00:08:50,510 Entonces, ¿qué número binario aparece en la pantalla, si lo convierten 201 00:08:50,510 --> 00:08:52,397 mentalmente a decimales? 202 00:08:52,397 --> 00:08:53,730 Solo es el número uno, ¿correcto? 203 00:08:53,730 --> 00:08:57,310 Porque tenemos un 1 en las unidades y luego un cero en los demás sitios. 204 00:08:57,310 --> 00:08:59,430 Entonces, 1 por 1 es igual a 1. 205 00:08:59,430 --> 00:09:02,940 Ahora, si utilizo el unario o mis manos, de la manera tradicional, el número dos 206 00:09:02,940 --> 00:09:05,580 estaría aquí, donde ponemos nuestros dos dedos arriba. 207 00:09:05,580 --> 00:09:09,630 Pero si no tratamos de utilizar patrones ni cantidades. 208 00:09:09,630 --> 00:09:14,252 Sino más bien el binario, ¿cómo podría representar el número dos? 209 00:09:14,252 --> 00:09:15,900 010. 210 00:09:15,900 --> 00:09:19,090 Lo cual sería equivalente a levantar solo mi dedo índice. 211 00:09:19,090 --> 00:09:22,080 Y si quiero contar hasta tres, ahora necesito añadirle un 1 a la mezcla. 212 00:09:22,080 --> 00:09:23,550 Y lo agrego en las unidades. 213 00:09:23,550 --> 00:09:25,840 Y si ahora comienzan a visualizar esto, es como 214 00:09:25,840 --> 00:09:27,840 uno de esos relojes viejos, que había en la escuela, en los que 215 00:09:27,840 --> 00:09:30,030 las manecillas giran hasta dar la vuelta. 216 00:09:30,030 --> 00:09:32,670 Es como si los unos dieran una vuelta y se convirtieran en ceros 217 00:09:32,670 --> 00:09:35,220 y los ceros se convirtieran en unos. 218 00:09:35,220 --> 00:09:38,970 Y después tendremos cinco y luego seis y luego siete. 219 00:09:38,970 --> 00:09:41,640 Y entonces, ¡diablos!, ¿qué hace una computadora para contar hasta ocho? 220 00:09:41,640 --> 00:09:45,070 221 00:09:45,070 --> 00:09:47,100 Claro, solo necesitamos añadir otro lugar, ¿cierto? 222 00:09:47,100 --> 00:09:49,260 Es como nosotros, los humanos, que no tenemos un número infinito de números 223 00:09:49,260 --> 00:09:51,176 cuando escribimos algo, de alguna manera nos detenemos 224 00:09:51,176 --> 00:09:53,670 cuando no es necesario y todo lo que necesitamos es otro bit. 225 00:09:53,670 --> 00:09:57,030 Solo tenemos que añadir a la izquierda otro 0 o un 1, específicamente un uno. 226 00:09:57,030 --> 00:09:58,710 Entonces todos estos unos pueden convertirse en ceros. 227 00:09:58,710 --> 00:10:00,780 Y podemos hacer esto de modo infinito. 228 00:10:00,780 --> 00:10:03,330 Pero, ¿de dónde provienen estos bits? 229 00:10:03,330 --> 00:10:06,330 Todo esto es muy abstracto y solo son imágenes en una pantalla. 230 00:10:06,330 --> 00:10:09,810 Bueno, resulta que tenemos un ingrediente físico 231 00:10:09,810 --> 00:10:10,920 en todas nuestras computadoras. 232 00:10:10,920 --> 00:10:13,170 Quizás nuestra computadora sea portátil, de escritorio o nuestro celular. 233 00:10:13,170 --> 00:10:14,670 A fin de cuentas todos estos dispositivos funcionan, ya sea con 234 00:10:14,670 --> 00:10:17,921 baterías o mediante un cable conectado a la pared, del cual obtienen electricidad. 235 00:10:17,921 --> 00:10:20,295 E incluso si estamos poco familiarizados con la electricidad, 236 00:10:20,295 --> 00:10:22,830 probablemente sabemos que hay algo como pequeños electrones que fluyen. 237 00:10:22,830 --> 00:10:26,310 Entonces, existe algún tipo de recurso físico que puede o no fluir. 238 00:10:26,310 --> 00:10:28,440 Podemos encenderlos o apagarlos. 239 00:10:28,440 --> 00:10:31,470 Bueno, al igual que las lámparas que tenemos aquí, 240 00:10:31,470 --> 00:10:34,890 tenemos tres lámparas que, desde luego, están conectadas a la electricidad. 241 00:10:34,890 --> 00:10:36,370 Entonces tenemos alguna entrada física. 242 00:10:36,370 --> 00:10:39,270 Y lo que hago ahora es ponerlo en práctica en mi propia computadora 243 00:10:39,270 --> 00:10:40,740 usando estas simples lámparas. 244 00:10:40,740 --> 00:10:46,440 Si quiero representar algún valor, alguna entrada o salida, OK, aquí está el cero. 245 00:10:46,440 --> 00:10:48,080 En binario esto es cero. 246 00:10:48,080 --> 00:10:50,400 Solo necesito dejar tres lámparas apagadas. 247 00:10:50,400 --> 00:10:54,720 Si lo que quiero es representar un uno, necesito encender esta. 248 00:10:54,720 --> 00:10:56,220 Y ese es ahora el lugar de las unidades. 249 00:10:56,220 --> 00:10:59,220 Si lo que quiero es representar al dos, solo necesito encender esta lámpara. 250 00:10:59,220 --> 00:11:01,830 Si lo que quiero es representar al tres, también encendemos esta. 251 00:11:01,830 --> 00:11:05,630 Si lo que quiero es representar al cuatro, ¿qué es lo que ocurre? 252 00:11:05,630 --> 00:11:11,250 5, 6, 7, y luego, por supuesto, necesitamos algo para el 8, 253 00:11:11,250 --> 00:11:15,905 si lo que queremos es apagar estas y representar cuatro bits juntos en total. 254 00:11:15,905 --> 00:11:19,030 Y eso es lo que pasa dentro de nuestros teléfonos y computadoras. 255 00:11:19,030 --> 00:11:20,820 Actualmente los teléfonos, las computadoras y demás dispositivos 256 00:11:20,820 --> 00:11:23,694 tienen unos interruptores muy pequeños, llamados transistores, 257 00:11:23,694 --> 00:11:25,080 que se encienden o se apagan. 258 00:11:25,080 --> 00:11:28,470 Y eso es todo lo que necesitamos si tenemos recursos como la electricidad 259 00:11:28,470 --> 00:11:28,992 para almacenar la información. 260 00:11:28,992 --> 00:11:31,200 Solo necesitamos una gran cantidad de interruptores y una gran cantidad 261 00:11:31,200 --> 00:11:35,580 de lámparas, mucho más pequeñas, para representar la información. 262 00:11:35,580 --> 00:11:38,710 Pero las computadoras, claro está, pueden hacer mucho más que representar números. 263 00:11:38,710 --> 00:11:41,820 ¿Qué hay de las cartas, los correos electrónicos y cosas por el estilo? 264 00:11:41,820 --> 00:11:44,070 Bueno, por eso necesitamos algo que nos permita decidir, 265 00:11:44,070 --> 00:11:48,060 como humanos, cómo interpretaremos cosas como estas lámparas. 266 00:11:48,060 --> 00:11:51,420 En ciertos contextos, como el de una calculadora, pueden representar números, 267 00:11:51,420 --> 00:11:53,020 números decimales, o lo que sea. 268 00:11:53,020 --> 00:11:54,270 Pero en un programa de correo electrónico, 269 00:11:54,270 --> 00:11:56,010 como Microsoft Word o Google Docs, 270 00:11:56,010 --> 00:11:58,860 probablemente deseamos que estas lámparas o los transistores 271 00:11:58,860 --> 00:12:00,750 de las computadoras, no almacenen solo números, o de lo contrario 272 00:12:00,750 --> 00:12:02,430 solo podríamos hacer matemáticas. 273 00:12:02,430 --> 00:12:06,250 Nosotros queremos que guarden letras, oraciones, párrafos y cosas así. 274 00:12:06,250 --> 00:12:08,970 Entonces necesitamos contar con algún tipo de mapeo. 275 00:12:08,970 --> 00:12:10,190 Y lo haremos de la siguiente manera. 276 00:12:10,190 --> 00:12:12,330 ASCII, el cual solo es un acrónimo que describe 277 00:12:12,330 --> 00:12:15,360 un mapeo de números a letras, ¿pero saben qué 278 00:12:15,360 --> 00:12:16,800 decidimos hace años los humanos? 279 00:12:16,800 --> 00:12:18,840 En el contexto donde necesitamos letras, 280 00:12:18,840 --> 00:12:22,440 almacenaremos solo un patrón de bits igual al número 65, 281 00:12:22,440 --> 00:12:23,880 si queremos la letra a. 282 00:12:23,880 --> 00:12:26,820 Un patrón de bits igual al número decimal 66, 283 00:12:26,820 --> 00:12:28,320 si queremos almacenar el número b. 284 00:12:28,320 --> 00:12:29,700 Avanzamos rápidamente hasta la h y la i. 285 00:12:29,700 --> 00:12:34,450 Si queremos almacenar la h o la i, 72, 73, y solo esa cantidad de bits. 286 00:12:34,450 --> 00:12:39,930 Y no me interesa más esta historia, ni cómo representamos el 65 o el 73. 287 00:12:39,930 --> 00:12:42,780 Lo único que quiero es que sepamos que, de alguna manera, con las lámparas 288 00:12:42,780 --> 00:12:46,390 en el escenario, los transistores en mi teléfono o con cualquier dispositivo, 289 00:12:46,390 --> 00:12:49,269 podemos abstraernos de esos pequeños detalles. 290 00:12:49,269 --> 00:12:51,060 De hecho, no pasaremos demasiado tiempo 291 00:12:51,060 --> 00:12:54,450 después de hoy, hablando sobre el binario en CS50, porque aquí 292 00:12:54,450 --> 00:12:56,400 conceptualmente, tenemos electricidad. 293 00:12:56,400 --> 00:12:59,192 Además de eso, podemos construir la noción de binario, los ceros y unos 294 00:12:59,192 --> 00:13:00,900 y una vez que salgamos de esta convención 295 00:13:00,900 --> 00:13:04,200 podemos empezar a hablar de las letras de un alfabeto. 296 00:13:04,200 --> 00:13:06,360 Pero esta no es la única cosa de la que podemos hablar, 297 00:13:06,360 --> 00:13:09,750 también podemos hablar sobre los gráficos, los videos y todas estas cosas 298 00:13:09,750 --> 00:13:11,490 que damos por hecho estos días. 299 00:13:11,490 --> 00:13:14,790 Por ejemplo, y solo para recapitular, ¿cuál sería el mensaje 300 00:13:14,790 --> 00:13:17,880 que tengo codificado ahora en la pantalla? 301 00:13:17,880 --> 00:13:18,760 PÚBLICO: Hi. 302 00:13:18,760 --> 00:13:22,440 DAVID: Sí, dice Hi, porque como dije hace un momento, el 72 y el 73 303 00:13:22,440 --> 00:13:25,500 son los números que inventamos hace años los humanos para representar HI. 304 00:13:25,500 --> 00:13:27,176 En realidad no sé qué significa el 33. 305 00:13:27,176 --> 00:13:28,800 Deberían decirme qué es o buscarlo. 306 00:13:28,800 --> 00:13:33,390 Resulta que es el signo de admiración, porque los humanos decidieron 307 00:13:33,390 --> 00:13:37,290 expresar también en códigos numéricos todos los símbolos de un teclado. 308 00:13:37,290 --> 00:13:40,230 Lamentablemente, en ese entonces no fueron muy astutos. 309 00:13:40,230 --> 00:13:44,010 Solo usaron 7 bits en total, y más tarde algo parecido de 8 bits. 310 00:13:44,010 --> 00:13:48,930 Pero aún así, aún cuando eso nos da más de 200 valores posibles, 256, 311 00:13:48,930 --> 00:13:52,629 existen muchos idiomas que no son como el alfabeto inglés, 312 00:13:52,629 --> 00:13:55,170 Idiomas asiáticos y similares, que tienen muchos, muchos más 313 00:13:55,170 --> 00:13:58,560 símbolos que se pueden expresar con tan solo siete u ocho bits. 314 00:13:58,560 --> 00:14:01,530 Así que ahora ASCII fue reemplazado por algo llamado Unicode. 315 00:14:01,530 --> 00:14:05,430 En resumen, los humanos comenzaron a resolver problemas que en principio 316 00:14:05,430 --> 00:14:11,170 surgieron por no anticipar, necesitar o querer valores más grandes. 317 00:14:11,170 --> 00:14:15,000 Pero en otro contexto, como Photoshop o cualquier programa de gráficos, 318 00:14:15,000 --> 00:14:16,950 podemos ver el mismo patrón de bits, 319 00:14:16,950 --> 00:14:19,380 72, 73, 33. 320 00:14:19,380 --> 00:14:22,410 Pero en estos programas, ellos saben cómo interpretar esos números 321 00:14:22,410 --> 00:14:23,800 así como cierta cantidad de color. 322 00:14:23,800 --> 00:14:25,620 Si alguna vez han oído hablar de RGB, 323 00:14:25,620 --> 00:14:27,720 rojo, verde, azul, son solo un acrónimo que 324 00:14:27,720 --> 00:14:30,370 describe cómo podemos mezclar tres colores diferentes 325 00:14:30,370 --> 00:14:33,390 y llegar al alma de la pintura, o dicho de forma más técnica y sencilla, 326 00:14:33,390 --> 00:14:37,770 se combinan estos tres colores y se obtiene cualquier color del arcoiris. 327 00:14:37,770 --> 00:14:45,200 Entonces cada número que mencionaré puede ir del 0 al 255 y del 72 hasta el 255. 328 00:14:45,200 --> 00:14:46,679 Es como una cantidad mediana de rojo. 329 00:14:46,679 --> 00:14:49,470 También tenemos una cantidad mediana de verde y solo un poquito de azul. 330 00:14:49,470 --> 00:14:52,970 Y si combinamos estos tres colores, mezclándolos 331 00:14:52,970 --> 00:14:56,300 en un solo punto o píxel, como se le llama en computación, 332 00:14:56,300 --> 00:14:59,240 obtendremos esta especie de sombreado en amarillo oscuro. 333 00:14:59,240 --> 00:15:01,970 Pero en el contexto de Photoshop, o de algún programa de gráficos, 334 00:15:01,970 --> 00:15:07,040 los mismos tres patrones de bits se interpretarían de esta manera. 335 00:15:07,040 --> 00:15:10,259 Y ocurre lo mismo si hablamos en términos de bits individuales, 336 00:15:10,259 --> 00:15:11,300 lo cual no es del todo útil. 337 00:15:11,300 --> 00:15:13,340 Con un solo bit, lo más que podemos contar es el uno. 338 00:15:13,340 --> 00:15:17,960 Así que los humanos unificaron hace tiempo la nomenclatura del byte, B-Y-T-E, 339 00:15:17,960 --> 00:15:19,212 en solo 8 bits. 340 00:15:19,212 --> 00:15:21,920 Y si alguna vez oyeron hablar de kilobytes, megabytes, gigabytes, 341 00:15:21,920 --> 00:15:25,010 terabytes y términos similares, son solo múltiplos del mismo, 342 00:15:25,010 --> 00:15:29,220 que por lo general tienen una magnitud de 1000 o 1024, o más. 343 00:15:29,220 --> 00:15:32,960 Entonces, con solamente tres bytes, es decir 24 bits, podemos 344 00:15:32,960 --> 00:15:34,820 representar letras, números y similares. 345 00:15:34,820 --> 00:15:37,250 Y a fin de cuentas solo son ejemplos de una abstracción. 346 00:15:37,250 --> 00:15:39,020 Y son conceptos que tendremos presentes, no solo en este curso, 347 00:15:39,020 --> 00:15:41,728 sino en general en las ciencias de la computación, considerando 348 00:15:41,728 --> 00:15:45,200 ideas muy simples, que a primera vista no parecen ser interesantes. 349 00:15:45,200 --> 00:15:48,309 Pero en cuanto las usemos como ingredientes para resolver problemas, 350 00:15:48,309 --> 00:15:51,350 reutilizaremos dicha herramienta para construir algo más interesante, 351 00:15:51,350 --> 00:15:53,474 y la reutilizaremos para construir algo aún más interesante, 352 00:15:53,474 --> 00:15:56,180 incluso cuando comencemos a desarrollar aplicaciones 353 00:15:56,180 --> 00:15:58,190 y resolvamos problemas que de verdad nos preocupen, 354 00:15:58,190 --> 00:16:00,680 dando por hecho que las personas que nos precedieron 355 00:16:00,680 --> 00:16:06,110 resolvieron muchos de esos detalles menores de implementación. 356 00:16:06,110 --> 00:16:09,560 ¿Qué hay dentro de esta caja negra? 357 00:16:09,560 --> 00:16:11,420 Es lo que llamamos algoritmos. 358 00:16:11,420 --> 00:16:13,820 Si les parece familiar, ¿qué es un algoritmo? 359 00:16:13,820 --> 00:16:17,300 Es una palabra muy elegante, pero es algo muy sencillo. 360 00:16:17,300 --> 00:16:19,596 ¿Alguien sabe qué es un algoritmo? 361 00:16:19,596 --> 00:16:21,096 PÚBLICO: Son instrucciones paso a paso. 362 00:16:21,096 --> 00:16:24,390 DAVID: ¡Exacto! Solo son instrucciones paso a paso para resolver un problema. 363 00:16:24,390 --> 00:16:24,890 Eso es todo. 364 00:16:24,890 --> 00:16:28,730 Eso es un algoritmo, las instrucciones paso a paso para resolver algún problema. 365 00:16:28,730 --> 00:16:31,560 Entonces, ¿cuál sería un problema que nos gustaría resolver? 366 00:16:31,560 --> 00:16:33,800 Bueno, me acuerdo de... 367 00:16:33,800 --> 00:16:36,230 Recuerdo que en quinto grado 368 00:16:36,230 --> 00:16:38,990 mi profesora trataba de enseñarnos, 369 00:16:38,990 --> 00:16:41,780 tan eficazmente como podía, a seguir instrucciones correctamente. 370 00:16:41,780 --> 00:16:43,710 Y en ese momento se volvió un completo desastre. 371 00:16:43,710 --> 00:16:46,527 Pero con este ejemplo siempre me acuerdo de su demostración, 372 00:16:46,527 --> 00:16:48,860 pues viene al caso, aunque ella no utilizó 373 00:16:48,860 --> 00:16:52,460 esa palabra para dar una idea sobre el pensamiento computacional, 374 00:16:52,460 --> 00:16:54,830 o para pensar como una computadora, por así decirlo, 375 00:16:54,830 --> 00:16:58,550 o con lo cual trataremos de resolver algo correctamente. 376 00:16:58,550 --> 00:17:01,700 Pero para ello necesitamos dar instrucciones muy precisas. 377 00:17:01,700 --> 00:17:03,360 Aunque es más fácil decirlo que hacerlo. 378 00:17:03,360 --> 00:17:07,950 Y de hecho, para representarlo, gracias al equipo tenemos aquí un plato, 379 00:17:07,950 --> 00:17:10,430 tenemos un paquete de pan, 380 00:17:10,430 --> 00:17:15,079 un frasco de deliciosa crema de cacahuate Skippy 381 00:17:15,079 --> 00:17:20,390 y un frasco con mermelada de uva concordia, de Smucker's, 382 00:17:20,390 --> 00:17:24,829 también, como inevitable necesidad, una gran cantidad de toallas de papel 383 00:17:24,829 --> 00:17:26,060 y este cuchillo. 384 00:17:26,060 --> 00:17:27,980 Entonces propondré esto solo por un momento. 385 00:17:27,980 --> 00:17:30,230 Jugaré el papel de una computadora, o quizás 386 00:17:30,230 --> 00:17:33,080 el de un robot que va a desarrollar un algoritmo, 387 00:17:33,080 --> 00:17:37,147 y ustedes serán el programador, la persona que me dará las instrucciones 388 00:17:37,147 --> 00:17:38,480 para que pueda resolver el problema. 389 00:17:38,480 --> 00:17:41,146 Y el problema aquí será desarrollar algo, quizás no les sorprenda, 390 00:17:41,146 --> 00:17:44,180 un sándwich de crema de cacahuate y mermelada, prepararlo es fácil e intuitivo 391 00:17:44,180 --> 00:17:45,800 si crecimos comiendo estas cosas, 392 00:17:45,800 --> 00:17:49,220 pero si nunca hemos pensado cómo enseñar a alguien más a prepararlo 393 00:17:49,220 --> 00:17:54,840 y que ese alguien no es tan... comprensivo como otro ser humano, 394 00:17:54,840 --> 00:17:57,741 pues los humanos tenemos convenciones para leer entre líneas, 395 00:17:57,741 --> 00:17:58,740 pero las computadoras no pueden hacer eso. 396 00:17:58,740 --> 00:18:00,531 Ellas solo harán lo que les digamos que hagan. 397 00:18:00,531 --> 00:18:04,940 Y por ello, en cierto modo, son menos poderosas que nosotros, los humanos. 398 00:18:04,940 --> 00:18:08,210 Entonces, ¿cuál es el primer paso para preparar con estos ingredientes, 399 00:18:08,210 --> 00:18:10,847 estas entradas, un sándwich de crema de cacahuete y mermelada? 400 00:18:10,847 --> 00:18:12,180 PÚBLICO: Abre la bolsa de pan. 401 00:18:12,180 --> 00:18:13,929 DAVID: Escuché, abre la bolsa de pan. 402 00:18:13,929 --> 00:18:16,560 PÚBLICO: Así no. 403 00:18:16,560 --> 00:18:19,757 DAVID: Bueno, tal vez no era lo que tenían en mente. 404 00:18:19,757 --> 00:18:20,340 Pero está bien. 405 00:18:20,340 --> 00:18:21,600 La bolsa está abierta. 406 00:18:21,600 --> 00:18:23,844 Entonces, ¿qué podría ser más preciso para el paso dos? 407 00:18:23,844 --> 00:18:25,010 PÚBLICO: Toma dos rebanadas. 408 00:18:25,010 --> 00:18:25,884 DAVID: Díganlo de nuevo. 409 00:18:25,884 --> 00:18:27,130 PÚBLICO: Toma dos rebanadas. 410 00:18:27,130 --> 00:18:29,390 DAVID: Tomo dos rebanadas. 411 00:18:29,390 --> 00:18:30,447 OK. 412 00:18:30,447 --> 00:18:32,280 PÚBLICO: Pon las dos rebanadas en el plato. 413 00:18:32,280 --> 00:18:35,250 DAVID: Pongo dos rebanadas en el plato. 414 00:18:35,250 --> 00:18:37,110 PÚBLICO: Tira el cuchillo. 415 00:18:37,110 --> 00:18:38,700 PONENTE 1: Tiro... ¿qué? 416 00:18:38,700 --> 00:18:39,411 ¿Tiro el cuchillo? 417 00:18:39,411 --> 00:18:40,286 PÚBLICO: [INAUDIBLE] 418 00:18:40,286 --> 00:18:42,776 DAVID: OK. 419 00:18:42,776 --> 00:18:45,270 PÚBLICO: Abre la mermelada. 420 00:18:45,270 --> 00:18:47,800 DAVID: Abro la mermelada. 421 00:18:47,800 --> 00:18:48,300 OK. 422 00:18:48,300 --> 00:18:49,570 PÚBLICO: Toma el cuchillo. 423 00:18:49,570 --> 00:18:50,956 DAVID: Tomo el cuchillo. 424 00:18:50,956 --> 00:18:53,240 PÚBLICO: Mete el cuchillo en la mermelada. 425 00:18:53,240 --> 00:18:54,880 DAVID: Meto el cuchillo en la... ¡oh! 426 00:18:54,880 --> 00:18:55,380 ¿Qué? 427 00:18:55,380 --> 00:18:56,760 PÚBLICO: Por el otro extremo. 428 00:18:56,760 --> 00:18:58,630 DAVID: Oh, gracias. 429 00:18:58,630 --> 00:18:59,134 Bien. 430 00:18:59,134 --> 00:19:00,550 Toma el cuchillo por el otro extremo. 431 00:19:00,550 --> 00:19:02,462 Alguien de más atrás, ¿quizás? 432 00:19:02,462 --> 00:19:05,120 PÚBLICO: Mete el cuchillo en la mermelada. 433 00:19:05,120 --> 00:19:08,340 DAVID: Meto el cuchillo en la mermelada. 434 00:19:08,340 --> 00:19:08,840 ¿Cómo? 435 00:19:08,840 --> 00:19:10,200 PÚBLICO: Sácalo. 436 00:19:10,200 --> 00:19:11,590 DAVID: Lo saco. 437 00:19:11,590 --> 00:19:13,620 OK. 438 00:19:13,620 --> 00:19:14,120 ¿Otra vez? 439 00:19:14,120 --> 00:19:15,710 PÚBLICO: Mete el cuchillo en la mermelada. 440 00:19:15,710 --> 00:19:17,230 DAVID: Meto el cuchillo en la mermelada. 441 00:19:17,230 --> 00:19:18,380 Aw. 442 00:19:18,380 --> 00:19:19,430 Cucharéalo. 443 00:19:19,430 --> 00:19:21,350 PÚBLICO: Sí. 444 00:19:21,350 --> 00:19:23,270 Ponlo sobre el pan. 445 00:19:23,270 --> 00:19:27,120 [RISAS] 446 00:19:27,120 --> 00:19:29,380 DAVID: OK, vamos a medio camino. 447 00:19:29,380 --> 00:19:29,880 ¿Y ahora qué? 448 00:19:29,880 --> 00:19:33,120 PÚBLICO: Esparce la mermelada con el cuchillo sobre el pan. 449 00:19:33,120 --> 00:19:36,452 DAVID: Esparzo la mermelada con el cuchillo sobre el pan. 450 00:19:36,452 --> 00:19:37,160 PÚBLICO: ¡De modo uniforme! 451 00:19:37,160 --> 00:19:38,290 DAVID: Oh, de modo uniforme. 452 00:19:38,290 --> 00:19:41,004 Tengamos cuidado aquí. 453 00:19:41,004 --> 00:19:43,780 OK, OK. 454 00:19:43,780 --> 00:19:44,724 ¿Ahora? 455 00:19:44,724 --> 00:19:48,042 PÚBLICO: Haz con la crema de cacahuate, lo mismo que con la mermelada 456 00:19:48,042 --> 00:19:51,012 sobre la otra rebanada de pan. 457 00:19:51,012 --> 00:19:52,845 DAVID: OK, entonces, creo que primero hicimos esto. 458 00:19:52,845 --> 00:19:54,594 459 00:19:54,594 --> 00:19:57,010 PÚBLICO: Y esta vez no le pongas tanta crema de cacahuate. 460 00:19:57,010 --> 00:19:59,580 DAVID: Hicimos esto, después hicimos aquello. 461 00:19:59,580 --> 00:20:01,600 Entonces... oh. 462 00:20:01,600 --> 00:20:04,810 Bueno, me tomaré algunas libertades. 463 00:20:04,810 --> 00:20:07,240 OK, y ahora ponemos esto de nuevo. 464 00:20:07,240 --> 00:20:08,650 PÚBLICO: Cucharéalo un poco hacia afuera. 465 00:20:08,650 --> 00:20:11,127 DAVID: Esta vez escuché: "Cucharéalo un poco hacia afuera". 466 00:20:11,127 --> 00:20:12,260 PÚBLICO: Sobre la otra rebanada de pan. 467 00:20:12,260 --> 00:20:14,000 DAVID: Sobre la otra rebanada de pan, gracias. 468 00:20:14,000 --> 00:20:15,170 PÚBLICO: Espárcelo de modo uniforme. 469 00:20:15,170 --> 00:20:16,336 DAVID: Lo esparzo de modo uniforme. 470 00:20:16,336 --> 00:20:19,870 471 00:20:19,870 --> 00:20:23,772 La próxima vez háganme usar mi mano derecha, por favor. 472 00:20:23,772 --> 00:20:26,384 OK, y... 473 00:20:26,384 --> 00:20:28,854 PÚBLICO: Baja el cuchillo. 474 00:20:28,854 --> 00:20:30,965 Pon el lado con mermelada sobre el de crema de cacahuate. 475 00:20:30,965 --> 00:20:31,840 DAVID: Gracias. 476 00:20:31,840 --> 00:20:34,550 Pongo el lado con mermelada sobre el de crema de cacahuate y... 477 00:20:34,550 --> 00:20:35,050 ¡Delicioso! 478 00:20:35,050 --> 00:20:36,790 OK. 479 00:20:36,790 --> 00:20:38,335 Muchas gracias. 480 00:20:38,335 --> 00:20:40,315 [APLAUSOS] 481 00:20:40,315 --> 00:20:43,290 482 00:20:43,290 --> 00:20:47,610 Este fue un ejemplo tonto, pero dense cuenta de cuántas posibles 483 00:20:47,610 --> 00:20:51,450 ambigüedades o escenarios hubo en algo tan simple, 484 00:20:51,450 --> 00:20:52,410 y que no anticiparon. 485 00:20:52,410 --> 00:20:54,576 De hecho, entre las cosas que haremos hoy, 486 00:20:54,576 --> 00:20:58,080 ya que empezamos a formalizar estas ideas con un código, un código de programación, 487 00:20:58,080 --> 00:21:02,130 es descomponer los problemas en las partes que los conforman, 488 00:21:02,130 --> 00:21:05,075 y teniendo en cuenta lo que sucedió, ¿qué debo hacer si pasa esto? 489 00:21:05,075 --> 00:21:06,450 ¿Qué debo hacer si pasa esto? 490 00:21:06,450 --> 00:21:07,890 ¿Qué debo hacer si pasa esto? 491 00:21:07,890 --> 00:21:10,320 Porque, a menos que anticipemos las tonterías 492 00:21:10,320 --> 00:21:12,030 como las que estuve actuando allí, de manera deliberada, 493 00:21:12,030 --> 00:21:14,910 ¿quién sabe lo que una computadora podría terminar haciendo? 494 00:21:14,910 --> 00:21:16,710 Después de todo, es probable que todos en esta sala, 495 00:21:16,710 --> 00:21:19,500 como yo, hayan visto una pelota de playa que gira o un reloj de arena 496 00:21:19,500 --> 00:21:22,530 cuando su computadora, ya sea su Mac o su PC, se pasma o se bloquea. 497 00:21:22,530 --> 00:21:25,830 Y casi siempre esto ocurre como resultado de algún error humano. 498 00:21:25,830 --> 00:21:29,400 Alguien en Google, Microsoft o Facebook, o en cualquier parte, cometió algún error. 499 00:21:29,400 --> 00:21:31,590 Ellos no anticiparon alguna situación, 500 00:21:31,590 --> 00:21:33,960 no anticiparon que escribiríamos una palabra, 501 00:21:33,960 --> 00:21:36,180 no anticiparon que ejecutaríamos 20 programas al mismo tiempo, 502 00:21:36,180 --> 00:21:37,900 tampoco anticiparon algunos escenarios. 503 00:21:37,900 --> 00:21:41,620 Y por eso, el comportamiento de la computadora no se definió eficientemente. 504 00:21:41,620 --> 00:21:45,300 Y entonces se produjo un resultado incorrecto. 505 00:21:45,300 --> 00:21:47,310 ¿Qué podemos pensar al respecto? 506 00:21:47,310 --> 00:21:49,840 ¿Qué sería ideal si de algún modo, 507 00:21:49,840 --> 00:21:54,780 si de algún modo formalizáramos esto mediante un código real? 508 00:21:54,780 --> 00:21:57,150 Y lo haremos con un problema de la vieja escuela, 509 00:21:57,150 --> 00:21:59,850 un problema que es mucho más digital en estos días, 510 00:21:59,850 --> 00:22:01,170 pero que aún está presente. 511 00:22:01,170 --> 00:22:03,711 Ya sea que tengamos un teléfono Android, un iPhone, o cualquier otra cosa, 512 00:22:03,711 --> 00:22:06,900 probablemente incluya una pequeña agenda de contactos o direcciones. 513 00:22:06,900 --> 00:22:08,649 Y tendrá una gran cantidad de nombres, 514 00:22:08,649 --> 00:22:10,772 tal vez ordenados alfabéticamente por nombre o apellido, 515 00:22:10,772 --> 00:22:13,980 también muchos números de teléfono y quizás correos electrónicos, 516 00:22:13,980 --> 00:22:15,330 entre otras cosas recientes. 517 00:22:15,330 --> 00:22:18,720 Pero la representación física de ese icono en nuestros teléfonos 518 00:22:18,720 --> 00:22:20,460 es esta cosa vieja, una agenda telefónica. 519 00:22:20,460 --> 00:22:24,690 Y si quisiera buscar a un viejo amigo, por ejemplo, Mike Smith, ¿cómo podría 520 00:22:24,690 --> 00:22:26,944 encontrarlo en esta vieja agenda telefónica? 521 00:22:26,944 --> 00:22:28,860 Bueno, al igual que en forma digital, solo tengo que 522 00:22:28,860 --> 00:22:30,690 desplazarme por la lista y buscarlo. 523 00:22:30,690 --> 00:22:34,410 Busco en la primera página, miro hacia abajo, no lo veo, paso a la otra, 524 00:22:34,410 --> 00:22:38,190 lo busco, no lo veo, paso otra página, lo busco, no lo veo y así sucesivamente. 525 00:22:38,190 --> 00:22:40,140 ¿Es correcto este algoritmo? 526 00:22:40,140 --> 00:22:41,260 PÚBLICO: Sí. 527 00:22:41,260 --> 00:22:42,510 DAVID: Sí, es correcto. 528 00:22:42,510 --> 00:22:44,130 Esto es algo tonto, ciertamente, porque tardaremos 529 00:22:44,130 --> 00:22:46,830 una eternidad para hallar a Mike, hay casi 1000 páginas aquí, 530 00:22:46,830 --> 00:22:47,892 pero es correcto. 531 00:22:47,892 --> 00:22:50,850 Es el equivalente a un tipo de desplazamiento, lento y metódico 532 00:22:50,850 --> 00:22:53,600 en nuestra lista de contactos, sin el lujo de la búsqueda automática 533 00:22:53,600 --> 00:22:54,767 o la función autocompletar y similares. 534 00:22:54,767 --> 00:22:56,141 Bueno, podríamos hacerlo mejor. 535 00:22:56,141 --> 00:22:58,770 En la primaria generalmente aprendemos a contar de dos en dos. 536 00:22:58,770 --> 00:23:02,750 Entonces podríamos contar 2, 4, 6, 8, 10, 12. 537 00:23:02,750 --> 00:23:05,940 Ahora puedo revisar la agenda mucho más rápido. 538 00:23:05,940 --> 00:23:07,260 Pero, ¿es correcto este algoritmo? 539 00:23:07,260 --> 00:23:08,281 PÚBLICO: No. 540 00:23:08,281 --> 00:23:09,030 DAVID: No, ¿por qué? 541 00:23:09,030 --> 00:23:10,239 PÚBLICO: Puedes pasarlo de largo. 542 00:23:10,239 --> 00:23:11,946 DAVID: Claro, puedo pasarlo de largo, ¿cierto? 543 00:23:11,946 --> 00:23:14,550 Ya que Mike, por casualidad, podría estar hecho sándwich, 544 00:23:14,550 --> 00:23:19,350 sin doble sentido, entre las dos páginas que volteo rápidamente 545 00:23:19,350 --> 00:23:20,280 y podría pasarlo de largo. 546 00:23:20,280 --> 00:23:23,340 Pero al menos puedo arreglar este error o "bug", por así decirlo. 547 00:23:23,340 --> 00:23:25,770 Un bug es un error en un programa, un error completamente humano. 548 00:23:25,770 --> 00:23:28,830 Si llego hasta la letra t, la t está después de Smith. 549 00:23:28,830 --> 00:23:32,040 Tal vez pueda retroceder al menos una página y arreglar ese error. 550 00:23:32,040 --> 00:23:35,400 Retroceder me toma algo más de tiempo, pero si lo hago bien, 551 00:23:35,400 --> 00:23:37,190 solo me costará algo así como una vuelta adicional a la página. 552 00:23:37,190 --> 00:23:38,760 Es mejor y es lo correcto. 553 00:23:38,760 --> 00:23:41,520 Pero obviamente, nadie en esta sala buscará a Mike Smith 554 00:23:41,520 --> 00:23:42,870 comenzando por la primera página. 555 00:23:42,870 --> 00:23:44,804 ¿Desde dónde empezarían a buscar? 556 00:23:44,804 --> 00:23:47,970 Desde la mitad, tal vez cerca del final, porque saben dónde está la S. 557 00:23:47,970 --> 00:23:49,594 Entonces, abrirán la agenda por la mitad. 558 00:23:49,594 --> 00:23:51,480 Buscarán hacia abajo y verán la sección M. 559 00:23:51,480 --> 00:23:52,830 Así que no tuve que ir tan lejos. 560 00:23:52,830 --> 00:23:55,020 Pero lo genial de esta vieja tecnología, 561 00:23:55,020 --> 00:23:59,550 es que ahora podemos romper este problema en dos partes, arrojar la mitad 562 00:23:59,550 --> 00:24:04,241 y, en esencia, quedarnos con el mismo problema, pero en una versión 563 00:24:04,241 --> 00:24:04,740 más pequeña. 564 00:24:04,740 --> 00:24:09,690 Quizás ahora no sean 1000 sino 500 páginas, pero es el mismo problema. 565 00:24:09,690 --> 00:24:13,050 Y puedo aplicar la misma lógica, ir hasta la mitad, mirar hacia abajo. 566 00:24:13,050 --> 00:24:15,270 Esta vez me fui un poco más lejos, a la sección T. 567 00:24:15,270 --> 00:24:20,640 Pero puedo romper de nuevo casi una cuarta parte de este problema, 568 00:24:20,640 --> 00:24:24,570 lo cual me deja ahora con un tamaño total de, quizás 250 páginas 569 00:24:24,570 --> 00:24:26,550 después de dividirlo a la mitad dos veces. 570 00:24:26,550 --> 00:24:29,010 Y puedo repetirlo, una y otra vez. 571 00:24:29,010 --> 00:24:31,680 Mientras Mike continúe en la agenda telefónica, 572 00:24:31,680 --> 00:24:35,010 al final, lo encontraré una vez, y solo una vez, 573 00:24:35,010 --> 00:24:38,760 en la última página de la agenda y entonces podré llamarlo. 574 00:24:38,760 --> 00:24:41,582 La verdadera pregunta es, ¿hasta qué punto fue lo mejor? 575 00:24:41,582 --> 00:24:42,540 Fue algo ineficiente. 576 00:24:42,540 --> 00:24:45,480 Aquí, en el mundo analógico, no podemos solo deshacer algo. 577 00:24:45,480 --> 00:24:49,020 Pero pensemos en qué tan bueno fue ese algoritmo, 578 00:24:49,020 --> 00:24:52,220 el que sin duda damos por hecho y con el que debimos comenzar. 579 00:24:52,220 --> 00:24:55,740 Bueno, aquí tenemos una gráfica simple, y sobre el eje horizontal, o x, 580 00:24:55,740 --> 00:24:56,980 tenemos el tamaño del problema, 581 00:24:56,980 --> 00:25:00,063 es decir, la cantidad de páginas de la agenda, como queramos medirlas, 582 00:25:00,063 --> 00:25:02,730 y luego, sobre el eje vertical, o y, el tiempo para resolverlo, 583 00:25:02,730 --> 00:25:04,860 quizás por el número de segundos, o las veces que damos vuelta la página, 584 00:25:04,860 --> 00:25:07,110 como queramos contar los pasos, 585 00:25:07,110 --> 00:25:09,780 es una relación de tamaño y tiempo. 586 00:25:09,780 --> 00:25:12,330 Y en el primer algoritmo dibujaré 587 00:25:12,330 --> 00:25:14,159 algo como esto, una línea recta en rojo, 588 00:25:14,159 --> 00:25:16,950 a la cual llamaré n, donde n equivale al número de páginas 589 00:25:16,950 --> 00:25:17,700 que hay en la agenda. 590 00:25:17,700 --> 00:25:21,150 Los especialistas en sistemas usan la n como una variable, solo es un símbolo. 591 00:25:21,150 --> 00:25:24,660 Y esta es una línea recta por la siguiente razón. 592 00:25:24,660 --> 00:25:28,370 Si la agenda aumenta el próximo año, y un poco más el próximo año, 593 00:25:28,370 --> 00:25:30,480 en una página, eso significa que tendríamos 594 00:25:30,480 --> 00:25:32,920 que dedicar un paso más buscando a Mike. 595 00:25:32,920 --> 00:25:35,231 Así, la pendiente de esta línea es lineal. 596 00:25:35,231 --> 00:25:37,230 Existe una relación uno a uno entre el número 597 00:25:37,230 --> 00:25:40,800 de páginas Verizon, o de la compañía telefónica, y el número de páginas 598 00:25:40,800 --> 00:25:41,820 a las que debo dar la vuelta. 599 00:25:41,820 --> 00:25:44,510 Aunque el segundo algoritmo también es una línea recta, 600 00:25:44,510 --> 00:25:46,630 se dibuja más abajo, en amarillo. 601 00:25:46,630 --> 00:25:50,840 Y 2 veces n significa que es el doble de rápido o que equivale a la mitad del tiempo 602 00:25:50,840 --> 00:25:56,030 porque para un problema de cierta magnitud, si siguen mi mano derecha hacía 603 00:25:56,030 --> 00:25:59,690 arriba, la línea amarilla debería estar debajo de la línea roja 604 00:25:59,690 --> 00:26:02,930 porque voy muy rápido por la agenda, dos páginas a la vez. 605 00:26:02,930 --> 00:26:04,769 Así que debe tomar la mitad del tiempo. 606 00:26:04,769 --> 00:26:07,310 Pero si uso el primer algoritmo, tengo que recorrer todo el camino 607 00:26:07,310 --> 00:26:10,580 hasta la roja, la cual mide el número de segundos. 608 00:26:10,580 --> 00:26:13,100 Pero el tercer algoritmo tiene una forma completamente diferente. 609 00:26:13,100 --> 00:26:16,130 Y aquí es donde aparece la belleza de las ciencias de la 610 00:26:16,130 --> 00:26:17,810 computación y de los algoritmos. 611 00:26:17,810 --> 00:26:20,240 Al final no se vuelve una recta. 612 00:26:20,240 --> 00:26:21,974 Parece como si disminuyera gradualmente. 613 00:26:21,974 --> 00:26:23,390 Pero hará esto para siempre. 614 00:26:23,390 --> 00:26:26,624 Se trata de un aumento tan lento en el tiempo, 615 00:26:26,624 --> 00:26:29,540 que ni siquiera podemos verlo, aunque la pantalla fuera más amplia. 616 00:26:29,540 --> 00:26:32,482 Llamamos a esto logarítmico, log n, pero hablaremos de eso más tarde. 617 00:26:32,482 --> 00:26:34,190 Pero la forma es completamente diferente. 618 00:26:34,190 --> 00:26:34,690 Es una línea curva. 619 00:26:34,690 --> 00:26:37,898 Y lo más importante de ello, es que podemos asimilarlo más fácil 620 00:26:37,898 --> 00:26:38,690 e intuitivamente. 621 00:26:38,690 --> 00:26:41,556 Si Verizon duplica el tamaño de su agenda telefónica el próximo año 622 00:26:41,556 --> 00:26:43,430 porque tal vez Cambridge y otra ciudad 623 00:26:43,430 --> 00:26:46,044 se junten en una sola agenda, no habría problema, 624 00:26:46,044 --> 00:26:48,710 porque si Verizon duplica el tamaño de su agenda el próximo año, 625 00:26:48,710 --> 00:26:51,530 ¿cuántas vueltas de página más necesitaría para encontrar a Mike? 626 00:26:51,530 --> 00:26:52,322 PÚBLICO: Solo una. 627 00:26:52,322 --> 00:26:53,446 DAVID: Solo una, ¿cierto? 628 00:26:53,446 --> 00:26:56,360 Porque solo divido el problema por la mitad una vez más, no es gran cosa, 629 00:26:56,360 --> 00:27:00,950 en lugar de hojear 500 o 1000 páginas adicionales. 630 00:27:00,950 --> 00:27:04,190 Y entonces esta intuición con la que entraron hoy a Sanders, 631 00:27:04,190 --> 00:27:07,730 es probable que puedan aprovecharla para resolver problemas más efectivamente, 632 00:27:07,730 --> 00:27:10,910 siempre y cuando empecemos a notar los patrones y el tipo de entradas útiles 633 00:27:10,910 --> 00:27:12,470 con las cuales podamos resolver problemas. 634 00:27:12,470 --> 00:27:14,670 Pero necesitamos empezar a formalizar el proceso. 635 00:27:14,670 --> 00:27:18,139 Debemos expresarnos menos naturalmente que como lo hicimos 636 00:27:18,139 --> 00:27:19,680 con la crema de cacahuate y la mermelada. 637 00:27:19,680 --> 00:27:22,700 Entonces, ¿cómo podríamos expresar con mayor precisión 638 00:27:22,700 --> 00:27:26,840 ese algoritmo con la agenda telefónica para el cual, sin embargo, 639 00:27:26,840 --> 00:27:28,280 tenemos una comprensión intuitiva? 640 00:27:28,280 --> 00:27:31,522 Bien, empezaré a contar desde cero, solo porque los programadores 641 00:27:31,522 --> 00:27:33,230 y los especialistas en sistemas tienden a contar desde cero, 642 00:27:33,230 --> 00:27:35,229 porque es como si todas las lámparas estuvieran apagadas. 643 00:27:35,229 --> 00:27:36,710 Así que mejor comenzamos desde allí. 644 00:27:36,710 --> 00:27:38,780 Y luego, el paso cero sería, toma la agenda telefónica. 645 00:27:38,780 --> 00:27:39,800 Es una especie de acción. 646 00:27:39,800 --> 00:27:40,670 Haz esto. 647 00:27:40,670 --> 00:27:43,220 El primer paso es, abre la agenda telefónica por la mitad. 648 00:27:43,220 --> 00:27:45,290 Eso es muy parecido a lo que hice hace un momento. 649 00:27:45,290 --> 00:27:47,080 El segundo paso es, ve los nombres, 650 00:27:47,080 --> 00:27:48,560 otra acción o verbo 651 00:27:48,560 --> 00:27:51,050 Paso tres, si Smith está entre los nombres. 652 00:27:51,050 --> 00:27:53,210 Se trata de una construcción diferente. 653 00:27:53,210 --> 00:27:55,426 Y la palabra clave aquí va a ser "if". 654 00:27:55,426 --> 00:27:57,050 Es una pregunta que nos hacemos a nosotros mismos. 655 00:27:57,050 --> 00:27:59,000 Es como una especie de encrucijada. 656 00:27:59,000 --> 00:28:03,740 Si Mike está entre los nombres, en esa página, entonces llamamos a Mike. 657 00:28:03,740 --> 00:28:06,740 Y puse una sangría deliberadamente, porque en muchos lenguajes informáticos 658 00:28:06,740 --> 00:28:09,380 la sangría significa, lógicamente, que solo debemos seguir 659 00:28:09,380 --> 00:28:13,570 el paso cuatro, si la línea tres es verdadera. 660 00:28:13,570 --> 00:28:15,620 O si la respuesta a esa pregunta es sí. 661 00:28:15,620 --> 00:28:20,840 "Else", "if", Smith aparece antes en la agenda, a la izquierda, seguimos el paso seis, 662 00:28:20,840 --> 00:28:23,030 abre la mitad de la mitad izquierda de la agenda. 663 00:28:23,030 --> 00:28:26,150 Aquí fue cuando la rompí por la mitad, la tiré lejos y luego lo repetí 664 00:28:26,150 --> 00:28:27,590 en la mitad izquierda. 665 00:28:27,590 --> 00:28:29,720 De lo contrario, si Smith, oh, perdón. 666 00:28:29,720 --> 00:28:33,140 Entonces vuelve al paso dos, un paso clave. 667 00:28:33,140 --> 00:28:35,540 Ahora que he dividido el problema por la mitad 668 00:28:35,540 --> 00:28:37,790 y estoy buscando en la mitad de la mitad izquierda, 669 00:28:37,790 --> 00:28:40,280 el problema básicamente es el mismo, tal como lo dije antes. 670 00:28:40,280 --> 00:28:42,280 Se trata de hacer lo mismo, pero con un problema más pequeño. 671 00:28:42,280 --> 00:28:45,140 Y lo bello de este algoritmo es que es recurrente, 672 00:28:45,140 --> 00:28:47,360 por así decirlo, como veremos más adelante, 673 00:28:47,360 --> 00:28:51,010 Seguimos haciendo lo mismo, y lo mismo y lo mismo, 674 00:28:51,010 --> 00:28:53,450 pero dado que el problema sigue haciéndose más pequeño, 675 00:28:53,450 --> 00:28:55,640 al final no haremos esto para siempre. 676 00:28:55,640 --> 00:28:58,050 En algún momento encontraremos la respuesta que buscamos. 677 00:28:58,050 --> 00:28:59,690 Y así volveremos al paso dos. 678 00:28:59,690 --> 00:29:03,170 Paso ocho, else, if, Smith se encuentra adelante en la agenda, a mi derecha, 679 00:29:03,170 --> 00:29:05,330 abre la mitad de la mitad derecha de la agenda 680 00:29:05,330 --> 00:29:08,600 y vuelve de nuevo al paso dos. 681 00:29:08,600 --> 00:29:11,870 Else... ¿cuál es el cuarto escenario a considerar? 682 00:29:11,870 --> 00:29:12,969 PÚBLICO: [INAUDIBLE] 683 00:29:12,969 --> 00:29:15,010 DAVID: Sí, ¿qué pasa si Mike no tiene teléfono? 684 00:29:15,010 --> 00:29:15,810 No estaría en la lista. 685 00:29:15,810 --> 00:29:19,510 Sería mejor prevenir que mi programa se bloquee o mi computadora se pasme, 686 00:29:19,510 --> 00:29:22,690 porque al parecer no sabe qué hacer si Mike no está. 687 00:29:22,690 --> 00:29:25,184 Así que pondré quit en este caso particular. 688 00:29:25,184 --> 00:29:27,100 Y ahora dejaremos esto mientras resaltamos 689 00:29:27,100 --> 00:29:29,870 en amarillo estos verbos clave o acciones importantes. 690 00:29:29,870 --> 00:29:33,700 Desde ahora llamaremos a las palabras en amarillo, funciones, 691 00:29:33,700 --> 00:29:35,450 para hablar en lenguaje de programación. 692 00:29:35,450 --> 00:29:39,009 Estas son acciones o verbos y se los mostraré, pero en inglés 693 00:29:39,009 --> 00:29:40,550 porque no hay ningún lenguaje aquí. 694 00:29:40,550 --> 00:29:43,050 No se trata de algún vocabulario formal que estemos presentando. 695 00:29:43,050 --> 00:29:45,710 Solo es mi forma más clara de expresar ese algoritmo. 696 00:29:45,710 --> 00:29:47,080 Y a eso se le llama pseudocódigo. 697 00:29:47,080 --> 00:29:49,990 Es similar a la sintaxis del inglés que cualquiera en la sala debería, 698 00:29:49,990 --> 00:29:51,850 con algo de suerte, ser capaz de entender si es 699 00:29:51,850 --> 00:29:53,810 amigable, limpia y precisa. 700 00:29:53,810 --> 00:29:56,080 Pero hay otro tipo de palabra clave aquí 701 00:29:56,080 --> 00:29:58,930 y es el if y el else, el if y el else, el if y el else. 702 00:29:58,930 --> 00:30:01,240 Son las palabras clave que los lenguajes, a menudo, 703 00:30:01,240 --> 00:30:04,360 usan para representar estas encrucijadas, ve a la izquierda, 704 00:30:04,360 --> 00:30:07,090 ve a la derecha, ve aquí, ve allá, haz diferentes cosas. 705 00:30:07,090 --> 00:30:11,230 Y cada una de estas decisiones, por así decirlo, se basa en la respuesta 706 00:30:11,230 --> 00:30:12,310 a una pregunta. 707 00:30:12,310 --> 00:30:15,460 Y llamaremos a estas preguntas expresiones Booleanas, se llaman así 708 00:30:15,460 --> 00:30:17,650 desde hace años, en honor a Bool. 709 00:30:17,650 --> 00:30:21,190 Y una expresión booleana solo es una pregunta con una respuesta, sí o no, 710 00:30:21,190 --> 00:30:24,850 o dicho más técnicamente, una respuesta de falso o verdadero. 711 00:30:24,850 --> 00:30:28,510 Noten el hecho de que todo cae en cestas con dos opciones, 712 00:30:28,510 --> 00:30:30,250 sí o no, verdadero o falso, 713 00:30:30,250 --> 00:30:32,770 y significa que podemos usar esas lámparas a nuestro favor. 714 00:30:32,770 --> 00:30:35,690 Quizás apagado sería falso, o no. 715 00:30:35,690 --> 00:30:38,290 Quizás encendido sería verdadero, o sí. 716 00:30:38,290 --> 00:30:42,100 Podemos representar con una lámpara cualquiera de las respuestas 717 00:30:42,100 --> 00:30:43,010 a estas preguntas. 718 00:30:43,010 --> 00:30:45,940 Y son expresiones booleanas. 719 00:30:45,940 --> 00:30:47,650 Por último, tenemos lo siguiente, 720 00:30:47,650 --> 00:30:50,160 vayamos al paso dos, que es quizás el más explícito. 721 00:30:50,160 --> 00:30:53,350 Porque induce a algún tipo de bucle o ciclo. 722 00:30:53,350 --> 00:30:54,860 Haz algo una y otra vez. 723 00:30:54,860 --> 00:30:58,240 Y todas estas ideas, funciones, condiciones, expresiones booleanas, bucles 724 00:30:58,240 --> 00:31:02,140 y más, estarán presentes en varios de los lenguajes que exploraremos 725 00:31:02,140 --> 00:31:04,580 a lo largo del semestre. 726 00:31:04,580 --> 00:31:07,516 Pero, por supuesto, esto en sí mismo aún no es un código real. 727 00:31:07,516 --> 00:31:09,640 Y hoy, dentro de un rato, nos sumergiremos 728 00:31:09,640 --> 00:31:12,580 en un verdadero código de programación, aunque gráficamente y con un lenguaje 729 00:31:12,580 --> 00:31:16,060 llamado Scratch, y para la próxima semana seguiremos con un lenguaje 730 00:31:16,060 --> 00:31:17,320 de programación llamado C. 731 00:31:17,320 --> 00:31:20,170 Pero antes de eso, haré un par de presentaciones. 732 00:31:20,170 --> 00:31:23,890 Detrás de CS50, sus lecciones, secciones, horas de oficina y más, 733 00:31:23,890 --> 00:31:26,680 hay todo un equipo formado por casi 100 colaboradores cada año, 734 00:31:26,680 --> 00:31:29,470 que están aquí para lograr que este curso sea satisfactorio para ustedes 735 00:31:29,470 --> 00:31:32,110 para que, independientemente de sus conocimientos previos o la falta de ellos, 736 00:31:32,110 --> 00:31:36,250 ustedes también tengan éxito, en especial si se encuentran entre los del 68%. 737 00:31:36,250 --> 00:31:40,480 Y permítanme invitar a María, Brian, Doug y Rob 738 00:31:40,480 --> 00:31:42,430 quienes les dan la bienvenida a nombre del equipo del curso. 739 00:31:42,430 --> 00:31:52,330 740 00:31:52,330 --> 00:31:54,314 DOUG LLOYD: Buenos días a todos. 741 00:31:54,314 --> 00:31:55,230 Mi nombre es Doug Lloyd. 742 00:31:55,230 --> 00:31:58,650 Soy el tutor principal y administrador del curso. 743 00:31:58,650 --> 00:32:01,422 Hace ya 12 años me senté, por así decirlo, en el mismo lugar que ustedes. 744 00:32:01,422 --> 00:32:03,630 Estaba en el Lowell Lecture Hall, justo al otro lado de la calle. 745 00:32:03,630 --> 00:32:05,430 Yo era de los menos cómodos. 746 00:32:05,430 --> 00:32:09,160 Nunca antes había programado algo en mi vida. 747 00:32:09,160 --> 00:32:09,900 Entonces tomé el CS50. 748 00:32:09,900 --> 00:32:13,410 Eso cambió por completo mi forma de pensar en la resolución de problemas. 749 00:32:13,410 --> 00:32:17,040 Poco después cambié al CS de nivel avanzado, 750 00:32:17,040 --> 00:32:19,890 y junto con David, he sido parte del equipo desde hace 11 años. 751 00:32:19,890 --> 00:32:21,562 Así que es genial estar aquí una vez más. 752 00:32:21,562 --> 00:32:22,770 Gracias a todos por estar aquí. 753 00:32:22,770 --> 00:32:28,160 754 00:32:28,160 --> 00:32:29,190 MARÍA: Hola a todos. 755 00:32:29,190 --> 00:32:29,960 Mi nombre es María. 756 00:32:29,960 --> 00:32:34,580 Estudio el último año, vivo en Cabot y este es mi cuarto año en el curso. 757 00:32:34,580 --> 00:32:38,810 Lo tomé como principiante, me la pasé genial, y este mi tercer año al frente. 758 00:32:38,810 --> 00:32:40,910 Y sin duda me ha encantado. 759 00:32:40,910 --> 00:32:41,960 El equipo es increíble. 760 00:32:41,960 --> 00:32:44,150 Trabajar con todos ha sido maravilloso y no puedo 761 00:32:44,150 --> 00:32:46,280 esperar para tener un último curso increíble con ustedes, chicos. 762 00:32:46,280 --> 00:32:50,627 763 00:32:50,627 --> 00:32:52,700 BRIAN: Hola a todos, soy Brian. 764 00:32:52,700 --> 00:32:55,010 Soy el asistente principal del curso. 765 00:32:55,010 --> 00:32:58,520 Estudio el tercer año, vivo en Winthrop y tomé el curso cuando era principiante, 766 00:32:58,520 --> 00:32:59,930 hace ya dos años. 767 00:32:59,930 --> 00:33:02,780 Estoy muy contento de que estén aquí y en verdad deseo 768 00:33:02,780 --> 00:33:04,946 que tengamos un semestre fantástico y trabajar con todos ustedes. 769 00:33:04,946 --> 00:33:08,747 770 00:33:08,747 --> 00:33:09,440 ROB: Hola, chicos. 771 00:33:09,440 --> 00:33:10,330 Soy Rob. 772 00:33:10,330 --> 00:33:13,640 Soy estudiante de cuarto año de doctorado, vivo en Thayer 773 00:33:13,640 --> 00:33:18,050 y este es mi octavo año en el curso. 774 00:33:18,050 --> 00:33:20,074 Creo que cada año el curso se pone mejor. 775 00:33:20,074 --> 00:33:22,490 Durante el verano pusimos mucho empeño en el curso, 776 00:33:22,490 --> 00:33:25,380 construimos nuevas herramientas y modificamos el temario. 777 00:33:25,380 --> 00:33:28,834 Realmente creo que ustedes, chicos, van a disfrutarlo. 778 00:33:28,834 --> 00:33:30,315 [APLAUSOS] 779 00:33:30,315 --> 00:33:31,190 DAVID: Muchas gracias. 780 00:33:31,190 --> 00:33:35,650 Nuestra tradición en CS50, es terminar la primera semana con un pastel o cupcakes. 781 00:33:35,650 --> 00:33:38,260 Así que después de la lección de hoy son bienvenidos a acompañarnos 782 00:33:38,260 --> 00:33:40,730 en el transepto, para que conozcan a las demás personas que forman el equipo. 783 00:33:40,730 --> 00:33:45,022 Pero primero, y antes de hacer la transición a uno de estos primeros 784 00:33:45,022 --> 00:33:46,730 lenguajes de programación, podríamos atenuar las luces 785 00:33:46,730 --> 00:33:50,160 y mostrar algunas imágenes, no solo de la estructura de soporte del curso, 786 00:33:50,160 --> 00:33:52,400 sino también sobre su cultura o la comunidad, lo cual es algo en lo que 787 00:33:52,400 --> 00:33:55,730 nos hemos centrado recientemente, para que los estudiantes del curso 788 00:33:55,730 --> 00:33:59,210 sientan, que no solo es una oportunidad de tener una introducción a las ciencias 789 00:33:59,210 --> 00:34:01,580 de la computación, también es una introducción a Harvard 790 00:34:01,580 --> 00:34:06,440 y, como han visto en Yale y más allá, también es una comunidad de apoyo, 791 00:34:06,440 --> 00:34:09,659 así que pueden apoyarse mutuamente para afrontar los problemas de la semana, 792 00:34:09,659 --> 00:34:13,639 así, al salir, habrán tenido una experiencia similar y compartida. 793 00:34:13,639 --> 00:34:14,934 Esta es la comunidad de CS50. 794 00:34:14,934 --> 00:34:19,231 [MÚSICA DE FONDO] 795 00:34:19,231 --> 00:35:07,633 CANTANTE: [INAUDIBLE] Stop rocking the beat. 796 00:35:07,633 --> 00:35:08,133 Come on! 797 00:35:08,133 --> 00:35:15,119 798 00:35:15,119 --> 00:35:40,451 799 00:35:40,451 --> 00:35:41,825 DAVID: Bien, entonces, 800 00:35:41,825 --> 00:35:45,950 801 00:35:45,950 --> 00:35:49,001 para ser breves, así es como se verá un código. 802 00:35:49,001 --> 00:35:51,500 Y francamente, es sumamente enigmático y lleno de 803 00:35:51,500 --> 00:35:54,050 distractores, como pueden ver, con todos esos puntos, comas, llaves, 804 00:35:54,050 --> 00:35:55,910 paréntesis y cosas similares. 805 00:35:55,910 --> 00:35:58,610 Y francamente, este tipo de distracciones sintácticas 806 00:35:58,610 --> 00:36:00,800 tienden a interponerse en el camino del aprendizaje, de lo que realmente 807 00:36:00,800 --> 00:36:04,070 es el interesante contenido intelectual de la programación y la informática, 808 00:36:04,070 --> 00:36:05,040 en términos generales. 809 00:36:05,040 --> 00:36:08,510 Así que hoy comenzaremos, antes de la transición de la próxima semana, 810 00:36:08,510 --> 00:36:11,390 con ese lenguaje Scratch, un lenguaje adorable que 811 00:36:11,390 --> 00:36:13,850 se inventó calle abajo, en MIT Media Lab, 812 00:36:13,850 --> 00:36:17,390 hace algunos años, y que increíblemente tiene todos los conceptos que vimos 813 00:36:17,390 --> 00:36:20,640 hace rato, con lo de Mike Smith, la crema de cacahuate y la mermelada, 814 00:36:20,640 --> 00:36:23,330 y aún más ideas que hoy nos permiten programar 815 00:36:23,330 --> 00:36:26,390 arrastrando y soltando las piezas de un rompecabezas, 816 00:36:26,390 --> 00:36:30,950 y que solo se entrelazan si hay un sentido lógico al hacerlo. 817 00:36:30,950 --> 00:36:34,550 Y casualmente, como habrán visto en la comunidad de CS50, 818 00:36:34,550 --> 00:36:37,430 esta semana celebramos en el Día del acertijo de CS50, 819 00:36:37,430 --> 00:36:42,980 una oportunidad, no para resolver problemas con computadoras y programas, sino para 820 00:36:42,980 --> 00:36:46,130 formar equipos, de dos, tres o cuatro, con sus colegas, al otro lado del río 821 00:36:46,130 --> 00:36:47,750 en el iLab, el Día del acertijo de CS50. 822 00:36:47,750 --> 00:36:50,090 Cuando salgan, tomen una de las invitaciones. El objetivo 823 00:36:50,090 --> 00:36:52,760 es enviar el mensaje de que las ciencias de la computación no se trata 824 00:36:52,760 --> 00:36:56,210 de programación, sino de resolución de problemas, 825 00:36:56,210 --> 00:36:59,220 y en este caso, también habrá pizza y premios. 826 00:36:59,220 --> 00:37:01,100 Entonces, esto es Scratch. 827 00:37:01,100 --> 00:37:03,680 Y lo bueno de Scratch es que por medio de este lenguaje 828 00:37:03,680 --> 00:37:07,520 podemos descomponer programas cada vez más difíciles 829 00:37:07,520 --> 00:37:09,380 en tan solo un par de piezas de rompecabezas. 830 00:37:09,380 --> 00:37:10,610 Veamos la comparación. 831 00:37:10,610 --> 00:37:12,650 Si retrocedemos un momento, tenemos 832 00:37:12,650 --> 00:37:16,430 este programa en C, un lenguaje de programación bastante viejo. 833 00:37:16,430 --> 00:37:18,510 Pero es bueno porque es bastante pequeño. 834 00:37:18,510 --> 00:37:21,961 En poco tiempo aprenderemos casi cada aspecto de este lenguaje. 835 00:37:21,961 --> 00:37:23,210 Pero, ¿qué creen que hace? 836 00:37:23,210 --> 00:37:25,043 En especial si ustedes nunca han programado 837 00:37:25,043 --> 00:37:27,770 y no reconocen algunas de las palabras que están en la pantalla, 838 00:37:27,770 --> 00:37:30,440 ¿Cuál comando operativo tal vez les parece familiar? 839 00:37:30,440 --> 00:37:31,447 ¿Qué tal prints? 840 00:37:31,447 --> 00:37:33,530 Técnicamente es print f, lo cual en realidad no 841 00:37:33,530 --> 00:37:34,821 sé qué significa en este momento. 842 00:37:34,821 --> 00:37:36,170 Pero imprimir suena familiar. 843 00:37:36,170 --> 00:37:37,130 ¿Y qué va a imprimir? 844 00:37:37,130 --> 00:37:37,910 PÚBLICO: Hello, world. 845 00:37:37,910 --> 00:37:39,243 DAVID: Tal vez hello, world. 846 00:37:39,243 --> 00:37:41,720 Cuando ejecute este programa en mi Mac o mi PC, es probable que 847 00:37:41,720 --> 00:37:43,700 simplemente imprima, hello, world. 848 00:37:43,700 --> 00:37:44,300 ¿Cómo? 849 00:37:44,300 --> 00:37:46,350 No lo sé aún, pero llegaremos ahí. 850 00:37:46,350 --> 00:37:48,930 Pero ahora, el mismo programa en este otro lenguaje, 851 00:37:48,930 --> 00:37:52,310 Scratch, se puede implementar gráficamente arrastrando y soltando dos piezas 852 00:37:52,310 --> 00:37:55,940 de las que Scratch tiene, y que pronto verán como un gato 853 00:37:55,940 --> 00:37:59,700 que dice en la pantalla hello, world, dentro de un globo de caricatura. 854 00:37:59,700 --> 00:38:03,290 Y de hecho, con Scratch podremos explorar todas estas mismas ideas, 855 00:38:03,290 --> 00:38:05,581 funciones, condiciones, expresiones booleanas, bucles, 856 00:38:05,581 --> 00:38:09,560 y muchas otras, como las que veremos de nuevo en C y posteriormente, 857 00:38:09,560 --> 00:38:13,070 durante el semestre, en Python, SQL, JavaScript 858 00:38:13,070 --> 00:38:14,040 y muchos más. 859 00:38:14,040 --> 00:38:16,230 Entonces, empezaremos a explorar de la siguiente manera. 860 00:38:16,230 --> 00:38:18,950 Voy a abrir el programa Scratch. 861 00:38:18,950 --> 00:38:21,426 Está disponible en dos formatos, una versión fuera de línea, 862 00:38:21,426 --> 00:38:24,050 la cual utilizo durante el curso para no tener problemas de wifi, 863 00:38:24,050 --> 00:38:27,410 y también está disponible una versión en línea, en scratch.mit.edu, 864 00:38:27,410 --> 00:38:31,580 que utiizarán para la primera tarea del curso, la serie de problemas cero. 865 00:38:31,580 --> 00:38:33,530 Y así es como luce la interfaz. 866 00:38:33,530 --> 00:38:37,940 La parte superior izquierda, donde está el gato, es el escenario de Scratch. 867 00:38:37,940 --> 00:38:40,530 Este es su mundo bidimensional, en el que se mueve hacia arriba, 868 00:38:40,530 --> 00:38:42,020 hacia abajo, a la izquierda o la derecha. 869 00:38:42,020 --> 00:38:45,320 En el centro hay muchas categorías de piezas de rompecabezas. 870 00:38:45,320 --> 00:38:49,520 Esta de aquí dice, muévete 10 pasos, gira 15 grados y así sucesivamente. 871 00:38:49,520 --> 00:38:53,330 Y en la parte superior hay códigos de colores para otras categorías de 872 00:38:53,330 --> 00:38:54,770 piezas que podríamos utilizar. 873 00:38:54,770 --> 00:38:57,184 Y a la derecha tenemos lo que se llama el área de scripts. 874 00:38:57,184 --> 00:38:58,350 Aquí es donde podemos programar. 875 00:38:58,350 --> 00:39:01,010 Aquí es donde se arrastran y se sueltan las piezas del rompecabezas. 876 00:39:01,010 --> 00:39:03,930 Y aquí abajo, si quiero más de un gato o algún otro personaje 877 00:39:03,930 --> 00:39:07,440 también puedo crear otros sprites o personajes. 878 00:39:07,440 --> 00:39:09,050 Entonces, en este caso, ¿qué hago para programar? 879 00:39:09,050 --> 00:39:13,550 Primero, noten que en Scratch hay una bandera verde y una señal de alto roja. 880 00:39:13,550 --> 00:39:14,900 La bandera verde significa avanzar. 881 00:39:14,900 --> 00:39:16,280 La señal de alto significa detenerse. 882 00:39:16,280 --> 00:39:20,840 Así es como inicio y detengo mi programa, justo arriba de Scratch. 883 00:39:20,840 --> 00:39:24,440 Mientras tanto, si quiero comenzar a programar, haré lo siguiente. 884 00:39:24,440 --> 00:39:27,650 Y sé donde están las cosas porque ya utilicé Scratch antes. 885 00:39:27,650 --> 00:39:31,520 Si hago clic en la categoría Events, noten esta pieza de rompecabezas, 886 00:39:31,520 --> 00:39:33,410 cuando hago clic en la bandera verde. 887 00:39:33,410 --> 00:39:36,802 Puedo arrastrar y soltar esta pieza en cualquier lugar a la derecha. 888 00:39:36,802 --> 00:39:38,510 Y mi programa no hará nada 889 00:39:38,510 --> 00:39:40,134 porque aún no he terminado de crearlo. 890 00:39:40,134 --> 00:39:43,580 Pero si ahora vamos a Looks, una categoría diferente en morado, 891 00:39:43,580 --> 00:39:45,432 podría poner algo como say 892 00:39:45,432 --> 00:39:48,140 y ahora noten que cuando las acerco lo suficiente, son algo magnéticas, 893 00:39:48,140 --> 00:39:49,200 quieren unirse. 894 00:39:49,200 --> 00:39:53,270 Entonces puedo soltarla y después escribir hello, coma, world. 895 00:39:53,270 --> 00:39:58,170 Ahora alejaré la imagen, moveré mi cursor sobre la bandera verde y daré clic. 896 00:39:58,170 --> 00:40:00,680 Y ya escribí mi primer programa. 897 00:40:00,680 --> 00:40:02,270 Ciertamente no es tan complejo. 898 00:40:02,270 --> 00:40:05,150 Todo lo que hice fue arrastrar y soltar un par de gráficos. 899 00:40:05,150 --> 00:40:08,407 Pero lógicamente, hace exactamente lo que le dije que hiciera. 900 00:40:08,407 --> 00:40:11,240 Bien, antes de que sigamos adelante, veamos cómo lucirán 901 00:40:11,240 --> 00:40:13,199 algunos de estos bloques, de modo que tengamos 902 00:40:13,199 --> 00:40:15,740 un modelo mental para todas estas categorías codificadas por colores. 903 00:40:15,740 --> 00:40:19,190 En morado podemos ver funciones, acciones o verbos como los que 904 00:40:19,190 --> 00:40:21,319 vimos en el ejemplo de la agenda telefónica. 905 00:40:21,319 --> 00:40:22,860 Aquí tenemos las condiciones. 906 00:40:22,860 --> 00:40:26,060 Son algunas piezas más, pero cuando se entrelazan se ven muy hermosas. 907 00:40:26,060 --> 00:40:28,370 Y esta es una rama o una condición. 908 00:40:28,370 --> 00:40:31,220 Y noten también que, al igual que en mi programa de texto, 909 00:40:31,220 --> 00:40:34,140 puse sangrías con la tecla de espacio o de tabulaciones. 910 00:40:34,140 --> 00:40:36,920 Esto está un poco separado debido a las envolturas amarillas 911 00:40:36,920 --> 00:40:38,300 que hay alrededor de todas las piezas. 912 00:40:38,300 --> 00:40:42,590 Entonces solo dirá que x es menor que y, si esas piezas naranjas 913 00:40:42,590 --> 00:40:46,590 x y y, a las cuales llamaremos variables, como en álgebra, guardan valores 914 00:40:46,590 --> 00:40:48,360 como uno, dos, tres o cuatro. 915 00:40:48,360 --> 00:40:50,880 En ese caso diremos que x es menor que y. 916 00:40:50,880 --> 00:40:52,779 Mientras tanto podemos anidar estas cosas. 917 00:40:52,779 --> 00:40:54,570 Así que, a pesar de que parecen tener un tamaño fijo, 918 00:40:54,570 --> 00:40:58,240 crecerán para ajustarse a otros bloques si queremos meter más en ellos. 919 00:40:58,240 --> 00:41:01,890 Entonces tendremos una encrucijada de tres vías al combinar estas ideas. 920 00:41:01,890 --> 00:41:05,820 Si x es más pequeño que y, entonces decimos que x es menor que y. 921 00:41:05,820 --> 00:41:09,960 Pero si x es más grande que y, entonces decimos que x es mayor que y. 922 00:41:09,960 --> 00:41:13,590 Además hay un tercer escenario, desde luego, donde x debe ser igual a y. 923 00:41:13,590 --> 00:41:14,910 Así es como lo programaremos. 924 00:41:14,910 --> 00:41:17,200 Solo arrastraremos y soltaremos juntas estas piezas del rompecabezas. 925 00:41:17,200 --> 00:41:20,954 Hablando en términos generales, ¿cómo se llama este bloque verde? 926 00:41:20,954 --> 00:41:21,840 PÚBLICO: [INAUDIBLE] 927 00:41:21,840 --> 00:41:23,160 DAVID: Bueno, la condición con la que técnicamente 928 00:41:23,160 --> 00:41:25,590 llamamos al amarillo que está usando este bloque verde. 929 00:41:25,590 --> 00:41:26,460 PÚBLICO: Booleano. 930 00:41:26,460 --> 00:41:28,251 DAVID: Sí, es una expresión booleana, 931 00:41:28,251 --> 00:41:31,770 y es así porque se trata de una respuesta sí o no, o verdadera o falsa. 932 00:41:31,770 --> 00:41:35,670 x es menor que y, ya sea esto verdadero o falso. 933 00:41:35,670 --> 00:41:38,130 Pero no puede ser ambas. 934 00:41:38,130 --> 00:41:40,530 Y entonces generalmente tendríamos que i es menor que 50. 935 00:41:40,530 --> 00:41:42,030 No tienen que comparar las variables. 936 00:41:42,030 --> 00:41:45,797 Al igual que en matemáticas, podemos comparar números y variables. 937 00:41:45,797 --> 00:41:47,130 Pero aquí es un concepto diferente. 938 00:41:47,130 --> 00:41:49,990 Llamaremos bucle a un ciclo que hace, en este caso, 939 00:41:49,990 --> 00:41:52,140 algo que dura para siempre, por ejemplo, decir hello, world. 940 00:41:52,140 --> 00:41:55,650 O que lo haga un número finito de veces, como decir hello, world 50 veces 941 00:41:55,650 --> 00:41:56,760 y después detenerlo. 942 00:41:56,760 --> 00:41:58,470 Así se podría establecer una variable. 943 00:41:58,470 --> 00:42:01,950 Este bloque naranja establece una variable llamada i por convención, porque i 944 00:42:01,950 --> 00:42:03,900 representa a un número entero. 945 00:42:03,900 --> 00:42:05,640 Lo establece para que sea igual a 0. 946 00:42:05,640 --> 00:42:08,400 Entonces, estas dos cosas son la demostración de una característica 947 00:42:08,400 --> 00:42:12,150 de procesamiento múltiple más poderosa que tienen Scratch y otros lenguajes. 948 00:42:12,150 --> 00:42:15,150 Es una forma elegante de decir que un programa puede escribirse de modo 949 00:42:15,150 --> 00:42:16,620 que haga dos cosas a la vez. 950 00:42:16,620 --> 00:42:17,310 ¿Cómo? 951 00:42:17,310 --> 00:42:20,430 Solo se usan dos de estas piezas para que al hacer clic en la bandera verde, 952 00:42:20,430 --> 00:42:25,144 sucedan varias cosas a la vez y soporten nuestros procesos. 953 00:42:25,144 --> 00:42:27,060 Y después hay una función incluso más elegante, 954 00:42:27,060 --> 00:42:28,699 pero relativamente fácil de usar. 955 00:42:28,699 --> 00:42:30,990 Se llama manejo de eventos, y la veremos 956 00:42:30,990 --> 00:42:33,980 cuando presentemos la programación web durante el semestre. 957 00:42:33,980 --> 00:42:36,090 Cuando recibo una transmisión. significa solo eso. 958 00:42:36,090 --> 00:42:39,210 Un sprite, un personaje como un gato, puede emitir un tipo de 959 00:42:39,210 --> 00:42:42,330 susurro a otro sprite en el programa, 960 00:42:42,330 --> 00:42:46,320 y enviarle un mensaje que pueda escuchar, o mejor dicho recibir, 961 00:42:46,320 --> 00:42:48,120 y hacer algo con base en ello. 962 00:42:48,120 --> 00:42:50,400 Entonces, en vez de que su programa haga algo 963 00:42:50,400 --> 00:42:52,320 solo cuando den clic en la bandera verde, pueden hacer 964 00:42:52,320 --> 00:42:56,040 que un sprite le hable a otro y le diga cuándo comenzar, 965 00:42:56,040 --> 00:42:57,750 o algo a lo largo de estas líneas. 966 00:42:57,750 --> 00:43:00,240 Y así, con solo estos principios, seremos 967 00:43:00,240 --> 00:43:03,390 capaces de implementar cualquier número de programas. 968 00:43:03,390 --> 00:43:04,890 Prosigamos y veamos lo siguiente. 969 00:43:04,890 --> 00:43:07,860 Haré que esto sea más interesante y no solo 970 00:43:07,860 --> 00:43:09,880 lo diré en la pantalla. 971 00:43:09,880 --> 00:43:14,391 A continuación reproduciré el sonido miau. 972 00:43:14,391 --> 00:43:16,300 [MIAU] 973 00:43:16,300 --> 00:43:18,642 Con un poco más de volumen. 974 00:43:18,642 --> 00:43:19,740 [MIAU] 975 00:43:19,740 --> 00:43:22,218 Oh, con menos volumen. 976 00:43:22,218 --> 00:43:23,670 [MIAU] 977 00:43:23,670 --> 00:43:24,670 Es adorable. 978 00:43:24,670 --> 00:43:26,587 Es un programa sencillo. 979 00:43:26,587 --> 00:43:28,170 Y si quiero que maulle tres veces, 980 00:43:28,170 --> 00:43:29,070 [MIAU] 981 00:43:29,070 --> 00:43:30,570 solo debo presionar esto tres veces. 982 00:43:30,570 --> 00:43:31,830 Pero puedo hacer algo mejor. 983 00:43:31,830 --> 00:43:33,246 No quiero volver a ejecutar el programa. 984 00:43:33,246 --> 00:43:36,320 ¿Cuál es la construcción que me permitiría maullar tres veces? 985 00:43:36,320 --> 00:43:37,545 Sí, un bucle o repetición. 986 00:43:37,545 --> 00:43:38,915 Así que iré directo a control. 987 00:43:38,915 --> 00:43:40,170 Le haré un acercamiento. 988 00:43:40,170 --> 00:43:42,300 Repeat está predeterminado 10 veces. 989 00:43:42,300 --> 00:43:44,010 Así que lo cambiaré a tres. 990 00:43:44,010 --> 00:43:46,350 Puedo arrastrar esto hacía afuera y luego ponerlo dentro. 991 00:43:46,350 --> 00:43:49,620 Observen que quiere conectarse y que crece para ajustarse. 992 00:43:49,620 --> 00:43:51,524 Y ahora puedo dejar que se conecte aquí. 993 00:43:51,524 --> 00:43:52,440 Dejen lo reproduzco de nuevo. 994 00:43:52,440 --> 00:43:56,200 [MIAU] 995 00:43:56,200 --> 00:43:57,790 Hm, ¿qué pasó allí? 996 00:43:57,790 --> 00:43:59,930 Mi primer error. 997 00:43:59,930 --> 00:44:02,050 Es sutil, pero es algo que 998 00:44:02,050 --> 00:44:05,410 hará que nos detengamos, sobre todo si lo hacemos por nuestra cuenta. 999 00:44:05,410 --> 00:44:12,310 Debí pensar más detenidamente en cuáles bloques usar. 1000 00:44:12,310 --> 00:44:16,570 La pista se encuentra en la pantalla, aunque es muy sutil. 1001 00:44:16,570 --> 00:44:19,031 Mientras acaba, aquí hay un bloque alternativo. 1002 00:44:19,031 --> 00:44:19,780 ¿Y saben qué? 1003 00:44:19,780 --> 00:44:23,546 Aún no sé por qué resultará, pero déjenme hacer lo siguiente 1004 00:44:23,546 --> 00:44:25,420 y deshacerme de esto simplemente arrastrándolo. 1005 00:44:25,420 --> 00:44:28,390 Veamos si se arregla el problema aún cuando no sepamos por qué. 1006 00:44:28,390 --> 00:44:28,890 [MIAU] 1007 00:44:28,890 --> 00:44:29,390 [MIAU] 1008 00:44:29,390 --> 00:44:30,890 [MIAU] 1009 00:44:30,890 --> 00:44:35,300 No es el sonido natural de un gato, pero se solucionó el error. 1010 00:44:35,300 --> 00:44:40,250 En retrospectiva, ¿podemos inferir por qué tenía errores 1011 00:44:40,250 --> 00:44:41,807 y en qué consistían? 1012 00:44:41,807 --> 00:44:43,390 PÚBLICO: Se reprodujo tres veces al mismo tiempo. 1013 00:44:43,390 --> 00:44:45,270 DAVID: Sí, se reprodujo tres veces al mismo tiempo. 1014 00:44:45,270 --> 00:44:47,610 En teoría no fue exactamente al mismo tiempo, pero mi Mac 1015 00:44:47,610 --> 00:44:49,230 es endiabladamente rápida, ¿cierto? 1016 00:44:49,230 --> 00:44:52,200 Con Intel inside tenemos un gigahertz en el CPU, 1017 00:44:52,200 --> 00:44:53,910 o cerebro de la computadora, o dos gigahertz. 1018 00:44:53,910 --> 00:44:58,710 Eso significa que nuestra Mac o PC puede hacer mil millones de cosas a la vez, 1019 00:44:58,710 --> 00:45:01,050 perdón, mil millones de cosas en un segundo, lo cual 1020 00:45:01,050 --> 00:45:03,490 es bastante bueno, o dos mil millones de cosas en un segundo, 1021 00:45:03,490 --> 00:45:04,615 lo cual es aún mucho mejor. 1022 00:45:04,615 --> 00:45:07,470 Entonces, no hay duda de que puede maullar tres veces y que las cosas 1023 00:45:07,470 --> 00:45:09,220 solo se tropiezan una con otra. 1024 00:45:09,220 --> 00:45:12,030 Pero si usamos el bloque que dice, reprodúcelo hasta que acabe, 1025 00:45:12,030 --> 00:45:13,530 entonces podremos escuchar los tres. 1026 00:45:13,530 --> 00:45:15,529 Y de hecho, lo podemos hacer mejor 1027 00:45:15,529 --> 00:45:17,250 porque eso no sonaba como un gato normal. 1028 00:45:17,250 --> 00:45:20,519 Puedo arrastrar este bloque, esperemos un segundo, y veamos 1029 00:45:20,519 --> 00:45:22,060 si ahora suena un poco más natural. 1030 00:45:22,060 --> 00:45:24,016 [MIAU] 1031 00:45:24,016 --> 00:45:24,994 [MIAU] 1032 00:45:24,994 --> 00:45:25,972 OK. 1033 00:45:25,972 --> 00:45:26,950 [MIAU] 1034 00:45:26,950 --> 00:45:28,720 No está mal, es totalmente adorable. 1035 00:45:28,720 --> 00:45:31,030 Pero, ¿y si ahora queremos agregar algo de movimiento? 1036 00:45:31,030 --> 00:45:32,580 Dejen elimino esto. 1037 00:45:32,580 --> 00:45:35,080 Y haré un bloque eterno, de modo que no tenga que averiguar 1038 00:45:35,080 --> 00:45:36,790 previamente cuánto durará. 1039 00:45:36,790 --> 00:45:43,381 Ahora voy a motion y pongo move 10 steps, luego hago clic sobre la bandera verde. 1040 00:45:43,381 --> 00:45:44,140 Ah, OK. 1041 00:45:44,140 --> 00:45:46,420 Afortunadamente, el MIT se dio cuenta de que esto podría salir mal. 1042 00:45:46,420 --> 00:45:49,900 Entonces nos dió suficiente acceso a su cola para tirar de él hacia atrás. 1043 00:45:49,900 --> 00:45:51,460 Pero este no es el mejor programa. 1044 00:45:51,460 --> 00:45:55,206 Probablemente sería mejor si rebotara en la orilla o reconociera 1045 00:45:55,206 --> 00:45:56,330 un detector de colisiones, ¿cierto? 1046 00:45:56,330 --> 00:45:58,750 Al parecer vivimos en un mundo donde los autos se conducen solos. 1047 00:45:58,750 --> 00:45:59,890 Sería bueno si las cosas, 1048 00:45:59,890 --> 00:46:01,890 bueno, tal vez no rebotaran unas con otras, 1049 00:46:01,890 --> 00:46:03,640 pero, en general, evitaran las cosas. 1050 00:46:03,640 --> 00:46:04,507 Así que está bien. 1051 00:46:04,507 --> 00:46:06,340 Tengo el vocabulario necesario para hacerlo. 1052 00:46:06,340 --> 00:46:07,420 Dejen hago un acercamiento. 1053 00:46:07,420 --> 00:46:11,360 ¿Cuál sería la construcción, si quiero resolver esto? 1054 00:46:11,360 --> 00:46:14,140 Algo como, si golpea el borde, que dé la vuelta. 1055 00:46:14,140 --> 00:46:15,360 Es algún tipo de if, ¿cierto? 1056 00:46:15,360 --> 00:46:20,080 Entonces, haré esto a un lado y pondré... oh, OK. 1057 00:46:20,080 --> 00:46:24,040 If... ahora debo terminar la oración, y puedo hacerlo rápido 1058 00:46:24,040 --> 00:46:24,890 por experiencia previas. 1059 00:46:24,890 --> 00:46:26,352 Así que iré a sensing 1060 00:46:26,352 --> 00:46:28,810 y luego tomaré esta expresión booleana en azul. 1061 00:46:28,810 --> 00:46:31,600 Noten que es demasiado grande, pero crecerá para ajustarse. 1062 00:46:31,600 --> 00:46:34,570 Ahora, desde este menú desplegable, puedo hacer esta pregunta. 1063 00:46:34,570 --> 00:46:40,490 If touching edge, ¿que quiero que haga? 1064 00:46:40,490 --> 00:46:42,100 Tal vez que gire así. 1065 00:46:42,100 --> 00:46:45,501 Haré que gire 180 grados y que luego regrese completamente. 1066 00:46:45,501 --> 00:46:47,000 Ahora necesito mover esto de vuelta. 1067 00:46:47,000 --> 00:46:49,916 De nuevo, parece que no entra, pero crecerá para ajustarse bien. 1068 00:46:49,916 --> 00:46:52,490 De lo contrario, avanzará 10 pasos. 1069 00:46:52,490 --> 00:46:55,500 Ahora presiono Play. 1070 00:46:55,500 --> 00:46:59,440 OK, aún tiene algunos errores, pero al menos es dinámico 1071 00:46:59,440 --> 00:47:00,850 y hará esto para siempre. 1072 00:47:00,850 --> 00:47:04,060 Ahora podemos desviarnos de este ejemplo intelectual 1073 00:47:04,060 --> 00:47:07,450 y hacer algo tonto como esto, solo para conocer sus funciones. 1074 00:47:07,450 --> 00:47:10,720 Esto es un micrófono. 1075 00:47:10,720 --> 00:47:12,621 Ese era yo grabando "esto es un micrófono". 1076 00:47:12,621 --> 00:47:13,120 Aquí vamos. 1077 00:47:13,120 --> 00:47:15,780 1078 00:47:15,780 --> 00:47:17,250 ¡Auch! 1079 00:47:17,250 --> 00:47:20,630 OK, así es como luce la palabra "auch" en forma de onda. 1080 00:47:20,630 --> 00:47:24,050 Ahora llamaremos a esto "auch". 1081 00:47:24,050 --> 00:47:26,810 Y ahora necesito sonido. 1082 00:47:26,810 --> 00:47:28,100 Ops... es en scripts. 1083 00:47:28,100 --> 00:47:32,420 Sound, play sound, auch... lógicamente. 1084 00:47:32,420 --> 00:47:36,490 Entonces, para dar una idea de lo que hará, si toca el borde, dirá "auch", 1085 00:47:36,490 --> 00:47:38,750 y dará la vuelta. 1086 00:47:38,750 --> 00:47:39,970 Auch. 1087 00:47:39,970 --> 00:47:41,260 Auch. 1088 00:47:41,260 --> 00:47:42,480 Auch. 1089 00:47:42,480 --> 00:47:44,840 Tiene una reacción un poco retrasada, pero ahora tenemos 1090 00:47:44,840 --> 00:47:46,550 una combinación de ideas diferentes. 1091 00:47:46,550 --> 00:47:49,310 Y nos movimos rápidamente más allá de dónde empezamos. 1092 00:47:49,310 --> 00:47:51,270 Todo lo que hicimos en un principio, fue decir algo, 1093 00:47:51,270 --> 00:47:52,520 entonces movimos al gato, 1094 00:47:52,520 --> 00:47:53,780 luego se movió para siempre, 1095 00:47:53,780 --> 00:47:56,662 luego se movió para siempre, a menos que tocara los bordes, y en ese caso 1096 00:47:56,662 --> 00:47:57,620 debía dar la vuelta. 1097 00:47:57,620 --> 00:48:00,290 Entonces, con la construcción de ideas muy simples podemos 1098 00:48:00,290 --> 00:48:02,447 construir programas más complicados. 1099 00:48:02,447 --> 00:48:05,030 Y vayamos al futuro por un momento, antes de separar 1100 00:48:05,030 --> 00:48:08,450 algunas de las funciones más complejas, para echar un vistazo 1101 00:48:08,450 --> 00:48:12,170 al primer programa que escribí en el posgrado 1102 00:48:12,170 --> 00:48:13,820 cuando Scratch salió a la luz. 1103 00:48:13,820 --> 00:48:17,210 Lo llamé Oscar Time porque siempre me encantó Plaza Sésamo. 1104 00:48:17,210 --> 00:48:22,280 Y el programa que hice mezcla muchas, muchas, muchas horas 1105 00:48:22,280 --> 00:48:25,544 desde que empecé a usar Scratch y muchas de estas mismas ideas. 1106 00:48:25,544 --> 00:48:27,710 Y en vez de que yo juegue, tal vez sería más divertido 1107 00:48:27,710 --> 00:48:29,390 si alguien más lo hace. 1108 00:48:29,390 --> 00:48:32,700 ¿Habrá algún voluntario valiente, tal vez allá atrás? 1109 00:48:32,700 --> 00:48:33,684 Sí, ¿cuál es tu nombre? 1110 00:48:33,684 --> 00:48:34,350 PÚBLICO: Monsi. 1111 00:48:34,350 --> 00:48:36,550 DAVID: Monsi, ven aquí Monsi. 1112 00:48:36,550 --> 00:48:38,370 Muy bien, denle gracias a Monsi. 1113 00:48:38,370 --> 00:48:40,870 [APLAUSOS] 1114 00:48:40,870 --> 00:48:44,074 1115 00:48:44,074 --> 00:48:46,240 Debes sentirte cómoda apareciendo en Internet, 1116 00:48:46,240 --> 00:48:47,320 ya que hay cámaras allá. 1117 00:48:47,320 --> 00:48:47,950 Encantado de conocerte. 1118 00:48:47,950 --> 00:48:48,670 MONSI: Encantada de conocerte también. 1119 00:48:48,670 --> 00:48:49,720 DAVID: Ven aquí. 1120 00:48:49,720 --> 00:48:53,347 Así que, notemos que en Oscar Time tenemos una gran cantidad de sprites. 1121 00:48:53,347 --> 00:48:55,430 Entonces verán que pasan muchas cosas a la vez. 1122 00:48:55,430 --> 00:48:59,380 Noten que no comencé a escribir este programa implementando el juego. 1123 00:48:59,380 --> 00:49:02,930 Solo modifiqué sus partes hasta que el resultado de muchas, muchas, 1124 00:49:02,930 --> 00:49:06,250 muchas horas después fue el juego que van ver. 1125 00:49:06,250 --> 00:49:07,750 Vamos directo a la pantalla completa. 1126 00:49:07,750 --> 00:49:10,249 En un momento verás algunas instrucciones en la pantalla 1127 00:49:10,249 --> 00:49:12,878 y podrás controlarlo con el teclado. 1128 00:49:12,878 --> 00:49:16,670 Arrastra la mayor cantidad de objetos que puedas al bote de basura. 1129 00:49:16,670 --> 00:49:18,710 OSCAR: [CANTANDO] Oh, adoro la basura. 1130 00:49:18,710 --> 00:49:22,712 Todo lo que sea sucio, inmundo o polvoso. 1131 00:49:22,712 --> 00:49:24,195 Cualquier cosa andrajosa o... 1132 00:49:24,195 --> 00:49:25,070 DAVID: Muy bien. 1133 00:49:25,070 --> 00:49:26,390 OSCAR: [CANTANDO] ...o rancia. 1134 00:49:26,390 --> 00:49:30,470 DAVID: Mientras ella juega, noten que algunos de los 1135 00:49:30,470 --> 00:49:31,940 componentes básicos son de este programa. 1136 00:49:31,940 --> 00:49:34,310 Creo que lo primero que hice cuando implementé 1137 00:49:34,310 --> 00:49:37,070 este juego, que se volverá cada vez más y más complejo, 1138 00:49:37,070 --> 00:49:39,903 fue descubrir cómo tirar un objeto a la basura, de arriba hacia abajo. 1139 00:49:39,903 --> 00:49:42,200 Y es algo parecido a lo que acabamos de hacer con el gato, 1140 00:49:42,200 --> 00:49:45,200 aunque de arriba hacia abajo, en vez de izquierda a derecha. 1141 00:49:45,200 --> 00:49:49,460 Y después pensé que podría implementarlo en parte de Oscar. 1142 00:49:49,460 --> 00:49:52,049 Pero Oscar, en cierto modo, es una simple animación. 1143 00:49:52,049 --> 00:49:53,090 No es como un video. 1144 00:49:53,090 --> 00:49:55,290 Son como tres imágenes diferentes. 1145 00:49:55,290 --> 00:49:56,940 El bote de basura está cerrado, 1146 00:49:56,940 --> 00:49:57,830 luego se abre parcialmente, 1147 00:49:57,830 --> 00:49:58,700 luego se abre completamente 1148 00:49:58,700 --> 00:49:59,790 y aparece él. 1149 00:49:59,790 --> 00:50:03,250 Solo son muchas imágenes diferentes, o disfraces, como los llama el MIT, 1150 00:50:03,250 --> 00:50:06,230 que se reproducen con medio segundo de separación para crear 1151 00:50:06,230 --> 00:50:09,410 la ilusión, como en esos viejos libritos escolares, de que algo 1152 00:50:09,410 --> 00:50:16,010 sucede en forma animada. Mientras tanto, él está contando. 1153 00:50:16,010 --> 00:50:19,897 Para eso utiliza una variable, una de las piezas naranjas que vimos antes. 1154 00:50:19,897 --> 00:50:21,230 Hay un tipo de aleatoriedad 1155 00:50:21,230 --> 00:50:23,510 que aparece en los programas, incluido Scratch, 1156 00:50:23,510 --> 00:50:26,220 que pueden usar una pseudo aleatoriedad, ciertos valores aleatorios, 1157 00:50:26,220 --> 00:50:29,120 de modo que a veces la basura cae aquí o aquí o aquí. 1158 00:50:29,120 --> 00:50:30,860 Y muchos videojuegos lo hacen, ¿cierto? 1159 00:50:30,860 --> 00:50:32,943 Muchos de los juegos que jugaban cuando eran niños 1160 00:50:32,943 --> 00:50:36,910 serían aburridos si hicieran exactamente lo mismo. 1161 00:50:36,910 --> 00:50:39,470 Queremos que la computadora o el CPU hagan cosas 1162 00:50:39,470 --> 00:50:42,028 un poco diferentes o aleatorias. 1163 00:50:42,028 --> 00:50:44,448 OSCAR: [CANTANDO] Ahora mira toda esta basura. 1164 00:50:44,448 --> 00:50:50,212 Un reloj que no sirve, un viejo teléfono y una sombrilla rota, 1165 00:50:50,212 --> 00:50:52,920 DAVID: Tengan en cuenta que la canción dura tres minutos 1166 00:50:52,920 --> 00:50:57,000 y solo hay un error en cierta parte del programa, 1167 00:50:57,000 --> 00:51:01,020 fue una auténtica pesadilla depurarlo, tenía que esperar uno o dos minutos 1168 00:51:01,020 --> 00:51:01,740 hasta que sucedía de nuevo. 1169 00:51:01,740 --> 00:51:08,205 OSCAR: [CANTANDO] Oh, adoro la basura. Todo lo que sea sucio, inmundo o polvoso. 1170 00:51:08,205 --> 00:51:09,580 DAVID: Y nunca se detiene. 1171 00:51:09,580 --> 00:51:11,550 Felicidades. 1172 00:51:11,550 --> 00:51:13,440 Gracias. 1173 00:51:13,440 --> 00:51:16,440 Déjame agradecerte con una pelotita para el estrés de CS50, 1174 00:51:16,440 --> 00:51:17,550 por lo menos. 1175 00:51:17,550 --> 00:51:18,840 Entonces esto es Oscar Time. 1176 00:51:18,840 --> 00:51:23,220 Pero lo mejor de esto, además de que es mi, mi... mi bebé, 1177 00:51:23,220 --> 00:51:26,880 es que nos da una oportunidad para pensar, cómo podemos crear 1178 00:51:26,880 --> 00:51:30,490 algo que se vea complejo y, con suerte, muy divertido al final, 1179 00:51:30,490 --> 00:51:32,310 pero distinto de las partes que lo conforman. 1180 00:51:32,310 --> 00:51:35,850 Veamos cuáles otros ingredientes tenemos. 1181 00:51:35,850 --> 00:51:40,470 Por ejemplo, déjenme mostrarles la oveja. 1182 00:51:40,470 --> 00:51:41,354 Este es un ejemplo. 1183 00:51:41,354 --> 00:51:43,770 Y como todos los que vimos hoy, se encuentra en el sitio web del curso, 1184 00:51:43,770 --> 00:51:44,310 en caso de que quieran reproducirlos. 1185 00:51:44,310 --> 00:51:46,170 En esta ocasión cambié al gato por una oveja. 1186 00:51:46,170 --> 00:51:49,790 Si presiono Play verán lo que pasa. Aquí tenemos a la oveja. 1187 00:51:49,790 --> 00:51:51,960 Ups, la oveja no cuenta nada. 1188 00:51:51,960 --> 00:51:55,980 Sigamos y probemos una versión diferente de la oveja, 1189 00:51:55,980 --> 00:51:58,160 ya que la descompuse ahorita. 1190 00:51:58,160 --> 00:52:01,160 Disculpen. 1191 00:52:01,160 --> 00:52:04,570 Aquí viene la oveja. 1192 00:52:04,570 --> 00:52:08,740 Entonces, aquí tenemos una oveja con un script muy sencillo... 1193 00:52:08,740 --> 00:52:11,590 A la que también le falta a su programa. 1194 00:52:11,590 --> 00:52:12,910 Qué vergonzoso. 1195 00:52:12,910 --> 00:52:15,914 Y aquí tenemos la versión en línea de Scratch. 1196 00:52:15,914 --> 00:52:18,580 Y dado que en todos los navegadores del mundo ahora se bloquea el flash, 1197 00:52:18,580 --> 00:52:20,710 tenemos que habilitarlo. 1198 00:52:20,710 --> 00:52:21,320 Aquí vamos. 1199 00:52:21,320 --> 00:52:26,474 Y por fin tenemos a la oveja que cuenta, lo cual es muy decepcionante, 1200 00:52:26,474 --> 00:52:28,140 ya que solo es una oveja que cuenta. 1201 00:52:28,140 --> 00:52:30,460 OK. 1202 00:52:30,460 --> 00:52:31,970 Dediqué mucho tiempo a esto, 1203 00:52:31,970 --> 00:52:33,220 así que me siento feliz de lograr que funcionara. 1204 00:52:33,220 --> 00:52:37,000 En la parte superior derecha podemos ver todos los componentes. 1205 00:52:37,000 --> 00:52:39,986 Al dar clic en la bandera verde se configura un contador, una variable, 1206 00:52:39,986 --> 00:52:41,860 lo cual es más interesante que llamarla x o y. 1207 00:52:41,860 --> 00:52:42,790 Lo llamé counter, 1208 00:52:42,790 --> 00:52:43,810 lo configuré igual a 0 1209 00:52:43,810 --> 00:52:46,720 y luego, forever le dice a counter que cambie cada segundo 1210 00:52:46,720 --> 00:52:48,910 como en el globo de la caricatura, espera un segundo 1211 00:52:48,910 --> 00:52:52,030 y entonces counter aumenta 1 simplemente agregándole 1. 1212 00:52:52,030 --> 00:52:57,610 Y al utilizar esta variable obtenemos el efecto de conteo eterno. 1213 00:52:57,610 --> 00:52:59,710 También podemos hacer otras cosas, por ejemplo, 1214 00:52:59,710 --> 00:53:02,680 hagamos una entrada un poco más dinámica, 1215 00:53:02,680 --> 00:53:05,350 con un personaje, quizás de nuevo un gato. 1216 00:53:05,350 --> 00:53:08,020 Y este programa se llama "Mima al gato" 1217 00:53:08,020 --> 00:53:13,700 Entonces, en Mima al gato ocurre lo siguiente. 1218 00:53:13,700 --> 00:53:15,780 Nada, a pesar de que presiono play. 1219 00:53:15,780 --> 00:53:16,750 Pero esperen un minuto. 1220 00:53:16,750 --> 00:53:18,439 Veamos el programa. 1221 00:53:18,439 --> 00:53:20,105 ¿Qué necesito para que este programa haga algo? 1222 00:53:20,105 --> 00:53:21,114 PÚBLICO: Acariciar al gato. 1223 00:53:21,114 --> 00:53:22,530 DAVID: Oh, acariciar al gato, ¿cierto? 1224 00:53:22,530 --> 00:53:24,660 Entonces hay un condicional if que formula la pregunta 1225 00:53:24,660 --> 00:53:26,430 si lo tocamos con el puntero del mouse. 1226 00:53:26,430 --> 00:53:28,138 Vamos a probarlo. 1227 00:53:28,138 --> 00:53:29,126 [MIAU] 1228 00:53:29,126 --> 00:53:30,608 Ah. 1229 00:53:30,608 --> 00:53:32,090 [MIAU] 1230 00:53:32,090 --> 00:53:33,150 Es bastante lindo. 1231 00:53:33,150 --> 00:53:33,650 Podemos hacer, 1232 00:53:33,650 --> 00:53:34,160 [MIAU] 1233 00:53:34,160 --> 00:53:36,980 lo opuesto, "no mimes al gato". 1234 00:53:36,980 --> 00:53:40,820 Verán que tengo un if y un else de forma predeterminada, y el gato ahora, 1235 00:53:40,820 --> 00:53:42,572 [MIAU] 1236 00:53:42,572 --> 00:53:43,450 [MIAU] 1237 00:53:43,450 --> 00:53:44,186 maulla. 1238 00:53:44,186 --> 00:53:45,180 [MIAU] 1239 00:53:45,180 --> 00:53:46,710 Pero si acariciamos a este gato, 1240 00:53:46,710 --> 00:53:48,674 [MIAU] 1241 00:53:48,674 --> 00:53:50,638 [MIAU] 1242 00:53:50,638 --> 00:53:52,120 [ROAR] 1243 00:53:52,120 --> 00:53:53,230 no acaricien a ese gato. 1244 00:53:53,230 --> 00:53:54,320 ¿Como funciona esto? 1245 00:53:54,320 --> 00:53:56,195 Bueno, solo necesitamos otra encrucijada. 1246 00:53:56,195 --> 00:53:58,420 Si acariciamos al gato, aparecerá el rugido del león. 1247 00:53:58,420 --> 00:54:01,610 De lo contrario, solamente maúlla y es mucho más lindo y pacífico. 1248 00:54:01,610 --> 00:54:02,860 Pero también podemos ir más allá. 1249 00:54:02,860 --> 00:54:05,110 Ahora abriremos los subprocesos, los cuales 1250 00:54:05,110 --> 00:54:08,230 son un ejemplo de un programa que hace varias cosas a la vez. 1251 00:54:08,230 --> 00:54:11,980 En este caso tenemos otros tipos de gato y pájaro. 1252 00:54:11,980 --> 00:54:16,720 ¿Cuál parece ser el más inteligente de los dos? 1253 00:54:16,720 --> 00:54:21,246 El gato parece saber lo que ocurre, un poco más que el pájaro, 1254 00:54:21,246 --> 00:54:24,680 un tipo de IA por así decirlo. 1255 00:54:24,680 --> 00:54:25,180 [ROAR] 1256 00:54:25,180 --> 00:54:26,890 OK, tenemos el mismo sonido allí. 1257 00:54:26,890 --> 00:54:29,837 Pero noten que ahora tenemos una interacción entre dos personajes. 1258 00:54:29,837 --> 00:54:31,420 Honestamente, el gato está haciendo trampa. 1259 00:54:31,420 --> 00:54:32,360 En realidad no se trata de IA. 1260 00:54:32,360 --> 00:54:33,790 Solo apunta hacia el pájaro. 1261 00:54:33,790 --> 00:54:37,660 Esta pieza del rompecabezas dice que siempre que se toque al pájaro, 1262 00:54:37,660 --> 00:54:38,589 se reproducirá el rugido del león. 1263 00:54:38,589 --> 00:54:39,880 Así es como termina el programa. 1264 00:54:39,880 --> 00:54:42,970 Pero en la parte inferior dice, apunta hacia el pájaro, avanza un paso, 1265 00:54:42,970 --> 00:54:45,580 apunta hacia el pájaro, avanza un paso. 1266 00:54:45,580 --> 00:54:50,890 Y entonces, ¿qué pasa si soy algo impaciente y le concedo 1267 00:54:50,890 --> 00:54:53,440 al gato algunos poderes divinos 1268 00:54:53,440 --> 00:54:54,310 [ROAR] 1269 00:54:54,310 --> 00:54:56,410 para acelerarlo y que se mueva 10 pasos a la vez. 1270 00:54:56,410 --> 00:54:57,910 Y todo eso es, otra vez, una animación. 1271 00:54:57,910 --> 00:55:00,130 En vez de moverse un punto o píxel a la vez, 1272 00:55:00,130 --> 00:55:02,410 se moverá 10, la percepción para nosotros los humanos 1273 00:55:02,410 --> 00:55:04,600 es que se mueve mucho más rápido. 1274 00:55:04,600 --> 00:55:06,589 Por supuesto, podemos darle una ventaja al pájaro. 1275 00:55:06,589 --> 00:55:08,880 Aparentemente se mueve tres pasos a la vez. 1276 00:55:08,880 --> 00:55:09,755 Vamos a aumentarlo hasta 30. 1277 00:55:09,755 --> 00:55:12,950 1278 00:55:12,950 --> 00:55:13,450 [ROAR] 1279 00:55:13,450 --> 00:55:15,340 Eso tampoco funcionó muy bien. 1280 00:55:15,340 --> 00:55:17,710 Pero en este caso, los dos sprites están interactuando 1281 00:55:17,710 --> 00:55:21,670 porque uno de ellos comprueba si toca al otro o no. 1282 00:55:21,670 --> 00:55:22,990 Mientras tanto, podemos hacer lo siguiente. 1283 00:55:22,990 --> 00:55:25,750 Dejen les presento Events, que también es otro programa. 1284 00:55:25,750 --> 00:55:29,290 No es muy largo, pero tiene dos sprites, dos pequeñas marionetas. 1285 00:55:29,290 --> 00:55:34,510 Si presiono reproducir, no pasa nada, hasta que presiono la tecla de espacio. 1286 00:55:34,510 --> 00:55:37,990 Cuando se aplica a este juego, uno dice Marco y el otro 1287 00:55:37,990 --> 00:55:39,090 dice Polo. 1288 00:55:39,090 --> 00:55:42,520 Pero uno dice Polo como respuesta al otro que dice Marco. 1289 00:55:42,520 --> 00:55:45,770 Si abro el sprite de la marioneta naranja, veremos esto. 1290 00:55:45,770 --> 00:55:47,200 Siempre hará lo siguiente. 1291 00:55:47,200 --> 00:55:50,320 "If key space pressed, then", si presionamos la tecla de espacio, 1292 00:55:50,320 --> 00:55:53,230 dirá Marco por dos segundos y entonces transmite un evento. 1293 00:55:53,230 --> 00:55:55,770 Y un evento para nuestros propósitos de hoy, es como un susurro. 1294 00:55:55,770 --> 00:55:59,470 Susurra algo que solo otros sprites pueden escuchar, no los humanos. 1295 00:55:59,470 --> 00:56:03,010 Por otra parte, si miro en la marioneta azul, no hay mucho allí. 1296 00:56:03,010 --> 00:56:06,580 Cuando recibas ese evento, ese susurro, di Polo. 1297 00:56:06,580 --> 00:56:08,950 Y así tenemos una interacción entre estos dos sprites, 1298 00:56:08,950 --> 00:56:12,910 al igual que la respuesta de Oscar cuando arrastrábamos y soltábamos 1299 00:56:12,910 --> 00:56:14,920 basura en su bote. 1300 00:56:14,920 --> 00:56:17,656 Para terminar, tenemos este aquí, hi, hi, hi, 1301 00:56:17,656 --> 00:56:21,040 que también combina algunas de estas ideas y nos permite 1302 00:56:21,040 --> 00:56:21,820 [SONIDO DE FOCA] 1303 00:56:21,820 --> 00:56:23,710 implementar una idea conocida 1304 00:56:23,710 --> 00:56:24,293 [SONIDO DE FOCA] 1305 00:56:24,293 --> 00:56:26,770 de un videojuego en el teléfono o la computadora. 1306 00:56:26,770 --> 00:56:27,360 [SONIDO DE FOCA] 1307 00:56:27,360 --> 00:56:29,755 Este sonido perpetuo, como de ladridos, es muy molesto 1308 00:56:29,755 --> 00:56:30,430 [SONIDO DE FOCA] 1309 00:56:30,430 --> 00:56:32,920 hasta que descubrimos cómo funciona. 1310 00:56:32,920 --> 00:56:35,717 ¿Qué hago para detenerlo? 1311 00:56:35,717 --> 00:56:36,300 [SONIDO DE FOCA] 1312 00:56:36,300 --> 00:56:38,427 Si miran el código en la parte superior derecha, 1313 00:56:38,427 --> 00:56:39,010 [SONIDO DE FOCA] 1314 00:56:39,010 --> 00:56:43,580 menciona a la tecla de espacio... y se detuvo. 1315 00:56:43,580 --> 00:56:44,250 ¿Por qué? 1316 00:56:44,250 --> 00:56:48,964 ¿Qué parece hacer cuando presionamos la tecla de espacio? 1317 00:56:48,964 --> 00:56:51,930 1318 00:56:51,930 --> 00:56:53,590 Está en este programa de la izquierda. 1319 00:56:53,590 --> 00:56:56,070 Si presiono la tecla de espacio, ¿qué estoy haciendo? 1320 00:56:56,070 --> 00:56:59,320 If... sí, if muted, y parece una variable porque es un bloque naranja. 1321 00:56:59,320 --> 00:57:02,740 If muted = 0, set muted to 1. 1322 00:57:02,740 --> 00:57:04,150 Else set muted to 0. 1323 00:57:04,150 --> 00:57:05,180 ¿Qué significa eso? 1324 00:57:05,180 --> 00:57:08,200 Bueno, es como la programación equivalente de esto. 1325 00:57:08,200 --> 00:57:11,530 Si la lámpara está apagada, enciéndela. 1326 00:57:11,530 --> 00:57:13,820 Sino, apágala. 1327 00:57:13,820 --> 00:57:16,870 Entonces, es solo una forma de cambiar el estado o la respuesta 1328 00:57:16,870 --> 00:57:19,220 de falso a verdadero o de verdadero a falso. 1329 00:57:19,220 --> 00:57:23,710 Y uso esta información para decidir a la derecha, if muted = 0. 1330 00:57:23,710 --> 00:57:25,780 Entonces cero significa apagado o falso. 1331 00:57:25,780 --> 00:57:29,980 Entonces, si no es muted, if muted = 0, significa que no es muted, 1332 00:57:29,980 --> 00:57:31,090 y se reproduce el sonido de foca. 1333 00:57:31,090 --> 00:57:34,127 Y así es como el programa se detiene hasta que lo revierto, 1334 00:57:34,127 --> 00:57:34,710 [SONIDO DE FOCA] 1335 00:57:34,710 --> 00:57:36,190 presionando esto. 1336 00:57:36,190 --> 00:57:39,460 Ahora, tenemos todas estas piezas, o si lo prefieren, estos ingredientes, 1337 00:57:39,460 --> 00:57:40,043 [SONIDO DE FOCA] 1338 00:57:40,043 --> 00:57:42,700 y todas las habilidades que nos permiten conjuntar estas ideas. 1339 00:57:42,700 --> 00:57:45,539 Y básicamente también podemos hacer cosas bastante asombrosas. 1340 00:57:45,539 --> 00:57:47,830 De hecho, con la intención de reunir a nuestros dos campus, 1341 00:57:47,830 --> 00:57:50,770 el de aquí y el de New Haven, pensamos 1342 00:57:50,770 --> 00:57:53,020 que sería agradable concluir con un último juego, para el cual 1343 00:57:53,020 --> 00:57:56,977 necesitamos otro voluntario para que juegue el Hardest Game, de Yvy. 1344 00:57:56,977 --> 00:57:59,560 Vamos a invitarte a subir, porque la vez pasada también levantaste la mano. 1345 00:57:59,560 --> 00:57:59,980 ¿Cómo te llamas? 1346 00:57:59,980 --> 00:58:00,650 LUKE: Luke. 1347 00:58:00,650 --> 00:58:02,780 DAVID: Luke, ven aquí. 1348 00:58:02,780 --> 00:58:06,320 Aquí viene Luke para jugar el Hardest Game, de Yvy. 1349 00:58:06,320 --> 00:58:10,900 Fue escrito por uno de sus predecesores en CS50, un ex alumno. 1350 00:58:10,900 --> 00:58:15,400 En un momento verás las instrucciones en la pantalla. 1351 00:58:15,400 --> 00:58:16,689 Aquí vamos, pantalla completa. 1352 00:58:16,689 --> 00:58:18,730 Yo lo iniciaré para ti y tú 1353 00:58:18,730 --> 00:58:20,620 utilizarás las teclas de dirección para jugarlo. 1354 00:58:20,620 --> 00:58:21,953 Aquí vamos Luke. 1355 00:58:21,953 --> 00:58:23,654 [MÚSICA DE FONDO] 1356 00:58:23,654 --> 00:58:25,404 [CANCIÓN DE MC HAMMER, "CAN'T TOUCH THIS"] 1357 00:58:25,404 --> 00:58:28,855 MC HAMMER: Can't touch this. 1358 00:58:28,855 --> 00:58:31,874 Can't touch this. 1359 00:58:31,874 --> 00:58:32,790 DAVID: [INAUDIBLE] 1360 00:58:32,790 --> 00:58:34,550 MC HAMMER: Can't touch this. 1361 00:58:34,550 --> 00:58:35,960 DAVID: Muy bien. 1362 00:58:35,960 --> 00:58:36,480 Ah, tú puedes. 1363 00:58:36,480 --> 00:58:38,672 Está bien. 1364 00:58:38,672 --> 00:58:42,158 MC HAMMER: My, my, my music hits me so hard, 1365 00:58:42,158 --> 00:58:44,150 makes me say oh my Lord. 1366 00:58:44,150 --> 00:58:45,660 Thank you for blessing me. 1367 00:58:45,660 --> 00:58:46,570 DAVID: Muy bien. 1368 00:58:46,570 --> 00:58:48,440 Vean las dos variables de arriba. 1369 00:58:48,440 --> 00:58:50,065 Está en el nivel tres y tiene cero muertes. 1370 00:58:50,065 --> 00:58:53,300 1371 00:58:53,300 --> 00:58:57,110 Mientras tanto hay varios sprites en la pantalla. 1372 00:58:57,110 --> 00:58:59,210 Hay tres de Yale. 1373 00:58:59,210 --> 00:59:01,930 Son como el gato, chocan con los bordes. 1374 00:59:01,930 --> 00:59:08,391 1375 00:59:08,391 --> 00:59:10,880 Muy b... ¡oh! 1376 00:59:10,880 --> 00:59:13,130 Sigue, sigue. 1377 00:59:13,130 --> 00:59:15,170 Ahora hay una muerte. 1378 00:59:15,170 --> 00:59:17,841 Ahora hay dos muertes. 1379 00:59:17,841 --> 00:59:18,340 Eh... infinitas. 1380 00:59:18,340 --> 00:59:21,450 Está bien. 1381 00:59:21,450 --> 00:59:23,060 Excelente. 1382 00:59:23,060 --> 00:59:24,060 Nivel seis. 1383 00:59:24,060 --> 00:59:29,479 1384 00:59:29,479 --> 00:59:29,978 Muy bien. 1385 00:59:29,978 --> 00:59:41,720 1386 00:59:41,720 --> 00:59:46,510 Claramente hay un if cerca de Harvard, aléjate. 1387 00:59:46,510 --> 00:59:47,010 Bien. 1388 00:59:47,010 --> 00:59:59,442 1389 00:59:59,442 --> 01:00:00,400 Vamos, puedes hacerlo. 1390 01:00:00,400 --> 01:00:05,690 1391 01:00:05,690 --> 01:00:06,950 Penúltimo nivel. 1392 01:00:06,950 --> 01:00:12,640 1393 01:00:12,640 --> 01:00:15,170 Ya van siete muertes. 1394 01:00:15,170 --> 01:00:16,900 Excelente. 1395 01:00:16,900 --> 01:00:17,886 ¡Último nivel! 1396 01:00:17,886 --> 01:00:33,169 1397 01:00:33,169 --> 01:00:36,710 Solo un par de intentos más. 1398 01:00:36,710 --> 01:00:37,210 Excelente. 1399 01:00:37,210 --> 01:00:41,162 1400 01:00:41,162 --> 01:00:42,644 Un intento más. 1401 01:00:42,644 --> 01:00:57,958 1402 01:00:57,958 --> 01:01:00,030 Voy a concluir con una nota. 1403 01:01:00,030 --> 01:01:00,700 Esto es CS50. 1404 01:01:00,700 --> 01:01:02,740 El pastel con el equipo ya está listo. 1405 01:01:02,740 --> 01:01:04,990 Nos vemos la próxima semana!