[Powered by Google Translate] [ROCK]
[MÚSICA - "Happy Together" As tartarugas]
DAVID MALAN: Hoje, começamos nossa exploração do
fundamentos da ciência da computação e nossa introdução,
Agora, com a técnica de programação, sendo que é
apenas um exemplo.
Mas, na mesma linha da resolução de problemas, saiba que
Dia CS50 do enigma tradicional é amanhã.
Se você ainda não dado RSVP para este evento, você pode ir para
cs50.net/rsvp.
Você pode trazer equipes de dois, três ou quatro.
Você será desafiado com problemas como o que você viu
lá em cima no começo.
Todos os novos problemas deste ano se você participou no ano passado, e você
terá uma chance depois de ganhar alguns prémios fabulosos.
Entre eles, um Wii e alguns certificados de presente e como,
tudo ao mesmo tempo sair com CS50 alunos e colegas
e pizza e Facebook.
Então mais sobre isso amanhã, se você gostaria.
>> Este é, então, CS50, para aqueles de vocês se juntarem a nós para o
primeira vez.
E sabemos que este curso é particularmente determinado a conseguir
você através deste curso ao seu fim, em que ponto você
vai ter não só uma compreensão destes
fundamentos da ciência da computação, mas você vai ter
este conjunto de habilidades muito prático, que você pode levar para
seu próprio departamento, se é ciências de engenharia,
matemática aplicada, as ciências físicas, naturais
ciência, ou semelhante.
Na verdade, o que é tão emocionante sobre ciência da computação estes
dias é que ele é tão aplicável a
todos os tipos de campos.
E mesmo que hoje, vamos apenas arranhar a superfície de um
linguagem de programação muito tradicional conhecida como C, vamos
em vez olhar para algo chamado Scratch, algo com
que essa história de amor cookie foi implementado por um de seus
antecessores nos últimos anos, para contar histórias, para criar jogos,
para criar arte interativa, e para realmente começar a envolver nosso
mentes em torno de algumas das construções fundamentais que
subjacentes a programação, mas em um contexto, como você vai ver, que é
muito menos assustador, isso é muito menos misterioso, que você vai ver
antes do tempo.
E perceber, também, para aqueles de vocês só se juntar a nós esta
semestre, as frases em que estamos encerrados palestra de quarta-feira,
não é tão importante quando você acabar em relação ao seu
colegas nesta classe, mas onde você, até o final do semestre
na semana 11, acabam-se mesmo em relação a este mesmo dia.
>> Então, sem mais delongas, este é também de notar que
os menos confortáveis, aqueles em algum lugar no meio, são
também, pelo projeto do curso, não a qualquer desvantagem
vis-à-vis os mais confortáveis
que vem a este classe.
Como você verá ao longo das semanas que virão, temos diferentes
faixas para o fundo volta díspares, seções para aqueles
menos confortáveis, mais confortável, aqueles algures
no meio.
Como você verá neste fim de semana e na próxima semana, duas versões
a maioria dos conjuntos de problemas, tanto na edição padrão e hacker assim
que todos podem se auto-selecionar o caminho com o qual você
são mais confortáveis.
>> Então, hoje, nós mergulhar neste programação
linguagem chamada Scratch.
É uma linguagem de programação gráfica, e ainda tem o
mesmas características de algumas das linguagens de alto nível que vamos
explorar mais tarde no semestre, entre elas C e
JavaScript e PHP.
Mas isso vai nos permitir evitar algumas das distrações
no início da sintaxe, coisas como ponto e vírgula, parênteses,
e outros detalhes secretos que, à primeira vista, não são apenas
em tudo intelectualmente interessante e tendem a entrar em
o caminho de uma compreensão fundamental.
Em termos de estrutura de suporte de agora à frente, esta realizada
ferramenta, CS50 discutir, que será ligada no seu curso
site ainda hoje, é o fórum de discussão on-line em
que você vai ser capaz de fazer perguntas uns dos outros e
pessoal, e é também uma ferramenta, como veremos na próxima semana,
que nós vamos usar bastante integratedly em
horário de expediente também.
Na verdade, o horário de expediente começar na segunda-feira, e, francamente, o primeiro
semana do horário de expediente é fundamental bastante baixa.
>> Eu não acho que você vai encontrar tudo o que scratch inacessível.
É bastante auto-explicativo, como veremos, e assim o que
vamos usá-lo para hoje é de extrair algumas das
ideias fundamentais, que, em seguida, persistem durante o
resto do semestre.
Mas a partir segunda-feira, às 8:00 PM através 23:00 será
o horário de expediente em Annenberg mais de pausa cérebro.
Seccionamento duas começará esta noite, então em algum momento deste
fim de semana, ir para cs50.net/section, e você vai
ser feitas uma série de perguntas.
Entre eles, como você descreveria o seu
nível de conforto a partir de hoje?
Não há nenhuma regra dura e rápida como a que está em que balde.
É exatamente o tipo de coisa que você provavelmente sabe, se você
estão entre aqueles a menos confortáveis ​​ou de outra forma.
>> E agora, orientações.
A especificação do conjunto de problemas para esta semana, tanto padrão
e edição de hackers iguais, está online no cs50.net partir de agora.
E você vai ver que a primeira dessas edições, a
edição padrão a cada semana, é acompanhado por algo que
chamar um passo a passo de código, uma sessão liderada por um dos
companheiros de curso de ensino para orientá-lo, fornecer
dicas sobre, e se você por um caminho particular quando se trata
para iniciar esses conjuntos de problemas.
Assim, com cada um destes conjuntos de problema, se você está sempre querendo
para si mesmo, onde eu começo, você começa com estes
orientações.
E, de fato, permitam-me apresentar Zamyla Chan, este
companheiro de anos de ensino que estará conduzindo cada
uma dessas orientações.
Zamyla?
>> [Aplausos]
ZAMYLA CHAN: Ah, oi, todos.
Meu nome é Zamyla.
Eu sou um júnior de engenharia estudar na Winthrop House.
Mas eu tentar encaixar como cursos de informática muitas ciência como eu
pode, por isso que eu estou realmente animado para ser líder esta
orientações do ano.
Passo a passo, para mim, eram uma parte essencial da minha CS50
experiência.
Durante o passo a passo, para cada p-set, nós vamos passar por
o conjunto de problemas juntos, olhar sobre os problemas, tipo de
dividi-los em mordidas gerenciáveis.
Eu vou te dar dicas, técnicas, para obter
através de e começando.
Espero ver todos vocês nas orientações.
Se você não pode fazê-lo em pessoa, então
por favor, entrar em sintonia online.
>> DAVID MALAN: Excelente.
Obrigado, Zamyla.
Então percebe que orientações são, de fato, na sexta-feira
tarde, mas este é deliberadamente por projeto de modo que
mesmo se você prefere não assistir às aulas na sexta-feira
tarde, os vídeos serão todos até o mais rapidamente sobre
o fim de semana.
Assim, perceber que cs50.net serão todos do Zamyla
orientações.
E que não há data e hora de hoje, 3:00 PM,
Harberd Hall, 104.
E alguns dos companheiros de ensino também têm preparado
algumas observações para você em revelia a dar-lhe um pouco de
perspectiva sobre o que sua experiência que entra e
saindo do CS50 como era.
Então, se pudéssemos diminuir as luzes por apenas um momento, eu dar-lhe
alguns dos funcionários do CS50.
>> JACKSON Steinkamp: Eu levei CS50 no ano passado como um calouro na
cair, e é absolutamente explodiu minha mente.
Eu nunca tinha tomado aulas de programação antes,
e nunca entrou com qualquer ciência da computação
experiência.
E, assim, eu ouvi o zumbido sobre a classe e
decidiu levá-la.
>> JULIA MITELMAN: Foi muito divertido, muito envolvente.
Eu ainda, até hoje -
Eu só vi recentemente eu tenho o disquete que David nos deu
em nosso primeiro dia de aula.
Eu tinha pendurado na minha parede.
Este é, provavelmente, um pouco nerd, mas eu desliguei na minha
parede durante a aula como um lembrete de como foi legal.
>> TRAVIS DOWNS: É tão embaraçoso.
>> JACKSON Steinkamp: Ciência da Computação é algo que você
deve tentar mesmo se você não for um para
as ciências tradicionais.
É a sua própria experiência, e CS50 vai se certificar de que você é
suportado bem com ela com seu verdadeiro exército de TFS.
>> ALI Nahm: Tomei isso como um calouro, e então eu fiz um monte
de novos amigos.
Eu também fui apresentado a esta concentração toda e
escola inteira de engenharia, e por isso eu recomendo
e as boas-vindas à nossa família CS50.
>> Yaniv Yacoby: CS50 apenas ensina a usar ferramentas
que são amplamente acessíveis.
Você só precisa de um laptop, você precisa de um navegador web, e você
Precisamos aprender a escrever algum código, e você pode realmente construir
coisas legais.
>> KAREN XIAO: É tão legal ser capaz de fazer algo
e as pessoas usá-lo e as pessoas vê-lo, e isso é
o que eu realmente adoro.
>> TIM MCLAUGHLIN: - um senso de comunidade, eu acho que, neste
naturalmente mais do que qualquer outro curso que fiz até agora.
Você não está apenas tomando outro -
você não está enchendo outro requisito.
Você não está indo só para palestras e indo para a seção.
Mas você está fazendo toneladas de coisas que são todos sobre
programação e tudo sobre tecnologia, mas não
realmente se sente como uma classe maior parte do tempo.
>> DOWNS TRAVIS: E no primeiro dia, eles distribuíram bolo, e
I foi imediatamente vendido.
>> JACOB PRITT: doces e pizza grátis.
>> ZAMYLA CHAN: - independentemente de seu nível de interesse, eu acho que
que CS50, você vai se divertir, e você vai ser intelectualmente
estimulada.
>> MARK GROZEN-SMITH: É sempre uma festa na sala de aula, e é uma
festa a cada noite trabalhando em seu p-set.
>> JACKSON Steinkamp: Cada vez que você terminar um conjunto de problemas, você
vai se sentir como você terminar um projeto.
>> MELISSA NIU: Foi o primeiro ano, e eu estava feito compras.
Eu tinha meus quatro classes pronto, e eu estava em Annenberg.
E eu topar com um amigo, e ele diz: ei, eu estou comprando
esta classe chamada CS50, e você deve vir comigo.
Acabou levando-o a queda, e depois que a classe, eu
pensei que talvez eu vou menor no CS.
Mas aqui estou eu, três anos depois, ainda estudando computador
ciência e realmente fazê-lo como um grande, e eu amei cada
momento da mesma.
>> ROB BOWDEN: Eu não tenho idéia.
>> ALI Nahm: Vamos ver.
>> MELISSA NIU: Loucura.
>> COLUNA 1: Eu sinto que eu ficaria muito clichê.
Eu tinha acabado de dizer, como, impressionante.
>> Yaniv Yacoby: Acessibilidade.
>> JACOB PRITT: doces e pizza grátis.
>> TRAVIS DOWNS: Não é possível desligar uma classe que distribui bolo.
>> TIM MCLAUGHLIN: Energética.
>> Vipul Shekhawat: Essencial.
>> ROB BOWDEN: Deixe-me pensar em uma resposta.
Eu acho que eu tenho algo.
Oh, Deus.
Sim, meu nome é Rob Bowden, e este é o CS50.
>> [Aplausos]
DAVID MALAN: Tudo bem, então vamos começar a pintar um quadro
da direção em que podemos ir, e vamos introduzir
este conceito aqui conhecido como pseudocódigo.
Assim, não é um pseudocódigo programação
linguagem em si.
Não é nada técnico, por si só, mas é apenas uma espécie de
maneira geral de se expressar com bastante precisão,
algoritmicamente bastante, bastante processualmente, mas sem
ter que se preocupar com o idioma que você está expressando
se dentro
É algum modelo de Inglês e linguagens de programação com
que acontecer de você estar familiar, para que possamos começar
escrever este tipo de coisa, como vamos nós.
E, de fato, José, eu poderia pedir-lhe em cima do palco para ser
escriba aqui?
Eu tenho ido à frente aqui com antecedência e esquecido de colocar
em algumas meias hoje, e este vai ser entre os nossos mais
exemplos ridículos.
>> Agora, eu preciso de você aqui.
Eu vou fazer a parte meias.
Portanto, temos aqui um bloco de rascunho pouco.
Este é literalmente apenas TextEdit em um Mac.
Nós não estamos realmente indo para escrever um programa executável, mas
nós apenas estamos indo para começar a esboçar baseada em pseudocódigo
em alguns dos conselhos que você fornecer para mim aqui.
Então, aqui está a minha pilha de meias em casa.
Eu não tenho meias quando eu acordar de manhã, e agora
preciso escrever um programa, um algoritmo do tipo, com o qual
para obter estas meias nos meus pés.
E ao longo do caminho, vamos ver se a gente tropeçar, ou encontrar,
algumas das idéias que você vai ter que começar a
pensando muito mais a sério quando a programação
para que seus programas não se comportam bem como pretendido.
>> Então eu sentar aqui.
Eu tenho a minha pilha de meias.
Qual é a primeira coisa que um ser humano racional faria
fazer quando o objetivo é colocar um par de meias?
Alguém me dê um passo, e apenas um passo.
Sim?
AUDIÊNCIA: Dobre para baixo.
DAVID MALAN: Dobre para baixo, tudo bem.
Passo dois.
AUDIÊNCIA: Pegue sua meia.
DAVID MALAN: Pegue sua meia.
Ok, ambiguidade tão leve aqui, e este é um dos primeiros
pedras de tropeço que nós estamos supostos deliberadamente
encontrar aqui.
É um pouco ambígua, então pegue sua meia.
Tudo bem, vou levar um presente, mas um computador, perceber em apenas um
pouco, não vai ter esse tipo de instinto humano apenas
escolher o mais próximo.
Nós vamos ter que começar, em pouco tempo, expressando
nos mais precisamente.
>> Tudo bem, então o segundo passo é pegar o seu pé de meia.
Vamos levá-lo.
Etapa três.
Na parte de trás.
AUDIÊNCIA: Encontrar um par correspondente.
DAVID MALAN: Encontre par.
Ok, então isso é bom.
Eu tinha que escolher essa meia.
Assim, o objetivo é encontrar uma meia correspondência, agora, mas o que
que isso significa?
Um ser humano razoável estar, bem como na quarta-feira, quando eu só
sabia como encontrar Mike Smith, em um livro de telefone, apenas uma espécie de
foi com seu instinto.
Mas aqui, é, obviamente, esta meia aqui, mas de um computador
Não vai ser tão instintivo.
Um computador vai ter um conjunto de bits, como nós
discutido na quarta-feira, e esses são
organizada de alguma forma na memória.
Mas o ponto é que um computador tem apenas a capacidade de
olhar para as coisas de uma vez, e de fato, mesmo que
humanos - ainda que se sente como eu olhei para baixo e uma divisão
segundo depois eu sei onde o meia é, meu cérebro e meus olhos
presumivelmente fez um rápido roçar desses meias, e depois fechada
para o que está em causa.
>> Então, se vamos ser ainda mais deliberada agora como um computador,
como faço para encontrar esse par de correspondência?
Bem, temos que interagir.
Temos que talvez loop sobre essa confusão de meias no
piso em que eu digo algo como PARA CADA meia, buscá-lo
-se, e se a mesma forma e tamanho como o outro, ENTÃO
ponto, ponto, ponto, vamos continuar a história.
Assim, para cada meia, assim que eu pegar um presente.
Eu verificar isso é igual a este.
Não é, por isso eu coloquei de lado lado.
Então eu iterar novamente.
É este um igual?
Não, não é, então eu colocá-lo de lado.
É este?
Não.
Esse?
N, e assim por diante.
E então, finalmente, espero, vou encontrar esse meia aqui.
Então, se é a mesma forma, tamanho, pegue.
>> E agora, qual seria nosso próximo passo aqui?
Sim?
AUDIÊNCIA: Identificar a direita da esquerda.
DAVID MALAN: Ok, identificar direita e esquerda, de modo
Felizmente, esse tipo de obras.
Um pouco simétrica, ou eu apenas cansados ​​dessa forma.
Tudo bem, então eu identifiquei o direito.
E agora, antes de prosseguir, deixe-me apontar o que José
fazendo aqui como uma espécie de programador versado.
Então, novamente, não há uma maneira de fazer isso, mas além de apenas
numeração das linhas, Joseph já começou a fazer isso
espécie de recuo.
Na verdade, esta é uma convenção muito comum na programação,
pelo que, quando você faz algo iterativo, looping estilo, como
estamos implicando com a frase Inglês "para cada
Meia, "a convenção em pseudocódigo e, como veremos,
linguagens de programação normal, é apenas travessão.
Pressione a barra de espaço, algumas vezes, pressione a tecla Tab ou similar,
para que aninhada embaixo "para cada meia" é o pedaço de
coisas que você precisa fazer, como resultado desse loop.
Então, isso é tudo o que está transmitindo semanticamente.
Agora, entretanto, o "Se é a mesma forma e tamanho," o
fato de que "Take it" é recuado ainda significa apenas
essa é a única coisa que você deve fazer se essa condição,
se esse ramo, que bifurcação na estrada, é de fato verdade.
>> Então, agora aqui, estamos em quatro etapas, identificar direita e esquerda.
Eu identifiquei direita.
Me dê o passo cinco.
E, tecnicamente, podemos realmente chamar
o para cada coisa -
você provavelmente deve numerar todas as linhas se
vamos fazer isso.
JOSÉ: [inaudível]
DAVID MALAN: [inaudível]?
Ok, tudo bem, tudo bem, vamos fazer do seu jeito.
Tudo bem, então passo cinco, como é que vamos fazer a meia direita?
Como devemos proceder seguinte, aqui?
Sim?
AUDIÊNCIA: Levante a perna direita.
DAVID MALAN: Levante a perna direita, tudo bem.
Passo seis?
Rapidamente.
Sim.
AUDIÊNCIA: Encontrar uma extremidade aberta do meia.
DAVID MALAN: Ok, encontrar a extremidade aberta do meia.
Tão bom.
Então, aqui, honestamente, um instinto muito comum seria apenas
colocar em meia direita, mas que também é bastante ambígua.
A menos que o computador ou humano sabe exatamente o que isso significa,
não vai ser para executar essa, por isso aqui, eu tenho
encontrou a abertura do estoque.
Passo sete?
AUDIÊNCIA: Toque os dedos dos pés.
DAVID MALAN: dedos Touch.
Ok, então agora nós vamos -
Tudo bem, eu vou tomar algumas liberdades aqui.
Obrigado.
Passo oito?
Coloque meia.
Ok, então agora eu, acho que estamos perto o suficiente para classificar de tomar
isso em casa.
Tudo bem, então este sobe.
Eu vou tomar algumas liberdades com o que significa, na verdade.
Coloque a meia na.
Tudo bem, agora o passo nove?
AUDIÊNCIA: Coloque o pé.
DAVID MALAN: Obrigado.
Passo nove, colocou o pé para baixo, e agora, podemos repetir.
Assim, presumivelmente, agora podemos ir para o passo 10 e dizer identificar
deixou meia, mas isso é provavelmente já feito.
>> E então, eu posso classificar de repetir estes passos.
Mas esse tipo de petição de princípio.
Antes, a última vez que queria repetir algo, nós
fez isso de forma iterativa, de novo e de novo, um FOR
Cada loop por assim dizer.
Será que faz sentido usar um circuito para lidar com ambos
à esquerda e à meia certo?
Porque parece que estas operações são muito
idênticas, exceto pelo fato de que um começa aqui e um
começa aqui?
Nós loop, ou vamos apenas manter as medidas de escrita
10 e 11 e 12?
AUDIÊNCIA: Loop.
>> DAVID MALAN: Ok, então loop.
Na verdade, eu poderia ter dito apenas continuar.
Então, por que é este o caso?
Bem, este é realmente o primeiro da nossa não-óbvio
decisões de projeto e, de fato, uma das métricas com as quais
vamos começar a avaliar, para nós e para você, o
qualidade de um programa é o quão bem desenhado que é.
Você já fez a quantidade mínima de trabalho necessário para
fazer o trabalho o mais rapidamente, quer em termos de
o seu tempo ou em termos de tempo de funcionamento do computador?
Quantas operações que é preciso para executar?
Então, sem dúvida, esta é uma oportunidade para um loop porque
assim que eu começar a copiar e colar, como Joseph efetivamente
iria começar a fazer em um momento, você está perdendo o seu tipo de
tempo, e você está sendo duplamente expressivo.
>> Mas, ao mesmo tempo, trata-se realmente apenas dois especial
casos, à esquerda e à direita.
E que, antes, eu poderia ter 10 ou 20 ou mais meias em
uma pilha, ele definitivamente não faz sentido ter 50 linhas de
código dizendo verificar esta meia, então a próxima,
então a próxima.
Aqui, é um pouco menos óbvio, e gostaria de propor
que poderia ir de qualquer maneira.
Podíamos ter esse ciclo, embora apenas laços
duas vezes, ou podemos simplesmente copiar e colar um pouco
aqui, a fim de começar o trabalho feito.
Mas este programa é buggy, por assim dizer.
Ele pode ter alguns erros, erros, ou casos de canto, de modo a
falar, que nós realmente não antecipar.
Nada deu errado desta vez, mas o que poderia ter dado errado
durante a execução deste programa?
AUDIÊNCIA: Você não tem nenhum meias.
>> DAVID MALAN: Então não pode haver meias há qualquer.
Então, vamos considerar que caso de canto.
Então, se nós poderia rolar para trás até o primeiro passo, então o primeiro passo foi
curvar-se, para que o check-out.
Passo dois, pegar sua meia, mas em seguida, encontrar meias combinando,
identificar direito.
Nós meio que fez um monte de hipóteses, e isto é,
francamente, porque o programa às vezes falha.
Se você, o programador, têm feito certos pressupostos, como
certamente não vai ser meias ou, certamente, lá vai
para ser deixado em memória do computador, certamente não vai
ser espaço livre em disco no disco rígido -
Bem, se você fizer essas premissas, e que não é,
na verdade, a realidade, quem sabe às vezes o que o computador de
vai fazer?
E às vezes, quando você começa a bola de praia fiação ou o
O Windows congelado ou similar, que é precisamente porque alguns
programador não antecipou os casos chamados de canto.
O que mais poderia ter dado errado neste programa?
Sim?
>> AUDIÊNCIA: Você não tem uma perna direita e um na perna esquerda.
DAVID MALAN: Ok, pode não ter tanto perna de um direito e um
perna esquerda, e por isso este programa pode não ser universalmente
aplicável.
Outros?
AUDIÊNCIA: Você pode ter pego uma meia órfão.
DAVID MALAN: Eu poderia ter pego uma meia órfão, portanto, um
de não-casamento meia que só não tem irmãos, porque eu tenho
perdeu, está rasgado, é na lavagem ainda, ou algo semelhante.
De modo que, também, não tem sido tratada.
Sim?
AUDIÊNCIA: Você já deve ter meias.
DAVID MALAN: Eu já poderia ter meias.
Eu realmente não verificar.
SE você não tem meias, em seguida, proceder para fazer
linha de um e dois.
E isso poderia acontecer.
Você dorme com as meias e similares, assim
que, também, um caso de canto muito razoável.
E talvez um outro?
AUDIÊNCIA: A meia é de dentro para fora.
DAVID MALAN: Então, a meia é de dentro para fora, por isso fizemos nenhum erro
verificar, em suma.
Nós não verificar se o estado do mundo é como nós esperamos.
Nós não verificar se realmente encontramos o que está procurando.
>> E mesmo que esta é uma espécie de exemplo ridículo
envolvendo meias, no final do dia, isto é exactamente o
tipo de mentalidade que você precisa ter ao escrever programas,
mesmo em zero, bem como em C, em JavaScript, em PHP,
porque caso contrário, seus programas exibem a
equivalente do que bola de praia fiação ou apenas produzir
resultados imprecisos.
Graças tantos aqui para o nosso escriba de Joseph.
[Aplausos]
>> DAVID MALAN: Tudo bem, então o que é, em
fato, um programa de computador?
Bem, vamos dar uma rápida olhada em uma
um representante aqui.
Portanto, este é um programa escrito em uma linguagem chamada C. C é
bastante antigas esses dias, mas muitas novas linguagens são construídas
em cima dela.
Na verdade, PHP, uma das linguagens de web-centric vamos
usar para final do prazo, ela própria tem o que é chamado de
intérprete, um programa que está escrito em C, mas mais sobre isso
em muitas semanas a partir de agora.
Mas este programa, e isso é o que significa escrever um
programa, embora muito simples.
Temos alguma sintaxe críptica aqui, mas você pode
provavelmente acho que, mesmo se você nunca programou antes, o que
este programa faz.
Na verdade, eu não sei o que printf é, mas certamente imprimir
evoca a idéia de imprimir algo.
E então sim, este programa está indo finalmente para imprimir
as palavras "Olá, mundo".
>> Agora, se você tem um Mac ou um PC ou um computador com Linux, as probabilidades
são, pelo menos, se você baixou algum livremente
software disponível, você poderia ter sido escrita de programas em
seu próprio computador portátil por um bom tempo agora.
No Mac OS, por exemplo, há um programa chamado
Terminal que vem com um Mac, que normalmente é a sua
Utilitários da pasta, e que, geralmente abre um preto e
branca ou uma janela em branco e preto em que você tem um
prompt no qual você pode digitar comandos.
Portanto, esta é realmente uma reminiscência do que os computadores
costumava ser antes gráfica de usuário
interfaces, interfaces gráficas, veio junto.
Agora, no Windows, você tem um mecanismo semelhante na forma
do prompt de comando.
>> Mas o que eu vou fazer aqui é abrir-se, digamos,
TextEdit de novo, então o mesmo programa que estava usando para
um momento pseudocódigo atrás, e eu estou indo para ir em frente e
escrever o meu primeiro programa.
Incluir stdio.h, o que isso significa, int main
vazio, o que isso significa, e depois no meio aqui,
printf ("Olá, mundo".). E então citação perto,
fechar parêntese, ponto e vírgula.
Agora eu estou indo para ir em frente e bateu Command-S. Vou
para ir em frente e salve este como hello.c, para a convenção em
no mundo da programação C é o nome do arquivo de ponto c.
Vou só colocar no diretório John Harvard Casa,
aqui, clique em Salvar, e agora eu estou indo para ir para este
janela de terminal, que novamente é o prompt preto e branco
onde eu possa executar comandos.
>> Posso executar programas, digitando seu nome, e não por
duplo clique ícones no sentido usual.
Mas a coisa é sobre o C é que uma língua como o primeiro C
vem desta forma, algo chamado código fonte.
Algo que parece um pouco como o Inglês, mas é
definitivamente menos como o Inglês do que um pseudocódigo José
momento atrás.
É um pouco mais misteriosa.
Parece seguir alguns padrões ou regras.
O fato de eu ter chaves, vírgulas, citações,
chaves ângulo, se sente como um computador veio com essa
tipo de linguagem.
Mas se eu for, agora, para esta janela de terminal, que pode executar um
de comando que vai converter esse código-fonte é
algo chamado de código objeto.
Isso vai converter Inglês sintaxe semelhante a zeros
e uns, os mesmos tipos de zeros e uns, nós
falou sobre quarta-feira.
Agora, eu estou indo para executar um comando chamado Clang.
Mais sobre isso nas próximas semanas, mas é um programa com
que eu posso converter hello.c em um monte
de zeros e uns.
>> Agora, eu executar esse comando.
Já corri Clang, e então eu disse-se em executar este arquivo
chamado hello.c, que eu criei um momento atrás, e
nada parece acontecer.
Mas, na verdade, se eu coloquei em volta do meu diretório home, gostaria de ver
que este programa a.out estupidamente chamado agora existe.
Este é apenas o nome padrão para um programa ao escrever em
C. Podemos substituir este, eventualmente, mas é o a.out
nome do programa que eu apenas convertidos em zeros e uns.
E agora que está zeros e uns, meu Mac, neste caso, ou
PC com Windows, pode entender os bits, os
zeros e uns.
E então quando eu aperte Enter, eu vejo "Olá, mundo!"
>> Mas é um pouco buggy.
Eu não sabia bem dizer "Olá, mundo: ar: -! Jharvard". O ar é
o nome do meu computador.
Jharvard é o nome da conta, então o que eu claramente
omitir do programa?
Algum tipo de quebra de linha.
Eu não bati o equivalente a Enter ou o retorno de carro,
e isto é, novamente, prova do facto de que computadores pode
só fazer o que lhes dizem para fazer.
E o fato de eu não dizer ao computador mover o
cursor para a próxima linha -
bem, isso certamente não vai apenas fazê-lo
presunçosamente para mim.
Então, se eu voltar para o meu programa, e eu digo \ n -
Então, \ n, como veremos em breve, é o caminho da
representando coisas estranhas como novos caracteres de linha, coisas
que de outra forma seria o resultado da
pressionando a tecla Enter.
Mas, por enquanto, só sei que bater a tecla Enter se
apenas fazer o nosso código parecer estranho, para que o mundo decidiu, você sabe
o que, para manter as coisas mais bonitas, para mantê-lo em uma linha, vamos
apenas dizer \ n representa uma nova linha.
Deixe-me voltar a guardar o meu arquivo, volte para a janela do terminal, e
re-correr a.out, Enter.
Ainda buggy, mas por quê?
>> AUDIÊNCIA: [inaudível]
DAVID MALAN: Sim, por isso eu preciso recompilá-lo.
Então, para compilar um programa apenas significa convertê-lo de fonte
código para código objeto do código-fonte, para zeros e uns.
Agora, o simples facto de eu acertar Economize neste TextEdit não tem
tendo sobre os zeros e uns, porque eu preciso primeiro
diga Clang hey, eu mudei as linhas de código, o
código fonte.
Você precisa regenerar a.out.
Nada parece ter acontecido, mas, em um computador,
na linha de comando, por assim dizer, quando nada acontece,
que normalmente significa que está tudo bem.
Quando algo acontece, isso significa
você estragou tudo, em geral.
>> Então, vamos agora ir para a.out, e de fato agora, eu tenho "Olá,
mundo ".
E agora, o que acontece com esses zeros e uns?
Onde, de fato, são aqueles?
Bem, eu não posso realmente só tipo de fuçar muito
eficazmente.
Deixe-me abrir o Editor de Texto.
Aqui está a.out.
Deixe-me ir em frente e abrir isto, e este é, aparentemente, o que o meu
programa parece.
Então, eu abri, não hello.c, mas a.out.
Mas este não é realmente o que o meu programa realmente é.
Claramente, este é um tipo de caracteres alfabéticos.
Eu não vejo nenhum zeros e uns, mas este é
porque a.out é um programa.
Zeros e uns - mas TextEdit, como o nome sugere, é
assim como o bloco de notas do Windows, é apenas um editor de texto, por isso é
confundindo todos esses zeros e uns como
se fossem, o que?
Caracteres ASCII.
>> Então, lembro na quarta-feira, só veio com essa
mapeamento arbitrário de números, ou bits, para letras do
alfabeto e sinais de pontuação e afins.
Então TextEdit, que é um editor de texto é interpretar mal
estes padrões de zeros e uns que são supostos ser
palavras de impressão, como "Olá mundo,". É exibi-los
como ASCII, e é por isso que parece um pouco confuso.
Agora, existem algumas dicas de correção aqui.
Observe se destacar, há uma pitada de verdade "Olá,
mundo ", em algum lugar em que o programa é
a frase que escreveu.
Mas vamos em frente e ver agora com um programa diferente.
Este não é que vamos usar, que muitas vezes, mas ele também vem com
um Mac e vai estar dentro do aparelho CS50.
Deixe-me ir em frente e abra com um programa chamado XXD.
>> Voltar no dia, a maioria dos programas foram nomeados bastante enigmaticamente,
e assim a tendência continua.
Mas-b significa cuspir fora este programa como binário.
Não executá-lo.
Mostrar-me como zeros e uns, e este é o C
programa que acabou de escrever.
Agora, eu, como um ser humano aqui, eu sinceramente não tenho idéia do que
estes vários padrões de zeros e uns representam.
Voltar no dia, eu, com meus cartões perfurados ou similares, seria
realmente tem que procurar o que estes vários padrões de
01111000, realmente representam.
Ou pior, eu teria que fazer a perfuração ou a criação
destes padrões de zeros e uns.
Mas, por agora, assumir a fé que uma CPU, Intel Inside, assim
para falar, dentro de todos os nossos computadores estes dias, sabe
como interpretar esses zeros e uns.
E alguns zeros e uns significam impressão.
Alguns zeros e uns significa reproduzir um som.
Alguns zeros e uns significa tomar a entrada do usuário a partir de um teclado.
Há todos os tipos de padrões diferentes, mas, felizmente,
como seres humanos, em geral, só precisa se preocupar com a programação em
este nível bastante elevado.
E em outras classes CS você pode mergulhar mais fundo e olhar
em coisas como os zeros e uns, ou ainda
outras coisas ainda.
>> Então agora vamos converter este.
Vamos passar muito rapidamente para longe de C e passar para algo um
pouco mais confortável, um pouco mais emocionante, em que
podemos voltar nossas animações e sons e afins que
claramente ter escapado nós neste
Interface bastante primitiva.
Portanto, este mesmo programa em C pode ser representada, já neste
linguagem de programação chamada scratch como se segue.
Isso é o equivalente a este programa Olá mundo escrito em
este enigma linguagem de estilo peça chamada Scratch.
Então deixe-me ir em frente e abrir este programa muito.
É novamente chamado Scratch.
Ele está disponível gratuitamente, e esta é a mesma coisa que
começou hoje em.
>> Então, isso aqui é zero, e ele está dividido em alguns
peças diferentes.
Na direita topo, temos a chamada fase, e
de fato, que é onde os cookies
realizado apenas um pouco atrás.
E em que estágio estão as coisas chamadas de sprites, caracteres ou
objetos ou entidades.
Isso realmente não importa como você pensa deles, mas eles
são programáveis, coisas móveis e, neste caso, esta
programa que nosso aluno escreveu tem um casal de gingerbread
biscoitos, um par de biscoitos circulares, todo um conjunto de
corações, um monte de óculos.
Devido a isso, ele ou ela é capaz de programar cada um desses
caracteres individuais separadamente.
>> Agora, o que isso significa para programar esses personagens?
Bem, deixe-me ir em frente e clique em este cookie mão esquerda
e vá para a esquerda topo aqui.
No canto superior esquerdo da tela do meu agora é o
assim chamada área de scripts.
Esta é uma espécie de lousa em branco, inicialmente, sobre o qual eu posso
arrastar e soltar peças do puzzle que, francamente, fazer
exatamente o que eles dizem.
No topo desta pilha de peças de quebra-cabeça é a palavra
Quando clicado Bandeira Verde, e se você não percebeu antes,
do jeito que eu comecei a música clicando cookie foi, literalmente,
uma bandeira verde.
De modo que parte do enigma no canto superior esquerdo há significa que quando o
cliques humanos a bandeira verde, passou a fazer
as seguintes coisas.
>> Agora, o que eles biscoito continuar a fazer?
Eu realmente não sei como interpretar isso ainda, mas o
biscoito aparentemente definir sua ranhura para zero, então ele esperou
três segundos, em seguida, mudou o seu grupo a um, então
esperou um segundo, em seguida, mudou seu
sulco de volta a um.
E então, isso realmente parece um pouco de um bug, não deve
tem que mudar sua rotina e outra vez a menos que seja
sendo alterada em outro lugar, mas esta série de passos é o que está
ditando o comportamento desse cookie particular.
Então, vamos realmente rolar para trás e não olhar para algo
tão complexa ainda.
Deixe-me ir em frente e vá em File, New,
e ter uma ficha limpa.
>> Então, agora, eu realmente ter uma área de script vazio, um palco vazio,
com nosso scratch Sprite padrão, e na parte superior esquerda
na minha tela que eu tenho a palete de todos os seus
disponíveis peças do puzzle.
E não vai passar quase que muitas dessas coisas
hoje, porque, mais uma vez, a maioria são auto-explicativo, mas vamos
tentar categorizá-los e apontar as semelhanças
com estas línguas futuras que vamos mergulhar.
E na parte superior esquerda aqui é a primeira Bandeira Verde Quando clicado,
então deixem-me arrastar esta aqui, ampliar um pouco.
E se eu clicar na bandeira verde, nada realmente acontece porque
Eu não ter anexado qualquer lógica, qualquer declaração por assim dizer, a
que a bandeira verde, então deixe-me ir até a
Categorias mais aqui.
Atualmente estou na categoria de controle.
Estou em vez de ir para descer para a categoria parece, e
há um monte de coisas aqui que dizer Diga,
Pense, mudança de cor do traje Switch,.
>> Assim, você pode fazer coisas tolas com trajes e
sons e outros semelhantes.
Deixe-me ir em frente e dizer Diga, e agora perceber como eu arrastar
e soltar esta peça de quebra-cabeça, ele vai querer trancar
na forma correspondente.
Então, quando eu ir em frente e deixar de ir o meu mouse, eles travam
juntos, e agora se eu for até aqui e clique na bandeira verde,
o gato, de facto dizer Olá, porque isso é o que está dentro
desta caixa branca.
Veremos em breve que esta caixa branca é o que é chamado de
argumento, ou um parâmetro.
É um modo de alterar o comportamento de, neste caso, uma
enigma, mas se eu quero dizer exatamente o que eu disse
antes, dizer Olá, mundo, agora eu posso voltar aqui,
jogue e "Olá, mundo" é o que é dito.
>> Então, nós estamos literalmente a programação agora.
Não é tudo o que convincente de um programa, mas pelo menos
é um pouco de algo mais convincente do que parece, a
À primeira vista, como este.
E podemos muito rapidamente obter ainda mais expressiva
porque em zero, como em outras línguas, há todo
tipos de declarações, não apenas dizer algo ou impressão, mas
você pode fazer coisas como esperar, como acabamos de ver com
o cookie, um determinado número de segundos.
Você pode reproduzir sons no ambiente do Scratch apenas
como você pode em um jogo normal de som programa de computador.
Você pode verificar o que são chamados de expressões booleanas.
Então, agora, vamos começar a acrescentar ao nosso kit de ferramentas alguma terminologia
que, na verdade, refere-se ao exemplo que José e eu fiz
aqui com as meias.
Então declarações são apenas declarações de fatos.
Fazer isso.
Uma directiva para o sprite, ou eu humano a, para fazer alguma coisa.
Uma expressão booleana é algo que tem um valor, uma
chamado valor de verdade, que é tanto um zero ou um, falso ou
verdadeiro, ou desligar, sim ou não.
Isso realmente não importa como você pensa sobre isso, mas é um
estado binário.
Como Nate discutido em vídeo de quarta-feira, dois
coisas diferentes.
>> Assim, em Scratch, expressões booleanas acontecer a olhar
como esses objetos azuis aqui, e neste caso, a questão
marca implica que você está fazendo uma pergunta.
É o gato, ou o sprite, tocando o ponteiro do mouse?
Portanto, este é apenas um exemplo de um bloco Scratch que está acontecendo
que nos permitam verificar sim ou não, é o mouse tocando o
Sprite na tela?
E isso pode ser útil se você realmente quer fazer as coisas
com o mouse.
Além de expressões booleanas, temos coisas
como é o mouse para baixo, de modo que você pode detectar que tipo de
questionar também.
Nós podemos fazer matemática, se você realmente quer, e não há
usos realmente mais atraentes para este do que apenas pura
aritmética, como vamos ver.
Pseudo aleatoriedade e fazer o seu programa parecem pensar
ou se comportar de forma diferente com base em alguns valores aparentemente aleatórios,
e então temos coisas como expressões booleanas como AND.
Então, se você realmente quiser conferir dois valores, veremos em
Raspe que podemos realmente testar se este é
verdadeiro e isso é verdade.
Por exemplo, no caso das meias, que poderia ter a
muito final a pergunta se é na meia esquerda e direita soco
é sobre, saia.
Está tudo feito para o dia, de modo que seria uma
oportunidade para isso.
>> Então, vamos em frente e tentar remendar alguns destes juntos
e ir para um par de exemplos mais
convincente do que este.
Então deixe-me ir em frente aqui e abrir alguns dos exemplos
que sempre estará no site do curso, bem como, e
abrir hello2.
Assim, em hello2 aqui, temos um programa que está fazendo alguns
as coisas, mas ele não está fazendo isso de forma tão eficaz como poderíamos.
Então, aqui diz "Olá, mundo" por um segundo e então espera
por um segundo.
E depois faz isso de novo, e depois faz isso de novo.
Então, se eu clicar na bandeira verde, Scratch diz "Olá, mundo.
Olá, mundo.
Olá, mundo. "E este é, obviamente, candidato agora para
melhoria.
>> Qual é a melhoria marginal, esperançosamente, nós podemos
agora fazer scratch se apóia o conceito de?
Algum tipo de laço.
Algum tipo de repetição, agora, seria bom, então deixe-me
realmente tentar isso.
Deixe-me realmente ir e passar isso.
Então aviso pode separar blocos tão facilmente como você pode adicionar ao
anexá-los.
Deixe-me ir sob controle, desloque-se aqui, e de fato,
há essa peça do puzzle aqui Repeat, e para sempre e
Se para sempre.
Portanto, há uma série de maneiras de expressar construções de iteração
em Scratch.
O que eu provavelmente quer aqui não é para sempre, porque eu só
quer que isso aconteça três vezes, mas, provavelmente, repetir.
Então deixe-me arrastar Repita aqui, arraste e solte-o, e
agora, em vez de dizer "olá, mundo" três vezes,
deixem-me arrastar esta parte do enigma aqui.
E mesmo que não parece se encaixar, o programa é inteligente
o suficiente para perceber que vai crescer para preencher, por isso é o
formas matéria que, e não o tamanho absoluto.
Deixe-me mudar a repetição para três, e agora deixe-me ir
frente e arrastar espere um segundo de lá também.
Vai tirar em tão bem, e agora eu estou indo para arrastar
esses caras por aqui e simplesmente jogá-los fora, porque eu
não precisamos mais deles.
Deixe-me o zoom e clique na bandeira verde agora, e temos
o mesmo programa, mas, como eu previ antes, melhor
concebida, pois você pode imaginar o quão ruim este programa
seria, certamente, esteticamente, se você tivesse que
começar a copiar e colar, copiar e colar, ou
arrastando e soltando as mesmas coisas danado novamente e novamente.
>> Agora, simplesmente dizendo coisas na tela, imprimindo no
tela, realmente não tudo o que emocionante, então vamos abrir uma
variância terceiro aqui.
E agora, como você vai ver, isso vai rapidamente tornar-se irritante -
[MEOW]
DAVID MALAN: - mas é também uma espécie de bonito.
[MEOW]
DAVID MALAN: Ok, então melhor, e nós certamente pode usar isso
mesma transição de chunking isto em um looping
estrutura, mas vamos torná-lo mais interessante ainda.
>> Deixe-me ir à frente e abrir uma variação quarto aqui, onde eu
levar as coisas um passo adiante.
Assim, de acordo com este, bobo que esta é a primeira
relance, o que é este programa vai fazer?
Vai meow uma vez.
Por quê?
Bem, se é, tanto quanto eu sei, sempre menos do que dois.
Não há noção de aleatoriedade aqui.
Tenho literalmente hard-coded um e dois, mas esta é uma
exemplo, agora de realmente usar uma expressão booleana.
Muito parecido como fez José em seu pseudocódigo, o recuo SE
encontrar meias combinando então faça o seguinte, temos aqui
uma expressão se um é menor do que dois então -
e de fato temos até um pouco de recuo,
onde o roxo é ligeiramente recuado para a direita -
Então você está indo jogar o miado de som.
Agora, no presente caso, que um é sempre menor do que dois, de modo que este
é uma espécie de desperdício de uma condição.
Mas nós vamos ser capazes, como veremos, para ligar em outras coisas
esses espaços reservados, onde um e dois são agora.
Então, vamos agora avançar para exemplo cinco destes vários
olás e olhar para o que este programa vai fazer.
>> Então, agora, em uma frase Inglês, como isso
programa se comportar?
AUDIÊNCIA: Meows metade do tempo.
DAVID MALAN: metade do Meow do tempo, por isso esta é uma forma de
transmitir uma idéia muito simples.
Mesmo que aconteça estar usando algumas desigualdades aqui
em alguns números, isso é realmente apenas um programática
Assim, de forma precisa, de dizer se a moeda der cara, ir
frente e miau.
Ou, inversamente, se a tirar coroa, não meow.
E, neste caso, como é que vamos expressar isso?
Vamos escolher um número aleatório de 1 a 10, e se isso
número é menor que 6, vá em frente e miau.
E como este aqui?
Bem, novamente, observar apenas o arrastar e soltar e
coisas encaixe.
>> Então, agora vamos ver se esta aleatoriedade funciona.
Deixe-me ir em frente e clique na bandeira verde.
[MEOW]
DAVID MALAN: Okay.
[MEOW]
DAVID MALAN: Okay.
Ok, bom, então temos cabeças, as cabeças, caudas de forma eficaz.
Caudas.
[MEOW]
DAVID MALAN: Heads.
[MEOW]
DAVID MALAN: Excelente.
É sempre difícil quando você começa apenas estatisticamente ruim
correr, e é todos os chefes, e o programa realmente não
funcionar como seria de esperar.
Mas, desta vez, funcionou, e parece que temos, se nós
isto, um número infinito de vezes, a probabilidade de 50%.
Agora, novamente, não tão interessante, apenas fazendo gatos
miau, então vamos ver se não podemos avançar este um pouco mais
aqui na versão seis.
Então, agora, temos a versão realmente irritante -
[Miados a cada poucos segundos]
DAVID MALAN: - e isto é o que é conhecido, em geral, como um
loop infinito.
>> Laço tão infinita neste caso se sente mal.
É definitivamente vai começar a soar ruim, e ainda infinita
loops não são sempre ruins.
Você pode pensar em contexto de programas de computador onde você
realmente quer um loop infinito?
Sim?
AUDIÊNCIA: Quando você quer verificar uma condição.
DAVID MALAN: Ok, quando você quer manter a verificação de uma condição?
Como o quê?
AUDIÊNCIA: [inaudível]
DAVID MALAN: Ok, bom, então se você tinha algum programa, alguns
tipo de coisa de automação residencial, onde pretende constantemente
monitor é algo que o caso.
São as luzes?
São as luzes, porque talvez você tem um timer, e
você quer que eles para sair, talvez seja necessário fazer alguma coisa
novamente e novamente.
E, na verdade, falando de temporizadores, qualquer um de vocês que
relógios em seu computador ou relógios digitais, que é uma
loop infinito.
Ele continua a atualizar a hora porque é constantemente
verificação e controlo e verificação tem o tempo mudou,
e se sim, oh, meu deus.
O relógio é finalmente alterada.
Ele precisa mostrar que o valor para você.
Assim, enquanto a maioria dos laços de tempo infinitos são um erro,
ou pelo menos uma decisão de design pobre, às vezes eles fazem
têm o seu valor.
>> Bem, vamos avançar ainda mais aqui para hello7.
Portanto, agora o programa vai ficar um pouco mais interativo.
Deixe-me aproximar aqui, e de novo, isso é o que é bom
sobre o Scratch.
E nós vamos usá-lo para ser claro, Scratch, apenas hoje e em
problema da próxima semana definido.
Mas na segunda-feira, nós mergulhar em C. Neste programa aqui, ele faz,
para sempre, a seguir.
Se tocar o ponteiro do mouse - agora, quem é o
contexto aqui?
Bem, aviso prévio e que quem está selecionado para baixo aqui no fundo
direito é o gato, sprite um, assim que estes scripts, este
programa, aplica-se especificamente a ele.
Então, se o gato está tocando o ponteiro do mouse, em seguida, ele vai
para jogar este e esperar dois segundos, e
repita ad nauseum.
>> Então, vamos em frente e bateu jogo.
Nada acontece, mas se eu quiser o pet
gato agora, eu posso simplesmente.
[MEOW]
DAVID MALAN: adorável.
[MEOW]
DAVID MALAN: Ok, menos chata, mas também fica aborrecido,
então vamos seguir em frente e ver se não podemos injetar
uma lógica pouco mais.
Esse foi o exemplo sete.
>> Aqui no exemplo oito, vamos
introduzir uma condição ELSE.
Assim como um garfo literal na estrada, em que você pode ir
para a esquerda ou você pode ir para a direita, uma condição em uma programação
linguagem como Scratch, ou, como veremos C, pode permitir que você
ir em uma direção ou outra através de um IF ELSE construir.
Então, literalmente, se tocar ponteiro do mouse, este
vai jogar algum som, senão ele vai jogar este outro
meow, som.
Agora, se você pode deduzir o nome desses sons, você pode
adivinhar o que este programa é destinado a conjurar
a idéia de.
Este gato é miando feliz.
[MEOW]
DAVID MALAN: Felizmente, mas não faz
muito gosta de ser tocado.
[Ruge]
DAVID MALAN: Então agora temos um gato que vai gritar com você.
>> Tudo bem, bem, um último exemplo com os gatos aqui, e
Vamos versão aberta nove deste aqui.
Então, agora, temos o próximo som mais irritante que eu poderia
encontrar, por isso temos uma morsa ou um leão-marinho aqui quem vai
faça o seguinte.
[CASCA SELO]
DAVID MALAN: Ok, então isso vai continuar até que você descobrir como
este programa funciona.
Então, desta vez, este animal tem dois scripts, eo que é
interessante aqui é que esses scripts estão indo para executar
em paralelo.
Então, porque eles começam ambos com uma bandeira verde clicado,
é como ir como este, e ambos os programas começam a correr-lo
uma vez, mesmo se eles estão looping para sempre.
Assim, no roteiro topo, eu tenho um pouco de lógica.
Quais recursos que fornecem até lá?
[CASCA SELO]
AUDIÊNCIA: [inaudível]
DAVID MALAN: Se é o que?
[CASCA SELO]
AUDIÊNCIA: Se mudo para zero, ele vai continuar jogando o
soar. [CASCA SELO]
DAVID MALAN: Ok, muito bom.
Então, se silenciado, o que é isso, essa coisa laranja é zero,
ENTÃO reproduzir o som do leão de mar e pensar "Oh,
oi, "por dois segundos.
Agora, eu não sei o que é silenciado, mas zero evoca a
idéia de falso ou desligado.
Então, se silenciado é falsa, por isso, se não silenciado,
continuar jogando o som.
Tudo bem, bem, como é que vamos desativar esta coisa?
>> Bem, vamos olhar para o segundo script lá.
O segundo script diz silenciado definir a zero.
Observe também é laranja, então o que faz é arranhões cores
blocos da mesma cor, se é uma espécie
de relacionados logicamente.
Assim como a top se silenciado era laranja, então é silenciado aqui
mencionado no bloco de laranja.
Mas este é um atribuições de variáveis, assim como em
álgebra, você tem x e y e z, em programação que você tem
variáveis, mas eles são geralmente -
Vamos fazer uma pausa por um momento e figura como
para parar este latidos.
Como posso fazer isso?
[CASCA SELO]
DAVID MALAN: Okay.
Ele parou. Okay.
>> Assim como na álgebra você tem variáveis ​​x, y, e z, mas em
programação, tendo variáveis ​​como x, y, e z é geralmente
desaprovado porque não está em todos os expressivo.
Eles não têm nenhum significado semântico qualquer, por isso a maioria em
linguagens de programação, as variáveis ​​podem ter plena
nomes verdadeiros ou palavras ou frases, como mudo, para dizer
o que eles fazem.
Portanto, este segundo script também estava ouvindo sempre, e ele disse
se a chave, o Espaço tecla do teclado, é
pressionado, ponto de interrogação.
Portanto, há uma condição com uma expressão booleana que é
vai responder a uma pergunta ou a verdade ou falso,
então eu tenho dentro do que se a tecla de espaço é pressionada e
Se estiver silenciado é zero, definir silenciado a um, ELSE definir silenciado a zero.
Então garfo este outro na estrada, e observe como eu tenho
aninhados os dois, se as condições, é uma forma de verificar se o
Bar de espaço pressionada porque se assim for, ou eu quero ir para esse
ou aquele caminho.
E como faço para inverter o valor do mudo?
Eu tenho que verificar é zero?
Se for assim, torná-lo uma, senão fazê-lo, portanto, zero a alternar
seus dois estados.
>> Tudo bem, então temos, então alguns deles fundamentais
construtos.
Temos expressões booleanas, e perceber, também, estes são
nem todos os que não familiares.
Na verdade, aqui está uma imagem rápida de Harvard curso CS50
ferramenta de compras, e qualquer site lá fora que tem caixas
e queda baixos realmente, todo esse tempo, vindo a utilizar
Expressões booleanas.
Neste caso aqui, se você clicar na caixa ao lado
curso maior ou igual a 4,5, ou mesmo ao lado
faculdade, você está especificando uma expressão booleana.
Mostre-me cursos para os quais essa expressão é verdadeira.
Ou para a direita, não entra em conflito com cursos que eu sou
tomar, se estiver marcada, então sim, você quer verificar
essa condição, mais você quer ignorar.
Expressões tão booleanas são uma espécie de todos os lados, mas quando
nós colocá-los em condições, se se as condições, SE
Elses, ou podemos até mesmo simular mais profundo
níveis, IF ELSE IF ELSE -
de modo que é uma espécie de estado ternário.
Você pode ir por este caminho ou esta forma ou este caminho.
Podemos manter as coisas de nidificação para ir em direções diferentes.
>> Então scratch tem esses laços, como sempre.
Ele tem essas características como 10 Repita, alguns
número finito de vezes.
Nós temos a habilidade agora para definir variáveis, portanto, neste caso
Eu já declarou, por exemplo, uma variável chamada meias.
Eu inicializado a 0, e isso é ainda outra direção
que poderia ter levado até aqui com Joseph, em que talvez eu
apenas manter o controle de quantas meias eu tenho em e encerrar
o programa quando o valor dessa variável é 2.
Isso seria uma outra forma de tipo de generalização que
problema e fazer algo de novo e de novo.
Bem, vamos em frente e agora introduzir algumas coisas novas.
Então, aqueles de vocês com a experiência de programação prévia vontade
sei que um monte de línguas têm matrizes ou vetores ou
listas, e, de fato, Scratch tem algo como isso, também.
Então vamos ver se não podemos levar as coisas para o próximo nível aqui.
Se eu tiver a capacidade, agora, com essas peças do puzzle para
adicionar algo, como uma palavra ou um número, a uma variável, eu posso
começar a acumular coisas.
E esta é, na verdade, a propósito bonitas para coisas como jogos,
role-playing games onde você é o tipo de caminhada ao redor
um mundo de fantasia colecionar coisas, pegar coisas,
ganhando pontos, ou similar.
Você pode querer manter o controle de algum tipo de inventário, e
de fato, isso é o que um dos nossos ex-alunos aqui fez com
algo chamado Fruitcraft RPG.
>> Então deixe-me ir em frente e abrir esta coisa aqui, e em
Fruitcraft, temos esse mundo em cima.
Então deixe-me ir em frente e clique na bandeira verde.
Aviso no canto superior esquerdo é uma espécie de inventário.
Que é implementado em Scratch como o que nós vamos chamar uma matriz ou
uma lista, e agora temos esta pequena animação.
Assim como nós começamos mais cedo, com esta história de amor cookie,
e, então, avançou para gatos e leões marinhos, agora podemos ter
coisas que são ainda mais interativo.
E esse carinha azul, eu posso começar a se mover em torno de sua
pequena casa aqui.
Portanto, parece que ele tem uma saída aqui, então eu estou usando
as teclas de setas, para cima, para baixo, da esquerda à direita.
E agora eu estou fora, então vamos o que eu tenho aqui.
Parece que uma laranja, e de fato, assim que eu toque na
laranja, ele fica se estatelou em meu inventário.
Se eu passar por aqui para as cerejas, agora eu tenho alguma coisa
outra coisa no meu inventário.
E isso é tudo bom e bonito, mas pensar em como, agora, este
é implementado.
Bem, nós temos essa noção de uma lista, e que é, aparentemente, um
peça do puzzle que você acabou de dizer o que você quer adicionar a ele, adicione
laranja, adicione cerejas.
Agora, o que é esse carinha azul fazendo?
Bem, ele é um sprite.
E, presumivelmente, a laranja e as cerejas -
eles mesmos eram sprites separados.
E usando condições em expressões booleanas, os
estudante foi, provavelmente, capaz de expressar SE cara azul é
cerejas tocando em seguida, adicione as cerejas palavra ao seu
inventário, e depois também ocultar o sprite cereja.
Então, debaixo do capô, há provavelmente ainda é uma cereja
Sprite lá.
Nós apenas disse que ele se torne efetivamente invisível.
>> Agora, se eu continuar a andar por aqui, também podemos fazer isso
coisa proximal, onde eu posso ir e ler a placa.
Então, se cara azul tocando sinal, podemos ter este bloco Say
assim como o gato nos falou em palavras, Olá, antes, "Got
algumas frutas?
Traga-o para o lugar de frutas. "Tudo bem, agora, aparentemente,
Eu tenho minhas indicações.
Eu posso ir até aqui para o lugar de frutas, alinhar-me se
com a porta.
Agora, eu estou aqui.
Eu posso ir até o homem no balcão.
Ele detecta que estou perto dele, por isso não tem que ser
bastante idêntica tocar, e eu ganhei o jogo.
Portanto, temos Fruitcraft RPG.
>> Assim, podemos fazer coisas ainda mais avançados do que isso.
Podemos acrescentar sons.
Podemos acrescentar aleatoriedade pseudo.
Podemos acrescentar complexidade.
Deixe-me ir à frente aqui, e ao invés de fazer isso sozinho,
deixe-me mostrar-lhe uma das propostas mais sofisticadas
temos no ano passado a partir de um certo alguém chamado Blake.
Podemos ter um voluntário que é confortável aparecendo em
câmera e é para jogar um jogo?
Que tal ali?
Vamos para cima.
Tudo bem, então o jogo que você tem apenas inconscientemente
se ofereceu para jogar -
[Aplausos]
DAVID MALAN: - é algo do passado chamado
"Frogger". Qual é o seu nome?
RENDA: Renda.
DAVID MALAN: Redna?
RENDA: É como Brenda com um b.
DAVID MALAN: Ok, Renda.
David.
Prazer em conhecê lo.
>> Então, aqui em "Frogger", e se pudéssemos aumentar o volume apenas
um pouco, você é esta pequena
rã verde na parte inferior.
Você pode usar a esquerda, direita, para cima e para baixo, e seu objetivo é
atravessar a rua, cruzar o rio, e tocar as almofadas de lírio
na parte superior.
Aw.
Um mais t -
refazer, tudo bem?
Vamos parar de sucesso.
Ninguém viu isso.
[Aplausos]
DAVID MALAN: Yeah.
Muito bem feito.
Excelente, obrigado.
>> Assim que houve Frogger. Agora que você sabe o que você tem
ficou-se em, um voluntário mais para um diferente
jogo apresentado por outro aluno.
Você quer vir em cima?
Qual é o seu nome?
RICHARD: Richard.
DAVID MALAN: Richard.
Tudo bem, Richard, venha.
[Aplausos]
DAVID MALAN: Você tem algo que vai soar
familiarizados em breve, por isso aqui estão as suas instruções.
Então, em um momento, algumas peças de quebra-cabeça vai rolar para cima
a partir da tela que parecem ou deixou
ou direita para cima ou para baixo.
Você vai ter que bater as teclas de setas de tal forma
que corresponde a essas peças do puzzle se alinhando com
os espaços reservados no topo.
Então, quando você ver uma seta para a esquerda, e que seja alinhado com a esquerda
seta, pressione a seta esquerda.
Você pode começar.
[MÚSICA - "mais forte" Kayne West]
DAVID MALAN: Todos todo, direito de palmas para Richard.
[Aplausos]
DAVID MALAN: Muito bem feito.
Obrigado.
[Aplausos]
>> DAVID MALAN: diversão Então e, aparentemente, uma espécie de
intimidador como poderia ser a de implementar algo como
aparentemente sofisticado como este, percebemos que o aluno
não definido e apenas escrever tudo isso de uma só vez.
Em vez disso, você pode quebrar um problema aparentemente tão complexo
como esta em pedaços muito pequenos, e isso, também, é
vai ser um tema.
A pior coisa que você pode fazer, por escrito, um programa em mais qualquer
linguagem é sentar, ficar muito animado, escrever o
maldita coisa toda, e depois só espero que ele funciona pela
quando você terminar de escrever.
Em vez disso, o processo de programação deve, geralmente,
ser muito criterioso, muito interativo, em que você só
definir passos muito pequenos para si mesmos, pedaços pequenos
quer morder, e para que você tenha estes sanidade
cheques, marcos pouco que você pode conhecer.
E então você construir em cima das pessoas para criar mais
coisas sofisticadas ainda.
>> Assim, por exemplo, como poderíamos ir sobre
implementação de um jogo como este?
Bem, francamente, eu certamente começar apenas
apoiando uma tecla de cada vez.
Vamos apenas implementar o suporte para a seta esquerda.
Assim, o aluno tinha de alguma forma criar no Photoshop, ou em
Coçar-se usando o editor de pouco gráfica, uma
chave de seta que se parece com o um na parte superior à esquerda, apenas
o espaço reservado cinza.
Em seguida, o aluno tinha que descobrir o que x, y coordenar a
colocou, onde colocá-lo na janela.
0, 0 está aqui em cima, então você tem que descobrir o número de
pixels, ou pontos, para compensar a seta de
a parte superior da tela.
E então, uma vez que é no lugar, o programa não faz realmente
fazer nada ainda, então você precisa então de um sprite segundo, para
exemplo, uma seta verde que também é apontar para a esquerda, e você
então precisa começar a escrever alguns scripts para isso.
>> E você percebe, talvez, que essas coisas começaram a chegar em
velocidades diferentes, e as cores estavam em diferentes
locais, e isso é porque o estudante usou um pouco de
aleatoriedade pseudo.
E por acaso pseudo, eu só quero dizer escolher um número
entre alguma coisa e alguma coisa, porque você pode
iniciar a coisas do mapa, como se o número é entre um e
cinco, bem, vamos fazer a coisa verde.
Se é entre 6 e 10, vamos fazer a peça do puzzle
vermelho.
Enquanto você tem uma maneira de gerar algum tipo de
aleatoriedade, então você pode tomar decisões com base em que
aleatoriedade.
E eu continuo dizendo pseudo aleatório, porque há uma
pequeno segredo sujo.
Computadores não pode vir até com números aleatórios.
Eles só podem fazer o que lhes é dito, porque
eles são feitos pelo homem dispositivos.
Eles não podem simplesmente acho que um número como nós, seres humanos
sinto que nós podemos.
Um computador tem que fazer algo matemático para conjurar o
ilusão de número matemático, às vezes usando o
dia atual de tempo como uma entrada para descobrir o que
número de voltar, mas mais sobre isso em outro momento.
Por enquanto, só sei que podemos gerar aleatoriedade pseudo.
>> Portanto, uma vez que tenho a capacidade para a seta para a esquerda para começar
aparecendo em diferentes momentos e em diferentes velocidades, em seguida,
Eu posso voltar e adicionar alguns deles, se as condições.
Se este sprite está tocando o outro, ea seta esquerda
tecla foi pressionada -
assim três condições nesse caso.
Eu posso usar isso e bloquear, talvez, nesse caso -
Então eu quero ir em frente e incrementar o placar.
E no topo, temos uma pontuação, temos Awesome,
Cool, Bom, e Boo.
Portanto, não há, aparentemente, cinco variáveis ​​que este aluno
usado para manter o controle dessas várias métricas.
Assim, em breve, o resultado final é incrível.
É divertido, é divertido de jogar, é envolvente, mas isso não é
onde o aluno começou.
Ele ou ela começou em um conjunto menor de etapas.
>> Então, quais são alguns outros blocos de construção que nós podemos
tecer a esses programas?
Bem, há um outro conceito na maioria das línguas,
Raspe entre eles, conhecidos como fios.
Assim, um computador não pode realmente muito fazer várias coisas em um
tempo, pelo menos, geralmente não.
Em vez disso, um computador geralmente tem apenas uma CPU, e ainda
Embora os computadores são super rápido e pode, portanto,
criar a ilusão de fazer várias coisas ao mesmo tempo -
verificar o seu e-mail, recebendo um instante
mensagem, a impressão de um documento -
realmente, um computador é apenas saltar de impressão para IMing
para e-mail, para trás e para trás e para a frente e para trás tão rápido que
lentas humanos witted simplesmente não percebem que é realmente
execução desses programas um pouco de cada vez.
Agora, este um pouco de um branco mentir esses dias, porque, hoje em dia,
muitos de nossos computadores são o que são chamados de multi-core, assim você
tem uma CPU, mas vários núcleos, que é como
ter múltiplos processadores.
>> E assim, por vezes, os computadores podem realmente fazer várias coisas
de cada vez, mas, geralmente, no âmbito de um programa, programas
contar com essas coisas chamadas threads.
Portanto, uma discussão é como uma espécie de programa em miniatura, que pode
coexistir com outro programa em miniatura e pode ser executado
em paralelo, ou pelo menos pode ser executado sob a ilusão de que
eles estão executando simultaneamente.
Então arranhões suporta essas coisas chamadas threads.
Você pode ter vários scripts de execução de uma vez, assim como nós
fez com o leão-marinho, e isso nos permite realmente
então tem interações entre esses sprites.
Deixe-me ir em frente aqui e puxar para cima, vamos dizer, tópicos, e
jogar este como se segue.
Temos dois sprites, cada um dos quais veremos
tem apenas um roteiro.
E você notar que parece haver alguma inteligência no
gato em um presente, porque ele está ficando mais perto -
[Ruge]
DAVID MALAN: - e mais perto do passarinho.
>> Então, como é o funcionamento pássaro?
Bem, vamos dar uma olhada no primeiro pássaro.
O script pássaro disse quando a bandeira verde é clicado, vá para o x
é igual a 115 negativo e y é igual a 150.
Então, eu só descobri um local aleatório onde eu queria que o
pássaro para começar, e eu só jogou ele lá por padrão.
Então, para sempre se não tocar gato, então este é um diferente
tipo de construção de loop, mas a idéia mesmo, fazer isso de novo e
novamente e novamente.
Contanto que você não está tocando o gato, mover três etapas, e
se você está na borda do salto,, onde é uma espécie de
reflexão no sentido de bilhar.
Então é assim que a ave está se movendo em torno de tipo de
aparentemente de forma aleatória, mas é só porque está saltando
as paredes, neste caso.
>> Agora o gato, por sua vez, é uma espécie de trapaça.
O gato, quando a bandeira verde é clicado, sim, começa em
algum lugar, um local aleatório -
pelo menos em parte, de acordo com a escolha
bloco verde aleatório lá -
e sempre se tocando o pássaro, reproduzir o som do leão,
e, em seguida, parar o script.
Então, quando eu disse que terminar, ou sair antes, há um quebra-cabeça
peça em Scratch que só vai matar o programa em que
ponto, porque é uma espécie de lógica feito.
Mas caso contrário, aqui, perceber o que vai acontecer.
Ponto para o movimento de aves e um passo.
Portanto, este ponto para ave é uma espécie de vantagem o gato
tem em que é lucrando com o pássaro em movimento, e podemos
agora fazer este programa ainda mais interessante.
Em vez de mover um passo de cada vez por ciclo de CPU, por
greve toque dos sinos, por assim dizer, deixe-me ir em frente e
mover, digamos, cinco degraus de cada vez, como o gato.
Clique em Executar, e agora ele realmente encontra-lo rapidamente.
Se dobrar este mais de 10 passos, espécie de passa
certo para ele.
Agora, nós podemos dar o pássaro,
talvez, um pouco de vantagem.
Vamos para o pássaro e dizer em vez de avançar três passos,
vamos passar-lhe 30 passos.
Mas ele ainda foi pego no final.
>> Então, aqui, nós temos dois segmentos.
É preso em Scratch com dois scripts e dois
sprites, mas a idéia em outros idiomas é que você pode
escrever, essencialmente, muitos programas como este e ter
-los funcionar de verdade, ou imaginariamente, em paralelo.
>> Agora, há também este conceito na programação conhecida como
eventos, e isso é algo que não vai ver no C, os
língua conhecida como C. Veremos isso em direção ao fim do semestre
em programação web, quando introduzimos o JavaScript eo
noção de páginas web de construção que são dinâmicos e interagir
com os usuários.
Portanto, neste caso, temos um exemplo muito simples de dois
sprites, menino e menina, cada um dos quais com suas respectivas
tópicos, mas de alguma forma esses dois estão inter-comunicação por forma
de algo chamado eventos.
Então deixe-me ir em frente aqui e zoom e roteiro do menino,
que se parece com isso.
Quando clicado bandeira verde, para sempre fazer o seguinte.
Se o espaço de chave, ou a barra de espaço, é pressionado, dizem
Marco por dois segundos, que é puramente estético na
tela, um balão de fala pouco, mas depois transmitir.
>> Então transmissão é outra peça Scratch que é
representativo de uma classe de funcionalidade de programação
que permite que programas diferentes, linhas diferentes,
Para comunicar-se entre, de alguma forma, enviar
mensagens, um para o outro.
Passando um pedaço de papel na sala de aula é uma espécie de baixa tecnologia
equivalente.
Então transmissão de evento.
Eu posso enviar esta mensagem, eo evento palavra
é completamente arbitrária.
Zero às vezes tem essas queda baixos, então eu só veio
com uma palavra aleatória como evento, porque agora, o que o menino faz
quando eu pressionar a chave é que ele transmite este evento.
E se eu olhar agora no roteiro da menina, seu roteiro é
super simples, porque tudo que ela precisa fazer é não agir quando
a bandeira verde é clicado.
Ela é projetada para a ação quando ela recebe fecha aspas,
"Evento", e nesse ponto, ela está ouvindo, portanto, para
o evento chamado de novo e de novo.
Assim que ela recebe esse evento, ela vai gritar
Polo por dois segundos.
>> E assim você pode talvez deduzir exatamente o que o
próximo resultado vai ser.
Deixe-me clique na bandeira verde.
Nada acontece porque eu preciso fazer o que?
AUDIÊNCIA: Barra de Espaço.
DAVID MALAN: Barra de Espaço.
Menino diz Marco, menina diz Polo.
Mas isso não é codificado por si só.
Isso é inter-comunicação entre os scripts, então agora nós
têm a capacidade de fazer programas mais complexos, onde
esses dois são de alguma forma inter-comunicação.
>> Assim, em que direção podemos levar isso?
Bem, no conjunto de problemas 0, realmente, o objetivo é
divirta-se com o Scratch.
Para a edição de hacker, você vai se divertir em vez com um mais
versão sofisticada do Scratch chamado BYOB, Build
Seus próprios blocos, mas a idéia é a mesma.
Você vai ser capaz -
Sim, isso foi deliberado.
Ela veio de Berkeley.
BYOB é a versão pirata edição desta, mas ambos
demografia, Standard Edition e edição de hacker tanto, o
objetivo em mãos para a próxima semana é realmente apenas a mergulhar em
profunda, sujar as mãos com a programação, e fazer
algo interessante, fazer algo interativo, faça
algo artístico, fazer algo divertido para realmente
demonstrar, de modo que até o final da semana, você tem um projeto,
não só para o seu pset CS50 primeiro, mas você vai ter um
pouco algo que você pode mostrar na Annenberg para
amigos ou até mesmo a família por meio de upload para o site do MIT.
E assim como eu disse na quarta-feira, esperamos que 90% da classe,
geralmente, para fazer as edições padrão.
Perceba que há também esta saída para aqueles que
poderiam encontrar-se um pouco entediado com o básico
e realmente quer mergulhar e criar uma visão que você já
tem com fundo antes neste mais amigável
ambiente.
>> Então deixe-me puxar para cima um outro exemplo que um dos nossos ex-
alunos aqui fez e dizer alguma coisa através da música.
Que da mesma forma, como este joga, pense sobre como você ir sobre
implementação deste programa usando precisamente estes mesmos
blocos de construção, um pouco de aleatoriedade, e um pseudo
pouco de canção familiar.
Se pudéssemos aumentar o volume um pouco?
[MÚSICA - "Está chovendo homens" The Weather Girls]
>> DAVID MALAN: Isso é tudo para CS50.
Vemos você na segunda-feira.
[Aplausos]