Ogólnie rzecz biorąc, gram w programowaniu od około 8 lat i wydaje mi się, że coraz bardziej polegam na bibliotekach i fragmentach oprogramowania typu open source (cholera, GitHub!), Aby „wykonać zadanie”. Wiem, że z czasem mogłem napisać własną implementację, ale lubię skupiać się na ogólnym projekcie.
Czy to normalne (środowisko inne niż korporacyjne)? Co może pójść nie tak, jeśli moje „programowanie” to nic innego jak sklejenie różnych bibliotek razem?
Wiem o „nie wymyślaj na nowo koła”, ale co się stanie, gdy nie wymyślisz już jednego koła?
programming-practices
libraries
code-reuse
Henrik P. Hessel
źródło
źródło
Odpowiedzi:
Używanie bibliotek zamiast odkrywania koła: Świetnie! Tak wszyscy powinni to robić. Nie zarabiasz za to, co już zrobiono.
Korzystanie z urywków: tak długo, jak rozumiesz, co kopiujesz-wklejasz, i dopóki inwestujesz czas, aby wszystko było spójne (zamiast mozaiki różnych stylów i podejść), nie ma w tym nic złego.
źródło
źródło
Good artists copy, Great artists steal
.Kodowanie jest w rzeczywistości najniższym poziomem programowania. Im wyższy poziom abstrakcji, tym lepszy programista. Wybór odpowiednich bibliotek (niekoniecznie otwartych), odpowiednie połączenie ich razem i utrzymanie konstrukcji jest znacznie trudniejszy, ale bardziej wydajny i oszczędny czasowo i kosztowo, niż pisanie wszystkiego samemu.
źródło
Uwielbiam pisać własne biblioteki. Uwielbiam też, aby moje projekty były wykonywane na czas. Myślę, że z biegiem czasu większość dobrych programistów tworzy zbiór przydatnych i nadających się do ponownego użycia bitów. Nie wiem o tobie, ale czuję się świetnie za każdym razem, gdy korzystam z biblioteki, którą napisałem pięć lat temu.
Nie ma absolutnie nic złego w używaniu kodu biblioteki, który został przetestowany i pokochany z czasem. Wiesz, jak to działa, możesz liczyć na jego złożoność i możesz go szybko wdrożyć.
Biorąc to pod uwagę, zakładam, że rozumiesz kod w bibliotece. Zakładam, że przy wystarczającym czasie możesz wdrożyć coś podobnej jakości.
Znam naprawdę dobrych programistów C, którzy mogliby wdrożyć standardową bibliotekę C, kilka z nich po prostu jako ćwiczenie do nauki / wyostrzania. Jedną z największych radości, jakie miałem podczas hobby, była biblioteka C w HelenOS.
Nie ma więc nic złego w korzystaniu z kodu bibliotecznego, o ile nadal jesteś ciekawy i uczysz się. Jest rzeczą oczywistą, że należy nie używać kodu, który nie rozumie, chyba że korzystanie z niej jest wysiłek, aby zrozumieć jak to działa.
źródło
W tym pytaniu wybiorę jedną lepszą niż niektóre inne: nawet nie sądzę, że twórca biblioteki „klienta” musi „rozumieć” kod w tej bibliotece.
Jestem (w porównaniu do niektórych) stosunkowo nowym programistą iPhone'ów. Istnieje DUŻO bibliotek, z których korzystam na co dzień, których nigdy nie byłbym w stanie wygenerować samodzielnie, a których kod jest ponad moją głową. Nie ma znaczenia w najmniejszym stopniu DOSTARCZONY:
1) W pełni rozumiem interfejs tych bibliotek (jestem ninja ASIHTTP!)
2) Wybieram biblioteki, które są ogólnie szeroko stosowane, więc mogę być pewny, że zostały dobrze omówione i zbadane pod kątem problemów (np ASIHTTP, JSON biblioteka Stig Brautaset, w Facebooka obj-c biblioteki, etc.)
3) w przypadku braku nr 2, to proste wystarczy, że mogła odebrać moją drogę przez niego i znaleźć / fix / customize niczego, co wymaga znalezienia / mocujący / dostosowywanie .
Założę się, że # 2 będzie sporną częścią tego. Faktem jest, że polegam na społeczności open source, społeczności programistów, która jest z pewnością bardziej doświadczona i prawdopodobnie mądrzejsza ode mnie. Ale o to chodzi w open source. A więc proszę bardzo.
źródło
Chciałbym wrzucić ostrzeżenie za korzystanie z bibliotek. Jako częsty użytkownik bibliotek naukowych w Perl i R (i niektórych w Javie) często musiałem włamać się do biblioteki, aby uniknąć ohydnych kosztów ogólnych. Korzystanie z bibliotek jest świetne, ale coraz więcej bibliotek jest zależnych od innych bibliotek, które wywołują trzecią bibliotekę, która korzysta ze standardowej biblioteki do wykonywania dość powszechnego zadania. I każdy etap procesu wymaga pewnej kontroli danych wejściowych i wyjściowych. Sporo z tych kontroli jest całkowicie zbędnych, ale mimo to obciążają one aplikację. A po zastosowaniu w pętli może zacząć ważyć dość mocno.
Poza tym nie możesz mieć pewności, że biblioteki zawsze zachowują zgodność wsteczną lub nie zawierają błędów. W rzeczywistości wszystkie biblioteki zawierają kilka błędów, taka jest natura kodu. Dlatego im bardziej jesteś zależny od bibliotek, tym więcej potencjalnych błędów możesz wprowadzić w swoim kodzie. I te błędy, których nie możesz rozwiązać tak łatwo bez włamania się do bibliotek.
Korzystanie z bibliotek to bardzo mądra decyzja, ale tylko wtedy , gdy znasz biblioteki i ich zachowanie.
Wiem, myślenie, że boli, a komputery są tanie, ale nadal. Brak myślenia może zaszkodzić bardziej.
źródło
Zwykle kopiowanie dużych ilości kodu źródłowego jest słabą praktyką. Jeśli kod został opracowany dla innej aplikacji w Twojej firmie, powinieneś ponownie użyć kodu, rozpakując go do biblioteki, z której będą mogły korzystać obie aplikacje. Nie powinieneś kopiować kodu. Skopiowanie kodu zmusi cię do zachowania dwóch kopii zamiast jednej wspólnej.
źródło
Ponowne użycie kodu jest bardzo dobrym pomysłem. Zmniejsza to nadmiarowość i ułatwia konserwację.
Tytuł sugeruje, że używasz kodu jako biblioteki, ale tekst twojego pytania sugeruje, że możesz kopiować kod źródłowy do nowego projektu. Trzymałbym się używania kodu innych programistów jako biblioteki tak bardzo, jak to możliwe.
Istnieje problem, jeśli kod jest zły, w jakiś sposób uszkodzony lub oparty na modelu, który nie pasuje zbyt dobrze do Twojej aplikacji. W takim przypadku może być łatwiej skrobać część lub całość kodu i zacząć od zera, niż próbując zrozumieć, dlaczego został napisany w określony sposób. Zachowaj jednak drugi kod w celach informacyjnych; możesz napotkać problem, którego nie jesteś pewien, jak rozwiązać. Możliwe, że inny programista prawdopodobnie natknął się na ten sam problem i warto zobaczyć, jak go rozwiązali.
źródło
To ogólnie dobry pomysł, więc dopóki nie istnieją żadne problemy prawne.
Pamiętaj jednak, aby poświęcić trochę czasu na zrozumienie, co robi biblioteka i jak to robi. Używanie biblioteki „magicznej” do zajmowania się rzeczami, których nie rozumiesz, jest dobrym sposobem na wysadzenie w powietrze jakiejś części, ponieważ źle ją wykorzystałeś, a potem nie masz pojęcia, jak to naprawić.
źródło
Ponowne użycie kodu nie ma prawie żadnych wad i dwie ogromne zalety:
źródło
Jeśli korzystasz z bibliotek i fragmentów kodu w odpowiednich miejscach, to „Nie” , nie oznacza to, że jesteś złym programistą. Oznacza to, że jesteś inteligentnym programistą, który może zastosować mądrość innych w odpowiednich miejscach.
Jednak...
Znalezienie bibliotek i fragmentów kodu zajmuje trochę czasu , więc jeśli nie możesz napisać kodu samodzielnie i musisz poświęcić wiele godzin na znalezienie bibliotek i fragmentów kodu w celu realizacji trywialnych zadań, to „Tak” , jesteś złym programistą.
źródło
Nie. Programiści powinni korzystać z bibliotek, które już tam są. Nie trzeba od nowa wymyślać koła. Jeśli masz lepszą metodę, możesz po nią sięgnąć, w przeciwnym razie, co tak naprawdę robi w pisaniu tego samego kodu. Jedyną rzeczą jest to, że powinieneś wiedzieć, co to jest kod (i tylko jeśli ma to znaczenie).
źródło
Oprócz powodów zawartych w innych odpowiedziach, nieużywanie kodu (o ile pasuje do twojego problemu) może zostać uznane za nieetyczne, ponieważ:
Pamiętaj, że oba są trudne do ustalenia wcześniej.
Spójrz także na Not Invented Here , który powszechnie określa się jako wzór anit.
źródło
W celu zakończenia dopuścić argument przeciwny: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -bractwo-nie-wymyślone-tutaj /
Zawsze jest równowaga.
źródło
Jestem za nieużywaniem bibliotek, chyba że jest to absolutnie konieczne. Zależności ograniczają przenośność i żywotność. Mam 34 lata w tworzeniu oprogramowania i chciałbym, aby co najmniej 1 z moich programów trwał dłużej niż 3 lata bez zniszczenia przez erozję (zmianę).
COM (Component Object Model), odpowiedź 17 lat temu, teoretycznie świetne, w praktyce wątpliwe komponenty wielokrotnego użytku nie do końca, użyję tylko bardzo podstawowych komponentów i tylko jeśli będę musiał.
Interfejsy API i SDK są mało użyteczne. Jeśli podzielę liczbę wierszy kodu, których faktycznie używam z biblioteki, czasu, który spędzam na doprowadzeniu ich do pracy, a nie na napisaniu ich, myślę, że to pranie. Całkowicie zrezygnowałem z SDK, narzut jest ekstremalny.
Frameworki: Zend, Silverlight, WCF, .NET, systemy warstwowe, tak, mogą przyspieszyć początkowy rozwój, ale kiedy przekroczę swoje granice, czas spędzony na naprawie pęknięć, po prostu nie jest wart wysiłku. Ile mają lat i czy są odporni na erozję?
Przeszedłem do JavaScript i HTML tylko z moimi bibliotekami. Skasowałem JavaScript, używając tylko najpopularniejszych typów instrukcji. Mam nadzieję, że za 10 lat uda mi się napisać coś, co przetrwa.
źródło
To wszystko zależy. Jeśli kodujesz grę, to odtąd korzysta z biblioteki (np. Allegro), ale tak naprawdę nie możesz być uważany za programistę, jeśli kopiujesz / kradniesz / pożyczasz (cokolwiek) kod innej osoby. Mówię, że nie wymyślam na nowo koła, ale w rozsądnym punkcie. Nie twórz całego programu fragmentów napisanych przez innych ludzi. Usiądź przy komputerze i zrób to sam ... przestań kraść kod. Ludzie stali się zbyt leniwi i po prostu kopiuj i wklej.
źródło