Programowanie

Java 10 dni – Lekcja 4, Jak wykonywany jest kod naszej aplikacji? 🚂🚊🚅🚝

 

https://www.youtube.com/watch?v=aAEJn3QcgQU

No comments
Share:

Java 10 dni – Lekcja 3, Narzędzia programistyczne, które ułatwiają nam pracę

  • Java 10 dni – Lekcja 3, Narzędzia programistyczne, które ułatwiają nam pracę
  • Pełny materiał dostępny na:

 

No comments
Share:

Java 10 dni – Lekcja 2, Twój pierwszy program – aplikacja „Hello World”

 

No comments
Share:

Java 10 dni – Lekcja 1, Co to jest programowanie, program komputerowy i kod źródłowy?

  • Java 10 dni – Lekcja 1, Co to jest programowanie, program komputerowy i kod źródłowy?
  • Pełny materiał dostępny na:

No comments
Share:

Java 10 dni – Start! 🔥🚀

https://www.youtube.com/watch?v=RnKYjTdcIaw

No comments
Share:
odwrotna notacja polska

Odwrotna Notacja Polska (ONP) – rewolucyjne uporządkowanie obliczeń matematycznych➕➖✖️➗

Odwrotna Notacja Polska (ONP) – Jest to sposób zapisu wyrażeń matematycznych, który między innymi eliminuje potrzebę nawiasów do określania kolejności operacji, co sprawia, że jest idealny do użycia w programowaniu i analizie danych. Ta metoda, choć może wydawać się nieintuicyjna na pierwszy rzut oka, oferuje szereg zalet w obliczeniach i implementacji algorytmów.

Odwrotna Notacja Polska – wprowadzenie

Z tego materiału dowiesz się:

  • Czym jest Odwrotna Notacja Polska?
  • Jak się oblicza Odwrotną Notację Polską?
  • Jakie ma zastosowanie Odwrotna Notacja Polska?
  • Jak w Javie wygląda implementacja ONP?

Odwrotna Notacja Polska – historia

Odwrotna Notacja Polska (ONP), znana także jako notacja postfiksowa, została wprowadzona przez australijskiego naukowca Charlesa Leonarda Hamblina w latach 50. XX wieku. Metoda ta jest odmianą notacji polskiej, wynalezionej przez polskiego logika Jana Łukasiewicza w 1924 roku, która używa formatu prefiksowego, gdzie operator jest umieszczany przed operandami (np. + 3 4). W przeciwieństwie do tego ONP umieszcza operator po operandach (np. 3 4 +).

Odwrotna Notacja Polska – jak to obliczyć?

Aby obliczyć wyrażenie zapisane w notacji postfiksowej, wykonujesz kroki w kolejności, używając stosu:

  • Umieść Operand na Stosie: Każdą liczbę umieszczasz na stosie, gdy ją napotkasz.
  • Wykonaj Operację: Gdy napotkasz operator, zdejmujesz ze stosu odpowiednią liczbę operandów (zwykle dwa dla binarnych operatorów jak +, , *, /), wykonujesz operację, a wynik z powrotem umieszczasz na stosie.
  • Wynik Końcowy: Po przetworzeniu całego wyrażenia, na stosie pozostaje jedna wartość — wynik końcowy operacji.

odwrotna notacja polska

➡ ZOBACZ 👉: Stos (Stack)

Odwrotna Notacja Polska – rozwiązanie

Aby rozwiązać wyrażenie w Odwrotnej Notacji Polskiej (ONP) 2 3 * 4 5 * +, postępujemy zgodnie z regułami obliczania, używając stosu do przechowywania tymczasowych wyników. Oto kroki:

  1. Umieść 2 na stosie:
    • Stos: [2]
  2. Umieść 3 na stosie:
    • Stos: [2, 3]
  3. Napotykasz operator * (mnożenie), więc zdejmujesz dwa ostatnie liczby ze stosu (3 i 2), mnożysz je i wynik umieszczasz z powrotem na stosie:
    • Operacja: 2 * 3 = 6
    • Stos: [6]
  4. Umieść 4 na stosie:
    • Stos: [6, 4]
  5. Umieść 5 na stosie:
    • Stos: [6, 4, 5]
  6. Napotykasz kolejny operator * (mnożenie), więc znowu zdejmujesz dwa ostatnie liczby ze stosu (5 i 4), mnożysz je i wynik umieszczasz z powrotem na stosie:
    • Operacja: 4 * 5 = 20
    • Stos: [6, 20]
  7. Napotykasz operator + (dodawanie), więc zdejmujesz dwa ostatnie liczby ze stosu (20 i 6), sumujesz je i wynik umieszczasz z powrotem na stosie:
    • Operacja: 6 + 20 = 26
    • Stos: [26]

Wynik Końcowy

Na stosie pozostaje jedna liczba, 26, która jest wynikiem końcowym wyrażenia 2 3 * 4 5 * +.

To samo działanie zapisane w zwyczajnej notacji, jaką znamy ze szkoły (infiksowej) wygląda następująco: (2*3) + (4*5).

Odwrotna Notacja Polska – przykłady

Oto kilka przykładów zapisu wyrażeń.

Dodawanie i odejmowanie

notacja infiksowa: 3 + 4 − 53 + 4 − 5

⇒🇵🇱 notacja postfiksowa: 3 4 − 53 + 4 − 5 +

Mnożenie i dzielenie

notacja infiksowa: 3 * 7 * 2 / 3

⇒🇵🇱 notacja postfiksowa: 3 7 * 2 * 3 /

Wyrażenie złożone

notacja infiksowa: (3 + 4) * 5(3 + 4) * 5 / 5 – 25

⇒🇵🇱 notacja postfiksowa: 3 4 + 5 * 3 4 + * 5 * 5 / 25 –

Odwrotna Notacja Polska – zastosowanie

Odwrotna Notacja Polska (ONP), choć wydaje się być abstrakcyjnym pojęciem matematycznym, znajduje szerokie zastosowanie w praktyce i w biznesie, przede wszystkim dzięki swojej efektywności i prostocie implementacji w systemach komputerowych.

Kalkulatory i narzędzia obliczeniowe

Wiele kalkulatorów naukowych wykorzystuje ONP, ponieważ pozwala to na szybsze przetwarzanie skomplikowanych wyrażeń matematycznych bez błędów wynikających z niewłaściwego użycia nawiasów. Przykładem może być popularny kalkulator HP-12C, używany przez inżynierów i finansistów.

hp 12c

Programowanie i rozwój oprogramowania

  • Parsowanie Wyrażeń: W programowaniu często potrzebne jest przetwarzanie i ocena wyrażeń wprowadzanych przez użytkownika. Implementacja parserów wykorzystujących ONP jest prostsza i mniej podatna na błędy, co jest szczególnie przydatne w aplikacjach wymagających dynamicznego obliczania wyrażeń matematycznych.
  • Kompilatory i Interpretery: ONP jest używana w kompilatorach i interpreterach języków programowania do oceny wyrażeń. Ponieważ operacje są wykonywane zgodnie z kolejnością występowania, bez potrzeby analizowania nawiasów, proces ten jest bardziej wydajny.

Nauka algorytmów

ONP jest także cennym narzędziem dydaktycznym w nauczaniu algorytmiki i struktur danych, szczególnie w kontekście stosów i kolejek, które są fundamentem dla notacji postfiksowej.

Odwrotna Notacja Polska – implementacja

Implementacja Odwrotnej Notacji Polskiej (ONP) w Javie wymaga użycia stosu do przechowywania operandów i efektywnego przetwarzania operatorów. Poniżej znajdziesz przykładowy kod, który przetwarza wyrażenie w notacji postfiksowej i oblicza jego wynik. Przykład koncentruje się na podstawowych operacjach arytmetycznych: dodawaniu, odejmowaniu, mnożeniu i dzieleniu.

class ReversePolishNotation {
    public static int evaluatePostfix(String expression) {
        Stack<Integer> stack = new Stack<>();
        // Przetwarzanie każdego elementu w ciągu wejściowym rozdzielonego spacjami
        String[] tokens = expression.split(" ");

        for (String token : tokens) {
            // Jeśli element jest liczbą, zapisz go na stosie
            if (token.matches("\\d+")) { // Regex do sprawdzania, czy token jest liczbą
                stack.push(Integer.parseInt(token));
            } else { // Token jest operatorem
                // Operator wymaga pobrania dwóch ostatnich liczb ze stosu
                int num2 = stack.pop();
                int num1 = stack.pop();

                switch(token.charAt(0)) { // Zakładamy, że operator to pojedynczy znak
                    case '+':
                        stack.push(num1 + num2);
                        break;
                    case '-':
                        stack.push(num1 - num2);
                        break;
                    case '*':
                        stack.push(num1 * num2);
                        break;
                    case '/':
                        if (num2 != 0)
                            stack.push(num1 / num2);
                        else
                            throw new UnsupportedOperationException("Division by zero.");
                        break;
                }
            }
        }
        return stack.pop(); // Wynik końcowy znajduje się na szczycie stosu
    }

    public static void main(String[] args) {
        String expression = "2 3 * 4 5 * +"; // operandy należy odzielić od siebie spacją aby były poprawnie odczytane przez program

        int result = evaluatePostfix(expression);
        System.out.println("The result of the expression is: " + result);
    }
}

