Desenvolvimento

29 ago, 2014

Hack ‘n’ Cast – Introdução à programação

Publicidade

No episódio deste mês do Hack ‘n’ Cast, abordamos o assunto de introdução à programação. O quê? Você não programa? Mas até o Schwarzenegger programa! E mais, em sua língua nativa! Não acredita? Quem afirma é o Davi Sanches (nosso convidado de hoje) e também o nosso especialista, pois ele acompanhou de perto a criação da La pascaline e deu seu pitaco na Máquina Diferencial de Babbage. Sim, temos conosco hoje um herói, saído da sessão da tarde e diretamente das Highlands, o nosso Guerreiro imortal: Ricardo Medeiros! Ou seria ele o Rei de Vida Eterna?

v0.4-cover

Para não perder nenhum episódio, siga-nos nas redes sociais (Twitter e Facebook) ou inscreva-se (FeedPodflixiTunes e Pocket Casts). Você quer colaborar com o Hack ‘n’ Cast? Sugira um tema, nos ajude a produzir uma pauta ou participe conosco! Basta entrar em contato por e-mailFacebook ou Twitter.

Sorteio Novatec

Lembrando que neste episódio temos o resultado do sorteio dos dois livros da Novatec:

Ouça e veja se você ganhou!

Introdução

Os computadores são mais antigos do que imaginamos. Eles sempre nos ajudaram a calcular, contar, acompanhar a mudança do tempo e das estações. Por boa parte do tempo, foram usados para executar automaticamente tarefas que nos entediavam ou consumiam tempo. Entretanto, em um certo ponto da história, eles passaram a realizar tarefas que não somos capazes de executar, como quebra de criptografias, cálculos instantâneos de balística, previsões estocásticas e diversas outras. Entretanto, todo esse poder computacional seria desperdiçado se não fosse por um componente fundamental: sua programação.

keep-calm-and-program-on

Mas antes de falarmos de programação precisamos entender o que é um computador. Atualmente um compputador é um dispositivo eletrônico composto basicamente por:

  • Sistemas de Entrada e Saída: dispositivos como monitor, impressoras, teclado, mouse e etc;
  • CPU (Central Processing Unit): podemos dizer que é o “cérebro” do computador, é aqui que todo processamento ocorre;
  • Memória: a memória é uma método de armazenamento transiente (não persistente) de rápido acesso;
  • Sistema de armazenamento: qualquer tipo de armazenamento (discos, hard drives, disquetes, fitas magnéticas, pen drives e etc) persistente.

Todos os elementos acima compõem a parte físcia do computador (hardware) e o programa (objetivo deste episódio) é a parte lógica (software). É ela (o programa) que diferencia o computador de uma calculadora, pois ele tem a capacidade de carregar e executar instruções sem auxílio humano, enquanto uma calculadora (comum) precisa que nós (humanos) “operemos” seu programa.

Um programa é basicamente uma coleção de instruções (um passo-a-passo) que descrevem para o computador uma tarefa a ser realizada/executada. Sem esse programa o computador é um amontoado de ferro e silício, pois eles dão toda a inteligência ao computador.

História

Tecnicamente, podemos dizer que os primeiros “computadores” foram as primeiras calculadoras, entretanto toda a “programação” desses computadores era responsabilidade de seu “operador”. A forma mais antiga de caulcular que temos notícia é o ábaco, que provavelmente teve origem na china, há mais de 5.500 anos.Em seguida tivemos várias “calculadores” automatizadas:

  • O Relógio Calculador (Wilhel Schickard): Era operado através de manivelas, somava e subtraía números de até 6 dígitos e quando o valor extrapolava 6 dígitos, ele tocava uma sineta;
  • La Pascaline (Blaise Pascal): Uma máquina que somava números e era inferior ao “relógio calculador”, entretanto este se tornou mais popular devido ao prestígio de Blaise Pascal;
  • Aprimoramento da Le Pascaline (Gottfried Wilhelm Von Leibnitz): Sua máquina podia realizar as quatro operações básicas e realizar cálculos de raiz quadradas.

Em seguida tivemos a primeira aplicação prática de um computador rudimentar, a “Máquinas de Tear Automatizada”, criado pelo mecânico francês Joseph Marie Jacquard. Esta máquina computava, com base em cartões perfurados, a posição dos fios na hora de tear e, consequentemente, controlava os padrões produzidos no tecido.A ideia do primeiro “computador programável” foi criado por Charles Babbage, uma matemático nascido em Londres, em 26 de Dezembro de 1791 (considerado o pai da computação). A “organização computacional” criada por Babbage ainda pode ser vista nos computadores atuais, como:

  • Dados e memória de um programa;
  • Instruções;
  • Controle de fluxo;
  • Dispositivos de Entrada/Saída.

Babbage construiu duas máquinas, a máquina diferencial e a máquina analítica.

Máquina diferencial

A máquina diferencial seria capaz de calcular e imprimir valores de funções polinomiais. Ela utilizava um método chamado “diferenças finitas”, daí o nome da máquina. Esta já era capaz de receber dados, processá-los e exibir os resultados.Apesar de extremamente bem planejada, o projeto nunca foi concluído por dificuldades de produção e custeio (por parte do governo). Posteriormente, em 1991, foi construído uma versão da máquina seguindo as especificações de Babbage, que funcionou perfeitamente e com precisão. Outro motivo para o fim do projeto da máquina diferencial era o interesse de Babbage pelo seu novo projeto, a máquina analítica.

Máquina Analítica

Esta máquina marcou a transição de mecanismos aritméticos para computação de propósitos genéricos e sua grande “inovação” era a capacidade de ser programada usando cartões perfurados e de utilizar em seu calculo o resultado do calculo anterior. Em teoria, esta máquina seria a primeira a atingir o status de “Turing Complete”. Como saída, a máquina teria uma impressora, um plotador de curva e uma sineta.

Ada Lovelace (Ada Byron)

Foi a primeira programadora (e a primeira a escrever um algoritmo) da História. Ela influenciou muito os trabalhos de Babbage durante suas trocas de cartas. É a ela que atribuímos a criação de conceitos importantes como if-eles, loops, goto, funções, variáveis e etc.

Linguagens

É um procedimento para escrever instruções para um computador, usando regras para a construção de um programa. O computador é burro e não sabe o que fazer, com isso as linguagens são uma forma de expressar o que ele precisa fazer para solucionar o seu problema.Características consideradas importantes em uma linguagem:

  • Função ou objetivo;
  • Abstração;
  • Expressividade.

Sintaxe e semântica

Sintaxe é a linguagem com todos os seus verbos, substantivos e adjetivos, ela define a combinação destes “objetos” com o objetivo de formar uma estrutura concisas. Já a semântica diz se um texto sintaticamente correto possui um significado lógico e correto. Um código pode estar sintaticamente correto, mas semanticamente errado.

Tipos de linguagens

As linguagens geralmente são classificadas também com base no seu tipo de compilação e comunicação com o sistema operacional. Existem basicamente dois grupos: as compiladas e as interpretadas.Compilada: Gera um código binário voltado para uma arquitetura. Este tipo é extremamente atrelado ao processador e seus binários não são portáveis, pois incorre em compatibilidades de arquitetura como notação numérica (littleendian ou bigendian) e o tamanho de seus tipos. Muitas pessoas incorrem no erro de dizer que um nem mesmo os códigos da uma linguagem compilada são portáveis, mas tomados os devidos cuidados e utilizando os padrões corretos, um código de uma linguagem compilada pode ser facilmente portado.Interpretada: Gera um código (bytecode) para um máquina virtual e esta máquina é responsável por interpretar e executar o código compilado para Bytecode. Essa máquina virutal é reescrita para várias arquiteturas, tornando assim o compilado portável.As linguagens também pode ser divididas com base na sua abstração:

  • Baixo nível ou linguagem de máquina (Assembly ou Binário);
  • Médio nível (C, Fortran, BASIC e etc);
  • Alto nível (Java);
  • Altíssimo Nível (Python, Ruby, Lua e etc).

Entretanto, as classificações de médio e altíssimo nível são pouco aceitas no meio acadêmico. As linguagens também são agrupadas com base no seu paradigma suportado. Um paradigma dita como você pode ou deve estruturar seu código e a forma como seu programa será processado, interpretado ou compilado:

  • Procedural ou imperativa: Recebeu esse nome por ser construída ao redor de procedimentos (procedures), ou funções. Simplesmente executa uma série de instruções sequencialmente;
  • Funcional: Tem como base o cálculo de lambdas. Trata a computação como uma série de funções matemáticas. Uma f(x) sempre retornará um mesmo valor se x sempre possuir o mesmo valor;
  • Orientado a Objetos: Tudo é estruturado sob o conceito de classes, objetos, atributos, métodos e trocas de mensagens;
  • Modular: Separa os programas em partes modulares Onde cara modulo executa bem apenas uma tarefa. Tem como foco a separação de responsabilidades e apresenta uma melhora a manutenabilidade.

Por último, temos as linguagens exotéricas que falam por si só:

  • Whitespace;
  • Brainfuck;
  • ArnoldC;
  • LOLCODE.

Saiba mais

  • Code.org: Organização sem fins lucrativos dedicada à crescente educação de ciência da computação. Tem a visão de que todos podem aprender programação.
  • Codecademy: Aprender sozinho ou em grupo é uma possibilidade na Code Academy, onde os cursos são gratuitos. A plataforma conta com versão em português, mas apenas nas páginas iniciais.
  • Try Ruby: Menos popular entre os iniciantes e com menos espaço no mercado, a linguagem de programação Ruby tem espaços divertidos para os dispostos a explorá-la. A home do Try Ruby é quase um afago ao usuário, com os seus desenhos delicados e indicações de “como fazer” que quase conduzem o aprendiz pela mão.
  • Code School: Apoiada pela IBM e também desenvolvida para oferecer uma experiência semelhante a de um game. O lema por lá é “Aprenda Fazendo”. Tutoriais estão presentes, mas exercícios e recompensas etapa a etapa são o forte da proposta.

Trilha Sonora

A trilha sonora de hoje é uma homenagem à banda AC/DC, e foi escolhida pelo Davi Sanches:

Album “High Voltage” (1975)
  • It’s A Long Way To The Top (If You Wanna Rock ‘N’ Roll)
  • Rock ‘N’ Roll Singer
  • The Jack
  • Live Wire
  • T.N.T.
  • Can I Sit Next To You Girl
  • Little Lover
  • She’s Got Balls
  • High Voltage
Album “Dirty Deeds Done Dirt Cheap” (1976)
  • Dirty Deeds Done Dirt Cheap
  • Love At First Feel
  • Big Balls
  • Rocker
  • Problem Child
  • There’s Gonna Be Some Rockin’