Jak nauczyć się programować? Poradnik jak zacząć programować
Sama myśl o nauce kodowania może być bardzo onieśmielająca. Słowo kod jest tajemnicze z definicji. Oznacza techniczną formę komunikacji, którą mają zrozumieć komputery, a nie ludzie.
Jednym ze sposobów, w jaki wiele osób rozpoczyna naukę kodowania, jest wybranie popularnego języka programowania i wskoczenie na głowę bez żadnego kierunku. Może to przybrać formę kursu kodowania online, projektu samouczka lub przypadkowego zakupu książki na określony temat.
Rzadko kiedy przyszli programiści zaczynają od mapy drogowej – spojrzenia z lotu ptaka na świat kodowania, która nakreśla zestaw odpowiednich koncepcji programistycznych, języków i narzędzi, których prawie 100% programistów używa każdego dnia.
W tym artykule proponuję jedną z takich map drogowych. Robię to poprzez nakreślenie 14 kroków – każdy z nich omawia istotną koncepcję, język lub narzędzie – które profesjonalni programiści wykorzystują do pisania kodu, współpracy i tworzenia profesjonalnych projektów.
Starannie wybrałem te 14 kroków, opierając się na mojej osobistej podróży do nauki kodowania, która trwa już prawie 20 lat.
Częścią powodu, dla którego zajęło mi tak dużo czasu, aby poczuć się komfortowo jako programista, było to, że uczyłem się o konkretnych tematach bez szerszego kontekstu świata kodowania.
Każdy z kroków w tym artykule omawia “niezbędnik kodowania” – coś, co moim zdaniem jest krytyczne, aby przynajmniej wiedzieć, że istnieje na początku twojej podróży z kodowaniem.
Jedna ostatnia uwaga przed wymienieniem kroków na mapie drogowej: oczywiście przeczytanie tego artykułu nie uczyni cię ekspertem w dziedzinie programowania. Nie ma takiego zamiaru. Celem tego artykułu jest uświadomienie Ci, że każdy z tych tematów istnieje i miejmy nadzieję, że da Ci podstawowe pojęcie o tym, jak każdy z nich działa, abyś mógł inteligentnie budować na nim dalej.
1) Zapoznaj się z architekturą komputera i podstawami danych
Jedną z cudownych rzeczy w nowoczesnych językach programowania jest to, że pozwalają nam tworzyć wymyślne aplikacje bez martwienia się o szczegóły sprzętu za kulisami (w większości przypadków).
To się nazywa abstrakcja – zdolność do pracy z narzędziami wyższego poziomu (w tym przypadku językami programowania), które upraszczają i zawężają wymagany zakres naszego zrozumienia i umiejętności.
Nie oznacza to jednak, że bezużyteczna jest znajomość podstaw metalu, na którym wykonuje się twój kod. Przynajmniej znajomość kilku ciekawostek pomoże ci w rozmowach w miejscu pracy na temat wysokiego zużycia procesora i pamięci.
Tak więc, oto minimum podstaw architektury komputerowej, abyś mógł zacząć:
Najważniejsze części Twojego komputera żyją na mikroprocesorach (znanych również jako układy scalone).
Działanie mikroprocesorów opiera się na komponencie elektrycznym zwanym tranzystorem. Tranzystory są maleńkimi przełącznikami elektrycznymi, które w danym momencie są albo wyłączone (0) albo włączone (1). Pojedynczy mikroprocesor może zawierać miliony lub miliardy osadzonych na nim maleńkich tranzystorów.
Większość nowoczesnych komputerów posiada mikroprocesor zwany Centralną Jednostką Przetwarzania (CPU). Można o nim myśleć jak o mózgu komputera. Obsługuje on większość zadań obliczeniowych i logicznych wykonywanych przez komputer.
Każdy procesor ma coś, co nazywa się zestawem instrukcji, który jest zbiorem binarnych (zer i jedynek) poleceń, które procesor rozumie. Na szczęście, jako twórcy oprogramowania nie musimy się o to martwić! To jest właśnie siła abstrakcji.
Jeśli procesor jest logicznym centrum mózgu, warto mieć również pamięć, aby przechowywać informacje tymczasowo lub długoterminowo.
Komputery mają Random Access Memory (RAM) jako “pamięć roboczą” (lub pamięć krótkotrwałą) do przechowywania informacji, które są aktywnie wykorzystywane przez działające programy.
RAM składa się z kolekcji adresów pamięci, które mogą być używane do przechowywania bitów danych. W starszych językach, takich jak C, programiści mają dostęp do bezpośredniej pracy z adresami pamięci za pomocą funkcji zwanej wskaźnikami, ale jest to rzadkość w bardziej nowoczesnych językach.
Na koniec zajmiemy się elementem, który z pewnością znasz – dyskiem twardym. W naszej analogii do mózgu, reprezentuje on pamięć długoterminową. Dysk twardy to wewnętrzne lub zewnętrzne urządzenie przechowujące dane, które powinny przetrwać nawet po wyłączeniu komputera.
Zanim przejdziemy do bardziej szczegółowych informacji o językach programowania, poświęćmy sekundę na rozmowę o danych. Ale co dokładnie rozumiemy przez słowo dane?
Na wysokim poziomie myślimy o takich rzeczach jak dokumenty tekstowe, obrazy, filmy, e-maile, pliki i foldery. To wszystko są wysokopoziomowe struktury danych, które tworzymy i zapisujemy na naszych komputerach każdego dnia.
Ale pod maską, chip komputerowy (taki jak procesor lub chip RAM) nie ma pojęcia, co to jest “obraz” lub “wideo”.
Z perspektywy chipa, wszystkie te struktury są przechowywane jako długie ciągi jedynek i zer. Te jedynki i zera nazywane są bitami.
Bity są powszechnie przechowywane w zestawie ośmiu na raz, znanym jako bajt. Bajt to po prostu ciąg ośmiu bitów, takich jak 00000001, 01100110 lub 00001111. Reprezentacja informacji w ten sposób nazywana jest reprezentacją binarną.
2) Dowiedz się, jak działają języki programowania
W poprzednim rozdziale wspomnieliśmy, że większość komputerów opiera się na procesorze, a procesor może zrozumieć określony zestaw instrukcji w postaci jedynek i zer.
Dlatego teoretycznie można napisać kod, który mówi procesorowi, co ma robić, łącząc długie ciągi jedynek i zer w formie zrozumiałej dla procesora. Instrukcje zapisane w ten sposób w formie binarnej nazywamy kodem maszynowym.
Brzmi okropnie w pracy, prawda? Prawdopodobnie tak jest, ale ja nie wiem, ponieważ używam głównie języków programowania wyższego poziomu, takich jak JavaScript, Python i Java.
Język programowania wyższego poziomu dostarcza zestaw czytelnych dla człowieka słów kluczowych, stwierdzeń i reguł składni, które są znacznie prostsze do nauczenia, debugowania i pracy.
Języki programowania umożliwiają wypełnienie luki między sposobem, w jaki nasze ludzkie mózgi rozumieją świat, a sposobem, w jaki rozumieją go mózgi komputerów (CPU).
Ostatecznie kod, który piszemy, musi zostać przetłumaczony na instrukcje binarne (kod maszynowy), które rozumie procesor.
W zależności od wybranego języka mówimy, że nasz kod jest kompilowany lub interpretowany na kod maszynowy, który może być wykonany przez procesor. Większość języków programowania zawiera program zwany kompilatorem lub interpreterem, który wykonuje ten etap tłumaczenia.
Aby podać kilka przykładów – JavaScript i Python są językami interpretowanymi, podczas gdy Java jest językiem kompilowanym. To czy język jest kompilowany czy interpretowany (lub jakaś kombinacja tych dwóch) ma wpływ na wygodę programisty, obsługę błędów, wydajność i inne obszary, ale nie będziemy tutaj wchodzić w te szczegóły.
3) Zrozumieć, jak działa Internet
Niezależnie od rodzaju programowania, do którego aspirujesz, napotkasz sytuacje, w których pomocna jest wiedza o tym, jak komputery wchodzą ze sobą w interakcje. Zazwyczaj dzieje się to za pośrednictwem Internetu.
Internet to nic innego jak globalny zbiór połączonych ze sobą komputerów. Innymi słowy, jest to globalna sieć. Każdy komputer w sieci uzgadnia zestaw reguł, które umożliwiają im rozmowę ze sobą. Dla komputera “rozmowa” oznacza przesyłanie danych.
Jak omawialiśmy w poprzednim rozdziale, wszystkie rodzaje danych – strony internetowe, obrazy, filmy, wiadomości e-mail i tak dalej – mogą być reprezentowane jako jedynki i zera.
Dlatego można myśleć o Internecie jako o bardzo dużym zestawie komputerów, które mogą przesyłać jedynki i zera między sobą w sposób, który zachowuje znaczenie tych danych. Internet jest niczym więcej niż cyfrowym medium konwersacyjnym.
Jeśli Internet jest tylko wielką areną rozmów, zdefiniujmy uczestników rozmowy.
Najpierw analogia: większość ludzkich rozmów wymaga co najmniej dwóch uczestników. W większości przypadków jedna osoba inicjuje rozmowę, a druga odpowiada, zakładając, że obie są obecne i dostępne.
W języku internetowym komputer inicjujący rozmowę nazywany jest klientem. Komputer, który odpowiada, nazywany jest serwerem.
Na przykład, powiedzmy, że otwierasz przeglądarkę internetową i wchodzisz na stronę “www.google.com”. W tym scenariuszu, Twoja przeglądarka internetowa jest klientem. Można również pomyśleć o komputerze, na którym pracujemy, jako o kliencie.
W bardziej abstrakcyjnym sensie to TY jesteś klientem, ponieważ to Ty inicjujesz rozmowę. Wpisując w pasku wyszukiwania “www.google.com” i klikając , Twoja przeglądarka prosi o rozpoczęcie rozmowy z jednym z komputerów Google.
Komputer Google nazywany jest serwerem. W odpowiedzi przesyła on dane niezbędne do wyświetlenia strony internetowej Google w Twojej przeglądarce. I voilà! Przed Twoimi oczami pojawia się strona Google. Wszystkie internetowe transfery danych wykorzystują ten rodzaj relacji klient/serwer.
4) Przećwicz kilka podstaw wiersza poleceń
The Command Line can be intimidating at first glance. It is often featured in movies as a cryptic black screen with incomprehensible text, numbers, and symbols scrolling by. It is usually associated with an evil hacker or genius techie sidekick.
The truth is that it doesn’t take a genius to use or understand the command line. In fact, it allows us to perform many of the same tasks that we are comfortable doing via a point-and-click mouse.
The main difference is that it primarily accepts input via the keyboard, which can speed up inputs significantly once you get the hang of it.
You can use the Command Line to browse through folders, list a folder’s contents, create new folders, copy and move files, delete files, execute programs, and much more. The window in which you can type commands on the Command Line is called a terminal.
Let’s walk through a short tutorial of basic navigation commands that will give you a feel for working on the command line.
Once you open your terminal, a typical first question is “Where am I”? We can use the pwd
command (which stands for “Print Working Directory”) to figure that out. It outputs our current location in the file system which tells us which folder we are currently in.
5) Weź się za HTML

