Kolejne tematy na blogu

Dzisiejszy wpis ma znaczenie jedynie organizacyjne. Zastanawiałem się nad tematami najbliższych wpisów oraz tym w jaki sposób je ugryźć. Nie widzę większego sensu pisania małych programów typowo pod przykłady- wydaje mi się to bardzo wygodne, ale mało praktyczne w realnym zastosowaniu. Zamiast tego chciałbym stworzyć projekt, którego realizacja pozwoli mi sprawdzić w praktyce koncepcje, które do tej pory poznałem słabo lub wcale.

Projekt jaki chce zrealizować dotyczy zarządzania budżetem domowym. Wstępna koncepcja jest następująca: posiadamy klienta, serwer oraz bazę danych. Klient wykonuje operacje za pośrednictwem serwera. Wstępna funkcjonalność to możliwość zalogowania, dodanie wydatków oraz wyświetlenie ich historii. 
W ramach klienta powstanie więcej klas, które będą realizować poszczególne funkcjonalności. Taka forma pozostawia pewne możliwości manewru. Można zrobić klienta offline, który będzie sam działał na lokalnej bazie danych. W przyszłości zajdzie potrzeba zaimplementowania komunikacji między klientem a serwerem. Dodatkowo dobrze napisany serwer będzie obsługiwał zapytania (opcjonalnego) klienta webowego, bądź aplikacji mobilnych. Możemy tutaj poruszyć temat autoryzacji, szyfrowania danych, baz danych, oraz całego szeregu innych technologii. W dodatku taki projekt da mi to, czego obecnie jestem najbardziej ciekaw- poglądu na całą drogę, jaką może przebyć informacja. Od bazy danych, przez serwer napisany w C++ do klienta, który może być już napisany w przeróżnych technologiach. Jestem cholernie ciekaw tych wszystkich styków różnych języków, ich wzajemnego wsparcia oraz możliwości, które za tym idą. 

Wszystkie zagadnienia będę chciał realizować minimalnym kosztem. Oznacza to, iż najpierw napiszę bardzo proste funkcjonalności poznając wymagane do tego technologie. Poznanie jest tutaj kluczem. Nie zależy mi na fajerwerkach, a na zrozumieniu wykorzystywanych mechanizmów. Dopiero w drugiej kolejności skupię się na pobocznych funkcjonalnościach. W myśl zasady 20% kodu wykonuje 80% roboty- te 20% jest dla mnie kluczowe.

Najbliższe wpisy zacznę od klienta- wstępnego zaprojektowania, oraz implementacji pierwszych funkcjonalności. Myślę, że to świetna okazja by spróbować nieco pracy w TDD, a co za tym idzie by omówić podstawy tworzenia testów jednostkowych. Aplikacja będzie działać jedynie w konsoli. Być może w przyszłości przerzucę ją na QT i tam dorobię GUI, jednak nie jest to dla mnie priorytet- na GUI wolę skupić się podczas realizacji aplikacji mobilnej. 

Jeżeli jesteście ciekawi, odwiedzajcie blog i piszcie co zrobić lepiej. Być może wyjdzie z tego może niezła seria tutorialów dla innych użytkowników ;) 

ps.
zapomniałbym wspomnieć. Podczas tworzenia oprogramowania, będę bazował na książce "Zwinne wytwarzanie oprogramowania. Najlepsze zasady, wzorce i praktyki" (aut. Robert C. Martin). Postaram się schowć w kieszeń swoją kruchą wiedzę o programowaniu i jak najbardziej dostosować się do porad z książki.