Stos jest idealny do tego zadania, ponieważ pozwala łatwo dodać i usunąć elementy w odpowiedniej kolejności. Przechodzimy przez każdy znak w wyrażeniu. Jeżeli znak jest cyfrą, przekształcamy go z char na int (odejmując wartość ‘0’ od kodu znaku) i umieszczamy na stosie. Jeśli napotkamy operator, zdejmujemy dwie ostatnie liczby ze stosu, wykonujemy operację i wynik wrzucamy z powrotem na stos. Obsługiwane operacje to dodawanie (+), odejmowanie (-), mnożenie (*) i dzielenie (/). Dzielenie przez zero jest tu wyraźnie obsłużone jako wyjątek.

Odwrotna Notacja Polska – konwerter

Konwerter z Notacji Infiksowej na Postfiksową

class InfixToPostfix {

    // Metoda zwracająca priorytet operatora
    private static int getPriority(char operator) {
        if (operator == '+' || operator == '-') {
            return 1;
        }
        if (operator == '*' || operator == '/') {
            return 2;
        }
        return 0;
    }

    // Metoda konwertująca wyrażenie infiksowe na postfiksowe
    public static String convertToPostfix(String infix) {
        StringBuilder postfix = new StringBuilder();
        Stack<Character> stack = new Stack<>();
        boolean expectOperand = true;  // Dodane do sprawdzania, czy oczekujemy na operand

        for (int i = 0; i < infix.length(); i++) {
            char c = infix.charAt(i);

            if (Character.isDigit(c)) {
                postfix.append(c);
                if (i + 1 < infix.length() && Character.isDigit(infix.charAt(i + 1))) {
                    continue;
                } else {
                    postfix.append(' ');
                }
                expectOperand = false;  // Po dodaniu liczby oczekujemy operatora
            } else if (c == '(') {
                stack.push(c);
                expectOperand = true;  // Po '(' oczekujemy kolejnego operandu
            } else if (c == ')') {
                while (!stack.isEmpty() && stack.peek() != '(') {
                    postfix.append(stack.pop());
                    postfix.append(' ');
                }
                if (stack.isEmpty()) {
                    throw new IllegalArgumentException("Mismatched parentheses in the expression.");
                }
                stack.pop();
                expectOperand = false;  // Po ')' oczekujemy operatora
            } else if (c == '+' || c == '-' || c == '*' || c == '/') {
                if (expectOperand) {
                    throw new IllegalArgumentException("Missing operand before operator " + c);
                }
                while (!stack.isEmpty() && getPriority(c) <= getPriority(stack.peek())) {
                    postfix.append(stack.pop());
                    postfix.append(' ');
                }
                stack.push(c);
                expectOperand = true;  // Po operatorze oczekujemy kolejnego operandu
            }
        }

        while (!stack.isEmpty()) {
            if (stack.peek() == '(') {
                throw new IllegalArgumentException("Mismatched parentheses in the expression.");
            }
            postfix.append(stack.pop());
            postfix.append(' ');
        }
        if (expectOperand && !postfix.toString().trim().isEmpty()) {
            throw new IllegalArgumentException("Missing operand at the end of expression.");
        }

        return postfix.toString().trim();
    }
}

Metoda pomocnicza getPriority() określa priorytet operatorów matematycznych, co jest kluczowe do zarządzania kolejnością operacji podczas konwersji. Każdy znak w wyrażeniu infiksowym jest przetwarzany w pętli. Cyfry są dodawane bezpośrednio do postfix. Aby obsłużyć liczby wielocyfrowe, kod sprawdza, czy następny znak to również cyfra, zanim doda spację.

Nawiasy Otwierające ‘(’: Są umieszczane na stosie, aby wskazać początek subwyrażenia. Nawiasy Zamykające ‘)’: Powodują opróżnienie stosu z operatorów aż do napotkania nawiasu otwierającego, który jest usuwany. Operatory: Jeśli operator ma niższy lub równy priorytet do operatora na wierzchu stosu, operatory są ściągane ze stosu do wyniku. Następnie bieżący operator jest umieszczany na stosie.

Po przejściu przez wszystkie znaki, wszystkie pozostałe operatory na stosie są ściągane do wynikowego wyrażenia postfiksowego. Sprawdzanie Nawiasów: Rzuca wyjątek IllegalArgumentException, gdy nawiasy są niezbalansowane (np. brakujący ‘(’ lub ‘)’). Sprawdzanie Oczekiwanych Operandów: Rzuca wyjątek, gdy przed operatorem nie ma odpowiedniego operandu lub gdy oczekiwano na operand na końcu wyrażenia.

Konwerter z Notacji Postfiksowej na Infiksową

class PostfixToInfix {
    // Klasa pomocnicza do przechowywania wyrażeń wraz z ich priorytetem operacyjnym
    static class Expression {
        String expr;
        int precedence;

        public Expression(String expr, int precedence) {
            this.expr = expr;
            this.precedence = precedence;
        }
    }

    // Metoda zwracająca priorytet operatora
    private static int precedenceOf(char operator) {
        if (operator == '+' || operator == '-') return 1;
        if (operator == '*' || operator == '/') return 2;
        return -1;
    }

    // Metoda konwertująca wyrażenie postfiksowe na infiksowe
    public static String convertToInfix(String postfix) throws IllegalArgumentException {
        Stack<Expression> stack = new Stack<>();
        String[] tokens = postfix.split("\\s+");

        for (String token : tokens) {
            if (token.matches("\\d+")) { // Sprawdza, czy token jest liczbą
                stack.push(new Expression(token, 3));
            } else if (token.matches("[+\\-*/]")) { // Sprawdza, czy token jest operatorem
                if (stack.size() < 2) { // Sprawdza, czy na stosie są co najmniej dwa elementy
                    throw new IllegalArgumentException("Invalid Expression: Not enough operands for " + token);
                }
                Expression right = stack.pop();
                Expression left = stack.pop();

                int opPrecedence = precedenceOf(token.charAt(0));
                String leftExpr = left.expr;
                if (left.precedence < opPrecedence) {
                    leftExpr = "(" + left.expr + ")";
                }

                String rightExpr = right.expr;
                if (right.precedence < opPrecedence) {
                    rightExpr = "(" + right.expr + ")";
                }

                stack.push(new Expression(leftExpr + " " + token + " " + rightExpr, opPrecedence));
            }
        }

        if (stack.size() != 1) {
            throw new IllegalArgumentException("Invalid Expression: Mismatched operands and operators");
        }
        return stack.pop().expr; // Zwrócenie ostatniego wyrażenia ze stosu jako wynik
    }
}

Metoda convertToInfix() konwertuje wyrażenie postfiksowe na infiksowe. Wyrażenie postfiksowe jest dzielone na tokeny (liczby i operatory), które są przetwarzane jeden po drugim. Wyrażenie postfiksowe jest rozdzielane na tokeny (elementy), które są następnie przetwarzane jeden po drugim.

Dla każdego tokenu sprawdzane jest, czy jest to operand (liczba) czy operator (+, -, *, /). Gdy napotykany jest operator, zdejmowane są dwa ostatnie wyrażenia ze stosu, a następnie łączone zgodnie z priorytetem operacji. Jeśli priorytet operacji jest wyższy niż priorytet wyrażeń, dodawane są nawiasy do tych wyrażeń, aby zachować właściwą kolejność operacji matematycznych. Po przetworzeniu wszystkich tokenów, na stosie powinno zostać tylko jedno wyrażenie, które jest wynikowym wyrażeniem infiksowym.

Jeśli na stosie jest więcej lub mniej niż jedno wyrażenie, rzucony zostaje wyjątek, informujący o błędzie w podanym wyrażeniu postfiksowym.

Odwrotna Notacja Polska – podsumowanie

Odwrotna Notacja Polska oferuje wyjątkową kombinację prostoty, efektywności i szerokiego zakresu zastosowań, czyniąc ją atrakcyjnym rozwiązaniem dla wielu problemów obliczeniowych zarówno w nauce, technologii, jak i biznesie. Jej zdolność do uproszczenia procesów obliczeniowych i minimalizacji potencjalnych błędów sprawia, że jest ceniona w wielu dziedzinach, od edukacji po wysokiej stawki finansowe i techniczne aplikacje.

 

➡ ZOBACZ 👉: Rekurencja ➿ rekursja ➿ rekurencja

No comments
Share:
hanoi tower

Wieża Hanoi🗼: Klasyczne wyzwanie logiczne – przewodnik początkującego programisty💡

Wieża Hanoi (ang. Hanoi Tower). To zadanie, choć proste w swojej idei, stanowi doskonałe pole do ćwiczenia umiejętności programistycznych i logicznego myślenia. Zapraszam do zgłębienia tajemnic tej zagadki, która od ponad wieku fascynuje zarówno matematyków, jak i programistów na całym świecie.

Wieża Hanoi – wprowadzenie

Z tego materiału dowiesz się:

  • Czym jest Wieża Hanoi?
  • Jaką naturę ma Wieża Hanoi?
  • Jak rozwiązać Wieżę Hanoi?
  • Jak Wieżę Hanoi wykorzystuje się w programowaniu?

