Jakość kodu w projektach open source i komercyjnych

0

Wiadomo, ze kod moze byc dobry, zly, sredni (oraz pelno odcieni szarosci ;)). Zalezy tez jakie kryteria przyjac mowiac o jakosci kodu. Na potrzeby tego postu przyjmijmy:

  • skalowalnosc
  • czytelnosc
  • latwosc w utrzymaniu
  • kod udokumentowany
  • przenosnosc
  • wydajnosc
  • niska konsumcja RAM, CPU

Przyznam, ze nie widzialem wielu komercyjnych kodow zrodlowych. Z waszego doswiadczenia: lepsza jakoscia kodu moga poszczycic sie projekty open source, czy jednak te o zamknietym kodzie (komercyjne i niekomercyjne)

0

W moim odczuciu kod projektor open-source zdaje sie byc lepszy, ale mowie tutaj o duzych i znanych projektach. W firmach pracuje za duzo zwyklych klepaczy bez umiejetnosci i zapalu zeby sie czegos nauczyc aby kod byl wysokiej jakosci. Przy czym kod projektow open-source tez potrafi byc totalnie do d**y.

PS O ile o przenosnosci kodu mozna nowic, o tyle o zajetosci ramu i cpu nie bardzo - to raczej charakterystyka tego co z kodu powstaje. Ale wiem, czepiam sie.

0

problem w tym, że open-source sobie oglądam ile chcę, skąd natomiast mam wziąć kod oprogramowania z zamkniętym kodem? :P

generalnie to bym powiedział tak:
zależy od oprogramowania.
oprogramowania open source jest mnóstwo, i "jakość kodu" w różnych projektach w skali 0-1 jest równa mniej więcej math.random()
oprogramowanie o zamkniętym kodzie, gdzie dane było mi zajrzeć - dokładnie tak samo. widziałem projekty-kupy, które jakoś działały, i przeglądałem naprawdę niezły kod. Proporcje rozłożone równomiernie.

Budowanie statystyki z tego nie ma sensu.

0

Ja sie wypowiem w topicu mimo ze komercyjnego softu nie przegladalem. ( chociaz mialem okazje spogladac kod, no ale patrzec w kilkadziesiat czasami kilkaset tysiecy linijek kodu nic nie da trzeba to analizowac a analiza by trwala dlugo )
Wypowiem sie jednak ot tak od siebie i nieco jak to wyglada z mojej logiki. Natomiast bardziej dosiwadczeni ( szczegolnie zawodowo ) programerzy pewnie powiedza cos wiecej.

Nim zaczne powiem szczerze, ze tworzac projekt warto wiedziec jak to robic w czym moze pomoc niejedna ksiazka. ( albo - co ja osobiscie preferuje - kursy ktore sa krotkie i jasno wytlumaczone. Ksiazki zas lubia lac wode badz tlumaczyc cos jak dla idiotow )
Odpowiednia metodyka proawdzenia projektu faktycznie podnosi jakosc kodu jak i programu. Sam teraz poznaje to na wlasnej skorze. ( wiadomo co mam na mysli ). Od kiedy jednak buduje PhotoMake 2.0 za pomoca modelu spiralnego program dostal niezlego kopa w przod.
A wiec na prawde polecam. Dla mnie to byly nowe rzeczy i przyznam ze strasznie sie tym podjaralem stad o tym pisze :)
(tym bardziej ze widac efekty)

skalowalnosc

Moge mowic tylko jak to wyglada w projektach darmowych, lecz biorac na logike to, to skalowalnosc wedlug mnie jest lepsza w open source. No bo open source modyfikuje wiecej ludzi. Wiecej ludzi poprawi kod i go ulepszy tak by nowe modyfikacje byly latwe do wprowadzenia.
Natomiast w komercyjnych projektach klepie sie to co trzeba i zapewne nie raz nie zwraca sie uwagi na przyszle modyfikacje.

czytelnosc

To z kolei wedlug mnie zalezy od programisty a nie od projektu. Jak programista dobry to napisze czytelnie. Jka nie to nie czytelnie.

latwosc w utrzymaniu

Tez w sumie zalezy od projektu. Jak cos ma byc "na chwile" to pewnie nigdzie nie jest za bardzo to przestrzegane. A jesli cos ma byc kontynuowane i powiszekane w miare czasu to pewnie i tu i tu sa duze starania pod tym wzgledem.

kod udokumentowany

Zdecydowanie wedlug mnie komercyjne projekty. Tam sie przyklada duza wage do tego natomiast przy open source nikt nikogo nie trzyma "za jaja" by pisal dokumentacje.

przenosnosc

Tez zalezy od projektu :P Jak komercyjny soft to najczesciej programisci od razu wiedza czy kod ma byc pisany tylko pod dany system i tak to pisza. Natomiast open source jest czesciej wymierzony w wieksza ilosc uzytkownikow wiec chyba przenosnosc jest lepsza w Open Source.

wydajnosc

Tez zalezy od projektu. Z ta roznica ze komerche pisze sie na czas open source nie. Tak wiec open source ma duzo zasu na poprawienie jakosci / wydajnosci. Komercha nie zawsze. Sadze jednak ze styl pisania programistow w produktach komercyjnych jest lepszy co idzie w parze z jakoscia i wydajnoscia. Ale konkretnych przykladow ani dowodow w sumie podac nie jestem w stanie

niska konsumcja RAM, CPU

No to w sumie to samo co wyzej. Tez zalezy w czym piszemy day projekt. Bo nie ma sie co oszukiwac ze odpowiednie narzedzie odpowiednio skraca czas pisania. A im krotszy czas pisania tym wiecej czasu na poprawienie wydajnosci.

Ot takie moje odczucia. Nie moge za duzo mowic o kodzie komercyjnym wiec nalezy moj post traktowac jak takie "gdybanie" albo strzelanie. Niemniej tak sobie wlasnie mysle, a jak mysle tak pisze :)

0
polaczek17 napisał(a)

skalowalnosc

Moge mowic tylko jak to wyglada w projektach darmowych, lecz biorac na logike to, to skalowalnosc wedlug mnie jest lepsza w open source. No bo open source modyfikuje wiecej ludzi. Wiecej ludzi poprawi kod i go ulepszy tak by nowe modyfikacje byly latwe do wprowadzenia.
Natomiast w komercyjnych projektach klepie sie to co trzeba i zapewne nie raz nie zwraca sie uwagi na przyszle modyfikacje.

tys skalowalnosc widzial jak swinia kosmos :S
panie skalowalnosc to bedzie wtedy jak dostawisz druga maszyne i program nadal dziala a wydajnosc wzrosla.
przyklad niewydajnego programu: photoYebator, niewazne czy na jednym czy na 10 kompach dziala jak fotka byla tak nadal jest zjebana :P

polaczek17 napisał(a)

czytelnosc

To z kolei wedlug mnie zalezy od programisty a nie od projektu. Jak programista dobry to napisze czytelnie. Jka nie to nie czytelnie.

to zalezy od tego czy kod refaktorowany byl

polaczek17 napisał(a)

latwosc w utrzymaniu

Tez w sumie zalezy od projektu. Jak cos ma byc "na chwile" to pewnie nigdzie nie jest za bardzo to przestrzegane. A jesli cos ma byc kontynuowane i powiszekane w miare czasu to pewnie i tu i tu sa duze starania pod tym wzgledem.

teoretycznei tak powinno byc, w praktyce jak dochodzi budzet to sztuka jest znaleŹĆ kompromis miedzy jakoscia i cena

polaczek17 napisał(a)

kod udokumentowany

Zdecydowanie wedlug mnie komercyjne projekty. Tam sie przyklada duza wage do tego natomiast przy open source nikt nikogo nie trzyma "za jaja" by pisal dokumentacje.

tys w dupie byl i pociag widzial :P
naucz sie doxygena lepiej jak przyjdziesz do roboty zeby hierarchie obiektow ci rozrysowalo :D

polaczek17 napisał(a)

przenosnosc

Tez zalezy od projektu :P Jak komercyjny soft to najczesciej programisci od razu wiedza czy kod ma byc pisany tylko pod dany system i tak to pisza. Natomiast open source jest czesciej wymierzony w wieksza ilosc uzytkownikow wiec chyba przenosnosc jest lepsza w Open Source.

po *uju :P
zeby pisac przenosny soft trzeba miec cholernie duze zasoby sprzetowe i finansowe, malo projektow ma buildy prowadzone na wielu platformach, najczesciej najpopularniejszy soft serwerowy w ktory firmy pakuja gruba kase.

polaczek17 napisał(a)

wydajnosc

Tez zalezy od projektu. Z ta roznica ze komerche pisze sie na czas open source nie. Tak wiec open source ma duzo zasu na poprawienie jakosci / wydajnosci. Komercha nie zawsze. Sadze jednak ze styl pisania programistow w produktach komercyjnych jest lepszy co idzie w parze z jakoscia i wydajnoscia. Ale konkretnych przykladow ani dowodow w sumie podac nie jestem w stanie

komerche pisze sie tak zeby klient byl zadowolony albo zeby byc o krok przed konkurencja, open source podobnie albo projekt po prostu updata

polaczek17 napisał(a)

niska konsumcja RAM, CPU

No to w sumie to samo co wyzej. Tez zalezy w czym piszemy day projekt. Bo nie ma sie co oszukiwac ze odpowiednie narzedzie odpowiednio skraca czas pisania. A im krotszy czas pisania tym wiecej czasu na poprawienie wydajnosci.

polaczek... prosze cie ...

polaczek17 napisał(a)

Ot takie moje odczucia. Nie moge za duzo mowic o kodzie komercyjnym wiec nalezy moj post traktowac jak takie "gdybanie" albo strzelanie. Niemniej tak sobie wlasnie mysle, a jak mysle tak pisze :)

no to jeszcze sie musisz troche namyslic zeby cos madrego wymyslic :P

Na moje oko nie ma zadnej zasady, zarowno w open source jak w projektach komercyjnych sa produkty z dobrym i mniej dobrym kodem a co do niektorych to prawdopodobnie mamy developerow nie wiedza jaki ich dzieci pisza kod :S

0

Widziałam taki szajs w komercyjnych projektach, że aż sobie myślę, że w Open Source musi to lepiej wyglądać... Bo w Open Source piszesz i masz świadomość, że ktoś to kiedyś zobaczy. I będzie wstyd. A w komercyjnym... no ja nie wiem co myśleli ci ludzi co te programy przede mną utrzymywali, ale z niektórych szajsów to się chyba do końca pracy w tej firmie nie wygrzebię.

edit:
A, chyba nawet wiem z czego to wynika. Czasem w komercyjnym projekcie możesz usłyszeć, że to miał być na wczoraj. Niektórzy mogą stresa dostać, i jazda copy paste i inne takie...

0

W OpenSource też jest masa syfu. Przykłady: boost, open office.
IMHO zamknięty kod komercyjnych produktów jest często syfny ale przynajmniej działa w miarę poprawnie. W OS niekoniecznie działa...

0

Boost to syf? Przecież powoli podprojekty z Boosta wchodzą do standardu C++0x czy jakoś tak. Kod jest pokręcony dlatego, że ciężko inaczej zaimplementować w C++ te pomysły z Boosta zachowując elastyczność i wysoką wydajność. Jak masz lepsze pomysły to możesz im klepnąć jakiś moduł :)

0

Projekty komercyjne, w których brałem udział były różne.
Niektóre pisane 10 lat temu wyglądały jak kaszanka, inne głównie nowsze, pisane przez młodych ludzi znających pojęcie wzorców projektowych wyglądały nieco lepiej.
Ale to zależy od człowieka.
Co do open source, to polecam : http://nemo.sonarsource.org/ Macie przegląd jakości kilkunastu (-dziesięciu?) projektów open source.
Jednocześnie zachęcam do używania narzędzia sonar.
Jest czadowe i próbuję je wprowadzić w mojej firmie.

0

Kod jest pokręcony dlatego, że ciężko inaczej zaimplementować w C++ te pomysły z Boosta zachowując elastyczność i wysoką wydajność.

Elastyczność może i tak, ale na pewno nie wydajność.
Przykład z pracy: potrzebowałem implementacji rzadkiego wektora ze zdefiniowanymi operacjami matematycznymi. Wybór początkowo padł na boosta. Po czytaniu dokumentacji okazało się, że mapped_vector ma najsłabszą wydajność w porównaniu z innymi darmowymi bibliotekami. Autor tłumaczył się, że postawił na poprawność i elastyczność a nie wydajność. Później przy użytkowaniu jeszcze wyszedł bug, który całkowicie zdyskwalfikował mapped_vectora (nawiasem mówiąc bug zgłoszony i do teraz nienaprawiony).
Kolejny przykład: klasa lexical_cast, wydajność 2x gorsza niż aplikacja z identyczną funkcjonalnością w Javie, i podobna wydajność jak aplikacja z identyczną funkcjonalnością w pythonie. Ale elastyczne faktycznie to jest <rotfl>

0

W C++ nie ma dynamicznej dewirtualizacji i dlatego boost jest tak brzydki i czasem do tyłu z wydajnością. O bugach nie będę się wypowiadał.

Wiele projektów OpenSource ma spore dofinansowanie np od Googla czy innego giganta. Różnica między dofinansowywanymi projektami, a tymi hobbystycznie prowadzonymi jest taka, że jeśli hobbystyczny projekt jest skopany to się go zarzuca, a jeśli ktoś wkłada mnóstwo kasy w projekt to się go ciągnie nawet jak jest skopany :)

0

Chyba naturalne byłoby spostrzeżenie u w miarę doświadczonych programistów, że kod Open Source jest... lepszy.

Bo ilu z nas pracuje w naprawdę DOBRYCH firmach, z naprawdę dobrymi pracownikami, zasadami itp., co umożliwia tworzenie dużych i faktycznie super dobrze napisanych projektów? Zauważcie, że to teoretycznie jedyna szansa na zobaczenie świeżego kodu closed-source. Trzeba być blisko jego tworzenia. Zobaczę tylko ten kod closed-source, który tworzy moja firma.

A Open Source możemy przeglądać sobie do woli. Przeważnie słyszymy o tych lepszych, może nawet najlepszych projektach open-source. O tych znanych, tworzonych przez wielu programistów i wykorzystywanych przez wielu dobrych programistów. Więc i w grupie tworzących sporo jest dobrych kolesi.

Może fałszować wyniki naszych obserwacji. Bo widzimy sporo dobrego kodu OS z całego świata, a także trochę "naszego" kodu CS. Ewentualnie: dużo "naszego" kodu CS, a duże projekty bardzo trudno opanować i rzadko który duży projekt CS tworzony przez niewielki zespół ludzi ma super spójną, przemyślaną architekturę i jest fajnie napisany.

W praktyce jednak... Kodu OS jest mnóstwo i spora część z tego to jedno wielkie łajno. Zdarzają się i projekty, które zdają się być tworzone bez jakichkolwiek zasad przez przypadkowych ludzi. W firmach tworzących CS teoretycznie nie powinno być aż tak źle ;).

No i mam nadzieję, że wszyscy widzimy też czasem bardzo przyzwoite kawałki kodu CS. Każdy z nas powinien starać się je tworzyć. Czasami jakiś kod CS zostanie otwarty po latach, albo nawet wycieknie. W dobrych firmach kod jest zwykle przynajmniej przyzwoity. Pamiętacie, jak wyciekł jakiś kod Microsoftu? (to nie był kod Windowsa?) Był bardzo przyzwoity. Spójny, nieźle opisany, nieźle podzielony, a to fragment kolosa na 400 pierdyliardów linii.

Mniejsze firmy też potrafią pisać dobry kod, jeśli są dobre. Takie 37signals nie otwiera kodu swoich aplikacji. Ale jak tworzyli jedną z nich, to zrobili sobie przy okazji tak fajny framework, że postanowili go otworzyć -- i mamy Ruby on Rails. Styl oraz idea RoR (monkey-patching i definitywny brak minimalizmu ;) ) nie muszą wszystkim podchodzić, ale przy tych założeniach napisane jest to dobrze.

Na plus OS dorzucę jeszcze wstydliwość. Ja już dobre pół roku trzymam w szafie aplikację, którą jak najbardziej mam zamiar otworzyć i wypuścić. Ale jeszcze tego nie zrobiłem, bo się trochę wstydzę, a nie mam czasu poprawić tych paru rzeczy i przeprowadzić jeszcze kilku refaktoryzacji. A nie pisałem tego na odpieprz. Wymyśliłem architekturę, opracowałem standardy kodowania, mam testy jednostkowe, przeprowadzałem optymalizacje (z profilowaniem) i niezliczone refaktoryzacje. Mimo to, to jeszcze nie ten poziom. Kod nie jest dopieszczony. A jakbym dla kogoś pracował, to pewnie już dawno wylądowałby u klienta, bo nikt za to dopieszczanie by nie płacił. Kod by się sprawdził, nie byłby ohydny, ale jak go wypuszczę, to będzie ładniejszy (co nie znaczy, że i tak się z niego nie pośmiejemy). O ile go wypuszczę, bo zbieram się do tego jak sójka za morze.

0
aurel napisał(a)

A, chyba nawet wiem z czego to wynika. Czasem w komercyjnym projekcie możesz usłyszeć, że to miał być na wczoraj. Niektórzy mogą stresa dostać, i jazda copy paste i inne takie...

Zazwyczaj, jeśli projekt jest na wczoraj, to nie ma czasu myśleć i projektować, trzeba kopiować i dostarczać funkcjonalność.

Aby kod był łatwy w utrzymaniu musi być czytelny i musi mieć strukturę. Bez tego jest to mordęga.

0

Pamiętacie, jak wyciekł jakiś kod Microsoftu? (to nie był kod Windowsa?) Był bardzo przyzwoity. Spójny, nieźle opisany, nieźle podzielony, a to fragment kolosa na 400 pierdyliardów linii.

Wlasnie czytajac posta od razu wpadlem na to. A tu nagle o tym wspominasz :D
I do dzis glowilem sie czy to jakas nadzwyczajna wersja windowsa byla ze kod otwarty. Do dzis szczerze mowiac nie wiedzialem jak to bylo. Chyba ze myslimy o czyms innym ale ten kod to byl chyba windowsa2000. I nawet mialem to na dysku.

0

Polaczek jeszcze tylko tego brakowalo zebys sie wypowiadal w temacie o jakosci kodu :D :D :D

0

Ciekawe bo nie widziales ani jednej mojej linijki :D :D :D

0

@polaczek17: Czyli naprawdę sądzisz że masz na tyle doświadczenia z wszelkiego rodzaju kodem by Twoje wypowiedzi uznać za opiniotwórcze?

Z mało widziałem komercyjnego, zamkniętego kodu którego nie byłem autorem. Ale jeśli chodzi o OpenSource to większość źródeł, które widziałem była nad wyraz czytelna.

0

@polaczek17: Czyli naprawdę sądzisz że masz na tyle doświadczenia
z wszelkiego rodzaju kodem by Twoje wypowiedzi uznać za opiniotwórcze?

Ha! :)
Nie popadajmy w skrajnosci. Napisalem w moim pierwszym poscie zreszta odpowiedz na Twoje powyzsze pytanie ( ot moje jasnowidzenie ), ze ja moge sie tu wypowiedziec jedynie na zasadzie "moje przypuszczenia", gdyz nie widzialem za duzo kodu komercyjnego. Najczesciej albo jakies bazy danych ( w sensie aplikacje bazodanowe albo klient-serwer. )
Natomiast co do jakosci kodu jako takiego to tak naprawde teorie kazdy mniej-wiecej zna czyz nie?
Gorzej z wykorzystaniem tego w praktyce.

0

@poaczek17: Twoje "jasnowidzenie" jak to określiłeś mógłbym streścić do dwóch zwrotów: to zależy od projektu, to zależy od programisty. Bardzo odkrywcze muszę przyznać.

0

A co? Moze nie taka jest prawda? Tak jest. Nie da sie inaczej tego okreslic wiec czego sie czepiasz?

0

Weźcie kur... czę pieczone oznaczajcie jakoś wątki gdzie wypowiada się polaczek, żebym wiedział gdzie nie zaglądać :(

0

To by Ci pewnie odpadła większa część tematów...

0

Mi też skacze ciśnienie jak go czytam.

0

Proponuję w temacie wątku dopisać [infected by polaczek]

0

Może by dodać w profilu opcję o nazwie: "ukrywaj posty polaczka" - oczywiście domyślnie włączoną :P

0
AdamPL napisał(a)

Weźcie kur... czę pieczone oznaczajcie jakoś wątki gdzie wypowiada się polaczek, żebym wiedział gdzie nie zaglądać :(

CyberKid napisał(a)

Proponuję w temacie wątku dopisać [infected by polaczek]

othello napisał(a)

Może by dodać w profilu opcję o nazwie: "ukrywaj posty polaczka" - oczywiście domyślnie włączoną :P

somekind napisał(a)

To i <nopolaczek> dodajcie...

Ciekawe...

0

A może po prostu nie odpisujcie?
Mam już dość tego, że każdy temat na tym forum zamienia się we flame war, chcecie to sie umówcie w realu i dajcie se po pysku, ale na miłość boską dajcie już z spokój z wyzywaniem się nawzajem. Nie można założyć żadnego tematu w żadnym dziale, żeby nie pojawił się temat polaczek vs. reszta forum.
Jeśli przeszkadza wam, co pisze, to to zignorujcie i nie czytajcie tego.

Pozdrawiam.

0

Z okazji zbliżającej się Wigilii chciałbym publicznie ogłosić, że wybaczam polaczkowi jego wszystkie posty w których zabierał głos. Polaczek życzę Ci PhotoYebatora napisanego w czymś innym niż C++ Builder 5, klas nazywających się inaczej niż Form1, Form2,... Form99 itp. dużo linijek wysokiej jakości kodu napisanego własnoręcznie oraz co chyba najważniejsze dużo merytorycznych postów na 4programmers.

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