Cześć. Z tej strony Radek. Jestem projektantem – programistą w Comarch już prawie od 10 lat i chciałabym Wam dzisiaj opowiedzieć o tym, czym na co dzień zajmujemy się wraz z zespołem w firmie.
Jesteśmy nowym zespołem, którego misją jest utworzenie nowej wersji systemu Comarch ERP Egeria. Z poprzedniego zespołu zajmującego się systemem, wyodrębniliśmy grono doświadczonych ekspertów, aby móc odpowiednio ukierunkować tworzenie nowego oprogramowania. Osoby te mają świadomość złożoności zagadnień, z którymi na co dzień spotykaliśmy się podczas projektowania systemu, wiedzą czego oczekuje rynek od systemów tego typu oraz jakie zagadnienia okazywały się problematyczne w przeszłości.
Czym natomiast jest Comarch ERP Egeria? To system do zarządzania całością przedsiębiorstwa. Istotne tutaj jest przeznaczenie takiego systemu.
Egeria adresowana jest dla administracji publicznej, samorządów, edukacji, a nawet szpitali czy przedsiębiorstw użytku publicznego np. elektrociepłowni. W każdej z tych jednostek spotykamy się jednak z różnymi potrzebami – na przykład w różny sposób układany jest grafik czasu pracy pracowników. Niektóre obszary, na przykład podatki są jednak dedykowane wyłącznie do pewnych grup odbiorców. Podsumowując,
pokrótce umożliwiamy realizację procesów biznesowych zachodzących w dużych – nazwijmy to w cudzysłowie przedsiębiorstwach publicznych – od samego początku, aż do końca.
System jednak tak naprawdę tworzą ludzie. Za samą implementację zazwyczaj odpowiedzialni są programiści, lecz tak naprawdę wszystko zaczyna się od pomysłu.
Sporo młodych osób wybrało ten kierunek z uwagi wyłącznie na potencjalne wysokie zarobki w branży w przyszłości, lecz to jest droga do szybkiej autodestrukcji, jeżeli człowiek nie posiada w tym odrobiny pasji.
Dobry programista to przede wszystkim osoba otwarta na wiedzę, która nie boi się nowych wyzwań. Języki czy frameworki zmieniają się dość często. Obecnie co pół roku mamy nową wersję Javy. Pomocne zazwyczaj są studia na kierunku technicznym, które uczą abstrakcyjnego myślenia. Sama nauka języka, jego składni - nie mając podstaw - to tak jak budowanie domu na piasku.
Jakich umiejętności poszukujemy, jakie umiejętności powinna posiadać osoba aplikująca do naszego zespołu? Przede wszystkim wymagamy znajomości Javy oraz logicznego sposobu myślenia, resztę – czyli tak naprawdę frameworków i pozostałych narzędzi można douczyć się w trakcie. Tak jak wspomniałem, to są tylko i wyłącznie narzędzia, które każdy dobry programista jest w stanie przyswoić w dość krótkim czasie.
Do kompletu oczywiście przydaje się znajomość narzędzi typu na przykład kontroli wersji, najlepiej Git’a, ale również znajomość baz danych, pewnych koncepcji na poziomie abstrakcyjnym.
Nieodłącznym elementem systemów ERPowych są bazy danych. My akurat posiadamy metamodel, w którego warstwie wykonywane są zapytania, więc dobrze też znać podstawy języka SQL, aby móc optymalnie odpytywać o dane w naszym Object Query Language. Idealnie byłoby, aby osoba znała też branżę, którą będzie wspierać swą twórczością. Te zagadnienia akurat pozostawiamy już naszym analitykom, aczkolwiek fajnie jest, jeżeli ktoś z tym się identyfikuje. Umiejętności miękkie, przede wszystkim dobra komunikatywność również ułatwiają pracę, przede wszystkim w zespole.
Może teraz dla odmiany opowiem o typowym dniu pracy w zespole.Praca z kodem to tylko część dnia programisty tak naprawdę. Poza codziennym stand-up’em zespołu programista zazwyczaj konsultuje sposób implementacji – niejednokrotnie zdarza się, że projektant nie przewidzi wszystkich corner-case’ów. Programista mający doświadczenie w danym module niejednokrotnie też może zaproponować lepsze rozwiązania, aniżeli sam architekt. Dodatkowo powinniśmy przetestować swój kod, poprawić w nim błędy, jeśli takie wystąpią oraz przygotować fragment dokumentacji po wykonawczej.
Największym wyzwaniem jednak jest stworzyć takie rozwiązanie, aby przetrwało ono kolejne lata – wszyscy doskonale wiemy, w jakim tempie zmienia się prawo w Polsce – nasze oprogramowanie musi uwzględniać te nowelizacje, a w dodatku poprawnie działać w odpowiednich okresach czasowych. Jako przykład mogę tutaj podać naliczanie wyrównań wynagrodzeń za kilka miesięcy wstecz dla prawa, które zostało ustanowione właśnie w tym miesiącu, ale uwzględnia zasady wynagrodzenia wraz ze stosownymi stopami podatkowymi z odpowiednich okresów.
Jakie wyzwania stoją przed osobą aplikującą do naszego zespołu? No myślę, że przede wszystkim to odnalezienie się przy pomocy szkoleń oraz kolegów z zespołu w naszym autorskim frameworku firmowym. Na początku może się on wydawać nieco skomplikowany, ale po zagłębieniu się w szczegóły oraz chwilowej pracy z nim zaczynamy dostrzegać, dlaczego jest on tak skonstruowany, skąd pewne decyzje.
Framework pozwala nam na delikatne uniezależnienie od technologii. Dowolny system operacyjny, dowolna relacyjna baza danych, części generyczne na przykład w innym języku, przykładowo w Kotlinie albo z dodatkami Lomboka – tutaj nie ma takiego problemu, ponieważ pewna warstwa kodu jest automatycznie generowana na podstawie metamodelu. Sam kod biznesowy oczywiście pozostaje już tworzony przy użyciu Javy oraz można oczywiście wykorzystywać istniejące na rynku biblioteki, które znacznie wspomagają rozwój oraz wytwarzanie oprogramowania.
Należy jednak zwrócić uwagę na fakt, że tak jak już wspomniałem na początku język, sama składnia rozwija się bardzo szybko. Obecnie mamy Javę w wersji 15, lecz za 10 lat przy zachowaniu obecnego cyklu wydawniczego uwaga będzie to wersja 35, więc składnia języka może wyglądać zupełnie inaczej. Dobrze byłoby, aby przez ten czas nie przepisywać tak ogromnego systemu od podstaw – w szczególności tych najprostszych ekranów CRUDowych, których mamy całe mnóstwo.
Jak wygląda zatem mój dzień pracy, w stosunku do dnia pracy programisty. Tutaj przypomnę na stanowisku projektanta – programisty. Tak naprawdę to zależy od etapu w projekcie. Obecnie jesteśmy na początku, więc głównie skupiam się na projektowaniu rozwiązań generycznych. Czasem jest to tylko koncepcja, którą następnie weryfikują programiści, a czasem cały proof of concept włącznie z implementacją oraz dokumentacją. Niejednokrotnie też służę pomocą pozostałym kolegom w zespole, często wykonuję code review, więc tak naprawdę czasu na programowanie zostaje mało. Jeśli jednak po przygotowaniu projektu technicznego dla programistów zostaje mi chwila – również chętnie programuję. Myślę, że projektant - programista jest naturalną ścieżką rozwoju programisty oprócz alternatywnej ścieżki managerskiej. Zawsze chciałem tworzyć takie rozwiązania, które posłużą dłużej, będą reużywalne, a późniejszy wymóg modyfikacji oprogramowania nie będzie oznaczał konieczności przepisania całości. Dotychczasowe projekty nauczyły mnie, że każdy klient posiada inne potrzeby, inne procesy, a same procesy w wielu firmach różnią się. Pomimo delikatnych różnic rozbieżności w kodzie potrafią być bardzo znaczne.
Sztuką jest tworzyć oprogramowanie na tyle konfigurowalne, aby jeden codebase mógł obsłużyć wiele przypadków. To doświadczenie tak naprawdę nabywane jest z czasem, wraz z kolejnymi przypadkami biznesowymi. Sam modyfikując swoje poprzednie projekty, widzę, które decyzje z biegiem czasu były dobre, a w szczególności wtedy, gdy klient twierdził, że na start jest to tylko i wyłącznie mała aplikacja i na tym zakończymy współpracę, która służy tylko i wyłącznie do obsługi tylko jednego procesu, a z biegiem czasu tak naprawdę projekt rozrastał się do kolosalnych rozmiarów.
Dodam tylko, że branża IT rozwija się błyskawicznie. Duże projekty w momencie oddawania używają na starcie już przeterminowanych technologii, gdybyśmy w trakcie rozwoju nie aktualizowali części wykorzystywanych komponentów. Kilka miesięcy przerwy i wypadamy z rynku. Widać to po ilości pojawiających się nowych rozwiązań na rynku, szybkiego tempa zmian frameworków oraz całej architektury. Kilka lat temu większość osób nie słyszała o systemach rozproszonych czy chmurze – dzisiaj jest już to codziennością. Codziennie, w moim feedly pojawia się również całe mnóstwo artykułów. Tylko pobieżne przeglądnięcie ich zajmuje około godziny. Dla projektantów - programistów szczególnie przydatne są zagraniczne źródła, na przykład infoq.com, różne blogi poszczególnych znanych osobistości bądź finalnie literatura z Safari Books, do którego mamy firmowy dostęp. Z tego powodu musimy ostrożnie dobierać technologię, która pozwoli nam utrzymać ogromny system przez kilka lat, nie przepisując go jednocześnie co pół roku. Takie możliwości daje nam autorskie rozwiązanie w firmie wprowadzające dodatkową warstwę abstrakcji, dzięki której zagadnienia technologiczne sprowadzone są do pewnego wydzielonego obszaru systemu.
Natomiast, jak wygląda ścieżka kariery programisty? Tak jak już wspominałem, możemy specjalizować się na ścieżce technicznej – w kierunku projektanta, a następnie architekta lub pójść w kierunku zarządzania zespołem, lub produktem. Alternatywnie zawsze można przekwalifikować się na przykład na testera, gdzie umiejętności programistyczne również są potrzebne. Z biegiem czasu, gdy przestaniemy nadążać już za technologią, a po zaimplementowanych projektach zostanie nam ogrom wiedzy biznesowej, otwiera się przed nami jeszcze ścieżka - analityczna bądź wdrożeniowa. W ostateczności, jeżeli nie chcemy rozstawać się z kodem – zawsze możemy zostać w cudzysłowie starszym programistą.
Czym jest zatem nasz najnowszy projekt system Comarch ERP Egeria?Musimy przede wszystkim zaznaczyć, że nie jest to projekt, a produkt, czyli coś więcej aniżeli projekt, ponieważ myślimy tutaj długofalowo i w żadnym przypadku nie możemy iść na skróty. Zła decyzja projektowa po pewnym czasie na pewno odbije się nam czkawką. Obecnie budujemy od podstaw nowy system klasy ERP – tak jak już wspominałem na początku, grono odbiorców jest dość szerokie. Aktualny etap to przede wszystkim wytwarzanie nowego oprogramowania bazującego na funkcjonalnościach zaprojektowanych przez doświadczony zespół, który wiele lat rozwijał poprzednią wersję systemu. Nie działamy w oderwaniu od rynku, ponieważ posiadamy już klientów, którzy są zainteresowani nową wersją oraz wymagają od nas oczywiście pewnych funkcjonalności. Natomiast, to nie jest tylko część biznesowa, ale i techniczna. Elementy, które zostaną wypracowane teraz, będą musiały przetrwać kolejne lata próby na serwerach produkcyjnych, umożliwiając elastyczną pracę naszym wymagającym klientom.
Czym tak naprawdę zajmują się osoby, które świeżo dołączą do naszego zespołu?Tak naprawdę zaczynamy od szkolenia. W początkowym okresie obowiązki to przede wszystkim tworzenie bądź rozbudowa istniejącego modelu danych, implementacja logiki biznesowej według przygotowanych wytycznych od projektantów oraz odzwierciedlenie wymagań w interfejsie użytkownika na podstawie makiet opracowanych przez zespół UX. Ambitniejsze osoby mogą spróbować swoich sił również w projektowaniu nowych rozwiązań. Kolejna grupa zadań to implementacja przetwarzania danych w systemie dla takich procesów biznesowych jak: generacja księgowań i rozrachunków dla dokumentów księgowych, obliczanie płac na przykład generacja wymiaru podatku, czy dla branży komercyjnej rozliczanie opłat za ciepło lub prąd.
ERP to nie tylko ładnie prezentujące się interfejsy użytkownika – to również mnóstwo wspomnianych procesów biznesowych działających w tle oraz spora ilość raportów, bez których księgowe nie wyobrażają sobie życia. Integracje z systemami zewnętrznymi przy pomocy różnych protokołów to również codzienność. Już od początku istnienia systemu pobieramy dane z webserwisów na przykład Głównego Urzędu Statystycznego, czyli dane o kontrahentach z bazy REGON oraz dane adresowe z bazy TERYT, dane odnośnie do kursu walut z Narodowego Banku Polskiego oraz wiele jeszcze innych integracji. To tak naprawdę podstawowe encje w systemie i warto, aby użytkownik nie musiał wprowadzać ich ręcznie. Dość liczne są również integracje z systemami komercyjnymi zarówno własnymi rozwiązaniami Comarch, ale także z systemami innych dostawców na przykład hurtowniami danych lub systemów Elektronicznego Obiegu Dokumentów.
Atutem projektu jest przede wszystkim to, że tworzymy rozwiązanie od podstaw i nie ma tutaj bug’fix’ingu. Dla osób, które nie boją się wyzwań to dobra okazja do zdobycia wiedzy eksperckiej w wybranym kierunki oraz możliwość awansu w dość krótkim czasie na lidera grupy bądź podzespołu. Ponadto można zdobyć cenne doświadczenie, w jaki sposób budowane są naprawdę duże systemy, odporne na zmiany procesów w czasie.
Chciałbym już tutaj z Wami się pożegnać, więc na zakończenie pozostaje mi tylko zaprosić do współpracy i mam nadzieję, że zobaczymy się w biurze. Dzięki, hej.