Moja nauka programowania || Tydzień 14 || Raport
📄

Moja nauka programowania || Tydzień 14 || Raport

notion image
 

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).

 
notion image
 

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); } }
 
notion image

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

 
notion image

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

 
notion image

Narzędzia i materiały


🚀 Wspieranie się ChatemGPT

🚀 Własne notatki z ksiażki Head First Java 3rd Edition

 
notion image

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ę

 
notion image

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