DAVID J. MALAN: Hola, mundo, me llamo David Malan, y esto es CS50.
[CONVERSACIÓN APARTE]
[MÚSICA]
Hola, yo estudié la informática en la universidad.
Estudié el español en la escuela secundaria.
Entonces no puedo hablar el español muy bien,
pero yo voy a tratar de hablarlo hoy con la ayuda de Christian y otros aquí.
Estamos muy contentos de estar aquí.
Estoy aquí con Christian y Scully y Ramón y Colton y Erin,
mis amigos de Cambridge que producen CS50.
Y pensaba que la mejor cosa que podemos hacer hoy es un examen sorpresa.
Ustedes han estudiado CS50 por unas semanas ahora,
y entonces pienso que es una oportunidad hoy para discutir algunas de las ideas
de CS50.
Por ejemplo-- por ejemplo, semana 0.
En semana 0 discutimos decimal--
0, 1, 2, 3 y más.
Y esta es el sistema que nosotros humanos usamos en el mundo real.
Pero las computadoras, por supuesto, solamente usan el binario con 0 y con
1.
Entonces tenemos una oportunidad para discutir que--
por ejemplo, qué es--
es un poco fácil--
qué es este número en binario.
OK, 0, claro.
Y tal vez esto, 1.
Y tal vez esto.
AUDIENCIA: 3.
DAVID J. MALAN: 3, y tal vez-- oh.
AUDIENCIA: Oh.
DAVID J. MALAN: 11, 11 porque 1, 2, 4, y ¿qué es esto?
8, claro, entonces esto es 8 plus 2 plus 1, y entonces 11.
Y cómo-- how about this.
Mi español no es perfecto.
¿Qué es esto?
Más alto.
AUDIENCIA: 55.
DAVID J. MALAN: Sí, por supuesto, porque hay 8 bits con que se puede representar
256 números en total, pero lo más bajo es 0.
Entonces discutimos esto, ¿cómo se escribe?
Un voluntario, tal vez, un voluntario.
¿Quién quiere hacerlo en la cámara también?
¿Quién quiere decirme lo que es 50 en binario?
¿Sí?
OK, ¿cómo te llamas?
AUDIENCIA: Hugo.
DAVID J. MALAN: OK, [INGLÉS] con la pluma.
¿Quieres ir aquí?
AUDIENCIA: Pasa adelante.
DAVID J. MALAN: OK, la 50 es que--
podemos ayudar con 1, 2, 4, 8, 16, 32, 64, 128.
Queremos 50.
Sí.
32, 16, 4.
¿Es correcto?
Es correcto.
Sí, muy bien hecho.
Y tenemos de Cambridge un stress ball.
No sé como se dice aquí, pero un stress ball de CS50.
Un aplauso, por favor.
[APLAUSO]
Gracias.
Con Christian está bien.
OK, pero no podemos representar solamente los números en decimal.
También podemos usar números en otra manera, como hexadecimal.
¿Y por qué es útil el hexadecimal? ¿Cuándo se usa?
Sí.
AUDIENCIA: Memoria.
DAVID J. MALAN: Memoria.
¿Por qué?
¿Cómo?
Sí, con la memoria para representar los-- ¿cómo se dice address?
AUDIENCIA: Direcciones.
DAVID J. MALAN: Direcciones.
Direcciones en la memoria solamente es una convención de los humanos.
No es muy importante.
Que Podemos usar decimals o binario, pero es más fácil usar el hexadecimal.
Pero también ustedes, cuando empiezan a aprender a web programming,
tendrán una oportunidad a usar hexadecimal también con los colores,
por ejemplo, con el web design.
Por ejemplo, aquí es un text editor.
Se llama Atom.
Y esto, no, esto no es Atom.
Un minuto.
Esto es Atom.
Y aquí es un ejemplo de una lengua-- se llama HTML--
que no es un programming language, pero es un mark up language,
una oportunidad decir a un web browser cómo presentar información.
Por ejemplo, aquí tenemos open bracket doc type HTML.
Es un poco negro aquí, pero está bien en un minuto.
HTML, close HTML, head.
Hola, mundo.
Y aquí tenemos el body de la page, y aquí podemos hacer esto.
Un minuto.
Solamente yo puedo ver esto.
Y ahora esto es mi primer webpage.
No es interesante.
Solamente dice en el tab, hola, mundo.
Pero no hay palabras aquí.
Entonces si uso el Atom otra vez y hago algo como esto- hola,
mundo aquí también, ahora puedo hacer esto y reload,
y entonces tenemos un webpage con las palabras,
pero no tenemos los colores ya, pero con hexadecimal, por ejemplo,
podremos hacer esto.
Aquí puedo escribir style, y aquí style, y aquí HTML coma body.
Y en here puedo decir height 100% pars que sea más alto,
y aquí background color--
tal vez red.
And I save y reload.
OK, es muy feo todavía.
Pero ahora es rojo.
Pero usé la palabra red.
No es muy interesante.
Pero también puedo hacer esto, #ff0000save, y entonces reload,
y todavía es rojo.
¿Por qué?
ff0000 no es una palabra, ¿pero por qué representa el rojo?
¿Sí?
AUDIENCIA: ¿Una representación del código de RGB?
DAVID J. MALAN: Sí, RGN, como esto.
RGB es rojo.
¿Cómo se dice-- verde, g en inglés, y b, pero blue, azul, en inglés.
Y entonces ff significa mucho de rojo, y 0000 significa ningún green ni ningún
blue.
¿Qué dice?
AUDIENCIA: Azul.
DAVID J. MALAN: Azul.
Lo siento.
Azul, lo siento.
No es azul.
Entonces el color es totalmente rojo como esto.
Pero quién-- si queremos como esto, ¿qué es esto?
AUDIENCIA: Azul.
DAVID J. MALAN: OK, claro.
OK, es un poco fácil.
Pero al fin del día, estar maneras solamente son para representar la
información.
No es una idea muy interesante.
Más interesante son algunos como estos.
Aquí es un ASCII chart.
¿Qué significa estos número?
Significa que si quiere decir e o a, use 65 para representar esa letra.
Entonces tenemos una oportunidad otra vez.
Esta vez no un voluntario, pero puedo tener 8 voluntarios, por favor.
¿Tal vez?
Usted, sí.
¿Ustedes vienen aquí?
Sí.
¿Y unos amigos?
Necesitamos 8 totalmente.
Sí, claro.
Aquí, aquí.
1, 2, 3, 4, 5, 6, sí claro, 7, 8.
Perfecto.
Porque no puedo contar más que 8.
OK, [INGLÉS], está bien.
Y entonces en una línea aquí, por favor.
OK.
¿Y cómo te llamas?
AUDIENCIA: Jervi.
DAVID J. MALAN: Jervi, David, nice to meet you. ¿Y tú?
AUDIENCIA: Gabriela.
DAVID J. MALAN: Nice to meet you.
AUDIENCIA: Leslie.
DAVID J. MALAN: Mucho gusto.
AUDIENCIA: Christian.
DAVID J. MALAN: Mucho gusto.
AUDIENCIA: Leo.
DAVID J. MALAN: Mucho gusto.
David.
[HABLANDO INGLÉS]
Aquí, por favor.
Y entonces tenemos un byte de bits.
Por ejemplo, tenemos aquí 1 y 2 y 4 y 8 y más.
Y entonces ustedes pueden usar sus manos para representar el 1,
pero no usen sus manos para representar un 0.
So 0 es como esto, 1 es como esto.
Entonces ¿qué vamos a a escribir con estas manos aquí?
Un minuto, por favor.
You're gonna be 1 and 1, y toda la gente otra 0s.
OK, por favor, si eres un uno usa la mano, por favor.
¿Qué número es esto?
AUDIENCIA: 65.
DAVID J. MALAN: 65, sí [INGLÉS] 65, sí, es el primer número.
OK, gracias, y abajo.
Y entonces 1 otra vez y 1 esta vez.
OK, por favor, las manos.
¿Qué es este número?
¿80?
Bien.
80.
Entonces el tercero, por favor, 1 otra vez, 1, 1.
Por favor, las manos.
¿Qué es esto?
AUDIENCIA: 76.
DAVID J. MALAN: Sí, 76.
Entonces unos más, es una palabra no corto.
Entonces tenemos 1 otra vez.
No, no, no.
Sí, otra vez 1 y 1.
Las manos, por favor.
65, sí, otra vez 65.
OK.
Ahora 1 otra vez.
1, 1, 1.
Por favor, ¿qué es esto?
AUDIENCIA: 85
DAVID J. MALAN: ¿85?
85, all right.
Casi estamos listos.
Y entonces, por supuesto, 1, 1, 1, 1.
¿Qué es esto?
AUDIENCIA: 83.
DAVID J. MALAN: ¿83?
Sí, 83.
Y finalmente tenemos una letra más.
Y lo siento, 1, 1, 1, 1, 1. ¿Qué es esto, por favor?
AUDIENCIA: 79
DAVID J. MALAN: 79, sí.
Y entonces tenemos 65, 80, y 66 y 65, 85, 83 y 79.
Y en ASCII, ¿qué es esta palabra, por favor?
AUDIENCIA: [INAUDIBLE].
DAVID J. MALAN: Oh, muy bien.
Perfecto.
Muchas gracias, muchas gracias.
Tenemos algo para ustedes aquí, OK, gracias.
OK.
Y tenemos unos stress balls aquí.
Gracias, gracias, gracias, gracias, gracias.
No, sorry.
Y tenemos DDB50 [INGLÉS], no se como se dice en español.
Muchas gracias a todos.
AUDIENCIA: Pato.
DAVID J. MALAN: Pato.
Pato 50.
Gracias.
Entonces esta es una discusión de información ahora,
pero también en la informática son, por supuesto-- hay, por supuesto,
algoritmos también.
So acabamos de hablar de entrada y salida con binario y decimals y
hexadecimals.
Pero también, y lo más importante, es lo que ya está adentro de la caja,
la caja negra, aquí, algoritmos.
Estos son las ideas con quiénes solve problems, resolver problemas.
Por ejemplo, tenemos aquí este libro aquí.
Es un poco viejo, pero dentro de esto hay muchos nombres y muchos números.
Y es la misma cosa como esto porque en sus teléfonos hay contacts,
y también allí hay muchos nombres y números en alphabetical order,
de A a Z.
El problema todavía es lo mismo, solamente es digital ahora.
Pero aquí en el libro tal vez quiero buscar mi amigo Miguel Smith.
¿Puedo encontrar a Miguel como esto?
¿está Miguel aquí?
¿Está Miguel aquí?
¿Está Miguel aquí? ¿Es correcto?
AUDIENCIA: Sí, sí.
DAVID J. MALAN: ¿Es?
OK, sí, pero no. ¿Sí?
Es correcto porque si Miguel está dentro, voy a encontrarlo,
pero no es muy inteligente. ¿Por qué?
AUDIENCIA: Habla más lento.
DAVID J. MALAN: Sí, muy despacio porque si el libro tiene como 1,000 páginas,
es muy despacio encontrar a Miguel.
Entonces puedo 2, 4, 6, 8, 10, y más.
Es más rápido cuando se puede hablar español, pero no es correcto 2, 4, 6,
8, 10. ¿Por qué? ¿Por qué no es correcto?
AUDIENCIA: Porque puede ser que el nombre Miguel esté entra las páginas.
DAVID J. MALAN: Sí, exactamente.
Tal vez Miguel está dentro de estas páginas,
y es posible que yo no veo a Mike.
¿Cómo se repara este problema?
AUDIENCIA: [INAUDIBLE]
DAVID J. MALAN: Splitting, claro.
Pero es una manera más fácil para reparar ahora. ¿Qué?
AUDIENCIA: Buscando directamente la n.
DAVID J. MALAN: Sí, claro.
Sí entiendo, si encuentro a un amigo con un nombre t en vez de s,
puede buscar a Miguel una página pasado tal vez, para reparar ese algoritmo.
Pero más inteligente, y lo más inteligente tal vez, es empezar aquí.
Y busco a Miguel en el medio.
Pero, por supuesto, son los m's aquí.
So ¿qué puedo hacer?
AUDIENCIA: [INAUDIBLE]
DAVID J. MALAN: Sí, aquí puedo tear the problem in half.
No sé cómo se dice esto.
Pero ahora yo sé que Miguel está aquí.
No está aquí.
Entonces no necesito esa media nunca más.
Y ahora Miguel todavía está aquí, y el algoritmo todavía es lo mismo.
Puedo buscar a Miguel al medio del libro.
Y ahora tal vez veo un amigo con un nombre t.
Entonces puedo hacerlo otra vez.
Y entonces puedo hacerlo otra vez, otra vez, otra vez,
hasta que solamente hay una página con Miguel Smith.
¿Por qué es esto interesante?
No es muy difícil.
Indeed, estos humanos más o menos vamos a hacer eso a otro ritmo, no 1, 2, 3.
Pero podemos ver cuánto mejor el tercer algoritmo es que los otros.
O tal vez este es un graph o chart, y aquí es el tiempo para el algoritmo,
y aquí es el tamaño del problema.
¿Cuántas páginas tiene el libro?
Y esta línea representa cuáles de esos algoritmos.
Primero, por qué, si hay una página más en el libro, necesito un segundo más,
o una operación más para encontrar a Miguel.
Y el segundo algoritmo parece como esto, n over 2 porque es twice es fast,
es más rápido.
Pero es lo mismo fundamentally porque no es muy diferente del primero.
Pero el tercero es mucho más inteligente, y es un different shape,
como esto en verde.
Y es un logaritmo de n.
Y significa que si en el año próximo si hay muchos muchas más páginas en el
libro, yo todavía puedo encontrar a Miguel Smith con cuantas más
apariciones, si hay twice as many, dos veces más en el libro,
en el año próximo.
Solamente necesito uno porque necesito hacer esto una vez más.
Y estos son los [? ideas ?] en CS50 y en las introducciones de computer science
que son muy importantes.
Porque cuando los problemas son más difíciles,
los [? ideas ?] con qué podemos resolver los problemas todavía son los mismos.
Y ahora pienso que hoy es una oportunidad para yo seguir las
instrucciones de ustedes, pero para esta demonstración y esta examen sorpresa,
necesito dos nuevos amigos de aquí.
Por favor, uno y otro, otro.
Otro.
Un amigo más.
OK, vale.
Porque-- ven aquí.
Sí, ¿cómo se llama?
AUDIENCIA: Diego
DAVID J. MALAN: Diego, David.
Y usted puede sentarse aquí si quieres.
Y necesito la ayuda de Christian para esto. ¿Y cómo te llamas?
AUDIENCIA: Lewin.
DAVID J. MALAN: Lewin.
David.
Por favor, aquí.
Y Sylvio, sí tienen--
Carlos, muchas gracias, sí, claro.
Tenemos una oportunidad de hacer un sándwich.
En los Estados Unidos, toda la gente come los peanut butter and jelly
sándwiches.
Y es una oportunidad ahora para nosotros pretender que somos computadores y
ustedes son los programadores.
Entonces, Christian, ayúdame con esto.
Pero tenemos el pan.
Tenemos-- ¿cómo se dice esto?
AUDIENCIA: Cuchillos.
DAVID J. MALAN: Tenemos cuchillos.
Tenemos-- ¿qué es esto?
Peanut butter.
Sí.
Yo sé.
AUDIENCIA: Mantequilla de maíz.
DAVID J. MALAN: ¿Mantequilla de maíz?
AUDIENCIA: Maní.
DAVID J. MALAN: ¿Y esto?
AUDIENCIA: Jalea de guayaba.
DAVID J. MALAN: OK.
Bien.
Nosotros vamos a preparar un sandwich de peanut, butter, and jelly,
pero ustedes y yo no podemos hacer nada que la gente aquí no nos han dicho.
Por favor, la primera instrucción.
Sí, aquí.
AUDIENCIA: Abrir la bolsa del pan.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Está bien.
OK, es importante con las computadoras y la programación ser muy preciso.
Por favor, otra vez.
Dos.
¿Sí?
AUDIENCIA: Tomar una rebanada de pan con la mano derecha.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Bien.
OK.
Vale, 3.
AUDIENCIA: La unidad del pan ubicarla en el plato.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: OK, 4.
Sí.
AUDIENCIA: Abrir el plato de los ingredientes.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: ¿Cómo esto?
OK.
Otro.
Aquí.
Sí, claro.
AUDIENCIA: Agarrar el cuchillo.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: OK, gracias.
Próximo, sí.
AUDIENCIA: Quitarse el celo al vaso.
CHRISTIAN: [HABLANDO INGLÉS]
AUDIENCIA: Gracias.
DAVID J. MALAN: OK.
Muy bien hecho.
Otro, por favor.
Aquí primero.
AUDIENCIA: Con cuidado, tomar el cuchillo en forma correcta,
untarle la mantequilla de maní.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: ¿Sí?
¿Aquí?
Sí.
AUDIENCIA: Sacar el cuchillo--
este, usar el cuchillo para agarrar mantequilla de maní y untarla al pan.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Después de usted.
Bien.
Sí.
Otro.
¿Quién es próximo?
Sí.
AUDIENCIA: Quitar el exceso de mantequilla de maní y dejar 30 gramos
aproximadamente.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: ¿Y ahora?
Muy bien.
Sí.
¿Qué dices?
AUDIENCIA: Ponerlo de vuelta en el empaque.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Tenemos sándwiches más tarde.
Otro.
¿Quién es próximo?
Casi estamos allí.
AUDIENCIA: Limpiarte la mano.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Gracias.
OK, próximo.
AUDIENCIA: Untarle la jalea al pan con el cuchillo.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: No estamos aprendiendo, pero está bien.
Bien, bien, OK.
Entonces otra vez, OK.
OK.
Próximo.
Sí.
AUDIENCIA: Coloca una rebanada de pan con una mano encima de la otra rebanada
de pan.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Parece muy bien.
OK, un aplauso para estos amigos.
[APLAUSO]
Muchas gracias.
Un momento para mí.
Y tenemos para estos amigos con CS50 y con CS50.
Muchas gracias.
[APLAUSO]
OK.
Muchas gracias a todos los voluntarios.
Tenemos unos minutos ahora para preguntas o ideas porque estamos aquí
para ayudar a toda la gente de aquí y en otras universidades aprender la
informática, y queremos aprender lo que nosotros podemos hacer para mejorar la
experiencia en CS50 aquí, para ayudar a los teaching fellows y a los profesores
aquí.
Queremos responder algunas preguntas que tienen ustedes, si tienen.
¿Sí? ¿No?
¿Hay algo?
¿Algo?
Sí, por favor.
AUDIENCIA: Qué es lo más difícil para poder resolver un algoritmo,
para poder crear una idea, plantearla?
Obviamente, tiene que haber un input y un output.
Entonces la parte más difícil entre el input y el output es el algoritmo.
Entonces ¿cuál es el punto de partida para poder-- o sea,
una recomendación para poder resolver cualquier problema?
DAVID J. MALAN: OK, necesito la ayuda de Christian aquí.
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Es una buena idea.
Depende.
¿Tienes un problema en la--
está bien si no.
AUDIENCIA: OK, está bien.
AUDIENCIA: [HABLANDO INGLÉS]
DAVID J. MALAN: Es muy importante, yo creo,
para descubrir problemas que son interesantes a usted, es muy--
no es fácil, no es interesante aprender un subject como la informática si no te
importa.
Por ejemplo, cuando yo quería aprender el computer hardware desde hace muchos
años, no necesitamos un server en nuestra casa.
Pero fue muy estresante para mí tener un computer server para [INGLÉS].
Al tiempo, fue hardware que podría comprar del negocio.
Pero fue más interesante a mí para aprender cómo funciona the hardware y
el software para printing y internet sharing y todo.
Y como resultado, yo aprendí mucho más porque yo tuve que resolver todos los
problemas por mí mismo, sin la ayuda de un negocio.
Y también para los trabajos es útil e importante tener cosas como un GitHub
repository para que cuando ustedes terminan un curso como CS50 u otro
curso, es posible presentar al mundo lo que han hecho en las clases,
particularmente para los proyectos finales.
Y cuando se usa un GitHub repository, be sure that your code es correcto,
por supuesto, pero también que es limpio, good style, good design,
porque más que un resume hoy, es importante enseñar a la gente en el
mundo lo que pueden hacer si esto ayuda.
Claro.
¿Otras preguntas?
Sí.
AUDIENCIA: Bueno, mi pregunta sería, ¿cuáles son--
¿cuáles son los recursos que yo puedo tomar luego de concluir y terminar el
CS50 y pasar el CS50 para ser un programador o computer scientist
autodidacta?
CHRISTIAN: [HABLANDO INGLÉS]
DAVID J. MALAN: Hay tantas clases gratis en el internet hoy,
en Edex y Coursera y Udacity.
Es importante aprender algo que se llama functional programming después de CS50.
En CS50 enseñamos las lenguas procedural or imperative,
pero en el mundo hay más lenguas también que se llaman functional programming
language, como F# y Lisp y OCaml y EML y otros.
Es una manera diferente de pensar del mundo.
Y también es importante aprender los--
¿cómo se dice?
Data structures y algoritmos.
Y hay una clase, por ejemplo, en Coursera de Princeton en este tópico.
OK, gracias.
Sí, por supuesto.
AUDIENCIA: Yo francamente solo quería dar las gracias en nombre de Fundación
1, de CS50, y de todos los muchachos de que nos hayas venido a dar esta clase.
Y estamos muy contentos de tenerte en Nicaragua.
Muchas gracias.
DAVID J. MALAN: Gracias.
Muchas gracias.
[APLAUSO]