[Powered by Google Translate] [MÚSICA ROCK]
[MÚSICA - "Happy Together" LAS TORTUGAS]
David Malan: Hoy comenzamos nuestra exploración de la
fundamentos de la ciencia de la computación y la introducción,
Ahora, a la técnica de programación, de los cuales es que
sólo un ejemplo.
Pero en el mismo sentido de la resolución de problemas, saben que
Día Puzzle tradicional CS50 es mañana.
Si aún no has enviado un RSVP para el evento, usted puede ir a
cs50.net/rsvp.
Usted puede traer equipos de dos o tres o cuatro.
Usted será desafiado con problemas como el que viste
allá en el principio.
Todos los nuevos problemas este año si participó el año pasado, y
tendrá la oportunidad luego de ganar premios fabulosos.
Entre ellos, un Wii y algunos certificados de regalo y artículos similares,
a la vez que salir con CS50 estudiantes y compañeros de clase
y la pizza y Facebook.
Así que más que el mañana si quieres.
>> Esta es, pues, CS50, para aquellos de ustedes unirse a nosotros para la
primera vez.
Y sé que este curso está especialmente decidido a conseguir
a través de este curso hasta su término final, momento en el que
tendrá no sólo una comprensión de estos
fundamentos de la informática, sino que tendrá que
esta habilidad muy práctico conjunto que puede tomar de nuevo a
su propio departamento, si se trata de ciencias de la ingeniería,
matemáticas aplicadas, las ciencias físicas y naturales
ciencia, o similares.
En efecto, ¿qué es tan emocionante de la informática estos
día es que es tan sólo aplicable a los
todo tipo de campos.
Y aunque hoy en día, sólo arañar la superficie de un
lenguaje de programación muy tradicional conocido como C, vamos a
en lugar de mirar a algo llamado Scratch, algo con
que esa historia de amor cookie fue ejecutado por uno de sus
predecesores en los últimos años, a contar historias, crear juegos,
para crear arte interactivo, y para realmente empezar a envolver nuestro
mente alrededor de algunas de las construcciones fundamentales que
subyacen en la programación, pero en un contexto, como se verá, es que
mucho menos miedo, eso es mucho menos misterioso, de lo que se ve
en poco tiempo.
Y darse cuenta, también, para aquellos de ustedes que nos acaba de unirse a este
semestre, las frases en que terminamos conferencia del miércoles,
no es tan importante cuando usted termina su relación con
compañeros de clase en esta clase, pero en el que, por el final del semestre
en la semana 11, terminan con respecto a ti mismo en el día de hoy.
>> Así que sin más preámbulos, este es también digno de mención que
los menos cómodo, aquellos en algún punto intermedio, están
también, por su diseño de este curso, no a cualquier desventaja
vis-a-vis los más cómodo
que entra en esta categoría.
Como verás en las semanas por venir, tenemos diferentes
pistas de fondo de nuevo dispares, secciones para los
menos cómodo, más cómodo, aquellos en algún lugar
en el medio.
Como podrá ver este fin de semana y la próxima semana, dos versiones de
la mayoría de los conjuntos de problemas, tanto en edición estándar y hacker para
que todos puedan auto-selecciona por el camino con el que
se sienta más cómodo.
>> Así que hoy, nos sumergimos en esta programación
lenguaje llamado Scratch.
Es un lenguaje de programación gráfica, y sin embargo tiene la
mismas características de algunos de los lenguajes de alto nivel que vamos a
explorar más adelante en el semestre, entre ellos C y
JavaScript y PHP.
Pero va a permitir a nosotros para evitar algunas de las distracciones
desde el principio de la sintaxis, las cosas como puntos y comas, paréntesis,
y otros detalles arcanos que, a primera vista, no son
en absoluto intelectualmente interesante y tienden a ponerse en
la forma de una cierta comprensión fundamental.
En términos de la estructura de soporte ahora por delante, se dio cuenta de esto
herramienta, CS50 Discutir, que estará vinculada a la del curso
sitio web el día de hoy, es el foro de discusión en línea en
el que serás capaz de hacer preguntas a los demás y
personal, y es también una herramienta, como veremos la próxima semana,
que vamos a utilizar muy integradamente en
las horas de oficina también.
De hecho, las horas de oficina comenzará el lunes, y francamente, el primer
semana del horario de oficina es bastante bajo llave.
>> No creo que usted encontrará todo lo que Rasguño inaccesible.
Es bastante explica por sí mismo, como vamos a ver, ¿y qué
lo usaremos para hoy es para extraer algunas de las
las ideas fundamentales que, por tanto, persisten a lo largo de la
resto del semestre.
Pero a partir del lunes, a las 8:00 PM hasta 23:00 será
en horas de oficina durante las vacaciones de Annenberg cerebro.
Seccionamiento dos comenzará esta noche, así que en algún momento este
fin de semana, ir a cs50.net/section, y te
se le pedirá una serie de preguntas.
Entre ellos, ¿cómo describiría su
nivel de confort al día de hoy?
No hay regla dura y rápida en cuanto a quién está en qué cubeta.
Es justo el tipo de cosa que usted probablemente sabe si
están entre los que el menos confortable o de otra manera.
>> Y ahora, tutoriales.
La especificación del conjunto de problemas para esta semana, tanto estándar
y la edición pirata por igual, está en línea en cs50.net partir de ahora.
Y verás que la primera de estas ediciones, la
edición estándar de cada semana, va acompañado de algo de lo que
llamar a un tutorial de código, una sesión dirigida por uno de los
becarios de los cursos de enseñanza para guiarle a través de, proporcionar
consejos, y se obtiene por un camino particular cuando se trata
para iniciar estos boletines de problemas.
Así, con cada uno de estos boletines de problemas, si alguna vez querer
por ti mismo ¿por dónde empezar, comenzar con estos
tutoriales.
Y de hecho, permítame presentarle Zamyla Chan, esta
año compañero docente que estará al frente de todos y cada uno
uno de estos tutoriales.
Zamyla?
>> [Aplausos]
ZAMYLA CHANDLER: Oh, hola a todos.
Mi nombre es Zamyla.
Soy un joven estudiando ingeniería en Winthrop House.
Pero creo que ésta quepa en tantos cursos de informática como yo
puede, por lo que estoy realmente entusiasmado de liderar este
año tutoriales.
Tutoriales, para mí, son una parte esencial de mi CS50
experiencia.
Durante el tutorial, para todo p-set, vamos a ir a través de
el conjunto de problemas juntos, mirar por encima de los problemas, el tipo de
dividir para arriba en pedacitos manejables.
Te voy a dar consejos, técnicas, para obtener
a través de E INTRODUCCIÓN.
Espero verlos a todos en los tutoriales.
Si usted no puede asistir en persona, entonces
por favor sintonice en línea.
>> David Malan: Excelente.
Gracias, Zamyla.
Así que darse cuenta de que los recorridos son, de hecho, un viernes
tarde, pero esto es deliberadamente por diseño para que
aunque prefiere no asistir a clase un viernes
tarde, los vídeos estarán hasta lo más rápidamente sobre
el fin de semana.
Así que darse cuenta de que cs50.net estarán todos los Zamyla
tutoriales.
Y que no es la fecha y hora de hoy, a las 3:00 PM,
Harberd Hall, 104.
Y algunos de los compañeros docentes también han preparado
algunas observaciones para que en ausencia del acusado para darle un poco de
perspectiva en cuanto a cuál es su experiencia que entra y
salir de CS50 era.
Así que si podíamos apagar las luces por un momento, yo te doy
parte del personal del CS50.
>> JACKSON Steinkamp: Tomé CS50 año pasado como estudiante de primer año en la
caer, y absolutamente me dejó alucinado.
Yo nunca había tomado clases de programación anterior,
y nunca entró con toda la informática
experimentar en absoluto.
Y así, he oído los rumores acerca de la clase y
decidió tomarlo.
>> JULIA Mitelman: Fue muy divertido, muy atractivo.
Todavía, a día de hoy -
Hace poco vi que tengo el disco que David nos dio
en nuestro primer día de clase.
Lo había colgado en mi pared.
Esto es probablemente un poco nerd, pero me quedé en en mi
pared durante la clase como un recordatorio de lo bueno que era.
>> TRAVIS DOWNS: Es tan vergonzoso.
>> JACKSON Steinkamp: La informática es algo que
debe tratar incluso si usted no es uno de
las ciencias tradicionales.
Es su propia experiencia, y CS50 se asegurará de que usted es
bien apoyado a través de ella con su verdadero ejército de TFS.
>> ALI Nahm: Lo tomé como un estudiante de primer año, y así lo hizo mucho
de nuevos amigos.
También me he presentado a esta concentración todo
toda la escuela de ingeniería, por lo que lo recomiendo encarecidamente
y le damos la bienvenida a nuestra familia CS50.
>> Yaniv Yacoby: CS50 sólo te enseña cómo utilizar las herramientas
que son muy accesibles.
Sólo se necesita un ordenador portátil, se necesita un navegador web, y usted
Necesitamos aprender a escribir algo de código, y usted puede construir realmente
cosas interesantes.
>> KAREN XIAO: Es tan bueno ser capaz de hacer algo
y que la gente lo use y que la gente lo ve, y eso es
lo que realmente me gusta de ella.
>> Tim McLaughlin: - un sentido de comunidad, creo que, en este
por supuesto, más que cualquier otro curso que he tomado hasta ahora.
No sólo estás tomando otro -
usted no está llenando otro requisito.
No sólo vamos a conferencias e ir a la sección.
Pero estás haciendo un montón de cosas que son todos acerca de
programación y todo sobre la tecnología, pero no es así
Realmente te sientes como una clase más de las veces.
>> TRAVIS DOWNS: ¿Y en el primer día, repartieron torta, y
Me vendieron al instante.
>> JACOB PRITT: caramelos gratis y pizza.
>> ZAMYLA CHAN: - sin importar su nivel de interés, creo que
que CS50, te divertirás y podrás intelectualmente
estimulado.
>> MARK GROZEN-SMITH: Siempre es una fiesta en la clase, y es un
fiesta cada noche trabajando en su p-set.
>> JACKSON Steinkamp: Cada vez que termine un boletín de problemas,
se sentirá como usted ha terminado un proyecto.
>> MELISSA NIU: Fue el primer año, y se hizo la compra.
Yo tenía mis cuatro clases listo, y yo estaba en Annenberg.
Y me encuentro con un amigo, y él dice, hey, voy de compras
esta clase llamada CS50, y usted debe venir conmigo.
Acabé teniendo que ese otoño, y después de esa clase, que
pensé que tal vez voy a menores en CS.
Pero aquí estoy, tres años después, todavía está estudiando ordenador
la ciencia y de hecho lo está haciendo como un mayor, y me encantó cada
momento de ella.
>> ROB BOWDEN: No tengo ni idea.
>> ALI Nahm: Vamos a ver.
>> MELISSA NIU: locura.
>> Ponencia 1: Siento que sería muy cliché.
Que acababa de decir, como, impresionante.
>> Yaniv Yacoby: Accesibilidad.
>> JACOB PRITT: caramelos gratis y pizza.
>> TRAVIS DOWNS: No se puede bajar una clase que se reparte la torta.
>> Tim McLaughlin: Energética.
>> VIPUL Shekhawat: Essential.
>> ROB BOWDEN: Déjame pensar en una respuesta.
Creo que tengo algo.
Oh, dios.
Sí, mi nombre es Rob Bowden, y esto es CS50.
>> [Aplausos]
David Malan: Muy bien, así que vamos a empezar a pintar un cuadro
de la dirección en la que podemos ir, y vamos a introducir
este concepto aquí conocido como pseudocódigo.
Así que no es un pseudocódigo de programación
lenguaje en sí mismo.
No es nada técnico per se, pero es sólo una especie de
forma general de expresarse con bastante precisión,
bastante algorítmica, procesalmente justa, pero sin
tener que preocuparse por el idioma que usted está expresando
usted mismo pulg
Es cierto modelo de Inglés y lenguajes de programación con
que usted sea familiar, para que podamos empezar
escribir este tipo de cosas sobre la marcha.
Y de hecho, Joseph, ¿podría usted pedir prestado al escenario para ser
escriba aquí?
He seguido adelante aquí con anticipación y olvidado de poner
unos calcetines de hoy, y esto va a ser uno de nuestros más
ejemplos ridículos.
>> Ahora, te necesito aquí.
Voy a hacer la parte de calcetines.
Así que aquí tenemos un pequeño bloc de notas.
Esto es, literalmente, sólo TextEdit en Mac.
No estamos realmente va a escribir un programa ejecutable, pero
sólo vamos a empezar a esbozar pseudocódigo basado en
en algunos de los consejos que usted proporciona a mí aquí.
Así que aquí está mi pila de calcetines en casa.
No tengo calcetines cuando me despierto por la mañana, y ahora estamos
que escribir un programa, un algoritmo de clases, con el que
para obtener estos calcetines en los pies.
Y en el camino, vamos a ver si podemos tropezar, o encuentro,
algunas de las ideas que usted va a tener que empezar
pensar mucho más seriamente en la programación
no sea que sus programas no se comportan bien como se esperaba.
>> Así que siéntate aquí.
Tengo mi pila de calcetines.
¿Qué es lo primero que un ser humano razonable sería
hacer cuando el objetivo es poner en un par de calcetines?
Que alguien me dé un paso, y sólo el primer paso.
¿Sí?
AUDIENCIA: Dobla hacia abajo.
David Malan: Inclínate, está bien.
Paso dos.
AUDIENCIA: Toma tu calcetín.
David Malan: Toma tu calcetín.
Vale, ambigüedad tan leve aquí, y este es uno de los primeros
obstáculos que que se supone que deliberadamente
Encontramos aquí.
Es un poco ambiguo, así que toma tu calcetín.
Está bien, me quedo con este, pero un ordenador, realizar en un
poco, no va a tener ese tipo de instinto humano de sólo
escoger el más cercano.
Vamos a tener que empezar, en poco tiempo, expresando
nosotros mismos con mayor precisión.
>> De acuerdo, entonces el segundo paso es levantar el calcetín.
Vamos a tomarlo.
Paso tres.
En la parte posterior.
AUDIENCIA: Encuentra una pareja.
David Malan: Encuentre par coincidente.
Bien, eso es bueno.
Tuve que elegir este calcetín.
Así que el objetivo es encontrar una coincidencia de calcetín, ahora, pero lo
Qué significa eso?
Un ser humano es razonable, al igual que el miércoles, cuando me
supo encontrar Mike Smith en una guía telefónica, sólo un poco de
fue con su instinto.
Pero aquí, es, obviamente, este calcetín aquí, pero de una computadora
no va a ser tan instintivo.
Un equipo que va a tener una colección de bits, como hemos
discutió el miércoles, y son los
organizado de alguna manera en la memoria.
Pero el punto es que un equipo sólo tiene la capacidad de
a mirar las cosas de una en una, y de hecho, incluso se
los seres humanos - a pesar de que se siente como que miró hacia abajo ya la ruptura
segundo después yo sé dónde está el calcetín, mi cerebro y mis ojos
presumiblemente tuvo un rápido descremada de los calcetines, y enganchado a continuación
a la que nos ocupa.
>> Así que si podemos ser aún más deliberado ahora como un ordenador,
¿Cómo puedo encontrar a este par a juego?
Bueno, tenemos que iterar.
Tenemos que quizás lazo sobre este lío de los calcetines en el
piso por el que me diga algo como PARA CADA calcetín, recogerlo
, y si la misma forma y tamaño que el otro, entonces
punto, punto, punto, vamos a continuar la historia.
Así, por cada calcetín, así que recoger esto.
Reviso es éste igual a esta.
No es, por lo que dejar de lado lateral.
Entonces iterar de nuevo.
¿Es esta una igual?
No, no lo es, así que lo puse a un lado.
¿Es este?
No.
Éste?
No, y así sucesivamente.
Y, por último, con suerte, voy a encontrar este calcetín aquí.
Así que si se trata de la misma forma, tamaño, tómalo.
>> Y ahora, ¿cuál sería el siguiente paso en esta lista?
¿Sí?
AUDIENCIA: Identificar derecha de la izquierda.
David Malan: Está bien, identificar a derecha e izquierda, por lo que
Afortunadamente, este tipo de obras.
Un poco simétrico, o me he gastado sólo ellos de esa manera.
Muy bien, así que me he identificado la derecha.
Y ahora, antes de continuar, permítanme señalar lo que José
estado haciendo aquí como una especie de programador versado.
Así que de nuevo, no hay una sola manera de hacer esto, pero más allá de
numeración de las líneas, Joseph ya ha empezado a hacer esto
especie de sangría.
De hecho, esta es una convención muy común en la programación,
por lo que cuando se hace algo repetitivo, bucles estilo,
estamos dando a entender con la frase en Inglés "PARA CADA
calcetín, "la convención en pseudocódigo y, como veremos,
lenguajes de programación habituales, es justo guión.
Pulsa la barra espaciadora varias veces, presione la tecla Tab o similar,
para que anidado debajo "PARA CADA calcetín" es el pedazo de
cosas que tiene que hacer como resultado de ese bucle.
Así que eso es todo lo que está transmitiendo semánticamente.
Ahora, mientras tanto, el "Si se trata de la misma forma y tamaño," la
hecho de que "Take it" una sangría adicional sólo significa
eso es lo único que debe hacer si esa condición,
si esa rama, que tenedor en la carretera, es de hecho verdad.
>> Así que ahora aquí, estamos en el cuarto paso, identificar a la derecha ya la izquierda.
He identificado derecha.
Give me paso cinco.
Y técnicamente, realmente podríamos llamar
el para cada cosa -
probablemente debería numerar todas las líneas si
vamos a hacer esto.
JOSEPH: [inaudible]
David Malan: [inaudible]?
Bueno, está bien, está bien, vamos a hacerlo a tu manera.
De acuerdo, entonces el paso cinco, ¿cómo podemos hacer el calcetín derecho?
¿Cómo procedemos próximo, aquí?
¿Sí?
AUDIENCIA: Levante la pierna derecha.
David Malan: Levante la pierna derecha, está bien.
Paso seis?
Rápidamente.
Si.
AUDIENCIA: Encuentre un extremo abierto del calcetín.
David Malan: Está bien, encontrar el extremo abierto del calcetín.
Tan bueno.
Así que aquí, de verdad, un instinto muy común sólo sería
poner en calcetín derecho, pero eso también es bastante ambigua.
A menos que el ordenador o humano sabe exactamente lo que quiere decir,
no va a ser para ejecutar eso, así que aquí, no tengo
encontró la apertura del stock.
Paso siete?
AUDIENCIA: Tócate los dedos de los pies.
David Malan: dedos de los pies Touch.
Bien, ahora vamos -
Está bien, me voy a tomar algunas libertades aquí.
Gracias.
Paso ocho?
Póngase calcetines.
Está bien, así que ahora, creo que estamos lo suficientemente cerca a una especie de toma
esta uno en casa.
Muy bien, así que esto va para arriba.
Voy a tomar algunas libertades con lo que significa, en realidad.
Coloque el calcetín en.
Muy bien, ahora paso nueve?
AUDIENCIA: Colocar el pie hacia abajo.
David Malan: Gracias.
Paso nueve, poner pie en el suelo, y ahora, repetimos puede.
Así que probablemente, ahora podemos entrar en el paso 10 y decir identificar
dejó calcetín, pero eso es probablemente ya está hecho.
>> Y entonces, puedo ordenar de repetir estos pasos.
Pero este tipo de petición de principio.
Antes, la última vez que queríamos repetir algo,
hizo iterativamente, una y otra vez, una PARA
Cada bucle por así decirlo.
¿Tendría sentido utilizar un bucle con el fin de manejar tanto
la izquierda y la media derecha?
Porque se siente como si estas operaciones son más o menos
idénticos, excepto por el hecho de que uno comienza aquí y uno
comienza aquí?
¿Tenemos bucle, o simplemente seguir los pasos de escritura
10 y 11 y 12?
AUDIENCIA: Loop.
>> David Malan: Muy bien, así bucle.
De hecho, me podría haber dicho simplemente seguir adelante.
¿Por qué es este el caso?
Bueno, esto es en realidad el primero de nuestra no-obvio
decisiones de diseño y, de hecho, uno de los indicadores con los que
vamos a empezar a evaluar, para nosotros y para usted, el
calidad de un programa es lo bien diseñado que es.
¿Ha hecho la mínima cantidad de trabajo necesario para
hacer el trabajo lo más rápidamente, ya sea en términos de
su tiempo o en términos de tiempo de funcionamiento de la computadora?
¿Cuántas operaciones hace que se necesita para ejecutar?
Así que podría decirse que esta es una oportunidad para un bucle porque
tan pronto como comience a copiar y pegar, como José eficazmente
sería empezar a hacer en un momento, usted está perdiendo el tipo de
tiempo, y que está siendo doblemente expresivo.
>> Pero al mismo tiempo, estos son en realidad dos especiales
casos, izquierda y derecha.
Y mientras que antes, podría tener 10 o 20 o más medias en
una pila, que sin duda no tiene sentido tener 50 líneas de
código diciendo mira esto calcetín, luego el siguiente,
entonces el siguiente.
Aquí, es un poco menos obvio, y me propuso que
que podíamos ir en cualquier dirección.
O bien podría tener ese lazo, aunque sólo los bucles
dos veces, o podemos simplemente copiar y pegar un poco
aquí con el fin de hacer el trabajo.
Pero este programa está libre de errores, por así decirlo.
Es posible que tenga algunos errores, errores o casos de esquina, así
Hablaré, pues, que en realidad no anticipar.
Nada salió mal esta vez, pero lo que pudo haber salido mal
durante la ejecución de este programa?
AUDIENCIA: Usted no tiene ningún calcetines.
>> David Malan: Así que no puede haber medias hay alguna.
Así que vamos a considerar ese caso esquina.
Así que si pudiéramos retroceder hasta el paso uno, paso uno era tan
doblar hacia abajo, de manera que concuerda.
El segundo paso, toma tu calcetín, pero luego encontrar calcetines a juego,
identificar la derecha.
Es como que hizo un montón de suposiciones, y esto es,
francamente, ¿por qué a veces el programa bloquee.
Si usted, el programador, han hecho ciertas suposiciones, como
seguramente no va a ser calcetines o seguramente no va
a ser memoria disponible en el ordenador, seguramente no va
ser espacio en el disco en el disco duro -
Bueno, si usted hace estos supuestos, y que no lo es,
de hecho, la realidad, ¿quién sabe lo que a veces la computadora
vamos a hacer?
Y a veces, cuando recibe el balón de playa giratorio o el
congelado Windows o similares, eso es precisamente debido a que algunos
programador no previó esos casos extremos llamados.
¿Qué otra cosa podría haber ido mal en este programa?
¿Sí?
>> AUDIENCIA: Usted no tiene la pierna derecha y la pierna izquierda.
David Malan: Bueno, tal vez no tenga tanto una pierna derecha y un
la pierna izquierda, por lo que este programa puede no ser universalmente
aplicable.
¿Otros?
AUDIENCIA: Usted podría haber recogido un calcetín huérfano.
David Malan: Podría haber cogido un calcetín huérfano, por lo que un
no correspondiente calcetín que sólo no tiene hermanos porque he
lo perdió, se rompe, es en el lavado todavía, o similares.
Así que, también, en realidad no ha sido manipulado.
¿Sí?
PÚBLICO: Es posible que ya tenga calcetines.
David Malan: Ya podría tener calcetines.
Yo en realidad no check.
SI usted no tiene los calcetines, y luego proceder a hacer
la línea uno y dos.
Y eso podría suceder.
Te quedas dormido con los calcetines y similares, así
eso, también, un caso esquina muy razonable.
Y tal vez otro?
AUDIENCIA: El calcetín está al revés.
David Malan: Así que el calcetín está al revés, así que hicimos ningún error
comprobar, en definitiva.
No comprobar si el estado del mundo es como esperamos.
No comprobar si en realidad encontramos lo que estamos buscando.
>> Y a pesar de que esto es una especie de un ejemplo ridículo
la participación de calcetines, al final de la día, esto es exactamente la
tipo de mentalidad es necesario tener al escribir programas,
incluso en Scratch, así como en C, en JavaScript, en PHP,
porque de lo contrario, los programas se presentan el
equivalente de esa pelota de playa o simplemente dar vueltas
resultados inexactos.
Así que muchas gracias aquí a nuestro escribano José.
[Aplausos]
>> David Malan: Muy bien, ¿y qué es, en
hecho, un programa de ordenador?
Bueno, vamos a echar un vistazo rápido a un
representante de uno aquí.
Así que este es un programa escrito en un lenguaje llamado C. C es
nuevos lenguajes muy antiguos en estos días, pero muchos se construyen
en la parte superior de la misma.
De hecho, PHP, uno de los lenguajes web centradas vamos a
usar hacia el final del plazo, se tiene lo que se llama un
intérprete, un programa que está escrito en C, pero más de eso
en muchas semanas a partir de ahora.
Pero este programa, y ​​esto es lo que significa escribir un
programa, si bien de manera muy simple.
Tenemos una sintaxis bastante críptico aquí, pero se puede
probablemente adivinar, incluso si nunca has programado antes, lo que
que hace el programa.
De hecho, yo no sé lo que printf es, pero ciertamente imprimir
evoca la idea de imprimir algo.
Y sí, este programa es en última instancia va a imprimir
las palabras "Hola, mundo".
>> Ahora, si usted tiene un Mac o un PC o un ordenador con Linux, lo más probable
son, al menos si ha descargado algún libremente
software disponible, que podría haber estado escribiendo programas en
su propio ordenador portátil desde hace bastante tiempo.
En Mac OS, por ejemplo, hay un programa llamado
Terminal que viene con un Mac, que es por lo general en su
Carpeta Utilidades, y por lo general se abre un negro y
blanco o una ventana en blanco y negro en el que aparece un
indicativo en el cual puede escribir comandos.
Así que esto es realmente una reminiscencia de lo que las computadoras
solía ser antes gráfica de usuario
interfaces, interfaces de usuario, llegó.
Ahora, en Windows, tiene un mecanismo similar en la forma
del símbolo del sistema.
>> Pero, ¿qué voy a hacer es abrir, digamos,
TextEdit otra vez, por lo que el mismo programa que utilizábamos para
pseudocódigo hace un momento, y yo voy a seguir adelante y
escribir mi primer programa.
Incluir stdio.h, sea lo que sea, int main
vacío, sea lo que sea, y luego en el medio aquí,
printf ("hola, mundo."). Y luego cita estrecha,
cerrar paréntesis, punto y coma.
Ahora voy a seguir adelante y acaba de golpear Comando-S. Voy
seguir adelante y guardar esto como hello.c, por lo que la convención en
el mundo de la programación C es el nombre del archivo del punto c.
Voy a poner justo en el directorio de Inicio John Harvard,
aquí, haga clic en Guardar, y ahora me voy a ir a este
ventana de terminal, que de nuevo es este indicador en blanco y negro
donde puedo ejecutar comandos.
>> Puedo ejecutar programas escribiendo su nombre, no por
doble clic en los iconos en el sentido habitual.
Pero la cosa se trata de C es que un lenguaje como C primero
viene en esta forma, algo que se llama código fuente.
Algo que se parece un poco como el Inglés, pero es
definitivamente menos como el Inglés de un pseudocódigo de José
momento antes.
Es un poco más arcano.
Parece que seguir algunas pautas o reglas.
El hecho de que tengo las llaves, punto y coma, comillas,
soportes en ángulo, se siente como un equipo se le ocurrió esta
tipo de lenguaje.
Pero si me voy, ahora, a esta ventana de terminal, puedo correr un
comando que se va a convertir ese código fuente es
algo que se llama código objeto.
Eso va a convertir Inglés-como sintaxis a ceros
y unos, los mismos tipos de ceros y unos que nosotros
habló el miércoles.
Ahora, me voy a correr un comando llamado Clang.
Más sobre esto en las próximas semanas, pero es un programa con
que puedo convertir hello.c en un montón
de ceros y unos.
>> Ahora, me he encontrado este comando.
He corrido Clang, y luego me dijo que correr a ti mismo en el archivo
llamado hello.c, que he creado hace un momento, y
nada parece suceder.
Pero en realidad, si me metió en mi directorio personal, me gustaría ver
que este programa estúpidamente llamado a.out ahora existe.
Esto es sólo el nombre predeterminado para un programa cuando se escribe en
C. Podemos cambiar este tiempo, pero es la a.out
nombre del programa que acaba de convertir en ceros y unos.
Y ahora que él es ceros y unos, mi Mac, en este caso, o
el PC con Windows, puede entender los bits, los
ceros y unos.
Y así, cuando yo pulse Enter, veo "hola, mundo!"
>> Pero es un poco buggy.
Yo no acababa de decir "hola, mundo: el aire: - jharvard". El aire es
el nombre de mi equipo.
Jharvard es el nombre de la cuenta, así que lo hice con claridad
omitir en el programa?
Una especie de salto de línea.
No le pegué el equivalente a Enter o el retorno de carro,
y esto es, de nuevo, testimonio del hecho de que los ordenadores pueden
sólo hacer lo que les dicen que hagan.
Y el hecho de que yo no le dijo al mover el ordenador
cursor a la línea siguiente -
así, no es seguro que va a hacer sólo lo
presuntuosamente para mí.
Así que si vuelvo a ir a mi programa, y ​​digo \ n -
Entonces, \ n, como pronto veremos, es la forma de
representar las cosas extrañas como caracteres de nueva línea, cosas
que de otro modo sería el resultado de
pulsando la tecla Enter.
Pero, por ahora, sólo sé que pulsando la tecla Enter se
acaba de hacer nuestro código parecer extraño, por lo que el mundo decidieron, ya sabes
lo que, para mantener las cosas más bonitas, para mantenerlo en una línea, vamos a
acaba de decir \ n representa una nueva línea.
Permítanme volver a guardar mi archivo, vuelva a la ventana de terminal, y
vuelva a ejecutar a.out, Intro.
Aún con errores, pero ¿por qué?
>> AUDIENCIA: [inaudible]
David Malan: Sí, así que tengo que volver a compilar.
Así que para compilar un programa sólo significa convertir lo de la fuente
código para el código objeto del código fuente, en ceros y unos.
Ahora bien, el mero hecho de que llegué a guardar en la presente edición de textos no
teniendo en esos ceros y unos, porque primero tiene que
tell Clang hey, he cambiado de esas líneas de código, el
código fuente.
Es necesario regenerar a.out.
Nada parece haber pasado, pero en un ordenador,
en una línea de comandos, por así decirlo, cuando no pasa nada,
que por lo general significa que todo está bien.
Cuando algo sucede, significa
usted en mal estado, en general.
>> Así que vamos a ir ahora a a.out, y de hecho ahora tengo "hola,
mundo ".
Y ahora, ¿qué pasa con estos ceros y unos?
Donde, de hecho, son los?
Bueno, no puedo realmente sólo un poco de hurgar muy
eficazmente.
Permítanme abrir TextEdit.
Esto es a.out.
Déjenme seguir adelante y abrir esto, y esto es al parecer lo que mi
programa parece.
Así que he abierto, hello.c no, pero a.out.
Pero esto no es realmente lo que mi programa es en realidad.
Es evidente que esto es algún tipo de caracteres alfabéticos.
Veo que no hay ceros y unos, pero esto es
porque a.out es un programa.
Ceros y unos - pero TextEdit, como su nombre indica, es
al igual que el Bloc de notas de Windows, es un editor de texto, por lo que es
confundiendo todos esos ceros y unos como
aunque lo fueran, ¿qué?
Caracteres ASCII.
>> Así que recuerda el miércoles, sólo se le ocurrió esta
asignación arbitraria de números, o bits, a las letras del
alfabeto y los símbolos de puntuación y similares.
Así TextEdit, que es un editor de texto se malinterpretando
esos patrones de ceros y unos que se supone que son
palabras de impresión, como "hola, mundo". Les está mostrando
como ASCII, y por eso se ve un poco desordenado.
Ahora, hay algunos indicios de corrección de aquí.
Observe si destaco, hay un atisbo de realidad "hola,
mundo, "así que en algún lugar de ese programa es
la frase que escribí.
Pero vamos a seguir adelante y ahora veo con un programa diferente.
Esto no es un usaremos a menudo, pero también viene con
un Mac y estará dentro del aparato CS50.
Déjenme seguir adelante y abrir con un programa llamado XXD.
>> De vuelta en el día, la mayoría de los programas fueron nombrados bastante críptica,
y por lo que la tendencia continúa.
Pero-b significa escupir a cabo este programa en forma binaria.
No lo ejecute.
Muestra a mí como ceros y unos, y esta es la C
programa que acabo de escribir.
Ahora bien, yo, como ser humano aquí, sinceramente, no tienen idea de lo que
estos diversos patrones de ceros y unos representan.
De vuelta en el día, yo, con mis tarjetas perforadas o similares, lo haría
en realidad hay que buscar lo que estos diversos patrones de
01111000, en realidad representan.
O peor aún, que tendría que hacer la perforación o la creación
de estos patrones de ceros y unos.
Pero por ahora, tener fe en que una CPU, Intel Inside, así
decirlo, dentro de todas nuestras computadoras en estos días, sabe
cómo interpretar estos ceros y unos.
Y algunos ceros y unos significar impresión.
Algunos ceros y unos significa reproducir un sonido.
Algunos ceros y unos significar tomar la entrada del usuario desde un teclado.
Hay todo tipo de diferentes modelos, pero por suerte,
como seres humanos, en general, sólo tiene que preocuparse acerca de la programación en
este nivel bastante alto.
Y en otras clases CS puede ahondar más profundamente y buscar
las cosas como esos ceros y unos, o aún
otras cosas fijas.
>> Así que ahora vamos a convertir esto.
Vamos a pasar muy rápidamente de C y pasar a algo un
poco más reconfortante, un poco más emocionante, en el que
podemos volver nuestras animaciones y sonidos y similares, que
claramente nos han escapado en esta
interfaz bastante primitivo.
Así que este mismo programa en C puede ser representada ahora en este
lenguaje de programación llamado rasguño de la siguiente manera.
Este es el equivalente de este programa hola mundo escrito en
esta pieza del rompecabezas estilo lenguaje llamado Scratch.
Así que permítanme seguir adelante y abrir el programa mismo.
Se volvió a pedir Scratch.
Es de libre disposición, y esto es lo mismo que
Empiece hoy mismo en.
>> Así que aquí es Scratch, y está dividida en unos pocos
diferentes piezas.
En la parte superior derecha, tenemos la llamada fase, y
de hecho, ahí es donde las galletas
realizó sólo un poco atrás.
Y en esa etapa son cosas llamadas sprites, caracteres o
objetos o entidades.
Realmente no importa lo que piensa de ellos, pero
cosas son programables, móviles, y en este caso, esto,
programa que nuestro estudiante escribió tiene un par de pan de jengibre
galletas, un par de galletas circulares, una gran cantidad de
corazones, un montón de gafas.
Debido a esto, él o ella es capaz de programar cada uno de los
caracteres individuales por separado.
>> Ahora bien, ¿qué significa para programar estos personajes?
Bueno, déjame seguir adelante y hacer clic en esta cookie mano izquierda
y desplácese hasta la parte superior izquierda aquí.
En la parte superior izquierda de la pantalla ahora es el
la llamada área de scripts.
Esta es una especie de pizarra en blanco, en un principio, sobre el que puedo
arrastrar y soltar las piezas del rompecabezas que, francamente, hacer
exactamente lo que dicen.
En la parte superior de la pila de pedazos del rompecabezas es la palabra
Al hacer clic encima Bandera Verde, y si no te diste cuenta antes,
la forma en que comenzó esa canción cookie fue hacer clic, literalmente,
una bandera verde.
Así que esa pieza del rompecabezas en la parte superior izquierda hay significa que cuando el
clics humanos de la bandera verde, procedió a hacer
las siguientes cosas.
>> Ahora bien, ¿qué hicieron galleta proceder a hacer?
No se sabe muy bien cómo interpretar esto todavía, pero la
galleta aparentemente establezca su ranura a cero, entonces se esperaba
tres segundos, luego cambió de grupo a uno, entonces
Esperó un segundo, y luego cambió su
ranura de nuevo a uno.
Y luego esta realidad se parece un poco a un error, no debe
tiene que cambiar su ranura y otra vez a menos que sea
se cambia en otra parte, pero esta serie de medidas es lo que está
dictando el comportamiento de esta cookie en particular.
Así que en realidad no desplazarse hacia atrás y mirar algo
tan complejo todavía.
Déjenme seguir adelante e ir a Archivo, Nuevo,
y obtener un borrón y cuenta nueva.
>> Así que ahora, en efecto tener un área vacía guión, un escenario vacío,
con nuestro duende rayado defecto, y en la parte superior izquierda
en mi pantalla tengo la paleta de la totalidad de su
piezas disponibles puzzle.
Y no vamos a pasar casi que muchas de estas cosas
hoy, porque, una vez más, la mayoría se explican por sí, pero lo haremos
tratar de categorizar y destacar las similitudes
con estos lenguajes futuros a los que vamos a bucear.
Y aquí arriba a la izquierda es la primera Bandera Verde Cuando Seguido,
así que voy a arrastrar esto aquí, alejar un poco.
Y si hago clic en la bandera verde, nada sucede porque
No he incluido ninguna lógica, cualquier declaración por así decirlo, a
esa bandera verde, así que déjame ir hasta el
categorías aquí.
Actualmente estoy en la categoría de control.
Estoy en vez de ir a bajar a la categoría Apariencia, y
hay un montón de cosas aquí que digas Di,
Piensa, cambio de color, vestuario Switch.
>> Así que usted puede hacer cosas tontas con los trajes y
sonidos y similares.
Déjenme seguir adelante y decir Say y ahora note como me arrastre
y colocar esta pieza del rompecabezas, va a querer aferrarse
en la forma correspondiente.
Así que cuando me vaya a continuación y soltar el ratón, se bloquea
juntos, y ahora si me voy de aquí y haga clic en la bandera verde,
el gato es de hecho saludar porque eso es lo que hay dentro
de esta caja blanca.
Pronto veremos que esta caja blanca es lo que se llama una
argumento, o un parámetro.
Es una forma de cambiar el comportamiento de, en este caso, una
pieza del rompecabezas, pero si quiero decir exactamente lo que dije
antes, decir hola, mundo, ahora puedo volver por aquí,
Haga clic en Reproducir y "hola, mundo" es lo que se dice.
>> Así que literalmente estamos programando ahora.
No es todo lo que obliga de un programa, pero por lo menos
que es un poco de algo más convincente que parece que, en
A primera vista, así.
Y podemos obtener muy rápidamente tanto más expresiva
porque en Scratch, como en otros idiomas, no es todo
tipo de declaraciones no, acaba de decir o imprimir algo, pero
usted puede hacer cosas como espera, como acabamos de ver con
la cookie, un cierto número de segundos.
Puede reproducir sonidos en el entorno de Scratch sólo
como se hace en una reproducción de sonido de ordenador normal del programa.
Usted puede comprobar lo que se llaman expresiones booleanas.
Así que ahora, vamos a empezar a añadir a nuestra caja de herramientas un poco de terminología
que en realidad se refiere al ejemplo que José y yo
aquí con los calcetines.
Así que las declaraciones son declaraciones de hechos.
Haga esto.
Una directiva para el sprite, o me lo humano, para hacer algo.
Una expresión booleana es algo que tiene un valor, un
llamado valor de verdad, eso es un cero o uno, falsa o
cierto, apagado o encendido, no o sí.
Realmente no importa lo que pienses sobre esto, pero es un
binario Estado.
Como Nate discutido en vídeo del miércoles, dos
cosas diferentes.
>> Así que en Scratch, expresiones booleanas pasar a buscar
como estos objetos azul aquí, y en este caso, la cuestión
marca implica que usted está haciendo una pregunta.
¿Está el gato, o el duende, tocando el puntero del ratón?
Así que esto es sólo un ejemplo de un bloque de Scratch que está pasando
que nos permita comprobar si o no, es el ratón toca el
sprite en la pantalla?
Y esto puede ser útil si usted realmente quiere hacer las cosas
con el ratón.
Además de las expresiones booleanas, tenemos cosas
como es el ratón hacia abajo, para que pueda detectar ese tipo de
cuestionar también.
Podemos hacer las matemáticas si usted quiere realmente, y hay
usos realidad más convincentes para que este sólo pura de
aritmética, como ya veremos.
Pseudo aleatorio y hacer que su programa parecen pensar
o se comportan de manera diferente sobre la base de unos valores aparentemente al azar,
y luego tenemos cosas como expresiones booleanas como AND.
Así que si usted realmente quiere comprobar dos valores, vamos a ver en
Raspe que realmente podemos probar si esto es
cierto y esto es cierto.
Por ejemplo, en el caso de mis calcetines, que podría haber en el
muy extremo preguntado si calcetín izquierdo está encendido y calcetín derecho
está encendido, deje de hacerlo.
Está todo hecho para el día, así que sería una
oportunidad para que.
>> Así que vamos a seguir adelante y tratar de reconstruir algunas de ellas junto
y entrar en un par de ejemplos más
convincente que esta.
Así que déjame ir delante aquí y abrir algunos de los ejemplos
que siempre estará en la página web de la asignatura, así, y
abrir hello2.
Así que en hello2 aquí, tenemos un programa que se está haciendo un poco
cosas, pero no lo hace tan eficazmente como lo haríamos.
Así que aquí se dice "hola, mundo" durante un segundo y luego espera
por un segundo.
Y lo hace de nuevo, y luego lo hace de nuevo.
Así que si hago clic en la bandera verde, Scratch dice: "Hola, mundo.
¡Hola, mundo.
¡Hola, mundo. "Y esta es, obviamente, ahora candidato para
mejora.
>> ¿Cuál es la mejora marginal, con suerte, podemos
ahora si hacer scratch apoya el concepto?
Una especie de bucle.
Una especie de repetición, ahora, estaría bien, así que permítanme
realmente intentarlo.
Permítanme realmente ir y seguir esto.
Así que aviso se puede desprender bloques tan fácilmente como usted puede agregar a
adjuntarlos.
Déjame ir bajo control, desplácese hasta aquí, y de hecho,
hay esta pieza del rompecabezas aquí, repetida y siempre y
Siempre If.
Así que hay un número de maneras de expresar construcciones de bucles
en Scratch.
La que probablemente quiere aquí no es para siempre, porque sólo
desea que esto ocurra tres veces, pero Repita probablemente.
Así que me arrastra Repita hasta aquí, arrastrar y soltar, y
ahora en lugar de decir "Hola, mundo" en tres ocasiones separadas,
déjame arrastrar esta pieza del rompecabezas aquí.
Y a pesar de que no parece encajar, el programa es inteligente
lo suficiente como para darse cuenta de que crecerá para llenar, así que es el
formas que la materia y no el tamaño absoluto.
Vamos a cambiar la repetición a tres, y ahora me deja ir
adelante y arrastrar espere un segundo en allí también.
Va a romper adentro también, y por eso ahora me voy a arrastrar
estos chicos de aquí y simplemente tirarlos a la basura porque
no los necesita más.
Permítanme alejar la imagen y haga clic en la bandera verde ahora, y tenemos
el mismo programa, pero, como yo predije antes, mejor
diseñado porque se puede imaginar lo mal que este programa
tendría, sin duda estéticamente, si tiene que
empezar a copiar y pegar, copiar y pegar, o
arrastrar y soltar las cosas darn mismos una y otra vez.
>> Ahora, simplemente diciendo cosas en la pantalla, la impresión al
pantalla, en realidad no es tan emocionante, así que vamos a abrir un
varianza tercero aquí.
Y ahora, como se verá, este da gusto ser molesto -
[MEOW]
David Malan: - pero también es algo lindo.
[MEOW]
David Malan: Bueno, mejor así, y sin duda podemos usar esa
misma transición de fragmentación esto en un bucle
estructura, pero vamos a hacerlo más interesante aún.
>> Déjenme seguir adelante y abrir una variación cuarto aquí, donde
tomar las cosas un paso más allá.
Así que de acuerdo con esto, tonto aunque esto es en primera
mirada, lo que este programa va a hacer?
Va a maullar una vez.
¿Por qué?
Bueno, uno es, hasta donde yo sé, siempre inferior a dos.
No hay noción de aleatoriedad aquí.
Literalmente, he codificado uno y dos, pero este es un
ejemplo ahora de utilizar realmente una expresión booleana.
Al igual como lo hizo José en su pseudocódigo, la sangría SI
a encontrar calcetines a juego, haz lo siguiente, aquí tenemos
una expresión si uno es menor de dos THEN -
y, de hecho, incluso tenemos un poco de sangría,
donde el morado es un poco sangría a la derecha -
Entonces usted va a jugar el maullido de sonido.
Ahora, en este caso, que uno es siempre inferior a dos, por lo que este
es una especie de pérdida de la condición.
Pero vamos a ser capaces, como veremos, para tapar otras cosas en
estos marcadores de posición donde uno y dos son ahora.
Así que vamos a avanzar ahora al ejemplo cinco de estos varios
saludos y mirada a lo que este programa va a hacer.
>> Así que ahora, en una sentencia de Inglés, ¿cómo funciona esto
programa de comportarse?
AUDIENCIA: Meows mitad del tiempo.
David Malan: la mitad de Meow parte del tiempo, por lo que esta es una forma de
transmitir una idea muy simple.
A pesar de que se esté utilizando algunas desigualdades aquí
en algunos números, esto es en realidad un programática
Así, de manera precisa, de decir si la moneda sale cara, vaya
adelante y maullar.
O a la inversa, si la moneda sale cruz, no miau.
Y en este caso, ¿cómo expresar eso?
Vamos a escoger un número al azar entre 1 y 10, y si eso
número es inferior a 6, adelante, miau.
¿Y cómo llegó esto aquí?
Bueno, de nuevo, sólo la cuenta de arrastrar y soltar y
cosas encaje.
>> Así que ahora vamos a ver si esta aleatoriedad funciona.
Déjenme seguir adelante y haga clic en la bandera verde.
[MEOW]
David Malan: Muy bien.
[MEOW]
David Malan: Muy bien.
Bueno, bueno, así que nos dieron cabezas, cabezas, colas eficaz.
Tails.
[MEOW]
David Malan: Heads.
[MEOW]
David Malan: Excelente.
Siempre es difícil cuando sólo estadísticamente se obtiene una mala
ejecutar, y es todos los jefes, y el programa en realidad no
trabajar como era de esperar.
Pero esta vez, funcionó, y parece que tenemos, si lo hiciéramos
este número infinito de veces, las probabilidades del 50%.
Ahora, de nuevo, no todo es tan interesante, justo lo que los gatos
miau, así que vamos a ver si podemos avanzar en esto un poco más lejos
aquí en la sexta versión.
Así que ahora, tenemos versión realmente molesto -
[Maullidos cada pocos segundos]
David Malan: - y esto es lo que se conoce, en general, como un
bucle infinito.
>> Así bucle infinito en este caso se siente mal.
Es, definitivamente, va a empezar a sonar mal, y sin embargo infinito
lazos no son siempre malas.
¿Puede pensar en el contexto de programas de ordenador en el que había
en realidad quieren un bucle infinito?
¿Sí?
AUDIENCIA: Si usted quiere comprobar una condición.
David Malan: Está bien, si desea mantener el control de una enfermedad?
¿Cómo qué?
AUDIENCIA: [inaudible]
David Malan: Bueno, bueno, así que si tienes algún programa, algún
tipo de cosas domótica, en la que desea constantemente
monitor es algo así.
¿Son las luces encendidas?
¿Son las luces encendidas porque tal vez usted tiene un temporizador y
desea que se apaga, es posible que tenga que hacer algo
una y otra vez.
Y de hecho, hablando de los temporizadores, cualquiera de ustedes que han
relojes en tu ordenador o relojes digitales, es una
bucle infinito.
Se continúa actualizando el tiempo porque es constantemente
la comprobación y el control y la comprobación tiene el tiempo cambiado,
y si es así, oh, mi dios.
El reloj finalmente ha cambiado.
Es necesario mostrar ese valor para usted.
Así, mientras la mayoría de los ciclos infinitos de tiempo son un error,
o por lo menos una decisión de diseño pobre, a veces lo hacen
tienen su valor.
>> Bueno, vamos a seguir avanzando para hello7.
Así que ahora el programa se ponen un poco más interactivo.
Permítanme hacer un zoom aquí, de nuevo, esto es lo que es bueno
acerca de Scratch.
Y vamos a usarlo para que quede claro, Scratch, sólo hoy y en
problema la semana que viene configurado.
Pero el lunes, nos sumergimos en C. En este programa, lo hace,
siempre, el siguiente.
SI tocar el puntero del ratón - ahora, ¿quién es el
contexto aquí?
Bueno, y observe que quien selecciona aquí abajo, en el fondo
derecho es el gato, sprite, así que estas secuencias de comandos, esto
programa, se aplica a él específicamente.
Así que si el gato está en contacto con el puntero del ratón, entonces va
para jugar a este y esperar dos segundos, y
repita hasta la saciedad.
>> Así que vamos a seguir adelante y llegar a jugar.
No pasa nada, pero si quiero acariciar al
gato ahora, yo simplemente puedo.
[MEOW]
David Malan: Adorable.
[MEOW]
David Malan: Bueno, menos molesto, pero también consigue aburrido,
así que vamos a seguir adelante y ver si no podemos inyectar
una lógica poco más.
Ese fue el ejemplo de siete.
>> Aquí en el ejemplo ocho, vamos a
introducir una condición ELSE.
Tanto literal como un tenedor en la carretera, en la que se puede ir
hacia la izquierda o usted puede ir a la derecha, una condición en la programación
lenguaje como Scratch, o como veremos C, puede permitir
ir en una dirección u otra a través de un IF ELSE construir.
Así que, literalmente, SI tocar puntero del ratón, este
se reproducirá un sonido, de lo contrario va a jugar este otro
sonido, miau.
Ahora, si usted puede deducir del nombre de estos sonidos, puede
probablemente adivinar lo que este programa está destinado a evocar
la idea de.
Este gato está maullando feliz.
[MEOW]
David Malan: Felizmente, pero no
bastante como para ser tocado.
[ROARS]
David Malan: Así que ahora tenemos un gato que va a gritar en usted.
>> Bueno, bueno, un último ejemplo con los gatos aquí, y
vamos versión abierta de nueve de esto aquí.
Así que ahora, tenemos el siguiente sonido más molesto que he podido
encontrar, así que tenemos una morsa o león marino que aquí va a
haga lo siguiente.
[Foca]
David Malan: Bueno, esto continuará hasta que averiguar cómo
este programa funciona.
Así que esta vez, este animal tiene dos guiones, y es lo que
interesante aquí es que estos scripts se va a ejecutar
en paralelo.
Por lo tanto, ya que ambas comienzan con una bandera verde se hace clic,
es como ir de esta manera, y ambos programas se inician de ejecutarlo
una vez incluso si están bucle para siempre.
Así que en el script de alto, tengo un poco de lógica.
¿Qué funcionalidades que proporcionan hasta allí?
[Foca]
AUDIENCIA: [inaudible]
David Malan: Si se trata de qué?
[Foca]
AUDIENCIA: Si silencia a cero, se va a seguir jugando el
sonar. [Foca]
David Malan: Está bien, está bien.
Así que si silenciado, sea lo que sea, esa cosa naranja es cero,
A continuación, reproducir el sonido de lobos marinos y pensar "Oh,
hola, "durante dos segundos.
Ahora, yo no sé lo que es silenciado, pero cero evoca la
idea de falso o apagado.
Así que si silenciada es falso, por lo que si no está silenciado,
mantener la reproducción del sonido.
De acuerdo, bien, ¿cómo podemos desactivar esta cosa?
>> Bueno, echemos un vistazo a la segunda secuencia de comandos ahí abajo.
El segundo guión dice establecer silenciado a cero.
Observe también es naranja, así que lo que hace es que los arañazos colores
bloques en el mismo tono que si es una especie
de lógicamente relacionados.
Así como recargar silenciado era de color naranja, por lo que se silencia aquí
mencionado en el bloque naranja.
Pero esto es una asignación de variables, por lo que al igual que en
álgebra, tienes x e y y z, en la programación tiene
variables, pero son generalmente -
hagamos una pausa por un momento y figura como
para detener esta ladridos.
¿Cómo puedo hacer esto?
[Foca]
David Malan: Muy bien.
Se detuvo. Bien.
>> Así como en el álgebra tiene variables x, y, z, pero en
programación, que tiene variables como x, y, y z es generalmente
mal visto, porque no son del todo expresivo.
Ellos no tienen ningún significado semántico alguno, por lo que en la mayoría
lenguajes de programación, las variables pueden tener plena
nombres de pleno derecho o palabras o frases similares en silencio, para decir
lo que hacen.
Así que este segundo script también se escucha siempre, y dijo que
si la tecla, el espacio tecla del teclado, es
presionado, signo de interrogación.
Así que hay una condición con una expresión booleana que es
va a responder a una pregunta sea verdad o falso,
entonces tengo dentro de ella si la tecla de espacio se presiona y
SI apagado es cero, ajuste silenciado a uno, ELSE establecer silenciado a cero.
Así que este otro tenedor en la carretera, y observe cómo he
anidar las dos condiciones IF, es una manera de comprobar es la
Barra espaciadora presionada porque si es así, yo tampoco quiero ir esta
o esa manera.
¿Y cómo invertir el valor de apagado?
Tengo que comprobar es cero?
Si es así, lo convierten en uno, de lo que sea cero para alternar tanto
sus dos estados.
>> Muy bien, así que tenemos a continuación algunas de estas fundamental
construcciones.
Tenemos expresiones booleanas, y se dan cuenta, también, estos son
no todo lo que no familiar.
De hecho, aquí está una captura de pantalla rápida de su curso de Harvard CS50
herramienta de compras, y cualquier sitio web por ahí que tiene casillas de verificación
y menús desplegables que realmente, todo este tiempo, ha sido el uso
Expresiones booleanas.
En este caso aquí, si hace clic en la casilla de verificación junto a
Por supuesto mayor que o igual a 4,5, o el siguiente al mismo
facultad, se especifica una expresión booleana.
Muéstrame los cursos para los que dicha expresión es verdadera.
O a la derecha, no entre en conflicto con los cursos que estoy
adoptar, si es que se comprueba, entonces sí, usted quiere comprobar
esa condición, más que quieras ignorarlo.
Así expresiones booleanas son una especie de todo, pero cuando
los ponemos en condiciones, si las condiciones de SI, SI
Vigilara, o incluso podemos simular más profundo
niveles, IF ELSE IF ELSE -
así que eso es una especie de estado ternario.
Usted puede ir de esta manera o de esta manera o de esta manera.
Podemos mantener las cosas de anidación para ir en direcciones diferentes.
>> Así scratch tiene estos lazos, como siempre.
Tiene estas características como la repetición 10, algunos
número finito de veces.
Tenemos la capacidad actual para definir las variables, por lo que en este caso
He señalado, por ejemplo, a medias llamados variables.
He inicializado a 0, y eso es otra dirección
que podríamos haber tomado aquí con José, el cual tal vez
sólo un seguimiento de cuántos calcetines que tengo en y terminar
el programa cuando el valor de esa variable es 2.
Eso sería otra manera de una especie de generalización que
problema y hacer algo una y otra vez.
Bueno, vamos a seguir adelante y ahora introducir un par de cosas nuevas.
Así que aquellos de ustedes que tienen experiencia previa de programación se
Sabemos que muchos de los idiomas tienen matrices o vectores o
listas y, de hecho, Scratch tiene algo como esto, también.
Así que vamos a ver si no podemos llevar las cosas al siguiente nivel aquí.
Si tiene la posibilidad, ahora, con estas piezas del rompecabezas para
añadir algo, como una palabra o un número, una variable, no puedo
empiezan a acumular las cosas.
Y esto es en realidad bastante a propósito para cosas como juegos,
juegos de rol donde eres un poco por los alrededores
un mundo de fantasía recogiendo cosas, recoger las cosas,
ganar puntos, o similares.
Es posible que desee hacer un seguimiento de algún tipo de inventario, y
de hecho, eso es lo que uno de nuestros antiguos alumnos aquí hizo con
algo que se llama Fruitcraft RPG.
>> Así que permítanme seguir adelante y abrir esta cosa aquí, y en
Fruitcraft, tenemos este mundo hacia la parte superior.
Así que permítanme seguir adelante y haga clic en la bandera verde.
Aviso en la parte superior izquierda es una especie de inventario.
Eso es implementado en Scratch como lo que vamos a llamar a una matriz o
una lista, y ahora tenemos esta pequeña animación.
Así que cuando empezamos antes con esta historia de amor cookie,
y luego avanzó a los gatos y leones marinos, ahora podemos tener
lo que es aún más interactivo.
Y este tipo azul poco, puedo empezar a moverse por su
pequeño hogar aquí.
Así que parece que tiene una salida de aquí, así que estoy usando
las teclas de flechas, arriba, abajo, izquierda, derecha.
Y ahora estoy fuera, así que es lo que tenemos aquí.
Parece que una naranja, y, de hecho, tan pronto como me toque la
color naranja, se dejó caer en mi inventario.
Si me voy de aquí a las cerezas, ahora tengo algo
más en mi inventario.
Y esto es todo bonito y lindo, pero pensar en cómo, ahora, en este
se implementa.
Bueno, tenemos esta noción de una lista, y eso es al parecer un
pieza del rompecabezas que usted acaba de decir lo que quiere añadir a la misma, añadir
naranja, añadir las cerezas.
Ahora, ¿qué es este chico poco de azul haciendo?
Bueno, él es un sprite.
Y es de suponer, la naranja y las cerezas -
ellos mismos eran sprites separados.
Y el uso de las condiciones en las expresiones booleanas, las
estudiante era probablemente capaz de expresar si es hombre azul
cerezas tocar a continuación, añadir las cerezas de palabras para su
inventario, y luego también ocultar el sprite cereza.
Así que debajo del capó, que probablemente todavía es una cereza
Sprite allí.
Hemos contado a llegar a ser efectivamente invisible.
>> Ahora, si me sigues andando por aquí, también podemos hacerlo
Lo proximal, donde puedo ir y leer el cartel.
Así que si hombre azul tocando signo, podemos tener este bloque Say
al igual que el gato nos habló en palabras, hola, antes, "Got
un poco de fruta?
Lleve al lugar fruto. "Muy bien, ahora lo que, al parecer,
Tengo mis instrucciones.
Yo puedo ir de aquí hasta el lugar de frutas, alinear a mí mismo
con la puerta.
Ahora, yo estoy aquí.
Puedo ir hasta el hombre en el mostrador.
Se detecta que estoy cerca de él, por lo que no tiene por qué ser
absolutamente idéntica tocar, y me he ganado el juego.
Así que tenemos Fruitcraft RPG.
>> Así que podemos hacer las cosas aún más avanzados que esto.
Podemos añadir sonidos.
Podemos añadir aleatoriedad pseudo.
Podemos añadir complejidad.
Déjame ir adelante aquí, y en vez de hacer esto por mí mismo,
deja que te enseñe una de las presentaciones más sofisticadas
nos dieron el año pasado de una persona que se llamaba Blake.
¿Podemos tener un voluntario que es cómodo que aparece en
cámara y es para jugar un juego?
¿Y de ahí?
Vamos arriba.
Muy bien, así que el juego que usted acaba de saberlo,
se ofreció para jugar -
[Aplausos]
David Malan: - es algo de antaño llamado
"Frogger". ¿Cuál es su nombre?
RENDA: Renda.
David Malan: REDNA?
RENDA: Es como Brenda con una b.
David Malan: Bueno, Renda.
David.
Gusto en conocerlo.
>> Así que aquí en "Frogger", y si podemos aumentar el volumen justo
un poco, se encuentra esta pequeña
rana verde en la parte inferior.
Puede utilizar la izquierda, derecha, arriba y abajo, y su objetivo es
cruzar la calle, cruce el río, y tocar las hojas de lirio
en la parte superior.
Aw.
Una t más -
rehacer, ¿de acuerdo?
Vamos a dejar de golpe.
Nadie lo vio.
[Aplausos]
David Malan: Si.
Muy bien hecho.
Excelente, gracias.
>> Así que no había Frogger. Ahora que sabes lo que has
llegado a vosotros mismos, voluntario uno más para un diferente
juego presentado por otro estudiante.
¿Quieres venir a arriba?
¿Cuál es tu nombre?
RICHARD: Richard.
David Malan: Richard.
Muy bien, Richard, vamos arriba.
[Aplausos]
David Malan: Tiene algo que va a sonar
familiarizarse pronto, así que aquí están sus instrucciones.
Así que en cierto momento, algunas piezas del rompecabezas se van a desplazar hacia arriba
en la pantalla que se ven bien a la izquierda
o la derecha arriba o hacia abajo.
Vas a tener que tocar las teclas de dirección, de tal manera
que corresponde a las piezas del rompecabezas que se alinean con
los marcadores de posición en la parte superior.
Así que cuando usted ve una flecha hacia la izquierda, y las líneas hacia arriba con la izquierda
flecha, pulse la flecha de la izquierda.
Usted puede comenzar.
[MÚSICA - "Stronger" Kayne West]
David Malan: Todo correcto, gran aplauso para Richard.
[Aplausos]
David Malan: Muy bien hecho.
Gracias.
[Aplausos]
>> David Malan: Volando y, aparentemente, una especie de
intimidante como podría ser la de implementar algo como
aparentemente sofisticado como este, se dan cuenta de que el estudiante
no partían y acaba de escribir esto de una vez.
Más bien, se puede descomponer un problema aparentemente tan complejo
como esta en pedazos mucho más pequeños, y esto, también, es
Va a ser un tema.
La peor cosa que puedes hacer por escrito un programa en la mayoría de cualquier
el lenguaje es para sentarse, ponerse realmente emocionado, escriba el
maldita cosa, y entonces sólo espero que funcione por el
vez que haya terminado de escribir.
Más bien, el proceso de la programación general, debería
ser muy deliberado, muy iterativo, en el que sólo
establecer medidas muy pequeñas para ustedes mismos, trozos pequeños
Qué quieres arrancar con los dientes, y así que usted tiene estos cordura
cheques, hitos pequeños que puedan cumplir.
Y luego construir en la parte superior de los que crean más
cosas sofisticadas fijas.
>> Así, por ejemplo, ¿cómo hacemos para
la implementación de un juego como este?
Bueno, sinceramente, me volvería a empezar con sólo
apoyar una tecla a la vez.
Vamos a implementar el soporte para la flecha izquierda.
De modo que el estudiante tuvo que crear de alguna manera en Photoshop, o en
Raspe sí mismo usando el editor gráfico pequeño, un
tecla de flecha que se parece a la de arriba a la izquierda allí,
el marcador de posición grises.
Entonces el estudiante tenía que averiguar qué x, coordenada y en
lo puso, dónde ponerlo en la ventana.
0, 0 es aquí, así que tienes que calcular el número de
píxeles, o puntos, para compensar esa flecha de
la parte superior de la pantalla.
Y luego, una vez que esté en funcionamiento, el programa en realidad no
hacer nada, por lo que este caso es necesario un sprite en segundo lugar, para
ejemplo, una flecha verde que apunta hacia la izquierda también, y usted
A continuación, deberá comenzar a escribir algunos scripts para ello.
>> Y te das cuenta, tal vez, que estas cosas empezaron a llegar a
velocidades diferentes, y los colores fueron en diferente
lugares, y eso es debido a que el estudiante usa un poco de
aleatoriedad pseudo.
Y por casualidad pseudo, me refiero sólo a recoger un número
entre algo y algo porque se puede
comenzar con las cosas del mapa, como si el número está entre uno y
cinco, bueno, vamos a hacer la cosa verde.
Si es entre 6 y 10, vamos a hacer la pieza del rompecabezas
rojo en su lugar.
Siempre y cuando usted tiene una manera de generar algún tipo de
aleatoriedad, puede tomar decisiones sobre la base de que
aleatoriedad.
Y sigo diciendo seudo aleatoria, porque hay un
pequeño y sucio secreto.
Las computadoras no pueden llegar a números aleatorios.
Ellos sólo pueden hacer lo que les dicen porque
son dispositivos creados por el hombre.
No pueden adivinar un número como nosotros los humanos
sentir como nos sea posible.
Un equipo tiene que hacer algo matemático para conjurar la
ilusión del número matemático, utilizando a veces la
día actual del tiempo como un insumo para averiguar lo que
número para volver, pero más de eso en otro momento.
Por ahora, sólo sé que podemos generar aleatoriedad pseudo.
>> Así que una vez que tengo la capacidad para la flecha izquierda para comenzar
que aparece en momentos diferentes y a velocidades diferentes, entonces
Me puede volver atrás y añadir un poco de estos si las condiciones.
SI este elemento sprite está en contacto con el otro, y la flecha izquierda
ha pulsado la tecla -
por lo que las tres condiciones en ese caso.
Puedo usar ese bloque AND tal vez, en este caso -
Entonces quiero seguir adelante y aumentar la puntuación.
Y en la parte superior, tenemos un resultado, tenemos Awesome,
Cool, bueno, y Boo.
Así que hay cinco variables que al parecer este estudiante
utiliza para realizar un seguimiento de estos indicadores diferentes.
Así que en resumen, el resultado final es increíble.
Es divertido, es divertido de jugar, es atractivo, pero esto no es
donde el estudiante comenzó.
Él o ella comenzó a un conjunto mucho más pequeño de pasos.
>> ¿Cuáles son algunos otros bloques de construcción que podemos
tejer en estos programas?
Bueno, hay un concepto distinto en la mayoría de los idiomas,
Rayar entre ellos, conocido como roscas.
Así que un equipo no puede realmente realmente hacer varias cosas a la
tiempo, por lo menos no lo general.
Más bien, un equipo generalmente tiene un solo CPU, e incluso
Aunque las computadoras son súper rápido y puede, por lo tanto,
crear la ilusión de hacer varias cosas a la vez -
revisar su correo, obtener al instante
mensaje, la impresión de un documento -
en realidad, un ordenador es sólo saltar de impresión para enviar mensajes instantáneos
para enviar correos electrónicos, volver y volver y volver y que adelante tan rápido que
lentos humanos ingeniosos no se dan cuenta que en realidad es
explotación de dichos programas un poco a la vez.
Ahora, esto un poco de blanco se encuentran en estos días, ya que, hoy en día,
muchos de nuestros ordenadores son lo que se denomina multi-core, por lo que
tiene una CPU de múltiples núcleos, pero, lo que es algo así como
tener múltiples CPUs.
>> Y así, a veces, las computadoras pueden realmente hacer varias cosas
a la vez, pero generalmente dentro de un programa, los programas
confiar en estas cosas llamadas roscas.
Así que un hilo es algo así como un programa en miniatura que puede
coexisten con otro programa en miniatura y puede correr
en paralelo, o al menos se puede ejecutar bajo la ilusión de que
se están ejecutando al mismo tiempo.
Así arañazos apoya estas cosas llamadas roscas.
Usted puede tener varias secuencias de comandos de ejecución a la vez, igual que nosotros
hizo con el león marino, y esto nos permite en realidad
entonces tienen interacciones entre estos sprites.
Déjame ir por delante aquí y tire hacia arriba, digamos, hilos, y
jugar de la siguiente manera.
Tenemos dos sprites, cada uno de los cuales vamos a ver
sólo tiene un guión.
Y te das cuenta parece que hay un poco de inteligencia en el
gato en éste porque está cada vez más cerca -
[ROARS]
David Malan: - cada vez más al pajarito.
>> Entonces, ¿cómo es el sistema operativo pájaro?
Bueno, vamos a echar un vistazo a la primera ave.
El guión pájaro dijo cuando la bandera verde se hace clic en, vaya a x
es igual a negativo y es igual a 115 y 150.
Así que me di cuenta de una ubicación aleatoria donde yo quería que el
ave para empezar, y que sólo le dejó caer allí por defecto.
Entonces siempre si no tocando gato, así que esto es diferente
tipo de construcción de bucle, pero la misma idea, hacer esto una y otra
una y otra vez.
Siempre y cuando usted no está tocando el gato, se mueven tres pasos, y
si estás en el borde, rebote, donde es una especie de
reflexión en el sentido de billar.
Así es como el ave se mueve alrededor tipo de
aparentemente al azar, pero es sólo porque está rebotando
las paredes en este caso.
>> Ahora el gato, por su parte, es una especie de trampa.
El gato, cuando la bandera verde se hace clic en Sí, se inicia en
alguna ubicación, un lugar al azar -
al menos en parte como por la selección
de bloques al azar verde allí -
y luego para siempre si tocar al ave, reproducir el sonido león,
y luego dejar de guión.
Así que cuando me dijo que cancelar o salir antes, hay un rompecabezas
pieza en Scratch que se acaba de cerrar el programa en ese
punto porque es una especie de lógica por hacer.
Pero por lo demás, aquí, fíjate en lo que va a pasar.
Punto hacia el pájaro y avanzar un paso.
Así que este punto hacia el ave es una especie de ventaja al gato
tiene en que es homing en el ave en movimiento, y podemos
ahora que este programa sea aún más interesante.
En lugar de mover un paso a la vez por cada ciclo de la CPU, por
huelga de peaje de la campana, por decirlo así, déjame seguir adelante y
mover, digamos, cinco pasos a la vez como el gato.
Haga clic en Ejecutar, y ahora realmente lo encuentra rápidamente.
Si duplicamos esto más de 10 pasos, es como que va
adecuada para él.
Ahora, podemos dar el pájaro,
tal vez, un poco de ventaja.
Vamos a ir al pájaro y decir en lugar de mover tres pasos,
lo vamos a pasar 30 pasos.
Pero todavía quedó atrapado en el final.
>> Así que aquí tenemos dos hilos.
Está encarcelado en Scratch con dos guiones y dos
sprites, pero la idea en otros idiomas es que se puede
escribir, en esencia, demasiados programas como éste y tener
correr de verdad, o imaginariamente, en paralelo.
>> Ahora bien, también existe este concepto en programación conocido como
eventos, y esto es algo que no veremos en C, el
lenguaje conocido como C. Vamos a ver hacia el final del semestre
en la programación web, cuando introducimos JavaScript y el
noción de construcción de páginas web que son dinámicas e interactuar
con los usuarios.
Así, en este caso, tenemos un ejemplo muy simple de dos
sprites, niño y niña, cada uno de ellos con su respectivo
hilos, pero de alguna manera estos dos son inter-comunicación por medio
de algo que se llama los acontecimientos.
Así que déjame ir delante aquí y acercar guión del chico,
que se parece a esto.
Cuando hace clic en bandera verde, para siempre hacer lo siguiente.
Si el espacio clave, o la barra espaciadora, se pulsa, por ejemplo
Marco por dos segundos, que es puramente estético en el
pantalla, un bocadillo pequeño, pero luego emitir.
>> Así difusión es otra pieza Scratch que es
representante de una clase de funcionalidad en la programación
que permite a los diferentes programas, diferentes hilos,
a inter-comunicación, para enviar alguna manera
mensajes, uno a otro.
Pasar un trozo de papel en clase es una especie de baja tecnología
equivalente.
Así evento transmitido.
Puedo enviar este mensaje, y la palabra evento
es completamente arbitraria.
Rayado a veces tiene estas listas desplegables, así que se acercó
con una palabra al azar como evento porque ahora, lo que el niño hace
al presionar la clave es que emite este evento.
Y si miro ahora en el guión de la niña, su guión es
super simple, porque todo lo que tiene que hacer es no actuar cuando
la bandera verde se hace clic.
Está diseñado para la acción cuando reciba Lo dijeron ellos,
"Event", y en ese momento, ella está escuchando, por consiguiente,
el evento llamado una y otra vez.
Tan pronto como se reciba ese caso, ella va a gritar
Polo durante dos segundos.
>> Y por lo que tal vez pueda deducir de esto exactamente lo que el
resultado que viene va a ser.
Permítanme clic en la bandera verde.
No pasa nada porque tengo que hacer qué?
AUDIENCIA: barra espaciadora.
David Malan: barra espaciadora.
Boy dice Marco, chica dice Polo.
Pero eso no es de codificación fija per se.
Esa es la intercomunicación entre las secuencias de comandos, por lo que ahora
tienen la capacidad de hacer que los programas aún más complejo en el que
estos dos son de alguna manera inter-comunicación.
>> Así pues, en qué dirección podemos tomar esto?
Pues bien, en conjunto problema 0, en realidad, el objetivo es
divertirse con Scratch.
Para la edición pirata, en su lugar se divertirá con más
versión sofisticada de Scratch llamado BYOB, urbanizado
Sus propios bloques, pero la idea es la misma.
Usted será capaz de -
Sí, eso fue deliberado.
Venía de Berkeley.
BYOB es la versión de la edición pirata de esto, pero a la vez
demografía, la edición estándar y edición pirata por igual, el
objetivo a la mano para la próxima semana es en realidad para sumergirse en
profundo, ensuciarse las manos con la programación, y hacer
algo interesante, hacer algo interactivo, haga
algo artístico, hacer algo divertido que en realidad
demostrar, de manera que a finales de semana, tendrá un proyecto,
no sólo para su primera CS50 conjunto de procesadores, pero vas a tener un
poco de algo que se puede mostrar en Annenberg para
amigos o familiares, incluso por subirlo a la página web del MIT.
Y así, como dije el miércoles, se espera que el 90% de la clase,
en general, a hacer las ediciones estándar.
Darse cuenta de que también hay esta salida para aquellos de ustedes que
de lo contrario puede ser que se encuentre un poco aburrido con lo básico
y realmente quiere sumergirse y crear una visión que ya
tenemos con conocimientos previos en este más amigable
ambiente.
>> Así que me tire otro ejemplo que uno de nuestros ex
estudiantes aquí hizo y decirles algo a través del canto.
Que del mismo modo, ya que esto juega, piense en cómo usted va sobre la
la aplicación de este programa utilizando precisamente estos mismos
bloques de construcción, un poco de aleatoriedad, y un pseudo-
poco de canción familiar.
Si pudiéramos subir el volumen un poco?
[MÚSICA - "Es Raining Men" The Weather Girls]
>> David Malan: Eso es todo por CS50.
Nos vemos el lunes.
[Aplausos]