Czy istnieją konkretne powody, dla których nie należy intensywnie używać bibliotek i fragmentów kodu? [Zamknięte]


42

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?


3
Miałeś na myśli „ środowisko niekorporacyjne ” lub środowisko, w którym ludzie nie współpracują ?
Bryan Oakley

Myślałem, że powodem, dla którego piszemy w interfejsach i klasach abstrakcyjnych, jest to, że nasze biblioteki są bardziej uniwersalne, mniej zależne, bardziej elastyczne ...
IAbstract

1
Tak źle, że pasek Ojca odpada.
Thomas Eding

Pamiętaj tylko, aby złożyć hołd i przyznać kredyt tam, gdzie jest on należny. Jeśli kiedykolwiek twierdziłeś, że ten kod jest twój, to zdecydowanie Pas
hanzolo,

3
Nie, nie czyni cię złym programistą, ale nie czyni cię lepszym programistą.

Odpowiedzi:


85

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.


Tak myślałem. Może powinienem rozpocząć projekt open source, aby pozbyć się tego uczucia :)
Henrik P. Hessel

25
+1 ode mnie Ludzie nigdy nie powinni używać kodu, którego nie rozumieją. Dotyczy to fragmentów i bibliotek.
Tim Post

5
Jeśli chodzi o fragmenty, zawsze sam przepisuję kod, aby mieć pewność, że wiem, jak to działa. Biblioteki, nigdy nie przepisuję, chyba że z jakiegoś powodu to nie działa.
Rei Miyasaka

12
Tim: Jeśli chodzi o biblioteki, nie muszę rozumieć, jak to robi, o ile wiem, co robi. Na przykład wielu z nas korzysta z bibliotek kryptograficznych; Nie wiem, jak działa AES, ale wiem, co robi i kiedy go używać.
user281377

@Rei Miyasaka Wygląda na to, że fragmenty są często gorszej jakości niż samodzielna biblioteka. Ja sam zmodernizowałem kilka fragmentów, których użyłem.
Henrik P. Hessel

24

dobrzy programiści piszą dobry kod; wielcy programiści kradną świetny kod.


+1 za linię. Czy to jest oryginalne?
apoorv020

Chciałbym, nie, to dziwne przysłowie.
dan_waterworth

Jestem na swoim iPhonie, ale myślę, że to cytat z Pablo Picasso (zastąp programistów artystami)
Henrik P. Hessel

21
Powiedział Picasso Good artists copy, Great artists steal.
dan_waterworth

3
Dobry cytat. Pomyśl, że ukradnę ^ H ^ H ^ H ^ H ^ H, użyj go ponownie.
Wonko the Sane

24

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.


13

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.


Prawie opisałeś moją niechęć do jQuery, +1.
aaaaaaaaaaaa

5

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.


3

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.


3

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.


3

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.


Tu mnie masz. Odnoszę się także do kopiowania wielu wierszy kodów innych dzieł (nie bibliotek), ponieważ w moim przypadku jest to legalne. Co myślisz?
Arman

1
@Arman To wciąż dobry pomysł. Z punktu widzenia konserwacji nie jest tak dobre, ponieważ gdy pierwotny programista naprawia błąd w swoim kodzie, nadal jest w twoim. Jest to wciąż lepsze niż nic, ponieważ przynajmniej kod jest dość podobny w obu projektach i można zastosować poprawkę błędu osobno, bez konieczności robienia tyle.
pswg

: Ostatnie pytanie: Tak jak powiedział Mason, jeśli na przykład odkryłem, że 2500 linii kodu (znowu podkreślam, że nie bibliotek) jest nieco przydatna w rozpoczęciu mojej pracy, a ty pozwalasz mi ją skopiować, zrób myślisz, że to dla mnie dobre? Czy jest etyczny?
Arman

