Którą bibliotekę / platformę porzuciłeś jako zbyt skomplikowaną do rozwiązania problemu? [Zamknięte]

12

... i zakodowałem funkcjonalność „ręcznie”?

Jako raczej metaforyczny przykład, nie potrzebujesz biblioteki do rozwiązywania równań kwadratowych, chociaż takie biblioteki istnieją i ktoś bierze je na poważnie.

Jako bardziej wątpliwy przypadek, w zależności od okoliczności, mogę porzucić jQuery (na przykład, gdy nie muszę obsługiwać niektórych przeglądarek z epoki kamienia): upraszcza niektóre rzeczy, ale dodaje kolejną warstwę złożoności i zawodności do DOM. A nadużywanie jQuery prowadzi do absurdalnych problemów, takich jak ten ostatnio widziany w SO: jak przypisać pusty href do atagu za pomocą jQuery? Okazało się, że było to pytanie HTML, nawet JavaScript.

Kolejnym absurdalnym przypadkiem, ale dla wielu nieoczywistym, jest użycie silnika / języka szablonów zbudowanego na innym systemie szablonów: PHP. Trzeci poziom szablonowania kogoś?

I jeszcze jeden: czasami po prostu wyplucie XML za pomocą (graficznie) printfjest znacznie łatwiejsze niż zrobienie tego z jakimś potwornym silnikiem XML.

Jakieś inne przypadki z twojego doświadczenia?

mojuba
źródło
4
Jak każde inne narzędzie, używasz jQuery tam, gdzie jest to właściwe. Jeśli masz klucz, nie używasz młotka i dłuta do otwierania drzwi wejściowych.
Robert Harvey
1
@Robert Harvey: oczywiście, ale w inżynierii oprogramowania często mamy problemy z rozpoznaniem kluczy i młotków. O tym jest post.
mojuba,
Pamiętaj, że bez względu na to, jak złożona jest popularna biblioteka, jest ona łatwiejsza do zrozumienia dla innych niż niestandardowa „prosta” biblioteka, ponieważ są do niej przyzwyczajeni.
Louis Kottmann
@RobertHarvey Twoje drzwi muszą być w znacznie lepszym stanie niż moje.
Jimmy Hoffa

Odpowiedzi:

14

Wiele bibliotek MS Enterprise i większość kontrolek zewnętrznych dla .net pozostawiło to uczucie po pewnym użyciu.

Twój przebieg może się różnić

Rachunek
źródło
2
Zgoda - większość bibliotek Enterprise jest myląca lub nieintuicyjna, z paradą bibliotek stron trzecich, które lepiej sobie radzą. Ale oczywiście, jeśli uderzysz Microsoft w tytuł, musi to być „najlepsza praktyka”
Watson
we wczesnych dniach entlib robił pewne rzeczy, które były trochę trudne do zrobienia lub wymyślenia we wczesnych ramach ... w dzisiejszych czasach wydaje się, że w większości jest to wsteczna kompatybilność z wczesnymi dniami lub częściowo upieczone rozwiązania, które można zobaczyć w przyszłych wydaniach w wielu lepsza forma.
Bill
13

Windows Communication Foundation

Fakt, że ma na stronie głównej zdjęcie szwajcarskiego noża wojskowego, podsumowuje to dla mnie. Wyobraź sobie, że konfiguracja XML jest około cztery razy dłuższa niż rzeczywisty kod, który piszesz, i nadal bardzo trudno jest pisać usługi SOAP, które są interoperacyjne między C #, Java, PHP, Python i wszystkimi innymi językami, które „miały” być kompatybilny z ...

We wszystkich przyszłych projektach zamierzam pozostać przy REST.

Dean Harding
źródło
2
WCF 4.0 w ogóle nie wymaga pliku konfiguracyjnego XML. Nie mam żadnego doświadczenia z interoperacyjnością z innymi technologiami (oprócz używania WCF jako klienta, co działa dobrze), ale mogę powiedzieć, że uznałem to za łatwe i intuicyjne. Mimo że zacząłem go używać bez czytania książek lub szkolenia (z terminami do spełnienia), mogłem rzucić się na ziemię.
Allon Guralnek
4
Zmieniłem nazwę „WCF” na „WTF”.
MetalMikester
1
@Allon: Przyznaję, że nie próbowałem WCF 4.0, jest całkiem możliwe, że dokonali znacznych ulepszeń w tej dziedzinie ...
Dean Harding
12

