Por que razão C deveria ser a primeira linguagem a ser aprendida em um curso de programação

Alexandre Zaghetto

“When someone says: ‘I want a programming language in
which I need only say what I wish done’, give him a lollipop.”

– Alan J. Perlis

Hoje em dia, a adoção de uma linguagem de programação em uma disciplina de Algoritmos e Programação de Computadores é praticamente obrigatória. Não faz mais sentido tratar tal disciplina do ponto de vista exclusivamente teórico, visto que máquinas de computar se tornaram amplamente acessíveis a alunos e instituições de ensino superior. É indiscutível que o principal foco da disciplina deva ser algoritmos, ou seja, o desenvolvimento do pensamento computacional, mas abolir a emprego de uma linguagem a programação e desenvolver o conteúdo exclusivamente a partir de pseudo-código é um retrocesso, pois priva o aluno da dimensão prática da disciplina, justamente numa época em que a capacidade de materializar o conhecimento é cada vez mais requerida. Vale ressaltar que o aprendizado subjacente de uma linguagem de programação implica um acréscimo de competência e habilidade que em nada atrapalha o aprendizado teórico de algoritmos, principalmente quando a carga horária assim o permite. Mesmo disciplinas mais tradicionais que a Computação, como a Física e a Química, fazem uso da atividade prática em laboratório como recurso didático. Não há, portanto, motivo realmente substancial para que uma disciplina inicial de algoritmos não contemple ambas as visões: algoritmos e prática de programação de computadores por meio de uma linguagem de programação.

Há ainda uma questão secundária: não apresentar o aluno a alguma linguagem de programação no início do curso apenas adia o momento em que isso necessariamente deverá ocorrer. Caso o argumento da auto-suficiência da teoria seja aplicado a todas as disciplinas – porque, em tese, isso pode ser feito – ter-se-iam turmas de Adas Lovelace formadas, que, apesar de brilhante e merecedora de todo o nosso respeito e admiração, nunca viu um computador rodar um de seus programas. Logo, a pergunta que deve ser respondida é: onde, no currículo, o aluno começaria a ter contato com a prática de programação? Não há razão suficientemente forte para que não seja no primeiro semestre, em uma disciplina de Algoritmos. Resta apenas definir que linguagem de programação empregar como ferramenta.

O argumento de que a Linguagem C é “muito difícil” não parece válido, pois, em primeiro lugar, é possível reduzir o grau de dificuldade de uso dessa linguagem quase ao ponto em que ela começa a se tornar semelhante a linguagens “mais fáceis”. Na verdade, se o foco principal é de fato o desenvolvimento de algoritmos,  as diferenças entre o uso simplificado do C e o uso de qualquer outra linguagem naturalmente mais simples sejam reduzidas a quase nada. Em segundo lugar, graus de dificuldade mais elevados, se abordados com a didática adequada, habilitam o desenvolvimento de conexões cerebrais úteis ao aperfeiçoamento da criatividade do aluno. Por isso, um uso mais elaborado da Linguagem C pode propiciar ganhos cognitivos úteis também a implementações algorítmicas. Um recurso de programação mais complexo permite a proposição de soluções algorítmicas também mais complexas. É conhecida a frase de Abraham Maslow: “Se a única ferramenta que você tem é um martelo, tudo começa a parecer com um prego”.

Considerando que a utilização de práticas de programação em uma disciplina de Algoritmos potencializa significativamente a compreensão de tópicos teóricos abordados em sala de aula; oferece uma visão prática da disciplina; serve de estímulo adicional aos alunos; e é um acréscimo que em nada interfere prejudicialmente na teoria, os itens abaixo visam argumentar a favor da utilização da Linguagem de Programação C. É importante dizer que um tópico ou outro citado isoladamente e fora de contexto perde força, e pode até ser anulado por vantagens equivalentes, apresentadas por outras linguagens. Sendo assim, o peso da argumentação está no conjunto como um todo. A escolha pela Linguagem C seguiu o critério da generalidade, ou seja, já que alguma linguagem de programação deve ser utilizada, que seja aquela que abre o maior leque de possibilidades de aprendizado e aplicações. Em outras palavras, que seja aquela que maximize o incremento das habilidades e competências do aluno.

Para que linguagens de mais alto nível possam ser completamente dominadas, é necessário passar por conceitos que estão em um nível de abstração menor. Como compreender em profundidade polimorfismo, classe, herança, etc., se conceitos como bloco de função, por exemplo, não tiverem sido apropriadamente esmiuçados? Compreender polimorfismo, classe e herança não é a mesma coisa que utilizar esses recursos. Compreender vai muito mais além que utilizar. O estudo de algoritmos por meio da Linguagem C oferece ao aluno a oportunidade de abordar conceitos fundamentais que são os alicerces sobre os quais as linguagens mais atuais estão assentadas.

Linguagens que foram formuladas após o C, como o C++, o C# e a prima distante Java, fora o SystemC e o Objective-C, compartilham grande parte dos conceitos e da sintaxe do C. As primeiras são as quatro linguagens mais utilizadas no mundo [1], sendo C a ancestral. Por isso, compreender C lança os alicerces para se compreender toda uma família de linguagens.

07Spectrum2014.pdf

Na tabela apresentada pela TIOBE, a linguagem aparece com 14,600% das preferências, logo após o Java, com 20,528%. A linguagem C++ aparece em terceiro lugar, com 6,721% (dados de março de 2016) [2].  c
As linguagens Java, C++ e C# estendem as potencialidades do C, incluindo conceitos da Programação Orientada a Objetos. A orientação a objetos pode se revelar uma ferramenta excessivamente poderosa em alguns contextos. Programas que dispensam tais recursos podem inicialmente ser escritos em C, preservando a facilidade de integração com futuras soluções baseadas em C++.

