Znam Perla najlepiej, więc wybiorę to.
Perl próbował wielu pomysłów. Niektóre były dobre. Niektóre były złe. Niektóre były oryginalne i nie zostały powszechnie skopiowane z dobrego powodu.
Jednym z nich jest idea kontekstu - każde wywołanie funkcji odbywa się w kontekście listowym lub skalarnym i może robić zupełnie różne rzeczy w każdym kontekście. Jak wskazałem na http://use.perl.org/~btilly/journal/36756, komplikuje to każdy interfejs API i często prowadzi do subtelnych problemów projektowych w kodzie Perla.
Kolejnym jest pomysł tak kompletnego wiązania składni i typów danych. Doprowadziło to do wynalezienia wiązania, które pozwala maskować obiekty jako inne typy danych. (Możesz również osiągnąć ten sam efekt za pomocą przeciążenia, ale remis jest bardziej powszechnym podejściem w Perlu).
Innym częstym błędem popełnianym przez wiele języków jest rozpoczęcie od dynamicznego określania zakresu, a nie leksykalnego. Trudno później cofnąć tę decyzję projektową i prowadzi to do długotrwałych brodawek. Klasyczny opis tych brodawek w Perlu to http://perl.plover.com/FAQs/Namespaces.html . Zauważ, że zostało to napisane zanim Perl dodał our
zmienne i static
zmienne.
Ludzie słusznie nie zgadzają się na temat pisania statycznego i dynamicznego. Osobiście lubię dynamiczne pisanie. Jednak ważne jest, aby mieć wystarczającą strukturę, aby pozwolić na złapanie literówek. Perl 5 dobrze sobie z tym radzi ze ścisłością. Ale Perl 1-4 źle to zrozumiał. Kilka innych języków ma kontrolery kłaczków, które robią to samo co surowe. Dopóki jesteś dobry w egzekwowaniu sprawdzania kłaczków, jest to dopuszczalne.
Jeśli szukasz więcej złych pomysłów (wiele z nich), naucz się PHP i przestudiuj jego historię. Moim ulubionym błędem z przeszłości (dawno temu naprawionym, ponieważ prowadził do tylu dziur w zabezpieczeniach) było domyślne, pozwalające każdemu ustawić dowolną zmienną poprzez przekazanie parametrów formularza. Ale to nie jest jedyny błąd.