Czytaj dalej...Heap, Stack i String Pool w Javie
The post Heap, Stack i String Pool w Javie appeared first on Dev Foundry.
]]>W ramach działania aplikacji Javowej, począwszy od metody main, na Stacku (Stosie) pojawiają się jedna na drugiej ramki zawierające zmienne metod. Przestrzegają przy tym zasady LIFO (Last In, First Out). Gdy dana dana metoda zakończy swoje działanie, to jest automatycznie wypychana ze Stacka.
Każdy wątek ma swój Thread Stack, na którym przechowywane są zmienne lokalne, ale jeśli są to zmienne referencyjne, to – uwaga – same obiekty do których odnoszą się te zmienne, znajdują się na Kopcu.
Załóżmy dla przykładu, że dana klasa implementująca interfejs Runnable ma jakieś pole value typu Integer. Wtedy jeśli z tej klasy zostaną utworzone np. 2 wątki, to każdy z tych wątków będzie korzystał z tego samego obiektu do którego odnosi się zmienna value. Dzieje się tak właśnie dlatego, że ten obiekt znajduje się na Heap, a nie lokalnych stackach tych wątków.
Ale jeśli dodatkowo ta sama klasa ma jakąś metodę, która będzie miała parametr int i, to kopię tego samego parametru i będą miały obydwa wątki, każdy na swoim lokalnym Stacku.
Jak już wspominałem wyżej – wszystkie obiekty w Javie znajdują się na Kopcu.
W cyklu działania danej aplikacji, obiekty mogą należeć do różnych tzw. Generations. Wyróżnia się kilka Generations obiektów i to determinuje ich miejsce w Kopcu.
Young Generation:
Eden Space – tu trafiają nowo utworzone obiekty.
Survivor Space – tu trafiają obiekty, które przetrwają cykl Garbage Collection w Eden Space.
Old Generation:
Tenured Space – tu trafiają obiekty, które przetrwały jakiś czas w Survivor Space.
Permanent Generation/Metaspace:
Miejsce w pamięci, które zawiera różne metadane a także static metody oraz zmienne.
UWAGA: Od Javy 8 to miejsce nazywa się Metaspace i różni się tym of Permanent Generation, że dynamicznie zmienia swój rozmiar w runtime aplikacji, czego Permanent Generation nie potrafiło.
Jak widać obiekty i ich miejsce w Kopcu jest też ściśle związane z Garbage Collectorem, ale o tym w innym wpisie 
Pomijając oczywiste różnice i informacje, które opisałem powyżej, Stack i Heap różnią się od siebie jeszcze pod kilkoma innymi względami:
*To samo teoretycznie może dotyczyć jakiejś zmiennej znajdującej się na końcu metody main, ale… zakładam że to dość rzadki przypadek 
String Pool przed Javą 7 był częścią Permanent Generation. Od Javy 7 String Pool jest częścią Heap space.
Stringi w Javie są immutable, to znaczy, że jeśli napiszemy:
String s1 = "Test"; String s2 = "Test";
To Java nie przydzieli dodatkowego miejsca w String Pool dla stringa, na którego wskazuje zmienna “s2”. Tylko “s1” i “s2” będą wskazywały na to samo miejsce w pamięci.
UWAGA: Wyjątkiem jest sytuacja, kiedy stworzymy nowego Stringa za pomocą słowa kluczowego “new”, np.:
String s1 = "Test";
String s2 = new String("Test");
Wtedy nawet jeśli taki literał już istnieje w String Pool, to Java utworzy nowy obiekt typu String i umieści go na Heap.
Zaletą String Poola w Heap Space jest to, że Stringi które nie są z niczym powiązane (unreferenced Strings) podlegają usunięciu przez Garbage Collector. A w przypadku Permanent Generation przed Javą 7 nie były usuwane, bo.. były częścią Permanent Generation, której nie tykał się Garbage Collector. A jako że Permanent Generation było obszarem o stałym rozmiarze, to można było dość łatwo osiągnąć Out of Memory Error przez tworzenie zbyt dużej ilości nowych obiektów typu Stringów.
The post Heap, Stack i String Pool w Javie appeared first on Dev Foundry.
]]>Czytaj dalej...Słowo kluczowe Static w Javie
The post Słowo kluczowe Static w Javie appeared first on Dev Foundry.
]]>Dlatego też pierwszy kod, który wykonuje się w Javie pochodzi z bloków static. Najpierw klasa wczytywana jest do Class Loadera, a dopiero później jakiekolwiek obiekty tej klasy mogą zostać utworzone. I dopiero wtedy wykonywany jest kod, który znajduje się w konstruktorze danej klasy.
Słowo kluczowe static sprawia, że dane pole będzie przypisane do klasy, a nie do danej instancji tej klasy, a więc do obiektu tej klasy.
Może to być przydatne na przykład w sytuacji, gdy wiemy i chcemy zrobić tak, żeby wszystkie obiekty danej klasy miały jakąś część wspólną. Taką częścią może być właśnie jakaś wartość pola statycznego.
Zmienną statyczną wywołujemy pisząc przed nią nazwę klasy:
Bicycle.numberOfBicycles
Aczkolwiek można się do niej odnieść również poprzez zmienną referencyjną, chociaż jest to odradzane, bo wtedy nie widać na pierwszy rzut oka, że wywoływana metoda jest typu static:
myBike.numberOfBicycles
Wartość zmiennej statycznej można ustawić ręcznie przy deklaracji, w bloku static, ale również w konstruktorze. Wtedy przy każdorazowym tworzeniu instancji danej klasy, będzie ustawiana/inkrementowana wartość takiej zmiennej. Można w ten sposób na przykład zaimplementować licznik instancji danej klasy (w konstruktorze inkrementuje się wartość zmiennej statycznej).
Bardzo podobnie do zmiennych, statyczne metody należą do klasy, a nie do jej instancji.
Można się do nich odnosić przez nazwę klasy lub zmienną referencyjną (co ponownie – nie jest zalecane).
Można z nich normalnie korzystać z jedną uwagą.
UWAGA: W obrębie danej klasy, ze środka metod static NIE MOŻNA bezpośrednio wywoływać zwykłych zmiennych lub metod, bo należą one do danej instancji klasy, a nie do klasy jako takiej (więc kod w metodzie statycznej nie wiedziałby do jakiej instancji ma się zastosować). Dotyczy to również słowa kluczowego “this”, bo metoda statyczna nie zna żadnej instancji, do której może odnosić się “this”. Oczywiście ze środka metod static nadal można odnosić się do zwykłych zmiennych i metod, jeśli odbywa się to za pomocą zmiennej referencyjnej danego obiektu.
Poza tym dowolna kombinacja zmiennych i metod oraz ich wywołań jest dozwolona.
Słowo kluczowe static w kombinacji z final, daje nam coś na kształt stałej, ponieważ jest jedna jej instancja oraz po przypisaniu jej jakiejś wartości, nie można jej zmienić. Zatem jeśli od razu przy deklaracji mamy też inicjalizację takiej zmiennej, to faktycznie jest ona stałą:
private static final double PI = 3.141592653589793;
Kod z bloków static jest wykonywany w momencie wczytywania tej klasy przez Class Loadera (co dzieje się gdy JVM po raz pierwszy natknie się na tę klasę w kodzie), podobnie jak w przypadku metod oraz zmiennych typu static. Taką inicjalizację można też wymusić gdzieś w kodzie, który wiemy, że będzie się wykonywał jako pierwszy lub jeden z pierwszych, pisząc:
StaticClass.init()
lub:
Class.forName(StaticClass)
Dana klasa może mieć więcej niż jeden blok static.
Alternatywą dla bloku static jest wykorzystanie prywatnej, statycznej metody przy inicjalizacji pola static:
class ExampleClass {
public static String stringVariable = initializeClassVariable();
private static String initializeClassVariable() {
//kod inicjalizacyjny
}
}
The post Słowo kluczowe Static w Javie appeared first on Dev Foundry.
]]>Czytaj dalej...Santa Cloud – więcej niż meetup IT!
The post Santa Cloud – więcej niż meetup IT! appeared first on Dev Foundry.
]]>
Ale Santa Cloud to coś więcej niż zwykły meetup IT! Po raz piąty spotykamy się, aby wysłuchać inspirujących prelekcji i pomóc zwierzętom! W tym roku widzimy się 10 grudnia o 18:00 w
Restauracji Królestwo w Katowicach.
W programie blok prezentacji, występ magika, aukcja charytatywna i networking! Czekają na Was:
Oraz trzeci tajemniczy prelegent, który zostanie ogłoszony niebawem 
To wszystko? Skąd! W przerwie czeka na Was występ magika, a po prezentacjach – niczym wisienka na torcie – aukcja charytatywna “Giełda marzeń”, podczas której wylicytujecie “fanty”, które wzbogacą Wasze życie zawodowe (np. voucher na kurs programowania, konsultacja jak pozyskiwać fundusze od VC, biznesowa sesja zdjęciowa…) — i prywatne (np. nauka bachaty, czy warsztaty z improwizacji)!
A od Dev Foundry na aukcję trafią zestawy voucherów na darmowy dostęp do wszystkich naszych kursów!
Do zobaczenia na Santa Cloud!
Więcej informacji: https://www.facebook.com/events/674375663054513
The post Santa Cloud – więcej niż meetup IT! appeared first on Dev Foundry.
]]>Czytaj dalej...Krakowskie Wykop Party 2019
The post Krakowskie Wykop Party 2019 appeared first on Dev Foundry.
]]>Impreza zaczyna się 23. lutego o godzinie 18:00 w krakowskim BarON przy ulicy Stefana Batorego 1.
W imieniu organizatorów Krakowskiego Wykop Party 2019 – serdecznie zapraszamy, a wszystkim Mirkom i Mirabelkom życzymy udanej zabawy ( ͡° ͜ʖ ͡°)
Na podanej stronie można znaleźć więcej szczegółów dotyczących imprezy: https://krakow2019.wykoparty.pl
A tak prezentują się nagrody, a więc customowe zestawy z kuponami do naszych kursów, które trafią w ręce szczęśliwych Mirków i Mirabelek 

