{"id":1148,"date":"2018-06-29T20:23:11","date_gmt":"2018-06-29T20:23:11","guid":{"rendered":"http:\/\/hayperek.pl\/?p=1148"},"modified":"2018-07-30T20:23:25","modified_gmt":"2018-07-30T20:23:25","slug":"podsumowanie","status":"publish","type":"post","link":"https:\/\/hayperek.pl\/en\/2018\/06\/29\/podsumowanie\/","title":{"rendered":"Podsumowanie"},"content":{"rendered":"<p>Tak, to ju\u017c! Dzi\u015b nadszed\u0142 ten dzie\u0144 &#8211; setny dzie\u0144 naszego wyzwania. A wi\u0119c czas spojrze\u0107 wstecz i odpowiedzie\u0107 na wa\u017cne pytanie&#8230;<\/p>\n<h5>Czy uda\u0142o nam si\u0119 osi\u0105gn\u0105\u0107 to, co za\u0142o\u017cyli\u015bmy?<\/h5>\n<p>W czasie stu dni zrealizowali\u015bmy zdecydowan\u0105 wi\u0119kszo\u015b\u0107 naszych plan\u00f3w &#8211; pocz\u0105wszy od poszukiwania najlepszej platformy sprz\u0119towej, po zaprojektowanie architektury systemu, implementacj\u0119, a\u017c po skonstruowanie prototypu.<\/p>\n<p>Ka\u017cdy z powy\u017cszych etap\u00f3w sk\u0142ada\u0142 si\u0119 oczywi\u015bcie z mniejszych fragment\u00f3w, kt\u00f3rych nie spos\u00f3b w tym miejscu wymieni\u0107. Cz\u0119\u015b\u0107 z nich by\u0142a drobiazgowo zaplanowana, cz\u0119\u015b\u0107 powstawa\u0142a na &#8222;gor\u0105co&#8221;, w miar\u0119 post\u0119pu prac. St\u0105d te\u017c niezwykle trudno jest oceni\u0107, kt\u00f3re elementy zosta\u0142y zrealizowane w 100%&#8230;<\/p>\n<p>Od strony hardware&#8217;u zasadnicza trudno\u015b\u0107 le\u017ca\u0142a w stworzeniu mo\u017cliwie szybko stabilnej platformy sprz\u0119towej dla dalszego rozwijania oprogramowania. Od pewnego momentu wskazane jest bowiem testowanie w \u015brodowisku jak najbardziej zbli\u017conym do docelowego. Poniewa\u017c na realizacj\u0119 projektu przeznaczyli\u015bmy jedynie 100 dni, nie mogli\u015bmy sobie pozwoli\u0107 na budowanie kilku, stopniowo ulepszanych prototyp\u00f3w &#8211; to poch\u0142on\u0119\u0142oby zbyt wiele cennego czasu. Musieli\u015bmy &#8222;upchn\u0105\u0107&#8221; jak najwi\u0119cej funkcjonalno\u015bci i komponent\u00f3w na etapie &#8222;proof-of-concept&#8221;, kiedy to operowali\u015bmy na p\u0142ytce prototypowej i chmarze kabli po\u0142\u0105czeniowych. Nast\u0119pnie trzeba by\u0142o ca\u0142\u0105 wiedz\u0119, ca\u0142e zebrane do\u015bwiadczenie i szkic projektu przenie\u015b\u0107 na jedyny prototyp&#8230;<\/p>\n<p>Sporym zaskoczeniem by\u0142 fakt, i\u017c \u00f3w prototyp uda\u0142o si\u0119 uruchomi\u0107 bez wi\u0119kszych problem\u00f3w i to ju\u017c za pierwszym razem. Jest to o tyle ciekawe, i\u017c system zawiera ca\u0142kiem sporo po\u0142\u0105cze\u0144 sygna\u0142\u00f3w o stosunkowo wysokiej cz\u0119stotliwo\u015bci, wra\u017cliwych na zak\u0142\u00f3cenia oraz wszelkie niedoci\u0105gni\u0119cia przy projektowaniu p\u0142ytki drukowanej i prowadzeniu szyn zasilania. Oczywi\u015bcie do schematu wkrad\u0142o si\u0119 kilka drobnych b\u0142\u0119d\u00f3w &#8211; ale jest to przecie\u017c przywilej prototypu \ud83d\ude42<\/p>\n<p>Strona oprogramowania, mimo i\u017c nie posiada\u0142a a\u017c tak wy\u015brubowanych ogranicze\u0144 czasowych, wcale nie okaza\u0142a si\u0119 \u0142atwiejsza. Czym\u015b co podkre\u015bla\u0142em na ka\u017cdym niemal\u017ce kroku by\u0142a jasna i przemy\u015blana architektura najmniejszego nawet fragmentu systemu. To w\u0142a\u015bnie ona w po\u0142\u0105czeniu z zestawem test\u00f3w jest w stanie zapewni\u0107, \u017ce oprogramowanie, kt\u00f3re tworzymy b\u0119dzie stabilne i \u0142atwe w utrzymaniu. Nie spos\u00f3b bowiem napisa\u0107 software, kt\u00f3ry b\u0119dzie zlepkiem kodu, o zagmatwanej strukturze, kt\u00f3ry &#8222;jako\u015b przypadkiem dzia\u0142a&#8221;. <\/p>\n<p>To w\u0142a\u015bnie zaprojektowanie takiej struktury stanowi\u0142o g\u0142\u00f3wny problem i poch\u0142on\u0119\u0142o ogromn\u0105 cz\u0119\u015b\u0107 przeznaczonego czasu. Wymaga\u0142o to bowiem drobiazgowego wr\u0119cz przemy\u015blenia ka\u017cdego aspektu, przewidzenia ka\u017cdego mo\u017cliwego scenariusza dzia\u0142ania. <\/p>\n<h5>Kilka przemy\u015ble\u0144 i wniosk\u00f3w<\/h5>\n<p>Dobr\u0105 praktyk\u0105 w wielu nowoczesnych metodologiach tworzenia oprogramowania jest tzw. retrospektywa. W skr\u00f3cie polega ona na spojrzeniu wstecz i pr\u00f3bie oceny projektu, zadania czy sprintu, okre\u015blenia co uda\u0142o si\u0119 nam osi\u0105gn\u0105\u0107, co by\u0142o cennym do\u015bwiadczeniem, a co mo\u017ce wymaga poprawy i wi\u0119kszej uwagi&#8230; No to zaczynamy!<\/p>\n<p>Co by\u0142o ok:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"pro_item\">Tworzenie oprogramowania w formie kolejnych, \u015bci\u015ble rozdzielonych warstw i modu\u0142\u00f3w,<\/li>\n<li class=\"pro_item\">Re-u\u017cycie dojrza\u0142ego kodu z poprzednich projekt\u00f3w,<\/li>\n<li class=\"pro_item\">Zastosowanie zunifikowanego podsystemu graficznego, opartego na widgetach,<\/li>\n<li class=\"pro_item\">Wydzielenie backendu danych,<\/li>\n<li class=\"pro_item\">Zbudowanie stanowiska testowego, symuluj\u0105cego rzeczywiste, docelowe \u015brodowisko pracy,<\/li>\n<li class=\"pro_item\">Konsekwentne utrzymywanie kodu w dobrej jako\u015bci, ci\u0105g\u0142\u0105 refaktoryzacja oraz unikanie &#8222;chodzenia na skr\u00f3ty&#8221;,<\/li>\n<li class=\"pro_item\">Szerokie wdro\u017cenie test\u00f3w jednostkowych,<\/li>\n<li class=\"pro_item\">Przechowywanie kodu pod kontrol\u0105 Git&#8217;a,<\/li>\n<\/ul>\n<p>Co powinni\u015bmy zrobi\u0107 lepiej:<\/p>\n<ul class=\"pro_cons_list\">\n<li class=\"cons_item\">Wprowadzenie test\u00f3w komponentowych oraz integracyjnych,<\/li>\n<li class=\"cons_item\">Uruchomienie ca\u0142ej aplikacji r\u00f3wnie\u017c na komputerze PC, w celu \u0142atwiejszego debugowania i testowania,<\/li>\n<li class=\"cons_item\">Stworzenie sp\u00f3jnej i usystematyzowanej listy rzeczy do zrobienia &#8222;to-do&#8221;,<\/li>\n<\/ul>\n<p>Do poszczeg\u00f3lnych temat\u00f3w na pewno powr\u00f3c\u0119 jeszcze w nast\u0119pnych artyku\u0142ach (tak, tak&#8230; b\u0119d\u0105 kolejne!). Chcia\u0142bym natomiast podzieli\u0107 si\u0119 z Wami jedn\u0105, szczeg\u00f3lnie istotn\u0105 moim zdaniem, konkluzj\u0105:<\/p>\n<blockquote><p>To, \u017ce w oprogramowaniu pojawiaj\u0105 si\u0119 b\u0142\u0119dy jest rzecz\u0105 naturaln\u0105. I rzeczywi\u015bcie, cz\u0119\u015b\u0107 z nich wynika z niedopracowanych narz\u0119dzi, b\u0142\u0119dnej dokumentacji&#8230; Jednak my\u015bl\u0119, \u017ce jest to nie wi\u0119cej ni\u017c 10%. Pozosta\u0142e 90% jest wynikiem naszego lenistwa i niechlujno\u015bci &#8211; chodzenia &#8222;na skr\u00f3ty&#8221;, pisania kodu &#8222;po \u0142ebkach&#8221; i aby tylko uruchomi\u0107. Tracimy w ten spos\u00f3b cenne godziny, tylko dlatego, i\u017c wcze\u015bniej szkoda nam by\u0142o po\u015bwi\u0119ci\u0107 minuty na zrobienie czego\u015b solidnie.<\/p>\n<p>To jak zwijanie kabla s\u0142uchawek na szybko, aby tylko wepchn\u0105\u0107 do kieszeni&#8230; Po to by za chwil\u0119 mozolnie go rozpl\u0105tywa\u0107<\/p><\/blockquote>\n<h5>Sukces czy pora\u017cka?<\/h5>\n<p>C\u00f3\u017c, dla wielu wynik wyzwania 100 dni b\u0119dzie rozczarowaniem &#8211; nie powsta\u0142o przecie\u017c gotowe urz\u0105dzenie, kt\u00f3re ka\u017cdy mo\u017ce za\u0142o\u017cy\u0107 w swoim samochodzie. Musimy jednak pami\u0119ta\u0107, jakie by\u0142y pierwotne za\u0142o\u017cenia. Naszym celem by\u0142o przede wszystkim stworzenie prototypu i pokazanie, \u017ce da si\u0119 w tak kr\u00f3tkim czasie stworzy\u0107 bardzo konkretny i ambitny projekt. Ponadto, mam nadziej\u0119, uda\u0142o si\u0119 te\u017c przekaza\u0107 w tych stu artyku\u0142ach sporo cennego do\u015bwiadczenia, kt\u00f3re by\u0107 mo\u017ce oka\u017ce si\u0119 dla Was przydatne.<\/p>\n<p>Sam odbieram te 100 dni jako cenn\u0105 lekcj\u0119. To wyzwanie nie tylko pozwoli\u0142o mi pog\u0142\u0119bi\u0107 wiedz\u0119 z zakresu programowania i projektowania, ale co wa\u017cniejsze &#8211; nauczy\u0142o szanowa\u0107 czas, roztropnie z niego korzysta\u0107 i lepiej planowa\u0107. U\u015bwiadomi\u0142em sobie dzi\u0119ki temu, \u017ce to nie otaczaj\u0105cy nas \u015awiat odbiera nam cenne sekundy i minuty \u017cycia, a my sami pozwalam si\u0119 z nich okrada\u0107&#8230;<\/p>\n<p>Czy to ostatni artyku\u0142? Absolutnie nie&#8230; \ud83d\ude42 Parafrazuj\u0105c s\u0142ynne s\u0142owa <a href=\"https:\/\/pl.wikiquote.org\/wiki\/Winston_Churchill\">Winstona Churchilla<\/a>: <\/p>\n<p>To nie jest koniec, to nawet nie jest pocz\u0105tek ko\u0144ca. Ale na pewno jest to koniec pocz\u0105tku!<\/p>","protected":false},"excerpt":{"rendered":"<p>Tak, to ju\u017c! Dzi\u015b nadszed\u0142 ten dzie\u0144 &#8211; setny dzie\u0144 naszego wyzwania. A wi\u0119c czas spojrze\u0107 wstecz i odpowiedzie\u0107 na wa\u017cne pytanie&#8230; Czy uda\u0142o nam si\u0119 osi\u0105gn\u0105\u0107 to, co za\u0142o\u017cyli\u015bmy? W czasie stu dni zrealizowali\u015bmy zdecydowan\u0105 wi\u0119kszo\u015b\u0107 naszych plan\u00f3w &#8211; pocz\u0105wszy od poszukiwania najlepszej platformy sprz\u0119towej, po zaprojektowanie architektury systemu, implementacj\u0119, a\u017c po skonstruowanie prototypu. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-1148","post","type-post","status-publish","format-standard","hentry","category-stodni"],"_links":{"self":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/comments?post=1148"}],"version-history":[{"count":10,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1148\/revisions"}],"predecessor-version":[{"id":2490,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/posts\/1148\/revisions\/2490"}],"wp:attachment":[{"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/media?parent=1148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/categories?post=1148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hayperek.pl\/en\/wp-json\/wp\/v2\/tags?post=1148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}