Resolvi fazer Ciência da Computação há muito tempo. Faz tanto tempo que eu não lembro quando foi, mas acho que eu tinha uns oito anos. Minha única certeza é que eu não fazia ideia do que era o curso (mas isso não importa — hoje acho que escolhi estudar uma das coisas mais legais que existem).

O tempo passou e cogitei fazer outras faculdades, mas nunca seriamente. Começou o 3º ano do Ensino Médio e comparei os currículos de UFSC, UNICAMP, ICMC-USP e IME-USP pra decidir que curso escolher. Ordenei-os (por motivos teóricos) da seguinte forma:

  1. IME-USP
  2. ICMC-USP
  3. IC-UNICAMP (engenharia)
  4. UFSC

Desde lá minha meta foi entrar no lugar onde hoje, felizmente, estou. Mas não foi fácil.

Passei o último ano do Ensino Médio namorando estudando, li os resumos dos livros exigidos e quando chegou novembro… não passei na primeira fase do vestibular da Fuvest.

(Felizmente passei na UFSC e vivi um ano sensacional. Morava do lado da Universidade, fiz grandes amigos, conheci professores do mais alto nível, me classifiquei pra final mundial da Maratona de Programação e aprendi mais Matemática do que em toda a vida. Mas nem todos têm a mesma sorte.)

O vestibular da USP usa um terrível sistema baseado em carreiras.

Def. Carreiras são conjuntos disjuntos não-vazios de cursos universitários que em geral tem algo em comum (e.g., uma carreira pode ter Engenharia de Produção e Ciência da Computação porque ambos são cursos pra seres humanos — não sei se poderia haver alguma outra razão mais específica, sem ser através da Lei dos Cinco, mas creio que não).

No sistema da USP o candidato escolhe uma carreira, cursos que gostaria de fazer nessa carreira e sua ordem de preferência.

Passam pra segunda fase do vestibular três vezes o número de vagas disponíveis na carreira. Depois da segunda fase, os candidatos são ordenados de acordo com a nota da segunda fase e roda-se um algoritmo assim:

1
2
3
4
5
6
7
8
for (int pos = 0; tem_vagas_sobrando() && pos < n; pos++) {
    for (int opcao = 0; opcao < 4; opcao++) {
        if (tem_vagas_no_curso(pessoa[pos].opcao[opcao])) {
            da_vaga(pessoa[pos], pessoa[pos].opcao[opcao]);
            break;
        }  
    }  
}

Estava com sono e dificuldade de pensar quando postei. Outra hora tento passar pra uma língua menos nerd.

São os institutos que decidem em que carreira seus cursos vão entrar e o negócio fica uma bagunça. A maioria das carreiras têm cursos iguais com diferença apenas de período (diurno e noturno), mas há carreiras de institutos inteiros (a FEA, por exemplo, tem apenas uma carreira onde coloca Economia [diurno e noturno], Administração [diurno e noturno], Ciências contábeis [diurno e noturno] e Bacharelado em Ciências Atuariais), de cursos iguais em diferentes campi (na carreira de Direito, por exemplo, o candidato pode escolher entre o Largo São Francisco e Ribeirão Preto) e, por fim, carreiras como a minha: Engenharia na Escola Politécnica e Computação, que oferece (versão Fuvest 2010):

  • Engenharia Civil e Engenharia Ambiental (poli)
  • Engenharia Elétrica (ênfases: Automação e controle, energia e automação elétricas, sistemas eletrônicos, telecomunicações) (poli)
  • Engenharia Mecânica e Engenharia Naval (poli)
  • Engenharia Química, Engenharia Metalúrgica, Engenharia de Materiais, Engenharia de Minas e Engenharia de Petróleo (poli)
  • Engenharia de Computação e Engenharia Elétrica (ênfase Computação) (poli)
  • Engenharia Mecânica – Automação e Sistemas (Mecatrônica) (poli)
  • Engenharia de Produção (poli)
  • Bacharelado em Ciência da Computação (IME!)

Reza a lenda que essa era uma carreira que tinha todos os cursos que classificam como Exatas (uma classificação ridícula, na minha opinião) e todos eles foram saindo, até que no meu ano sobraram só as engenharias da Poli e o BCC.

(E eu prefiro acreditar nisso porque me doeria acreditar o contrário — aceitar que em certo momento da História algum idiota professor decidiu que Ciência da Computação tem mais a ver com Engenharia Ambiental do que com Matemática.)

Agora veja o problema: Em um ano aqui, aprendi que trabalhar em bancos está na moda em São Paulo. Como se formar em engenharia na Escola Politécnica é garantia desse nobre emprego, fazem um monte de cursinhos (e turmas especiais neles) voltados a destruir o cérebro das ensinar crianças (o link é bom; clique!) pra jihad passar na Fuvest. O resultado é que um catarinense que quer entrar no Bacharelado em Ciência da Computação não consegue nem passar da primeira fase do concurso. Se passa pra segunda fase, ainda assim precisa competir com estudantes que colocaram o BCC na quarta opção para não decepcionar os pais e seu ego caso não passem nas três engenharias que desejam.

E não para por aí.

O BCC abre 50 vagas por ano e neste ano matricularam-se 31 calouros. Os alunos da turma (para a qual dou monitoria da disciplina Introdução à Computação) me contaram que tem 26 pessoas indo assistir as aulas. Enquanto há jovens no Brasil inteiro querendo entrar neste curso, que considero um dos melhores (se não o melhor) do país, a sala da turma de 2010 está com metade de sua capacidade porque gente que queria fazer engenharia marcou a opção do BCC e não fez a matrícula.

A solução imediata é óbvia: tirar o Bacharelado em Ciência da Computação da carreira da Escola Politécnica.

Felizmente, não sou o único que penso isso. Então, após todo esse preâmbulo, informo em primeira mão: a Congregação do Instituto de Matemática e Estatística, em sessão ordinária realizada hoje (29/04) da qual tive o enorme prazer de participar, aprovou por unanimidade essa decisão, que já havia sido aprovada (também por unanimidade) dentro do Departamento de Computação.

Será criada nesse ano na Fuvest uma carreira chamada “Bacharelado em Ciência da Computação”, que a princípio terá 50 vagas, mas para a qual será convidado o Bacharelado em Ciência da Computação do ICMC-USP (São Carlos).

A decisão é fantástica e será fundamental pra vida de diversos futuros estudantes desta faculdade. Já estou ansioso pelo ano que vem…

 

O disciplina é “Princípios de Desenvolvimento de Algoritmos” e ela está sendo ministrada neste semestre pelo Prof. Dr. Carlos Eduardo Ferreira, participante do grupo de otimização combinatória, diretor nacional da Maratona de Programação e orientador da minha iniciação científica.

A turma é do Bacharelado em Ciência da Computação no IME-USP.

Acabei de receber a seguinte mensagem de um dos monitores:

Screenshot

Preciso dizer mais alguma coisa?

 

Listo aqui cinco objetivos (talvez utópicos, talvez eu desista deles na próxima semana) para os próximos 50, 60 anos.

0. Ganhar uma medalha numa final mundial de um ACM ICPC.

Não é simplesmente pela competição, que é muito divertida. É também porque isso precisa de uma quantidade de estudo de ciência da computação e prática na resolução de problemas que fará diferença pro resto da minha vida e me ajudará com os outros objetivos. Afinal, a vida não passa de uma série de problemas que precisam ser resolvidos da maneira mais eficiente possiǘel.

1. Obter um bom PhD numa boa instituição.

Novamente não é simplesmente pelo prestígio e porque isso é importante na Academia, mas porque o PhD significa muita pesquisa e muita pesquisa significa MUITO conhecimento. Conhecimento este que será necessário pros próximos itens…

2. Solucionar o problema da segurança em São Paulo.

As pessoas acham que isso é impossível. Porém, eu quero resolver esse problema com ciência da computação, não com conversa mole ou politicagem. A realidade é que resolver o problema da violência em São Paulo não passa de um problema de otimização (minimizar a diferença social, minimizar o uso de drogas, maximizar a quantidade de pessoas felizes, maximizar a quantidade de respeito entre as pessoas…). Vou abstrair o problema, determinar suas causas e resolver uma por uma, de modo a contribuir pra uma cidade tão importante pra tantas milhões de pessoas.

3. Desenvolver a cura do câncer.

Na minha opinião o câncer é o mais cruel dos problemas de saúde. Atinge muita gente, sem motivo. Vem de repente, tortura e mata. Por isso acho fundamental resolver esse problema, que pode inclusive me atingir um dia. Como farei isso? Se eu soubesse, já teria feito. Mas, basicamente, atacando-o da mesma maneira que todos os outros problemas.

4. Receber um Turing Award.

Creio que será natural depois dos itens 2 e 3.

 

Em primeiro lugar quero afirmar aos desavisados que o curso de Ciência da Computação hoje é, na maioria dos lugares, não mais do que o estereótipo indica: um curso de viciados em jogos. Até aí tudo bem; afinal cada um faz o que bem entende nos seus momentos de lazer.

Porém, eu acho que esse fato colaborou para esse bacharelado se transformar num reduto de usuários de computador, pessoas que leram “Computação” no nome e pensaram: “Eu gosto de mexer no computador, acho que este é o meu curso”.

Our new mobile lab
Creative Commons License photo credit: Christy Tvarok Green

Se já sabemos que funciona, pra que provar?

A realidade que percebo nas turmas, tanto na UFSC quanto no IME-USP, é decepcionante. Quando um professor dá um curso mais forte e teórico, vários alunos se espantam e reclamam que o curso não está formando para a prática. Pior: em muitas universidades o curso está mudando de cara pra satisfazer estes estudantes e não o contrário, como deveria ser. O IME-USP ainda tem um curso excelente, mas advinhe o que os alunos da minha turma aprenderam na primeira matéria do curso (chamada de Introdução à Computação)? Java e programação orientada a objetos. Eles aprendem classes e métodos antes de aprenderem operadores lógicos e laços. Na única aula que fui da disciplina, o professor falava bem do Java porque as classes e métodos podem ter acentos!!!

A situação é tão desanimadora que às vezes penso que o nome do meu curso deveria mudar para não pegar desavisados que não procuram o que é antes de entrar. Deveria ser algo como Bacharelado em Ciência dos Algoritmos, Bacharelado em Matemática Discreta, que tal? Não sei. Mas é obviamente uma besteira: o que precisa mudar são as pessoas. Tanto as que entram no curso, quanto as pessoas em geral, que pedem favores pra cientistas da computação pensando que eles são técnicos de informática. As pessoas precisam entender o que é o curso antes de entrar nele, precisam saber que Ciência da Computação é um ramo da matemática que existe desde muito antes da criação dos computadores digitais.

O primeiro parágrafo do texto da Wikipedia em português sobre Ciência da computação diz (e juro que não fui eu que editei!):

Ciência da computação é o estudo dos algoritmos e suas aplicações, bem como das estruturas matemáticas indispensáveis à formulação precisa dos conceitos fundamentais da teoria da computabilidade e da computação aplicada. Desempenha por isso um papel importante na área de ciência da computação a formalização matemática de algoritmos, como forma de representar problemas decidíveis, i.e., os que são suscetíveis de redução a operações elementares básicas, capazes de serem reproduzidas através de um qualquer dispositivo mecânico/eletrônico capaz de armazenar e manipular dados. Um destes dispositivos é o computador digital, de uso generalizado, nos dias de hoje, pelo custo reduzido dos componentes eletrônicos que formam o seu hardware.

Se o Java já tem um heap implementado para que reinventar a roda?

Edsger Dijkstra, um dos grandes cientistas da computação de nossa história, disse certa vez:

Ciência da Computação está tão relacionada aos computadores quanto a Astronomia aos telescópios, Biologia aos microscópios, ou Química aos tubos de ensaio. A Ciência não estuda ferramentas. Ela estuda como nós as utilizamos, e o que descobrimos com elas.

Precision knob?
Creative Commons License photo credit: gogoninja

É por tudo isso que abandono a sala ao ouvir que hoje em dia classes são mais importantes do que laços e nomear corretamente funções é mais importante do que conhecer algoritmos. (Sim, já ouvi isso de um professor dentro da universidade.)

Declaro-me a favor de um curso de Ciência da Computação onde os computadores sejam tratados apenas como ferramentas. Há outros cursos (técnicos) para quem não pensa assim e entra na universidade buscando uma formação sobre desenvolvimento ágil e produtividade. Não estou criticando quem busca isto. Porém, na minha opinião, estes definitivamente não deveriam entrar num curso chamado Bacharelado em Ciência da Computação.

© 2012 Blog do Tiago Suffusion theme by Sayontan Sinha