Programiści, na jakiej zasadzie programujecie ?

0

Cześć wszystkim, zacznę od tego, że ten post będzie totalnie chaotyczny, ponieważ tak naprawdę sam nie wiem o co dokładnie chce się zapytać.

Od niedawna zacząłem swoja przygodę z programowaniem i zacząłem się zastanawiać, w jaki sposób tak naprawdę programują współcześni programiści. Tzn. czy głównie programiści szukają po internecie gotowych bibliotek czy zazwyczaj sami je piszą. Dla przykładu, chce zaprogramować program w c++, który obsługuje wysylanie maili itp. takiej biblioteki w standardzie nie ma. Więc pytanie: czy programisci po prostu są w stanie sami ją napisać, czy jednak szuka się gotowych bibliotek?
Kolejna sprawa która nachodzi mi na myśl, czy kilkuletni doświadczony programista, jest w stanie napisać funkcję typo 'cin', 'cout' od zera , czy raczej jest to nie możliwe i bazuje się na tym co zostało nam dane przez twórców języka?

Ogólnie rzecz biorąc po prostu zastanawia mnie, czy programiści w 99% programując korzystają z gotowych rozwiązań czy np. są w stanie sami sobie napisać biblioteke która obsłuży np obsługe mail. Po prostu nurtuje mnie to, bo czesto programując dochodze do momentu w którym czegoś mi brakuje i wtedy przychodzi zastanowienie, czy programiści w takim momencie szukaja bibliotek w sieci, czy starają sie sami coś napisać co obsłuży ich problem.

Tak jak mówiłem, totalnie chaotyczny post, bardziej takie moje rozważania, niż konkretne pytania

6

Za każdym razem należy sie zastanowić czy chcesz korzystać z gotowego rozwiązania czy wolisz je stworzyć od zera. Każdy wybór ma inne skutki, biorąc zewnętrzną bibliotekę odciążasz siebie i zespół z jej utrzymania ale jednocześnie oznacza to że jesteś zależny od osoby, która ją wytwarza przez co jesteś mniej elastyczny.
Większość programistów raczej byłaby w stanie odtworzyć to co dają im biblioteki zewnętrzne ale nie jest to darmowe, potrzebny są do tego zasoby oraz czas, jednak czasem jest to dobra inwestycja.
Niektóre korporacje nie chcą korzystać z zewnętrznych bibliotek i wszystko wytwarzają sami ma to nawet nazwę : Not invented here syndrome (NIHS)
Dodatkowo biblioteki dostarczają klocki do budowy czegoś większego ale zawsze jest to sporo programowania chociażby logiki biznesowej.

6

Programuję siedząc w fotelu, przy biurku, oczy mam skierowane w stronę monitora, natomiast ręce umieszczone są zwykle w pobliżu klawiatury (w celu pisania) lub w pobliżu potylicy (w celu podrapania się po głowie), albo w pobliżu twarzy (w celu zrobienia facepalma, ukrycia twarzy w dłoniach w niezmierzonej rozpaczy czy podrapania się po podbródku).

A tak poważnie - pytasz tak naprawdę, jak nisko programista schodzi z poziomami abstrakcji.

Generalnie programiści dzielą się przede wszystkim na takich, którzy składają gotowe klocki i najszczęśliwsi są, gdy nie muszą pisać nic "customowego", co zagłębiałoby się trochę dalej w to, jak realizowane są różne operacje, natomiast inni wprost kochają takie dłubanie "w bebechach" i trzeba ich przekonywać, że świat się nie zawali jeśli użyją gotowej biblioteki. Mi chyba bliżej do tych drugich, choć też nie lubię pisać absolutnie wszystkiego customowo, wkurza mnie szeroko pojęta "robota głupiego" i na pewno nie przepisywałbym stosu TCP/IP czy jakichś protokołów SMTP, by móc wysłać programowo maila ;) ale z drugiej strony bezwysiłkowe składanie gotowych klocków w ogóle nie cieszy, dlatego najlepiej, jak to co się da załatwić w projekcie gotowymi rozwiązaniami załatwia się gotowymi rozwiązaniami, ale jest też kawał mięcha, w którym trzeba się samemu brudzić, żeby coś z tego wyszło ;)

4

90% programistów na tym forum nie potrafiłoby zaklepać poprawnego bufora cyklicznego.

10
Mózg napisał(a):

90% programistów na tym forum nie potrafiłoby zaklepać poprawnego bufora cyklicznego.

Dokładnie.

