segunda-feira, 2 de maio de 2011

O que fazer com o C que se aprendeu na faculdade?

O que fazer com o C que se aprendeu na faculdade?
Escrito em 6/1/2011 por Fernando Mercês <fernando@mentebinaria.com.br
** Licenciado sob a Creative Commons 3.0


Em muitas faculdades brasileiras a linguagem C é ensinada aos alunos de cursos de tecnologia. Mesmo assustando os novatos, a maioria resiste e vence a matéria. O problema é entender por qual motivo o C foi escolhido para iniciar o curso de programação. Seria uma linguagem didática para se aprender a programar? Ou é um teste para ver quem tem ou não o "jeito pra coisa"? Alguns diriam que o correto seria começar com Pascal

, mas há quem defenda linguagens mais modernas como Python, Perl, Ruby ou PHP. E aí, pra que serve o C no primeiro período? Neste artigo farei uma análise sobre o que se aprende da linguagem, o motivo pelo qual ela surge no início do curso, seu valor de mercado e o que é possível fazer com esse start que a faculdade nos dá.
A linguagem C
A importância histórica da linguagem C é inegável e despensa maiores comentários. Sabemos que até hoje a maioria dos softwares mais poderosos são feitos em C e/ou C++ (seu primo orientado à objetos). Boa parte do kernel Linux, Windows e outros núcleos e SOs são feitas em C. Então o C deve servir para algo. :) Ensino da linguagem C
Você acabou de entrar na faculdade, está tendo aulas desta linguagem e não está entendendo nada? Não se preocupe, você não está sozinho. Algumas instituições de ensino acham que o C é uma liguagem didática, quando não é. Para se aprender a programar, usa-se pseudo-linguagem, PORTUGOL ou ferramentas do gênero. Nem mesmo o Pascal


, considerado mais fácil de se aprender que o C, é atraente e interessante à primeira vista. O grande monstro que aterroriza o aluno é a pergunta: "Pra quê que eu vou fazer isso?". Pois é, para quê escrever um programa em C que calcule a média de três alunos e imprima na tela? Qual a lição tirada disso? A resposta é: nenhuma. A maneira como a linguagem é lecionada tenta empurrar o C guela abaixo em estudantes que viram, por exemplo, Visual Basic e Delphi no segundo grau. Isto é, se é que estudaram tais linguagens ou lembram-se delas. Não poderia dar certo mesmo.
Antes de criar um programa, o aluno tem que saber o que está fazendo. O que é criar um programa, para que serve isso, o que é um arquivo executável, um binário, bits, bytes, o processador, dentre outros conceitos importantíssimos antes de se escrever o primeiro Hello World.
O resultado desse ensino forçado é o alto íncide de reprovação, abandono, mudança de curso e desistência. É possível encontrar alunos que estão no fim do curso de programação mas ainda não passaram nas matérias básicas de C. É o terror da faculdade. Definitvamente, a linguagem C vira uma vilã e a frase mais ouvida nos corredores é que "C é chato".
Por que "C é chato"?
Porque ela não te mima. Numa escala


 onde o nível mais alto é o mais próximo da linguagem usada pelo ser humano e o mais baixo, da linguagem usada pelos microprocessadores, a linguagem C é considerada de nível médio. Assembly, por exemplo, é de baixo nível, enquanto Object Pascal (usada no Delphi), de alto nível. Isso significa que para programar em C é preciso conhecer conceitos mais próximos do hardware, que as linguagens de alto nível abstraem para o programador, tornando o trabalho mais fácil. Por isso temos a impressão de que C é chato, difícil, sem sentido. Realmente, sem os conceitos básicos de computação bem sólidos, um código em C pode tornar-se incompreensível. Vejamos um exemplo.
Um código em PHP (alto nível) para se declarar uma variável e armazenar uma frase nela:
----------------------------------CODE----------------------------------
$str = "Essa é minha string";
?>
----------------------------------EDOC----------------------------------

Um código equivalente em C, seria:
----------------------------------CODE----------------------------------
void main(void)
{    char str[] = "Essa


 é minha string";
}

----------------------------------EDOC----------------------------------
No código em C, uma função teve de ser escrita (a main, que é a função principal de um programa), inclusive com seu tipo de retorno e parâmetros, onde usei void para não retornar nem receber nada. Além disso, foi criado um vetor de caracteres (char) para armazenar a frase. Em C, entende-se como string um vetor de caracteres onde o último caracter é o NULL, código 0x00 na tabela ASCII. Tá vendo por que se precisa dos conceitos de computação até pra começar uma frase em C? Agora perceba a jogada:
----------------------------------CODE----------------------------------
#include void main(void)
{    char str[20];
   strcpy(str, "Essa


 é minha string");
}

----------------------------------EDOC----------------------------------
A função strcpy(), fornecida pelo header string.h, copia caracteres para uma variável do tipo vetor de chars e adiciona um \0 (NULL) na última posição. Perceba que iniciamos o vetor de char com 20 posições para abrigar os 19 caracteres da frase proposta mais o NULL, que é um caractere só. As coisas começam a fazer sentido, apesar de "feias", não?
E assim é o C. Exigente, porém elegante. Se tem os conceitos de computação, sem dúvida não terá grandes dificuldades com a linguagem.
Usando o C na vida e no mercado de trabalho
Certo, você se convenceu de que C é legal de aprender, poderoso e aprendeu. E agora, faz o quê? Tem um colega seu ganhando dinheiro fazendo sites em Ruby on Rails. Outro ficando faturando uma grana fazendo sistemas em Delphi para clientes, com imagens, botões brilhantes e multimídia. O que você, recém-estudado programador em C vai fazer com aquela tela

 preta pedindo dados com scanf()? Nada. Não é assim que se trabalha com C, ou pelo menos, não mais. Já foi o tempo em que os sistemas eram feitos dessa maneira. Além disso, mesmo nesse tempo a linguagem C foi rapidamente substituída neste meio pela linguagem CLIPPER e pelo COBOL, que reinou (e ainda reina) nos mainframes.
O forte do C e C++ hoje são aplicações desktop, inclusive as baseadas em rede. C também é útil para escrever compiladores e interpretadores para outras linguagens, por exemplo. Sabia que o PHP é escrito em C? Pois é, assim como Python, Ruby, BASH e muitos outros interpretadores. Então tem alguém ganhando dinheiro com C por aí, concorda?
Em novembro do ano passado

 houve uma edição de um evento chamado Universidade Livre em que Olivier Hallot, diretor da BrOffice.org falou durante alguns minutos numa faculdade carioca da dificuldade de encontrar programadores para contratar e fez um apelo para que os alunos levem a sério que o mercado está muito carente de bons programadores, principalmente em C/C++. Também em setembro do ano passado uma empresa publicou uma vaga no Rio de Janeiro buscando um profissional com os seguintes conhecimentos:
Sistema Operacional Linux;
Banco de dados MySQL;
Criação e manutenção de tabelas, relacionamentos, scripts, etc.;
Linguagem C, e das APIs: (V4L2), GTK, além de OpenGL;
Adobe Flex.

O salário inicial era de R$ 5.000,00. A vaga deve estar aberta até hoje...
Então por que aprendo Java na faculdade?
A faculdade tenta ser a mais moderna impossível, mas esquece de verdadeiramente orientar na profissão. Java é uma linguagem potente

, flexível e poderosa mas tem um fim completamente diferente da linguagem C. Com Java se programa para web, dispositivos móveis, aplicações locais (pouco usada), sistemas de informação, embarcados etc. A flexibilidade é enorme, mas o foco é outro. Não se faz uma suíte de aplicativos em Java, simplesmente porque existe o C pra isso. Um sniffer de rede ou um software ping, por exemplo, são feitos em C, porque C é pra isso. Já uma interface de um aparelho GPS, é feita em Java. Questão de adeqüação. O mercado de Java é tão grande quanto o de C no mundo, mas é maior no Brasil. No entanto, o que não pode é a faculdade tratar a linguagem C como uma introdução à programação, para que o aluno depois aprenda Java. Uma coisa não tem nada a ver com a outra. São dois nichos completamente diferentes e em ambos os casos, é possível conseguir um bom emprego e alavancar na profissão, tanto aqui quanto em lá fora.
Minha faculdade usa Python para ensinar a programar. É legal?
Claro que não. Python é super divertido e viciante mas não exige os conceitos de computação que todo programador deve ter. A resposta é a mesma para todas as linguagens de alto nível. Como escrevei anteriormente, se começa a programar com uma pseudo-linguagem, para desenvolver a lógica. Antes do estudo de programação médio/alto nível, é preciso estudar computação (que vai incluir Assembly) e aí sim, subir de nível. Se bem gerenciado, é possível manter estas disciplinas em paralelo, mas o programa deve ser cuidadoso (o que as instituições não andam respeitando - Eu já vi projeto de bancos de dados no segundo período. O aluno, teoricamente, nunca usou uma mysql.h ou outras bibliotecas para acesso a SGBD's em outras linguagens).
Quem aprende direto no alto nível e se dá bem, ótimo - e está de parabéns. Mas o objetivo do artigo é trazer a linguagem C à tona e não competir com outras linguagens.
E o que dá pra fazer com o C aprendido na faculdade?
Só com ele, não muita coisa, mas com um pouquinho de pesquisa e afinco, gera-se resultados. Um exemplo é o grupo Coding 40°, onde eu e mais três alunos do curso de Ciência da Computação nos unimos para estudar e acabamos desenvolvendo um pequeno software, capaz de imprimir a versão de um binário PE na tela

. Nada complicado, agora que já está pronto. rs
Sabe quando você está no Windows e vai nas propriedades de um EXE ou DLL e há uma aba "Versão" como na imagem abaixo?
A proposta era criar um software capaz de conseguir essa

 informação, recebendo como entrada o caminho do arquivo executável. O software deveria funcionar no Linux, já que nesse SO não é possível ver esta aba "Versão" nas propriedades dos executáveis de Windows, obviamente. Foi aí que fizemos o pev

. Ele roda em Windows e Linux e cumpre o que promete. O processo de evolução do software está registrado no blog do grupo

.
Conclusão
Estudar C, C++, Assembly e outras linguagens tidas como "terríveis" é, sem dúvida, uma boa pedida. Há inúmeros projetos no mundo todo precisando de bons programadores nessas linguagens. Não encare o "C de faculdade" como um vilão ou uma introdução à programação porque não é. A linguagem C é uma linguagem poderosa e comercial. Nada de dizer que C é coisa de maluco. ;)



Nenhum comentário:

Postar um comentário