Eu conheço Perl melhor, então vou escolher.
Perl tentou muitas idéias. Alguns eram bons. Alguns eram ruins. Alguns eram originais e não eram amplamente copiados por um bom motivo.
Uma é a idéia de contexto - toda chamada de função ocorre em lista ou contexto escalar e pode fazer coisas totalmente diferentes em cada contexto. Como apontei em http://use.perl.org/~btilly/journal/36756, isso complica todas as APIs e freqüentemente leva a problemas sutis de design no código Perl.
O próximo é a ideia de vincular completamente a sintaxe e os tipos de dados. Isso levou à invenção do empate para permitir que objetos se disfarçam como outros tipos de dados. (Você também pode obter o mesmo efeito usando sobrecarga, mas o empate é a abordagem mais comum no Perl.)
Outro erro comum, cometido por muitos idiomas, é começar oferecendo escopo dinâmico em vez de lexical. É difícil reverter essa decisão de projeto posteriormente e leva a verrugas duradouras. A descrição clássica dessas verrugas no Perl é http://perl.plover.com/FAQs/Namespaces.html . Observe que isso foi escrito antes do Perl adicionar our
variáveis e static
variáveis.
As pessoas discordam legitimamente sobre digitação estática e dinâmica. Eu pessoalmente gosto de digitação dinâmica. No entanto, é importante ter estrutura suficiente para permitir que erros de digitação sejam detectados. O Perl 5 faz um bom trabalho com rigor. Mas Perl 1-4 entendeu errado. Vários outros idiomas têm verificadores de fiapos que fazem a mesma coisa que estritos. Desde que você seja bom em impor a verificação de cotão, isso é aceitável.
Se você estiver procurando por mais idéias ruins (muitas delas), aprenda PHP e estude sua história. Meu erro favorito do passado (corrigido há muito tempo porque causava tantas falhas de segurança) era o padrão para permitir que qualquer pessoa definisse qualquer variável passando parâmetros de formulário. Mas isso está longe de ser o único erro.