O Flávio escreveu:

…este post, como o título sugere, é sobre a grade curricular de alguns cursos superiores (e alguns técnicos) que encontro por aí nos sites das faculdades e universidades que ministram tais cursos.

Quando se olha a grade curricular destes cursos, voce vê de tudo lá, menos o que realmente importa prá começo de conversa: Os Padrões Web.

Bem, na curiosidade ampliada, você resolve dar uma olhada no código fonte do site das faculdades e universidades que oferecem tais cursos, e o que você encontra é um monte de tables, td, tr etc.

Enfim, a história é mais ao menos assim: “Se a sua casa é suja, você quer que eu te contrate pra limpar a minha?”

Bem colocado, embora nossa posição seja um pouco mais moderada. A coisa mais importante a se dizer é que o argumento de quem cria os cursos faz sentido. A faculdade é, ou ao menos deveria ser, algo pensado para valer para a vida inteira. Então, ao invés de se ensinar uma linguagem de programação, a faculdade deve ensinar a programar. Ou seja, ensinar a lógica, os conceitos, as técnicas, as características do bom trabalho de programação e todo aquele repertório de conhecimentos e soluções que um programador deve conhecer e que serão úteis em qualquer linguagem, mesmo daqui a dez anos.

Por isso, um dos fatos descritos pelo Flávio, de matérias chamadas “Programação para a Web” e “Banco de Dados”. Porque o que a proposta escrita da faculdade diz é que o curso deve apresentar os conceitos que serão úteis em qualquer linguagem, então tanto faz se a faculdade vai ensinar Python+Postgre, PHP+MySQL, Java+Oracle ou .NET+MSSQL Server porque os conceitos que o aluno aprender ali serão úteis em qualquer plataforma, em qualquer combinação de linguagem e banco de dados.

Os problemas, que levam alunos (e futuros alunos como o Flávio) a reclamar, incluem:

  1. Na maioria dos casos, o professor não leu, ou não entendeu, ou entendeu e não está afim de cumprir o que diz a proposta pedagógica da faculdade. O que acaba acontecendo é um curso de uma tecnologia específica, por um professor que é especialista naquela tecnologia e não nos conceitos que podem ser abstraídos para o desenvolvimento em qualquer linguagem.
  2. Na maioria dos casos, o aluno também não entendeu nada. E a culpa é da faculdade. A proposta de ensino não é detalhada, o currículo consiste apenas numa lista de matérias e não há nem mesmo uma descrição do que é cada uma e quais os objetivos de se estudar aquilo. O aluno apenas ouviu as pessoas, no serviço ou sabe-se lá onde, dizendo que ele deve aprender “Java”, ou “PHP”, ou “SQL”, ou … bem, você entendeu. O que ele quer é aprender determinada tecnologia, e a faculdade não explica porque acha que é melhor aprender os fundamentos, conceitos e técnicas.
  3. Não dá para dissociar tanto assim os conceitos das tecnologias. As ferramentas de programação funcional, a introspecção e a tipagem forte e dinâmica do Python levam a um jeito de programar e a um repertório de técnicas e soluções diferentes das de um programador Java. Evite o flamewar: veja bem, eu não disse que as soluções do Python são melhores que as do Java, ou que a linguagem é melhor do que Java, embora eu prefira trabalhar com Python. Disse apenas que são diferentes. O arroz-com-feijão, ou seja, a lógica de programação, os fundamentos da orientação a objetos e boa parte das boas práticas de desenvolvimento são úteis em qualquer linguagem. Mas quando as coisas vão chegando a um nível de abstração que se espera de alguém se preparando para programar profissionalmente, as soluções vão se tornando diferentes. Às vezes, radicalmente diferentes.
  4. Para algumas coisas, não há resposta certa. Veja, por exemplo, as discussões a respeito de Design Patterns. Ou tente pesquisar a web para escolher entre Unified Process ou eXtreme Programming, e em seguida leia o Getting Real para ver uma abordagem radicalmente diferente dos dois. Cada tecnologia e ferramenta é criada baseada em conceitos e idéias. Java foi criada para oferecer aos gerentes e arquitetos controle, para evitar que o programador faça besteira. Python e Ruby foram criados com um conceito diferente, oferecendo ao programador liberdade. Você pode fazer besteira se quiser. Mas também pode fazer coisas impossíveis em Java. Para saber qual é melhor para você, é preciso avaliar muita coisa, incluindo a cultura da empresa onde você trabalha. O problema é que as faculdades de maneira geral ensinam uma ou duas linguagens de programação e passam longe do resto, dando aos alunos uma visão unilateral. Quando você só conhece uma resposta, ela é sempre certa para você.
  5. A web é especial. As coisas que estamos fazendo na web são muito diferentes, em vários aspectos, de tudo o que foi feito até aqui em desenvolvimento de software. E a web é um conjunto de tecnologias, ou seja, se seu curso é sobre desenvolvimento de software, você certamente tem uma série de respostas certas para cada pergunta, mas quando você vai falar da web, em muitos assuntos, por enquanto há uma resposta certa. Por exemplo, não dá para falar de web sem falar de HTTP. Só existe uma web, e ela é feita com HTTP. Você pode falar dos conceitos de “redes mundiais distribuídas”, mas só existe uma Internet, então é melhor falar dela logo. Pode falar de “protocolos de rede para transferência de hipertexto”, mas só existe uma web, então a escolha certa ao falar de desenvolvimento web é a dobradinha HTTP sobre TCP/IP. Da mesma forma, não dá para falar de web sem falar de navegadores, de XML, HTML, XHTML, CSS e Javascript. E, desde o final do século passado, as respostas certas nessas tecnologias específicas são os padrões web.

Mas, em tecnologia, a maioria das faculdades está alguns anos atrás do resto do mundo, embora algumas poucas estejam alguns anos a frente de todos nós.

Jabá: o curso de Ruby on Rails daqui a duas semanas falar bastante de HTTP, tão importante, útil e desconhecido por tantos desenvolvedores. Vale a pena conhecer os detalhes do protocolo e descobrir o que você pode fazer com ele.