Semestre 1 (120h): ME (60h); AC (30h); GE (30h)
Semestre 2 (240h): FMC1 (90h); VGA (60h); Cálculo I (90h)
Semestre 3 (150h): FMC2 (90h); Probabilidade (60h)
Sobre a utilização de módulos de 30h. A separação em módulos de 30h (que podem ser lecionados em metade de semestre cada, tendo aulas 4h/semana) permite aos alunos que foram aprovados em apenas um dos dois não precisar repetir ambos.
Além disso as dependências dos módulos dos semestres seguintes são especificadas para permitir ao aluno que reprovou em um dos módulos conseguir cursar disciplinas dos próximos semestres sem ficar preso até aprovar nos outros módulos também.
Sobre pointers: Disciplinas obrigatórias contêm pointers para assuntos cobertos em optativas para incetivar o interesse de alunos que normalmente sequer saberiam da existência de tais assuntos.
IDM: Introdução à Demonstração Matemática (60h)
prereqs: MB
prereqs: MB
prereqs: MB
prereqs: (IDMa ou IDMb)
prereqs: (CFR1 e IRI e IDMa e IDMb)
Teremos oportunidades de oferecer mais optativas, mais freqüentemente, e com mais diversidade para os alunos interessados. Sendo optativas, seu detalhamento fica fora desta proposta.
Observações
- Mesmo sendo optativas para o BTI, umas delas podem e devem ser obrigatórias para certas enfases.
- Podemos definir grupos de optativas (por exemplo "teoria", "programação", "fundamentos", "data science", etc.) e ter como obrigatório cursar um mínimo de CH de cada grupo (não necessariamente o mesmo). Seria possível a mesma disciplina pertencer a mais que um grupo.
Menciono algumas optativas aqui, como exemplos.
IEA: Introdução a Estruturas Algébricas (30h)
prereqs: (CFR1 e IDMa e IDMb)
CDI: Cálculo Diferencial e Integral (60h)
equiv: IDMb (30h) + CDI (60h) = Cálculo I (90h)
prereqs: IDMb
IPI: Introdução à Probabilidade e Inferência (60h)
prereqs v1: (ECP e MB)
prereqs v2: (ECP e Cálculo I)
Poderia ser a própria Elementos de Probabilidade e Inferência criada e apresentada por Ismênia, removendo o item 1 (Probabilidade) da sua ementa (pois é coberto na ECP).
Veja o link para mais detalhes.
VGA': Vetores e Geometria Analítica
prereqs: MB
AL': Álgebra Linear (60h)
prereqs: (IDMa ou IDMb)
FUN: Programação Funcional (60h)
prereqs: nenhum!
(Esta disciplina já existe como optativa.)
SEM: Semânticas de Linguagens de Programação (60h)
prereqs: CFR2
CAT: Teoria das Categorias para Computação (60h)
prereqs: (CFR2 ou IEA)
TAC: Teoria Axiomática dos Conjuntos (60h)
prereqs: CFR2
LogMat: Lógica Matemática (60h)
prereqs: CFR2
LogComp: Lógica Computacional (60h)
prereqs: LogMat?
disciplina atual: DIM0610
COMP: Teoria da Computabilidade (60h)
prereqs: CFR2
disciplina atual: DIM0445?
LFA: Linguagens Formais e Autômatos (60h)
prereqs: CFR2
disciplina atual: DIM0606
GRAF: Teoria dos Grafos (60h)
prereqs: CFR2
disciplina atual: DIM0412
TT: Teoria dos Tipos (30h)
prereqs: CFR2
FORMAT: Formalização de Matemática (30h)
prereqs: TT
ALGO: Introdução aos Algoritmos (30h–60h)
prereqs: (ECP e IDMa)
Com as ementas/CHs atuais das EDB1 & EDB2, esta disciplina é excluída.
(Veja o link para mais detalhes.)
Defendo antes de qualquer outra disciplina, a inclusão duma disciplina desse foco como obrigatória para o aluno do BTI. Atualmente alunos estão se formando enganados que «programação é só isso; com várias roupas».
Proponho adicionar na grade do BTI como disciplina obrigatória uma disciplina de Programação Funcional–-algo já de acordo com os as grades das universidades freqüentemente citadas em reuniões–-para ser lecionada junto com a IRI: em paralelo, um semestre antes, ou um semestre depois.
prereqs: nenhum!
É inaceitável formar alunos no BTI que não tenham visto o mínimo fora dum paradigma só; ainda mais, evitando o funcional. Até as linguagens não-funcionais que o IMD está lecionando (Java, JavaScript, Python, etc.) têm incorporado muitas ferramentas e idéias do paradigma funcional. Por que nossos alunos são "protegidos" dessas idéias?
Além das "antigas" do mercado, o próprio mercado (sim até o brasileiro) tem visto um crescimento enorme em linguagens de Programação Funcional ou relacionadas: Clojure, Scala, Elixir, Rust, Haskell, F#, …
Me parece também bizarro terminar este curso sem sequer ter visto ou usado pelo menos uma LISP. (Aviso: LISP ≠ programação funcional!) Hoje em dia a linguagem Racket com todas as suas ferramentas educacionais–-incluindo o livro How to Design Programs (HtDP)–-parece ser a melhor opção, para atender os objetivos de aprendizagem de disciplinas do tipo «ITP» ou «Boas Práticas de Programação». Novamente, para o povo que gosta desse tipo de "argumentinho": quais cursos usam Racket?
A interoperabilidade da Clojure com Java a deixa uma boa opção para disciplinas mais focadas a aplicações.
Sugiro também incluir bem no início do curso algo parecido com o Missing Semester do MIT.