Se você tem acompanhado o site recentemente, deve ter visto que os artigos têm se dedicado a aspectos mais fundamentais da ciência da computação. Desde a organização interna de componentes até o formalismo lógico que orienta a criação de circuitos.
Neste artigo, vou traçar um roadmap dos próximos conteúdos de forma que eu possa futuramente usá-lo como ponto de unificação das ideias. Também darei um pouco mais de contexto e os motivos para a escolha de temas que tenho feito recentemente e que pretendo manter no futuro próximo.
Relacionando teoria e prática #
Nos artigos anteriores, como citei, há aspectos fundamentais da ciência da computação. No entanto, diferentemente de abordagens mais acadêmicas, tentei sempre que possível incluir aspectos mais práticos. Por exemplo, com trechos de código em linguagens de programação para que o leitor possa entender as consequências dos aspectos mais abstratos. Como Python é a linguagem com que tenho mais familiaridade, geralmente a utilizo para fazer essa ligação entre teoria e prática. Mas tento escrever de forma que o leitor perceba que a linguagem é só um instrumento e possa aplicar os conceitos em qualquer outra.
Nos próximos artigos, vou seguir esta prática de inserir aspectos práticos em conteúdos que geralmente são abordados de forma fundamentalmente teórica, como se fossem fechados em si mesmos. O próximo alvo dessa abordagem será a Matemática Discreta.
Matemática discreta #
A matemática discreta é a parte da Matemática dedicada ao estudo de objetos e estruturas discretas ou finitas (discreta significa que é formada por elementos distintos e desconexos entre si).
Os problemas que a matemática discreta aborda incluem:
- De quantas maneiras podemos escolher uma senha válida para um computador?
- Qual é a probabilidade de ganharmos na loteria?
- Qual é o caminho mais curto entre duas cidades para um determinado sistema de transporte?
- Como podemos ordenar de forma crescente uma lista de inteiros?
- Em quantos passos podemos fazer essa ordenação?
- Como podemos desenhar um circuito para adicionar dois inteiros?
Essas perguntas podem ser agrupadas em três grandes tipos de problemas:
- Problemas de existência - Existe algum arranjo de objetos de um dado conjunto satisfazendo determinada propriedade?
- Problemas de contagem e enumeração - Quantos arranjos (configurações) desse tipo existem?
- Problemas de otimização - De todas as possíveis configurações, qual é a melhor de acordo com determinado critério?
Para facilitar o estudo destes problemas, dividimos a matemática discreta em campos de estudo. Dentre esses campos temos:
- Lógica
- Teoria dos conjuntos
- Funções
- Relações de recorrência
- Combinatória
- Grafos
Genericamente, a matemática discreta é usada quando contamos objetos, quando estudamos relações entre conjuntos finitos e quando analisamos processos (algoritmos) envolvendo um número finito de passos.
Nos últimos anos tornou-se uma disciplina importantíssima da Matemática porque, nos computadores, a informação é armazenada e manipulada de forma discreta.
Próximas séries do site #
Lógica já tem artigos aqui no site: Lógica para programadores, Álgebra Booleana e Simplificação de Funções Lógicas. Funções não ganham série própria: aparecem como ferramenta ao longo das outras, como na bijeção que define o isomorfismo de grafos. Para os demais campos, os próximos artigos serão agrupados em quatro séries:
- A Linguagem dos Conjuntos — teoria dos conjuntos
- Do Caso Base ao Infinito — indução matemática e relações de recorrência
- A Arte de Contar — combinatória
- A Matemática das Conexões — grafos
Os links acima apontam para a página de cada série. As quatro estão completas, com 28 artigos no total.
As séries não são independentes: umas usam ferramentas das outras. O diagrama abaixo mostra essas dependências. Conjuntos e Indução não dependem uma da outra, e Grafos, que se apoia nas outras três, fecha o percurso:
graph LR
CONJ["A Linguagem dos Conjuntos
teoria dos conjuntos"]
IND["Do Caso Base ao Infinito
indução e recorrência"]
CONT["A Arte de Contar
combinatória"]
GRAF["A Matemática das Conexões
grafos"]
CONJ --> CONT
IND --> CONT
CONJ --> GRAF
IND --> GRAF
CONT --> GRAF
Voltando às perguntas do início, é nestes pontos que cada uma encontra resposta:
| Pergunta | Onde está a resposta |
|---|---|
| Quantas senhas válidas existem? | Em A Arte de Contar, a partir dos princípios de contagem |
| Qual a probabilidade de ganhar na loteria? | A Arte de Contar dá a ferramenta: o número de apostas possíveis é uma combinação simples |
| Qual o caminho mais curto entre duas cidades? | Em A Matemática das Conexões, que define caminho e distância em grafos |
| Como ordenar uma lista, e em quantos passos? | Fora das quatro séries: é assunto de algoritmos |
| Como desenhar um circuito que soma dois inteiros? | Em Álgebra Booleana, com o meio-somador, e no somador completo de CPU em Ação |
Origem das séries e inspiração para o material #
Já abordei aqui no site um pouco sobre minha formação, falando que estou fazendo uma segunda graduação, em Sistemas de Computação pelo CEDERJ. Acesse o link anterior para detalhes.
Uma das disciplinas do curso tem o pomposo nome de Fundamentos de Algoritmos para Computação. Mas a ementa é puramente matemática discreta. A disciplina foi muito bem ministrada, mas faltou um pouco de aplicações práticas no dia a dia de programação. E o material é bem antigo. Então resolvi usar o material como inspiração e construir uma visão mais moderna e aplicada.
Os cuidados que tomei ao transformar as anotações em artigos são os mesmos que descrevi, com mais detalhes, na apresentação da série Por Dentro do Computador. Em resumo:
- Não tenho ligação com o CEDERJ senão como aluno, e os artigos são independentes do material da disciplina: foram escritos para qualquer pessoa interessada no tema e não pretendem substituí-lo.
- Nada foi copiado dos slides, nem trechos nem figuras. As figuras foram recriadas com Draw.io, Mermaid, LaTeX ou Python, criadas do zero ou geradas por IA — e, nesse caso, trazem a marca d’água da ferramenta. Parte dos exemplos se inspira no material da disciplina ou em livros de referência, com adaptações; outros são originais.
- Os artigos vão além da ementa: trazem exemplos em Python e SQL e informações mais recentes, porque o material da disciplina é antigo. A crítica, nesse ponto, é à instituição, que não investe em atualizá-lo, e não aos professores que o produziram.
Para quem tiver curiosidade, aqui estão os slides da disciplina. E também as atividades a distância e as provas dos últimos anos. Todos esses links são de um Google Drive mantido pelo Diretório Acadêmico do curso, do qual não faço parte.
O mesmo Diretório Acadêmico disponibilizou no YouTube os vídeos da plataforma de estudo, nesta playlist. O motivo é a instabilidade da plataforma, que prejudica constantemente os alunos. Com os vídeos no YouTube, a chance de ficarem fora do ar diminui drasticamente.
Os links acima apontam para material hospedado por terceiros — pastas do Google Drive e uma playlist do YouTube, mantidas pelo Diretório Acadêmico do curso. Não tenho controle sobre nenhuma das duas, e conteúdo assim costuma sumir sem aviso. Se você encontrar algum link morto, deixe um comentário avisando: vou tentar achar outra forma de compartilhar o material.
Já escrevi um pouco sobre o CEDERJ e a questão dos materiais desatualizados em outro artigo quando estava começando uma série sobre organização de computadores. Recomendo a leitura caso não conheça a instituição e queira mais detalhes.
Por fim, quando queria me aprofundar mais em algum assunto, usava o livro Fundamentos matemáticos para a ciência da computação: matemática discreta e suas aplicações, de Judith L. Gersting — edição brasileira de Mathematical Structures for Computer Science. Outra referência clássica da área, e um dos livros-texto mais adotados, é Discrete Mathematics and Its Applications, de Kenneth H. Rosen, que também tem edição em português.
Pré-requisitos #
Nenhum. Os artigos partem do zero e constroem cada conceito desde a definição. Familiaridade básica com números naturais e inteiros é suficiente.
Para quem está lendo no dia em que este artigo foi publicado, o primeiro artigo da primeira série sai amanhã. Até lá!