Try   HackMD

VIV0003 PENSAMENTO COMPUTACIONAL - Turma: Quinta-feira 19:30 às 22:10hs

Ementa

  • Introdução aos princípios fundamentais da computação
  • Fundamentos de softwares de computadores
  • Fundamentos de hardware. representação de imagens e computadores. Noções de programação:
    • exemplos com manipulação de imagens digitais.
    • Pensamento computacional e aplicações nas áreas de conhecimento

.
.
.

Objetivos

  • Analisar a equação que representa a essência dos computadores, alicerçada em sua altíssima velocidade de processamento de instruções simples e total ausência de discernimento, para determinar o que os computadores são ou não capazes de fazer;Examinar os principais componentes físicos de computadores, baseado na sua arquitetura, para amparar o seu uso mais consciente, efetivo e eficiente;
  • Examinar os principais componentes físicos de computadores, baseado na sua arquitetura, para amparar o seu uso mais consciente, efetivo e eficiente;
  • Distinguir elementos imateriais de computadores, baseado em fundamentos de software, para elucidar como as instruções escritas por pessoas são fundamentais para que o computador seja capaz de realizar algo útil;
  • Descrever a representação de imagens em computadores, com base em métodos comumente usados, para praticar a abstração e o reconhecimento de padrões;
  • Solucionar problemas simples de programação com exemplos de manipulação de imagens digitais, baseado na linguagem Javascript, para praticar a decomposição de problemas, a abstração, o reconhecimento de padrões, e a automação de tarefas através de algoritmos;
  • Investigar as aplicações do pensamento computacional, baseado nos pilares abstração, decomposição, reconhecimento de padrões e automação de tarefas através de algoritmos, para constituir sua atuação como profissional do século XXI.
    .
    .
    .

Temas:

  1. INTRODUÇÃO AOS PRINCÍPIOS FUNDAMENTAIS DA COMPUTAÇÃO
    1.1. A EQUAÇÃO QUE REPRESENTA A ESSÊNCIA DOS COMPUTADORES
    1.2.O PROCESSO DE EXPLORAÇÃO DO POTENCIAL DOS COMPUTADORES ATRAVÉS DE CÓDIGOS E ALGORITMOS
    1.3 PRIMEIRO CONTATO COM CÓDIGOS DE COMPUTADORES
    .
    .
    .

1. INTRODUÇÃO AOS PRINCÍPIOS FUNDAMENTAIS DA COMPUTAÇÃO

.
.
.

1.1. A EQUAÇÃO QUE REPRESENTA A ESSÊNCIA DOS COMPUTADORES

A essência dos computadores pode ser encapsulada em várias equações e conceitos-chave, mas uma das equações mais fundamentais é a Lei de Moore. Vamos explorar isso e algumas outras equações e conceitos relacionados que ajudam a entender a essência dos computadores:

  • Lei de Moore: Gordon Moore, co-fundador da Intel, formulou a Lei de Moore em 1965, que afirma que o número de transistores em um circuito integrado (CPU) dobra aproximadamente a cada dois anos. Isso resulta em um aumento exponencial na capacidade de processamento e, consequentemente, no desempenho dos computadores ao longo do tempo.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
N = N0 * 2^(t/T)

onde:

N - é o número de transistores em um circuito integrado em um determinado momento t.
N0 - é o número de transistores em um circuito integrado em um momento inicial (normalmente, quando a observação foi feita por Gordon Moore).
t - é o tempo decorrido desde o momento inicial.
T - é o período de tempo em que o número de transistores dobra (tipicamente cerca de 2 anos, de acordo com a Lei de Moore).

Essa equação expressa a ideia de que o número de transistores dobra a cada período T. No entanto, vale ressaltar que essa é uma simplificação e não leva em consideração todos os aspectos da Lei de Moore, como a diminuição do tamanho dos transistores e outros avanços tecnológicos.

  • Lei de Amdahl: Gene Amdahl desenvolveu essa equação para descrever o ganho de desempenho que pode ser alcançado através da melhoria de um único componente em um sistema de computador. Ela destaca que, à medida que um componente específico é aprimorado, o ganho de desempenho global é limitado pelas partes não melhoradas do sistema.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
Stotal​=(1−P)+NP​1​

onde:

StotalStotal - é o ganho de desempenho total que você espera alcançar com a paralelização do programa.
PP - é a fração do programa que pode ser paralelizada.
NN - é o número de processadores ou núcleos disponíveis.

Essa equação demonstra que o ganho de desempenho total é limitado pela fração sequencial do programa, que não pode ser paralelizada. À medida que a fração paralelizável PP aumenta ou o número de processadores NN aumenta, o ganho de desempenho aumenta. No entanto, há um limite para o quanto o desempenho pode ser melhorado com a paralelização, e esse limite é determinado pela fração sequencial do programa.

  • Equação de Toda Computação: Esta é uma equação hipotética que representa a essência dos computadores, combinando várias variáveis, incluindo o poder de processamento, a capacidade de armazenamento, a eficiência energética e a conectividade. Embora não exista uma única equação universal que descreva a essência de todos os computadores, essa é uma representação conceitual.

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
TC=PC+NC+EC+CC

onde:

TCTC - representa a "Toda Computação", ou seja, a complexidade geral da computação.
PCPC - é a Potência de Cálculo, que se refere à capacidade de processamento bruto de hardware, como processadores e GPUs.
NCNC - é a Conectividade, que envolve a capacidade de dispositivos se comunicarem uns com os outros por meio de redes.
ECEC - é a Eficiência Computacional, que abrange a otimização de algoritmos e códigos para realizar tarefas de forma mais eficiente.
CCCC - é a Capacidade de Armazenamento, que se refere à quantidade de dados que podem ser armazenados e recuperados.

  • Equação de Desempenho: Pode-se criar uma equação de desempenho personalizada para representar um determinado sistema ou aplicação de computador. Ela leva em consideração variáveis como taxa de processamento, latência, largura de banda e eficiência para calcular o desempenho relativo.

  • Equação de Complexidade: A complexidade de um algoritmo ou problema computacional pode ser expressa em uma equação que descreve o número de operações necessárias para resolvê-lo. A complexidade é fundamental para entender como os computadores lidam com tarefas de diferentes dificuldades.

  • Lei de Shannon: A Lei de Shannon, formulada por Claude Shannon, descreve a capacidade de transmissão de informações de um canal de comunicação em relação à largura de banda e ao ruído. Isso é fundamental para a comunicação entre computadores e dispositivos.

  • Lei de Entropia: A entropia é uma medida da incerteza ou desordem em um sistema. A Lei de Entropia de Claude Shannon está relacionada à compressão de dados e à eficiência na representação e transmissão de informações.

  • Equação de Turing: A máquina de Turing, proposta por Alan Turing, é uma formulação conceitual que representa a capacidade de um dispositivo de realizar qualquer cálculo que possa ser descrito por um algoritmo. Embora não seja uma equação no sentido tradicional, é uma representação fundamental da computação.
    .
    .
    .

1.2. O PROCESSO DE EXPLORAÇÃO DO POTENCIAL DOS COMPUTADORES ATRAVÉS DE CÓDIGOS E ALGORITMOS

Esse tema abrange como os programadores e desenvolvedores utilizam códigos e algoritmos para aproveitar ao máximo a capacidade dos computadores. Vamos abordar os principais pontos desse processo:

  • Compreensão de Problemas: Antes de começar a escrever códigos, é essencial entender completamente o problema que se deseja resolver. Isso envolve a análise dos requisitos, a identificação dos desafios e a definição dos objetivos.
  • Algoritmos: Os algoritmos são instruções passo a passo para resolver um problema específico. Eles servem como o plano de ação para o computador. Criar algoritmos eficientes é crucial para a resolução de problemas de forma rápida e precisa.
  • Linguagens de Programação: As linguagens de programação são usadas para escrever códigos que o computador pode entender. Diferentes linguagens têm diferentes finalidades e níveis de abstração. Escolher a linguagem certa para um projeto é importante.
  • Codificação: Escrever códigos é a parte prática do processo. Isso envolve traduzir o algoritmo em uma linguagem de programação específica. Os códigos consistem em instruções detalhadas que dizem ao computador o que fazer.
  • Testes e Depuração: Após escrever os códigos, é necessário testá-los para garantir que funcionem conforme o esperado. A depuração é o processo de encontrar e corrigir erros nos códigos.
  • Otimização: A otimização visa melhorar o desempenho dos programas. Isso pode envolver a redução do uso de recursos, a aceleração do processamento ou a redução do tempo de execução.
  • Utilização de Recursos: Os computadores modernos possuem uma variedade de recursos, como processadores múltiplos, memória grande e dispositivos de armazenamento rápidos. Programadores devem saber como aproveitar esses recursos para tornar seus programas mais eficientes.
  • Aprendizado de Máquina e Inteligência Artificial: Algoritmos de aprendizado de máquina e inteligência artificial exploram o potencial dos computadores para análise de dados, reconhecimento de padrões e tomada de decisões autônomas.
  • Segurança da Informação: Programadores também devem considerar a segurança ao explorar o potencial dos computadores. Isso envolve a proteção de dados sensíveis e a prevenção de vulnerabilidades.
  • Aplicação Prática: Por fim, os códigos e algoritmos são aplicados em diversas áreas, desde desenvolvimento de software, análise de dados, jogos, automação industrial até pesquisa científica e muito mais.
    .
    .
    .

1.3.PRIMEIRO CONTATO COM CÓDIGOS DE COMPUTADORES

Este é um tópico importante, especialmente para iniciantes que estão começando a explorar o mundo da programação e da codificação. Aqui estão algumas diretrizes sobre como explicar esse assunto:

​​​​Introdução à Programação:
​​​​Comece explicando o conceito básico de programação. Diga que a programação é a arte de escrever instruções, ou códigos, que os computadores podem entender e executar.

​​​​Importância da Programação:
​​​​Explique por que a programação é importante. Você pode mencionar como os programas de computador estão presentes em quase todos os aspectos de nossas vidas hoje em dia, desde smartphones até sistemas de controle de tráfego e aplicativos de redes sociais.

​​​​Linguagens de Programação:
​​​​Introduza o conceito de linguagens de programação. Explique que existem muitas linguagens diferentes, como Python, Java, C++, entre outras, cada uma com suas próprias regras e sintaxe.

​​​​Primeiro Código Simples:
​​​​Mostre um exemplo muito simples de código para ilustrar como os programas são escritos. Por exemplo, você pode mostrar um código em Python que exibe "Olá, Mundo!" na tela. Explique linha por linha o que o código está fazendo.

​​​​Editores de Código:
​​​​Fale sobre as ferramentas que as pessoas usam para escrever códigos, como editores de código e ambientes de desenvolvimento integrado (IDEs). Mostre como criar um arquivo de código usando um editor de texto simples ou um IDE.

​​​​Execução do Código:
​​​​Explique como os códigos são executados pelos computadores. Mencione que os computadores traduzem os códigos em instruções que a máquina pode seguir.

​​​​Experimentação e Erros:
​​​​Encoraje a experimentação e explique que é normal cometer erros ao escrever códigos. Dizer que os erros são uma parte importante do processo de aprendizado.

​​​​Recursos de Aprendizado:
​​​​Sugira recursos para quem deseja começar a aprender a programar, como tutoriais online, cursos, livros e comunidades de programação.

​​​​Projetos Pequenos:
​​​​Incentive a criação de pequenos projetos para aplicar os conceitos aprendidos. Isso pode ser um jogo simples, um aplicativo web básico ou qualquer projeto que interesse ao iniciante.

​​​​Persistência e Prática:
​​​​Lembre que a programação é uma habilidade que melhora com a prática constante. Encoraje a persistência e o aprendizado contínuo.

​​​​Comunidade e Colaboração:
​​​​Destaque que a programação frequentemente envolve colaboração com outras pessoas. Explique como as comunidades de programadores podem ser valiosas para compartilhar conhecimentos e resolver problemas.

​​​​Futuro da Programação:
​​​​Mencione que a programação é uma habilidade altamente valorizada e que continuará a ser relevante no futuro, com muitas oportunidades de carreira.