@Arman Jeśli jest to zgodne z prawem, prawdopodobnie jest to również etyczne. Jeśli programista napisał w ramach tej samej organizacji, to na ogół organizacja jest właścicielem kodu i masz wszelkie prawo do jego używania (zgodnie z zasadami organizacji). Jeśli zostało napisane w innej organizacji, musisz uzyskać zgodę tej organizacji. Zasadniczo, jeśli kod nie jest objęty żadną licencją, pierwotny programista tak naprawdę nie dba o to, jak go używasz, ale zawsze będę przypisywać oryginalnego programisty w widocznych komentarzach do kodu (z linkiem, jeśli to możliwe).
pswg

4
Idealnie powinieneś także zrozumieć, jak działa skopiowany kod.
Mike Partridge

1

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ć.


1
Zastanawiam się, czy „kopiowanie i wklejanie” stu wierszy kodu napisanego przez mojego hojnego kolegę programistę jest nadal etyczne.
Arman

2
@Arman: Spróbuj go zapytać.
Mason Wheeler

1
Jeśli pozwolenie na to pozwala, dlaczego nie byłoby etyczne? Jeśli próbujesz wykonać pracę, a jedno koło zostało już wynalezione i udostępnione za darmo, byłoby źle (tj. Nieetyczne) marnowanie minuty czasu na jego ponowne wymyślenie. Jeśli musisz nauczyć się wymyślać koło, jest to zupełnie inna sytuacja.
Dariusz X.

1

Ponowne użycie kodu nie ma prawie żadnych wad i dwie ogromne zalety:

  1. Wykonuje pracę. Jest to ważniejsze dla rozwoju zawodowego. W końcu masz dobrze płatną pracę, ponieważ wiesz, jak sprawić, by działały rzeczy, które zaskoczyłyby większość nieprogramujących; ponowne użycie pozwala szybciej osiągnąć ten cel, dzięki czemu zyskujesz na wartości w swojej pracy.
  2. Uczysz się różnych rzeczy. Jest to ważniejszy powód samodoskonalenia. Nie ma lepszego sposobu na poprawę kodowania niż czytanie dobrego kodu napisanego przez innych. Nawet zły kod napisany przez innych zwykle cię czegoś uczy! Nie ma lepszego sposobu na zrozumienie działania biblioteki, interfejsu API, języka lub domeny niż czytanie i ulepszanie rozwiązań napisanych już przez innych. Obie rzeczy zwykle zdarzają się, gdy ponownie wykorzystasz istniejący kod, ponieważ żadne wcześniej istniejące rozwiązanie nigdy nie zrobi dokładnie tego, czego potrzebujesz - a wynikające z tego majstrowanie przy źródle jest źródłem wzrostu wiedzy.

To naprawdę mój cel, aby się uczyć. Na razie warto więcej niż dokończyć mój projekt. Dlatego źle się czuję, gdy staram się mieć czyjąś pracę przy niewielkim wysiłku (nie tylko w odniesieniu do bibliotek).
Arman

1

Czy intensywne użycie biblioteki i fragmentów kodu sprawia, że ​​jesteś złym programistą?

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ą.


0

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).


0

Oprócz powodów zawartych w innych odpowiedziach, nieużywanie kodu (o ile pasuje do twojego problemu) może zostać uznane za nieetyczne, ponieważ:

  1. Możesz celowo marnować czas swojego pracodawcy LUB
  2. Być może celowo dostarczasz mniejszy produkt

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.


0

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 /

mentalność, którą nazywam „Never Invent Here” (NeIH). Dzięki tej mentalności aktywa zewnętrzne są przeceniane i często domyślnie ufane, co pozwala inżynierom spędzać więcej czasu na dostosowywaniu się do dziwnych zasobów gotowych, a mniej na budowaniu własnych aktywów.

Zawsze jest równowaga.


-2

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.


częścią tego problemu nie są biblioteki, ale ciągła rezygnacja z języków i narzędzi programistycznych, co oznacza, że ​​musisz iść i znaleźć nowe biblioteki w nowej technologii, aby zrobić to samo stare.
gbjbaanb

-2

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.