Segundo a Computer World, as 10 linguagens de programação mais requeridas pelos empregadores são: (a) Java (salário médio $95k); (b) HTML (salário médio $81k); (c) JavaScript (salário médio $88k); (d) C++ (salário médio $94k); (e) C# (salário médio $91k); (f) XML (salário médio $92k); (g) C (salário médio $93k); (h) Perl (salário médio $93k); (i) Python (salário médio $83k) [3]. Segundo esta visão de mercado, Java oferece a melhor remuneração média ($95k), seguida por C++ ($93k).

Quando se trata de desempenho, ou seja, velocidade de execução, C é imbatível [4, 5].

bench
A maior parte dos sistemas operacionais Windows, Linux e Unix são escritos em C. Se alguém deseja programar em um desses sistemas operacionais ou criar o seu próprio, provavelmente terá que saber C.

Drivers de dispositivo são quase sempre escritos em C. A razão está no fato da linguagem permitir o acesso a elementos básicos do computador. Além disso, habilita o acesso direto à memória do computador por meio de ponteiros.

Dispositivos móveis estão ganhando popularidade a cada segundo. Aparelhos domésticos como televisores, refrigeradores, fornos de micro-ondas etc. são partes integrantes da vida cotidiana de muitos. Tais dispositivos vêm acompanhados de processadores que necessitam de programação. Esses programas, ditos embarcados, devem não só ser rápidos, mas também fazer baixo uso de memória, pois o consumo de energia é um parâmetro crítico. A linguagem C se torna ideal também nesse cenário.

Linguagens de alto nível são orientadas ao usuário e possibilitam um desenvolvimento mais rápido. Linguagens de baixo nível são orientadas à máquina e possibilitam o desenvolvimento de programas mais rápidos. A linguagem C é uma linguagem de médio nível, pois combina de forma bem-sucedida as características desses dois tipos de linguagens.

O primeiro símbolo de uma linguagem moderna é a estrutura de código em blocos. Cada código existe em um bloco separado e não interfere no código de outros blocos, oferecendo uma maneira fácil de se programar e minimizar a possibilidade de efeitos indesejáveis. A linguagem C é estruturada em blocos de códigos.

Trata-se de uma linguagem madura e estável, cujas características muito provavelmente não desaparecerão por um longo tempo.

C é portável para a maioria, senão a totalidade, das plataformas.

A linguagem permite o uso de macros, recurso que não há em muitas outras linguagens. Com macros pode-se desenhar a linguagem a partir da linguagem.

Aprender C como a primeira linguagem de programação, em Algoritmos e Programação de Computadores, possibilita o aprofundamento das habilidades em programação na disciplina de Estrutura de Dados, bem como a construção de sistemas mais complexos nas disciplinas de Software Básico e Sistemas Operacionais. Além disso, torna facilitado o aprendizado de Programação Orientada a Objetos que tem C++ como ferramenta.

A linguagem C possibilita a implementação de outras linguagens de programação bastante úteis, como, por exemplo, o Python. Se uma pessoa pretende trabalhar com a implementação de linguagens de programação, aprender C é uma boa estratégia inicial.

Na escolha de uma linguagem de programação a ser utilizada em um primeiro curso de Algoritmos e Programação de Computadores, deve-se levar em conta as habilidades e as competências a serem adquiridas pelo estudante. As HABILIDADES: “(…) estão relacionadas ao saber fazer. Assim, identificar variáveis, compreender fenômenos, relacionar informações, analisar situações-problema, sintetizar, julgar, correlacionar e manipular são exemplos de habilidades.” As COMPETÊNCIAS:  estão relacionadas “(…) à capacidade de bem realizar uma tarefa, ou seja, de resolver uma situação complexa” [6]. Aqui se deve destacar o termo SITUAÇÃO COMPLEXA. A suposta complexidade da Linguagem C permite ao aluno aprofundar-se em detalhes que irão ampliar suas habilidades e competências.

Em uma disciplina de Algoritmos e Programação de Computadores, que tenha de fato ALGORITMOS como seu principal foco, a linguagem de programação provavelmente será a menor das dificuldades. Um aluno que compreende um algoritmo de integração numérica, por exemplo, dificilmente terá dificuldades em usar o printf ou o scanf. Alunos que compreendem o algoritmos da Fast Fourier Transform terão no uso de ponteiros a menor de suas preocupações. Em outras palavras, quem tem condições intelectuais de compreender o ALGORITMO não terá dificuldades de compreender a SINTAXE da Linguagem de Programação C.

A linguagem C possibilita o que chamo de “um livro e uma semana.” Ou seja, quem aprendeu C terá lançado bases muito sólidas para o aprendizado de qualquer outra linguagem de programação imperativa, sendo necessário apenas um livro e uma semana para que o estudante possa aprender a nova linguagem.

Referências

[1] Top 10 Programming Languages – Spectrum’s 2014 Ranking:

http://spectrum.ieee.org/computing/software/top-10-programming-languages

[2] http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

[3] 10 programming languages that are in demand by employers:

http://www.computerworld.com/article/2473702/it-careers/97819-Top-10-Programming-Skills-That-Will-Get-You-Hired.html

[4] Computer Language Benchmarks Game

http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=gcc&lang2=java

[5] Julia Language

http://julialang.org/

[6] Pedagogo Brasil: Competências e Habilidades

http://www.pedagobrasil.com.br/pedagogia/saberefazer.htm

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *