Skip to content

Commit

Permalink
feat: provide descriptions to sections
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianbienias committed Sep 24, 2023
1 parent c8a2d71 commit ad957ce
Show file tree
Hide file tree
Showing 83 changed files with 1,835 additions and 14 deletions.
22 changes: 22 additions & 0 deletions docs/010-podstawy/000-informatyka/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,28 @@ tags:

# Informatyka

Informatyka to dziedzina nauki i technologii, która zajmuje się przetwarzaniem informacji za pomocą komputerów. Jest to szeroki obszar, który obejmuje wiele różnych dziedzin, takich jak programowanie, analiza danych, sztuczna inteligencja, bazy danych, sieci komputerowe, grafika komputerowa, algorytmy i wiele innych. Informatyka zajmuje się zarówno teoretycznymi aspektami przetwarzania informacji, jak i praktycznymi aspektami tworzenia oprogramowania i systemów komputerowych.

Główne dziedziny informatyki to:

1. **Programowanie**: Tworzenie kodu komputerowego w różnych językach programowania, który umożliwia komputerom wykonywanie określonych zadań.

2. **Sztuczna inteligencja**: Badanie i rozwijanie systemów komputerowych zdolnych do wykonywania zadań, które normalnie wymagają ludzkiej inteligencji, takie jak rozpoznawanie obrazów, przetwarzanie języka naturalnego czy podejmowanie decyzji.

3. **Analiza danych**: Zastosowanie technik i narzędzi informatycznych do zbierania, analizy i interpretacji danych w celu uzyskania cennych informacji i trendów.

4. **Bazy danych**: Projektowanie i zarządzanie systemami baz danych, które przechowują, organizują i udostępniają dane.

5. **Sieci komputerowe**: Badanie komunikacji i połączeń między komputerami oraz projektowanie i zarządzanie sieciami komputerowymi, w tym Internetem.

6. **Bezpieczeństwo informatyczne**: Zapobieganie atakom i zabezpieczanie systemów komputerowych oraz danych przed nieuprawnionym dostępem i zagrożeniami.

7. **Grafika komputerowa**: Tworzenie i przetwarzanie grafiki komputerowej, w tym animacji, gier komputerowych i grafiki 3D.

8. **Inżynieria oprogramowania**: Metodyki i praktyki związane z projektowaniem, tworzeniem, testowaniem i utrzymaniem oprogramowania.

Informatyka odgrywa ogromną rolę w dzisiejszym świecie, wpływając na wiele aspektów naszego życia. Komputery i technologia informatyczna są wykorzystywane w medycynie, naukach przyrodniczych, przemyśle, rozrywce, administracji publicznej, finansach i wielu innych dziedzinach. To także dziedzina, która stale się rozwija, wprowadzając innowacje i nowe możliwości, które wpływają na naszą codzienność.

## Linki

- [Informatyka – Wikipedia, wolna encyklopedia](https://pl.wikipedia.org/wiki/Informatyka)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,19 @@ import DocCardList from "@theme/DocCardList"

# System binarny

System binarny, zwany także systemem dwójkowym, to system liczbowy, który używa dwóch cyfr: 0 i 1, aby reprezentować wszystkie swoje liczby i informacje. Jest to podstawowy system liczbowy wykorzystywany w komputerach i elektronice cyfrowej ze względu na jego prostotę i zgodność z reprezentacją informacji za pomocą sygnałów elektronicznych.

W systemie binarnym każda pozycja liczby ma wartość potęgi liczby 2. Najmniej znacząca pozycja znajduje się zawsze po prawej stronie, a wartości rosną w kierunku lewej strony, zwiększając swoją wartość dwukrotnie wraz z każdą pozycją. Przykładowo:

- 1 w systemie binarnym jest równa 1 w systemie dziesiętnym.
- 10 w systemie binarnym jest równa 2 w systemie dziesiętnym (1*2^1 + 0*2^0).
- 11 w systemie binarnym jest równa 3 w systemie dziesiętnym (1*2^1 + 1*2^0).
- 100 w systemie binarnym jest równa 4 w systemie dziesiętnym (1*2^2 + 0*2^1 + 0\*2^0).

System binarny jest fundamentalnym narzędziem w elektronice cyfrowej, ponieważ można go wykorzystywać do reprezentacji i przetwarzania informacji za pomocą sygnałów elektronicznych, które przyjmują jedną z dwóch wartości: niską (0) lub wysoką (1). Kombinacje tych sygnałów reprezentują dane, które mogą być przekazywane, przechowywane i przetwarzane przez komputery oraz inne urządzenia elektroniczne.

Warto dodać, że dla ludzi system binarny jest trudny do odczytania i pracy na nim, dlatego używamy bardziej przyjaznego systemu dziesiętnego, który wykorzystuje dziesięć cyfr (0-9) do reprezentacji liczb. Jednak komputery tłumaczą informacje między systemem binarnym a dziesiętnym, co pozwala na efektywną komunikację między ludźmi a maszynami.

## Lekcje wideo

<DocCardList />
24 changes: 24 additions & 0 deletions docs/010-podstawy/010-sprzet-komputerowy/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,30 @@ tags:

# Sprzęt komputerowy

Sprzęt komputerowy to zbiór fizycznych komponentów i urządzeń elektronicznych, które składają się na komputer i umożliwiają mu wykonywanie różnych zadań. Sprzęt komputerowy obejmuje wiele elementów, które współpracują ze sobą, aby umożliwić przetwarzanie danych, wykonywanie obliczeń i wykonywanie innych operacji. Oto główne składniki sprzętu komputerowego:

1. **Centralna jednostka przetwarzania (CPU)**: Jest to mózg komputera, który wykonuje instrukcje i obliczenia. CPU składa się z jednego lub wielu rdzeni, co pozwala na wykonywanie wielu operacji równocześnie.

2. **Pamięć RAM**: Pamięć o dostępie losowym (Random Access Memory) to miejsce, w którym komputer przechowuje bieżące dane i programy, z którymi aktualnie pracuje. To tymczasowa pamięć operacyjna, która umożliwia szybki dostęp do danych.

3. **Dysk twardy (HDD) lub dysk SSD**: To urządzenie służące do przechowywania długoterminowych danych, takich jak system operacyjny, pliki użytkownika, programy i inne dane. Dyski SSD (Solid State Drive) są szybsze i bardziej niezawodne niż tradycyjne dyski HDD.

4. **Karta graficzna (GPU)**: Karta graficzna jest odpowiedzialna za wyświetlanie obrazów na monitorze komputera. W przypadku zadań wymagających dużych obliczeń graficznych, takich jak gry komputerowe lub projektowanie 3D, karty graficzne są kluczowe.

5. **Płyta główna (mobo)**: To główna płytka drukowana, do której podłączone są wszystkie główne komponenty komputera, takie jak CPU, RAM, karta graficzna i inne. Płyta główna zapewnia interakcję między nimi.

6. **Zasilacz**: Zasilacz dostarcza energię elektryczną do wszystkich komponentów komputera. Konwertuje prąd z sieci elektrycznej na napięcie, które jest niezbędne do pracy komputera.

7. **Monitor**: To urządzenie wyświetlające obrazy i tekst z komputera. Monitory mogą być różnych rozmiarów i rodzajów, w tym tradycyjne monitory LCD, monitory LED i monitory dotykowe.

8. **Klawiatura i mysz**: To urządzenia wejścia, które umożliwiają użytkownikowi interakcję z komputerem. Klawiatura służy do wprowadzania tekstu, a mysz do sterowania wskaźnikiem na ekranie.

9. **Dźwiękowe urządzenia wejścia/wyjścia**: W skład tych urządzeń wchodzą głośniki, mikrofon i karty dźwiękowe, które umożliwiają komunikację dźwiękową między komputerem a użytkownikiem.

10. **Inne urządzenia peryferyjne**: Istnieje wiele innych urządzeń peryferyjnych, takich jak drukarki, skanery, kamery internetowe, czytniki kart, które można podłączyć do komputera w celu rozszerzenia jego funkcjonalności.

Sprzęt komputerowy jest kluczowym elementem każdego komputera i stanowi podstawę dla działania oprogramowania. Komponenty te współpracują ze sobą, aby umożliwić użytkownikom wykonywanie różnych zadań, od przeglądania stron internetowych po edycję dokumentów i granie w gry komputerowe. W miarę postępu technologicznego sprzęt komputerowy staje się coraz bardziej wydajny i zaawansowany, co umożliwia wykonywanie coraz bardziej złożonych zadań.

## Linki

- [Kategoria:Sprzęt komputerowy – Wikipedia, wolna encyklopedia](https://pl.wikipedia.org/wiki/Kategoria:Sprz%C4%99t_komputerowy)
Expand Down
23 changes: 23 additions & 0 deletions docs/010-podstawy/020-warstwy-abstrakcji/index.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
# Warstwy abstrakcji

Warstwy abstrakcji to koncepcja z dziedziny informatyki, która opisuje hierarchiczną strukturę systemów komputerowych i oprogramowania, gdzie każda warstwa zapewnia określoną funkcjonalność i ukrywa szczegóły implementacyjne warstw niższych. Ta hierarchiczna organizacja pomaga w zarządzaniu złożonością systemów i ułatwia rozwijanie, utrzymywanie i rozumienie technologii komputerowych. Istnieje wiele różnych kontekstów, w których można spotkać koncepcję warstw abstrakcji, włączając w to systemy operacyjne, programowanie, sieci komputerowe i wiele innych dziedzin. Oto kilka przykładów:

1. **Warstwy abstrakcji w programowaniu**:

- **Aplikacje**: To najwyższa warstwa abstrakcji, w której tworzone są programy i aplikacje. Programiści korzystają z interfejsów programistycznych aplikacji (API) lub frameworków, które dostarczają gotowe rozwiązania, ukrywając szczegóły implementacyjne.
- **Biblioteki**: Biblioteki programistyczne zawierają funkcje i moduły, które można wykorzystać w aplikacjach. Programiści korzystają z funkcji bibliotek, aby wykonywać konkretne zadania, nie zastanawiając się nad tym, jak te zadania są dokładnie realizowane.
- **Języki programowania**: Języki programowania oferują programistom wygodny sposób tworzenia kodu. Abstrahują od operacji na poziomie maszynowym i oferują struktury i mechanizmy abstrakcyjne, które ułatwiają programowanie.
- **Maszyna wirtualna**: W niektórych przypadkach, takich jak Java, istnieje maszyna wirtualna, która działa jako warstwa abstrakcji nad konkretnym systemem operacyjnym, umożliwiając przenośność aplikacji między różnymi platformami.

2. **Warstwy abstrakcji w systemach operacyjnych**:

- **Interfejs użytkownika**: To warstwa, w której użytkownicy korzystają z komputera lub urządzenia. Obejmuje graficzny interfejs użytkownika (GUI) oraz interakcję za pomocą komend wiersza poleceń.
- **System operacyjny**: Warstwa ta zarządza zasobami komputera, takimi jak procesory, pamięć, dyski twarde i urządzenia wejścia/wyjścia. Zapewnia również interfejsy dla aplikacji, takie jak API.
- **Sprzęt komputerowy**: To fizyczna warstwa, która obejmuje komponenty sprzętowe, takie jak CPU, pamięć RAM, dyski twarde, karty graficzne i inne.

3. **Warstwy abstrakcji w sieciach komputerowych**:
- **Aplikacje i usługi sieciowe**: To warstwa, w której użytkownicy korzystają z aplikacji internetowych i usług, takich jak przeglądarki internetowe, poczta elektroniczna czy serwisy społecznościowe.
- **Warstwa transportowa**: Odpowiada za dostarczanie danych od źródła do celu. Protokoły takie jak TCP i UDP działają na tym poziomie, ukrywając szczegóły przesyłania danych.
- **Warstwa sieciowa**: Odpowiada za routowanie danych między różnymi sieciami i urządzeniami. Protokoły takie jak IP działają na tym poziomie.
- **Warstwa fizyczna**: To warstwa sprzętowa, która obsługuje fizyczny przesył danych przez kable, światłowody i inne medium transmisyjne.

Warstwy abstrakcji pozwalają na rozwijanie i utrzymanie systemów informatycznych w sposób bardziej modułowy i efektywny, ponieważ programiści mogą skupić się na konkretnej warstwie bez konieczności zrozumienia wszystkich niuansów niższych warstw. To także pozwala na tworzenie bardziej przenośnych i interoperacyjnych systemów, ponieważ zmiany w jednej warstwie niekoniecznie muszą wpływać na pozostałe.

## Linki

- [Abstrakcja (programowanie) – Wikipedia, wolna encyklopedia](<https://pl.wikipedia.org/wiki/Abstrakcja_(programowanie)>)
Expand Down
16 changes: 16 additions & 0 deletions docs/010-podstawy/030-aplikacje/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,22 @@ tags:

# Aplikacje

Aplikacje, skrótowo zwane "aplikacjami", to oprogramowanie komputerowe stworzone w celu wykonywania określonych zadań lub funkcji na komputerach, smartfonach, tabletach lub innych urządzeniach elektronicznych. Aplikacje są tworzone, aby ułatwiać użytkownikom wykonywanie różnych czynności, od komunikacji i rozrywki po pracę i zarządzanie danymi. Oto kilka kluczowych aspektów związanych z aplikacjami:

1. **Różnorodność zastosowań**: Istnieje ogromna różnorodność aplikacji dostępnych na rynku. Mogą to być aplikacje społecznościowe, komunikatory, przeglądarki internetowe, programy do edycji zdjęć, gry komputerowe, narzędzia do zarządzania zadaniami, aplikacje biznesowe, narzędzia produktów cyfrowych, takie jak edytory tekstu i arkusze kalkulacyjne, oraz wiele innych.

2. **Systemy operacyjne**: Aplikacje są zazwyczaj tworzone z myślą o określonym systemie operacyjnym. Na przykład, istnieją aplikacje przeznaczone dla systemu Windows, macOS, iOS (dla urządzeń Apple), Android (dla smartfonów i tabletów) oraz wiele innych. Każdy system operacyjny może mieć swoje własne narzędzia programistyczne i sklepy z aplikacjami.

3. **Sklepy z aplikacjami**: W celu łatwego dostępu do aplikacji i ich instalacji na urządzeniach, większość platform cyfrowych oferuje sklepy z aplikacjami, takie jak Google Play Store dla Androida, App Store dla urządzeń Apple czy Microsoft Store dla systemu Windows. Sklepy te zawierają ogromne kolekcje aplikacji dostępnych do pobrania i instalacji.

4. **Aktualizacje i wsparcie**: Twórcy aplikacji regularnie wydają aktualizacje, które wprowadzają nowe funkcje, naprawiają błędy i zabezpieczają programy przed zagrożeniami. Wsparcie techniczne i aktualizacje są ważne, aby utrzymać aplikacje w dobrej kondycji i zapewnić użytkownikom najlepszą jakość.

5. **Aplikacje webowe vs. aplikacje natywne**: Istnieją dwa główne rodzaje aplikacji. Aplikacje natywne są tworzone specjalnie dla konkretnego systemu operacyjnego i działają na nim bezpośrednio. Aplikacje webowe działają w przeglądarkach internetowych i można je uruchamiać na różnych platformach, niezależnie od systemu operacyjnego.

6. **Dostosowanie do potrzeb użytkownika**: Aplikacje mogą być dostosowane do różnych potrzeb użytkowników. Są tworzone zarówno dla użytkowników indywidualnych, jak i dla firm, organizacji oraz instytucji, aby ułatwiać zarządzanie danymi, komunikację, pracę i wiele innych czynności.

Aplikacje stanowią ważną część współczesnego życia cyfrowego, umożliwiając nam korzystanie z technologii w różnych dziedzinach naszego życia. Dzięki nim możemy być bardziej produktywni, łączyć się z innymi ludźmi, rozrywać się i zarządzać naszymi codziennymi obowiązkami. W miarę rozwoju technologii aplikacje stają się coraz bardziej zaawansowane i wpływają na naszą cyfrową rzeczywistość w coraz większym stopniu.

## Linki

- [Aplikacja internetowa – Wikipedia, wolna encyklopedia](https://pl.wikipedia.org/wiki/Aplikacja_internetowa)
Expand Down
22 changes: 22 additions & 0 deletions docs/010-podstawy/040-programowanie/010-api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,28 @@ tags:

# API

API, czyli Application Programming Interface (Interfejs Programowania Aplikacji), to zestaw reguł, protokołów i narzędzi, które umożliwiają programistom tworzenie oprogramowania oraz interakcję między różnymi aplikacjami lub komponentami oprogramowania. API określa, jakie operacje i funkcje są dostępne dla programisty i w jaki sposób można z nimi komunikować się z daną aplikacją lub usługą. Oto kilka kluczowych aspektów związanych z API:

1. **Dostęp do funkcjonalności**: API definiuje, jakie operacje i funkcje są udostępniane przez daną aplikację lub usługę. Dzięki temu programista może użyć tych funkcji w swoim oprogramowaniu, bez konieczności dokładnego rozumienia jej wewnętrznej implementacji.

2. **Interakcja między aplikacjami**: API umożliwia różnym aplikacjom i usługom komunikację i współpracę ze sobą. Na przykład, aplikacja internetowa może korzystać z API serwisu płatności, aby przetwarzać transakcje kredytowe, lub z API serwisu mapowego, aby wyświetlać mapy na swojej stronie.

3. **Abstrakcja**: API działa jako warstwa abstrakcji, która ukrywa szczegóły implementacyjne aplikacji lub usługi. Programista nie musi wiedzieć, jak dokładnie działa serwis płatności, aby go używać, wystarczy znać dostępne funkcje API.

4. **Zrozumiała dokumentacja**: Dobre API są zazwyczaj dostarczane z dokładną dokumentacją, która opisuje dostępne funkcje, jak ich używać, jakie parametry przyjmują i jakie wyniki zwracają. To ułatwia programistom korzystanie z API.

5. **Typy API**:

- **API internetowe (Web API)**: Są to API dostępne przez internet, które pozwalają aplikacjom na komunikację za pomocą protokołów takich jak HTTP. Przykłady to RESTful API i SOAP.
- **API systemowe**: Są to API dostępne na poziomie systemu operacyjnego, które umożliwiają programom dostęp do zasobów systemowych, takich jak pliki, pamięć i urządzenia.
- **API bibliotek i frameworków**: W ramach danej biblioteki lub frameworku mogą istnieć specjalne funkcje lub klasy, które programista może wykorzystać do tworzenia swojego oprogramowania.

6. **Bezpieczeństwo**: API często wymagają uwierzytelniania i autoryzacji, aby zapewnić bezpieczny dostęp do swoich funkcji. Jest to ważne, aby chronić dane i zapobiec nieautoryzowanemu dostępowi.

7. **Przenośność i interoperacyjność**: Dobre API są projektowane w taki sposób, aby były przenośne i działały na różnych platformach i systemach operacyjnych, co umożliwia programistom tworzenie oprogramowania, które działa na różnych urządzeniach i systemach.

API są niezwykle ważne w dzisiejszym świecie informatyki, ponieważ pozwalają na tworzenie złożonych aplikacji poprzez łączenie różnych usług i komponentów. Dzięki nim możliwa jest integracja różnych aplikacji, co przyczynia się do tworzenia bardziej funkcjonalnych i użytecznych rozwiązań informatycznych.

## Linki

- [Interfejs programowania aplikacji – Wikipedia, wolna encyklopedia](https://pl.wikipedia.org/wiki/Interfejs_programowania_aplikacji)
Original file line number Diff line number Diff line change
@@ -1,5 +1,46 @@
# Typowanie statyczne i dynamiczne

Typowanie statyczne i dynamiczne to dwa różne podejścia do zarządzania typami danych w programowaniu. Określają, w jaki sposób język programowania obsługuje i sprawdza typy danych w trakcie kompilacji i wykonywania programu. Oto ich podstawowe cechy:

1. **Typowanie statyczne**:

- W językach programowania stosujących typowanie statyczne, typy danych muszą być określone w momencie deklaracji zmiennych i funkcji, a kompilator dokładnie sprawdza zgodność typów podczas kompilacji.

- Błędy związane z niezgodnością typów są wykrywane na etapie kompilacji, co oznacza, że program nie zostanie uruchomiony, jeśli zostaną naruszone reguły typowania.

- Przykłady języków programowania stosujących typowanie statyczne to Java, C++, C# i Swift.

- Przykład w języku C++:
```cpp
int liczba = 5;
string tekst = "Hello";
// Poniższy kod spowoduje błąd kompilacji z powodu niezgodności typów.
int suma = liczba + tekst;
```

2. **Typowanie dynamiczne**:

- W językach programowania stosujących typowanie dynamiczne, zmienne mogą zmieniać swój typ w trakcie działania programu. Typy danych są sprawdzane i przypisywane dopiero w trakcie wykonywania programu, a nie podczas kompilacji.

- Błędy związane z niezgodnością typów mogą być wykrywane dopiero w trakcie wykonywania programu, co może prowadzić do błędów runtime.

- Przykłady języków programowania stosujących typowanie dynamiczne to JavaScript, Python, Ruby i PHP.

- Przykład w języku Python (typowanie dynamiczne):
```python
liczba = 5
tekst = "Hello"
# Poniższy kod zostanie wykonany bez błędów w trakcie kompilacji, ale spowoduje błąd runtime.
suma = liczba + tekst # TypeError: unsupported operand type(s) for +: 'int' and 'str'
```

Porównanie:

- Typowanie statyczne pomaga wykryć wiele błędów w trakcie kompilacji, co może prowadzić do bardziej niezawodnych programów. Jednak może wymagać więcej pracy w deklarowaniu typów.
- Typowanie dynamiczne jest bardziej elastyczne, ale błędy związane z niezgodnością typów mogą być trudniejsze do wykrycia i naprawienia, ponieważ pojawiają się w trakcie wykonywania programu.

Wybór między typowaniem statycznym a dynamicznym zależy od preferencji programisty oraz konkretnej sytuacji i wymagań projektu. Niektóre języki programowania, takie jak TypeScript (rozszerzenie JavaScript), łączą obie metody, umożliwiając stosowanie typowania statycznego w dynamicznych środowiskach.

## Linki

- [Typowanie statyczne – Wikipedia, wolna encyklopedia](https://pl.wikipedia.org/wiki/Typowanie_statyczne)
Expand Down
Loading

0 comments on commit ad957ce

Please sign in to comment.