PrzedWstęp: Jak zacząć programować?


it, PrzedWstęp / wtorek, Lipiec 17th, 2018

Kiedy spytałam się Was, czy chciałybyście czytać o programowaniu, dostałam sporo entuzjastycznych odpowiedzi od osób, które bardzo chciałyby zainteresować się tematem, ale zupełnie nie wiedzą, od czego zacząć. Stąd też seria PrzedWstępu, w której opowiem, na czym w ogóle polega programowanie. Te teksty kieruję do osób kompletnie zielonych – takich, które chciałyby się sprawdzić, ale nie mają pewności, czy w ogóle się nadają i od czego zacząć.

O co chodzi z tym programowaniem?

Krótko mówiąc:

programowanie polega na rozwiązywaniu problemów.

Mówiąc na przykładzie:

załóżmy, że chcemy uporządkować pliki na swoim komputerze. Musimy najpierw konkretnie określić nasz problem: chcę, aby wszystkie pliki .jpeg znalazły się w folderze “Obrazy”, a wszystkie pliki .docx w folderze “Dokumenty”. Powinny być też posortowane rosnąco według nazwy.

Kiedy już mamy dokładnie określone, co chcemy zrobić, musimy precyzyjnie ustalić, w jaki sposób będziemy to wykonywać. Tworzymy więc instrukcję zwaną algorytmem.

Opowiadając początkującym o algorytmach, często podaje się jako przykład… przepisy kulinarne. Tutaj znajdziecie bardzo obrazową opowieść o algorytmach.

My wymyślimy już taki do naszego przykładu:

  1. Stwórz pusty folder o nazwie “Obrazy” i folder o nazwie “Dokumenty”.
  2. Dla każdego pliku znajdującego się w katalogu domowym:
    1. jeśli dany plik ma rozszerzenie .docx:
      1. przenieś ten plik do folderu o nazwie “Dokumenty”
    2. jeśli dany plik ma rozszerzenie .jpeg:
      1. przenieś ten plik do folderu o nazwie “Obrazy”
    3. jeśli dany plik jest folderem, to wykonaj dla niego instrukcję 2.
    4. w przeciwnym razie nic nie rób
  3. Przejdź do folderu “Obrazy” i posortuj pliki według nazwy.
  4. Przejdź do folderu “Dokumenty” i posortuj pliki według nazwy.

Komputer jest szybki, ale jednak nie domyślny. Zrobi tylko tyle i aż tyle, ile mu dokładnie powiemy.

dziwna szafa w kształcie krowy i świni
Źródło: klik!

Wyobraź sobie, że nie masz absolutnie żadnego doświadczenia ze stolarką i kupiłaś sobie w Ikei szafkę taką jak na zdjęciu. Wyjmujesz z pudełka wszystkie części i chcesz przystąpić do pracy. Instrukcja składania jednak jest krótka i mówi: wyjmij deski z opakowania, złóż szafkę. No fajnie.

Istnieje szansa, że na pudełku jest rysunek szafki i że już trochę szafek w swoim życiu widziałaś, więc metodą prób i błędów jakoś złożysz mebel. Komputer nie ma jednak żadnych wstępnych informacji, dopóki ich sama mu nie zapewnisz. Musimy być więc konkretni.

Jak zacząć programować?

No dobra, załóżmy, że mamy już naszą instrukcję. Jak ją teraz przekazać? Cóż, na pewno nie możemy użyć języka polskiego ani żadnego innego naturalnego języka, bo są niejednoznaczne (sztandarowy przykład). My musimy mieć z kolei gwarancję, że jakiegokolwiek polecenia nie użyjemy, to będzie znaczyło ono w tych samych warunkach zawsze dokładnie to samo. W tym celu stworzono języki programowania. Tak jak języki naturalne składają się one ze zbioru symboli (słów), reguł składania tych symboli (budowania zdań) i definicji, co poszczególne symbole znaczą. Obowiązują w nich jednak ściśle określone zasady, dzięki którym zawsze dokładnie wiemy, co się stanie.

