Tak jak w opisie poszukuję jakiegoś fajnego projektu który mógłby prezentować dobre praktyki programistyczne może ktoś może coś polecić, interesuje mnie projekt w C++ z Qt. Chciałbym popracować nad jakością własnego kodu podglądając jak inni kodując piszą czytelne oraz dobre programy. Proszę o propozycję projektów :) .
Bywa tak że są programy napisane elegancko które miło i łatwo się czyta i ich przeciwieństwo. Chciałbym popatrzeć jak inni piszą takie czytelne łatwe w rozbudowie programy. W tym momencie szukam jakiegoś takiego programu do analizy.
Bywa tak że są programy napisane elegancko które miło i łatwo się czyta i ich przeciwieństwo
To jest bardzo subiektywne kryterium. Poza tym, ładny kod nie zawsze wiąże się z przyjemnym używaniem produktu. Takie MongoDB jest w wielu miejscach fajnym przykładem na ładny kod napisany w C++, ale jako produkt sprawuje się koszmarnie.
Poza tym, w C++ ciężko napisać kod, który czyta się naprawdę przyjemnie, obiektowe wzorce, które sprawdzają się w takiej javie czy C# w C++ często są antywzorcem. Do tego coraz częściej właściwym rozwiązaniem problemu stają się szablony, które czyta się dobrze tylko jeśli jesteś ich autorem. Znajdź raczej projekty, które odniosły sukces i przestudiuj co było tego źródłem, skup się na tym a nie na szczegółowym, wymuskanym kodzie, który forsują teoretycy w swoich książkach.
Ładny kod w C++ to najszybsza droga do wypalenia się programisty... Wierzysz w to i szukasz tego, a tymczasem okazuje się, że w którymś z kolei projekcie i którejś z kolei firmie trafiasz na przeinżynierowanego kolosa z masą pułapek, w których, jeśli nie przeklikasz się kilka szablonów i get'ów w górę, spędzisz cały dzień na rozwiązywaniu problemów z całym projektem.
Trzeba mieć na uwadze, że kod który wygląda ładnie, zmienne są nazywane dobrze, itp. może być tak naprawdę potworną kupą [CIACH!], które zabije Twoją pasję, którą miałeś jako początkujący.
To tyle, jeśli chodzi o moje doświadczenia z projektami komercyjnymi.
Z mojej obserwacji wynika, że gdy ktoś mówi "over engineering" to trzeba się zastanowić, o które z dwóch znaczeń chodzi:
- ja tego nie rozumiem i nie chce tego zrozumieć
- ktoś inny czegoś nie rozumie i używa czegoś na siłę bo fajne lub trendy (np newbie przeciążający operatory, albo użycie wielowątkowości do dodawania dwóch liczb)
Niestety w 70% przypadków podpada pod punkt pierwszy.
A proste dobre praktyki programistyczne to:
- pisanie kodu małymi funkcjami/klasami (one responsibility principle)
- korzystanie z interfaców (lub sygnałów slotów jeśli to Qt), by minimalizować zależności modułów od siebie
- pisanie testów (Test Driven Development - ciężko przełamać nawyki pisania najpierw kodu potem testów, ale naprawdę warto) - pisanie testów to minimum
- nadawanie symbolom dobrze przemyślanych nazw
- przestrzeganie standardów kodowania (są różne standardy, ale w ramach jednego projektu trzeba być konsekwentnym)
- nauczenie się wzorca projektowego MVC/MVVM/VIPER lub innej pochodnej MVC zrozumienie go i ścisłe jego przestrzeganie (wygląda na proste, ale jest trudne szczególnie jeśli pracuje się z innymi, którzy mają to gdzieś).
Polecam książkę "Clean Code" Robert C. Martin lub jego filmiki (dostępne na Safari)
Jeśli chodzi o dobre praktyki, to ja polecam przestudiowanie dokumentu Google C++ Style Guide, wbrew tytułowi w środku jest mnóstwo wskazówek nie tylko odnośnie formatowania kodu, ale także jakich konstrukcji języka nie używać, jakie używać i w jaki sposób to robić, prawdziwa kopalnia wiedzy.