Witam Cię ponownie!
Tym razem chciałbym się z Tobą podzielić mega ciekawym wydarzeniem, w którym miałem ostatnio okazję uczestniczyć.
Mini hackathon
to challenge stworzony przez mentora Daniel Roziecki dedykowany uczestnikom programu Zero to Junior
oraz studentom mentoringu Za rączkę
, gdzie również rozwijam swoje umiejętności programistyczne.
Mini hackathon
to wyzwanie inspirowane popularnymi hackathonami
, czyli większymi wydarzeniami programistycznymi, gdzie uczestnicy w grupach koncentrują się na rozwiązaniu różnorodnych problemów. W tym przypadku Daniel stworzył mniejszą wersję, mającą na celu doskonalenie naszych umiejętności oraz pobudzanie szarch komórek. Mamy nauczyć się "myśleć jak programiści".
Wydarzenie adresowane jest zarówno do początkujących, jak i do tych z większym doświadczeniem w kodowaniu.
Jeżeli idea zyska akceptację (co jest bardzo prawdopodobne, biorąc pod uwagę entuzjazm większości uczestników), Daniel zamierza regularne organizować Mini hackathon
w ramach mentoringu.
Mini hackathon - zasady
Mini Hackaton
jest otwarty dla uczestników programu mentoringowego, w którym uczestniczę. Każdy student, niezależnie od poziomu umiejętności programistycznych może brać udział w zabawie. Każdy rozwiązuje problem bazując na swojej aktualnej wiedzy. Wydarzenie to doskonała okazja do praktycznego rozwijania umiejętności programistycznych i zdolności rozwiązywania problemów w ograniczonym czasie. Poza tym to super zabawa i dodatkowa dawka inspiracji do nauki.
Jak to wygląda? Podczas spotkania Daniel przedstawia nam konkretny problem programistyczny i daje 10-20 minut na pytania. Po tym czasie uczestnicy przystępują do pracy i po zakończeniu zadania przesyłają rozwiązanie do sprawdzenia. Mamy na to max 4 dni. Im szybciej wyślesz, tym więcej punktów dostajesz.
I uwaga… Możemy korzystać z ChatGPT, ale istnieją jasno określone zasady, których musimy przestrzegać:
🚀 NIE wolno prosić o przygotowanie gotowego rozwiązania
🚀 NIE wolno prosić o przygotowanie gotowego kodu
🚀 WOLNO prosić o wytłumaczenie konkretnego problemu, konceptu, pojęcia itp.
🚀 WOLNO prosić o opinię na temat własnego kodu
🚀 WOLNO dyskutować o pomyśle własnego rozwiązania
🚀 WOLNO prosić o podpowiedź związaną z błędem w kodzie (z zastrzeżeniem, że prosisz chat o wskazanie, gdzie problem może wystąpić, ale zabraniasz mu pisania kodu).
Mini hackathon - problem do rozwiazania
To zadanie z poprzedniego tygodnia:
“Klasyczna kolejka (Queue), emuluje działanie “tradycyjnej” kolejki jaką spotkasz np. w sklepie czy kinie. Ustawiasz się na końcu i przesuwasz do przodu aż ktoś Cię obsłuży. Podstawowe metody takiej kolejnki to dodawanie, pobieranie i podglądanie elementów, sprawdzanie, czy kolejka jest pusta, oraz zliczanie elementów.
ZADANIE:
Zaimplementuj kolejkę priorytetową, która różni się od standardowej tym, że każdy element ma przypisany priorytet, a elementy o wyższym priorytecie są pobierane przed elementami o niższym. Na przykład, jeśli masz elementy o priorytetach 0, 0, 5, 3, to pobranie elementu z najwyższym priorytetem powinno zwrócić element z priorytetem 5.
Pamiętaj, że jeśli w kolejce jest kilka elementów o tym samym priorytecie, powinny być zwracane w kolejności, w jakiej zostały dodane do kolejki. Jeśli to dla Ciebie za trudne, możesz zwracać elementy o tym samym priorytecie w losowej kolejności.”
Mini hackathon - moje rozwiązanie
Moje rozwiązanie to implementacja klasy Person
reprezentującej osoby z określoną funkcją w Parlamencie i priorytetem. Wykorzystuje tutaj interfejs Comparator
do sortowania kolejki osób na podstawie ich priorytetów i kolejności dodania do kolejki, a następnie wyświetlam posortowaną kolejkę, usuwam elementy i sprawdzam, czy lista jest pusta.
Moje rozwiązanie:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Person { String function; int priority; public Person(String function, int priority) { this.function = function; this.priority = priority; } public static void main(String[] args) { Person person1 = new Person("President", 1); Person person2 = new Person("Prime Minister", 2); Person person3 = new Person("Minister1", 3); Person person4 = new Person("Minister2", 3); Person person5 = new Person("Minister3", 3); Person person6 = new Person("Assistant1", 5); Person person7 = new Person("Assistant2", 5); Person person8 = new Person("Secretary", 6); PersonCompatator compatator = new PersonCompatator(); // Persons added to queue List<Person> queue = new ArrayList<>(Arrays.asList(person1, person4, person5, person2, person7, person3, person8, person6)); // Print que for (int i = 0; i < queue.size(); i++) { System.out.println(queue.get(i).function); } // How many person in queue System.out.println(queue.size()); // Sort basing on priority number and order of adding to queue queue.sort(compatator); //Print sorted list for (int i = 0; i < queue.size(); i++) { System.out.println(queue.get(i).function); } // Remove from queue while (!queue.isEmpty()) { Person removedPerson = queue.remove(0); System.out.println("Removed person: " + removedPerson.function); } System.out.println("Is list empty: " + queue.isEmpty()); } } import java.util.Comparator; public class PersonCompatator implements Comparator<Person> { @Override public int compare(Person person1, Person person2) { return Integer.compare(person1.priority, person2.priority); } }
Mój tygodniowy postęp
🚀 Ukończyłem projekt gry konsolowej Warcaby - done
🚀 Rozwiązałem problem z Mini hackathon - done
🚀 Serializacja i operacje I/O:
▪️Serializable Interface - done
▪️Schemat serializacji / deserializacji - done
▪️Klasa Buffer - done
Napotkane trudności
🚀 Po miesięcznej walce udało mi się ukończyć projekt Warcaby
🚀 Zajęło mi to sporo czasu ponieważ postanowiłem, aby rozgrywka przebiegałą z “inteligentnym” komputerem, którego logika ruchów opierała się na dość skomplikowanych algorymach
🚀 Temat niezwykle złożony, ponieważ w grze pojawiają się różne scenariusze wydarzeń i trzeba to wszystko wziąć pod uwagę
🚀 Oddałem grę do sprawdzenia i przechodzę do kolejnych tematów Javy
Narzędzia i materiały
🚀 Wspieranie się ChatemGPT
🚀 Własne notatki z ksiażki Head First Java 3rd Edition
Reflekcje i wnioski
🚀 Zanurzyłem się kodzie na tyle głęboko i na tak długo, że stał się on dla mnie niemal intuicyjny, przez co sam już zatraciłem orientację co się w nim dzieje…
🚀 Wiem też, że przeceniłem swoje umiejętności, biorąc się za skomplikowany algorytm inteligentnego przeciwnika w grze
🚀 Powinienem zacząć tem projekt od bardziej przemyślanego planu na początku, zamiast działać na zasadzie prób i błędów w czasie rzeczywistym
🚀 Dążąc do uproszczenia kodu, niestety uległem pułapce komplikowania, co “zaowocowało” aplikacją, gdzie zasada "Keep it Simple, Stupid" stała się pojęciem nieznanym
🚀 Gdybym postąpił w ten sposób, prawdopodobnie pracowałbym już nad aplikacją wymaganą do przejścia na kolejny poziom nauki w Za rączkę
Cele - kolejny tydzień
🚀 Programowanie
▪️Dokończyć temat Serializacja i operacje I/O
▪️Artykuł “Principled Instructions GPT-3.5/4”
🚀 Blog / marka własna
▪️Wpis na blog - 1 akapit dziennie
▪️Czwartkowa publikacja na LinkedIn
🚀 Szlifowanie skilli
▪️Praca głęboka - minimum 2h dziennie
▪️Zasada 30% teorii / 70% pisania kodu
▪️Języki angielski/hiszpański
Śledź mnie na LinkedIn:
Newsletter:
Jeśli masz jakieś sugestie lub pytania, proszę napisz do mnie wiadomość: kuba@javampokaze.pl