Eu leciono esse curso há vários anos na UnB (desde 2008) quase que anualmente. Esse curso é dividido usualmente em duas partes:
Na primeira parte é feita uma introdução a linguagem estruturada (isso é feito na primeira semana do curso que é optativa para aqueles que já programam) e ao projeto e análise de algoritmos.
Na segunda parte do curso (dependendo do semestre, do interesse do professor e dos alunos) exploramos a primeira parte do curso para lidar com alguns dos problemas considerados nessa resposta.
Nas últimas versões do curso que foram apresentadas em 2016 e 2017 a segunda parte do curso foi focada em tópicos de Machine Learning e Deep Learning. Os sites dessas versões do curso são: Curso de Métodos Computacionais de 2016 e Curso de Métodos Computacionais de 2017.
É válido mencionar que o curso não é focado em uma linguagem específica e o estudante é convidado para usar uma linguagem de sua escolha. Exemplos de sala de aula são feitos em Python ou Matlab e algumas soluções de exercícios são disponibilizadas em Python, Matlab, C++ ou R. Entretanto, as últimas versões do curso tem usado cada vez mais python pela adequabilidade a proposta do curso.
A lista de referências usada em versões anteriores desse curso está apresentada aqui.