Wieża Hanoi – jaki jest problem?

Wieża Hanoi to łamigłówka, która najprawdopodobniej powstała w Azji. Natomiast w Europie rozpropagował ją francuski matematyk Édouard Lucas. Zadanie polega na przeniesieniu stosu różnej wielkości dysków z jednego słupka na inny, z wykorzystaniem trzeciego słupka jako pomocniczego, z zachowaniem zasady, że na mniejszym dysku nie może spoczywać dysk większy.

Wieża Hanoi – hierarchiczna natura

Główna zasada Wież Hanoi mówi, że żaden większy dysk nie może spoczywać na mniejszym dysku. Ta reguła wprowadza zależność między dyskami, ustalając hierarchię, w której mniejsze dyski zawsze muszą leżeć na większych, niezależnie od słupka, na którym są umieszczone. Taka organizacja wymaga od gracza strategicznego planowania i przewidywania, jak przeniesienie jednego dysku wpłynie na możliwości przeniesienia innych dysków w przyszłości

Wieża Hanoi – rozwiązanie – algorytm

Rozważmy rozwiązanie problemu dla 3 dysków.

Proces rozwiązywania Wież Hanoi może być opisany następująco:

  • Przenieś n-1 dysków na słupek pomocniczy, co pozwala na odsłonięcie największego dysku.

wieża hanoi

 

  • Przenieś najmniejszy dysk na słupek pomocniczy, a największy dysk na docelowy słupek.

wieża hanoi

  • Teraz największy dysk jest już na swoim miejscu i nie będzie już więcej przenoszony.

wieża hanoi

  • Przenieś n-1 dysków z pomocniczego słupka na docelowy, co kończy proces.

wieża hanoi

Każdy z tych kroków jest zależny od poprzedniego, tworząc złożoną sieć zależności, która musi być przestrzegana, aby osiągnąć cel.

wieża hanoi

Możemy obliczyć minimalną liczbę ruchów potrzebnych do rozwiązania zadania za pomocą wzoru 2n-1.

gdzie n to ilość dysków.

Wieża Hanoi – rekurencyjne podejście

W praktyce rozwiązanie Wież Hanoi opiera się na rekurencyjnym podziale problemu na mniejsze części. Rekurencyjna natura rozwiązania wiąże się bezpośrednio z zależnościami między dyskami. Na przykład, przeniesienie największego dysku (podstawy) na celowy słupek jest możliwe tylko wtedy, gdy wszystkie mniejsze dyski są już na innym, pomocniczym słupku. To z kolei wymaga rozwiązania mniejszego problemu Wież Hanoi dla tych mniejszych dysków na pomocniczym słupku.

➡ ZOBACZ 👉: Rekurencja ➿ rekursja ➿ rekurencja

Wieża Hanoi – programowanie

Gra w Wieże Hanoi nie tylko rozwija zdolności rekurencyjnego myślenia, ale także uczy strategii i planowania. Jest również świetnym wprowadzeniem do stosów w informatyce, ponieważ dyski można traktować jako elementy stosu, co dodatkowo ilustruje zasady LIFO (Last In, First Out).

➡ ZOBACZ 👉: Stos (Stack) – 7+ tajników implementacji LIFO

Wieża Hanoi – Java

Algorytm, który rozwiązuje łamigłówkę i prezentuje każdy krok rozwiązania.

class HanoiTowers {
    public static void main(String[] args) {
        int numberOfDisks = 8;
        solveHanoi(numberOfDisks, 'A', 'C', 'B');
    }
    public static void solveHanoi(int disk, char start, char end, char auxiliary) {
        if (disk == 1) {
            System.out.println("Przenieś dysk 1 z " + start + " na " + end);
            return;
        }
        solveHanoi(disk - 1, start, auxiliary, end);
        System.out.println("Przenieś dysk " + disk + " z " + start + " na " + end);
        solveHanoi(disk - 1, auxiliary, end, start);
    }
}

Funkcja solveHanoi() Jest to rekurencyjna funkcja, która rozwiązuje problem Wież Hanoi. Przyjmuje cztery parametry: liczbę dysków (disk), oraz oznaczenia słupków: startowego (start), docelowego (end) i pomocniczego (auxiliary). Jeśli jest tylko jeden dysk, funkcja po prostu przenosi dysk bezpośrednio z słupka startowego na docelowy i kończy działanie. W przeciwnym razie przenosi dyski zgodnie z wcześniej omówionymi zasadami.

Kiedy uruchomisz ten program, wyświetlą się instrukcje na konsoli, które pokazują dokładną kolejność ruchów potrzebną do rozwiązania łamigłówki Wież Hanoi dla określonej liczby dysków. Możesz łatwo zmieniać liczbę dysków, modyfikując wartość zmiennej numberOfDisks w funkcji main().

Wieża Hanoi, logi

Wieża Hanoi – wizualizacja

Jeśli kod powyżej jest dla Ciebie niewystarczający, to sprawdź rozwiązanie, które dodatkowo wizualizuje w konsoli położenie dysków w trakcie rozwiązywania zadania.

class VisualHanoi {
    private static Stack<Integer>[] towers = new Stack[3];

    public static void main(String[] args) {
        int numberOfDisks = 3;  // Ustaw liczbę dysków tutaj
        setupTowers(numberOfDisks);
        printTowers();
        solveHanoi(numberOfDisks, 0, 2, 1);
    }

    private static void setupTowers(int disks) {
        for (int i = 0; i < 3; i++) {
            towers[i] = new Stack<>();
        }
        for (int disk = disks; disk > 0; disk--) {
            towers[0].push(disk);
        }
    }

    private static void solveHanoi(int disk, int start, int end, int auxiliary) {
        if (disk == 1) {
            towers[end].push(towers[start].pop());
            System.out.println("Przenieś dysk 1 z " + (char) ('A' + start) + " na " + (char) ('A' + end));
            printTowers();
            return;
        }
        solveHanoi(disk - 1, start, auxiliary, end);
        towers[end].push(towers[start].pop());
        System.out.println("Przenieś dysk " + disk + " z " + (char) ('A' + start) + " na " + (char) ('A' + end));
        printTowers();
        solveHanoi(disk - 1, auxiliary, end, start);
    }

    private static void printTowers() {
        System.out.println("A Tower: " + towers[0] + " B Tower: " + towers[1] + " C Tower: " + towers[2]);
        System.out.println("-------------------");
    }
}

UWAGA! Ostrożnie z ilością dysków, no chyba że masz całą wieczność. 🙃

Wieża Hanoi – zastosowanie

Problem Wież Hanoi znajduje zastosowanie w nauce o algorytmach, teorii gier, a nawet w psychologii, badając sposób, w jaki ludzie i maszyny podejmują sekwencyjne decyzje. Powiązany jest również z takimi koncepcjami, jak algorytmy sortowania, przeszukiwanie przestrzeni stanów oraz algorytmy planowania.

Wieża Hanoi – ciekawostka

Rozwiązanie łamigłówki staje się coraz trudniejsze wraz ze wzrostem ilości dysków. W zasadzie nie tyle trudniejsze ponieważ sekwencja ruchów się nie zmienia, co bardziej czasochłonne. Przełożenie wieży z 8 dyskami, zajmuje około 7 minut. Gdy zwiększymy ilość dysków do 30, i poświęcilibyśmy tylko jedną sekundę na przełożenie każdego dysku, zajęłoby nam to 33 lata.

Wieża Hanoi – podsumowanie

Wieża Hanoi to znakomity przykład na to, jak prosty problem matematyczny może być użyty do nauczania kluczowych pojęć informatycznych i programistycznych. Przez próbę rozwiązania tej zagadki, programiści mogą nauczyć się nie tylko rekurencji i stosów, ale również sposobów optymalizacji i efektywnego rozwiązywania problemów. Uczy metody podziału problemów na mniejsze, co jest fundamentalną umiejętnością w programowaniu i inżynierii. Uczy również zarządzania zasobami i przestrzegania określonych ograniczeń, co ma zastosowanie w projektowaniu algorytmów, optymalizacji systemów i wielu innych dziedzinach technicznych.

 

No comments
Share:
idealny kod

Dlaczego nie piszę idealnego kodu, czyli o tym kiedy i jak pokazywać kod?{📝}

Uczysz się programować? Piszesz kod? Tak?

Mija:

  • Dzień.
    • Miesiąc.
      • Rok lub dłużej…

A dalej nikt poza Tobą nie widział Twojego kodu?

Jeżeli TAK? – to masz problem…

Nie piszę idealnego kodu – wprowadzenie

Z tego materiału dowiesz się:

  • Kiedy jest najlepszy moment by pokazać kod?
  • Co to znaczy „idealny kod”?
  • Dlaczego nie piszemy idealnego kodu?
  • Jakie są skutki emocjonalnego podejścia?
  • Jakie znaczenie ma dzielenie się kodem?
  • Co to jest efekt obserwatora?
  • Jak najlepiej dzielić się kodem?

Nie piszę idealnego kodu – kiedy jest ten najlepszy moment by pokazać kod?

Kiedy jest ten najlepszy moment, by pokazać światu Twój ukochany, wypieszczony kod?

Czas mija,
a Ty dalej uważasz,
że Twój kod nie jest jeszcze gotowy, by pokazać go innym?

Zdradzę Ci pewien sekret. 👇

To nie Twój kod nie jest gotowy – to Ty nie jesteś jeszcze na to gotów!!

Boimy się oceny – i takie podejście prowadzi do tego, że Ty na tym tracisz. Twój kod traci i później zespół też.

Wobec tego wyjaśnijmy – Dlaczego dążenie do idealnego kodu może być nierealne lub nawet niepożądane?

Nie piszę idealnego kodu – co to znaczy „idealny kod”?

Rozważając definicję czystego kodu, zastanówmy się, czy w ogóle taki istnieje?

Różnice w postrzeganiu idealnego kodu wynikają z tego, że każdy inaczej go widzi, biorąc pod uwagę różne aspekty takie jak wydajność (zarówno pamięci, jak i czasu wykonania), czytelność, oraz czas dostarczenia projektu. Z uwagi na wiele różnych aspektów, dochodzimy do wniosku, że nie ma czegoś takiego jak kod idealny. Często również nie ma takiej potrzeby, a nawet tego nie chcemy.

Nie piszę idealnego kodu – dlaczego nie piszemy idealnego kodu?

Nie piszemy idealnego kodu głównie z powodów ograniczeń czasowych i budżetowych, klient często woli coś taniej lub szybciej. Ewolucja projektu i zmieniające się wymagania mogą wpływać na rozszerzalność kodu. Ważne są także kompromisy projektowe między czytelnością a wydajnością oraz rozwój technologiczny, który wprowadza nowe technologie. Kod ma przede wszystkim dostarczać wartość, a jego tworzenie musi być ekonomicznie uzasadnione.

Nie piszę idealnego kodu – twoje dzieło nigdy nie będzie gotowe!

Podejście emocjonalne do nauki programowania pokazuje, że początkujący często porównują się do doświadczonych programistów, co może prowadzić do frustracji, gdy własny kod nie wydaje się doskonały. Ważne jest jednak zrozumienie, że każdy projekt, Twój tekst, kod, czy dzieło, nie musi być idealny od razu. Ważniejsze jest, aby był wystarczająco dobry do wykonania swojego zadania. Z czasem, z doświadczeniem i praktyką, każdy kolejny kawałek kodu będzie lepszy.

Nie piszę idealnego kodu – znaczenie pokazywania kodu – dlaczego to jest ważne?

Pokazywanie kodu innym ma duże znaczenie, ponieważ umożliwia otrzymywanie cennego feedbacku i recenzji kodu. Dzięki temu możesz szybciej wyłapać ewentualne błędy i nauczyć się nowych rzeczy. Przegląd kodu w projekcie, dzielenie się wiedzą i wspólna praca nad kodem, a także prezentacja kodu na konsultacjach pomagają w rozwijaniu umiejętności opowiadania o swoich pomysłach i prowadzeniu dyskusji, co przyczynia się do lepszego zrozumienia kodu i współpracy w zespole.

Nie piszę idealnego kodu – przyjmowanie krytyki i rad

Przyjmowanie krytyki i rad z mniej emocjonalnego podejścia wymaga konstruktywnego reagowania na feedback, oceny kodu/rozwiązania, a nie osoby, i pamiętania o wspólnej pracy. Bądźmy mili, wspierajmy się, wymieniajmy przeglądami, pomagajmy sobie. Każdy zaczynał od pisania nieidealnego kodu, ważne jest, aby dążyć do poprawy, nie bojąc się publikacji własnych prac. Z czasem jakość kodu się poprawi, a inni pomogą w tym procesie.

Nie piszę idealnego kodu – dodatkowy motywator i efekt obserwatora

Efekt obserwatora, który oznacza, że obecność innych wpływa na nasze zachowanie, może działać jako motywator. Świadomość, że nasza praca zostanie wkrótce upubliczniona, może skłonić nas do lepszego myślenia i pracy. To samo dotyczy innych sytuacji, jak przestrzeganie diety czy zachowanie na drodze – wiedza, że ktoś może obserwować nasze działania, sprawia, że staramy się bardziej.

Nie piszę idealnego kodu – zawsze aktualne portfolio

Regularne udostępnianie kodu jest świetnym sposobem na aktualizowanie i budowanie portfolio, które możesz pokazać potencjalnym pracodawcom lub klientom. Decydując, co włączyć do portfolio, ważne jest wybranie projektów, które najlepiej oddają Twój zakres umiejętności i doświadczenie, unikając jednocześnie projektów nieukończonych lub nieodzwierciedlających Twojego aktualnego poziomu.

➡ ZOBACZ 👉: Git commit | git commit, amend, add, status, diff

➡ ZOBACZ 👉: Git push – git integracja ze zdalnym repozytorium, git push, ssh, remote

Nie piszę idealnego kodu – jak najlepiej dzielić się kodem?

Dzielenie się kodem można zorganizować szybko i wygodnie, dostosowując metodę do sytuacji. Dla prostych przypadków wystarczy screen lub kopiowanie fragmentu kodu, podczas spotkań online możemy udostępnić ekran przez Google Meet czy Zoom. Dla większych projektów warto przeprowadzić profesjonalny przegląd kodu, na przykład wrzucając kod na GitHub i tworząc pull request

➡ ZOBACZ 👉: Code Review – Nie wiesz jak pisać lepszy kod? Skup się na code review (przegląd kodu)!

➡ ZOBACZ 👉: GitHub tutorial | GitHub desktop, GitHub actions

➡ ZOBACZ 👉: Git tutorial | stash, rebase, commit, merge, checkout, push i clone

Nie piszę idealnego kodu – podsumowanie

Dzielenie się kodem to wartościowa praktyka w programowaniu i nauce, z której korzystasz Ty oraz inni. Jest to jedna z dobrych praktyk, która może znacząco wspomóc Twój rozwój. Im szybciej zaczniesz się nią dzielić, tym lepiej dla Ciebie i Twojej społeczności programistycznej.

➡ ZOBACZ 👉: Zobacz gotowy 10-krokowy System Który pozwoli Ci zmienić branżę i Zostać Programistą w 6-12 miesięcy!

No comments
Share:
sudoku

Sudoku💡

Sudoku – to gra logiczna, która polega na wypełnieniu siatki 9×9 cyframi tak, aby każda kolumna, każdy wiersz i każdy z dziewięciu kwadratów 3×3 (które razem tworzą większą siatkę 9×9) zawierały wszystkie cyfry od 1 do 9.

Oto podstawowe reguły:

  • Podstawowa siatka: Cała gra odbywa się na siatce 9×9, która jest podzielona na 9 mniejszych kwadratów 3×3.
  • Cyfry od 1 do 9: Każda cyfra od 1 do 9 musi pojawić się dokładnie raz w każdym wierszu, każdej kolumnie i każdym kwadracie 3×3.
  • Jedna cyfra na komórkę: Każda komórka w siatce może zawierać tylko jedną cyfrę.
  • Początkowe wskazówki: Gra zaczyna się z pewną liczbą już wypełnionych cyfr (wskazówek), które gracze muszą użyć jako punkt wyjścia.
  • Logika, nie, zgadywanie: Rozwiązanie sudoku opiera się wyłącznie na dedukcji i logice. Nie ma potrzeby zgadywania.
  • Brak powtórzeń: Cyfra może pojawić się tylko raz w każdym wierszu, kolumnie i kwadracie 3×3.
  • Unikalne rozwiązanie: Każda prawidłowo zaprojektowana łamigłówka sudoku ma tylko jedno możliwe rozwiązanie.

Sudoku – przygotowanie planszy

Rozpoczynamy od zdefiniowania planszy jako dwuwymiarowej tablicy liczb całkowitych, gdzie wartość 0 reprezentuje pustą komórkę:

	public static void main(String[] args) {
		int[][] board = {
				{8, 0, 0, 0, 0, 0, 0, 0, 0},
				{0, 0, 3, 6, 0, 0, 0, 0, 0},
				{0, 7, 0, 0, 9, 0, 2, 0, 0},
				{0, 5, 0, 0, 0, 7, 0, 0, 0},
				{0, 0, 0, 0, 4, 5, 7, 0, 0},
				{0, 0, 0, 1, 0, 0, 0, 3, 0},
				{0, 0, 1, 0, 0, 0, 0, 6, 8},
				{0, 0, 8, 5, 0, 0, 0, 1, 0},
				{0, 9, 0, 0, 0, 0, 4, 0, 0}
		};

		printBoard(board);
	}

	private static void printBoard(int[][] board) {
		for (int i = 0; i < SIZE; i++) {
			for (int j = 0; j < SIZE; j++) {
				System.out.print(board[i][j] + " ");
			}
			System.out.print("\n");
		}
		System.out.println();
	}

Sudoku java przykład

Sudoku – rozwiązanie

Kluczową częścią algorytmu jest metoda solve(), która rekurencyjnie przeszukuje możliwości wypełnienia planszy:

    private boolean solve(int[][] board) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                if (board[i][j] == NO_VALUE) {
                    for (int k = 1; k <= 9; k++) {
                        board[i][j] = k;
                        if (isValid(board, i, j) && solve(board)) {
                            return true;
                        }
                        board[i][j] = NO_VALUE;
                    }
                    return false;
                }
            }
        }
        return true;
    }

➡ ZOBACZ 👉: Rekurencja ➿ rekursja ➿ rekurencja

Dla każdej pustej komórki (NO_VALUE), metoda próbuje wstawić każdą możliwą wartość od 1 do 9, sprawdzając za każdym razem, czy nie narusza to zasad sudoku przy użyciu metody isValid().

Sudoku – walidacja

    private boolean isValid(int[][] board, int row, int column) {
        return (rowConstraint(board, row)
                && columnConstraint(board, column)
                && subsectionConstraint(board, row, column));
    }

Korzystając z pomocniczych metod, algorytm weryfikuje, czy dane umieszczenie liczby nie powoduje konfliktów.

Sudoku – pomocnicze metody walidacyjne

    private boolean rowConstraint(int[][] board, int i) {
        boolean[] constraint = new boolean[SIZE];
        return IntStream.range(1, 9)
                .allMatch(column -> checkConstraint(board, i, constraint, column));
    }
    private boolean columnConstraint(int[][] board, int j) {
        boolean[] constraint = new boolean[SIZE];
        return IntStream.range(1, 9)
                .allMatch(row -> checkConstraint(board, row, constraint, j));
    }
    private boolean subsectionConstraint(int[][] board, int i, int j) {
        boolean[] constraint = new boolean[SIZE];
        int subsectionRowStart = (i / 3) * 3;
        int subsectionRowEnd = subsectionRowStart + 3;

        int subsectionColumnStart = (j / 3) * 3;
        int subsectionColumnEnd = subsectionColumnStart + 3;

        for (int r = subsectionRowStart; r < subsectionRowEnd; r++) {
            for (int c = subsectionColumnStart; c < subsectionColumnEnd; c++) {
                if (!checkConstraint(board, r, constraint, c)) return false;
            }
        }
        return true;
    }

Metody takie jak rowConstraint() i columnConstraint() używają strumieni IntStream do sprawdzania, czy każda liczba w danym wierszu lub kolumnie jest unikalna. Z kolei metoda subsectionConstraint() odpowiada za weryfikację małych kwadratów 3×3.

Sudoku – optymalizacja sprawdzania

    boolean checkConstraint(int[][] board, int i, boolean[] constraint, int j) {
        if (board[i][j] != NO_VALUE) {
            if (!constraint[board[i][j] - 1]) {
                constraint[board[i][j] - 1] = true;
            } else {
                return false;
            }
        }
        return true;
    }

Metoda checkConstraint() zapewnia, że wstawiona liczba nie powtarza się już w danym kontekście (wiersz, kolumna, kwadrat 3×3).

Sudoku – wizualizacja rozwiązania

    private void printBoard(int[][] board) {
        for (int i = 0; i < SIZE; i++) {
            for (int j = 0; j < SIZE; j++) {
                System.out.print(board[i][j]);
                System.out.print(" ");
            }
            System.out.println();
        }
        System.out.println();
    }

Choć algorytm zwraca wartość logiczną wskazującą, czy znaleziono rozwiązanie, dla lepszego zrozumienia procesu warto również wyświetlić końcową konfigurację planszy.

Sudoku – podsumowanie

Wyżej przedstawiony algorytm, jest potężnym narzędziem, które przez systematyczne próbowanie i eliminowanie możliwości, pozwala znaleźć prawidłowe rozwiązanie łamigłówki. Tutaj istotna jest dokładna walidacja każdego ruchu zgodnie z zasadami sudoku oraz rekurencyjne szukanie rozwiązania, które spełnia wszystkie ograniczenia. Mimo że algorytm ten jest skuteczny, istnieje wiele możliwości jego optymalizacji, na przykład poprzez wprowadzenie bardziej zaawansowanych technik eliminacji i sprawdzania możliwości, co może znacząco przyspieszyć proces znajdowania rozwiązania.

➡ ZOBACZ 👉: StormIT | Oferta

No comments
Share:

Jak Zostać Programistą od 0 i Znaleźć Pierwszą Pracę w IT? – gotowy 10-krokowy system

Domyślam się, że skoro tu się spotykamy, to pojawiło się u Ciebie zainteresowanie,
a może już dawno zakiełkowało 🌱 pragnienie zostania programistą. 🙂

Wiem, że początki bywają trudne, bo nie za bardzo wiadomo, jak się za to zabrać, co zrobić jako pierwsze, czy się do tego w ogóle nadaje, mnóstwo pytań pojawia się w głowie i jeszcze więcej wątpliwości a może i nawet frustracji 😕?

Uważam, że niezależnie od tego czy bierzemy się za gotowanie 🧑🏻‍🍳, pomysł na weekend, czy też naukę programowania 👨‍💻 warto mieć plan, który pozwoli w sposób wymierny sprawdzać progres i który ostatecznie doprowadzi nas do upragnionego celu 🏆.
Praca z wieloma ludźmi, którzy byli dokładnie w tym samym miejscu co Ty teraz, pozwoliła mi stworzyć gotowy plan na to jak zacząć, ale i jak przejść krok po kroku👣 do pierwszej pracy jako programista.

Jak Zostać Programistą od 0 – wprowadzenie

Z tego materiału dowiesz się:

  • Jak zostać programistą od 0 do komercyjnego programowania?
  • Jakie umiejętności musisz posiadać, aby zostać programistą?
  • Jak wybrać język programowania?
  • Jak się uczyć programowania?
  • Jak zdobywać umiejętności praktyczne z programowania?
  • Jak przygotować CV i portfolio?
  • Jak ważne jest posiadanie mentora?

Jak Zostać Programistą od 0 do komercyjnego programowania

Nie odkładaj czegoś na jutro, skoro możesz to zrobić dzisiaj — To samo dotyczy nauki programowania. Pomyśl, że jak zaczniesz już dzisiaj, będziesz o jeden dzień bliżej swojej wymarzonej pracy jako programista 💪. Pieczenie bez przepisu ? Brzmi dla mnie trochę jak spora szansa, że do kawy nie zjem nic. Zaczynając naukę programowania, też przyda Ci się porządny plan działania. Dlatego pokażę Ci dziś, najskuteczniejszy i sprawdzony 10-krokowy proces transformacji od zera do komercyjnego programowania – krok po kroku do celu.

 

Jak Zostać Programistą – Plan działania

Przygotowałem kroki, którym przyjrzymy się razem po kolei:

  • Krok 1: Weryfikacja Twoich preferencji i predyspozycji
  • Krok 2: Wstępny wybór kierunku i specjalizacji
  • Krok 3: Wybór pierwszego języka programowania
  • Krok 4: Nauka podstaw
  • Krok 5. Praktyka i doświadczenie niekomercyjne
  • Krok 6. Przygotuj naprawdę dobre CV i portfolio
  • Krok 7. Wyróżnij się na tle innych kandydatów
  • Krok 8. Przygotuj się do rozmowy kwalifikacyjnej
  • Krok 9. Zrealizuj chociaż jeden projekt od początku do końca
  • Krok 10: Znajdź mentora i społeczność
  • Krok 11. [BONUSOWY]. Daj sobie szansę!

Pamiętaj! Nie spiesz się – to nie sprint 🙂 Nie pomijaj kroków, zapoznaj się z każdym punktem i wprowadź go w życie 😉

Jak Zostać Programistą – Krok 1: Weryfikacja Twoich preferencji i predyspozycji

W tym kroku – w dużym uproszczeniu – sprawdzamy, czy to jest naprawdę dla Ciebie.

TAK – programowanie nie jest dla każdego 🙂

O ile naprawdę każdy, kto ma choćby odrobinę chęci, żeby to zrobić – może nauczyć się podstaw programowania.
To zdecydowanie nie każdy odnajdzie się na dłuższą metę w tym zawodzie.

Chodzi przede wszystkim o uniknięcie sytuacji, w której podejmiesz trud nauki i zmiany branży i później zwyczajnie będzie Cię to męczyło. Dlatego lepiej zawczasu to sprawdzić. 🙂

Praca programisty

Poświęć trochę czasu na zapoznanie się z tym co oferuje nam branża. Popatrz, jak wygląda specyfika pracy programisty, jak wygląda jego taki standardowy dzień pracy.

  • Poczytaj trochę artykułów – na naszym blogu znajdziesz ich całą masę
  • Oglądaj firmy, uczestnicz w webinarach
  • Porozmawiaj z kimś, kto już pracuje – i zwyczajnie zapytaj go, jak to wygląda od kuchni.

Znajdź swoje „Dlaczego?”

  • Odpowiedz sobie szczerze na pytanie – dlaczego chcesz uczyć się programowania i dlaczego chcesz zostać programistą?
  • Pomoże ci to gdy pojawią się ewentualne trudności – a jest to tak naprawdę tylko kwestia czasu
  • Zapoznaj się też z poniższym materiałem „Dlaczego warto – ale dlaczego też NIE warto być programistą” – Pomoże Ci on lepiej zorientować się w temacie zawodu programisty 🙂

➡ ZOBACZ 👉: Czy warto być programistą?

Spróbuj tego w praktyce

  • Spróbuj rozwiązać jakiś prosty problem programistyczny
  • Przygotuj aplikację typu „Hello World” w dowolnym języku programowania
  • Obejrzyj fragment jakiegoś tutoriala i przejdź wspólnie z autorem przez tok rozumowania podczas rozwiązywania problemu

Temat pracy programisty został przez Ciebie dogłębnie przeanalizowany 🕵️‍♂️?
Czujesz swoją determinację i wiesz, że pisanie kodu to jest to co, da Ci satysfakcję?

Jeżeli tak, to przyjrzymy się kolejnym krokom, które przybliżą Cię do tego celu!

Jak Zostać Programistą – Krok 2: Wstępny wybór kierunku i specjalizacji

Skoro wiemy już co nieco o Twoich preferencjach i zakładamy, że przynajmniej na tym etapie programowanie wydaje Ci się kuszące, to możemy zejść odrobinę głębiej w naszych rozważaniach.

Szczególnie że programowanie i IT – to bardzo szerokie dziedziny wiedzy.
I tutaj przynajmniej wstępnie warto zastanowić się, w którym kierunku chcemy iść dalej.

Czy będzie to np.

  • implementacja algorytmów,
  • czy może bardziej ciągnie nas do rozmowy z klientem,
  • czy może też do pracy z grafiką?

Możliwości jest naprawdę sporo.

Dziedziny programowania

Zapoznaj się z różnymi dziedzinami programowania, np. robieniem stron internetowych, aplikacjami mobilnymi, data science, AI/sztuczną inteligencją, grami itd.

Specjalizacja

Wstępnie wybierz specjalizację, która najbardziej Cię interesuje i zgadza się z Twoimi celami zawodowymi.

  • Pamiętaj, to nie musi być Twoja ostateczna decyzja i później zawsze można ją zmienić lub rozszerzyć.
  • Tutaj warto zacząć od czegoś prostszego, nawet jeżeli mamy ambicję na coś więcej.
  • Przykładowo, nawet jeżeli za kilka lat widzimy się jako fullstack developer, to warto zacząć od jednej specjalizacji np. backendu i dopiero później to rozszerzyć

Backend

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – natomiast kompletny materiał dotyczący backend’u znajdziesz poniżej.

➡ ZOBACZ 👉: Backend – czy nadajesz się na backend developera?

Jak Zostać Programistą – Krok 3: Wybór pierwszego języka programowania

Wybór preferowanej specjalizacji przynajmniej częściowo będzie implikował nam wybór języka programowania.

O ile większość rzeczy możemy robić w prawie że dowolnym języku, to jednak często niektóre języki lepiej się spisują w konkretnych zastosowaniach.

  • Przykładowo, jeżeli chcemy iść w przetwarzanie danych, czy uczenie maszynowe – to pierwszym wyborem będzie Python.
  • Jeżeli myślimy o pracy na frontendzie, będzie to JavaScript.
  • Natomiast np. decydując się na Javę, możemy liczyć na bardzo dużo różnorodnych projektów, szczególnie w dużych korporacjach.

Nie jest to jednak jedyny aspekt, na który warto zwrócić uwagę.

Wybór języka programowania – Na co jeszcze zwrócić uwagę?

Wybierając język programowania, zwróć uwagę na kilka istotnych punktów, żeby później nie zaczynać od nowa:

  • Możliwości danego języka w kontekście Twoich preferencji
  • Dostępność materiałów edukacyjnych – i to zarówno rozumianych jako szkolenia, dokumentację, ale również jako np. bliska Ci osoba, która zna daną technologię. Szczególnie na starcie ma to duże znaczenie.
  • Patrz na trendy i unikaj prehistorii – nie chcemy przecież uczyć się technologii, z której już teraz mało, kto korzysta.
  • Mniej na uwadze swoje finanse oraz ilość dostępnych projektów w okolicy gdzie szukasz pracy.

Pamiętaj, że nie musi to być Twój ostateczny wybór.
Na coś trzeba się zdecydować i warto zrobić to stosunkowo szybko – tak, żeby Cię to nie blokowało.

Tutaj pomaga świadomość, że większość doświadczonych developerów zna po kilka, a czasem nawet kilkanaście różnych języków programowania – a nasz pierwszy wybór zazwyczaj nie jest tym ostatnim.

Jak wybrać język programowania

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – powyżej zostały wymienione najistotniejsze punkty, na które warto zwrócić uwagę podczas wyboru języka programowania  – natomiast materiał z pełną listą, która jeszcze lepiej pomoże dokonać Ci wyboru jeżeli chodzi o język programowania, znajdziesz poniżej.

➡ ZOBACZ 👉: Jak wybrać język programowania

Wybór języka programowania – Podjęcie decyzji

Punkt 3 został przerobiony?
Research na temat różnych języków programowania został przez Ciebie zrobiony?

W takim razie podejmij decyzję:

  • Nie zwlekaj, nie przeciągaj…
  • Niech Cię to nie blokuje przed dalszymi krokami
  • Warto dać sobie jakiś maksymalny czas ⏰ na podjęcie decyzji.

Jak Zostać Programistą – Krok 4: Nauka podstaw

Skoro wiemy już, w jakim języku 👅 programowania chcemy pisać, czas wreszcie zabrać się za naukę programowania i opanować składnię wybranego języka.

Jednak programowanie, to przecież nie tylko składnia języka programowania!
Będziemy potrzebowali jeszcze wielu innych, równie ważnych – a może i czasem ważniejszych umiejętności.

Ale tym tematem zajmiemy się ze szczegółami już w kolejnym materiale.
Na teraz warto wiedzieć, że składnia języka to punkt wyjścia, bez którego opanowania nie możemy przejść dalej.

 

Nauka podstaw – Podstawy języka programowania

Język wybrany – Czas na naukę 🙂
Tak bez tego zdecydowanie się nie obędzie. Dlatego naucz się dobrze podstaw wybranego przez Ciebie języka programowania:

  • naucz korzystać się z instrukcji warunkowych i pętli,
  • ale również z prostych struktur danych, takich jak chociażby obiekty, tablice, listy, mapy itp.

Nauka podstaw – Kurs Java

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – natomiast jestem tutaj po to, żeby ułatwiać Ci życie jeszcze bardziej 🙂  Tak to jest możliwe 😜. Dlatego materiały do nauki podstaw Javy znajdziesz poniżej.

➡ ZOBACZ 👉: Kurs Java

Nauka podstaw – Praktyka

Ucz się przez praktykę:

  • Rozwiązuj proste problemy programistyczne np. policzenie średniego wieku członków Twojej rodziny.
  • Pisz 🖊️ kod już od samego początku i sukcesywnie zwiększając poziom trudności.

Nauka podstaw – Narzędzia programistyczne

Naucz się korzystać z narzędzi programistycznych takich jak:

  • edytor kodu,
  • debugger,
  • system kontroli wersji itp.

Nauka podstaw – System Kontroli Wersji – Git

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – natomiast  całkowity materiał dotyczący git’a znajdziesz poniżej.

➡ ZOBACZ 👉: Git

Jak Zostać Programistą – Krok 5: Praktyka i doświadczenie niekomercyjne

Podstawy mamy już za sobą, dlatego powoli zaczynamy patrzeć w kierunku wykorzystania naszych umiejętności do pracy zawodowej.

Szukając pierwszej pracy jako programista, będziemy mieli bardzo ważne zadanie – przekonać naszego potencjalnego pracodawcę, że mamy wystarczające umiejętności, żeby wykonywać powierzoną nam pracę.

O ile w przypadku osób z doświadczeniem komercyjnym jest to bardzo proste, bo zwyczajnie już wcześniej pracowaliśmy – tak w przypadku juniorów musimy odrobinę zmienić podejście. Ostatecznie nigdy wcześniej nie pracowaliśmy. 🙂

Wiadomo, że doświadczenie zdobywa się, pracując.
Pracodawcy natomiast wymagają doświadczenia.
Nie masz pracy, bo nie masz doświadczenia,
a nie masz doświadczenia, bo nie masz pracy.
I tak niestety krąg się zamyka…

Jak w takim razie wyjść z tego nieszczęsnego kręgu?

Skoro nie mamy doświadczenia komercyjnego, to trzeba postawić na doświadczenie niekomercyjne!
Czyli pokazać swoje umiejętności w praktyce – najlepiej przez nasze portfolio zrealizowanych projektów.

Skoro uczysz się programowania – to musisz pisać kod!

Praktyka i doświadczenie niekomercyjne – Różne formy nauki programowania

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – dlatego zachęcam Cię również do sprawdzenia całkowitego materiału dotyczącego różnych form nauk programowania, który znajdziesz poniżej.

➡ ZOBACZ 👉: Różne formy nauki programowania

Praktyka i doświadczenie niekomercyjne – Niezbędne kroki

Praktyka, praktyka i jeszcze raz praktyka.
Nikt, ucząc się tylko słówek i gramatyki – bez praktyki nie został native speakerem.

Dlatego koniecznie:

  • Pracuj nad swoimi projektami. Sukcesywnie zwiększaj poziom ich trudności.
  • Ucz się programowania przez praktykę, a nie TYLKO przez bierne oglądanie tutoriali, czy czytanie książek.
  • Dokumentuj swoje dokonania, twórz czytelny kod, pisz dokumentację.
  • A na koniec umieść wszystko na publicznym repozytorium np. GitHub
    • Dzięki czemu od samego początku Twoje portfolio będzie odzwierciedlało Twój aktualny stan wiedzy.