The post Krakowskie Wykop Party 2019 appeared first on Dev Foundry.
]]>Czytaj dalej...Praca zdalna – wady i zalety
The post Praca zdalna – wady i zalety appeared first on Dev Foundry.
]]>
Pracodawcy coraz częściej oferują możliwość pracy zdalnej, warto więc przyjrzeć się jej nieco bliżej.
Od razu możemy wyjaśnić sobie jedną rzecz – jeśli nie jesteś gigantem skupienia, zapomnij o ikonicznych obrazkach z pracą na plaży.
Aby efektywnie pracować jako programista potrzebujesz koncentracji, a żeby mózg mógł tego dokonać musimy minimalizować zewnętrzne bodźce . Woda po horyzont, szum morza, skrzek mew i spacerowicze – wszystko to będzie nam przeszkadzać.

Nasz mózg całkiem sprawnie radzi sobie z przypisywaniem zadań do miejsc – wchodząc do biura samoistnie przestawiamy się w tryb roboczy. Gdy zaczynamy pracować zdalnie, nasz mózg będzie w trybie domowym bądź kawiarnianym i potrzebujemy czasu nim nauczymy go, że jesteśmy w domu, a jednak pracujemy. Zresztą podobnie ma się sprawa z dzieciakami… skoro tata jest w domu to można się z nim bawić.
Gdy już decydujemy się na pracę zdalną, to najlepiej mieć do tego osobny gabinecik, nawet jeśli miałby być wielkości szafy, albo przynajmniej pracować zawsze w jednym miejscu, żeby mózg zaczął je kojarzyć z pracą.

