BT

Desenvolvedores devem (re)aprender C++?

por Jonathan Allen , traduzido por Ivo La Puma em 08 Fev 2013 |

A introdução dos padrões C++11 e C++CX provocou nova onda de interesse na linguagem C++. Com isso, diversos desenvolvedores, especialmente os desenvolvedores Windows, passaram a se questionar se deveriam deixar de lado o C# e o Java para voltar ao C++.

Não é o que John Sonmez aconselha. Em seu artigo "Por que C++ não está 'de volta' " (do original Why C++ Is Not 'Back'), Sonmez defende que existem somente três motivos para se usar C++:

  • Quando é absolutamente necessário extrair o máximo possível de desempenho de seu software, sendo preferível fazer isso com uma linguagem OO;
  • Quando o objetivo é escrever código que faz interface direta com hardware; por exemplo, um driver de dispositivo;
  • Quando o controle sobre memória e temporização é essencial, sendo necessário comportamento determinístico no sistema e possibilidade de gerenciar a memória manualmente (por exemplo, um sistema operacional embarcado, controlando em tempo real o movimento de uma máquina).

Um dos motivos pelo qual John Sonmez se posiciona contra o aprendizado de C++ é a grande complexidade da linguagem. Embora o padrão C++11 tenha tornado o desenvolvimento mais fácil, o programador ainda precisa aprender velhos conceitos para escrever código em C++. "Códigos C++ escritos 20 anos atrás se parecerão com uma linguagem completamente diferente do C++ atual." Para reforçar seu argumento, Sonmez apresenta 36 questões que fez aos candidatos a uma vaga de desenvolvedor C++. Alguns exemplos:

  • Quantas maneiras existem de inicializar um tipo de dados primitivo em C++ e quais são elas?
  • O que é um "copy constructor" e quando é utilizado, especialmente em comparação com o operador de igualdade?
  • Quando se deve e quando não se deve retornar um valor por referência em C++?
  • Por que nunca se deve lançar uma exceção em um método destrutor?

Outro argumento desfavorável apresentado é que "as linguagens de programação precisam se tornar cada vez mais simples e aumentar o nível de abstração, e não o contrário." Sonmez completa:

Sempre haverá ocasiões em que um código de baixo nível será necessário, mas a maior parte do código escrito hoje é em nível muito mais alto.... Abandonei o barco do C++ há vários anos, no momento que deixei de poder argumentar que poderia desenvolver aplicações mais rápidas em C++ que em C#. Tentei por muito tempo acreditar que todo o investimento feito no C++ não estava perdido, mas no fim acabei descobrindo que o C# havia simplificado as coisas de tal forma que o poder adicional do C++ não valia toda a responsabilidade adicional que esta última linguagem exige.

John Sonmez conclui dizendo que aprender C++ ainda é útil para entender como os computadores funcionam de maneira geral. No entanto, alerta: "não acho que o C++ retorne com força tão cedo, e isso é ótimo". Em um comentário ao artigo, "Alo" acrescenta:

Além de ter começado minha carreira com C++, passei os primeiros quatro anos trabalhando exclusivamente com a linguagem. Foi uma experiência extremamente valiosa, porque, depois que se aprende C++ em um nível adequado, é possível aprender qualquer outra linguagem muito mais rápido, além de se ter um entendimento mais profundo de como um software funciona em baixo nível. E esse é um conhecimento muito mais difícil de adquirir quando se inicia a carreira com linguagens de alto nível; justamente por esse motivo, nunca aprovei a ideia de os programadores serem iniciados com Java.

Richard Dunks contra-argumenta:

Penso que C++ não seja indicado para uso no primeiro semestre em introdução à programação, nem para ensinar estruturas de dados, porque se gasta tanto tempo na implementação, que os alunos terminam perdendo de vista a estrutura que estão tentando reproduzir. Gosto de ter proficiência em C++, mas acredito que não vale o esforço de tornar C++uma linguagem genérica utilizável para fins educacionais.

Sobre reusabilidade, Stephen Cleary comenta:

Sou um especialista em C++ que se tornou desenvolvedor C# pouco anos atrás, devido às pressões do mercado de trabalho. Sou certamente mais produtivo com C#, mas é impossível obter o mesmo nível de reusabilidade de código possível usando templates do C++.

O exemplo clássico é a tríade contêineres, iteradores e algoritmos. Em C++, é possível criar um algoritmo que funciona em qualquer contêiner e que se ajusta automaticamente em tempo de compilação para tirar vantagem do acesso aleatório, se necessário. Tente fazer isso em C#. E aqui não estou falando do "novo C++"; já em 1998 o C++ permitia melhor reutilização de código do que o C# permite hoje.

A respeito de desempenho, Herb Sutter aconselha:

Em qualquer linguagem, se o desempenho for prioridade, muitas vezes será necessário fazer uso de arrays. Algumas linguagens facilitam bastante esse uso ao proporcionar maior flexibilidade em layouts e arrays. Já outras linguagens/ambientes dificultam esse uso, e isso leva o desenvolvedor a "desistir de" ou a "trabalhar contra" a tendência natural da linguagem, optando por estruturas de dados baseadas em nós para localizar ponteiros.

Além de vários outros comentários postados nos blogs de Herb Sutter e John Sonmez, há muitas discussões interessantes nos subgrupos "Programming" e "Coding" do Reddit a respeito dessa discussão.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião
Feedback geral
Bugs
Publicidade
Editorial
Marketing
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2016 C4Media Inc.
Política de privacidade
BT

We notice you’re using an ad blocker

We understand why you use ad blockers. However to keep InfoQ free we need your support. InfoQ will not provide your data to third parties without individual opt-in consent. We only work with advertisers relevant to our readers. Please consider whitelisting us.