Wlasny projekt i watpliwosci

1

Witajcie Koledzy i Kolezanki programisci,

Chcialbym zapytac o rade, bo moze ktos ma podobnie jak ja podczas wypuszczania wlasnego projektu do sieci.

Stworzylem moim zdaniem interesujaca aplikacje internetowa, w stylu frameworka z funkcjami cms. Celem jest umieszczenie malych i srednich projektow moich klientow na niej. Programuje CMSy od kilku lat, staram sie trzymac ogolnych regul inzynierii oprogramowania. Ten projekt programowalem jednak sam. Uwazam, ze jest intuicyjny dla programisty jednak w jakims sensie obawiam sie pokazac go komukolwiek od strony kodu aby rzucil okiem.

Przychodzi czas jego odpalenia, ustawienia procesu deployowania itp. Wiem jednak, ze aby go dopiescic potrzebuje kilku miesiecy i dystansu oraz wiedzy jak zachowuje sie w sieci.

Mam jednak watpliwosci czy "nie bedzie wstydu" rozpowszechniac tego produktu. Nie chcialbym robic kodu publicznym rowniez poniewaz spedzilem dwa lata na programowaniu tego niemal dzien w dzien... . Gdy studiuje np. Zend Framework- wszystko tam jest skrajnie zgodne z zalozeniami programowania obiektowego itp. Czasem tak bardzo, ze nie rozumiem dlaczego takie rozwiazanie zastosowano i w ogole jaki mozg wpadl na to, zeby w ten sposob to zaimplementowac.

Moj styl programowania jest nieco inny (PHP). Glowne klasy inicjalizujace projekt sa abstrakcyjne i dostepne we wszystkich czesciach aplikacji. Natomiast modele moga posiadac wiele instancji, gdyz odwzorowuja baze danych glownie. Do tego helpery w zalozeniu podobnym jak w ASP.NET. Staralem sie zebrac ciekawe rozwiazania z roznych frameworkow aby razem ulatwily mi zycie. Uwazam, ze sie udalo ale przez to aplikacja posiada moj wlasny wzorzec projektowy.

Skad mam wiedziec, czy sposob, w jaki moja aplikacja jest zbudowana jest poprawny? Czym jest 'poprawny' w ogole w odniesieniu do programowania www waszym zdaniem? Wybaczcie jesli ten post jest nieco niejasny. Ujawnia moje watpliwosci gdyz uwazam ze internet jest pelny nieprzemyslanego i bezwartosciowego syfu i nie chce dodawac wlasnych 3 groszy do tego. Z drugiej strony jestem swiadomy ze wiele osob, firm itp. mialo bardzo dobre produkty, moze nawet lepsze niz dzis uzywamy a nigdy nie zobaczyly swiatla dziennego...

Moze ktos ma podobnie i podzieli sie wlasnymi przemysleniami..

1

Ciężko określić co jest "poprawne", ja uważam to za raczej subiektywną ocenę. Tak jak MVC jest chyba najpopularniejszym wzorcem architektonicznym dla PHP, ale nie jedynym stosowanym.
Kod w teorii powinien: działać. Czyli nie wysypywać się i spełniać założenia. Fajnie by było gdyby wykonywał się szybko i był przejrzysty [ogólnie] i przejrzysty dla programisty bez zaglądania w dokumentację. Teoretycznie nawet nie musi być obiektowy.
Łatwo jest popaść w paranoję jeżeli chodzi o kod. A kod praktycznie zawsze można "ulepszyć" (gdy już coś napiszesz, rozbudujesz - okazuje się, że można było zrobić to lepiej/szybciej/fajniej), ale nie zawsze należy to robić. Nie rozumiem więc takich paranoików, ładujących potężne frameworki, żeby wyświetlić stronę z zakładkami Główna/O nas/Oferta/Kontakt, tak samo jak piszących osobne klasy do walidacji jednego inputa itp.
Ja też pisząc własnego CMS odbiegłem trochę od sztywnych zasad - robiłem tak, jak uważałem, że będzie wygodniej czy wydajniej, a wszystko z rozsądkiem.
Więc jeżeli uważasz coś za rozsądne i to się sprawdza - to tak właśnie rób.

0

Duzo racji jest w tym co piszesz. Moim problemem jest np. kiedy powinienem rozlozyc funkcje na pomniejsze (czyli podzielic problem na podproblem). Moj kolega, programista JAVA rozbija niemal co druga linie na osobna funkcje i dziwi mi sie jak moge tworzyc moj kod, gdzie funkcja ma zwykle do 20-30 linii.

Zawsze dochodze tez do momentu kiedy zdaje sobie sprawe, ze cos mozna zrobic latwiej/szybciej/fajniej jak to zasugerowales i wtedy nie daje mi to spokoju. W efekcie projekt sie ciagnie bo ciagle cos przepisuje. Obecnie postanowilem jasne zalozenia co ma jednak zawierac i staram sie unikac wiecznego przepisywania ale ta 'paranoja' jest mi znana niestety i chyba stad powstal ten post...

Dzieki za odpowiedz,

0

Skoro program twój działa dobrze, nie zawiesza się, nie wali errorami czasami itd, to publikuj go w necie bez problemu. Kodu nikt ci nie każe publikować, a skoro program działa dobrze, spełnia swoją funkcję, można w nim pracować bez problemu, to znaczy, że jest w porządku (nawet jeśli w kodzie olewałeś komentowanie i cały kod masz w jednym unicie).

A drugą sprawą jest to, że warto pisać programy dość czytelnie, ale to nie ma żadnego wpływu na to, czy opublikować go (no chyba, że wrzucasz to na stronę z programami open source i zależy ci, by wyglądać jak PRO, ale nawet jak nieco dziwnie wygląda twój kod pod względem czytelności, to trudno, ludzie najwyżej oleją ten kod jeśli będzie za duży bałagan, a program zbyt wielki). Ja bym nawet opublikował program, w którym pisałbym kod w stylu:
var zmiennajakastamblabla : String;
begin sHoWmeSSage( 'lol' ) ; end;

to absurdalny przykład czytelności kodu, ale skoro program byłby poprawie napisany, działał dobrze, nikt by nie narzekał na nic, to znaczy, że taki program można w necie rozpowszechniać (kodem i tak nie musisz się dzielić).

a i jeszcze jedno, pamiętaj, że różni ludzie w necie szukają różnego kodu i jeśli ktoś taki ja ja chce się dowiedzieć jak np. zrobić painta, to szukam jakiegokolwiek kodu i mam gdzieś jak będzie napisany, może być duży śmietnik w nim i lamersko napisany przez 7 latka z downem, ale jeśli kod działa, kompiluje się, funkcje są sprawne, to przeczytam ten kod, te funkcje i nauczę się jak rysować coś na płótnie. Lepszy kod wyglądający jak burdel niż żaden, bo są rzeczy w necie, do których nie ma kodu w ogóle żadnego, pod żadnym językiem, dlatego każdy kod w necie się liczy (choć co innego jakby twój kod był kopią innego kodu i w google byłoby do pobrania 150 kodów na painta, to wolałbym spotykać te czytelniejsze kody, bardziej pro)

0

Widzisz, ja mam kolejna paranoje ze umieszczam sporo komentarzy (ale bez smieci) i kazdy { czy ; musi byc rowniutko ahha. Moze dlatego mi to dwa lata zajelo.
Fakt jest taki, ze jak ktos nie chce to uzywac nie musi- z drugiej strony jak cos robic to wypada porzadnie.

Kod jest czytelny ale wzorzec projektowy jest dosc zlozony. Z drugiej strony jesli zaczynasz analize od najwyzszego pliku (index) schodzac glebiej to moim zdaniem bez dokumentacji jestes w stanie rozgrysc go dosc szybko. Kod jest tez wydajny jak mi sie wydaje i szybko sie wykonuje. Jedyne czego mi potrzeba to poprosic kilku QA i beta testerow znajomych o pomoc i feedback. Wtedy chyba bede spokojniejszy.

Zazdroszcze tym, ktorzy potrafia wypuscic cos swojego co pykaja dla zabawy, bo lubia, potem ulepszaja to i staja sie ekspertami w tym. Trzeba przyznac tez ze technologie internetowe staly sie bardzo szeroka dziedzina...

Heh no wlasnie wszystko napisalem sam i dlatego mam cykora. Uzylem JQuery i dataTables oraz porzadnej klasy do bazy danych bo z tym zartow nie ma. Nie mowie ze nie ufam temu co tworze bo bardzo duzo czasu poswiecam na algorytmy ale wiecie, za duzo watkow aby wszystko przewidziec. Zdecydowanie poprosze kogos o testy, moze mam cykora tez przed konstruktywna krytyka :)

0

Krytyka to jeszcze nie koniec świata, a nikt idealnych produktów nie wypuszcza (inaczej wszystko byłoby w wersji 1.0 :P).

kiedy powinienem rozlozyc funkcje na pomniejsze (czyli podzielic problem na podproblem)

Jedni mówią - jak się funkcja nie mieści na ekranie - to jest źle. Ale to znowu moim zdaniem ocena subiektywna. Dla mnie funkcja ma spełniać określone zadanie. Jeżeli jest jakieś złożone pod-zadanie, które mogę z tej funkcji wydzielić, albo - co lepsza - takie podzadanie może kiedyś być mi potrzebne z poziomu innej funkcji) - to tu już tworzę kolejną metodą.
20-30 linii jest dla mnie wartością w pobliżu optymalnej właśnie (wiadomo, to zależy).

Widzisz, ja mam kolejna paranoje ze umieszczam sporo komentarzy (ale bez smieci) i kazdy { czy ; musi byc rowniutko

Z komentarzy to ja stostuję tylko dokumentację dla metod (wiadomo, łatwiej się pisze i można wygenerować dokumentację), oraz w kodzie - tylko w krytycznych sytuacjach, kiedy czegoś nie widać na pierwszy rzut oka

moze mam cykora tez przed konstruktywna krytyka

Ty się bój tej niekonstruktywnej :D

0

mówisz, że program elegancko działa, to jak możesz bać się wypuścić gotowy program do netu? Detektywem Monkiem (tym z serialu) jesteś, czy co? Ogarnij się.
Ludzie na świecie nawet płacą za wersje gier pre alpha i mają gdzieś jak kod jest napisany (twórca nie udostępnia go) i mają gdzieś, że na razie w grze są bugi, oni chcą grać, nawet w zbugowaną grę.

Przykłady gier rozwijanych od dawna (od ubogich wersji do rozbudowanych co raz bardziej) to np. Project Zomboid, Kerbal Space Program, kilka innych gier aż do profesjonalnej gry Arma 3, którą można kupić i jest obecnie w fazie Alpha, zdarza się crash gry, a w edytorze map jak stawia się NPC na budynkach to trochę latają w powietrzu, metr nad dachem (twórcy chyba nie zakładali, że gracze będą tam NPC ustawiać? bo działa to kiepsko, nawet AI ma problem z zejściem z budynku, który ma schody, postać potrafi zlecieć z dachu, zamiast po schodach zejść. A jak przeciwnik atakuje, to AI na budynkach idiotycznie się zachowuje, bo kładą się na ziemi i nic nie robią, strzelać nie mogą, bo ściana lub murek budynku zasłaniają widok i tak leżą sobie i koniec, żaden nie kuca, by oddać strzał).

Jak chcesz, to kup sobie jedną z rozwijanych gier (tego typu, te małe głównie chyba zwą się INDIE, na youtube są recenzje gier pre alpha). A jedna gra z budowaniem zamków z klocków- castle story, w pierwszej wydanej wersji (którą kupowałeś już za ileś dolarów) nawet nie było przeciwników, a bez przeciwników taka gra jest bez sensu, bo cel tej gry to zbuduj zamek i broń się. Dopiero po miesiącach (nie wiem ilu, 2? 3?) dodali nową wersję, tam wprowadzili kilka rzeczy, choć gra dalej jest uboga (choć budowanie, fizyka w miarę rozbudowane) i chyba jeszcze nie ma przeciwników, nie mam pewności.

Także wydaj swój program. Nawet możesz anonimowo, nie musisz pisać w programie "o Programie, autorem programu jest Jan Kowalski". A jak boisz się, że "łooo nie dałam księdzu po kolędzie, co sobie sąsiedzi pomyślą!!!", to wywal cały program i tyle, problem rozwiązany. :D (albo nie wywalaj, tylko wrzuć na forum jakimś pod losowym nickiem i z kodem źródłowym, przynajmniej będzie pożytek z tego jakiś niż miałbyś cały program porzucić).

Wspomnę jeszcze, że choć jestem amatorem, to kilka małych programów napisałem i dzieliłem się nimi w necie (zazwyczaj nie udostępniałem kodu źródłowego) i ludzie pobierali, nikt nie narzekał, mimo, że nie robiłem programu "idiotoodpornego" i jakby ktoś w polu "Podaj liczbę" wkleił tekst, to program wywaliłby error. Miałem gdzieś, czy jakiś debil, celowo będzie wklejał w oczywiste pola tekst, jego problem (nie słyszałem ani jednego przypadku, by ktoś miał z tym problem. A program kilkanaście osób zawsze chwaliło w stylu "o dzięki, przyda się", niektórzy pytali, czy dałoby radę rozbudować coś i tyle).

Jeśli robisz darmowe programy, to nie ważne jakie będą, co innego jeśli je sprzedajesz. W przypadku sprzedaży programu, próbowałbym go dopieścić, ale skoro wrzucam wszystko za free, to nie zwracam uwagi na szczegóły. Weź dla przykładu cofnij się o 10 lat lub o ileś, wtedy gdy Gadu Gadu powstało, a alternatywnego klienta GG nie było lub dopiero się pojawiały. Załóżmy, że ta pierwsza wersja GG miała pełno reklam wkurzających. Czy wtedy jako zwykły użytkownik chciałbyś pobrać byle jaki klient GG i go przetestować sobie, jak się nie spodoba, to wywalić, czy nie pobierać żadnego mówiąc "łooo a jeśli programista AQQ lub Kadu ma brzydki kod? to nie! nie pobieram w ogóle! zostaję przy GG ze spamem reklam!"?

0

Hmm racja. Program dziala elegancko w przestrzeni, ktora przetestowalem ale to tylko przykladowe dane i nieistniejacy projekt Lorem Ipsum.
Jednak moze trafiles w sedno z "A jak boisz się, że "łooo nie dałam księdzu po kolędzie, co sobie sąsiedzi pomyślą!!!" :P Moze to troche tak jest no ale programu nie wyrzuce :-)...

1

Wystaw projekt koniecznie, wez na klate krytyke, wyciag wnioski i wypusc nastepna wersje. Jak dostaniesz feedback zobaczysz jakie sa mocne/slabe strony projektu i jakie sa oczekiwania uzytkownikow, moze byc nawet tak ze twoje poczatkowe zalozenia zostana zupelnie zmienione jak tylko ludzie zaczna uzywac softu.

Nie wachaj sie wystawic kodu, przykladowo ruscy nie maja kompleksow, nie maja oporow aby wyjsc przed szereg i dlatego jest masa autorskiego softu stworzonego na wschodzie, a my nie jestesmy w cale gorsi, wystarczy tylko zmienic mentalnosc odrobine :)

1

Poczytaj "Clean Code" Roberta Martina. Jeżeli Twój kod spełnia choćby połowę określonych tam zasad, to jest dobrze.

BTW: Ja np. ciągle walczę z programistami, którzy uważają, że 20-30 linii kodu na funkcję to optimum. IMHO 20-30 linii to niemal zawsze za dużo, chyba że jest to płaska funkcja bez wcięć. Jeżeli coś się z funkcji da wydzielić jako osobną operację o zwięzłej nazwie, to zawsze należy to zrobić. W ten sposób nazwy funkcji przy okazji ładnie komentują kod.

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