Kolokwia i egzaminy

Listy zadań i laboratoria z programowania bez zarywania nocy

Opublikowano 22 października 20265 min czytania

Jest niedziela, 22:00, a o północy mija termin oddania zadań na platformie uczelni. Dwa programy nie działają, trzeciego jeszcze nawet nie ma. Jeśli to brzmi znajomo, rzadko chodzi o brak talentu, a prawie zawsze o sposób pracy. Tutaj dostajesz plan tygodnia dla jednej listy, metodę rozkładania zadań na części i instrukcję, jak przetestować kod, zanim ktoś go oceni.

Jak zwykle działa zaliczenie laboratorium

Na wielu przedmiotach z programowania do egzaminu dopuszcza dopiero zaliczone laboratorium albo odpowiednia liczba punktów z list zadań. Zasady bardzo się jednak różnią. Typowe warianty:

  • Określony procent wszystkich punktów, często połowa, czasem więcej.
  • Minimum punktów z każdej listy, przy czym jedna lub dwie mogą wypaść.
  • Do tego obrona rozwiązania: musisz wyjaśnić swój kod prowadzącemu albo przy tablicy.
  • Czasem zamiast dopuszczenia są punkty bonusowe do egzaminu albo ocena z laboratorium jest osobną oceną.

Która zasada dotyczy ciebie, znajdziesz w sylabusie przedmiotu, w regulaminie studiów albo na stronie kursu. Przeczytaj to dokładnie w pierwszym tygodniu. Potem policz, ile punktów potrzebujesz z jednej listy. Kto wie, że dwie listy mogą wypaść, nie panikuje przy przeziębieniu.

Dlaczego listy kończą się zarwaną nocą

Zarwana noc ma prawie zawsze te same przyczyny:

  • Późny start. Lista pojawia się w poniedziałek, otwierasz ją w sobotę.
  • Całe zadanie naraz. Piszesz 60 linijek za jednym zamachem i dostajesz dwanaście błędów kompilacji.
  • Brak testów przed oddaniem. Czy kod działa, dowiadujesz się dopiero z oceny.
  • Chwiejne podstawy. Lista zakłada metody z wartością zwracaną albo tablice, które na wykładzie przeleciały w pięć minut.

Na wszystkie cztery pomaga to samo: małe kroki, wczesny start, wczesne testy.

Plan tygodnia dla jednej listy

Rozłóż listę na cztery krótkie sesje zamiast jednego długiego wieczoru. Każda trwa od 45 do 90 minut.

  1. Dzień 1, zaraz po publikacji: czytanie. Przeczytaj wszystkie zadania. Zaznacz pojęcia, których nie znasz na pewno. Przy każdym zadaniu zapisz jedno zdanie: co wchodzi, co wychodzi?
  2. Dzień 2: łatanie braków. Sprawdź zaznaczone pojęcia. Jeśli chodzi o metody z parametrami i wartością zwracaną, przeczytaj o nich jeszcze raz i rozwiąż dwa małe zadania.
  3. Dzień 3: pisanie i testowanie. Rozwiązuj zadania kawałek po kawałku, tak jak w następnej sekcji.
  4. Dzień 4, co najmniej dzień przed terminem: zapas. Dokończ resztę, sprawdź przypadki brzegowe, skontroluj format oddania. To, co dalej nie działa, zabierasz na konsultacje albo na forum kursu.

Dzień zapasu jest najważniejszy. Zamienia panikę w niedzielę wieczorem w pytanie w piątek, na które ktoś jeszcze zdąży odpowiedzieć.

Rozkładanie zadania: przykład

Załóżmy, że na liście jest: „Napisz metodę, która zwraca drugą co do wielkości wartość z tablicy int”. Zamiast od razu pisać, rozkładasz zadanie:

  1. Ustal sygnaturę: static int secondLargest(int[] values).
  2. Wyjaśnij, co ma się dziać w przypadkach szczególnych: powtórzone wartości, liczby ujemne, tablica z jednym elementem. Jeśli lista tego nie określa, zapytaj.
  3. Opisz pomysł słowami: przechodzę raz przez tablicę i zapamiętuję największą i drugą największą wartość.
  4. Dopiero teraz pisz kod, od razu z wywołaniami testowymi w main.
public class Main {    static int secondLargest(int[] values) {        int largest = Integer.MIN_VALUE;        int second = Integer.MIN_VALUE;        for (int value : values) {            if (value > largest) {                second = largest;                largest = value;            } else if (value > second && value != largest) {                second = value;            }        }        return second;    }
    public static void main(String[] args) {        System.out.println(secondLargest(new int[] {3, 9, 4}));        System.out.println(secondLargest(new int[] {9, 3, 4}));        System.out.println(secondLargest(new int[] {5, 5, 2}));        System.out.println(secondLargest(new int[] {-4, -1, -7}));    }}
Wyjście
4
4
2
-4

Każde wywołanie sprawdza inny przypadek: największa wartość w środku, największa na początku, powtórzona wartość, same liczby ujemne. Jeśli tablice i indeksy nie są jeszcze dla ciebie oczywiste, warto przejść takie przypadki najpierw na kartce.

Przetestuj kod, zanim oceni go prowadzący

Wiele punktów przepada nie przez złe pomysły, tylko przez zapomniane przypadki brzegowe. Przed każdym oddaniem zadaj sobie te pytania:

  • Co się dzieje przy 0, przy liczbach ujemnych, przy pustej tablicy albo pustym Stringu?
  • Czy każda pętla działa poprawnie przy pierwszym i ostatnim obrocie?
  • Czy metoda naprawdę zwraca wartość, a nie tylko ją wypisuje?
  • Czy nazwa klasy, nazwa metody i parametry dokładnie zgadzają się z poleceniem? Automatyczne systemy sprawdzające są tu bezlitosne.
  • Czy plik kompiluje się bez błędów, także po świeżym otwarciu?

Przy zadaniach z własnymi klasami dochodzi jeszcze: czy konstruktor ustawia wszystkie pola? Jeśli klasy, obiekty i konstruktory wciąż sprawiają ci kłopot, to fragment do powtórki przed następną listą.

Przy komunikatach kompilatora pomoże ci nasz przegląd najczęstszych błędów w Javie wyjaśnionych po polsku.

Pomoc bez plagiatu

Rozmowa ze znajomymi z roku o pomysłach jest na większości uczelni w porządku. Wymiana kodu zwykle nie. Przy narzędziach AI, takich jak ChatGPT, zasady różnią się między przedmiotami i prowadzącymi. Przeczytaj, co mówi o tym sylabus albo prowadzący, a w razie wątpliwości trzymaj się ostrzejszej interpretacji.

Uczciwa reguła kciuka: pomoc, która wyjaśnia ci pomysł, jest zwykle w porządku. Pomoc, która daje gotowy kod do oddania, zwykle nie. A nawet gdyby była dozwolona: na kolokwium i egzaminie zostajesz z zadaniem sam na sam. Więcej o sensownym korzystaniu z AI przeczytasz w tekście AI przy zadaniach z programowania: jak uniknąć plagiatu i dostać pomoc.

Gdzie pomaga Jario

Listy zadań i laboratoria rozwiązujesz w środowisku swojej uczelni. Jario ich nie zastępuje. Pomaga jednak utrwalić podstawy, których wymaga każda lista, żeby w dniu 3 nie trzeba było dopiero nadrabiać pętli i tablic:

  • Bez konfiguracji. Edytor działa w przeglądarce. Ćwiczysz nawet wtedy, gdy Eclipse albo IntelliJ na laptopie akurat odmawia współpracy.
  • Informacja zwrotna przed oceną. „Sprawdź” uruchamia testy, na przykład „Zaliczone testy: 3 z 4”. Od razu widzisz, czy brakuje przypadku brzegowego.
  • Błędy po polsku. Przy błędach kompilacji podpowiedź „Co to znaczy?” wyjaśnia częste komunikaty, a tutor przyciskiem „Wyjaśnij błąd” tłumaczy błąd w twoim własnym kodzie.
  • Wskazówki zamiast rozwiązania. Tutor AI zna zadanie, kod i wynik testów i daje wskazówki małymi krokami. Kod piszesz samodzielnie. To dokładnie ten rodzaj pomocy, który przyda się na egzaminie.

Zadania mają poziomy „Łatwe”, „Średnie” i „Trudne”. Jeśli lista wymaga na przykład rekurencji, rozwiąż wcześniej kilka łatwych zadań z tego tematu i podejdź do listy pewniej.

W skrócie

  • Poznaj dokładnie zasady zaliczenia swojego przedmiotu.
  • Otwieraj każdą listę w dniu, w którym się pojawi.
  • Rozkładaj każde zadanie na części, zanim zaczniesz pisać kod.
  • Testuj przypadki brzegowe samodzielnie przed oddaniem.
  • Zaplanuj dzień zapasu.

Jeśli jesteś na pierwszym semestrze, pasuje do tego nasz plan nauki na podstawy programowania. Podstawy, których wymagają twoje listy, przećwiczysz w Jario zadanie po zadaniu, z testami i tutorem, który pokazuje drogę, ale nie idzie nią za ciebie.

Powiązane artykuły do nauki

Więcej wpisów