1 Preliminares

Neste capítulo, motivaremos a importância da computação em diversos domínios, contaremos um pouco da história da computação e como ela se relaciona com os desafios de nossa sociedade e, por fim, definiremos os principais termos e conceitos a serem abordados nos próximos capítulos.

1.1 Motivação

Imagine instruir uma pessoa a calcular juros compostos. Dado que conhecemos o montante inicial \(x\), a taxa de juros \(j\) e o número de meses passados \(n\), podemos calcular o montante final \(y\) como \[ y = x \cdot (1 + j)^n\text{.} \]

Até o momento, temos uma fórmula fechada da solução para o problema. E se eu dissesse que temos que resolvê-lo sem utilizar a operação de exponenciação? Como o problema seria resolvido?

Uma opção seria \[ y = x \cdot \underbrace{(1 + j) \cdot \text{...} \cdot (1 + j)}_{n\text{ vezes}}\text{,} \] ou interpretando as instruções:

  • Multiplique \(n\) vezes o fator \((1 + j)\);
  • Multiplique o resultado anterior pelo valor \(x\);
  • Utilize o resultado anterior como resposta para o problema.

A interpretação da fórmula acima começa a se aproximar do que definiremos como computação.

Podemos ir além, e imaginar reescrever essa fórmula sem utilizar a operação de multiplicação. Ainda, imagine escrever a mesma fórmula usando apenas operadores lógicos de conjunção, disjunção e negação!

É exatamente isso que os computadores digitais fazem.

1.2 Definições

Nesta seção, definimos os principais conceitos utilizados ao longo do livro.

1.2.1 Computação

As Ciências de Computação englobam o estudo de duas principais subáreas:

  1. os Sistemas Computacionais; e
  2. a Computação (ou Métodos Computacionais).

De maneira geral, Sistemas Computacionais correspondem ao estudo de componentes de hardware, lógica digital, sistemas operacionais, segurança cibernética e outras tecnologias computacionais. Normalmente, em cursos de Engenharia de Computação e Engenharia Elétrica há maior ênfase nesses tópicos.

Por outro lado, a Computação é uma Ciência Matemática com foco no estudo dos métodos que possibilitam e alimentam as tecnologias computacionais. Entre os tópicos de estudo estão a teoria da computação, linguagens de programação, algoritmos e estruturas de dados. Devido à ubiquidade de sistemas computacionais em nossa sociedade, a formação de todo engenheiro deve contemplar o entendimento e o domínio destes métodos para solução de problemas de engenharia.

1.2.2 Computador digital

Computadores digitais são dispositivos eletrônicos capazes de processar informação por meio de operações lógicas e aritméticas. Como consequência de sua natureza digital são restritos ao processamento de informação discreta e finita.

Esta limitação traz consigo características marcantes que diferem as soluções computacionais das soluções exatas (amplamente estudadas em disciplinas de matemática, física e similares no ensino básico e superior).

Quando lidamos com problemas computacionais, devemos levar em consideração restrições de hardware, escolha da tecnologia mais apropriada, custo computacional (custos relacionados ao tempo de execução, uso de memória e outros recursos computacionais), representação da informação (estruturas de dados), erros numéricos, bem como ponderar vantagens e desvantagens de cada algoritmo que potencialmente resolve o problema.

Ao longo do livro, abordaremos cada um desses tópicos na profundidade suficiente para um engenheiro resolver os diversos problemas computacionais em sua carreira.

1.2.3 Dado digital

Em computadores digitais, toda informação é representada por um conjunto finito de bits. Bit é a menor unidade de informação e pode assumir dois valores: zero ou um.

Os bits são agrupados em unidades de informação chamadas de bytes, sendo este último a menor unidade endereçável de memória. Veremos, posteriormente, que cada byte armazenado em memória possui um endereço único. Esta propriedade afeta diversos aspectos das linguagens de programação, por exemplo, limitando o menor tamanho possível de objetos. Na grande maioria das arquiteturas modernas, um byte é composto por 8 bits.

Na prática, apesar de cada byte ser endereçável, computadores digitais operam a nível de palavra. Ou seja, as operações lógicas e aritméticas são aplicadas em grupos de bytes. Uma palavra é a unidade natural de informação em um computador. Como os bytes, o tamanho das palavras depende da arquitetura. Computadores de propósito geral modernos possuem palavras de tamanho 32 ou 64 bits.

1.2.4 Algoritmo

WIP

1.2.5 Programa de computador

Um programa de computador é uma sequência de operações e instruções que realizam uma tarefa. Um programa é sempre executado num computador; e, ainda, são programas que fazem os computadores funcionarem tornando-os úteis. Em outras palavras, programa de computador é a instância “concreta” de um algoritmo.

1.2.6 Programação e linguagem de programação

WIP

1.2.7 Compilador

WIP