Que tal cinco coisas que eu odeio nas listas "Coisas que eu odeio em algum idioma"? : D
5- Pintar um vermelho laranja não o torna uma maçã.
Quando uma linguagem é projetada, os designers geralmente têm em mente o que é útil. Usá-lo para algo completamente diferente pode funcionar, mas reclamar quando não é apenas burro. Veja o Python. Tenho certeza de que alguém tem ou alguém algum dia criará um utilitário para criar exe's a partir do código Python. Por que diabos você gostaria de fazer isso? Seria legal - não me interpretem mal - mas não adianta. Então pare de reclamar!
Um projeto bem projetado provavelmente conteria código de vários idiomas. Isso não quer dizer que você não pode concluir um projeto com apenas um idioma. Alguns projetos podem estar dentro das habilidades de qualquer idioma que você esteja usando.
4- Você está de pé com pernas de madeira?
A plataforma pode ser uma grande influência do que o idioma pode fazer. Hoje em dia, os coletores de lixo, ou até mesmo as tentativas iniciais de "coleta de lixo", podem ajudar na perda de memória (talvez mais memória RAM?). Os computadores são mais rápidos e, é claro, esperamos mais das nossas línguas. E, francamente, provavelmente deveríamos. No entanto, existe um preço enorme a pagar pela conveniência do compilador de criar tabelas de hash ou seqüências de caracteres ou uma variedade de outros conceitos. Essas coisas podem não ser herdadas da plataforma em que são usadas. Dizer que eles são fáceis de incluir em um idioma apenas me diz que você pode não ter uma perna para se apoiar.
3- Quem é realmente a culpa?
Insetos. Você sabe. Eu amo insetos. Por que eu amo insetos? Porque isso significa que eu consigo manter meu emprego. Sem bugs, haveria muitas pizzarias fechadas. No entanto, os usuários odeiam erros. Mas aqui está um pouco de água fria. Todo bug é culpa dos programadores. Não é o idioma. Uma linguagem com uma sintaxe tão rígida que reduziria significativamente quantos erros eram possíveis de gerar seria uma linguagem completamente inútil. Suas habilidades provavelmente poderiam ser contadas por um lado. Você quer flexibilidade ou poder? Você tem bugs. Por quê? Porque você não é perfeito e comete erros. Veja um exemplo realmente identificável em C:
int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;
Todos sabemos o que isso vai fazer. No entanto, o que talvez alguns de nós não percebemos é que essa funcionalidade pode ser muito benéfica. Dependendo do que você está fazendo. A saturação de buffer é o custo dessa funcionalidade. Esse código acima. Se eu realmente divulgasse isso ao público. É isso mesmo .. diga comigo .. "Minha culpa". Não C por me permitir fazê-lo.
2- Não devemos colocar isso na lixeira?
É muito fácil apontar para um recurso em um idioma que não entendemos porque não o usamos frequentemente e o chamamos de estúpido. Reclame que está lá etc. Goto sempre me diverte. As pessoas sempre se queixam de estar em um idioma. No entanto, aposto que seu último programa incluiu um tipo de goto. Se você já usou uma pausa ou uma continuação, usou um goto. É isso que é. É verdade que é um jogo "seguro", mas é o que é. Goto tem seus usos. Se gotos "implícitos", como continuar ou interromper, são usados ou gotos explícitos (usando a palavra-chave real "goto" para qualquer idioma). Não que os desenvolvedores de idiomas sejam impecáveis, mas normalmente ... se a funcionalidade existe desde o início dos tempos (para esse idioma). Provavelmente esse aspecto é uma qualidade definidora dessa linguagem. Significado .. é ' está sendo usado e provavelmente não está disponível por causa da compatibilidade com versões anteriores. Está sendo usado hoje. Como em 5 minutos atrás. E usado corretamente. Bem ... indiscutivelmente alguém está usando isso de forma inadequada também, mas isso está relacionado ao # 3 da minha lista.
1. - Tudo é um objeto.
Ok .. este é realmente um subconjunto de # 2. Mas essa é de longe a queixa mais irritante que vejo nas listas de ódio. Nem tudo é um objeto. Existem muitos conceitos que não pertencem ou precisam ser objetos. Colocar coisas onde elas não pertencem é apenas feio e pode diminuir a eficiência de um programa. Certo. Talvez não muito, dependendo do idioma. Isso também se refere ao # 5. Isso significa ... sim. Global estão ok. As funções, ao contrário dos métodos estáticos, estão ok. Combinar programação OO com funções globais está ok. Agora ... isso não significa que todos nós devemos sair e "liberar" nosso código de seus modelos de objetos também. Ao projetar uma seção de código ou um projeto inteiro, o que acontece nos bastidores deveser considerado ao montá-lo. Não apenas onde esse conceito vive e muitos outros fatores. Por que agrupar funções globais dentro de classes ou conceitos de namespace, se não serve para nada? Tome variáveis de membro estáticas. Isso me diverte muito porque ... bem ... Dependendo do idioma e da implementação, é claro, mas de um modo geral, você acabou de declarar global. Sim, existem alguns motivos para agrupar esses conceitos que não são de OO nos wrappers de OO. Um, claro, é o código de auto-documentação. Isso pode fazer sentido. Então .. como eu digo. Não saia e "liberte" seu código. Mas qualquer boa linguagem moderna terá um conceito global fora da modelagem OO. Sim, quero dizer especificamente que uma linguagem de programação OO sem um conceito global provavelmente tem uma falha séria no design. Mais uma vez .. depende da intenção e do design do idioma, então não estou tentando escolher um idioma específico e há muitos para analisar aqui. Seja qual for, considere onde o código deve residir e ser o mais eficaz. Adicionar um monte de reflexos a algo que não adiciona funcionalidade ou suporte apenas desgasta o teclado mais rapidamente. Não faz bem a ninguém. Bem ... a menos que você goste de brownie da pessoa que provavelmente lhe ensinou incorretamente que tudo é um objeto.
Em resumo, a programação não está apenas tocando no teclado sem pensar. Há muitas considerações de design em qualquer projeto. Eu sei que é clichê, mas você tem que olhar de todos os ângulos. Mesmo nos dias de hoje, idiomas com segurança de digitação. Você não apenas explica o código e espera que funcione bem. Claro ... isso pode funcionar, mas pode não ser o caminho certo a seguir. No geral, escolha o idioma e o formato mais adequado para o trabalho específico E o ambiente. Mas nenhuma linguagem tira o pensamento por trás dela. Se você não está pensando ... você está apenas digitando.