Wpis ten będzie uzupełnieniem infografiki, którą możecie zobaczyć poniżej. Ostatnio jeden z naszych czytelników napisał do nas z pytaniem, co mógłby poprawić w swoim projekcie, zanim podeśle go jako swoje programistyczne portfolio w CV. W rezultacie zebraliśmy checklistę, którą powinnaś uwzględnić zawsze, gdy chwalisz się swoim kontem na githubie przed rekruterami. Gotowa?
Czytaj dalej →Pull Request i Code Review, czyli o empatii w programowaniu
Dla pracy w zespole programistycznym korzystanie z systemu kontrolu wersji jest swego rodzaju normą. W dzisiejszym wpisie postaramy się opisać, co zrobić, by dodawany kod, był jak najlepszej jakości i cały zespół uczył się dzięki jego powstawaniu.
Czytaj dalej →#Niezbędnik Juniora: Code Kata
Z naszego bloga mogliście już poznać kilka skutecznych sposobów nauki programowania. Było już o metodzie gumowej kaczuszki, debugowaniu i rozwiązywaniu problemów, czy czytaniu kodu na głos. Zebraliśmy też dobre praktyki dla Juniora. Dzisiaj kolejny sposób na dojście do programistycznego mistrzostwa, czyli Code Kata.
Czytaj dalej →#Niezbędnik Juniora. Dobre praktyki dla początkującego programisty
Są rzeczy, które już od samego początku twojej przygody z programowaniem w Javie powinieneś wiedzieć. Podstawy to na pewno fundamenty programowania obiektowego, często opisywane pod akronimem SOLID. W dzisiejszym wpisie zebraliśmy dobre praktyki, które z naszej strony uważamy za najważniejsze i krótko je opisaliśmy. Zapraszamy do zapoznania się z nimi.
Czytaj dalej →#Niezbędnik Juniora: Wyjątki i ich obsługa
W każdej aplikacji zdarzają się sytuacje wyjątkowe, które nie mieszczą się w ‘standardowym’ działaniu aplikacji. Na takie okazje pozostaje nam obsługa za pomocą wyjątków, dzięki którym możemy przywrócić aplikację do ‘normalnej’ postaci.
Czytaj dalej →#Niezbędnik Juniora: Jak działa internet
Z internetu korzysta każdy z nas na codzień, ale czy wiesz, jak on działa? W tym wpisie zerkniemy na najważniejsze protokoły i mechanizmy, dzięki którym to wszystko działa!
Słowniczek
Zanim zaczniemy — kilka słów wyjaśnienia co jest czym:
Czytaj dalej →Pytania treningowe
W ramach cyklu #main zamieszczamy popularne pytania, które mogą paść na rozmowie kwalifikacyjnej. Ich aktualną listę wraz z linkami do odpowiedzi znajdziecie właśnie w tym wpisie.
- Czym w Javie różni się final od finally i finalize?
- Jak działa Spring (a dokładniej jego kontener IoC)?
- Czym jest TDD?
- Dlaczego w idealnej sytuacji korzystamy z trzech osobnych modeli – warstwy danych, warstwy aplikacji oraz warstwy prezentacji?
- Dlaczego w językach programowania 0.1*3 != 0.3?
- Jakie typy numeryczne są dostępne w Javie i do jakich zastosowań je używamy?
- Czym są mikroserwisy i kiedy warto je stosować?
- Jakie typy baz danych wyróżniamy?
- Czym jest transakcja?
- Co to jest i jak działa servlet?
- Opisz, czym jest autoboxing i kiedy jest wykorzystywany.
- Jaka jest różnica pomiędzy SVN oraz GIT?
- Kiedy należy używać podejścia iteracyjnego, a kiedy rekursywnego?
- Jaka jest różnica pomiędzy equals() a „==”?
- Jaka jest różnica pomiędzy klasą abstrakcyjną a interfejsem?
- W jaki sposób przetestować kod?
- Jak sprawdzić, czy tablica jest ciągiem arytmetycznym?
- Na czym polega wzorzec projektowy Builder (budowniczy)?
- Sprawdź, czy tablica liczb typu int jest ciągiem arytmetycznym
- Czym się różni wzorzec proxy od adaptera
- Jak znaleźć ‘głębokość’ drzewa (jako struktury danych) w najprostszy sposób?
- Czym jest ‘bean’ w Springu, co może, a co nie może nim być?
- Na czym polega metoda dziel i zwyciężaj?
- Czym jest, i jak działa Garbage Collector w Javie
- Czym jest JVM (maszyna wirtualna Javy)?
- Jaka jest różnica pomiędzy klasami String oraz StringBuilder/StringBuffer?
- Jaka jest różnica pomiędzy przeładowaniem (overloading) a przesłanianiem (overriding) metod w Javie?
- Jak wyświetlić (wypisać w konsoli) datę i godzinę w wybranym formacie?
- Czym jest enkapsulacja?
- Czym jest (i do czego służy) interfejs java.lang.Comparable?
- Czym jest (i do czego służy) klasa Locale (oraz inne powiązane klasy)?
- Jakimi sposobami (systemami) można zapisać liczbę w języku Java (podając ją w kodzie)?
- Czym jest i jak działa JDBC?
- Jaki będzie wynik wykonania fragmentu Math.min(Double.MIN_VALUE, 0.0d);?
- Jak zaprojektowałabyś klasy do gry w warcaby?
A kolejne pytanie już w poniedziałek!
Czytaj dalej →#Niezbędnik Juniora: test-driven development
Testowanie swojego kodu to bardzo istotna część pracy każdego programisty, jednak, nie każdy z nas lubi to robić. Sposobem na zapewnienie odpowiedniego pokrycia swojego kodu może być TDD.
Czym jest TDD?
To nic innego jak pisanie oprogramowania stymulowane przez testy. Cykl implementacji nowej funkcjonalności wygląda następująco:
1. Dodaj test
Dodanie każdej nowej funkcjonalności rozpoczyna się od napisania testu. Aby być w stanie napisać test musisz dobrze rozumieć implementowaną funkcjonalność — jej wymagania i wynik działania — rozbijając to na pojedyńcze cechy (tak jak w testach jednostkowych). Możesz napisać od razu wszystkie testy, lub tylko jeden, ważne by w tym etapie w ogóle nie myśleć o kodzie, który będzie im odpowiadał — masz po prostu zmapować oczekiwane zachowanie funkcjonalności.
Czytaj dalej →Niezbędnik Juniora: Git — kontrola wersji
Dzisiaj nauczysz się korzystać z Gita — systemu kontroli wersji, który stał się de facto standardem na rynku.Git to rozproszony system kontroli wersji (co to dokładnie znaczy, powiemy sobie za moment), u którego podstaw leżą bardzo proste założenia. To jest jednak jego potęgą — elastyczność oraz kilka sprytnych pomysłów spowodowała że powstało narzędzie proste w użyciu, pasujące zarówno do prostych projektów jak i ogromnych przedsięwzięć (jak np. jądro systemu linux).
Czytaj dalej →Niezbędnik Juniora: Kontrakt hashCode i equals
W tym wpisie nieco więcej o metodach hashCode i equals, dlaczego mówimy o nich tylko razem, oraz o najczęstszych błędach w kodzie z tym związanych.
Metody hashCode oraz equals
Obie metody są metodami klasy Object i najczęściej nie przejmujemy się ich implementacją. To może być akceptowalne w przypadku obiektów, które żyją tylko chwilę i nie przechowujemy ich w kolekcjach (np. obiekty transferowe), ale jeśli dochodzi serializacja obiektów lub ich przechowywanie np. w bazie danych czy nawet kolekcjach, implementacja obu tych metod powinna być jedną z pierwszych rzeczy, którą zrobimy. Z zasady jednak metody te powinny być implementowane dla każdego obiektu, niezależnie od jego przeznaczenia czy sposobu użycia i warto wyrabiać sobie tego rodzaju nawyki.
Czytaj dalej →