Nauka Programowania #2 Rozwiązywanie problemów.

Bo czymże jest programowanie jak nie rozwiązywaniem problemów? I nie ważna zbytnio jest ich natura… Jak jego skomplikowanie. Nie da się wszystkiego rozwiązać od ręki. Są sprawy które jest trudniej rozwiązać. Które wymagają szeregu algorytmów, wielu linijek kodu, wielu miesięcy pracy i czasem dobrego zespołu programistów.

Ale problemy początkujących nie są wcale takie skomplikowane. One są „trudne” ze względu na brak zrozumienia istoty problemu.

W tej serii poradników będę starał się własnie rozkładać problemy na części, aby pokazać jak sam podchodziłem do ich rozwiązania. Zadania programistyczne będę brał z internetu, ale w dużej mierze będę się sugerował na tej planszy:

Jest to szereg zadań programistycznych, które można obrać za punkt początkowy. Wybiorę kilka zadań i spróbuję wam je wytłumaczyć.

Język programowania raczej nie ma znaczenia. Przedstawię kilka przykładów w JavaScripcie, Javie, może C++, albo C#. Nie wiem jakiego języka będziecie używać, więc na początku będę improwizować.

Najważniejsze co powinien każdy początkujący programista się nauczyć to tego, że problemy wymagają czasu.

Ja sam potrafiłem nad głupim prostym problemem spędzić po 6-10 godzin. Czemu się nie poddałem? Bo chciałem koniecznie go rozwiązań. A właściwie nauczyć się programować. Pewnie, miałem swoje gorsze dni. W 2011 i 2012 roku jak pamiętam kilka razy podchodziłem do programowania. Stawałem przed problemem i po 2 godzinach odpuszczałem, bo okazało się one mnie przerastać. Na studiach projekty które wykonywane były wspólnie, w grupach często wykonywały inne osoby. Ja tylko się przyglądałem i potem próbowałem coś powiedzieć do napisanego przez „nas” programu. Często nie rozumiałem co dana linijka kodu robi. Taki ze mnie, nie chwaląc się był student…

I wiem, że pewnie większość z was przechodzi przez to samo. Skąd to wiem? Bo moi znajomi wciąż pytają się mnie o rady odnośnie nauki programowania.

A problemy bardzo łatwo można rozwiązać. A w jaki sposób?

  1. Dzieląc je na części.

Pojedyncze elementy. Zawsze tworzę pierwszy szkic, prototyp tego co chcę zrobić. Właściwie to próbuję stworzyć cokolwiek działającego, aby móc to testować, dopracowywać, dopisać dodatkowy kod, sprawdzić czy działa, a jeżeli tak dopisać kolejny.

Więc jeżeli chcę stworzyć grę: „Kółko i Krzyżyk” to pierwsze to robię to stworzenie planszy. Wiem, że większość z was pewnie by wolała aby na początku tworzyć gry i aplikacje w trybie tekstowym, jednak ja nigdy nie byłem fanem tego rozwiązania i tworzyłem aplikacje od razu z trybem graficznym.

A jak stworzyć tryb graficzny? I tu dochodzimy do czegoś… co odkryłem sam. A co pomogło mi w mojej nauce. Nie wiem czy ktoś już się w ten sposób uczył programowania. Ja sam nigdy nie natknąłem się na żaden podobny poradnik, ani radę, ale u mnie zadziałała ona doskonale.

„KOPIOWAĆ!”

Szukać podobnych projektów na GitHubie, Code-Pen, StackOverflow. Jeżeli nie projekt to chociaż sam interfejs graficzny. Coś co możecie użyć do nauki. W końcu nie zamierzacie czerpać z tego korzyści majątkowych, a ma to wam pomóc w nauce, więc raczej nie powinno być w tym nic złego?

Podglądać algorytmy innych osób, ich sposób pisania kodu, rozwiązywania problemów. Nic nie bierze się z niczego. Nie da się po prostu usiąść i zacząć pisać kod. To tak nie działa. Przynajmniej u mnie nie działało.

Więc jeżeli chcę stworzyć kółko i krzyżyk i chcę mieć interfejs graficzny to szukam w internecie kodu do stworzenia interfejsu graficznego.

Jeżeli jest to Java, to użyję biblioteki Swing.

Więc jak wyglądałby przykładowy kod do stworzenia interfejsu graficznego? A właśnie tak:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class TicTacToe extends JPanel
{
    JButton buttons[] = new JButton[9]; 
    int alternate = 0;
    
    public TicTacToe()
    {
      setLayout(new GridLayout(3,3));
      initializebuttons(); 
    }
    
    public void initializebuttons()
    {
        for(int i = 0; i <= 8; i++)
        {
            buttons[i] = new JButton();
            buttons[i].setText("");

            
            add(buttons[i]);       
        }
    }

    
    public static void main(String[] args) 
    {
        JFrame window = new JFrame("Tic-Tac-Toe");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.getContentPane().add(new TicTacToe());
        window.setBounds(300,200,300,300);
        window.setVisible(true);
    }
}

Jeżeli skopiujecie kod powyżej do Eclipse, powinniście otrzymać planszę 3×3 gotową do implementacji reszty kodu.

To tylko początek. Przecież problemów jest o wiele więcej. Ale jest to jeden problem mniej. I wydaje mi się że jeden z ważniejszych do rozwiązania na początku, bo daje wam to dobry start i posiadacie już działający przykład.

Jak wygląda dalsza implementacja i rozwiązywanie innych problemów? O tym już w następnym wpisie!

 

 

2 myśli na temat “Nauka Programowania #2 Rozwiązywanie problemów.

  1. Wydaje mi się, że nie ma sensu siedzieć nad problemem 6-10 godzin. Szkoda czasu, lepiej zająć się kolejnym, a do tego wrócić na świeżo za jakiś czas (po spacerze lub nawet za tydzień) jak wszystko się w głowie ułoży.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *