Estou a meio caminho do programa de ciência da computação pós-Bacc da Universidade Estadual do Oregon. É uma dificuldade (moderadamente) cansativa de 15 cursos, mais cansativa pelo fato de eu estar trabalhando em tempo integral e fazendo dois cursos por trimestre (com uma exceção feita para este último verão, quando apenas um curso estava no banco dos réus para me dar algum tempo para me casar 🙂 ). Até à data, já fiz, ou estou a fazer, os seguintes cursos (sem qualquer ordem em particular):
- Introdução à Informática I
- Introdução à Informática II
- Estruturas discretas em Informática
- Estruturas de Dados
- Desenvolvimento Web
- Introdução a Bases de Dados
- Arquitectura de Computador &Linguagem de Montagem
- Análise de Algoritmos
- Sistemas Operacionais (actualmente em progresso)
- Engenharia de Software I (actualmente em progresso)
E tenham as seguintes classes à minha frente:
- Engenharia de Software II
- Introdução à Engenharia da Usabilidade
- Intro para Redes de Computadores
- Desenvolvimento de Software Móvel e em Nuvem
- Projetos de Software (Programa Capstone)
Como em qualquer programa projetado para ensinar um grupo diverso de alunos, todos com diferentes estilos de aprendizagem e provenientes de diferentes origens, a qualidade do curso e dificuldade varia. Na minha estimativa, os cursos mais interessantes também foram os que considero mais difíceis.
Introduction to Computer Science II foi aparentemente projetado para eliminar os alunos que não eram programadores fortes. O curso foi pesado na escrita de código (C++ é a linguagem primária usada no programa da OSU e foi fortemente apresentado aqui) com foco em padrões de design orientados a objetos.
Estruturas discretas em Ciência da Computação provavelmente teria sido mais fácil se minha álgebra e meus músculos de escrita de prova não estivessem tão enferrujados. Uma vez aquecido, porém, o curso é um exercício fascinante de raciocínio indutivo e sólida introdução à teoria do cenário e dos gráficos. Este curso provou ser especialmente útil, uma vez que investiguei disciplinas relacionadas com inteligência artificial que são pesadas sobre os tipos de simbologia a que é apresentado nesta aula.
Arquitectura de Computador &Linguagem de Montagem é uma viagem. Enquanto C++ expõe você a conceitos como ponteiros e alocação de memória – coisas que a maioria das linguagens abstraem – assembly é uma besta diferente. Aqui, você aprende a mover a memória na CPU e ver como loops, declarações condicionais e funções são construídos a partir do zero. Você também é apresentado ao fetch, decodificar, executar o ciclo que todos os CISCs utilizam. Em resumo, você aprende o que é um computador e como ele faz todas as coisas bonitas que nós tomamos como garantidas.
Análise de Algoritmos foi, conceitualmente, o curso mais difícil do programa. A carga de trabalho era mais leve que a Introdução à Informática II, mas a última vez que olhei para os limites e derivados foi na faculdade. Eu me vi novamente indo para a Academia Khan nos fins de semana para aperfeiçoar o cálculo, mas uma vez que o básico estava em baixo, estava fora para as corridas. Este curso foi o primeiro em que me senti como um “cientista da computação”, pois os conceitos requerem uma forma abstrata de pensar que vai além de “apenas” programar ou escrever software. Aqui, você pode ver a notação Big-O e análise de algoritmos, programação dinâmica, teoria da complexidade, teoria dos gráficos e algoritmos, e seus clássicos algoritmos de busca e classificação. A qualidade do curso em si deixa algo a desejar, mas os tópicos são verdadeiramente belos.
Os outros cursos não são “maus”, por si só, mas ou lhes falta o rigor ou profundidade dos outros cursos ou a organização/aula/curso é tão pobre a ponto de distrair. Dito isto, cada curso tem suas próprias pepitas de conteúdo interessante, e o mais importante, o ato contínuo de resolver problemas é fundamental para aprender como ser um “desenvolvedor”, “engenheiro”, “cientista da computação” (ou o que quer que você queira chamar de alguém que movimenta bits em alta velocidade).
E agora estou na reta final! Nos próximos três trimestres vou terminar 7 cursos, com a maioria dos cursos restantes (engenharia de usabilidade, engenharia de software, computação em nuvem) todas as coisas que estão na minha casa do leme. Em agosto deste ano, serei o orgulhoso proprietário de um Bacharelado em Ciências da Computação da Oregon State University e passarei para o programa de Mestrado em Ciências da Computação da Georgia Tech. O tempo dedicado a este programa tem sido estressante às vezes, mas eu não trocaria esta experiência por nada.