Chciałabym, aby powyższy fragment podkreśliły sobie wszystkie osoby, które kiedykolwiek napisały do mnie, że “programowanie nie jest dla nich, bo są typowymi humanistkami”. 😉 Trust me, jeśli lubisz zajmować się językiem, to to jest po prostu kolejne zadanie dla ciebie.

Ostatni krok to wykonywanie kodu. Można powiedzieć, że języki programowania dzielą się na kompilowane i interpretowane. Dla nas na początku to pewnie nie będzie miało większego znaczenia, bo  kod będziemy pisać prawdopodobnie w jakimś IDE (czyli właśnie w środowisku służącym do pisania, testowania i kompilowania kodu), które automatycznie przetworzy nasz kod i go wykona.

To jest mniej więcej uproszczona filozofia programowania. Aby programować musimy umieć określić precyzyjnie problem, wymyślić (albo znaleźć gotowy) algorytm i zapisać go w znanym nam języku programowania. Voila.

kobiety programistki z lat 40
A wy co? Dalej klepiecie te swoje bieda skrypty w JavaScripcie?

Jakiego języka się uczyć?

To jest zwykle pierwsze pytanie, które się pojawia. Słyszymy, że istnieją jakieś Javy, pythony i SQLe, ale czym to się w ogóle różni?

Głównie tym, do rozwiązania jakiego problemu będziemy chcieli użyć danego języka. Także składnią, szybkością, sposobem przetwarzania kodu. We wszystkich językach możemy jednak zapisać te same algorytmy.

C

C jest trochę taką łaciną języków programowania. O wielu językach mówi się, że mają składnię “C-podobną”. Głównym plusem zaczynania nauki od C jest to, że jest dosyć “surowe”. To znaczy wiele rzeczy (np. zarządzanie pamięcią, obsługa wskaźników) musimy robić tam ręcznie, ale dzięki temu dokładnie wiemy, co się dzieje. W nowszych językach programowania wiele rzeczy będzie już “przykryte”, co z jednej strony znacznie ułatwi nam naukę, ale z drugiej odbierze nam sporo kontroli. Jeśli ktoś chce się zajmować np. systemami operacyjnymi, sieciami czy mikrokontrolerami, to C jest absolutnym musem. Jego największą zaletą jest to, że jest szybkie.

Materiały:

  • MAIN
    Kurs jest niby dla C++, ale nie pojawiają się w nim żadne elementy składni nienależące do C. Jest natomiast też przyjemny tutorial instalacji środowiska. Jedyne, co trzeba zrobić, to zamiast „include <cstdio>” pisać „include <stdio.h>”
  • Wiki
    A tutaj już stricte wszystko dla C.

C++

To taki młodszy brat C. Regułą przyjętą przy jego tworzeniu było to, że kod napisany w C ma działać też w C++. Główną nowością jest to, że jest już obiektowy. Jest nieco wolniejszy od czystego C, ale wciąż bardzo szybki na tle pozostałych języków. Prywatnie jest to mój ulubiony język (podobnie jak w C ma się dużą kontrolę, ale jednocześnie też dostęp do gotowych struktur i nie trzeba zawsze koła projektować od nowa). Główny język świata gier (w których szybkość jest kluczowa).

Materiały:

  • Cpp0x
  • cplusplus (eng) – tu jest też dokumentacja
  • MAIN
  • całkiem fajnie napisany podręcznik
  • cplusplusowe opus magnum (raczej dla tych, co wielbią ścisłość i potrzebują od razu wiedzieć wszystko)

Java

Od kilku lat najpopularniejszy język. Ze składnią bazowaną na C++ i silnym ukierunkowaniem na programowanie obiektowe. Jest językiem dosyć wygodnym, jeśli chodzi o naukę, bo znacząco utrudnia programiście popełnianie błędów. Uwielbiany przez wszelkie korporacje i duże firmy. Pisane są w nim m.in. aplikacje na Androida. Jeśli ktoś myśli o szybkim rozpoczęciu pracy, to Java jest pewniakiem na najbliższe lata i ofert dla Java developerów są obecnie całe stosy.

Materiały:

Jeśli ktoś będzie po ogarnięciu podstaw chętny pouczyć się Springa (frameworka do pisania aplikacji), to polecam ten kurs na Udemy. Zwykle jest na niego jakaś promocja i kosztuje w okolicach 40zł, które moim zdaniem są bardzo niską ceną za jakość, jaką oferuje.

programistka z lat 40 przy pracy
C jest dla ciebie za trudne? Spróbuj pisać w kodzie maszynowym, dzieciaku.

SQL/PLSQL

SQL to język służący do pisania zapytań do baz danych (PL/SQL to jego rozszerzenie umożliwiające tworzenie większej liczby konstrukcji). Jeśli interesują cię zbiory danych, to tu możesz zacząć swoją przygodę.

Tutaj przyznam, że nie znam zbyt wielu materiałów i pewnie są lepsze.

JavaScript

Język stosowany głównie przy tworzeniu aplikacji www do interakcji z użytkownikiem, pobierania od niego danych i tworzenia efektów wizualnych, ale obecnie można używać go też po stronie serwera (Node.js). Jeśli czujesz, że to może cię zainteresować, to razem z HTML i CSS będzie to pewnie twój pakiet startowy.

  • Mozilla – absolutnie najlepszy tutorial, jaki znalazłam
  • NetteCode – autorka strony zebrała najlepsze materiały do nauki, a że zna się na temacie na pewno bardziej niż ja, to pozostaje mi tylko polecić

Co warto wiedzieć o JS, to to, że trendy się tutaj dosyć dynamicznie zmieniają (to znaczy dynamiczniej niż w takiej np. Javie, bo generalnie to cały świat IT to ciągłe zmiany). Za to pewnie ciężko się nudzić. 😉

R

R jest językiem oraz środowiskiem do obliczeń statystycznych. Jeśli zajmujesz się statystyką, analizą i wizualizacją danych bądź skomplikowanymi obliczeniami, to może być to start dla ciebie.

Sporo też widziałam ostatnio darmowych warsztatów, więc myślę, że najlepszych wyjściem może być znalezienie takich gdzieś w swojej okolicy.

Python

O pythonie mówi się, że jest prosty do nauki i z tym się akurat zgodzę. Często uczony jest na różnych „wstępach do programowania” na studiach i niedawno wszedł też do liceum (przynajmniej w teorii). Jednocześnie jest popularny na rynku pracy i – w mojej subiektywnej opinii – bardzo przyjemny.

  • Django Girls
    Tutorial przedstawia zarówno podstawy pythona jak i Django. Django jest frameworkiem służącym do tworzenia aplikacji www. Jeśli lubisz ładny design i chcesz szybko zobaczyć na własne oczy efekty własnej pracy, to możesz zacząć właśnie od Django. Moim zdaniem kurs jest bardzo dobrze napisany i przyjemny do przechodzenia.
  • Coursera

PHP

Język odpowiedzialny za łączenie aplikacji z bazą danych i kierowaniem całą logiką aplikacji (tak zwany back-end). Miłe jest to, że na starcie nie wymaga właściwie żadnego dodatkowego oprogramowania i można napisać w nim skrypt w zwykłym notatniku, dodać kilka elementów HTMLa i odpalić plik w przeglądarce. 😉

PHP jest głównym językiem CMS-ów (systemów zarządzania treścią) takich jak WordPress. Jeśli więc chce się iść w tę stronę, to na pewno dobra znajomość języka będzie niezbędna.

margaret hamilton przy pracy
Napisałaś swoją pierwszą aplikację w Django? Brawo! Ja dzisiaj wysłałam ludzi w kosmos.

Co wybrać?

Jeśli nie znamy jeszcze żadnego języka, to potrzebujemy jakichś kryteriów wyboru. Ja kierowałabym się na pierwszym miejscu dostępnością materiałów do nauki (tu chyba wygrywa Java, JavaScript, python), a na drugim miejscu rynkiem pracy.

Wersja dla nerdów: jeśli czujesz, że będą jarać cię algorytmy i ta bardziej teoretyczna strona informatyki, to zacznij od C, ogarnij tam wszystko porządnie i potem (prawie) wszystkie języki będą twoje.

Możemy się też sugerować różnymi rankingami:

Ranking stackoverflow.com

Czyli najpopularniejszego serwisu dla programistów. Masz pytanie? Coś nie działa? Nie wiesz, jak zacząć? Idziesz tam.

ranking najpopularniejszych języków programowania według stackoverflow
Źródło: https://insights.stackoverflow.com/survey/2018/#technology

Bez wielkich zaskoczeń.

  • Para HTML&CSS jest uznawana za chyba najłatwiejszą z najłatwiejszych. HTML służy do tworzenia struktury szablonu stron internetowych, a CSS do ozdabiania i ustawiania wszystkich elementów. Nie do końca nazwałabym tworzenie skryptów w HTML programowaniem, ale jeśli ktoś nigdy nie widział żadnego kodu na oczy, to to na pewno będzie fajny start.
  • C# – wygląda trochę jak mieszanka Javy z C++. Bardzo popularny. Idzie zwykle w parze z frameworkiem .NET – dzieckiem Microsoftu. Tu warto podkreślić, że potężna grupa programistów się z Windowsem bardzo nie lubi, więc praca na tym systemie jest nieoczywista.

Pozostałych raczej nie rozważałabym na starcie, ale nic nie wiem o np. Ruby ani Swifcie, więc tu niczego nie zasugeruję.

A jak ktoś na forum wam mówi, żeby zacząć od asemblera, to jest albo bucem, albo śmieszkiem.

Przyrodnicza ciekawostka dla Warszawy 2017 (brutto):

wykres zarabki programistów w warszawie
Źródło: klik!

 

Od czego zacząć?

Cóż, są różne szkoły. Najczęściej spotykam się z poglądem, że najlepiej zacząć od zadań czysto praktycznych i dopiero po zdobyciu pierwszego doświadczenia zająć się teorią.

Osobiście nie zgadzam się z tym podejściem. Dlaczego? Chcąc napisać jakąkolwiek pierwszą aplikację, będziemy musieli przebrnąć przez masę zadań, które z samym programowaniem nie mają wiele wspólnego (jak choćby instalacja środowiska i ogarnianie wszystkich potrzebnych pluginów). Na tym etapie zwykle pojawia się mnóstwo problemów (np. mamy inną wersję systemu niż w tutorialu), których rozwiązanie nie nauczy nas zbyt wiele, a jedynie może zniechęcić do pracy z kodem. Spotkałam mnóstwo osób, które były przeświadczone, że programowanie to głównie ogarnianie technikaliów, a skoro one mają nawet problem z aktualizacją Windowsa (serio, a kto nie?), to się nie nadają.

Ja jestem zdania, że programowanie to głównie wymyślanie algorytmów i pisanie kodu. To sprawia największą frajdę i rozwija intelektualnie. Ogarniania wszystkich kwestii bardziej technicznych uczymy się przy okazji. Poza tym jeśli ktoś jest już obyty z programami i potrafi sam wymyślać rozwiązania, to zdobywanie praktycznych umiejętności przyjdzie mu łatwo.

To jednak moje subiektywne spojrzenie. Wiele osób zachęca to, że po kilku godzinach pracy mogą zobaczyć na własne oczy efekty swojej pracy i nie ma w tym nic złego!

Czy to dla mnie?

Po prostu sprawdź. Wejdź w jakiś kurs z listy powyżej albo zacznij teraz jakiś z Codeacademy. Szybko przekonasz się czy to TO. Jeśli tak, super! Czeka cię długa ale fascynująca droga. Jeśli nie, to trudno. W IT jest jeszcze wiele poza samym programowaniem i wierzę, że odnajdziesz swoją ścieżkę.

Powodzenia! 😉

Disclaimer: Opisałam tu jedynie języki, w których kiedyś coś w życiu pisałam. W niektórych przypadkach (jak JS czy PHP) z naciskiem na "coś" i "kiedyś". Mogłam więc w kilku miejscach nakłamać albo pominąć coś ważnego. Jeśli znasz się na jakiejś technologii i chcesz mi to wytknąć, to zachęcam.