Programowanie bez wyścigu: efektywna nauka C#, dobry rytm i Snake

Praktyczny warsztat dla programistów: umiejętności miękkie, praca bez przeciążenia, nauka C# przez feedback, konsolowy Snake i ankieta profilu pracy z wynikiem e-mail.

Poniżej znajduje się pełna treść artykułu. Quizy i symulacje wymagają włączenia JavaScript.

Warsztat C# i dobrej pracy

Programowanie nie jest wyścigiem z czasem. Jest sztuką podejmowania dobrych decyzji, gdy uwaga ma ograniczony budżet.

Możesz spędzić przy kodzie dziesięć godzin i nadal nie wiedzieć, czy rozwiązałeś właściwy problem. Możesz też w czterdzieści pięć minut zbudować mały eksperyment, sprawdzić założenie, zapisać wniosek i wrócić jutro bez konieczności odtwarzania całego kontekstu.

Ten materiał łączy umiejętności miękkie, techniczny warsztat C# i świadomy odpoczynek. Po drodze zbudujesz konsolowego Snake'a inspirowanego prostotą dawnych telefonów, podejmiesz trzy decyzje projektowe i poznasz swój dominujący styl pracy.

01Uwagamierz rezultat, nie obecność
02Relacjapytaj, wyjaśniaj, domykaj
03C#ucz się przez mały feedback
04Snakezłóż grę z prostych reguł
05Profilodbierz plan na e-mail
01 / rytm

Najpierw zmień metrykę

Długa praca nie jest tym samym co wartościowa praca

W programowaniu łatwo pomylić wysiłek z postępem. Edytor jest otwarty, klawiatura pracuje, a liczba zakładek rośnie. Tyle że produkt nie płaci za liczbę ruchów. Potrzebuje zmniejszonego ryzyka, sprawdzonej hipotezy, czytelnego kontraktu albo funkcji, którą da się bezpiecznie odebrać.

Dlatego przed rozpoczęciem bloku pracy zapisz jedno zdanie: po czym poznam, że ten blok miał sens? Dobra odpowiedź jest obserwowalna: test odtwarza błąd, endpoint zwraca właściwy kontrakt, gracz porusza jednym znakiem albo zespół zna decyzję i jej właściciela.

Słaba metryka 6 godzin przy klawiaturze

Nie mówi, czy problem został zrozumiany ani czy zmiana jest bezpieczna.

Lepsza metryka 1 zamknięte ryzyko

Pokazuje, że po pracy wiemy więcej i możemy wykonać kolejny ruch.

Najlepszy ślad test + decyzja + następny krok

Pozwala wrócić jutro bez ponownego ładowania całego problemu do pamięci.

Decyzja 1 / presja

Po 70 minutach debugowania nie widzisz już nowych sygnałów. Co daje największą szansę na postęp?

Zostaję przy ekranie, aż problem ustąpi

Zapisuję hipotezy, robię prawdziwą przerwę i wracam z jednym nowym testem

Wybierz reakcję i sprawdź jej koszt.

45 minut pracy + 15 minut odzyskania uwagi

Jedna godzina może być pełną pętlą nauki

Nie chodzi o bezwzględny zegar. Chodzi o granice, które wymuszają informację zwrotną. Jeśli zadanie nie mieści się w pętli, zmniejsz rezultat. Nie dokładaj kolejnych godzin do źle zdefiniowanej pracy.

Mini-gra: ułóż pętlę

Która kolejność uczy szybciej niż samo czytanie?

Postęp 0/5

Uruchom i obserwujZbierz konkretny wynik lub błąd.

Nazwij jeden rezultatJedno zachowanie, nie cały system.

Odejdź od ekranuUtrwal informację i odzyskaj uwagę.

Zbuduj najmniejszy krokKod ma odpowiedzieć na jedno pytanie.

Wyjaśnij własnymi słowamiZapisz decyzję i kolejne pytanie.

Zacznij od zdefiniowania rezultatu.

Ułóż ponownie

02 / ludzie

Soft skills, które kompilują się w produkcji

Najdroższe błędy często zaczynają się w zdaniu, którego nikt nie doprecyzował

Umiejętności miękkie nie są dodatkiem do techniki. To mechanizm synchronizacji rozproszonych modeli mentalnych. Programista, właściciel produktu i użytkownik mogą używać tych samych słów, a rozumieć trzy różne rezultaty. Kod tylko utrwala jedną z tych interpretacji.

Zamiast pytać „co mam zrobić?”, pytaj: kto podejmuje tę decyzję, jaki stan wejściowy jest prawidłowy, po czym poznamy sukces i co ma się wydarzyć przy błędzie? Cztery odpowiedzi często usuwają więcej pracy niż kolejna biblioteka.

01Pytanie precyzyjne

Opisuje kontekst, obserwację, próbę i dokładną niewiadomą.

02Jawne założenie

Pozwala innym zakwestionować kierunek, zanim powstanie drogi kod.

03Review bez ego

Oddziela człowieka od decyzji i bloker od propozycji ulepszenia.

04Wczesny sygnał

Komunikuje ryzyko wtedy, gdy zespół nadal może zmienić plan.

„Nie wiem” jest profesjonalną odpowiedzią, jeżeli kończy się planem sprawdzenia. Udawana pewność jest długiem, który zwykle spłaca produkcja.
Decyzja 2 / współpraca

Reviewer pisze tylko „to jest źle”. Jaka odpowiedź najlepiej prowadzi do jakości?

Proszę o wskazanie złamanego kontraktu, ryzyka i oczekiwanego zachowania

Bronię implementacji, bo działa na moim komputerze

Wybierz sposób, który zamienia opinię w decyzję.

03 / C#

Nauka przez działający model

C# staje się prostszy, gdy każde pojęcie dostaje zadanie

Początkujący często próbują zapamiętać język rozdziałami: typy, pętle, klasy, kolekcje. Problem w tym, że wiedza bez zachowania szybko znika. Gra daje każdemu elementowi odpowiedzialność. Pozycja opisuje punkt, enum kierunek, kolekcja ciało węża, pętla czas, a metoda aktualizacji jedną zmianę stanu.

Nie musisz znać całego C#, żeby zacząć. Potrzebujesz małej mapy i szybkiego feedbacku kompilatora. Pisz jeden krok, uruchamiaj, nazywaj wynik i dopiero potem dodawaj kolejną regułę.

Typ wartościowyPosition

Para X/Y opisuje położenie bez ukrytego stanu.

Zbiór wariantówDirection

Enum ogranicza kierunek do czterech poprawnych wartości.

KolekcjaLinkedList

Początek jest głową, koniec ogonem, a ruch ma czytelny koszt.

Stan grySnakeGame

Jedno miejsce pilnuje reguł, punktów, jedzenia i tempa.

internal readonly record struct Position(int X, int Y)
{
    public static Position operator +(Position left, Position right) =>
        new(left.X + right.X, left.Y + right.Y);
}

internal enum Direction
{
    Up,
    Right,
    Down,
    Left
}

Projekt: Snake w konsoli

Najpierw jeden znak. Potem zasada. Na końcu gra.

Klasyczna gra jest dobrym laboratorium, bo wynik widać natychmiast. Nie zaczynaj od punktów, jedzenia i kolorów. Najpierw narysuj planszę. Potem porusz głowę. Następnie dodaj ciało, kolizję i dopiero wtedy tempo.

Pobierz pełny Program.cs Pobierz SnakeLab.csproj
Snake Labscore 030
WASD / strzałki · Esc
01Narysuj ramkę

Jedna pętla po X i Y uczy współrzędnych.

02Przesuń głowę

Kierunek zamieniasz na zmianę pozycji.

03Dodaj ciało

Nowa głowa wchodzi, stary ogon wychodzi.

04Zjedz punkt

Brak usunięcia ogona wydłuża węża.

05Wykryj kolizję

Ściana i własne ciało kończą rundę.