Tak więc pierwszym problemem jest miejsce pracy. Drugim problemem jesteśmy my sami – pamiętasz stan przed egzaminami kiedy to wszystko, łącznie z prasowaniem i zmywaniem, zdaje się być ciekawsze i ważniejsze niż nauka? Tak wyglądają też początki pracy z domu, dlatego na początku warto minimalizować wszelkiego rodzaju pokusy oraz ćwiczyć swój poziom skupienia. Warto korzystać na przykład z techniki pomodoro – czyli 25 minut totalnego skupienia i 5 minut przerwy.

Trzecim problemem jest komunikacja, na przykład przyswajanie wiedzy od lepszych od nas członków zespołu. W warunkach biurowych pewne rzeczy odbywają się naturalnie – a to wychwycimy jakieś informacje o systemie z zasłyszanej rozmowy, dowiemy się czegoś nowego podczas spontanicznej rozmowy przy kawie czy poprosimy „ad hoc” o pomoc kolegę, który akurat przechodził obok naszego biurka. Podczas pracy z domu żadne z tych warunków nie zachodzi. Zespoły rekompensują te braki używając narzędzia Slack, Microsoft Teams czy tym podobnych komunikatorów grupowych, jednak nie jest to tak efektywne. Oczywiście wciąż uczymy się podczas normalnych rozmów czy code review, jednak jest to proces wolniejszy.
Również komunikacja między personalna jest trudniejsza w tym przypadku – ponieważ komunikujemy się tylko tekstowo, więc odpada nam kontakt twarzą-w-twarz i cały szereg wskazówek niewerbalnych, dlatego czasem ciężko wyczuć emocje drugiej osoby.