Praktyka i doświadczenie niekomercyjne – Github

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – natomiast kompletny materiał dotyczący Github’a znajdziesz poniżej.

➡ ZOBACZ 👉: Github tutorial

Jak Zostać Programistą – Krok 6: Przygotuj naprawdę dobre CV i portfolio

Okrutna prawda jest taka, że CV zazwyczaj nie jest czytane, a jedynie przeglądane – skanowane wzrokiem…

Czyli w praktyce, masz tylko kilka sekund, żeby zaciekawić rekrutera swoim dokumentem.

Jeżeli już na pierwszy rzut oka Twoje CV krzyczy, że nie masz doświadczenia i nie umiesz nawet przygotować profesjonalnego dokumentu,
to rekruter musi być naprawdę zdesperowany, żeby przeczytać go uważnie…

Nawet jeżeli masz super doświadczenie i umiejętności,
a Twoje CV tego nie odzwierciedla, to masz bardzo małe szanse,
że dostaniesz zaproszenie na rozmowę kwalifikacyjną.

Bo niby skąd taki rekruter ma to wiedzieć jak nie właśnie z Twojego CV?

Przygotuj naprawdę dobre CV

Nie pisz CV na kolanie, a poświęć niezbędny czas, aby je doszlifować.
CV jest Twoim, można powiedzieć biletem wejścia do dalszych etapów rekrutacji – Czyli jest bardzo bardzo ważne!

Dlatego:

  • Zadbaj o dobre pierwsze wrażenie Twojego CV
    (warstwa wizualna, przyciągające wzrok sekcje: o mnie, nazwa stanowiska, doświadczenie itp.)
  • Zadbaj o dobrze opisane doświadczenie niekomercyjne i sekcję zrealizowane projekty
  • Poznaj wymagania pracodawców i personalizuj swoje dokumenty przed ich wysłaniem

Pierwsze rekrutacje – CV

W rekrutacjach bierze udział więcej osób 🙂
Pamiętaj o tym.

Czasem to Ty okażesz się najlepszym dopasowaniem do firmy a czasem, ktoś inny. Nigdy się nie zniechęcaj!
Nawet rekrutacje, które okażą się niepowodzeniem, mogą być dobrą nauką dla Ciebie.

Już mówię, o co chodzi
– W takiej sytuacji człowiek zadaje sobie pytanie dlaczego nie ja?
– Zapytaj – Proś o informację zwrotną i wdrażaj poprawki!

Na początku, kluczowe jest, aby rozbudowywać ciągle swoje doświadczenie oraz zrealizowane projekty
–  uzupełniaj CV, za każdym razem, kiedy stworzysz coś wartego przedstawienia światu.

CV Programisty

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – super uzupełnieniem, do którego Cię zachęcam, będzie materiał dotyczący CV programisty, który znajdziesz poniżej.

➡ ZOBACZ 👉: CV Programisty

Jak Zostać Programistą – Krok 7: Wyróżnij się na tle innych kandydatów

Czasem dobrym wyróżnikiem jest zwyczajnie zrobienie wszystkiego, jak należy i wyróżnienie się jakością.
Czasem jednak trzeba zrobić coś więcej!

Wyróżnij się na tle innych kandydatów – Dlaczego to takie ważne?

Zazwyczaj osoby ubiegające się o stanowisko Junior Developera mają BARDZO podobne umiejętności – a ich CV wyglądają jak wycięte z tego samego szablonu…

W takiej sytuacji, szczególnie gdy mamy wielu kontrkandydatów,
trzeba zrobić coś, by choć odrobinę się wyróżnić:

  • Dodatkowe doświadczenie takie jak: staż, wolontariat, czy dodatkowy zrealizowany projekt?
  • Nietuzinkowe zainteresowania – które wykraczają poza nudne: sport, czytanie i film…
  • Blog techniczny
  • Profesjonalnie przygotowany plik readme.md na GitHub – czy krótkie nagranie wideo z opisem Twojego projektu
  • WSZYSTKO – co jest zgodne z Tobą i pozwoli Cię zauważy

Wymyśl coś – coś niestandardowego.
Coś, co przyciągnie uwagę właśnie do Twojej kandydatury.

Najgorsze, co możesz zrobić to wysłać szablonowego maila z prostym CV, bez personalizacji i z niewielkim doświadczeniem.

Wyróżnij się na tle innych kandydatów – Upewnij się, że to właśnie Ty się wyróżniasz

Pojawia się oferta – Klik – Wyślij CV – Klik… – Ale chwila przecież jak wyślesz, nie będzie już odwrotu, dlatego nie zmarnuj swojej szansy, szczególnie jak oferta naprawdę przypadła Ci do gustu.

Dlatego, zanim wykonasz ten ostateczny klik:

  • Zweryfikuj swoje CV i portfolio i zastanów się, jak zostanie to odebrane przez osobę, która Ciebie nie zna
  • Zadaj sobie pytanie – dlaczego potencjalny pracodawca, ma wybrać właśnie Ciebie, a nie dowolnego innego kandydata.
    On z pewnością zada sobie takie pytanie!

Jak Zostać Programistą – Krok 8: Przygotuj się do rozmowy kwalifikacyjnej

Wiesz, że pytania na większości rozmów kwalifikacyjnych się powtarzają? 🙂

Oczywiście nie wszystkie, bo czasem ludzie starają się być oryginalni…

Jednak w zdecydowanej większości przypadków,
znaczną część pytań można przewidzieć już przed samą rozmową.

Rozmowa kwalifikacyjna to zazwyczaj dosyć stresujące wydarzenie – po co sobie jeszcze bardziej to utrudniać?

Najgorsze, co możesz zrobić, to nie przygotować się i nie znać odpowiedzi na najczęściej zadawane pytania,
a co gorsze – nie znać odpowiedzi na pytania dot. Twojego CV!

Rozmowa rekrutacyjna – Przygotowania

Zaproszenie na rozmowę rekrutacyjną, szczególnie jak jest to jedna z Twoim pierwszych rozmów na stanowisko programisty, wiąże się z ekscytacją, ale i sporym stresem.

Dlatego, aby zminimalizować ewentualne wpadki, przygotuj się do niej, najlepiej jak potrafisz:

  • Przejrzyj listę często występujących pytań rekrutacyjnych i spróbuj przygotować na nie odpowiedzi
  • WYKUJ na blachę odpowiedzi na pytania o Twoje doświadczenie – to jeden z pewników rekrutacyjnych
  • Zasymuluj rozmowę kwalifikacyjną przed lustrem
  • Opcjonalnie – umów się na próbną rozmowę kwalifikacyjną w innej firmie

Pytania rekrutacyjne

W ramach tego materiału zajmujemy się przede wszystkim planem jak zostać programistą – zachęcam Cię do zapoznania się z różnymi pytaniami, z którymi możesz się spotkać na rozmowie rekrutacyjnej – listę pytań z odpowiedziami znajdziesz w materiale poniżej.

➡ ZOBACZ 👉: Java Pytania Rekrutacyjne, Java Zadania

Jak Zostać Programistą – Krok 9: Zrealizuj chociaż jeden projekt od początku do końca

Jeżeli nie wdrożyłeś żadnego projektu produkcyjnie, to tak naprawdę nie znasz jeszcze życia projektowego…

Dopiero doprowadzenie przynajmniej jednego projektu od początku do samego końca i zebranie opinii od prawdziwych użytkowników daje pełny i prawdziwy pogląd na temat pracy programisty.

Praktyka pokazuje, że zazwyczaj nawet nie zdajemy sobie sprawy o jak wielu rzeczach jeszcze wcześniej nie pomyśleliśmy 🙂

Brak projektu w portfolio, to tylko „sucha” wiedza teoretyczna.

Własny projekt

Posiadasz już solidne podstawy jeżeli chodzi o język programowania. To super!
Pokaż teraz  rekruterom, ale również sobie, że potrafisz tę wiedzę wykorzystać i połączyć programistyczne klocki w jedną całość.

Dlatego:

  • Zrealizuj praktyczne projekty potwierdzające Twoje umiejętności.
  • Ucz się programowania przez praktykę, a nie TYLKO przez bierne oglądanie tutoriali, czy czytanie książek.
  • Wdróż swój pomysł – tak by swobodnie można było go pokazać światu.

Rekruterzy często lubią pytać o zrealizowane projekty. Pomyśl, jak ułatwi Ci to rekrutację – opowiesz o tym co wiesz, bo projekt wyszedł spod Twoich rąk – pokażesz, że nie dość, że dobrze ogarniasz teorie, to jeszcze umiesz ją wykorzystać. Jak dla mnie win-win sytuacja 😉

Pomysły na projekt

Nie masz  pomysłu na projekt? Minęły dni, a w Twojej głowie nadal nie wyklarowała się koncepcja na aplikację? Nie martw się ;). Każdy może mieć kryzys twórczy, szczególnie pod presją czasu – dlatego przygotowałem dla Ciebie listę potencjalnych pomysłów na projekt – projektowe inspiracje znajdziesz w materiale poniżej.

➡ ZOBACZ 👉: Lista 20 projektów, które dadzą Ci zatrudnienie w IT

Jak Zostać Programistą – Krok 10: Znajdź mentora i społeczność

Zastanów się 🤔, co będzie miało większą wartość dla klienta?

  • Opcja 1. Dostarczasz mu gotowe rozwiązanie jeszcze dziś – korzystając z gotowych narzędzi i bibliotek.
  • Opcja 2. Dostarczasz mu rozwiązanie po tygodniu – rozwiązując wszystkie problemy samodzielnie i nie korzystając z cudzego kodu.

Pamiętaj dla klienta czas to pieniądz 💰💰 – Ale czy tylko dla niego? 🙂

Pomyśl, że podobnie jest z nauką programowania

  • TAK, da się tego nauczyć samodzielnie.
  • Tylko po co?…

Korzystając z pomocy innych osób i dobrych materiałów – jest zwyczajnie prościej, szybciej i przyjemniej!

Znajdź mentora

Dlaczego to ważne?

Nic tak nie przyspiesza nauki, jak dobry mentor 🧙‍♂️ – który pomoże w trudnych chwilach i podpowie, co robić. A czemu nie mieć takich mentorów – 10, czy 100+? Tak właśnie działa społeczność. Będzie Ci łatwiej zdobywać wiedzę oraz podążać drogą osoby, która już osiągnęła sukces – po co wymyślać koło od nowa?

W tym kroku najważniejsze co musisz zrobić to:

  • Poszukać kontaktu z doświadczonymi programistami i czerpać z ich doświadczenia pełnymi garściami!
  • Znaleźć mentora – kogoś, kto (odpłatnie lub za darmo) poświęci swój czas, by z Tobą pracować.
  • Stale poszukiwać nowych wyzwań programistycznych i osób, które mogą Ci w tym pomóc.
  • Pogodzić się z tym, że nie wszystko MUSISZ i MOŻESZ zrobić w pojedynkę.

Tak naprawdę możesz z tego wyciągnąć same pozytywy – ogrom wiedzy, udziały w fajnych i ciekawych projektach, a także grono nowych znajomości 🙂

Społeczność KierunekJava

Jeżeli nie wiesz, gdzie zacząć poszukiwania mentora lub po prostu społeczności, w której będziesz mógł się uczyć, wspólnie programować i wymieniać wiedzę – sprawdź naszą społeczność KierunekJava – gromadzi ona wiele osób, która chcę tego, co Ty – programować, zdobywać wiedzę i ciągle się rozwijać, a przy okazji żartuje i dobrze się bawi. Jeżeli chcesz dołączyć do tego grona, sprawdź poniższy program.

➡ ZOBACZ 👉: Program Edukacyjny „Kierunek Java”

Jak Zostać Programistą – Krok 11 [BONUSOWY]: Daj sobie szansę!

Nie masz pewności, czy dasz radę?

Nie masz pewności, czy to dobry moment?

Odłóż na chwilę te wątpliwości i zwyczajnie daj sobie szansę! 🙂

Na koniec chcę podzielić się z Tobą 4 etapowym procesem, który pomoże Ci zrobić pierwszy krok  – pętlą zwrotną rekrutacji.

Pętla zwrotna rekrutacji

Może nazwa brzmi tajemniczo, więc już tłumaczę, o co chodzi w tej naszej „magicznej” pętli 🙂

Pętla składa się z 4 kroków, które powtarzamy aż do skutku (zdobycia naszej upragnionej pracki :))

Zamiast zastanawiać się – czy już jestem gotów, czy sobie poradzę itp. – zwyczajnie zaufaj procesowi i przejdź kolejno przez te kroki.

Pętla zwrotna rekrutacji – Krok 1: Nauka

  • Naucz się minimalnego zestawu umiejętności, jaki w danym momencie jest potrzebny – np. nie ucz się jednocześnie jak robić strony internetowe i aplikacje mobilne. Nie. Wybierz na start jedno.
  • Dobry punkt wyjścia przedstawimy w kolejnym materiale.
  • Naucz się tego możliwie szybko i przejdź do kolejnego kroku

Pętla zwrotna rekrutacji – Krok 2: Aktualizacja CV i portfolio

  • Umiesz już to?
  • To teraz to udokumentuj

Pętla zwrotna rekrutacji – Krok 3: Promocja i szukanie pracy

  • Z gotowym dokumentem możemy iść w świat i szukać pracy
  • Próbujemy umówić się na rozmowę kwalifikacyjną

Pętla zwrotna rekrutacji – Krok 4: Zebranie informacji zwrotnej

  • Udało Ci się? Masz pracę? – To gratuluję!
  • Jeszcze nie teraz? – Też dobrze 🙂
    • Pamiętaj jednak, żeby spytać DLACZEGO. Dlaczego nie chcieli Cię zatrudnić właśnie teraz?
    • Warto też dopytać, czego Ci brakuje, czego musisz się jeszcze douczyć.
    • Mamy to?
      • To już wiesz, co robić 🙂
      • Także wracamy do kroku numer. 1

Jak Zostać Programistą – Podsumowanie

Udało Ci się 🤝 🙂 Wszystkie kroki za Tobą 🙂
Czy czujesz, że jesteś w zupełnie innym miejscu z dużą większą wiedzą i umiejętnościami 💪– To prawidłowo 🙂

Cieszę się, że mogłem towarzyszyć Ci w tej podróży, ku spełnieniu Twojego marzenia.

Podziel się w komentarzach swoimi sukcesami, ale i ewentualnymi trudnościami i tym jak udało Ci się je pokonać 😉
Dzielmy się doświadczeniem i uczmy się z doświadczeń innych.

 

Podcast – Jak Zostać Programistą?

Jako uzupełnienie materiału zapraszam Cię również do wysłuchania mojej rozmowy z Krzysztofem w ramach podcastu Porozmawiajmy o IT.

Jak zostać programistą – wprowadzenie

Z tego materiału dowiesz się:

  • czy trzeba mieć pasję do programowania?
  • czy programowanie jest dla każdego?
  • od czego zacząć naukę programowania?
  • czy trudno jest zostać programistą?
  • jaki język programowania wybrać?

Jak zostać programistą – czy trzeba mieć pasję?

Pasja do programowania na pewno pomaga w zdobyciu pierwszej pracy. Natomiast nie jest czynnikiem determinującym. To wspaniała rzecz mieć pasje. Zawód programisty umożliwia realizowanie ich bez względu na to czy są związane z programowaniem, czy nie.

Jak zostać programistą – czy programowanie jest dla każdego?

W zasadzie można zaryzykować stwierdzenie, że programować może każdy, ale czy programowanie jest dla każdego? NIE JEST. Jeśli jedyną motywacją, aby zostać programistą są duże zarobki to raczej nie wróżę przyszłości takiej osobie. Mimo wszystko powinno się to czuć.

Jak zostać programistą – od czego zacząć?

Najlepiej zacząć od pytań do siebie. Spójrz na punkty powyżej☝️. Czy mam w tym pasję? Czy jest to dla mnie interesujące? Czy się w tym odnajdę? Czy mam predyspozycje?

➡ ZOBACZ 👉: Od czego zacząć naukę programowania?

Jak zostać programistą – czy to trudne?

Jak zawsze to zależy, czyli można powiedzieć, że tak jest to trudne i jest to łatwe. Bardzo dużo zależy od kontekstu. Tutaj na pewno warto wspomnieć o tym, że jest to nasza pierwsza praca. My uczymy się czegoś całkowicie nowego, robimy to jeszcze dodatkowo pierwszy raz, więc siłą rzeczy musi być to związane z pewnym wysiłkiem. Wiadomo, że za każdym razem jak będziemy szukali kolejnych ofert pracy, będziemy chcieli zmienić zatrudnienie, będzie nam już dużo łatwiej.

➡ ZOBACZ 👉: Jak się uczyć programowania?

Jak zostać programistą – jaki język wybrać?

Oczywiście JAVA!

Tak na poważnie to mam przygotowaną taką listę standardowych pytań. Można powiedzieć, że ta lista to jest właśnie weryfikacja Twoich preferencji, Twoich możliwości, tego, co konkretnie w Twoim wypadku najlepiej będzie się sprawdzało. Bo wiadomo, że dla mnie idealny pierwszy język to niekoniecznie będzie ten sam język to w Twoim wypadku czy w wypadku jakiejkolwiek innej osoby.

➡ ZOBACZ 👉: 10 kroków – Jak wybrać język programowania?

Jak zostać programistą – podsumowanie

Programowanie to podróż, a nie cel. Klucz do sukcesu leży w ciągłej nauce, eksperymentowaniu i nieustannym rozwoju. Nie ma jednej ścieżki do zostania programistą; każdy może znaleźć swoją własną drogę. Pamiętaj, że każdy programista zaczynał od zera. Bądź cierpliwy, wytrwały i otwarty na nowe wyzwania. Programowanie to nie tylko umiejętność; to sposób na zmienianie świata, tworzenie nowych możliwości i realizowanie własnych pomysłów. Z każdą linijką kodu, jaką napiszesz, stajesz się częścią czegoś większego. Zacznij swoją podróż już dziś i odkryj, jakie drzwi otworzy przed Tobą programowanie.

No comments
Share: