Buscar

Pensamento Computacional

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 98 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 98 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 98 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

2
PENSAMENTO COMPUTACIONAL
AULA 1 – INTRODUÇÃO AOS PRINCÍPIOS FUNDAMENTAIS DA COMPUTAÇÃO
Definição
Conceitos primordiais sobre o funcionamento de computadores; computadores como ferramentas desenvolvidas pelos humanos para criar soluções úteis; soluções úteis a partir da compreensão de códigos de computador.
Propósito
Iniciar as bases do Pensamento Computacional demonstrando o seu protagonismo no mercado de trabalho. Construir uma compreensão introdutória dos conceitos primordiais que norteiam o mundo dos computadores.
Objetivos
· Módulo 1: Descrever a equação que representa a essência dos computadores
· Módulo 2: Reconhecer o processo de exploração do potencial dos computadores através de códigos e algoritmos
· Módulo 3: Empregar códigos simples de instruções de computadores
Introdução
Você sabe como os computadores surgiram?
Muitos pensarão em teorias da conspiração, grupos secretos, investimentos maciços de governos em tecnologia. Outros se lembrarão dos mais velhos comentando sobre os cartões perfurados e dos primeiros computadores, que eram do tamanho de uma sala. Um grupo de apaixonados por tecnologia comentará o uso dessa tecnologia durante as guerras do século XX, quando essas máquinas estavam relacionadas a arquivo e trânsito de informações.
No entanto, o processo é, definitivamente, mais longo e mais complexo. Os computadores não são chips, bits e afins. Computadores são o que as máquinas sempre representaram: homens em busca de soluções. Ao longo dos séculos, essa necessidade nos permitiu criar diques para contenção de água, prédios e até estradas para tornar as grandes viagens mais rápidas.
Não entendeu?
Significa a necessidade x tecnologia. Imagine que você tenha um biscoito delicioso, e sua característica mais maravilhosa é que ele sempre parece que saiu do forno neste exato momento. Será que o biscoito é assim pelo fato de possuir uma fórmula que o faz parecer sempre fresquinho, ou faz muito sucesso por estar sempre fresquinho nos pontos de venda?
Filosoficamente, isso é um dilema; sociologicamente, é perceber uma estrutura estruturante, algo que já existe, mas que, a partir de sua existência, gera mudanças sociais.
Por exemplo:
Os gregos, em um momento de crise – a fim de que os líderes das famílias parassem de brigar, decidem criar um conselho. Esse conselho administraria por meio do voto, e os membros teriam o direito de falar e defender suas ideias. Como essa medida deu certo, os pais passaram a querer que seus filhos estudassem cada vez mais, para que tivessem mais força nesses conselhos. Com isso, geração após geração, a Educação passou a ser cada vez mais valorizada. É sempre assim: o homem busca soluções, que, uma vez criadas, levarão a uma nova situação. Isso faz com que as proposições estejam sempre em mudança.
A filosofia da ciência – e a palavra ciência é ótima, pois está relacionada a tomar entendimento, entender – afirma que o seu desenvolvimento vem da busca do homem por soluções. Assim, cada nova solução gera um novo conjunto de buscas. Uma espada; um par de óculos; o desenvolvimento de cirurgias, de um método de produção, de uma máquina a vapor, do trem, do carro... Em todos os momentos, a tentativa é sempre a mesma: encontrar soluções.
Quando a demanda do século XX exigia velocidade e uma visão mais global, passamos a voar, desenvolvemos o telégrafo, o telefone e introduzimos máquinas que pudessem introjetar essa capacidade humana. Acelerar era uma questão de tempo.
O Pensamento Computacional não é um exercício sobre como as máquinas dominarão o mundo, ou como a Inteligência Artificial substituirá a humanidade.
Trata-se de entender que essas máquinas e seus componentes são nossos filhos; elas reproduzem e aceleram o volume de cálculos, armazenamentos e comunicações que nós idealizamos. Dessa forma, cada vez que precisamos de algo a mais, a máquina trabalha para atender nossas demandas.
Entender isso é perceber que não estamos em uma maratona contra a tecnologia, com medo de nos tornarmos obsoletos. Novas tecnologias surgirão, e isso é algo que nós mesmos buscamos. Cada máquina, cada software, cada hardware tem o propósito de atender, acelerar e realizar um desejo do coletivo. Algo que não tem essa funcionalidade é abandonado, é esquecido.
Seja bem-vindo ao mundo da tecnologia e lembre-se: Você verá aqui o que é necessário para lidar com ela.
Módulo 1
Descrever a equação que representa a essência dos computadores
Equação fundamental dos computadores
Anotem a equação para não se esquecerem dela:
	COMPUTADOR
	=
	A imensa capacidade de processar
	X
	Pela terrível deficiência no pensar
Vamos entender o que é isso.
Este módulo trata dos recursos básicos do funcionamento dos computadores. Isso é muito importante, pois, em pleno século XXI, não é desejável que um profissional pense no computador como algum tipo de caixa mágica com a qual todos interagem diariamente. De fato, no mercado de trabalho atual, é cada vez mais importante que os profissionais saibam como o computador faz o que faz.
É importante perceber que o mercado de trabalho não é um ente determinador, mas, sem dúvida, a relação com a empregabilidade é fundamental. Você consegue perceber alguma função na qual, em alguma medida, o uso da tecnologia não é necessário?
Pense bem: as salas de aula, os treinamentos... Enfim, tudo, de alguma forma, vivencia o uso da tecnologia.
Com isso, nós nos deparamos com um dilema: a adoção da tecnologia não é linear, nem todos têm acesso a ela nem possuem a mesma experiência enquanto usuários.
Durante muito tempo, pensou-se que lidar com os computadores consistia em dominar a tecnologia vigente e aprender suas técnicas e seus fundamentos, pois, assim, você estaria seguro. Porém, como isso é possível, tendo em vista que parte das pessoas já estão no topo do uso da tecnologia, enquanto outros ainda estão dando os primeiros passos?
Atenção: O desespero de diversas instituições gerou o processo mais absurdo: já que todos não podem dispor de tecnologia, então vamos abrir mão dela. Isso só aumentou a segregação, a fragilidade de grupos sociais que não têm acesso à tecnologia. Quando fazemos isso, negamos a vários profissionais a possibilidade de diminuir essas diferenças.
Porém, o que pode ser feito? Se não aprenderemos a usar a tecnologia do momento, se não renegaremos a tecnologia para garantir igualdade, qual a solução proposta?
Uma ideia é entender o funcionamento básico dos computadores, perceber como funcionam essas máquinas e, independentemente da tecnologia atual, compreender qual o sentido de sua atualização – os computadores estão sempre sendo atualizados, uma vez que o homem precisa constantemente de novas respostas e possibilidades.
Atenção: Felizmente, qualquer pessoa pode compreender, basicamente, como os computadores funcionam. Nosso objetivo é explorar as qualidades essenciais dos computadores, como eles funcionam, o que eles podem e o que não podem fazer.
Este módulo não requer nenhum conhecimento prévio em informática.
A essência fundamental dos computadores é que eles são extremamente poderosos e profundamente tolos. Eles são poderosos, pois um computador pode fazer bilhões de operações por segundo e consegue gerar dados a uma velocidade inconcebível para nós, humanos.
Essa é a parte poderosa na essência dos computadores. No entanto, o computador também é muito tolo, pois as operações que ele pode realizar rapidamente são extremamente simples.
Por exemplo, adicionar dois números para obter um terceiro número, ou verificar se um número é zero.
	COMPUTADOR
	=
	Poderosamente rápidos, porém tolos
Portanto, operações tão simples como essas não são capazes de gerar discernimentos ou entendimentos mais elaborados, como, por exemplo, identificar a impressão digital de uma pessoa, certo?”.
Embora você pense dessa forma, computadores fazem isso: identificam digitalmente um indivíduo.
Saiba mais: Estudos revelaram que os humanos possuem impressões digitais singulares. Com base nisso, foi elaborada uma forma de retiraresses dados – primeiro, foi utilizada graxa para colher digitais; atualmente, usam-se luz e calor –, criando um banco de dados com essas informações. Portanto, o trabalho de discernimento é humano; o computador apenas cruza, de forma mais rápida e efetiva, os dados armazenados pelas pessoas.
Isso ocorre porque discernimento e compreensão são qualidades humanas!
É importante compreender o seguinte: o computador é realmente um mundo mecânico, onde é possível executar operações muito simples a uma velocidade incrivelmente alta. Por exemplo, desde 2005, processadores são capazes de executar mais de 1 bilhão de instruções por segundo. 
Já os processadores lançados em meados de 2019 são capazes de executar mais de 48 bilhões de instruções por segundo.
Ao longo do tempo, Hollywood tem retratado em seus filmes computadores que nunca são mostrados como mecânicos, mas, sim, como entidades com características essencialmente humanas, como discernimento, compreensão, criatividade e capacidade de se emocionar.
A realidade não poderia estar mais distante daquilo que é mostrado nos filmes. O que temos é uma combinação engraçada, que une a poderosa capacidade de executar instruções a um conjunto de instruções que, inicialmente, parecem tolas. Então, é necessário compreender como é possível, mesmo assim, criar recursos/soluções interessantes e poderosos.
Computador executa (roda) as instruções conforme o que foi descrito no código.
Qualquer pessoa que interage com computadores, provendo instruções em alguma linguagem de programação, experimenta uma sensação vívida dessa combinação.
E a Inteligência Artificial?
E os robôs que podem ter sentimentos?
Em todos esses casos, a equação fundamental se mantém.
Vamos retomar o início do tema, quando falamos dos gregos. Um dos principais movimentos intelectuais trabalhados pelos gregos foi perceber que, no mundo, existe uma parte física, calculável, com possibilidades amplas, e que, sem essa percepção, não é possível entendê-la – trata-se do mundo físico. Também temos outra parte, que, embora seja proveniente das representações físicas do mundo, não depende delas para a construção dos sujeitos.
Estamos falando da metafísica, a construção de percepções mentais que olham pela lógica, pela argumentação, pelo estudo, pela dialogia, pela capacidade mental de o sujeito alcançar o entendimento. Essa parte não tem limites; suas representações são infinitas.
Uma velha alegoria de Platão ajuda a explicar isso. Trata-se da alegoria da caverna, em que é mostrado que todos nós vivemos em um mundo limitado, físico, de pedra, com as representações nas paredes iluminadas por um fogo contínuo atrás de nós. Quando libertos, o que encontramos é um mundo infinito, perfeito, é o mundo do pensamento, da abstração. 
Nossa capacidade de abstração e de pensar é infinita, mas nossa capacidade de materializar o que foi pensado é limitada. Esse é um dos sentidos da alegoria. Buscamos ser mais eficientes, mais próximos das múltiplas possibilidades de nossa mente.
O mundo perfeito, infinito, com possibilidades de construir e destruir, infelizmente, não mora em uma máquina, mas na capacidade humana. A máquina, o computador, é só mais um aprimoramento de nossos usos e nossas ferramentas, ainda que aprisionados, limitados, mas tentando e buscando ir mais longe.
Agora ficou claro?
Vejamos mais um exemplo:
Enfrentar uma máquina em um jogo de xadrez era uma das maiores diversões do século XX. Durante muito tempo, os grandes nomes do xadrez foram os vencedores, mas, lenta e continuamente, o desempenho das máquinas foi melhorando, e os jornais proclamavam:
Máquina vence o homem! Será mesmo?
Claro que não! Essa disputa nunca foi entre a máquina e o homem, mas, sim, entre o programador e o xadrezista.
Enquanto as máquinas não receberam todas as informações para neutralizar e calcular as probabilidades e dar o melhor resultado, o programador perdeu. Porém, quando a capacidade de processar, arquivar e perceber os melhores algoritmos foi atingida, quando a máquina caminhou o bastante para dar respostas no tempo esperado, tivemos a impressão de que a máquina venceu o homem.
Entretanto, tudo o que ela fez foi executar aquilo que o programador pediu, só que com uma capacidade que o homem, de forma direta, jamais conseguiria.
Após esse entendimento e de ter assistido ao vídeo, coloque aqui o seu relato. Agora é o momento de você organizar suas ideias.
1. A equação fundamental dos computadores a partir de suas narrativas.
2. Algo que, de alguma forma, não valida essa equação fundamental.
3. Provoque alguns amigos e familiares sobre a opinião deles. Não precisa sair daqui, pois as redes sociais e os computadores já lhe dão condição de, em minutos, ter suas respostas.
Vamos fazer o relato de uma experiência. No filme Eu, Robô, ocorre o debate filosófico que estamos propondo. Será que, pela Inteligência Artificial, o algoritmo pode ser compreendido de forma equivocada? Repare que o filme é perfeito no uso da equação primordial, pois, em momento algum, trata de uma mente coletiva para as máquinas. Nem mesmo a Vick, pois tudo o que ela faz é executar uma ordem humana, que não foi feita corretamente. O robô criado pelo doutor segue regras de programação e acúmulo e não cria nada que vá além de sua programação. Embora o detetive busque encontrar algo que comprove a falha – essa nossa expectativa de que as máquinas têm alma, vida própria e são uma ameaça –, isso não acontece. 
É utilizada a equação de formulação – máquinas impressionantemente velozes e capazes de processar, mas totalmente burras, incapazes de “pensar” ou agir fora de sua programação.
Módulo 2
Reconhecer o processo de exploração do potencial dos computadores através de códigos e algoritmos
Entre códigos e algoritmos – aprendendo a lógica do computador
Vamos voltar à dinâmica do entendimento do pensamento computacional. Você está fazendo uma prova de Matemática, e o conteúdo é análise combinatória; portanto, aprendeu todas as fórmulas e métricas, basta aplicá-las. Agora, é ler o problema e colocar tudo lá.
Se a máquina é extremamente rápida, mas muito tola, como é possível a implementação de tantos recursos úteis nos computadores?
Você repetiu o dia inteiro: Cn.k = (n+k-1)!k!(n-1)! E, na hora, surge uma dúvida:
É uma combinação simples ou com repetição? Não sei, eu só aprendi que essa é a fórmula. Não basta apenas colocar os números, e o resultado será alcançado?”.
Claro que não!
Uma fórmula é uma simplificação, e cada um de seus elementos só tem sentido se for observado dentro de um contexto. Demos o exemplo matemático, porém a Matemática é apenas uma leitura da vida.
Imagine um motorista que condicionou o seguinte: sinal (farol) amarelo é para parar. Porém, no trânsito, nem todos pensam da mesma forma. Logo, se esse motorista vê um sinal amarelo e para, pode ser que o condutor que vem atrás, por não pensar como ele, não consiga frear. O resultado é a colisão. O ponto é que, para que um computador execute o que você deseja, ele precisa de informações, padrões e leituras, pois só assim ele será capaz de ampliar suas possibilidades de soluções.
Atenção: Os computadores, e incluímos aí o seu celular ou o PC que você usa, têm a mesma dinâmica. Todos receberam informações – processos e procedimentos – para que pudessem executar o que se espera deles. É isso que vamos estudar agora.
Código
Para compreendermos a essência do funcionamento de um computador, precisamos entender o que é um código.
Então, dentro do computador, temos um corpo de códigos, e eles são apenas uma série de instruções, como, por exemplo: adicione dias e medidas e compare-os.
Você se lembra da equação fundamental, não é mesmo?
Um computador corresponde à velocidade X a incapacidade de pensar. Então, o trabalho da máquina consiste em apenas uma série de instruções; ela só executa o que é pedido na ordem em que recebeu as orientações de quem escreveu o código. O computador é capaz de passar por uma sequência de instruções de uma forma incrivelmente rápida.Quem pensa e estrutura, podendo ser cada vez mais complexo ou simples, é o sujeito que programa.
Há uma série de instruções, e o computador apenas caminha através delas, executando cada uma exatamente como instruído. São as famosas palavras executar e rodar, como você já deve ter ouvido.
Então, sim, um código é executado de forma muitíssimo rápida, mas as instruções individuais são bastante simples, o que leva a uma pergunta natural:
Se essas instruções são tão simples, como podemos ter um recurso útil?
Ou seja, como tornar o computador capaz de realizar tarefas que dependam de algum nível de inteligência e discernimento?
Vamos tentar algo prático.
Usaremos o recurso de redução de olhos vermelhos de fotografias como um exemplo de utilidade do computador. Existem infindáveis exemplos diferentes, como enviar um e-mail, assistir a um vídeo on-line ou qualquer outra tarefa que executamos em nossos computadores diariamente.
Que tal, agora, pensarmos nos filtros para maquiagem? Porém, isso serve para quê?
Para atender aos desejos do usuário. Diverte, faz rir, aumenta a autoestima. A programação não julga, não cria a demanda; ela atende à demanda. Embora receba as instruções e realize as tarefas, a utilidade é do usuário, que precisava daquilo.
Sempre que você pensar em um código, deve imaginar o seguinte: se ele foi criado e, principalmente, se alcança um grande número potencial de utilização, não foi o computador que evoluiu, mas, sim, a sociedade. Alguém captou uma demanda e observou que a máquina, que a criação de um código, poderia suprir essa carência, nem que fosse fazer rir.
Então, o que liga esses dois lados da essência de um computador: a demanda humana e a necessidade de criação de um código para alcançar a solução? A resposta é a seguinte: programadores.
Voltemos ao exemplo dos olhos vermelhos. Um programador de computador talvez tenha tido a seguinte ideia: “Seria legal se os computadores fossem capazes de reduzir os olhos vermelhos de fotografias, pois esse defeito é meio macabro, e eu fico desconfortável ao vê-lo”.
Essa é uma ótima ideia!
Trata-se de um discernimento, uma escolha humana que atende a seus anseios: deveríamos ter redução de olhos vermelhos. Assim, o programador de computador pensa em uma maneira de tornar isso possível. Resumidamente:
Algoritmo
Para usar o e-mail, assistir a um vídeo, conversar pelo WhatsApp, realizar operações bancárias, ou qualquer outro recurso útil via computador, smartphones etc., foi preciso que, em algum momento, uma pessoa ou uma equipe pensasse:
“Bem, deveríamos escrever um algoritmo para isso”.
Alguém estruturou os procedimentos necessários e, depois, transformou os passos de alto nível em instruções suficientemente simples, para que o computador/smartphone pudessem executá-las. Essa pessoa ou a equipe trabalhou, então, escrevendo o código para a solução. Em seguida, um bom tempo foi gasto para testar e melhorar o código, até que ele, de fato, representasse com fidelidade o algoritmo projetado originalmente.
O programador pode se concentrar em ser criativo, para, então, criar um algoritmo capaz de resolver um problema real.
Programadores de computadores são os responsáveis por discernir um aproveitamento útil, transformar a ideia de aplicação (Ex.: redução de olhos vermelhos em fotos) em um algoritmo e traduzir esse discernimento em uma sequência de instruções simples, compreensíveis para o computador. As máquinas, por outro lado, são inacreditavelmente rápidas. Assim, programadores e computadores formam uma combinação extremamente poderosa. Vamos entender a diferença entre código e algoritmo.
	CÓDIGO
	O código é um conjunto qualquer de instruções simples escrito em alguma linguagem padrão compreensível para o computador.
	ALGORITMO
	Por outro lado, um algoritmo é um termo que reflete uma ideia mais completa, em que o conjunto de instruções possuem uma finalidade útil. Um algoritmo não precisa ser escrito em uma linguagem de computador, podendo ser escrito, por exemplo, em português.
Suponha que você tenha pensado em um algoritmo com a finalidade de calcular a idade de pessoas baseado em sua data de nascimento. Então, você começa a escrever um código que deve seguir uma das linguagens de programação padrão. Enquanto não estiver funcionando, não poderá ser classificado como um algoritmo, pois ainda não alcança sua finalidade.
A imagem a seguir pode ajudá-lo, caso você ainda esteja inseguro quanto à diferença.
	
CÓDIGO
	
ALGORITMO
	DEFINIÇÃO SIMPLIFICADA
	Sequência de instruções que computadores podem executar.
	Sequência de passos simples e bem projetados para realizar uma tarefa ou resolver um problema.
	LINGUAGEMa
	Deve ser escrito em uma linguagem de programação padrão, senão os computadores não conseguirão executá-lo.
	Pode ser escrito em português ou em uma linguagem de programação padrão.
Atenção: Então, no que o computador é bom? Bem, o computador é bom em ser rápido e barato.
Lei de Moore
A previsão feita há mais de 50 anos por Gordon Moore é fantástica. A tecnologia está em evolução e desenvolvimento contínuos. Afinal, cada vez mais, sistemas dependem da tecnologia, em virtude de sua interconexão, permitindo a ampliação da tecnologia e dos produtos e aumentando a velocidade de sua substituição.
Dessa forma, a cada nova geração, um conjunto geracional antigo de tecnologia passa a estar presente no mercado, sendo consumido por públicos que não teriam acesso antes. Por outro lado, a cada evolução, a capacidade de troca de dados e informações seriam maiores, e a necessidade de uso de material, menor, permitindo um barateamento relativo. No limite, a evolução tecnológica acaba barateando os computadores.
A popularização dos computadores é uma das maiores provas daquilo que foi apontado por Moore:
Gordon Moore
Nos anos 1980, nos Estados Unidos (o que, no Brasil, só ocorreu a partir dos 1990).
A primeira onda de computadores pessoais, os PC, ocupou os espaços nas lojas lentamente. Essas máquinas deixaram de ser enormes e pesadas.
Já nos anos 2000, as telas e as conexões eram a novidade
Nos anos 2010, as bandas largas se multiplicaram.
Com o passar do tempo, o computador foi diminuindo, podendo ser encontrado em forma de tablets, laptops, smartphones.
O acesso à tecnologia se deu em um tempo muito curto, o que é impressionante. Quando achamos que dominamos determinada tecnologia, tudo parece mudar de repente. É assustador!
Porém, sabe o que de alguma forma não mudou?
A dinâmica.
Reflexão
Você aprendeu a lógica do funcionamento do computador. Vamos revisar:
Um computador é apenas mais uma das históricas tentativas humanas de facilitar e resolver demandas que surgem de forma recorrente. Na busca dessas demandas, cada inovação que aparece torna-se uma estrutura – quer dizer, parte da sociedade, ao mesmo tempo, é estruturante e força novas buscas, transformando toda a sociedade. Nós, humanos, temos essa característica, e as máquinas vivem para atender demandas que são pensadas e estruturadas por nós.
Depois que uma demanda é pensada, precisamos focar no processamento das informações e na capacidade de armazená-las. Isso, aliás, é a origem de todo o processo da computação. Homens precisavam ampliar sua capacidade de armazenamento, de reprodução, de execução.
Agora, pense sobre a questão. Em seguida, construa um texto que conte um pouco da história de como a tecnologia (em suas fases de desenvolvimento) impactou em sua vida escolar, em sua casa etc.
Esse exercício é para você pensar em velocidade, mas é importante que também perceba: continuamos desenhando códigos e executando algoritmos, permanecemos como um operador de máquina da Revolução Industrial, ou como uma criança aprendendo a ler e a escrever, que necessita entender a mecânica de funcionamento e a busca de melhoria da execução.
Pense nisso!
Módulo 3
Empregar códigos simples de instruções de computadores
Códigos em execução
Neste módulo, queremos chegar ao ponto em que você possa escrever algum código de computador, executá-loe ver o que ele faz.
No computador, tudo se resume realmente a códigos em execução (rodando). É assim que as coisas acontecem. Assim, para que a natureza dos computadores seja entendida, nada melhor do que rodar um pouco de código e ver como ele funciona.
Atenção: Não se preocupe, pois não veremos casos complexos com um milhão de linhas de código, mas, sim, apenas um pouco de código. Apenas o mínimo, para que você tenha o primeiro contato com o que é escrever código de computador.
Antes de chegar ao código, será necessário um pouco de paciência. Os elementos de código que serão mostrados aqui não são chiques, chamativos ou complexos. Eles são muito simples. Talvez seja um pouco como um brinquedo de peças de encaixe, isoladas, dispersas, complexas; porém, com o tempo e a familiaridade, as possibilidades e o uso vão se modificando.
Assim como usamos alguma língua (Português, Inglês etc.) para conversar com as pessoas, para escrever códigos que o computador compreenda, é necessário usar uma das linguagens disponíveis. Existem várias linguagens de computador diferentes para informar ao computador o que fazer.
Aqui, utilizaremos uma das mais usadas na atualidade, a JavaScript. Usaremos somente os principais recursos, para que você possa escrever e manipular códigos bem simples e brincar com a ideia-chave: compreender de fato como funcionam os computadores.
Para compreender como imprimir strings, veja a Prática 2 a seguir.
Strings: Strings e números são os dois tipos de dados muito comuns no código de computador. Por exemplo, uma string é usada para lidar com nomes de pessoas, endereços, endereços de páginas web, endereços de e-mail, ou até mesmo um parágrafo, quando alguém está redigindo uma redação. Todos esses exemplos de tipos de textos são armazenados na memória do computador como strings.
Esse é apenas um segundo tipo de dados que seremos capazes de usar para informar ao computador como fazer as coisas. Existem muitos outros tipos de dados, mas, por enquanto, nós nos limitaremos aos vistos até agora.
Outra novidade presente no código-fonte da Prática 2 é o uso de comentários na segunda linha.
O que temos de novidade aqui?
O que fizemos foi usar a sintaxe padrão para informar ao computador que o que está sendo impresso é um texto (string). Para isso, cercamos as strings Teste, Bom dia e Tchau com aspas duplas.
Ao clicar em Rodar/Executar, você pode ver os textos e valores numéricos corretamente impressos em Saída.
Um comentário, em JavaScript, começa com duas barras. Em seguida, você pode escrever notas para você mesmo, para lembrá-lo, no futuro, do que você pretendia ou do que está tentando fazer neste ponto do seu código. O computador sabe ignorar comentários, então é apenas uma maneira de adicionar decorações/lembretes ao código com pequenas observações.
O uso de comentários é considerado bastante importante, pois ajuda o programador a compreender um código que não foi escrito por ele, ou até mesmo um código que foi escrito por ele há tanto tempo, que ele não lembra mais como raciocinou para escrever aquele trecho de código.
Um exemplo intrigante que podemos citar aqui é colocar a palavra print no lugar de Tchau. Isso é intrigante, pois print também é o nome da instrução de impressão reconhecida pela linguagem de programação que estamos usando.
O que ocorrerá ao substituirmos Tchau por print e clicarmos e Rodar?
Se você mesmo fizer este teste na Prática 2, obterá o resultado ilustrado na figura a seguir.
Portanto, quando sequências de caracteres são colocadas entre aspas duplas, como neste exemplo, o computador entende que se trata apenas de dados passivos, e lida com eles conforme esperado.
Atenção: Note que temos uma lição importante aqui sobre sintaxe. Nós já sabemos que ela é restrita e mecânica. No entanto, é importante entender que você está seguindo um padrão/convenção ao escrever um código de computador que envolve a sintaxe, o que é característico da linguagem de programação. Então, é muito comum, mesmo para programadores muito profissionais, a ocorrência de pequenos erros de sintaxe.
Quando há um erro de sintaxe, ao clicarmos no botão de execução, haverá alguns erros de sintaxe listados em Saída. Então, é parte da tarefa de quem escreveu o código corrigir esses erros de sintaxe até que o computador aceite que as instruções estão de acordo com o padrão de sintaxe da linguagem de programação em uso. Esse é apenas um processo rápido, superficial e comum.
A razão pela qual estamos discutindo isso neste módulo é que, quando alguém está apenas começando a aprender a escrever códigos (programar), será bastante comum se deparar com erros de sintaxe, pois isso é realmente comum. Então, jamais se permita ter a impressão de que você não está entendendo como escrever código. Apenas entenda que todo mundo passa por erros de sintaxe, inclusive programadores com décadas de experiência. Então, quando se deparar com erros de sintaxe, apenas faça uma checagem rápida e cuidadosa para corrigir os erros e seguir adiante.
Para promover a ideia de que o erro de sintaxe não é grande coisa, queremos mostrar como consertar isso. Veremos alguns exemplos práticos a seguir. São apenas alguns exemplos de código, todos com erros de sintaxe. Queremos que você treine o processo de identificá-los e corrigi-los.
Todo mundo passa por erros de sintaxe.
Vamos aprender a identificá-los e corrigi-los?
O resultado de cada um dos seis exemplos a seguir deve ser imprimir em Saída as letras destacadas em verde. Você precisa corrigir a sintaxe de cada um dos seis exemplos. Depois que você corrigir a sintaxe das instruções, cada um dos 6 exemplos imprimirá exatamente as três linhas indicadas em vermelho mais à frente.
Saída esperada para cada um dos seis exemplos práticos a seguir:
Resolução
1. No primeiro exemplo, o segundo print está escrito errado. Há um l no lugar do i.
2. No segundo exemplo, faltam aspas após o segundo B.
3. No terceiro exemplo, falta o parêntese direito na terceira instrução.
4. No quarto exemplo, falta “,” entre as duas letras B.
5. No quinto exemplo, está faltando o primeiro B na segunda linha. Além disso, o terceiro print está escrito errado (pront).
6. No sexto exemplo, está faltando o parêntese esquerdo na primeira linha e o parêntese direito na última linha.
Por fim, precisamos abordar mais um conceito básico: variáveis. Uma variável no computador é como uma caixa, ou seja, um local onde podemos armazenar valores para uso futuro.
Então, se tivermos um código como o descrito a seguir, onde atribuímos o valor 7 a uma variável V, o que isso significa é que há uma caixa no computador chamada V, conforme ilustrado na tabela a seguir, nós simplesmente podemos armazenar um valor, como um 7, nesta caixa. 
Também poderíamos armazenar qualquer valor que quiséssemos.
Código para atribuir valor a uma variável V
V=7;
O que significa na prática
“Caixa” de nome V, onde atribuímos o valor numérico 7
"Caixa" V 7
Sendo um pouco mais específico, essa “caixa” é, na verdade, um espaço na memória do computador, em que podemos armazenar valores, e V é o nome que damos a esta área reservada para armazenar o valor que desejarmos.
Em linhas posteriores, no código, se um V aparecer, o computador sabe o que colocamos dentro da caixa (em nosso exemplo, o 7). A variável se torna uma espécie de abreviação conveniente para qualquer valor que eu queira usar.
Veja o exemplo a seguir.
Na primeira linha, atribuímos o valor 7 à variável que optamos por chamar de V.
Na segunda linha, damos um comando para imprimir o valor da variável, que será 7 neste exemplo.
Na terceira linha, imprimimos uma string informando “O valor da variável é:” e, depois, indicamos “V” para que o computador imprima de fato o valor recuperado da variável.
Uma grande vantagem do uso de variáveis é que, se o programador quiser usar um valor diferente em seu código, basta trocar o valor na linha de atribuição de valor à variável, e todo o restante do código passará a usar o novo valor sempre que houverreferência à variável, que, em nosso exemplo, é V.
Observe o que acontece quando substituímos 7 por 1980 e clicamos em Rodar.
Notou que todos os locais em que V foi referenciado resultaram em 1980 na saída?
Escreva, no quadro a seguir, um código que atribua a uma variável chamada N a string Guilherme, e depois clique em Rodar para obter a Saída a seguir destacada em vermelho:
Guilherme Guilherme Guilherme
Eu conheço um amigo chamado Guilherme.
Considerações finais
Pensamento Computacional parece um tema futurístico. Inclusive, muitos alunos devem ter se lembrado dos filmes de catástrofe, em que a tecnologia se levanta contra o homem. Neste tema, você foi tranquilizado sobre essas questões. Primeiro, descobriu que máquinas são terrivelmente ignorantes e profundamente capazes. Somente a partir da interação e da estruturação de um conjunto de linguagens específicas, o grande potencial das máquinas – armazenamento e processamento – pode ser efetivamente estruturado.
Sendo assim, Pensamento Computacional é um convite para que você entenda como funciona essa relação entre máquinas e homens e, com isso, perceba que não é preciso dominar tecnicamente uma ferramenta apenas em determinado momento, pois, embora elas sejam atualizadas constantemente, a dinâmica e os fins permanecem os mesmos.
Neste sentido, o que você precisa conhecer, então, são as linguagens que compõem esse novo universo: códigos e algoritmos. Se você entendeu que código são as instruções que o ser humano dá à máquina – mostrando que computadores executam nossas demandas – e que algoritmo é a linha deste comando estruturado para que a máquina interprete e execute, você entendeu a essência da dinâmica comando, forma de comando, execução, novas demandas, comandos e forma de comando, sempre impulsionada pelas demandas humanas.
Para concluir, sugerimos que você faça inúmeros testes (em alguma das práticas acima) a fim de perceber como se relacionou com o assunto, criou e executou a dinâmica proposta. Como uma criança que aprende a engatinhar e a ficar em pé, daqui por diante, busque dar os primeiros passos, entendendo a mecânica, e, em breve, você estará correndo.
AULA 2 – FUNDAMENTOS DE SOFTWARES DE COMPUTADORES
Definição
Conceitos básicos e primordiais sobre a execução de softwares. Apresentação das formas como instruções escritas por programadores para serem executadas
por CPUs.
Propósito
Compreender a lógica dos softwares, que são parte de nosso mundo e permanecerão assim por muito tempo.
Objetivos
· Reconhecer conceitos básicos sobre softwares
· Identificar softwares funcionais, como sistemas operacionais e o firmware
· Diferenciar os dois principais tipos de linguagens de programação
Módulo 1
Reconhecer conceitos básicos sobre softwares
Introdução
Neste módulo, descreveremos os conceitos básicos sobre software de computadores e responderemos, de forma introdutória, às seguintes perguntas:
· O que é software?
· O que é código de computador?
· Como os softwares rodam (são executados) em um computador?
O que é software?
Sempre que você baixa um programa ou vê um computador ligado, está presenciando algum software sendo executado.
Até mesmo no passado, telégrafos, telefones, aparelhos de fax, todos já possuíam um software, um conjunto de ações programadas que usavam a estrutura física e lhes davam materialidade: voz, letras e imagens. Cada máquina exercia exatamente a sua função, e repare: estamos indo além da função mecânica.
Agora, imagine uma máquina de costura.
Ela faz sempre a mesma operação, um movimento mecânico repetitivo.
Porém, quem atua para que ela execute funções a partir do domínio de técnica é o sujeito; a máquina mecânica é estruturada, e a mente humana é quem faz a função.
Quando um sujeito decidiu que era possível programar a máquina para fazer além da função repetida, para trançar uma estrutura, sucedendo e alcançando a partir disso objetivos claros e novos, criou-se o software.
A máquina é capaz de ser programada para cumprir um conjunto de funções definidas e desenhadas pelo sujeito.
O computador é filho da Guerra Mundial, da necessidade de novos desenvolvimentos, de realizar processamento de informações e comunicação mais eficientes, cruzando dados e armazenamento.
Porém, não basta construir a máquina; é necessário executar, definir o que se deseja, programar e reprogramar.
Softwares para computadores, então, passaram a ser uma demanda, uma construção e sofisticação contínuas.
Sempre que um software é criado, imediatamente, passamos a pensar em como melhorá-lo, transformá-lo em algo mais eficiente. Pessoas vivem disso e recriam isso.
Nunca mais dominaremos perfeitamente todos os softwares que desejamos; afinal, sempre que aprendemos sobre um, novas mudanças estarão chegando.
Já jogou videogame? Esses aparelhos mudaram e continuam mudando; hoje, possuem gráficos e programações cada vez mais complexos.
Para entender tudo isso, é necessário compreender o que é, afinal, um software para computadores.
Mas, afinal, o que é software?
Software é o conjunto de funções executadas na programação de um computador.
Embora não seja uma entidade física, ganha materialização em sua construção virtual, independentemente da rede.
É a manifestação de uma imagem e dos desdobramentos a partir da construção de códigos e execuções.
Vamos entender melhor esse processo:
A CPU (Central Processing Unit), também chamada de processador, é uma espécie de cérebro. É ela quem realmente executa o que chamamos de “instruções de código de máquina”.
Estas instruções são extremamente simples e constituídas apenas dos números 0 (zero) e 1 (um), conhecido como código binário.
Extremamente simples: Por exemplo, em uma instrução de código de máquina é possível adicionar dois números; já em outra pode-se comparar dois números para ver qual deles é maior.
Podemos pensar no conjunto de instruções de código de máquina que uma CPU é capaz de executar como sendo um idioma de baixo nível, ou “código de máquina” (também conhecido como “código nativo”). O idioma do código da máquina está intimamente conectado ao projeto do hardware da CPU , ou seja, não é algo que possa ser mudado à vontade.
Hardware: Hardware é o termo usado para se referir à parte física da coisa, o equipamento.
Cada família de CPUs compatíveis (por exemplo, a popular família Intel x86 usada em computadores pessoais) possui seu próprio código de máquina específico, que não é compatível com o código de máquina de outras famílias de CPUs.
Não é compatível com o código de máquina de outras famílias: Por exemplo: os programas de PCs não rodam em smartphones, pois os idiomas de baixo nível dessas CPUs são incompatíveis.
Como isso é feito?
Os programadores escrevem instruções usando alguma linguagem de programação.
Vamos a um exemplo: Na linguagem JavaScript, a instrução (linha de código) para definir um pixel (ponto) da tela com nível de vermelho para o nível 255 seria:
pixel.setRed(255).
Esta instrução é muito mais complexa do que uma instrução de código de máquina individual que CPUs são capazes de executar. Então, nós a chamamos de uma instrução de alto nível.
Alto nível: O termo “alto nível” designa a ideia de que as instruções são mais próximas de nossa língua falada, se comparadas ao código de máquina, que é de “baixo nível”.
Instruções de alto nível são facilmente compreensíveis pelos humanos, mas os computadores não são capazes de executá-las.
O que ocorre, então, é que, antes de ser executada, a instrução de alto nível será expandida em uma sequência – talvez cinco ou dez instruções de baixo nível (código de máquina) –, de modo que, quando essas cinco ou dez instruções forem executadas, uma após a outra, o resultado final terá o efeito de definir o valor vermelho do pixel para 255, conforme designado pela instrução de alto nível escrita pelo programador. Este processo está resumido na figura abaixo:
Você pode estar se perguntando:
Como corrigir um erro de programação cometido pelo programador?
Se você quiser adicionar um recursopara corrigir um bug no Firefox (por exemplo), a forma real de fazer isso é voltar ao código-fonte original e realizar os ajustes necessários, alterando as instruções.
Em seguida, é necessário executar o compilador novamente para compilar (traduzir de linguagem C++ para linguagem de máquina) uma nova versão do Firefox que incluirá os ajustes realizados no código-fonte.
Software de código aberto
É importante construirmos uma noção do que significa software de código aberto.
Trata-se de uma forma de distribuição de software em que o programa compilado é fornecido, mas também há acesso ao código-fonte original do programa.
Geralmente, o código-fonte é acompanhado de uma licença que diz algo como:
Importante: Trata-se de uma forma de distribuição, normalmente gratuita, de software em que o programa compilado é fornecido, mas também há acesso ao código-fonte original do programa.
Mas qual a diferença entre softwares de código fechado e softwares de código aberto?
Atenção: Em geral, existem diversos tipos diferentes de termos de licença para software de código aberto, mas, na maioria das vezes, eles exigem que, se você fizer alterações no código-fonte e adicionar algum recurso, você deve oferecer essas alterações à comunidade. Assim, da mesma maneira que você se beneficiou dos outros ao obter o programa gratuito e seu código-fonte, eles podem se beneficiar do seu trabalho.
Até aqui, comentamos sobre uma categoria de linguagens de programação onde compiladores são usados para traduzir o código-fonte, de forma a obter um arquivo executável que pode ser distribuído aos usuários. Agora vamos nos concentrar na seguinte questão:
O que é um programa?
Observe novamente o lado direito da figura abaixo e perceba que a CPU está executando uma sequência de instruções presentes na memória RAM.
Então, um programa/aplicativo, como, por exemplo, o navegador de Internet Firefiiiox, ou o editor de textos Microsoft Word, nada mais são do que uma enorme sequência dessas instruções simples de código de máquina.
Assim, quando o Firefox está sendo executado no seu computador, isso significa que, em algum lugar na RAM, há um bloco dessas instruções, e a CPU as executa uma após a outra sequencialmente.
Tudo o que você pode ver o Firefox fazendo – como piscar o cursor, conectar-se via rede a uma URL fornecida pelo usuário, desenhar imagens na tela, obter páginas da Web, entre outros – ocorre graças à CPU, que roda as instruções de forma tão inacreditavelmente rápida, que você interage com o Firefox de forma fluida e natural.
Portanto, as instruções individuais são realmente triviais, certo?
De que forma isso leva o cursor a piscar no ponto onde podemos digitar algo
Uma forma bastante simples de pensar sobre isso é usar uma analogia: o relacionamento entre areia e escultura.
Cada instrução em código de máquina seria um grão de areia, que, por si só, é sem sentido e se parece com todos os outros. Porém, se você juntar grande quantidade de maneira certa, pode construir uma estrutura geral complicada, conforme sua imaginação e seu objetivo.
Em linhas gerais, é assim que programas como o Firefox, Chrome, Microsoft Word, os jogos digitais, ou qualquer outro aplicativo, são construídos.
Se olharmos à esquerda da figura acima, veremos a CPU trabalhando para executar as instruções de código de máquina disponíveis na RAM.
Para executar as instruções de código de máquina, as instruções usam um método chamado ciclo busca-execução (fetch execute cycle).
No ciclo busca-execução, a CPU iniciará buscando a instrução 1 e carregando-a para dentro de si (CPU), e a executará.
Por exemplo, a CPU adicionará os dois números. Após executar a instrução 1, a CPU simplesmente desce na lista e executa novamente o ciclo busca-execução para a instrução 2. Em seguida, faz o mesmo para a instrução três, e assim por diante. As instruções são executadas uma após a outra sequencialmente.
Saiba mais: Quando dizemos que uma CPU opera a 4 GHz (giga-hertz), ou 4 bilhões de operações por segundo, estamos nos referindo exatamente a essas pequenas instruções.
Há uma enorme variedade de tipos de instruções, mas há dois tipos específicos que vale a pena comentarmos, mesmo em um curso introdutório. Veja a seguir:
1. Instrução para alterar a ordem de execução de instruções
Normalmente, a CPU apenas desce a lista e faz a execução das instruções na ordem em que elas estão armazenadas na memória.
Conforme ilustrado na imagem abaixo, digamos que a instrução quatro diga: “Pule para trás e comece a executar novamente na instrução 1”.
Neste caso, a CPU executaria as instruções na ordem: 1, 2, 3, 4 e, em seguida, em vez de seguir para a instrução 5, daria um pulo para trás e iria para (goto) a instrução 1, executando-a novamente, seguida das instruções 2 e 3.
Goto: Goto é uma instrução na linguagem de informática e significa: vá para a linha indicada e siga executando o código a partir desse local
É assim que as estruturas de repetição de instruções (loops) são implementadas pela CPU.
2. Instrução que testa alguma condição
Se a condição for verdadeira, diz, por exemplo, que ela avance para a instrução 5.
Há uma instrução que olhará para alguma condição; assim, se a condição for verdadeira, é como dizer à CPU: “Vá para (goto) a linha indicada”. Caso seja falsa, a CPU vai para (goto) outra linha.
Então, organizando as instruções, você pode obter o efeito de uma estrutura condicional, conhecida como declaração if.
Como o programa vai parar na memória RAM?
Ao serem instalados, programas são colocados em um dispositivo de armazenamento persistente, como HD, SSD ou pendrive.
Vamos entender com o exemplo do Firefox:
O programa é basicamente um arquivo chamado Firefox.exe, que possui muitos bytes. Na maioria dos casos, esses bytes são apenas as instruções que compõem o programa, além de alguns ícones e fotos, por exemplo.
O que acontece quando você clica duas vezes no arquivo Firefox.exe, ou no atalho que aponta para este arquivo?
Basicamente, são os três passos indicados como abaixo:
	Passo 1
	Cópia dos bytes (ou seja, instruções) que compõem o arquivo do dispositivo de armazenamento persistente (HD, por exemplo) para uma área desocupada da memória RAM. Esta cópia é comumente chamada de carregar (load) o programa.
	Passo 2
	Após o carregamento (cópia do HD para a RAM), a CPU já é capaz de realizar o ciclo busca-execução para rodar o programa Firefox. Então, o passo dois consiste em apenas dizer à CPU “Aqui está a instrução 1 de um programa. Você deve iniciar, a partir desta instrução, o ciclo busca-execução para rodar este programa”.
	Passo 3
	A CPU começa o processo de rodar/executar, de forma inacreditavelmente rápida, as instruções. Pronto, nosso Firefox está rodando, e o usuário já consegue navegar pela internet.
Módulo 2
Identificar softwares funcionais, como sistemas operacionais e o firmware
Sistema operacional
Comumente, quando se estuda conceitos básicos de software e como ocorre a execução de instruções pela CPU, surgem questionamentos como:
· Quem lida com o duplo clique que usamos para ordenar que um programa seja executado?
· Quem garante que um novo programa carregado na RAM irá para uma região da memória que está realmente ociosa, sem que haja sobreposição de outros programas em execução?
· Quem ordena o carregamento de um programa do HD para a RAM?
· Ao final da execução de um programa, quem realizada as operações, como, por exemplo, liberar a região da RAM onde o programa esteve durante sua execução?
A resposta às perguntas descritas anteriormente é a seguinte: é o sistema operacional (SO).
Trata-se de um conjunto de tipos de programas administrativos e de supervisão que organizam todo o sistema. O sistema operacional está para os computadores como o governo está para uma nação.
O SO de um computador é como um primeiro programa de supervisão que começa a ser executado quando o computador é inicializado (“inicializa”). Ele desempenha um papel administrativo e contábil invisível nos bastidores.
Quando um desktop,laptop ou smartphone é iniciado, o SO, normalmente, organiza as coisas e inicia um programa “explorador de arquivos” que exibe janelas e menus, entre outros, que mostram ao usuário quais sistemas de arquivos estão disponíveis. Isso permite que ele navegue e opere seu equipamento, solicitando que programas/aplicativos sejam iniciados ou finalizados, interagindo com esses programas/aplicativos.
Em resumo, conforme ilustrado na figura abaixo, o SO é responsável por intermediar as solicitações que os usuários fazem a programas/aplicações, gerenciando como tudo isso deve ser demandado do hardware.
O sistema operacional mantém as coisas organizadas em segundo plano, para que vários programas possam ser executados ao mesmo tempo, o que é conhecido como “multitarefa”.
O SO fornece a cada programa sua própria área de memória, de modo que cada programa acessa apenas seus próprios recursos, tentando limitar, por motivos de segurança, o que um programa incorreto ou mal-intencionado pode fazer.
Manter os programas separados é conhecido como “área restrita”. Isso é importante para que cada programa funcione independentemente, sem interferir em outros programas ou no sistema como um todo. Da mesma forma, cada programa tem algum acesso à tela através de uma janela, mas essa área de saída é separada da saída de outros programas.
Vamos ver dois exemplos?
	Arquivo “Word.exe”
	Um arquivo .exe é essencialmente apenas um arquivo de instruções de código de máquina. Quando você clica duas vezes no programa, está ordenando que o SO “inicie” o programa, executando as etapas de limpeza de alocação de uma área de memória na RAM para o programa, carregando a primeira seção do código de máquina do programa nessa memória e, finalmente, direcionando a CPU para começar a executar esse código
	Câmera Digital
	Uma câmera digital também é um pequeno computador. Quando é iniciado, ele não executa um programa de gerenciamento de arquivos. Em vez disso, depois que a limpeza básica for configurada, a câmera poderá executar um único programa que desenha os menus, entre outros, na tela da câmera e responde a cliques nos botões da câmera, e assim por diante.
Portanto, em particular, o SO gerencia vários programas e inicia e finaliza programas. Dessa forma, um computador moderno pode executar vários programas ao mesmo tempo; assim, o SO trabalha (duro) para manter as coisas organizadas.
BOOT e REBOOT
O sistema operacional é, antes de qualquer programa do usuário, a primeira coisa a ser executada quando seu computador é ligado.
Somente após o carregamento do SO, o usuário pode selecionar os programas que deseja rodar, clicando duas vezes nos ícones correspondentes na área de trabalho.
Você pode estar se perguntando:
Qual é o programa que cuida da inicialização do SO logo que o computador é ligado?
Há um programa especial, e muito pequeno, denominado firmware, que é gravado pela fábrica no hardware.
O firmware é responsável por detectar quando um computador estava desligado e acaba de ser ligado, e realiza alguns procedimentos iniciais de teste de hardware, para então, basicamente, procurar um dispositivo de armazenamento persistente que contenha um SO instalado.
Depois disso, é possível, então, iniciar seu carregamento (cópia das instruções que compõem o SO do disco para a RAM e indicação para a CPU de qual é a primeira instrução do SO a ser executada). Este processo está ilustrado abaixo.
O termo firmware é usado, geralmente, para se referir especificamente ao firmware de inicialização, que controla um computador desde o momento em que é ligado até o sistema operacional principal assumir o controle.
A principal função do firmware de inicialização é inicializar o hardware e, em seguida, inicializar (carregar e executar) o sistema operacional principal.
Veja o esquema a seguir de um computador pessoal. Neste tipo de computador o firmware de inicialização é chamado, geralmente, de BIOS (Basic Input/Output System), ou sistema básico de entrada e saída.
Este processo é comumente denominado inicializar (boot ou boot up).
E quando ocorre o Reboot?
Ocorrerá o reboot quando ordenamos ao SO que o computador seja reiniciado, ou seja, o próprio SO cuida das tarefas necessárias para a finalização e o desligamento do computador. Imediatamente, o computador é religado, e o processo de boot recomeça.
Agora que conhecemos conceitualmente os sistemas operacionais, que tal darmos uma olhada em alguns exemplos de SO?
		
Chegando ao final deste módulo, podemos fazer algumas perguntas:
· Somente os sistemas operacionais e os firmwares são exemplos de softwares funcionais?
· O que define um software como funcional? Qual a sua importância no âmbito do pensamento computacional?
Módulo 3
Diferenciar os dois tipos de linguagens de programação
Introdução
Em sistemas computacionais contemporâneos, é extremamente raro escrever códigos de máquina manualmente. Isso ocorre porque eles são compostos por um número enorme de instruções muito simples; assim, fica difícil para os humanos fazerem esse processo.
Em vez disso, um programador escreve o código (instruções) em uma linguagem de computador de “alto nível”, com recursos mais úteis e poderosos do que as operações simples encontradas no código da máquina. Exemplos de estruturas de alto nível são:
· Estruturas de repetição (loops), em que o programador ordena que um conjunto de instruções seja executado repetidamente;
· A função print(), que imprime algo na tela; ou
· A estrutura condicional (if), onde o programador solicita que alguma condição seja testada, e, caso passe no teste, algumas instruções sejam executadas.
Nenhum desses recursos de alto nível está diretamente presente no código da máquina de “baixo nível”. Eles são adicionados por linguagens de programação, como JavaScript, Java, Python, C, C++, entre outras.
Tipos de linguagem de programação
A classificação de linguagens de programação é mais detalhada e abrangente do que a apresentada aqui, mas vamos nos limitar, por questões de simplicidade, a agrupá-las nestas categorias.
O funcionamento de uma linguagem de programação é definida por seu tipo, que pode ser:
Linguagem Compilada
São aquelas em que o processo de tradução (compilação) é feito com antecedência e o código é necessariamente executável.
Quando se utiliza uma linguagem compilada, é necessário executar um programa para traduzir os arquivos-fonte, legíveis em linguagem de alto nível, em código executável. As linguagens compiladas têm a vantagem de produzir código de alta performance, o qual está ajustado para o funcionamento em um tipo específico de processador ou arquitetura de processador. Aplicativos compilados, chamados de código binário, só podem rodar no tipo de computador para o qual foram compilados, uma vez que esses aplicativos consistem, na realidade, em instruções em linguagem de máquina, entendidas e executadas pelo microprocessador.
(INDRUSIAK, 1996, p. 4)
Exemplo
No código a seguir, escrito na linguagem C++, na primeira linha, o texto/string “Bom dia” está sendo atribuído à variável “a”, e, na segunda linha, a variável “b” recebe o conteúdo da variável “a” (ex.: “Bom dia”), e a exclamação é adicionada ao final da frase.
a = “Bom dia”;
b = a + “!”;
Então, o programador escreve o que é chamado de código-fonte na linguagem de programação que escolher. Como vimos, humanos preferem linguagens de alto nível pois são mais fáceis e intuitivas.
Como a CPU consegue executar (rodar) instruções escritas em linguagem de alto nível, se sabemos que a CPU só executa código de máquina?
Uma das estratégias utilizadas é usar o compilador.
Como já vimos, trata-se de um software de propósito muito específico: olhar para o código-fonte escrito pelo programador e traduzi-lo, para criar um grande corpo de código de máquina compatível com a CPU em que o programador deseja rodar o programa.
Exemplo:
Talvez haja uma parte do código-fonte onde existe uma instrução if (estrutura condicional), mas não há uma instrução específica em um código de máquina para umainstrução if.
No entanto, talvez haja uma sequência de cinco instruções de código de máquina que, na verdade, chegam ao mesmo resultado de uma instrução if. Portanto, o compilador faz esse tipo de expansão.
Vamos usar o Firefox como exemplo novamente:
Esse navegador é escrito em C ++. Assim, para criar uma nova versão do Firefox, após realizar os ajustes desejados em seu código-fonte, alguém executa o compilador C ++, que lê o grande corpo de código-fonte em linguagem de alto nível que constitui o Firefox e produz, essencialmente, o arquivo Firefox.exe.
Este arquivo é a saída do compilador e contém as instruções de código de máquina obtidas através da tradução do código-fonte escrito pelos desenvolvedores do Firefox.
A etapa de compilação pode ser feita uma vez e bem antes da execução do programa (por exemplo, produza o Firefox.exe na sede da entidade que o desenvolve, a Mozilla, e depois distribua o Firefox.exe, para que usuários de PC possam usá-lo).
Importante: A compilação só precisa ser feita pelo desenvolvedor/programador uma vez.
Conforme ilustrado abaixo, o desenvolvedor/programador, que escreveu o código-fonte, realiza a compilação e cria o arquivo executável (exemplo: Firefox.exe), e pode simplesmente enviá-lo para que outras pessoas consigam rodá-lo em seus computadores, contanto que sejam compatíveis com o código de máquina gerado.
Os usuários finais não precisam do código-fonte nem do compilador.
Porém, o processo não funciona ao contrário.
Ou seja: não é possível, a partir das instruções em código de máquina do Firefox.exe, realizar a tradução reversa e obter o código-fonte em linguagem de alto nível originalmente escrita pelo(s) programador(es). É até possível obter uma versão imperfeita do código-fonte original, mas esta versão fica bem distante do ideal.
Linguagens Dinâmicas ou Interpretadas
A linguagem dinâmica se diferencia por se pautar no tempo de execução, cruzando os dados com os protocolos por meio de bibliotecas, criando “meta-objetos”, quer dizer, bibliotecas complexas de combinação e execução.
Exemplo: Java, JavaScripts e Python são linguagens de programação dinâmicas/interpretadas.
Uma forma de compreender essa categoria é pensar que, em vez do compilador, é usado outro software de propósito especial denominado interpretador.
Trata-se de um programa que lê código-fonte escrito em uma linguagem como Java, JavaScript, Python, entre outras, e o “executa/roda”.
Talvez, o melhor exemplo para linguagem interpretada seja o JavaScript:
Um interpretador para a linguagem JavaScript vem embutido em navegadores de Internet, como o Firefox, o Chrome, o Microsoft Internet Explorer ou o Microsoft Edge.
Assim, quando um navegador se depara com um website que contenha algum código JavaScript embutido, ele pode usar seu interpretador para executar esse código. Portanto, de forma bastante resumida, a maneira como um intérprete funciona é a seguinte: ele executa uma linha de código por vez.
Então, supondo que o exemplo a seguir seja um código-fonte contendo duas instruções escritas em JavaScript, quando o interpretador JavaScript do navegador for executar isso, ele olharia a primeira linha e a executaria.
//Código Javascript
a = 1;
b = a + 1;
Portanto, neste exemplo, o interpretador diria: “Acho que preciso de um nome de variável ´a´, e preciso colocar o valor ‘1’ nela”. Então, após executar essa linha, ele segue em frente e interpreta/executa a próxima linha, e assim por diante.
Tendências
Falando de forma geral, atualmente, a tendência para a programação de computadores caminha para o uso de linguagens dinâmicas/interpretadas. Isso ocorre porque há um consenso de que é bastante atraente poder programar de forma mais simples e eficiente, mesmo sabendo que o programa final rodará mais lentamente na CPU.
Isso talvez seja um pouco contraintuitivo, mas podemos refletir sobre essa questão da seguinte forma:
Qual o recurso mais escasso em programação de computadores?
Geralmente, a resposta é o programador!
Em todo o mundo, o mercado de trabalho da área da computação sofre, cada vez mais, em virtude da falta de profissionais qualificados. Portanto, usar menos horas de trabalho dos programadores é um atrativo muito importante.
O fato de que o programa rodará mais lentamente na CPU é considerado menos relevante, até porque, conforme a lei de Moore, as CPUs estão cada vez mais baratas e o poder de processamento delas cresce continuamente.
Então, se pensarmos em qual será a tendência para os próximos anos, também há um consenso, no mercado, de que o programador continuará a ser considerado um recurso cada vez mais escasso, se comparado ao poder de processamento das CPUs.
Para finalizar, vale a pena comentar sobre uma coisa chamada JIT (Just in Time Compiler). O objetivo dos JITs é tentar obter o melhor dos dois mundos: linguagens compiladas e linguagens interpretadas.
A ideia é ter os benefícios da maior simplicidade de desenvolvimento de programas usando linguagens dinâmica e, ao mesmo tempo, obter um programa que rode mais rapidamente na CPU.
Dessa forma, o JIT é responsável por ler parte do código-fonte e tentar compilá-lo rapidamente, antes de executá-lo. O mais interessante é que isso funciona
muito bem!
Navegadores modernos de internet, como o Firefox, o Chrome, o Microsoft Internet Explorer e o Microsoft Edge, agora embutem JITs para código JavaScript. Assim, na verdade, quando você está executando o código JavaScript dentro do navegador, o JIT examina trechos do código dinâmico (Javascript) que estão sendo executados com muita frequência e compila o código nativo destes trechos em tempo real.
Portanto, o intérprete não é usado para casos simples, mas para seções importantes do código dinâmico (como o interior de uma estrutura de repetição), e o JIT cria um bloco de código de máquina na memória.
O código da máquina é executado para essa seção do código dinâmico, oferecendo desempenho semelhante a linguagens compiladas, como C e C ++, e é descartado quando o programa é encerrado.
Note que, mesmo com o uso de JITs, ainda assim, linguagens interpretadas possuem desempenho inferior ao de linguagens compiladas com C e C++.
Além do JavaScript, a linguagem Java também usa a tecnologia JIT extensivamente. O enorme ganho de desempenho dos navegadores de internet nos últimos anos deve-se, em grande parte, à implementação da tecnologia JIT para JavaScript.
Considerações finais
Neste tema, você mergulhou na representação do que é um software para computadores, reconhecendo alguns softwares funcionais que fazem parte do seu cotidiano. No fim, aproximou-se da linguagem de programação, podendo, com isso, perceber como a linguagem e sua dinâmica são atualizadas continuamente.
AULA 3 – FUNDAMENTOS DE HARDWARE
Definição
Fundamentos do pensamento computacional. Conceitos fundamentais de hardware de computadores. Componentes do hardware. Lei de Moore. Unidades de armazenamento.
Propósito
Possuir iniciação consistente em Computação, na questão do desenvolvimento contínuo do hardware, é uma das necessidades do mercado de trabalho. Deve-se, então, construir uma compreensão introdutória sobre hardware de computadores.
Objetivos
· Módulo 1: Definir o que é hardware
· Módulo 2: Identificar os componentes básicos de hardware de computadores
· Módulo 3: Reconhecer as unidades de armazenamento de dados
Módulo 1
Definir o que é hardware
Introdução
Hardware é o que você pode chutar, já software é o que você só pode xingar.
Autor desconhecido.
Quem nunca ouviu essa infame anedota? Caso não tenha ouvido, você precisará ainda mais do que será visto aqui. Porém, se você conhece e achou que tinha entendido, saiba que essa definição não o ajuda muito.
Para começar, estamos trabalhando com a construção do mercado de produtos que mais se modifica na contemporaneidade. A maior parte de nós compra um produto quando ele já está obsoleto para determinados setores, ainda que nos atenda muito bem.
Já reparou como a aparência dele muda o tempo todo? Computadores e celularesevoluem de um ano para o outro. Se essa indústria muda tão rápido, como eu posso explicar o funcionamento de um hardware? Como é possível não lhe ofertar um produto obsoleto de antemão?
Vamos pensar sobre a parte física dessas máquinas? 
O conceito propriamente dito
Hardware é o termo usado para se referir à parte física de um equipamento. Devemos pensar que estamos falando dos componentes diretamente utilizados pela estrutura tecnológica. Você já viu o interior do seu celular? Tudo ali se encaixa, tem uma função, desde mecanismos para levar energia, poupar e armazenar dados até possibilidades de encaixes que agregam outras tecnologias. Cada um desses elementos é uma mistura de tecnologia de desenvolvimento técnico e equilíbrio econômico para produção em massa.
O que difere hardware de software?
O software é o código, ou seja, as instruções, o que é executado no computador. No entanto, por aqui, vamos nos concentrar no hardware.
Vamos comparar o hardware computacional a outro objeto para ver se fica mais claro.
Você já viu um piano? O esquema a seguir resume comparativamente o que é hardware e o que é software nos computadores e nos pianos.
	
	
	Piano
	Computador
	Hardware - fisicamente palpável, ou seja, equipamento, objeto físico
	· O piano e todos os seus componentes físicos 
· Os papéis e livretos onde as partituras são escritas e lidas 
· A tinta usar para escrever a partitura no papel 
	· Gabinete
· CPU
· Memória
· Disco rígido
· Monitor
· Pendrive
· Celulares
	· Teclado
· Cartão de memória
· Disquete
· CD
· DVD
· SSD 
	Software
	· Representação escrita e mundialmente padronizada da música. A música que ouvimos 
	· Instruções (programações)
Então, um hardware é a estrutura física que permite executar as funções que desejamos.
Vamos a outro exemplo que nos permite sofisticar um pouco mais a visão sobre o que é o hardware.
Se olharmos um cérebro em um microscópio, veremos neurônios. Os neurônios são a unidade fundamental do hardware humano relacionado ao pensamento e processamento de informações.
O cérebro do computador é a CPU (Central Processing Unit). Quando olhamos as partes de uma CPU, identificamos os transistores.
Saiba mais: O processador Intel Core i9 9900k, lançado em 2018, contém 12 bilhões de transistores.
O transistor é provavelmente uma das invenções mais importantes do século. Este é um pequeno componente eletrônico que pode ser usado para criar todo tipo de coisas diferentes.
Atualmente, encontramos transistores embutidos em componentes chamados de chips.
Veja exemplos de diferentes formatos de transistores a seguir.
Os componentes mais comuns dos chips são os transistores. CPU, memórias e diversos outros dispositivos eletrônicos se resumem a chips compostos por transistores.
Saiba mais: Chips são dispositivos de estado sólido (solid state), isto é, sem qualquer tipo de partes móveis internamente. Não há engrenagens, rodas ou eixos que girem dobradiças. Isso torna os chips dispositivos muito confiáveis, pois partes móveis se desgastam com o tempo e requerem manutenção constante, como ocorre em motores de veículos. Além disso, como já citamos, eles são fabricados com altíssima quantidade, mas de forma muito barata. A combinação de baixo custo e alta confiabilidade é uma das principais forças motrizes da revolução dos computadores.
Lei de Moore
Uma das forças mais importantes do desenvolvimento do silício é a lei de Moore, uma observação feita por Gordon Moore (engenheiro e empresário americano, um dos fundadores da Intel.) sobre como a fabricação de chips vinha sendo capaz de inserir cada vez mais transistores dentro de um chip. Essa lei diz que o número de transistores contidos em um chip dobra em um período entre 18 e 24 meses.
Podemos entender a Lei de Moore sob dois aspectos:
	
	
	Desempenho
	Econômico
	A lei pode significar que a indústria tem conseguido dobrar o número de transistores embutidos em um chip a cada dois anos. Essa observação descreve um crescimento exponencial bastante poderoso.
	Os transistores estão ficando cada vez mais baratos. Dessa forma, com o passar do tempo, devido ao baixo custo, é possível criar sistemas computacionais em outros aparelhos, como telefone celular, geladeira, torradeira, termostatos e até em óculos.
É importante entender que a lei de Moore não é uma lei da natureza, como a lei da gravidade de Isaac Newton. Ao contrário, é apenas uma observação sobre como a fabricação de transistores tende a funcionar. O comportamento observado por Moore tem seguido firme desde 1965. Neste sentido, as possibilidades do desenvolvimento de melhoria e aceleração da parte física acabam por permitir o barateamento, transformando o hardware em uma variável importante para o desenvolvimento das sociedades tecnológicas.
A qualidade duplicada da lei de Moore permite que um computador de décadas atrás, que ocupava uma sala inteira e custava milhões de reais, seja, agora, do tamanho de um cubo de açúcar e custe menos de cem reais.
Se pensarmos em apenas uma duplicação, que ocorre em um ano e meio, podemos ter a impressão de que não é algo tão importante. Porém, se pensarmos em um intervalo de 15 anos, teremos, segundo a lei de Moore, dez duplicações, o que representa algo mil vezes maior, conforme ilustrado a seguir.
Para termos a real noção da importância deste fenômeno para o crescimento do poder computacional na atualidade, pense que um telefone celular (smartphone) X, fabricado em 2019, possui poder de processamento bilhões de vezes maior do que o computador de cálculo de trajetória usado na nave espacial Apollo XI (AGC – Apollo Guidance Computer), que levou o homem à Lua, em 1969.
Uma forma internacionalmente conhecida para medir o poder computacional de processadores é o FLOPS (Floating-point Operations per Second ou Operações de Ponto Flutuante por Segundo), que indica quantas operações matemáticas com casas decimais o processador consegue realizar por segundo. Com base nisso, veja a comparação a seguir:
	
	
	
	AGC
	Smartphone
	Computador de mesa(Desktop)
	Fabricado em 1969
	Fabricado em 2019
	Fabricado em 2019
	14,6 FLOPS
	Mais de 40 GFLOPS
	Pode chegar a 400 GLOPS
	Capaz de realizar, aproximadamente, 14 operações matemáticas com casas decimais por segundo.
	Capaz de realizar cerca de 40 bilhões de operações por segundo.
	Capaz de realizar, aproximadamente, 400 bilhões de operações por segundo.
Saiba mais: Supercomputadores fabricados em meados de 2019 possuem trilhões de FLOPS, como é o exemplo de um supercomputador disponível na Universidade de Campinas, que faz 4,5 trilhões de operações aritméticas por segundo.
Outro exemplo que você provavelmente observou em sua vida é que, a partir de 2000, surgiram os pendrives, com, inicialmente, 8MB de capacidade de armazenamento. Pelo mesmo preço, em 2019, já era possível comprar pen drives de mais de 2000GB de capacidade. Ou seja, em menos de 20 anos, houve um aumento de 250 mil vezes na capacidade de armazenamento dos pendrives.
Pela lei de Moore, a fabricação dos chips que armazenam informação em pen drives evoluiu de tal forma que é possível embutir mais transistores por, praticamente, o mesmo preço. Então, eles podem oferecer mais e mais capacidade de armazenamento.
Os exemplos que vimos para o poder de processamento de celulares contemporâneos e a capacidade de armazenamento de pen drives evidenciam a qualidade exponencial da lei de Moore.
Módulo 2
Identificar os componentes básicos de hardware de computadores
Introdução
Para falar sobre computadores, vamos tratar dos componentes fundamentais que o constituem. Conforme ilustrado a seguir, temos a CPU, a memória RAM e a memória Disco/HD/ pen drives.
	CPU
	Também chamada de processador, é uma espécie de cérebro. É a CPU quem, de fato, processa instruções
	RAM (Random Access Memory)
	Memória de acesso aleatório é uma espécie de memória temporária. Também chamada de memória volátil: tudo o que está na RAM é instantaneamente apagado quando o computador é desligado
	Memória persistente
	Geralmente,é um disco, um HD (Hard-Disk) ou um pen drive. Os dados armazenados neste tipo de memória permanecem ali mesmo quando o computador é desligado e, por isso, é chamada de memória persistente.
A seguir, vamos entender um pouco melhor como cada um desses componentes funcionam.
CPU
A parte mais importante do computador é a CPU. Ela faz a computação, ou seja, executa instruções. A CPU possui um rol padronizado de operações bastante simples para executar. Então, quando dizemos que um computador executa dois bilhões de operações por segundo, realmente estamos falando sobre a CPU. Isso significa que ela pode fazer centenas de bilhões de coisas muito simples por segundo.
As instruções executadas pela CPU são escritas por pessoas que desejam usar o computador e seu incrível poder de processamento para alcançar algum objetivo útil. As instruções escritas em linguagens de programação são denominadas código de computador.
Random Access Memory
A Random Access Memory (RAM), que significa Memória de Acesso Aleatório, pode ser chamada apenas de memória. A RAM é considerada a memória principal, pois é o armazenamento temporário usado pela CPU para manter os dados e o código utilizados enquanto processa instruções.
Em código de computador, quando escrevemos instruções como a = 2 + 5, com o objetivo de que a variável a receba a soma dos valores 2 e 5, ocorrem, na verdade, quatros coisas na memória RAM:
A CPU lê/carrega os valores 2 e 5 da memória RAM e, depois, a instrução soma. Então, a CPU realiza a operação e, depois, armazena o resultado na posição da memória reservada para a variável a.
É importante observar que a CPU precisa da RAM para processar as instruções de acordo com o código de computador escrito pelo programador. É por isso que ela é chamada de memória principal.
A principal característica da RAM é que ela não é uma memória persistente, mas, sim, uma memória volátil. Isso significa que, quando a energia elétrica é desligada, ela imediatamente fica em branco. Portanto, ela funciona muito bem como armazenamento rápido e temporário, mas não se trata de um armazenamento de longo prazo.
Para ficar mais claro, vejamos o exemplo a seguir.
Imagine que o computador desligue por acidente enquanto você está digitando o texto de um trabalho no Word antes de apertar o botão salvar. Você certamente ficará chateado, pois perderá as informações digitadas desde a última vez em que salvou seu trabalho.
Isso ocorre porque esses caracteres ainda estavam somente na memória RAM, que não é persistente. Assim, a versão que você possui é a última versão que salvou.
Memória Persistente
O nosso terceiro componente de hardware é a memória/armazenamento persistente, também chamada de memória secundária. Vejamos como ela funciona de forma diferente da memória RAM.
Em um editor de texto, quando você pressiona o botão salvar, instrui o computador a copiar a versão do documento que está na RAM (versão temporária) para o disco/pen drive/HD, que são memórias persistentes, ou seja, que permanecem com as informações armazenadas mesmo após o desligamento.
Este exemplo simples permite que você compreenda a noção do que significa ser persistente, como um disco/HD/pen drive, ou volátil, como a RAM.
Saiba mais: Para equipamentos atuais, as memórias RAM, em geral, possuem capacidade de bilhões de bytes, enquanto discos/HDs/pen drives possuem capacidade de armazenamento de trilhões de bytes. Todos esses dispositivos, mesmo quando o fornecimento de energia elétrica é cortado, mantêm os dados, apesar de serem muito mais lentos do que a memória RAM.
Avanço das tecnologias de armazenamento persistente
Veja alguns dos dispositivos de armazenamento persistente.
Hard Disk
Por muito tempo, o armazenamento persistente em computadores foi feito com um disco rígido (HD – Hard Disk). No passado, o preço do armazenamento em memórias flash, SSD, pen drives e cartões SD era muito mais caro que os discos rígidos e, por isso, os discos rígidos eram usados ​​para tudo.
Note que um HD possui um disco giratório, que é rígido! Além disso, há uma pequena cabeça semelhante às agulhas dos toca-discos antigos que escreve e lê padrões magnéticos no disco para armazenar e ler dados.
Quando você estiver operando um computador e ouvir vários sons agudos de “cliques”, o que você provavelmente está ouvindo é o disco rígido girando em seu pequeno compartimento, com sua cabeça se movimentando para um lado e para o outro.
Solid State Disk
Mais recentemente, houve avanços no que chamamos de discos de estado sólido (SSD – Solid State Disk). Assim, uma unidade SSD também armazena dados persistentemente, mas, em vez de usar discos, como nos HDs, são usados chips de memória de estado sólido. Estes componentes são chamados de sólidos, pois não há partes móveis, como discos e cabeças de escrita/leitura. Ao contrário, tudo é feito eletronicamente.
Dispositivos de armazenamento baseados em SSD são dezenas e até centenas de vezes mais rápidos do que os discos rígidos, além de serem mais confiáveis, já que não possuem partes mecânicas móveis. Seguindo esta mesma tendência, um dos tipos mais recente de armazenamento secundário é chamado de SSD M.2.
Pendrive
Os pequenos pendrives USB utilizam tecnologia semelhante à do SSD. Seu tamanho reduzido nos permite levar nossos arquivos conosco para qualquer lugar. Desde o lançamento do seu primeiro modelo até hoje, a capacidade de armazenamento dos pendrives cresceu consideravelmente e promete aumentar ainda mais.
Cartões SD
Os cartões SD, usados em câmeras fotográficas digitais e celulares, conta com a mesma tecnologia usada no Solid State Disk e nos pen drives. Apesar de seu pequeno formato, já existem cartões SD com capacidade de armazenamento acima de 500GB.
Observando o avanço das tecnologias de armazenamento persistente, podemos reconhecer o padrão da lei de Moore. Chips de memórias flash estão ficando mais baratos, e, assim, é cada vez mais comum o uso de dispositivos de armazenamento baseados em estado sólido. É possível que, em alguns anos, o disco rígido deixe de ser utilizado para o uso diário.
Para chegar a este ponto, precisamos apenas que a lei de Moore continue ocorrendo e que os preços de SSD sigam caindo até alcançarem um valor bastante convidativo, a ponto de as pessoas pensarem o seguinte: “Não precisamos mais de HD. Podemos apenas usar esses chips, pois eles são muito mais rápidos e confiáveis”.
Sistemas de arquivos
Quando você tem um dispositivo de armazenamento secundário e persistente, há uma grande capacidade de armazenamento. Entretanto, por si só, estes dispositivos não estão realmente prontos para o usuário.
Normalmente, o armazenamento de dados em disco rígido ou unidade flash é organizado com esquemas convencionados, que são conhecidos como sistemas de arquivos.
Um sistema de arquivos é apenas uma maneira de organizar a grande área de bytes de dispositivos persistentes, dando a eles um tipo de estrutura familiar de arquivos e pastas. Cada arquivo e pasta possuem nomes, que podem ser movidos, copiados, editados, removidos etc.
Agora, vamos refletir sobre o assunto.
Será que, ao tentarmos gravar mais dados em um pen drive cheio, acabaremos sobrescrevendo os dados que já estavam lá?
Resposta: Um arquivo é apenas uma maneira de ocupar certa área do dispositivo de armazenamento e atribuir um nome a ele. O sistema de arquivos, então, garante que, caso o usuário tente gravar novos arquivos quando o dispositivo já está lotado, os dados já existentes não sejam sobrescritos.
Placa-mãe
Já estudamos CPU, memória RAM e diversos tipos de armazenamento persistente (HD, SSD, M.2, pen drive), mas falta um componente fundamental do computador, que é responsável por interligar CPU, RAM, discos etc. Veja como conectamos alguns dos componentes na placa-mãe.
Microcontroladores
Uma interessante consequência da lei de Moore é que os computadores se tornaram tão pequenos e baratos, que você pode comprar versões cada vez menores dessas máquinas por preços relativamente baixos. Eles podem se encaixar

Continue navegando