Tyle na temat minusów. Może i zabrzmiały one dość mocno jednak taki rodzaj pracy ma oczywiście gigantyczne plusy. Odzyskujemy godziny, oraz pieniądze, które do tej pory poświęcaliśmy na dotarcie do pracy, zyskujemy elastyczność jeśli chodzi o jej czas oraz wykonujemy ją w naszej własnej, domowej atmosferze i w takich warunkach jakie nam odpowiadają. A finalnie – gdy już będziemy w stanie skupić się na pracy – zdecydowanie wzrośnie nam wydajność, bo nie będą pojawiały się typowe dla biur rozpraszacze.

Dodatkowo dwa pierwsze minusy – czyli kwestia przestawienia się na tryb roboczy oraz skupienia są jak najbardziej rozwiązywalne poprzez wyrobienia w sobie nawyku, więc pozostaje tylko kwestia nauki – a tu również przy odrobinie samozaparcia możemy poprawić stan rzeczy i samemu zadawać dużo pytań odnośnie rzeczy, których nie wiemy.

Reasumując – dla osób zaczynających dopiero swoją przygodę z branżą i pracą zdalną najlepszym rozwiązaniem jest dostanie się do firmy gdzie zdecydowana większość zespołu pracuje zdalnie. Tam są już wyrobione dobre praktyki i kultura pracy zdalnej, które zostaną Tobie przekazane.
Należy unikać sytuacji, w których tylko niewielka część osób pracuję zdalnie – wówczas istnieje bardzo duże ryzyko, że zostaniemy wyobcowani.
Na pewno zdecydowanie warto szukać pracodawcy, który oferuje dzień lub dwa pracy zdalnej w tygodniu. Wtedy można stopniowo wdrażać się w ten model pracy.
The post Praca zdalna – wady i zalety appeared first on Dev Foundry.
]]>Czytaj dalej...Rekrutacja na stanowisko programisty – nowy kurs!
The post Rekrutacja na stanowisko programisty – nowy kurs! appeared first on Dev Foundry.
]]>Rekrutacja na stanowisko programisty
Jest on dedykowany wszystkim, którzy właśnie szukają pracy w zawodzie programisty! 
W kursie dowiesz się między innymi:
… i dużo więcej! 
Więc nieważne czy jest to Twoja pierwsza praca w życiu, zmiana branży lub po prostu zmiana firmy. W naszym kursie znajdziesz odpowiedzi na wszystkie nurtujące Cię pytania!
Poniżej znajdziecie link z kodem zniżkowym do kursu:
https://www.udemy.com/rekrutacja-na-stanowisko-programisty/?couponCode=REKRUTACJA_DEV_BLOG
Zapraszamy! 
The post Rekrutacja na stanowisko programisty – nowy kurs! appeared first on Dev Foundry.
]]>Czytaj dalej...Jaki język programowania wybrać?
The post Jaki język programowania wybrać? appeared first on Dev Foundry.
]]>Jest wiele różnych sposobów na wybranie języka programowania. Jeśli interesuje Cię tylko i wyłącznie to, jaki język jest popularny, to istnieje wiele tak zwanych indeksów popularności. Przykładem jest TIOBE: https://www.tiobe.com/tiobe-index/ – indeks aktualizowany miesięcznie, który jest tworzony na podstawie liczby zatrudnionych programistów, wyników wyszukiwań w popularnych przeglądarkach internetowych, serwisach takich jak Wikipedia i YouTube, ilości kursów online, i tak dalej. Oczywiście takie wskaźniki nie pokazują jaki język jest najpopularniejszy w miejscu, w którym aktualnie mieszkasz lub chcesz zamieszkać. Aby się tego dowiedzieć, należałoby przejrzeć konkretne ogłoszenia o pracę.
Jednak popularność to nie wszystko. Jeśli jakiś język albo framework jest nowy, daje to potencjalnie większą szansę na znalezienie pracy, bo mało osób go zna, ale z drugiej strony może się okazać, że szybko zostanie wyparty przez kolejną nową technologię.
Z kolei znane języki i frameworki mają to do siebie, że są stabilne. I to nie tylko w swoim działaniu, ale też z punktu widzenia danej firmy. Wiadomo, że w sieci znajduje się pełna dokumentacja takiego języka i fora internetowe są pełne pytań i odpowiedzi na różne problemy. Są też wszelkie kursy, filmy i tutoriale. W tym przypadku konkurencja na rynku pracy jest duża, ale jest również dużo ofert pracy i można mieć pewność, że zapotrzebowanie na programistów tego języka nie zniknie ot tak.
Często wraz z językiem programowania powiązana jest jakaś inna technologia: framework (czyli zbiór gotowych rozwiązań programistycznych dla danego języka programowania), biblioteka lub platforma. Na pewno warto je poznać po nauczeniu się podstaw danego języka i z pewnością ułatwi to późniejsze poszukiwania pracy.
Zanim dokonasz wyboru konkretnego języka, warto najpierw rozważyć możliwe dziedziny, w których możesz się realizować jako programista.
Są to:
+
+
, 
W przypadku gier sprawa jest dość prosta. Tutaj króluje C++ i bardzo popularny silnik Unreal Engine. Silnik ten jest napisany właśnie w C++ i jest wieloplatformowy, czyli gry docelowo można wydawać na systemy Windows, Linux, MacOS i na konsole.
Poza tym niektóre zespoły deweloperskie programują również w języku C#, korzystając ze środowiska Unity.
Ostatnią opcją jest wykorzystanie języka Java wraz z biblioteką libgdx. Jest to bardziej niszowy wybór, na który decydują się głównie twórcy gier niezależnych. Dzięki libgdx najczęściej tworzy się gry na urządzenia mobilne albo przeglądarki internetowe.
W przypadku aplikacji desktopowych wszystko zależy od docelowej platformy:
: 
:
, 
:
, 
:
,
: 
Przejdźmy do aplikacji mobilnych: tutaj znowu mamy podział na systemy operacyjne:
W przypadku iOS będziemy programować w Swifcie, a w przypadku Androida – w Javie.
Jest też Kotlin, który jest językiem wieloplatformowym, tzn domyślnie możemy go używać do pisania programów na Androida, natomiast przy wykorzystaniu Kotlin Native, można pisać programy, które będą kompilowane do kodu, który można użyć również na iOS i innych systemach.
Aplikacje webowe są chyba najbardziej popularne i powszechne, zwłaszcza w środowiskach korporacyjnych i generalnie w zastosowaniach komercyjnych. I tu faktycznie jest prawdziwa bonanza języków i technologii.
Wybierając drogę developera aplikacji webowych, najpierw musisz sobie zadać pytanie czy chcesz programować frontend czy backend:
+
,
+ 
,
,
+
,
+
+
+ 
, 
Przechodzimy do systemów wbudowanych. Są to systemy, w których programuje się sterowniki różnego rodzaju urządzeń. Mogą to być czujniki temperatury, prędkości przejazdu danego pojazdu lub bardziej przyziemne rzeczy, jak na przykład bankomat, lodówka albo zmywarka. Do programowania tych systemów wykorzystuje się najczęściej języki niskopoziomowe, czyli takie, których instrukcje i funkcje mogą być łatwo tłumaczone na język maszynowy, zrozumiały dla danego urządzenia.
Tu najbardziej popularny będzie język C, ewentualnie C++. Na popularności w tej dziedzinie programowania zyskuje również Python.
, 
Została nam jeszcze sekcja data science. Jest to dział programowania, który polega na analizie bardzo dużych zbiorów danych. W przypadku data science, oprócz samego programowania będzie też potrzebna znajomość innych dziedzin nauki, a konkretnie matematyki i statystyki. Wymagana będzie również znajomość pewnych algorytmów. Programista data science wychwytuje z ogromnego zbioru pozornie ze sobą nie powiązanych danych pewne zależności, które później są wykorzystywane w różnego rodzaju wizualizacjach: raportach lub wykresach.
Data science obejmuje również takie dziedziny jak sztuczna inteligencja i uczenie maszynowe.
W przypadku data science najpopularniejsze języki programowania to R oraz Python.
Oprócz samego zastosowania, to co może Tobą kierować przy wyborze danego języka to jego składnia, dlatego przed podjęciem ostatecznej decyzji, warto przejść kilka tutoriali dla początkujących zanim sięgniesz po pierwszy kurs, film lub książkę do nauki.
Polecamy również skorzystanie z serwisu: https://jaki-jezyk-programowania.pl/, który w prosty i przejrzysty sposób, krok po kroku pomoże Ci w wyborze odpowiedniego języka.
Warto również pamiętać, że języki które są popularne w wielkich korporacjach, niekoniecznie znajdą zastosowanie w mniejszych firmach. Jeszcze inaczej rzeczy mają się w przypadku startupów. Tam często kusi się programistów obietnicami pracy w zupełnie nowym projekcie z wykorzystaniem najnowszego języka i frameworka. I programiści znudzeni wieloletnią pracą z jakimś projektem mogą na to przystać. Jednak występuje tu ryzyko, że koniec końców taki projekt nie wypali i za jakiś czas trzeba będzie szukać nowej pracy.
Natomiast co do sposobu nauki, to jest to temat na cały kolejny wpis i jest to sprawa dość indywidualna, ale obecnie bardzo popularna jest nauka z kursów online, których przybywa coraz więcej. Polecamy tutaj platformę Udemy. A poza tym bardzo dobre są również książki. Ważne tylko, żeby były możliwie jak najnowsze, aby nie uczyć się starych wersji danego języka lub frameworka.
Mam nadzieję, że ten poradnik nieco rozjaśnił Ci kwestię wyboru języka programowania. Wybór jest naprawdę spory, ale najważniejsze to po prostu dokonać wyboru i zacząć programować. Idealnie pasuje tutaj powiedzenie: „Praktyka czyni mistrza”.
The post Jaki język programowania wybrać? appeared first on Dev Foundry.
]]>Czytaj dalej...Witamy na naszym blogu!
The post Witamy na naszym blogu! appeared first on Dev Foundry.
]]>Wkrótce pojawi się tutaj nasz pierwszy wpis. Już teraz możemy zdradzić, że będzie dotyczył pewnej funkcjonalności, która została dodana do 8. wydania Javy.
Zapraszamy do ponownych odwiedzin za jakiś czas! 
The post Witamy na naszym blogu! appeared first on Dev Foundry.
]]>