czwartek, 25 grudnia 2014

Świeżak w korpo - czyli różnice między tym co na studiach, a w pracy

Pierwsze kroki...


Od pół roku pracuję w pewnej firmie, którą chyba można nazwać korporacją. W dziale, w którym jestem zajmujemy się głównie rozwijaniem, dostosowywaniem i sprzedażą sporej aplikacji dla różnych, znanych marek takich jak Airbus, Volkswagen, Audi, Renault, Adidas, Simens, Apple itp. itd.
Jest to moja pierwsza praca na etat. Wcześniej wprawdzie miałem jakieś praktyki, ale odbywałem je w małej ok. ośmio-osobowej firmie, gdzie połowicznie robiłem strony webowe, a połowicznie grafikę, więc to się nie liczy :P
Powoli dochodząc do tematu, który zamierzałem zawrzeć w tym poście, chciałbym przedstawić Wam moje subiektywne porównanie, tego z czym mamy do czynienia na studiach, a tym z czym trzeba się mierzyć podczas rozwijania oprogramowania w pracy. Oczywiście, tak jak sugeruje temat wpisu, jestem jeszcze absolutnym nowicjuszem w kwestii pracy programisty w większej firmie, ale mimo to, przez te pół roku parę rzeczy od razu rzuciło mi się w oczy.

"Jak będziesz po riwiu, to zobacz czy się bilduje, zmerdżuj zmiany z repo i zaczekinuj" - czyli programistyczno-korporacyjny slang.

sobota, 6 grudnia 2014

Wzorce projektowe #03 - Metoda Wytwórcza (ang. Factory Method)

Cześć, tym razem postanowiłem przybliżyć sobie i Wam wzorzec metody wytwórczej. Jest on relatywnie często wykorzystywany i wplatany w inne wzorce - głównie wzorce fabryki. Myślę więc, że warto go poznać :)

Idea wzorca: 

Metoda wytwórcza należy do grupy wzorców konstrukcyjnych. Określa interfejs do tworzenia obiektów i przyjmuje na siebie odpowiedzialność za ich produkcję. Jednocześnie robi to w sposób elastyczny, to znaczy, że łatwo można dodać kolejny typ produktu do tworzenia. Dzięki temu aplikacja może zachować modułową strukturę.

Implementacja:

Generalnie implementacja opiera się na stworzeniu klasy kreującej różne obiekty na podstawie przesłanego parametru, jednak czasem może wystąpić potrzeba aby taka klasa dla tych samych parametrów tworzyła nieco inne produkty w zależności od kontekstu, dla tego warto stworzyć również interfejs określający funkcjonalność kreatora, aby w razie potrzeby móc dorobić kolejne implementacje opierające się na tym samym interfejsie.

Tutorial:

Tym razem tutorial podzieliłem na dwie części.
Pierwsza z nich to krótki, 5-cio minutowy filmik, w którym staram się przybliżyć ideę wzorca na prostym przykładzie, podpartym diagramami. Zaczynamy od naiwnej implementacji bez wzorca, a następnie modyfikujemy pomysł z użyciem metody wytwórczej, tak aby aplikacja stała się przejrzystsza i bardziej elastyczna.
Druga część to implementacje wcześniej wspomnianego przykładu. Przy okazji pokazuję również, trochę niestandardową metodę kodowania... zresztą, zobaczcie sami :)

Pierwsza część (koncepcja + wizualizacja):
Druga część (implementacja):

sobota, 2 sierpnia 2014

Efektywna praca w Eclipse #03 - szablony kodu

Hej, tym razem tutorial dotyczy szablonów kodu, które możemy tworzyć w Eclipse. Dzięki nim, kod który często musimy powtarzać (System.out-y, kod pętli, szkielety dokumentów, frameworków itp.) napiszemy (wygenerujemy) błyskawicznie, oszczędzając sporo czasu.

wtorek, 8 lipca 2014

Efektywna praca w Eclipse #02 - Debugger



Cześć, w tym kursie pokazuję jak korzystać z Eclipse'owego debuggera. Omawiam podstawowe funkcjonalności jak nieco bardziej wyspecjalizowane.
Jeżeli nie do końca wiecie do czego służy debugger, szukacie błędów w kodzie przy pomocy kartki i długopisu lub po prostu jakoś nigdy nie było po drodze, żeby nauczyć się z niego korzystać to ten tutorial jest dla Was :).



piątek, 13 czerwca 2014

Wzorce projektowe #02 - Adapter

Tak, udało mi się wreszcie nakręcić kolejny tutorial z tej tematyki :) Dlaczego tak długo trzeba było czekać? Studia, sesja, nauka i tego typu wymówki... jak już się usprawiedliwiłem to przejdźmy do omówienia "Adaptera".

Idea wzorca

Adapter jest jednym ze wzorców strukturalnych, który przekształca - adaptuje jeden interfejs do drugiego. Pozwala on porozumiewać się klasom o niezgodnych, nie kompatybilnych interfejsach tworząc "przejściówkę" między nimi.
Uwaga: pisząc 'interfejs' - w odniesieniu do tego wzorca, nie muszę mieć koniecznie na myśli interfejsów javowych w sensie elementu specyfikacji języka, ale po prostu możliwości - metody jakie udostępnia jakaś klasa (choć w przykładzie, faktycznie będę posługiwał się javowymi interfejsami).

Implementacja:

Standardowo Adapter można zaimplementować na dwa sposoby - klasowy (przez dziedziczenie) i obiektowy (przez kompozycję).

Adapter klasowy: dziedziczy po klasie adaptowanej w związku z czym wszelkie zmienione, nowe, dziedziczne składowe tej klasy są w adapterze update'owane "z automatu". Niestety nie umożliwia adaptacji innych klas pochodnych klasy adaptowanej.

Adapter obiektowy: wszelkie zmiany interfejsu w klasie adaptowanej trzeba obsługiwać ręcznie, ale jest pod tym względem bardzo elastyczny. Umożliwia adaptację również klas pochodnych, klasy adaptowanej.

Tutorial:

Ja preferuję metodę obiektową, dlatego właśnie taką zobaczycie na filmiku, ale zachęcam, aby w ramach ćwiczeń spróbować również implementacji klasowej. Tymczasem zapraszam do oglądania i nauki :)


sobota, 19 kwietnia 2014

Test: ArrayList vs LinkedList - zaskakujące wyniki


Ważnym elementem efektywnego programowania w Javie jest znajomość kolekcji. Trzeba je po prostu znać aby wiedzieć, która z nich najlepiej sprawdzi się w danej sytuacji. Zaczynamy wtedy szukać odpowiedzi w internecie i/lub przeglądać ich wewnętrzną implementację. Chyba najczęściej porównywanymi kolekcjami są: ArrayList i LinkedList.

niedziela, 6 kwietnia 2014

Wzorce projektowe #01 - Singleton

Zgodnie z zapowiedzią stworzenia serii o wzorcach projektowych, oto pierwszy wpis z tej tematyki :)

Co to są wzorce projektowe i kiedy je stosować?

Wzorce projektowe są pewnymi sprawdzonymi sposobami na rozwiązanie jakiś powtarzających się problemów z dziedziny projektowania oprogramowania. Powstawały one na bazie doświadczeń programistów i były przez nich wielokrotnie udoskonalane. Warto je znać aby nie musieć odkrywać koła na nowo, ale szybko wdrażać sprawdzone rozwiązania (niekiedy nieco zmodyfikowane i dostosowane do aktualnych potrzeb zadania).

Zaczynamy!

Pierwszy wzorzec, którym postanowiłem się zająć to Singleton. Ze względu na prostotę jego idei oraz łatwość implementacji, wydaje mi się, że jest idealny aby łagodnie rozpocząć naukę wzorców.

Koncepcja Singletona jest taka, że klasa która go implementuje musi zapewnić mechanizm ograniczający ilość możliwych instancji tej klasy do maksymalnie jednej. Czyli jeżeli mamy klasę-Singletona, to w całym programie możemy stworzyć i używać maksymalnie jeden jej egzemplarz.

Przykłady zastosowań:
- klasa Bank w systemie bankowym - raczej chcielibyśmy aby istniał tylko jeden jej egzemplarz w systemie.
- różnego rodzaju menedżery zarządzające danymi - często mogłoby dojść do błędów trudnych do wychwycenia gdyby wiele takich menedżerów mieszało w danych jednocześnie.
- system plików - wystarczy jeden opis formatu plików.

Tutorial - dwa sposoby implementacji Singletona w języku Java:

wtorek, 1 kwietnia 2014

Efektywna praca w Eclipse #01 - skróty klawiaturowe

Postanowiłem, że pierwszy kurs z serii "Efektywna praca w Eclipse" dotyczyć będzie skrótów klawiaturowych, ponieważ wydaje mi się, że jest to podstawowa i najprostsza do nauki rzecz pozwalająca w znacznym stopniu przyspieszyć pracę w tym IDE.

Tak jak zakomunikowałem wcześniej, tutorial jest w formie wideo. Jest to mój pierwszy filmik stworzony do publikacji i nie powiem - trochę problemów z tym było. Zdaję sobie sprawę, że jakość obrazu, nawet na HD nie jest rewelacyjna, a mój komentarz jest często mruczeniem pod nosem, ale nie miałem już siły z tym walczyć. Oprócz tego cały materiał wyszedł mi trochę za długi, w przyszłości spróbuję robić lżejsze ok. 10-cio minutowe kursy. Postaram się nad tym pracować i dołożę wszelkich starań aby każdy kolejny filmik był coraz lepszy.

Tymczasem, zapraszam do obejrzenia:

Video-tutoriale :)

Wiem, że systematyczność moich wpisów na blogu pozostawia wiele do życzenia, co jest spowodowane po prostu brakiem czasu (uczelnia jest jego głównym złodziejem), jednak pomysłów na "content" mam coraz więcej - co średnio ze sobą współgra.
Tak czy inaczej przez ostatnich parę miesięcy udało mi się zgromadzić parę pomysłów na kolejne wpisy związane z programowaniem. Pojawiły się one dość naturalnie, bo po prostu wynikły z tematów, których się teraz uczę. Postanowiłem zawrzeć je w 'seriach' tematycznych kursów i publikować... w formacie wideo

Czemu tak? Ponieważ Wam - odbiorcom, będzie łatwiej i szybciej ogarnąć to co się dzieje w programie, oglądając filmik i słuchając komentarza, niż wczytywać się i dopasowywać odpowiedni opis do właściwego fragmentu kodu. No i ja również będę miał łatwiej, z tego samego powodu - nie będę musiał męczyć się z opisami, a po prostu nagram to co dzieje się u mnie na ekranie wraz z komentarzem, co pozwoli mi zaoszczędzić nieco czasu (mam nadzieję).
Filmiki będę wrzucał na YouTube'a, ale nie oznacza to, że tutaj nic się nie będzie działo. Na blogu zawsze pojawi się stosowny wpis, z krótkim opisem i linkiem do filmu na YT, oraz nie zabraknie wpisów, do których filmik będzie zbędny.

Kursy tematyczne, które chciałbym stworzyć / kontynuować w wersji wideo:
1. JavaFX
2. Efektywna praca w Eclipse
3. JEE - Java Enterprise Edition
4. Wzorce projektowe
5. Digital painting

No i tyle ogłoszeń. Pierwszy filmik z serii "Efektywna praca w Eclipse" już nagrany, i niebawem pojawi się w następnym wpisie :)

wtorek, 11 lutego 2014

Dlaczego nie warto wierzyć w przeznaczenie?



Wydaje mi się, że wraz z postępem nauki, maleje liczba ludzi wierzących w coś tak mistycznego jak przeznaczenie. Coraz większa cześć populacji naszego globu godzi się z poglądem, że różne dziwne, niesamowite, niemożliwe zdawałoby się zbiegi okoliczności to jednak zwykły przypadek. Niemniej jednak na pewno istnieją tacy, którzy uważają, że ich przyszłość została już dawno zaplanowana. Na pierwszy rzut oka mogłoby się wydawać, że jedna z tych teorii nie jest lepsza od drugiej, że to po prostu kwestia wiary i własnych przekonań. Moim zdaniem wcale tak nie jest i jedna z nich ma znacznie korzystniejszy wpływ na nasze życie od drugiej.