Jednym z problemów, z którymi się spotkałem, gdy ludzie „toczą swoje”, jest to, że - chociaż ich podejście jest często szybsze i prostsze - jest również bardziej kruche, zawiera błędy, jest niekompletne i / lub zawiera wady bezpieczeństwa .

Prosty przykład: może być 10 razy łatwiej użyć printf do emisji XML niż z biblioteki:

printf("<xml>%s</xml>", str);

ale czy pamiętasz ucieczkę od znaków specjalnych str? Na przykład „ <” i „ &”? Niektórzy ludzie mogą powiedzieć „nie, nie wiedziałem” i kontynuować pisanie:

printf("<xml><![CDATA[%s]]></xml>", str);

Ale nadal będzie emitować uszkodzony plik XML, jeśli będzie strzawierał podciąg „ ]]>” w dowolnym miejscu. Obudowa Edge - na pewno. Ale wciąż aktualny scenariusz, który może prowadzić do nieoczekiwanych problemów o poważnych konsekwencjach.

Istnieje wiele razy i miejsc, w których „kręcenie własnym” może być odpowiednie, ale czasami potrzeba dużo doświadczenia i wiedzy, aby określić, kiedy jest to właściwe. Dlatego często zachęcam programistów, by woleli używać ustalonych bibliotek (jeśli są dostępne) zamiast samodzielnie wdrażanych procedur.

Mike Clark
źródło
11

Log4Net

Biblioteka jest dobra, ale dokumentacja jest przerażająca. To była przesada w stosunku do tego, co chciałem zrobić.

Zamiast tego użyłem Trace .

Robert Harvey
źródło
1
Robert, ty też mnie pokonałeś, łajdaku! Patrzę tylko na log4net i myślę „wow, ci słuchacze są fajni. Teraz jak z niego korzystać…?” a potem myślę, że zanim się zorientuję, mógłbym napisać własny.
JohnL,
5
Naprawdę - musiałbym z szacunkiem się z tym nie zgodzić - nie ma nic prostszego niż log.error ().
Watson,
3
@Watson: Jeśli to naprawdę takie proste, dlaczego potrzebujesz ramy?
Robert Harvey,
Korzystam z alternatywy The Object Guy, której konfiguracja zajmuje kilka minut, ponieważ zniechęca ją niepotrzebna złożoność Log4Net.
cjmUK
7

SharePoint

Nie zrozum mnie źle, SharePoint jest niesamowity, jeśli potrzebujesz większości rzeczy, które jest z nim (i ma wiele!), Ale jeśli nie wiesz, co robisz lub potrzebujesz go tylko dla jednego lub dwóch rzeczy, to MASYWNIE nie warte wysiłku i konfiguracji.

Ryan Hayes
źródło
6

ASP.NET WebForms - Chociaż jako programista .NET od dłuższego czasu byłem moim chlebem powszednim, odkąd zacząłem używać frameworka MVC (i pochodzę ze środowiska szablonów PHP / Smarty) - zdajesz sobie sprawę, że czasem są po prostu lepsze sposoby tworzenia stron internetowych, a wykorzystywana przez nich abstrakcja jest nadmierna i nieszczelna .

Watson
źródło
Myślę, że masz na myśli formaty WWW ASP.NET, w odróżnieniu od ASP.NET MVC. Poprawny?
Eric King,
@Eric - tak, powinienem to naprawić!
Watson,
3

W prawie każdym przypadku, gdy to zrobiłem, żałowałem:

  • Korzystanie z funkcji PHP oci_ * zamiast biblioteki opakowań okazało się złym posunięciem ze względu na łatwość konserwacji kodu. Przeniesienie całego kodu do Zend_Db znacznie ułatwiło tworzenie kodu bazy danych.
  • Przetaczanie własnego komponentu siatki ajax, który wymagał zbyt wiele czasu, aby rozwinąć się dalej, biorąc pod uwagę, jak szybko ewoluują niektóre inne komponenty siatki. Obecnie przenoszę to wszystko na siatki Ext JS, ponieważ dzięki nim dostępna jest ogromna masa funkcji innych firm.
  • Unikanie bibliotek takich jak prototyp i jquery prowadziło do powtarzających się problemów z przeglądarkami, często trudnych do wyśledzenia. Port Ext JS rozwiązał moje problemy z przeglądarkami. To magia, nawet jeśli jest to rozległa struktura, której zrozumienie zajęło mi tygodnie.