Możesz myśleć o HTML – skrót od HyperText Markup Language – jako o kościach strony internetowej. Określa on strukturę strony poprzez określenie elementów, które powinny być wyświetlane oraz kolejności, w jakiej powinny być wyświetlane.
Każda strona internetowa, którą kiedykolwiek odwiedziłeś w swojej przeglądarce, ma przypisany jakiś HTML. Kiedy odwiedzasz stronę internetową, serwer hostujący stronę wysyła pewien HTML do Twojej przeglądarki. Następnie przeglądarka odczytuje go i wyświetla dla Ciebie.
Większość stron internetowych zawiera dość standardowy zestaw treści, w tym tytuł, treść tekstową, linki do obrazów, linki nawigacyjne, nagłówki i stopki oraz inne. Wszystkie te informacje są przechowywane w postaci kodu HTML, który definiuje strukturę strony.
Jedną z rzeczy, o których należy pamiętać jest to, że HTML nie jest technicznie językiem programowania, chociaż często określa się go mianem “kodu HTML”.
Jak zobaczymy później, inne języki programowania pozwalają nam pisać kod, który robi rzeczy, takie jak uruchamianie zestawu instrukcji w sekwencji. HTML nie robi nic. Nie uruchamiamy ani nie wykonujemy kodu HTML. HTML po prostu siedzi w pliku i czeka na wysłanie do przeglądarki internetowej, która wyświetli go użytkownikowi końcowemu.
W rzeczywistości, HTML to w zasadzie tylko dane. To dane, które definiują, jak powinna wyglądać strona internetowa, nic więcej.
Jak więc napisać HTML? HTML używa standardowego zestawu znaczników (w zasadzie tylko etykiet) do identyfikacji dostępnych elementów, które składają się na stronę internetową. Każdy znacznik jest definiowany za pomocą nawiasów kątowych.
Na przykład, znacznik title jest zdefiniowany jako Tytuł mojej strony, a znacznik paragraph jest zdefiniowany jako
Bardzo dużo losowej zawartości tekstowej..
Każdy element HTML składa się ze znacznika początkowego i znacznika końcowego. Znacznik początkowy to po prostu etykieta znacznika umieszczona pomiędzy nawiasami kątowymi, jak na przykład:
.
Otwiera to nowy znacznik HTML. Znacznik kończący jest zasadniczo taki sam, ale używa ukośnika do przodu po pierwszym nawiasie kątowym, aby oznaczyć go jako kończący:
Każdy tekst pomiędzy tymi dwoma znacznikami jest rzeczywistą treścią, którą strona wyświetli.
Omówmy kilka najczęściej używanych znaczników. Pierwszym z nich jest znacznik . Określa on początek strony HTML. Odpowiedni znacznik (zwróć uwagę na ukośnik do przodu) definiuje koniec strony HTML. Każda zawartość pomiędzy tymi znacznikami będzie częścią strony.
Drugi to znacznik . Definiuje on dodatkowe informacje, które przeglądarka wykorzysta do zrozumienia strony. Większość treści w tym znaczniku nie jest wyświetlana użytkownikowi. Odpowiedni znacznik definiuje koniec sekcji HEAD.
Poprzednio widzieliśmy znacznik . Definiuje on tytuł strony internetowej, który przeglądarka wyświetli w karcie przeglądarki. Znacznik ten należy umieścić wewnątrz sekcji <head>…</head>.</p> <p>Następnym elementem jest znacznik <body>. Cała zawartość wewnątrz tego znacznika tworzy główną treść strony internetowej. Umieszczenie tych czterech znaczników razem wygląda coś takiego:</p>
<html>
<head>
<title>Tytuł strony</title>
</head>
<body>
<p>Tekst widoczny na stronie</p>
</body>
</html>
Powyższy prosty snippet HTML reprezentuje prostą stronę internetową z tytułem i pojedynczym akapitem jako treścią ciała.
Ten przykład przywołuje kwestię, o której nie wspomnieliśmy w ostatnim rozdziale. Znaczniki HTML mogą być zagnieżdżane wewnątrz siebie. Oznacza to po prostu, że znaczniki HTML mogą być umieszczane wewnątrz innych znaczników HTML.
HTML dostarcza wielu innych znaczników, aby zapewnić bogaty zestaw treści dla użytkowników sieci.
6) Zajmij się CSS
Strona internetowa bez CSS – czyli kaskadowych arkuszy stylów – jest jak tort bez lukru. Ciasto bez lukru spełnia swoje zadanie, ale nie wygląda apetycznie!
CSS pozwala nam powiązać właściwości stylu takie jak kolor tła, rozmiar czcionki, szerokość, wysokość i inne z naszymi elementami HTML.
Każda właściwość stylu mówi przeglądarce, by wyświetliła na ekranie pożądany efekt. Podobnie jak HTML, CSS nie jest technicznie językiem programowania. Nie pozwala nam wykonywać akcji, po prostu pozwala nam dodawać style do czystego HTML.
Zobaczmy jak powiązać style CSS z naszymi elementami HTML. Istnieją trzy elementy tej układanki:
Selektor CSS: Używany do identyfikacji elementu lub elementów HTML, do których chcemy zastosować styl.
Nazwa właściwości CSS: Nazwa konkretnej właściwości stylu, którą chcemy dodać do dopasowanych elementów HTML.
Wartość właściwości CSS: Wartość właściwości stylu, którą chcemy zastosować.
Oto przykład, jak te elementy łączą się razem, aby ustawić kolor i rozmiar czcionki akapitu:
p {
color: red;
font-size: 12px;
}
Zacznijmy od początku, przed nawiasami klamrowymi. To właśnie tam trafia selektor CSS. W tym przypadku jest to litera p, która oznacza znacznik HTML
(akapit). Oznacza to, że style znajdujące się wewnątrz nawiasów klamrowych będą stosowane do wszystkich znaczników
na stronie internetowej.
Przejdźmy teraz do tego, co znajduje się wewnątrz nawiasów klamrowych – stylów, które chcemy zastosować do docelowych elementów.
Znajdziemy tu pary właściwości i wartości CSS, oddzielone dwukropkiem. Właściwości (w tym przypadku “color” i “font-size”) znajdują się po lewej stronie. Wartości tych właściwości (w tym przypadku “red” “12px”) znajdują się po prawej stronie. Średnik kończy każdą parę właściwość / wartość.
Prawdopodobnie widzisz już jak to działa. Powyższe fragmenty kodu CSS każą przeglądarce używać czerwonych liter o rozmiarze 12px dla całego tekstu umieszczonego wewnątrz znaczników
.
Więc skąd strona HTML wie, że należy włączyć te style CSS? Wprowadź znacznik HTML . Zazwyczaj style CSS są tworzone w oddzielnych plikach (pliki.css) od HTML. Oznacza to, że potrzebujemy jakiegoś sposobu na zaimportowanie ich do naszych plików HTML, aby przeglądarka wiedziała, że style istnieją.
Element istnieje właśnie w tym celu. Umieszczamy elementy w sekcji plików HTML, które pozwalają nam określić zewnętrzne pliki CSS do zaimportowania:
<head>
<title>My Page Title</title>
<link rel="stylesheet" type="text/css" href="/home/style.css">
</head>
W tym przykładzie importujemy style CSS określone przez atrybut href, w tym przypadku plik /home/style.css.
W następnych 3 sekcjach, (w końcu) zanurzymy się w bardziej technicznych językach programowania!
Przejdziemy przez ogólny przegląd JavaScript, Python i Java, jak również przejdziemy przez niektóre z podstawowych koncepcji kodowania wspólnych dla tych trzech języków. Będziemy porównywać i kontrastować cechy języków i przykładowy kod, abyś mógł mieć nadzieję, że dobrze zrozumiesz podstawy wszystkich trzech.
7) Zacznij programować z JavaScriptem
Zacznijmy od odpowiedzi na następujące pytanie: jeśli możemy użyć HTML do zbudowania struktury strony internetowej i CSS do nadania jej ładnego wyglądu, to dlaczego potrzebujemy JavaScript?
Odpowiedź brzmi: technicznie rzecz biorąc, nie potrzebujemy. Jeśli jesteśmy zadowoleni ze statycznej strony, która siedzi tam i ładnie wygląda, to dobrze jest używać tylko HTML i CSS.
Słowem kluczowym jest tutaj “statyczna”. Jeśli jednak chcemy dodać do naszych stron dynamiczne funkcje, takie jak zmiana treści i bardziej złożone interakcje z użytkownikiem, musimy użyć JavaScript.
8) Kontynuuj programowanie z Pythonem
Teraz, gdy poznałeś już podstawy JavaScriptu, warto przeskoczyć do innego języka programowania – Pythona.
Wiele języków programowania zapewnia podobny zestaw funkcji, w tym zmienne, operatory arytmetyczne, instrukcje if/else, pętle i funkcje.
Pomocne jest zobaczenie, jak różne języki programowania implementują podobne funkcje. Koncepcje są zazwyczaj bardzo podobne, ale składnia (sposób pisania kodu) różni się w zależności od języka.
9) Poszerz swoją wiedzę o Javie
Teraz, gdy pracowaliśmy z kilkoma językami programowania wyższego poziomu, zejdźmy o krok niżej z Javą.
W przeciwieństwie do JavaScript i Pythona, które wykonują kod źródłowy w czasie rzeczywistym za pomocą interpretera, Java jest językiem kompilowanym. Oznacza to, że kompilator jest używany (zamiast interpretera) do konwersji kodu źródłowego Javy na formę zrozumiałą dla komputera.
Większość kompilatorów generuje jeden lub więcej plików wykonywalnych składających się z kodu maszynowego, które są gotowe do uruchomienia na określonym systemie operacyjnym i platformie sprzętowej, dla której zostały skompilowane.
Jednak Java jest nieco wyjątkowa, ponieważ kompiluje kod źródłowy Javy do pośredniej formy zwanej kodem bajtowym. Jest to coś innego niż kod maszynowy, który produkuje większość innych skompilowanych języków. Kod bajtowy Javy jest przeznaczony do wykonania przez coś, co nazywa się maszyną wirtualną Javy (JVM).
Możesz myśleć o JVM jako o programie, który instalujesz na swoim komputerze, a który pozwala na uruchamianie programów Java poprzez wykonywanie kodu bajtowego. Kiedy ludzie mówią o tym “czy Java jest zainstalowana na komputerze”, zazwyczaj pytają, czy JVM jest zainstalowana na komputerze, czy nie.
JVM pełni podobną funkcję jak interpretery, które omawialiśmy w poprzednich rozdziałach. Ale zamiast przyjmować kod źródłowy (który jest przechowywany w plikach .java) jako wejście, przyjmuje skompilowany kod bajtowy.
Zaletą tej konfiguracji jest to, że pozwala ona na wykonywanie kodu bajtowego skompilowanego na konkretnych systemach operacyjnych i platformach przez JVM na dowolnej innej platformie.
Na przykład, wyobraźmy sobie, że mamy plik z kodem Java, który został napisany i skompilowany do kodu bajtowego na komputerze z systemem operacyjnym Windows. Ten bytecode może być wykonany (to znaczy, program może być uruchomiony) przez JVM na każdej platformie, w tym Windows, Mac OS, Linux i tak dalej.
Nie jest tak w przypadku większości skompilowanych plików wykonywalnych w innych językach programowania, które mogą być wykonywane tylko w środowisku, dla którego zostały skompilowane.