Björn Straustrup: Problema com a programação

imagem

Artigo de 2006.

Björn Straustrup, inventor da linguagem de programação C ++, protege seu legado e diz o que há de errado com a maior parte do código do programa.

Nas décadas de 80 e 90, Björn Straustrup desenvolveu e implementou a linguagem de programação C ++, que popularizou a programação orientada a objetos e influenciou muitas outras linguagens de programação, incluindo Java.

O C ++ permanece uma linguagem de computador arquetípica de "alto nível" (ou seja, uma linguagem que preserva os recursos de uma linguagem humana natural) e ainda é usada por milhões de programadores. Muitos dos sistemas e aplicativos da era do PC e da Internet foram escritos em C ++. Apesar disso, a linguagem permanece controversa, principalmente porque é conhecido por ser difícil de aprender e usar, e também porque o design Straustrup permite que os desenvolvedores cometam graves erros de programação, a fim de preservar sua liberdade.

Straustrup, que trabalha na AT&T Bell Labs há muitos anos, agora é professor de ciência da computação no Departamento de Engenharia da Texas A&M University, perto de Houston.

Revisão de tecnologia: por que tanto software é tão ruim?

Björn Straustrup: Alguns programas são realmente muito bons para todos os padrões. Pense em Mars Rovers, Google e no Projeto Genoma Humano. Este é um software de qualidade! Quinze anos atrás, a maioria das pessoas, e em particular a maioria dos especialistas, diria que cada um desses exemplos é impossível. Nossa civilização tecnológica depende do software; portanto, se o software fosse realmente tão ruim quanto sua pior reputação, a maioria de nós já estaria morta.

Por outro lado, olhar trechos de código “típicos” pode me fazer chorar. A estrutura é aterrorizante, e os programadores claramente não pensaram em correção, algoritmos, estruturas de dados ou manutenção. A maioria das pessoas não lê o código; eles apenas veem o Internet Explorer mais lento.

Penso que o verdadeiro problema é que "nós" (ou seja, desenvolvedores de software) estamos em constante estado de emergência, agarrados a um canudo para fazer nosso trabalho. Realizamos muitos pequenos milagres por tentativa e erro, uso excessivo de força bruta e muitas tentativas, mas muitas vezes isso não é suficiente.

Os desenvolvedores de software tornaram-se mestres na arte complexa de criar sistemas suficientemente confiáveis ​​a partir de peças não confiáveis. O problema é que muitas vezes não sabemos exatamente como o fizemos: o sistema simplesmente "se transformou" em algo minimamente aceitável. Pessoalmente, prefiro saber quando o sistema funcionará e por que o fará.

Revisão de tecnologia: como podemos corrigir a bagunça em que estamos?

Björn Straustrup: Teoricamente, a resposta é simples: educar melhor nossos desenvolvedores de software, usar métodos de design mais adequados e usar design flexível, pensando a longo prazo. Recompense sistemas corretos, confiáveis ​​e seguros. Punir por negligência.

Isso é realmente impossível. As pessoas recompensam os desenvolvedores cujo software é barato, bugs e lançado pela primeira vez. Isso ocorre porque as pessoas precisam de novos gadgets. Eles não precisam de nenhum inconveniente, não querem aprender novas maneiras de interagir com seus computadores, não querem atrasos na entrega e não querem pagar pela qualidade (a menos que isso seja óbvio, mas com mais frequência do que nunca). E sem mudanças reais no comportamento do usuário, é improvável que os fornecedores de software mudem.

Não podemos parar o mundo por uma década enquanto reprogramamos tudo, de nossas máquinas de café a nossos sistemas financeiros. Por outro lado, continuar operando aleatoriamente é caro, perigoso e deprimente. São necessárias melhorias significativas e elas podem aparecer apenas gradualmente. Eles devem chegar a uma ampla frente; apenas uma mudança não é suficiente.

