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 mesmo. 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:
- 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 #
Para abordar cada parte descrita acima, os próximos artigos serão agrupados em quatro séries:
- A Linguagem dos Conjuntos — teoria dos conjuntos
- A Arte de Contar — combinatória
- Do Caso Base ao Infinito — indução matemática e relações de recorrência
- A Matemática das Conexões — grafos
Os links acima apontam para a página de cada série. Enquanto os artigos não são publicados, a página pode aparecer vazia ou com apenas parte do conteúdo — volte em breve para acompanhar as atualizações.
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.
Alguns pontos muito importantes:
- Eu não tenho qualquer ligação com o CEDERJ senão como aluno. Não conheço os professores da disciplina (lembre-se que o curso é via plataforma online com vídeos pré-gravados) nem os tutores.
- Os artigos nasceram de anotações pessoais que fui fazendo durante os estudos para a disciplina. Depois fui complementando com outras coisas que achei interessantes e que não foram cobertas na disciplina. E fui adaptando para ficar mais dentro da forma e linguagem dos outros artigos aqui do Ciência Programada.
- Os artigos não têm a menor pretensão de substituir os materiais do curso. Na realidade, escrevi para eles serem lidos por qualquer pessoa com interesse no tema, mesmo que não saiba o que é o CEDERJ nem leia este artigo de apresentação. Novamente, os artigos são completamente independentes do material que serviu de inspiração.
- Os artigos abordam diversos tópicos não cobertos na disciplina, mas que achei interessante incluir. Por exemplo, como trabalho com Python e SQL, adicionei exemplos com essas linguagens — conteúdo não presente no material original da disciplina. Incluí porque achei legal e ajuda a mostrar aplicações dos conceitos.
- O material da disciplina é muito datado. Assim, fiz um esforço para atualizar e complementar com informações mais recentes quando possível.
- Os materiais da disciplina serviram apenas como inspiração e referência. Para não violar eventuais direitos autorais dos professores, da instituição, ou dos livros por ventura usados pelos professores para fazer o material, não copiei nenhum trecho, mesmo que mínimo, dos slides. Também não utilizei diretamente nenhuma figura dos slides.
- Sobre as figuras que aparecem nos artigos, ou as recriei usando Draw.io, Mermaid, LaTeX ou Python, ou as criei do zero. Algumas também foram criadas usando geradores de imagem por IA, como o Gemini, e nesses casos é possível reconhecer pela marca d’água que tais ferramentas costumam deixar. As que recriei possuem acréscimos que achei interessantes em relação às figuras originais dos materiais da disciplina.
- Sobre os exemplos que aparecem nos artigos: alguns são inspirados nos materiais da disciplina, seja nos slides, seja nas atividades, eventualmente adaptados para se encaixar melhor na forma e linguagem dos artigos do site. Alguns outros são inspirados nos livros de referência da área. E há exemplos originais, sem qualquer relação com os materiais da disciplina.
Na realidade, o material da disciplina é bem simples e antigo. E não estou fazendo uma crítica aos professores que desenvolveram o material originalmente. Se alguém merece crítica, é a instituição CEDERJ que não investe em atualização do material. Até mesmo por isso que fui buscando outras fontes enquanto estudava, pois o material não atendia minhas curiosidades e está bem desatualizado, especialmente em formato.
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.
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áticas para a ciência da computação: matemática discreta e suas aplicações, de Judith L. Gersting.
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.
O primeiro artigo será publicado amanhã. Até lá!