I jeszcze uczą młodszego pokolenia złych praktyk, np. używania eval w Pythonie.

I żyją w przeświadczeniu, że są rasą panów i w ogóle są lepsi od wszystkich dookoła.

I patrzą na siebie nawzajem zawsze z góry.

I każdy każdego uważa za debila.

W ogóle wszelkie interakcje społeczne, czy to na forum czy w warzywniaku, zwyczajnie ich przerastają - ciężko zdobyć znajomych, jak się wszystkich uważa za debili i jeszcze nie potrafi zachować tej informacji dla siebie.

0
xxx_xx_x napisał(a):

Za każdym razem należy sie zastanowić czy chcesz korzystać z gotowego rozwiązania czy wolisz je stworzyć od zera. Każdy wybór ma inne skutki, biorąc zewnętrzną bibliotekę odciążasz siebie i zespół z jej utrzymania ale jednocześnie oznacza to że jesteś zależny od osoby, która ją wytwarza przez co jesteś mniej elastyczny.
Większość programistów raczej byłaby w stanie odtworzyć to co dają im biblioteki zewnętrzne ale nie jest to darmowe, potrzebny są do tego zasoby oraz czas, jednak czasem jest to dobra inwestycja.
Niektóre korporacje nie chcą korzystać z zewnętrznych bibliotek i wszystko wytwarzają sami ma to nawet nazwę : Not invented here syndrome (NIHS)
Dodatkowo biblioteki dostarczają klocki do budowy czegoś większego ale zawsze jest to sporo programowania chociażby logiki biznes

W takim razie, przyjmując sie do firmy w której jest stosowana zasada NIHS , trzeba będzie poświęcić mnóstwo czasu, żeby zapoznać się z bibliotekami danej firmy, dobrze rozumiem ?

2

Osobiście mam tendencję do tego, żeby wszystko pisać własnoręcznie. I dlatego... nie jestem programistką :p

5

Dla przykładu, chce zaprogramować program w c++, który obsługuje wysylanie maili itp. takiej biblioteki w standardzie nie ma. Więc pytanie: czy programisci po prostu są w stanie sami ją napisać, czy jednak szuka się gotowych bibliotek?

Nie wiem jak w C++ (bo piszę w JS), ale tak ogólnie to bym powiedział, że należy zachować umiar, wyczuć, w którym momencie potrzeba gotowej biblioteki, a kiedy zrobić coś samemu. Można przesadzić w obie strony. Ja zwykle przesadzam w tę stronę, że często za dużo robię ręcznie i wynajduję koło, natomiast z tego co widzę to wiele programistów (mówię o programistach JS teraz) przesadza w tę drugą stronę i szuka bibliotek nawet do trywialnych rzeczy. To trochę patologia, bo:

  • dodaje się niepotrzebne zależności do projektu (przykład afery "left-pad" pokazuje, czym to się kończy).
  • zwiększasz rozmiar bundle'a (ważne w JavaScript, żeby pliki ze skryptami przesyłane przez sieć były małe, a jak napakujesz ileś skryptów to przestają takie być)
  • przestajesz być programistą, a zaczynasz być klepaczem, który nie umie programować, a tylko kleić na odczep biblioteki. Pytanie - jak daleko można zajść w ten sposób? Klepacze, którzy lecą non stop z gotowców nie rozwiążą większego problemu, jak im się natrafi, skoro jedyną odpowiedzią jest "poszukajmy libki do tego")
  • tracisz czas, bo czasem na szukanie właściwej biblioteki (czy nawet przetestowanie iluś bibliotek - bo zanim się znajdzie odpowiednią, trzeba czesto ileś przetestować), wdrażanie się w te bibliotekę itp. też mija czas często dłuższy, niż napisanie swojego kawałka kodu.
  • tracisz czas na konfigurację biblioteki i ogólnie walkę z biblioteką, żeby skłonić ją do tego, do czego chcesz.

Co nie znaczy, że korzystanie z bibliotek jest złe, myślę, że jest ok. Po prostu dużo ludzi wpadło w jakiś szał i zamiast pomyśleć pół godziny nad rozwiązaniem i napisać kilka linijek to wolą spędzić kilka godzin na szukaniu odpowiedniej biblioteki i walce z nią.

Z drugiej strony trzeba się też zastanowić:

  • jak bardzo trudny problem rozwiązuje biblioteka (czy byłbyś w stanie samemu napisać? Ja np. nie umiałbym napisać wielu rzeczy np. silnika fizyki do gier, dlatego użyję biblioteki)
  • jak wiele bugów i edge case'ów rozwiązuje biblioteka i ogólnie jak mocno jest zoptymalizowana (w JS to ma znaczenie takie, że biblioteki często łagodzą nieścisłości między różnymi przeglądarkami(czy nawet urządzeniami - komputer, komórki itp.) albo obchodzą różne bugi przeglądarek. A robiąc coś samemu, sam musiałbyś testować swoją bibliotekę z każdej strony.
  • ile ma opcji (czasami nie ma to znaczenia, ale czasami po prostu biblioteki mają tyle przydatnych opcji, że zrobienie je samemu byłoby czasochłonne, nawet jeśli dość łatwo by się implementowało kolejne opcje)
  • czy ma fajny ekosystem (np. różne dodatki, rozszerzenia, albo wsparcie społeczności na Stack Overflow itp.). Czyli używasz biblioteki i od razu możesz czerpać garściami z ekosystemu.
7

Najlepszy kod to kod nienapisany. Więcej kodu to więcej bugów. Pisanie kodu to ostateczność. Jeśli ktoś by sam pisał obsługę IMAP to pewnie miał by niezła zabawę ale z miejsca bym zwolnił bo jest limilabs. W pracy masz wytwarzać tanio i dobrze soft a nie być pionierem informatyki po raz drugi. Jeśli jest system który ie wspiera full text serach, nie ma możliwości zintegrowania z jakimś silnikiem to programista winien to sam napisać. Podobnie jak jest egzotyczna maszyna z protokołem na rs232i nie ma sterownika tylko można rzucać w siebie bajtami to programista tez powinien potrafić to zapisać. Niestety będąc bardziej wtajemniczonym coraz mniej piszesz (i dobrze) i zaczynasz pilnować by młodzi za dużo tez nie pisali.

1

Po prostu nurtuje mnie to, bo czesto programując dochodze do momentu w którym czegoś mi brakuje i wtedy przychodzi zastanowienie, czy programiści w takim momencie szukaja bibliotek w sieci

Ja sam z siebie generalnie nie, bo nawet nie wiedziałbym co mam odpowiedzieć na pytanie "co robiłeś przez ostatni tydzień/dwa/miesiąc?" w zależności od tego, co miałoby to być, ale jeżeli cała libka, to pewnie coś większego. Już lepiej byłoby tymi pieniędzmi rozpalić ognisko i kiełbaski zrobić :D

Natomiast dla siebie, to jeżeli wiem jak lub problem jest interesujący, to czasem.

5

Chaotyczny post to i chaotycznie odpowiem.
Programistów w Polsce jest garstka, a ja nie znam żadnego. Znam tylko koderów, którzy piszą kod. Kod polegający na składaniu istniejących narzędzi, utilsów, bibliotek i frameworków.
Takie składanie to nic trudnego i średnio inteligenty człowiek się tego spokojnie nauczy, ponieważ do wszystkiego jest dokumentacja i tutoriale - wystarczy czytać ze zrozumieniem i myśleć choć trochę logicznie.

Żaden z tym koderów nie jest w stanie nic zaproponować nowego ponieważ tylko powielają abstrakcyjne rozwiązania.
Po co jest abstrakcja?
Dla banalnego zrozumienia.
Żeby dzieci zrozumiały czytanie robi się abstrakcję ze słów w postaci obrazków -> dzisiejsi 'programiści' potrafią właśnie czytać i rysować takie abstrakcyjne piktogramy, ale mało kto faktycznie umie pisać i czytać w języki pisanym.

2

Niestety programowanie coraz częściej przypomina sklejanie gotowych bibliotek.

7
NeutrinoSpinZero napisał(a):

Takie składanie to nic trudnego i średnio inteligenty człowiek się tego spokojnie nauczy, ponieważ do wszystkiego jest dokumentacja i tutoriale - wystarczy czytać ze zrozumieniem i myśleć choć trochę logicznie.

Sam sobie przeczysz w tym zdaniu.
Czytanie ze zrozumieniem i logiczne myślenie to trudne zadania.
A już połączenie bibliotek i frameworków w stabilnie i wydajnie działający sposób, przekracza możliwości większości tych, jak ich nazywasz, koderów.

Żaden z tym koderów nie jest w stanie nic zaproponować nowego ponieważ tylko powielają abstrakcyjne rozwiązania.

Wszystko jest kwestią oczekiwań. W typowej pracy nie oczekuje się wynajdywania nowych technologii, tylko spełniania wymagań biznesowych. Im szybciej, tym lepiej.
No i pytanie, co nazywasz czymś nowym? Bo właściwie, to nic nowego nie ma już od dawna, wszystko jest zlepkiem już istniejących idei. Tak więc łatwo udowodnić, że programiści w ogóle nie istnieją. :)

Po co jest abstrakcja?
Dla banalnego zrozumienia.
Żeby dzieci zrozumiały czytanie robi się abstrakcję ze słów w postaci obrazków -> dzisiejsi 'programiści' potrafią właśnie czytać i rysować takie abstrakcyjne piktogramy, ale mało kto faktycznie umie pisać i czytać w języki pisanym.

Tu już w ogóle odjechałeś. Poprawne rozumienie i definiowanie abstrakcji jest najtrudniejszą rzeczą w branży.

8

Niestety programowanie coraz częściej przypomina sklejanie gotowych bibliotek.

A kiedykolwiek było inaczej? o_O Przecież od zarania dziejów tak wygląda programowanie. Zmienia sie tylko poziom abstrakcji z których składamy rozwiązania.
Był sobie asembler, ale pisało się w nim strasznie dużo kodu, bo głupie wczytanie inta z klawiatury to dziesiątki instrukcji więc ktoś sprytnie zrobił z tego makra/funkcje żeby ułatwić sprawę, potem pojawiły się proste generatory kodu, a potem powoli języki takie jak C. I zamiast składać program z pojedyńczych instrukcji asemblera składało się programy z instrukcji C z których każda była rozwijana do wielu linijek asemblera. Ot nic innego, tylko sklejanie gotowych kawałków! Każdy kolejny język wyższego poziomu czy framework przenosi to na kolejny poziom abstrakcji. Ba, teraz jesteśmy już na poziomie składania programów z całych komponentów a nawet podsystemów (jak np. baza danych, message queue, event stream...).

Ale to bez znaczenia, bo nadal cały problem w tym zawodzie wynika z umiejętności przełożenia wymagań na "prymitywy" z których składamy oprogramowanie, niezależnie czy tymi prymitywami są instrukcje asemblera, instrukcje języka wyższego poziomu, czy całe gotowe komponenty.
Zresztą w praktyce tworząc coś więcej niż Hello World i tak dotkniemy różnych poziomów abstrakcji. Część pracy to będzie podpięcie się do gotowego komponentu np. jakiejś kolejki, ale następnego dnia trzeba będzie zaklepać jakieś rozwiązanie od zera i zejdziemy gdzieś na niski poziom.

Tzn. czy głównie programiści szukają po internecie gotowych bibliotek czy zazwyczaj sami je piszą.

Nie ma reguły, bo wszystko ma swój koszt. Pisanie własnego kodu to konieczność utrzymywania go i koszt na napisanie. Użycie gotowca jest często szybsze, ale tracisz możliwość dobrego dopasowania do swoich wymagań i wiążesz się z zewnętrznym rozwiązaniem, nad którym niekoniecznie masz kontrolę. W praktyce każdą taką decyzję trzeba przeanalizować.

11

Kiedyś był wiecej powalonych programistów, którzy musieli wszystko swoje mieć. Pamiętam systemy gdzie były 3 implementacje stosu (najlepsze, że to było ... w javie, dziś nikt mi w to nie wierzy). Do tego jeszcze wlasne sortowanie ( najlepiej bąbelkowe :-) - pełna profeska). Ale to lata 90te.
Dużo się kulturze współdzielenia kodu poprawiło od początku XXI wieku.
Ale czasem dochodzi do przegięcia w drugą stronę. Mamy w projekcie 30 bibliotek i 2 frameworki zanim jeszcze klient powiedział co jest w zasadzie do zrobienia.

0

Kiedyś był wiecej powalonych programistów, którzy musieli wszystko swoje mieć. Pamiętam systemy gdzie były 3 implementacje stosu (najlepsze, że to było ... w javie, dziś nikt mi w to nie wierzy). Do tego jeszcze wlasne sortowanie ( najlepiej bąbelkowe

No i każdy własny format plików wymyślał, zamiast użyć JSONa czy innego popularnego formatu.

0

Ja mam tak że w pracy korzystam z gotowych bibliotek, ale jak widze że nie ma do tego to mogę po pracy dla rozrywki stworzyć np. pull requesta do Apache Commons.
Poza tym czasami "odkrywam koło na nowo" ale tylko w domu for fun (np. Merge Sort z użyciem ForkAndJoin frameworka)

1 użytkowników online, w tym zalogowanych: 0, gości: 1