Um dos problemas é que as “chaminés acadêmicas” interferem: muitas pessoas estão promovendo uma área como uma panacéia. Métodos de design mais eficientes podem ajudar, melhores métodos de especificação podem ajudar, melhores linguagens de programação podem ajudar, melhores tecnologias de teste podem ajudar, melhor infraestrutura de nível intermediário, melhor entendimento das áreas de aplicação podem ajudar, melhor entendimento das estruturas e algoritmos de dados ajuda - e assim por diante. Por exemplo, a teoria dos tipos, o desenvolvimento de modelos e os métodos formais podem, sem dúvida, fornecer assistência significativa em algumas áreas, mas estão sendo promovidos apenas como uma solução para excluir outras abordagens, cada uma das quais garante a rejeição de projetos de grande escala. As pessoas promovem o que sabem e o que viram; de que outra forma? Mas apenas algumas pessoas têm maturidade técnica para equilibrar requisitos e recursos.

Visão geral da tecnologia: A idéia por trás do C ++ era que os programadores trabalhariam mais ativamente em troca de código mais eficiente. O Bell Labs queria usar uma linguagem que algumas pessoas realmente inteligentes usassem para escrever código que funcionasse em computadores como o Electronic Switching Systems (ESS) que não eram muito rápidos. Hoje existem muitos computadores rápidos e muitos desenvolvedores de software. Isso significa que nega toda a essência do C ++?

Björn Straustrup: O C ++ não foi projetado especificamente para grandes dispositivos de comutação, foi desenvolvido para uma grande variedade de aplicações. O Bell Labs abrigava uma incrível variedade de projetos interessantes, abrangendo todas as escalas e usando quase todos os tipos de computadores e sistemas operacionais. Mas sim, o programador médio do Bell Labs era significativamente mais capaz do que a maioria das pessoas pensa em um “programador médio”, e a confiabilidade e o desempenho (nessa ordem) eram considerados significativamente mais importantes do que na maioria dos outros lugares.

O desempenho ainda é um problema em muitos aplicativos que me interessam: capacidade de resposta das interfaces, tempos de inicialização e desligamento dos aplicativos. Os desenvolvedores de software neutralizam o incrível desempenho do hardware de computador moderno, adicionando abstrações redundantes (software) camada por camada. Parece que estamos diante das limitações da aceleração linear para hardware, mas em muitos casos, podemos ganhar algumas ordens de magnitude em software.

No entanto, o C ++ realmente se tornou muito “amigável para especialistas”, enquanto o nível de educação formal eficaz do desenvolvedor de software médio diminuiu. No entanto, a solução não é simplificar as linguagens de programação ao ponto do absurdo, mas usar diferentes linguagens de programação e treinar mais especialistas. Esses especialistas precisam usar algumas linguagens, e o C ++ é uma dessas linguagens.

Revisão tecnológica: Em retrospecto, ao projetar C ++, sua decisão de trocar a eficiência do software, sua segurança e confiabilidade pelo desempenho do código em tempo de execução, foi um erro fundamental?


Björn Straustrup: Bem, acho que não fiz essa troca. Eu quero um código elegante e eficiente. Às vezes eu entendo. Essas dicotomias (entre eficiência e correção, eficiência e tempo de um programador, eficiência comparada a um nível alto etc.) são fictícias.

O que realmente fiz foi desenvolver C ++, principalmente como uma linguagem de programação de sistema: queria poder escrever drivers de dispositivo, sistemas embarcados e outro código que precisei usar diretamente. Então, eu queria que o C ++ fosse uma boa linguagem para o desenvolvimento de ferramentas. Isso exigia flexibilidade e desempenho, além da capacidade de expressar interfaces elegantes. Minha opinião era que, para criar um nível superior, para criar aplicativos completos, primeiro você precisava comprar, construir ou emprestar bibliotecas que fornecem as abstrações adequadas. Frequentemente, quando as pessoas têm problemas com o C ++, o verdadeiro problema é que elas não possuem as bibliotecas apropriadas ou não conseguem encontrar as bibliotecas disponíveis.

Outros idiomas tentaram dar suporte mais diretamente a aplicativos de alto nível.

Isso funciona, mas muitas vezes esse suporte tem um custo de especialização. Pessoalmente, eu não desenvolveria uma ferramenta que pudesse fazer apenas o que eu queria - eu luto pela comunidade.

Revisão de tecnologia: Como você explica o fato de que o C ++ é amplamente criticado por muitos programadores, mas ao mesmo tempo muito utilizado? Por que esse idioma é tão bem-sucedido?