private void Update()
{
    _direction = _nextDirection;
    var head = _snake.First!.Value;
    var next = head + Delta(_direction);
    var grows = next == _food;
    var tail = _snake.Last!.Value;

    var hitsWall =
        next.X <= 0 || next.X >= _width - 1 ||
        next.Y <= 0 || next.Y >= _height - 1;

    // Wejście na obecną pozycję ogona jest bezpieczne,
    // jeżeli w tym samym kroku ogon zostanie usunięty.
    var hitsBody = _occupied.Contains(next) && (grows || next != tail);

    if (hitsWall || hitsBody)
    {
        _running = false;
        return;
    }

    AddHead(next);

    if (grows)
    {
        _score += 10;
        SpawnFood();
        return;
    }

    var removedTail = _snake.Last!.Value;
    _snake.RemoveLast();
    _occupied.Remove(removedTail);
}
Decyzja 3 / model gry

Głowa węża wchodzi na pole zajmowane teraz przez ogon. Czy to zawsze kolizja?

Tak, każde zajęte pole bez wyjątku kończy grę

Nie, przy zwykłym ruchu ogon znika w tej samej aktualizacji

Pomyśl o stanie przed i po jednym kroku gry.

Symulacja dobrego feedbacku

Sprawdź, jak mały krok przechodzi od pomysłu do wiedzy

Uruchom przepływ: cel, kod, kompilacja, obserwacja, notatka i przerwa.

Uruchom pętlę

04 / narzędzia

Pomiar bez mikrozarządzania

Narzędzie ma odsłaniać rytm, a nie karać za myślenie

Timer może pomóc zauważyć przerwy i przełączanie kontekstu. Historia commitów może pokazać wielkość kroków. Tablica zadań może ograniczyć pracę w toku. Żadne z tych narzędzi nie potrafi jednak samodzielnie ocenić jakości decyzji.

Mierz tylko to, co prowadzi do rozmowy lub eksperymentu. Jeśli wykres nie zmienia zachowania, jest dekoracją. Jeśli wywołuje presję ciągłej aktywności, szkodzi pracy, którą miał wspierać.

PotrzebaProste narzędzieCo mierzyćCzego nie wnioskować
Ochrona skupieniaTimer systemowyLiczba domkniętych blokówWięcej bloków nie oznacza lepszego kodu
Nauka C#Dziennik eksperymentówPytanie, wynik, własne wyjaśnienieLiczba stron nie jest poziomem zrozumienia
Przepływ zespołuTablica z limitem WIPWiek zadania i blokadyOsoba z blokadą nie jest „wolnym programistą”
Bezpieczna zmianaTest i mały commitCzas do feedbacku i możliwość wycofaniaLiczba commitów nie jest produktywnością

Plan startowy

Siedem dni, żeby nauczyć się więcej bez dokładania wieczorów

  1. Dzień 1Uruchom pustą aplikację konsolową i narysuj ramkę.
  2. Dzień 2Dodaj Position, Direction i ruch jednego znaku.
  3. Dzień 3Wprowadź kolekcję ciała oraz bezpieczny ogon.
  4. Dzień 4Dodaj punkt, wzrost i losowanie wolnej pozycji.
  5. Dzień 5Wydziel Update i Render; nazwij odpowiedzialności.
  6. Dzień 6Napisz trzy testy reguł bez uruchamiania konsoli.
  7. Dzień 7Wyjaśnij projekt własnymi słowami i usuń zbędny kod.

Teraz sprawdź swój profil

Nie szukaj idealnej metody. Znajdź system, który potrafisz powtarzać.

Ankieta poniżej nie ocenia, czy jesteś dobrym programistą. Rozpoznaje sposób, w jaki najczęściej wchodzisz w niepewność: przez mapę, eksperyment, relację albo rytm. Po potwierdzeniu e-mail otrzymasz mocną stronę, sygnał ostrzegawczy i jeden siedmiodniowy eksperyment. Adres służy do weryfikacji i wysłania wyniku.

Materiały do dalszego ćwiczenia