Computer Science › Fundamentos da Ciência da Computação

Programação e Pensamento Computacional

0 de 23
  1. Decomposição de Problemas e Pensamento Algorítmico

    Quebrar um problema em uma sequência ordenada de passos inequívocos antes de escrever qualquer linha de código real, usando um exemplo de robô num mundo-grade de brinquedo para separar o pensamento algorítmico da sintaxe.

    Ler →6 seções13 min
  2. Variáveis e Tipos Primitivos

    Nomear um espaço de memória para guardar um valor, e os tipos primitivos (int, float, bool, str) a partir dos quais todo programa é construído.

    Ler →6 seções13 min
  3. Ponto Flutuante e Aproximação

    Por que a representação binária de ponto flutuante torna a maioria das frações decimais inexata, e como comparar floats com tolerância em vez de igualdade exata.

    Ler →6 seções12 min
  4. Expressões e Atribuição

    Combinar valores e operadores em expressões, e a diferença entre a igualdade matemática e o 'armazene o resultado aqui' da atribuição.

    Ler →6 seções12 min
  5. Fluxo de Controle Condicional

    Como um programa escolhe entre dois ou mais futuros possíveis com `if`, `elif` e `else`, e por que a ordem das condições numa cadeia determina qual ramo de fato é alcançado.

    Ler →6 seções12 min
  6. Iteração e Laços

    A diferença entre `for` sobre uma sequência conhecida e `while` até uma condição mudar, e como um invariante de laço prova que um laço computa a resposta certa para toda entrada, não só a testada.

    Ler →6 seções13 min
  7. Cronometragem e Contagem de Operações

    Medir empiricamente o desempenho de um programa com um cronômetro e com um contador de operações, e por que nenhum dos dois, sozinho, prevê o que acontece numa entrada dez vezes maior.

    Ler →6 seções10 min
  8. Big-O e Complexidade Assintótica

    Como descrever o crescimento do tempo de execução de um algoritmo conforme a entrada cresce, ignorando deliberadamente constantes de máquina, e como ler a taxa de crescimento certa diretamente na estrutura do código.

    Ler →6 seções13 min
  9. Listas e Mutabilidade

    O que torna uma lista diferente de todo valor estudado até aqui: ela é mutável, e essa única propriedade muda o que um programa pode assumir sobre um valor guardado numa variável.

    Ler →6 seções12 min
  10. Introdução a Algoritmos de Ordenação

    Onde Big-O deixa de ser notação abstrata: por que ordenações quadráticas simples e o merge sort dividir-e-conquistar divergem drasticamente conforme a entrada cresce, mesmo resolvendo o mesmo problema.

    Ler →6 seções13 min
  11. Dicionários

    Como uma tabela hash permite buscar um valor por chave em tempo aproximadamente constante, e quando esse acesso associativo é a ferramenta certa em vez do acesso posicional de uma lista.

    Ler →6 seções14 min
  12. Tuplas

    Um tipo sequência que se comporta quase como uma lista, mas do outro lado da linha da imutabilidade: por que essa restrição é uma garantia valiosa, não uma lista com menos recursos.

    Ler →6 seções13 min
  13. Aliasing e Clonagem

    O que a atribuição realmente faz com um objeto mutável, quando duas variáveis passam a compartilhar a mesma lista e como quebrar esse compartilhamento com uma clonagem deliberada.

    Ler →6 seções13 min
  14. Decomposição e Abstração via Funções

    Como uma função separa sua interface (o que entra, o que sai) da sua implementação (como o resultado é de fato produzido), tornando isso o primeiro mecanismo concreto de decomposição e abstração deste currículo.

    Ler →6 seções12 min
  15. Recursão

    Como uma função que chama a si mesma numa versão estritamente menor do mesmo problema resolve corretamente, através da pilha de chamadas, um caso base e o salto de fé recursivo.

    Ler →6 seções16 min
  16. Recursão sobre Dados Estruturais

    Generalizando recursão de 'um número chegando a zero' para 'uma estrutura chegando à sua instância mais simples', aplicada a strings e listas aninhadas de profundidade arbitrária.

    Ler →6 seções13 min
  17. Testes e Depuração

    Por que uma suíte de testes que passa nunca é uma prova geral de corretude, e como a depuração sistemática localiza um bug dividindo o pipeline pela metade, aplicando a mesma ideia de bisseção à estrutura do programa.

    Ler →6 seções15 min
  18. Exceções e Asserções

    A diferença entre lidar com uma falha externa esperada e documentar um invariante interno de que o próprio código depende, e por que confundir os dois é uma fonte comum de bugs difíceis de explicar.

    Ler →6 seções14 min
  19. Parâmetros e Valores de Retorno

    A assinatura de uma função como um contrato: como argumentos posicionais e nomeados se vinculam a parâmetros, o que `None` implícito realmente significa, e por que confundir `print` com `return` é um dos bugs iniciais mais comuns.

    Ler →6 seções12 min
  20. Funções como Objetos de Primeira Classe

    Como o modelo de dados do Python trata uma função criada com `def` como um objeto comum, permitindo que funções sejam armazenadas, passadas como argumento e retornadas exatamente como qualquer outro valor.

    Ler →6 seções11 min
  21. Guess-and-Check e Busca por Bisseção

    Resolver equações sem solução em forma fechada por aproximação sucessiva, e por que explorar a ordem do espaço de busca com bisseção elimina metade dos candidatos a cada passo em vez de testá-los um a um.

    Ler →6 seções13 min
  22. Entrada e Saída

    Ler um valor digitado pelo usuário e imprimir um resultado de volta: o menor loop de feedback possível que um programa pode ter.

    Ler →6 seções11 min

Programação e Pensamento Computacional

Part of the Computer Science curriculum.

Sort
1

O Que É Computação

Os quatro pilares do pensamento computacional (decomposição, reconhecimento de padrões, abstração e design de algoritmos) e por que eles são uma forma de pensar, não uma forma de programar.

2

Decomposição de Problemas e Pensamento Algorítmico

Quebrar um problema em uma sequência ordenada de passos inequívocos antes de escrever qualquer linha de código real, usando um exemplo de robô num mundo-grade de brinquedo para separar o pensamento algorítmico da sintaxe.

3

Variáveis e Tipos Primitivos

Nomear um espaço de memória para guardar um valor, e os tipos primitivos (int, float, bool, str) a partir dos quais todo programa é construído.

4

Ponto Flutuante e Aproximação

Por que a representação binária de ponto flutuante torna a maioria das frações decimais inexata, e como comparar floats com tolerância em vez de igualdade exata.

5

Expressões e Atribuição

Combinar valores e operadores em expressões, e a diferença entre a igualdade matemática e o 'armazene o resultado aqui' da atribuição.

6

Fluxo de Controle Condicional

Como um programa escolhe entre dois ou mais futuros possíveis com `if`, `elif` e `else`, e por que a ordem das condições numa cadeia determina qual ramo de fato é alcançado.

7

Iteração e Laços

A diferença entre `for` sobre uma sequência conhecida e `while` até uma condição mudar, e como um invariante de laço prova que um laço computa a resposta certa para toda entrada, não só a testada.

8

Cronometragem e Contagem de Operações

Medir empiricamente o desempenho de um programa com um cronômetro e com um contador de operações, e por que nenhum dos dois, sozinho, prevê o que acontece numa entrada dez vezes maior.

9

Big-O e Complexidade Assintótica

Como descrever o crescimento do tempo de execução de um algoritmo conforme a entrada cresce, ignorando deliberadamente constantes de máquina, e como ler a taxa de crescimento certa diretamente na estrutura do código.

10

Listas e Mutabilidade

O que torna uma lista diferente de todo valor estudado até aqui: ela é mutável, e essa única propriedade muda o que um programa pode assumir sobre um valor guardado numa variável.

11

Introdução a Algoritmos de Ordenação

Onde Big-O deixa de ser notação abstrata: por que ordenações quadráticas simples e o merge sort dividir-e-conquistar divergem drasticamente conforme a entrada cresce, mesmo resolvendo o mesmo problema.

12

Dicionários

Como uma tabela hash permite buscar um valor por chave em tempo aproximadamente constante, e quando esse acesso associativo é a ferramenta certa em vez do acesso posicional de uma lista.

13

Tuplas

Um tipo sequência que se comporta quase como uma lista, mas do outro lado da linha da imutabilidade: por que essa restrição é uma garantia valiosa, não uma lista com menos recursos.

14

Aliasing e Clonagem

O que a atribuição realmente faz com um objeto mutável, quando duas variáveis passam a compartilhar a mesma lista e como quebrar esse compartilhamento com uma clonagem deliberada.

15

Decomposição e Abstração via Funções

Como uma função separa sua interface (o que entra, o que sai) da sua implementação (como o resultado é de fato produzido), tornando isso o primeiro mecanismo concreto de decomposição e abstração deste currículo.

16

Recursão

Como uma função que chama a si mesma numa versão estritamente menor do mesmo problema resolve corretamente, através da pilha de chamadas, um caso base e o salto de fé recursivo.

17

Recursão sobre Dados Estruturais

Generalizando recursão de 'um número chegando a zero' para 'uma estrutura chegando à sua instância mais simples', aplicada a strings e listas aninhadas de profundidade arbitrária.

18

Testes e Depuração

Por que uma suíte de testes que passa nunca é uma prova geral de corretude, e como a depuração sistemática localiza um bug dividindo o pipeline pela metade, aplicando a mesma ideia de bisseção à estrutura do programa.

19

Exceções e Asserções

A diferença entre lidar com uma falha externa esperada e documentar um invariante interno de que o próprio código depende, e por que confundir os dois é uma fonte comum de bugs difíceis de explicar.

20

Parâmetros e Valores de Retorno

A assinatura de uma função como um contrato: como argumentos posicionais e nomeados se vinculam a parâmetros, o que `None` implícito realmente significa, e por que confundir `print` com `return` é um dos bugs iniciais mais comuns.

21

Funções como Objetos de Primeira Classe

Como o modelo de dados do Python trata uma função criada com `def` como um objeto comum, permitindo que funções sejam armazenadas, passadas como argumento e retornadas exatamente como qualquer outro valor.

22

Guess-and-Check e Busca por Bisseção

Resolver equações sem solução em forma fechada por aproximação sucessiva, e por que explorar a ordem do espaço de busca com bisseção elimina metade dos candidatos a cada passo em vez de testá-los um a um.

23

Entrada e Saída

Ler um valor digitado pelo usuário e imprimir um resultado de volta: o menor loop de feedback possível que um programa pode ter.