Björn Straustrup: A resposta é simples: existem apenas dois tipos de idiomas: aqueles sobre os quais todos reclamam e aqueles que ninguém usa.

Existem sistemas mais úteis projetados em idiomas considerados terríveis do que os elogiados por serem bonitos - e muito mais. O objetivo de uma linguagem de programação é ajudar a criar bons sistemas onde "bom" pode ser definido de várias maneiras. Minha definição curta é: algo está certo, suportado e rápido o suficiente. A estética importa, mas antes de tudo, a linguagem deve ser útil; deve permitir que os programadores deste mundo expressem idéias realistas de forma concisa e barata.

A principal razão do sucesso do C ++ é que ele atende aos objetivos limitados do projeto: ele pode expressar com eficiência uma enorme variedade de idéias diretamente.
O C ++ não tinha a intenção de fazer apenas uma coisa muito bem ou impedir as pessoas de fazerem coisas consideradas "ruins". Em vez disso, concentrei-me na generalidade e no desempenho.

Estou certo de que, para todo programador que não gosta de C ++, há alguém que gosta dessa linguagem. No entanto, meu amigo foi à conferência, onde o palestrante pediu à platéia que demonstrasse levantando as mãos: a primeira, quantas pessoas não gostaram de C ++ e a segunda, quantas pessoas escreveram o programa em C ++. O primeiro grupo tinha o dobro de pessoas que o segundo. Uma expressão de hostilidade em relação a algo que você não conhece é geralmente chamada de preconceito. Além disso, aqueles que reclamam são sempre mais altos e mais confiantes do que os apoiadores - pessoas razoáveis ​​reconhecem as falhas. Eu acho que sei mais sobre problemas com C ++ do que sobre qualquer pessoa, mas também sei como evitá-los e como usar os pontos fortes dessa linguagem.

E, é claro, você não espera que os proponentes de idiomas que perderam a concorrência com o C ++ sejam educados com esse fato. O desenvolvimento de software não tem esse grau de profissionalismo, embora eu espere que isso acabe acontecendo. Nesse aspecto, a ciência é diferente: quando uma nova ferramenta, técnica ou teoria vence, as pessoas a veem como progresso. No software, as contribuições de concorrentes e antecessores não receberam amplo reconhecimento, apreciação ou mesmo entendimento.

Revisão da tecnologia: Em "Design e evolução do C ++", você argumenta que Kierkegaard influenciou seu conceito de linguagem. Isso é uma piada?

Björn Straustrup: Talvez uma afirmação um pouco pretensiosa, mas não uma piada. Muitos pensamentos sobre desenvolvimento de software estão focados em um grupo, equipe, empresa. Isso geralmente é feito a tal ponto que uma pessoa está completamente imersa na “cultura” corporativa, sem sair para talentos e habilidades únicas. A prática corporativa pode ser hostil a pessoas com habilidades excepcionais e iniciativa técnica. Acho esse gerenciamento técnico cruel e inútil. Kierkegaard era um forte defensor do indivíduo contra a “multidão” e levantou seriamente a questão da importância da estética e do comportamento ético. Não pude apontar uma característica específica da linguagem e dizer: "Veja, existe a influência de um filósofo do século XIX", mas é uma das raízes da minha relutância em eliminar o "nível de especialista", abolir o "abuso" e limitar a capacidade de suportar apenas os aplicativos que como eu sei que eles serão úteis. No entanto, não gosto particularmente da filosofia religiosa de Kierkegaard.

Revisão de tecnologia: Do que você mais se arrepende?

Björn Straustrup: Não me arrependo! Bem, é claro, eu sonho com o que poderia fazer de maneira diferente e melhor, mas, falando sério, quem sou eu para redescobrir, digamos, a safra de 1984 de Björn? Ele pode ter sido menos experiente que eu, mas não era menos inteligente, provavelmente mais inteligente, e entendeu as palavras de 1984 melhor do que eu. O C ++ é usado para criar muitos sistemas que melhoram nossas vidas, e isso teve um impacto positivo significativo em idiomas e sistemas posteriores. Isso é algo para se orgulhar.

Source: https://habr.com/ru/post/pt412881/


All Articles