Doszedłem do wniosku, że o wiele lepiej jest wybrać kilka niezawodnych platform zewnętrznych i wykorzystać je jako podstawę wszystkiego, co robisz. Te frameworki są opracowywane i debugowane przez kogoś innego, co jest niesamowitą oszczędnością czasu, gdy znormalizujesz je i dobrze je zrozumiesz.

Joeri Sebrechts
źródło
+1. I to pomaga, jeśli te biblioteki są open source. Śmiało i pobierz kod źródłowy do wszystkich bibliotek, których używasz, jeśli jeszcze tego nie zrobiłeś. Czytanie kodu źródłowego biblioteki to świetny sposób na diagnozowanie i naprawianie problemów, a także okazja do uczenia się od kodu (prawdopodobnie dość wysokiej jakości) innych programistów.
Mike Clark,
2

System.Text.RegularExpressions

Regex jest tak skomplikowany i tak powolny. Bardzo rzadko używam Regex i zwykle piszę własne parsowanie i dopasowanie tekstu.

Czasami uznaję Regex za przydatne do naprawdę skomplikowanego dopasowywania.

Chris Persichetti
źródło
Czy poprawnie kompilujesz wyrażenie regularne [czy może System.Text.RegularExpressions jest wolniejszy niż Perl & co. realizacja]?
Maciej Piechotka,
3
Regex może być stosunkowo powolny w porównaniu do ręcznego parsowania łańcuchów, ale jest szybszy niż myśli wielu ludzi i zwykle jest wystarczająco szybki dla większości praktycznych zastosowań.
Mike Clark,
2
Nie sądzę, że jest to w rzeczywistości skarga w szczególności na implementację .NET, ponieważ nie ma w tym nic szczególnie skomplikowanego lub powolnego (w rzeczywistości uważam, że jest to jedna z najszybszych dostępnych implementacji). Przynajmniej takie było moje doświadczenie. Oczywiście ogólnie wyrażenia regularne łatwo stają się złożone, a ludzie z pewnością mają tendencję do używania ich w całkowicie nieodpowiednich miejscach.
Dean Harding,
2

Nie to, że Delphi4PHP potrzebuje jakiejkolwiek złej prasy, ale spróbowałem (wersja 2.0) i bardzo trudno było nagiąć to do mojej woli. Chciałem go użyć do stworzenia aplikacji internetowej w stylu youtube dla klientów do oglądania filmów szkoleniowych, ale było to zbyt uciążliwe, a kiedy próbowałem połączyć frameworki PHP (VCL4PHP, Zend, Smarty i Recess), wpadłem na nieuniknioną, muszę zmienić nazwę wszystko, ponieważ w PHP 5 nie ma przestrzeni nazw.

To powiedziawszy, w końcu nie wyrzuciłem własnego. Skorzystałem właśnie z moich błędów i postanowiłem, że będę bardzo prosty i użyję CodeIgniter i FlowPlayer (z JQuery).

Mam tęsknotę za tym, że niezależnie od frameworków, które pozwalają przetrwać w PHP 5, PHP 6 będzie miało niesamowite frameworki, które mogą być naprawdę fajne.

Peter Turner
źródło
2

Weka

Dużo pracuję nad uczeniem maszynowym i jeśli kiedykolwiek potrzebuję czegoś prostego, takiego jak Naive Bayes lub regresja logistyczna, uwielbiam porzucać Wekę. Ma dobre implementacje niektórych dość skomplikowanych algorytmów uczenia maszynowego, ale API jest chrupiącym, nadmiernie inżynieryjnym, nadmiernie obiektowym, oldschoolowym (wcześniej generycznym) API Java. Rzeczy, które mnie denerwują:

  1. Toczy własną tablicę rozmiarów, której nie używa nic innego, gwarantując konwersję pracy do przodu i do tyłu.

  2. Dużo sekwencyjnego sprzęgania, w którym metody muszą być wywoływane w określonej kolejności i chyba, że ​​naprawdę RTFM ostrożnie, nie zdasz sobie z tego sprawy.

  3. Każda instancja musi być obiektem instancji i muszę jawnie zadeklarować za pomocą obiektu Attribute, czy jest to wartość nominalna czy liczbowa. Prowadzi to do dużej ilości pracy związanej z konwersją danych do żądanej przez Weka formy. Jest to szczególnie denerwujące, ponieważ Weka API rzuca tak wiele wyjątków, że kompilacja kodu nie oznacza, że ​​prawdopodobnie i tak będzie działać. Gdybym projektował interfejs API, byłbym liberalny w tym, co zaakceptowałem (może po prostu wziąć tablicę Object) i po prostu introspekcji danych, aby dowiedzieć się, co mam i co należy z tym zrobić.

dsimcha
źródło
2

W przypadku konkretnego projektu porzuciłem EJB3. Dało mi to wstrzykiwanie zależności i obsługę transakcji zarządzanych przez kontener. Ale wprowadza ogromne zależności (np. JBoss) i utrudnia systemowi pisanie automatycznych testów. Teraz zredukowałem to do wstrzykiwania zależności konstruktora JPA +.

Conor
źródło
1

Wyrzucanie HTML na port debugowania w aplikacji. Potrzebowałem prostego sposobu na uzyskanie aktualnych danych (z automatycznym odświeżaniem). Pobranie biblioteki do sformatowania byłoby dobrze, ale łatwiej było po prostu ją wydrukować.

Odrzuciłem także bibliotekę na inną: w większości naszych rzeczy używamy dużej, złożonej biblioteki XML. Po spędzeniu 4 godzin jednego dnia na próbach uruchomienia go w nowej aplikacji, właśnie powiedziałem „zapakuj to” i włączyłem TinyXML. Nie jest tak potężny, ale zajmuje dużo mniej wysiłku, aby robić proste rzeczy.

Michael Kohne
źródło
1

Ostatnio pracuję nad kompilatorem języka skryptowego, którego mogę używać w swoich aplikacjach. Używałem innych, ale nikt nie robi dokładnie tego, czego potrzebuję. Pomyślałem więc, dlaczego nie spróbować napisać własny? Może upłynąć rok lub dwa, zanim będzie naprawdę odpowiedni do ogólnego użytku, ale to w porządku. Dodatkowo jest to świetne doświadczenie edukacyjne.

Innym rozwiązaniem typu „roll my own” są elementy używane do tłumaczenia moich aplikacji. Istnieją biblioteki, ale nie podobała mi się żadna z nich. Więc zrobiłem własny.

I komponenty bazy danych Delphi. Nienawidzę ich. Zawsze ma. Stworzyłem więc własny interfejs bazy danych, który działa tak, jak chcę, aby działał (i dokładnie tak, jak ten, który stworzyłem dla PHP, ułatwiając pisanie w różnych językach).

Zasadniczo, gdy dostaje się opcję, zazwyczaj tworzę własną bibliotekę.

Grandmaster B.
źródło
Wiem co masz na myśli. Mogę pokazać cały arsenał domowej roboty STL, abstrakcji DB, całych języków z ich kompilatorami lub tłumaczami, a co nie. Na ogół nie jest to mile widziane przez twoich kolegów i kierownictwo, ale jaki programista, który nigdy nie napisał kompilatora, nawet jeśli nikogo to nie obchodziło?
mojuba,
0

Och, tak wielu. Pracowałem nad kilkoma zwinnymi projektami, wykorzystując API typu open source. Świetnie, gdy działają, ale często cierpieliśmy programistów z fetyszem za wnoszenie wszelkiego rodzaju api firm trzecich, niektóre niejasne, niektóre nie, tylko dlatego, że chcą w nich użyć jednej lub dwóch klas. Efektem końcowym jest miszmasz kodu i zhakowanie systemów razem. Oddają go, twierdząc, że jest to najlepszy kod na świecie, opuszczają go, a słabe osoby, które go podnoszą, znajdują niezrozumiały, nieudokumentowany bałagan pełen problemów z zależnościami i włamań.

drekka
źródło