Jak zacząć programować?

Artykuł jest we wczesnej fazie - szkic, ale już teraz może ci pomóc. Wszelkie uwagi są zawsze mile widziane.
Docelowo artykuł podzielę na części.

 

Zanim zaczniesz programować musisz sobie odpowiedzieć na kilka pytań.

Dlaczego chcesz programować?

Musisz mieć prawdziwy powód dlaczego chcesz się nauczyć programować.


Nauka programowania to nie sprint, to niekończący się maraton!

Być może zauważyłeś, jak szybko zmienia się Informatyka.
Technologie, które wchodzą dziś, po kilku latach mogą już nie istnieć lub być przestarzałe.
To się dzieje cały czas.

Jedyną stałą jest ciągła zmiana. Musisz cały czas się rozwijać (uczyć się, podejmować decyzje).

Gdy się zatrzymujesz (zwalniasz), to tak jak byś się cofnął, ponieważ cały świat brnie do przodu!

Kiedyś zrozumiałem tą ideę, gdy po wielu latach trafiłem do luksusowego hotelu tętniącego życiem z mojego dzieciństwa.
Przeżyłem szok, hotel bardziej przypominał mi PRLowską umieralnię. Dlaczego? Przecież hotel nic nie zmienił.
A w tym czasie świat poszedł do przodu, zmieniły się oczekiwania, a bogate wyposażenie mogło zachwycać jedynie w latach 90.
W informatyce czas leci znacznie szybciej!
 

 

Programowanie, to nieustająca nauka, szukanie rozwiązań, ...

 

W związku z tym, że IT rozwija się tak szybko i z każdą chwilą powstają nowe, kolejne możliwości.
Musisz nauczyć się podejmować decyzje, "w co warto pójść", co ma przyszłość, a co nie.
 

Może się okazać, że po kilku latach, twoja specjalizacja w wybranej technologii jest całkowicie bezużyteczna.
Gdybyś kilka lat temu był fanem WPF'a/Silverlight'a to co byś robił dzisiaj?
 

Nauka języka programowania, to bardzo mały wycinek całości!
Na szczęście gdy nauczysz się jednego języka, wiele innych opanujesz w mgnieniu oka.

 

IT, to niekończąca się droga problemów, wypadków, .. Jednak gdy jesteś odpowiednio zmotywowany (masz cel, wiesz dlaczego) to zawsze znajdziesz sposób.

 

Mnie zawsze pasjonowała możliwość tworzenia, automatyzacji, ułatiwania życia. Czasem kilka linijek potrafi zaoszczędzić godziny pracy - magia.
Robisz coś raz i działa.

Zarobki

Dla wielu osób motywacją są zarobki (choć według mnie istnieją silniejsze powody, dla których warto programować).

Pamiętaj pracując w IT.
Twoim głównym narzędziem jest komputer.
Możesz znaleźć pracę, która pozwoli Ci pracować zdalnie (z domu, z Tajlandii, gdziekolwiek będziesz).

Warto zwrócić uwagę, że nie musisz wcale pracować dla polskiej firmy.
Możesz zarabiać np. "tyle samo", tylko w euro, dolarach, funtach.

 

W ekonomii  funkcjonuje prawo popytu i podaży.
Jeśli jest pracodawcy potrzebują programistów X,

  • a programistów X jest mało (to zarabiasz więcej)
    w końcu jakoś trzeba Cię zachęcić byś wybrał akurat tą firmę a nie inną (trudno będzie znaleźć kogoś na twoje miejsce).
  • a programistów X jest dużo (to zarabiasz mniej)
    naturalnie stawki są niższe, bo zawsze ktoś się znajdzie na twoje miejsce.

 

Programista programiście nie równy.
Nieraz większe doświadczenie, potrafi skrócić czas produkcji o dni, tygodnie, miesiące.
Doświadczony programista zrobi coś w tydzień, a początkujący informatyk będzie potrzebował co najmniej miesiąca tworząc przy tym produkt gorszej jakości.
Dlatego doświadczenie jest tak bardzo pożądane!
 

Warto również wiedzieć, że stawki są negocjowane i często tajne.
Jak w każdej innej pracy w przypadku dużego popytu, niższej podaży - nieraz zdarza się, że nowo zatrudniona osoba bez większego zatrudnienia - zarabia znacznie więcej niż osoba doświadczona pracująca wiele lat w danej firmie - życie - biznes.

 

Wykres z: mamstartup.pl, dane z ChallengeRocket.com (dane na rok 2017). 

 

 Dane dotyczące polskiego rynku również znajdziesz w artykule na mamstartup.pl.

W zależności od celu - wybierasz język

Podobnie jak w życiu, wybór narzędzi zależy od tego co chcesz zrobić.

Siekierą można rąbać drewno, ale nie pomoże przy grabieniu!

Grabie pomagają wyrównać teren, ale są nieprzydatne gdy chcesz przygotować drewno do kominka.

 

Różne technologie - różne perspektywy

Najpierw zastanów się:
- co chcesz robić?
- jak chcesz pracować?
- jakie masz oczekiwania?

Dopiero potem jęzky, platformę, technologię!!

Każdy język jest 'trochę inny'. Nawet parząc tylko na języki ogólnegoprzeznaczenia - jedne mogą być wygodniejsze/wydajniejsze/lepsze w danych zastoswaniach niż inne.
Wokół każdej technologii bardzo ważna jest tzw. społeczność. Samemu nigdy nie rozwiążesz wszystkich problemów. Zatem im więcej 'aktwynych' ludzi w społeczności, tym łatwiej zrobić 'coś więcej'.

 

Jedne technologie będąc na czasie są niestabilne. To co napiszesz dziś, może sprawić wiele problemów z uruchomieniem np. za 3 lata.
Inne technologie są za to bardzo stabilne, kosztem współczesności.

 

Dlatego jedne są np. bardziej mile widziane w korporacjach niż inne.

Jeśli chcesz pracować w korporacji, prędzej przyda Ci się znajomość języka: Java niż np. Pythona.

 

Zastanów się gdzie chcesz być, za 2, 3, 5, 10, lat

W zależności od tego wybierz język (technologię).

 

Co można wybrać? Mapa informatyki

https://www.flickr.com/photos/95869671@N08/36231833334/

 

 

 

 

 

 

http://coin.wne.uw.edu.pl/dcelinska/en/pages/rogueviz-langs.html

 

 

 

Jak się uczyć?

Metod nauki jest wiele. Jak zawsze najważniejsza jest praktyka.

Przede wszystkim musisz zadbać o środowisko, które pomoże Ci w nauce.

Będziesz popełniał błędy. To dobrze. Dzięki nim się nauczysz.

Jednak musisz zadbać o to byś jak najszybciej dowiedział się o popełnionym błędzie.

Niektóre języki wymagają kompilacji. Przez co musisz napisać pewną część kodu, dopiero potem możesz skompilować (czyli przetłumaczyć na język zrozumiały dla komputera). Dopiero wtedy może okazać, się że coś nie działa.

W językach skryptowych
W chwili wpisywania linijki możesz zobaczyć jaki ma efekt. Jeśli efekt Ci się nie podoba - możesz zmienić.
Dużo szybciej możesz 'podłapać' o co chodzi.

Dlatego zachęcam do języków skryptowych/interpretowanych przynajmniej na początek.

// TODO: ...

Społeczność jest potrzebna.

Pomoc w rozwiązaniu problemów

W czasie programowania na pewno spotkasz się z milionami problemów.
Jedne będą wynikały z tego co napisałeś inne z czynników środowiskowych.
To znaczy, że błąd wynika:

  • z braku biblioteki,
  • innej niż wymagana wersja,
  • możesz mieć najnowszą wersję, ale w niej znajduje się błąd widoczny w twoim programie,
  • być może zaktualizowałeś bibliotekę zależną, ale nie jest w pełni kompatybilna.

 

Jeśli wokół tego co robisz zebrała się odpowiednio duża społeczność, z pewnością już ktoś trafił na taki problem i go rozwiązał.
Zatem w internecie z pewnością znajdziesz odpowiedź - co zrobić.

Najpopularniejszym serwisem Q&A w tej dziedzinie jest Stack Overflow.

 

Gotowe komponenty!

Nie ma sensu odkrywać koła na nowo.

W programowaniu jeśli to tylko możliwe, to korzysta się z istniejącego kodu.
Kodem mogą być różne funkcje, komponenty które kiedyś napisałeś, albo biblioteki które napisali inni (i udostępnili).

Zwróć uwagę, że nawet np. sortowanie, czy nawet narysowanie zwykłej linii również wymaga pewnego kodu.
Zagadnienie może wydawać się proste, jednak wymaga to czasu, często proste rozwiązanie jest niewydajne (wolne).
Na szczęście ktoś to już napisał. 
Zatem będziesz korzystał z bibliotek/komponentów, które robią to co chcesz. Nie musisz wiedzieć jak to realizują, ważne jest jak je obsłużyć.

 

Nie musisz wiedzieć, jak działa drukarka. Wystarczy, że wiesz jak z niej skorzystać.

 

Klocki LEGO fantastycznie obrazują ideę komponentów.

Angielski!

Na bardzo elementarnym poziomie angielski nie jest wymagany.
Później jednak będzie niezbędny chociażby do czytania dokumentacji bibliotek/komponentów z których będziesz chciał skorzystać.


 

 

Słownik

Kompilacja

Język programowania

Framework

 

Aplikacja Natywna

 

Frontend/Backend

W informatyce wyróżnia się Frontend i Backend.

Przypomina to koncert.
W czasie koncertu widzisz scenę (frontend), jednak by odbył się koncert, ktoś musiał przygotować scenę, zamontować głośniki, oświetlenie, ktoś musi tym zarządzać. Ważne są też toalety, bezpieczeństwo, obsługa i sprzedaż biletów, reklama (dzięki której wiesz, że taki koncert będzie) i wiele wiele innych. To wszystko z tyłu to backend (w przypadku koncertów mówimy o backstage).

Frontend - to widoczna część projektu - zazwyczaj widoczna w przeglądarce.
Backend - to niewidoczna część projektu, dzięki której wszystko działa.

 

Mobile/Desktop

Mobile - telefon - często w kontekście aplikacji na telefon.

Desktop - komputer - często w kontekście aplikacje na komputer

Co chcesz robić - jaki język?

Statystyki z serwisu GitHub (https://octoverse.github.com/).

 

Statystyki z serwisu: StackOverflow (https://insights.stackoverflow.com/survey/2017#technology)

 

Każdy język ma swoją specyfikę - inne zastosowanie.

Języki

Prostszy język - to nie znaczy, ze ma mniejsze możliwości!
Wybierz prostszy.
Gdy opanujesz podstawowy język - jego koncepcję.
Kolejnego nauczysz się z łatwością.

Będziesz szukał informacji: "Jak zrobić to co umiem w języku x".
Oczywiście niektóre języki będą wymagały byś douczył się więcej.

 

Garbage Collector (Odśmiecanie pamięci)


Jeśli programujesz w Pythonie, JS, .. to gdy korzystasz korzystać z obiektu, po prostu go zostawiasz.

Niektóre języki, posiadają tak zwany "Garbage collecttor" (GC). Dzięki ktoś inny dba o to by wyrzucać smieci, a ty skupiasz się na tym co jest ważne.

W przypadku takich języków jak C, C++, sam musisz zarządzać obiektami. Gdy przestajesz z nich korzystać - musisz je wyrzucić!

Język C / C++ nie posiada "Garbage collector", zatem śmieci musisz wyrzucać sam, jeśli tego nie będziesz robił, w pewnym momencie stanie się to dużym problemem.

 

Warto wiedzieć, że we wspomnianych językach C/C++, sam zarządzasz pamięcią. Wiąże się z tym naprawdę wiele różnych potencjalnych problemów, gdzie niewyrzucone śmieci, to najmniejszy problem.

Programy napisane w C, C++ mogą być naprawdę szybkie, jednak lepiej zacznij od innego języka.

Osobiście jestem fanem Pythona :)

Detale techniczne

By zacząć programować, wiele nie trzeba wiedzieć.
Jednak brak pełnego zrozumienia co robi twój komputer, czasem może sprawiać problemy.

Dla ciebie pewnie oczywiste jest, że

0.1 + 0.2 = 0.3

Czy tak jest, możesz sprawdzić w przeglądarce internetowej.

Jeśli korzystasz z Chrome, naciśnij F12 (za pierwszym razem może pojawić się ostrzeżenie).

W konsoli wpisz:

0.1 + 0.2 == 0.3

W ten sposób zapytasz czy 0.1 + 0.2 jest równe 0.3 (czy liczby są równe).

Odpowiedź: false - nie. Liczby nie są równe!

Jaką wartość ma 0.1 + 0.3

Co: 0.30000000000000004?

Wynika, to ze sposobu w jaki komputer liczy liczby zmiennoprzecinkowe.
komputer korzysta z systemu binarnego, my z dziesiętnego.
Tak jak my nie możemy zapisać liczby 1/3 w systemie dziesiętnym (daje to 0.3333333..... i nieskończoną ilość trójek), tak komputer ma problem w tym przypadku (arytmetyka zmiennoprzecinkowa).

Problemów w przyszłości możesz spotkać wiele, od kodowania znaków unicode, poprzez detale systemowe (każda operacja może zostać przerwana przez system), po kolejności bajtów (little edian, big edian), która może być inna niż u sąsiada.

 

 

Co chcesz robić?

 

Specyfika języków

 

Z każdym językiem wiąże się wiele technologii, frameworków, etc - często nie mają wiele wspólnego ze sobą - są to osobne galaktyki.

 

 

JavaScript / JS / ECMAScript

JavaScript (w skrócie: JS, a tak naprawdę jest to ECMAScript)

Jest to język "Interpretowany".

Jest to język dostępny w każdej przeglądarce.
Każda przeglądarka posiada narzędzia programistyczne. W chrome wystarczy nacisnąć F12 (by otworzyć narzędzia programistyczne) i już możesz pisać.

JavaScript to język w którym pisze się programy które mają działać w przeglądarce (u użytkownika, po pobraniu strony z serwera).
Ze względu jego popularności i niechęci programistów do nauki kolejnego języka.
Współcześnie JS wykroczył poza przeglądarki. Przy użyciu JavaScript można pisać różnego rodzaju usługi po stronie serwera z wykorzystaniem tak zwanego node.
Przy użyciu JS - można również tworzyć aplikacje na telefon.

Jak wiesz na rynku mamy kilka przeglądarek. Każda z nich posiada wiele wersji. Dlatego pewne opcje dostępne są w nowszej wersji przeglądarki a inne nie. Ale aplikacja musi działać na tym i na tym. Dlatego w tym języku wykorzystuje się niezliczoną ilości 'łatek'.

Jeśli przeglądarka nie posiada danej opcji, to trzeba wykombinować, by mimo wszystko dana funkcjonalność naszej aplikacji działała.

Współcześnie jest już lepiej i wygodniej. Jednak cokolwiek piszesz, musisz wiedzieć jakie i jak stare przeglądarki chcesz obsługiwać.
Gdy już wiesz, to przed użyciem warto sprawdzić, kiedy i gdzie dana funkcja stała się dostępna (czy spełnia twoje kryteria).

https://caniuse.com/
 

Pierwsza biblioteka którą musisz poznać to: JQuery

Gdy będziesz tworzyć DUŻO bardziej skomplikowane strony, to z pewnością przydadzą się:

  • Angular
  • React
  • Vue
  • Backbone (+ Marionette)

Każda technologia ma plusy i minusy.


SQL

SQL to język komunikacji z bazą danych.
W języku SQL mówisz:

"Bazo danych, interesuje mnie klienci, których pozyskaliśmy w tym roku, którzy dokonali co najmniej kilka zakupów w tym produkt XYZ. Podaj mi ich imię, nazwisko i adres email wraz z ilością produktów które kiedykolwiek kupili.

 

Kiedyś jeśli będziesz tworzył duże aplikacje bazodanowe, z pewnością i tak będziesz musiał się nauczyć.
Proste zapytania zrozumiesz w mgnieniu oka.
np. (przykład kodu)

SELECT first_name, last_name, email FROM customers;

Proste? Wydaje się proste nawet jeśli nie znasz SQL.



Java

Wymaga kompilacji.

Język kochają korporacje.
Może nie kochają ale z niego korzystają.

Dlaczego?
Ponieważ do tej pory istnieje bardzo dużo bibliotek, 'kodu' napisanego w tym języku. Migracja wymagała by napisania wszystkiego od nowa (a zajęło by to wiele lat).

Język wykazuje dużą stabilność. Zatem program napisany dziś nadal będzie działał za kilka lat!

 


C#

Wymaga kompilacji.
 

Python

Język interpretowany.

Mój ulubiony język.
Bardzo dynamicznie zyskuje zwolenników.

 

Python występuje w dwóch wersjach.
Python 2.7.x oraz 3.x.

Python 3.x nie jest w pełni kompatybilny z python 2.7.
Dlatego programy napisane w wersji 2.7 prawdopodobnie nie będą działały prawidłowo w python 3.x!

Jest to przekleństwo i jednocześnie najwspanialsza rzecz dotycząca Pythona.

 

Aktualnie jeśli co kolwiem masz robić - użyj python 3+.

 

Jest to niezwykle czytelny język.

Django

https://www.djangoproject.com/

 

The Zen of Python

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
 

import this



PHP

Język interpretowany.

Bardzo popularny język.

'Funkcjonalny'

Najpopularniejsze silniki blogowe, zostały napisane w PHP: Wordpress, Joomlna,

... Strony internetowe

Każdy hosting wspiera PHP, ...


C++



C
 

TypeScript

To w zasadzie JavaScript. Trochę rozszerzony. Docelowo można przekształcić kod właśnie do poprawnego JavaScriptu.

Ruby

Konkurencja do Pythona.
Istnieją sprzeczki między programistami Ruby i Pythona.
Ja bym wybrał Pythona.

Odpowiednikiem Django (z pythona) jest Ruby on Rails.


Swift



Objective-C

Objective-C – rozszerzenie języka C o możliwości obiektowe, wzorowane na Smalltalku. Objective-C przyjął drogę całkowicie odmienną od C++. Jest używany głównie w frameworku Cocoa w systemie OS X oraz w iOS.

https://pl.wikipedia.org/wiki/Objective-C

 

W skrócie: język przydatny jeśli chcesz pisać natywne aplikacje dla iOSa (iPhone, iPad)


VB.NET
 

Assembly

Assembler jest to prawie kod maszynowy (0001 1011 001).
Prawie oznacza że w tym języku określasz konkretne komendy które procesor ma wykonać.
Różne procesory mogą mieć różne komendy.
Assembler umożliwia napisanie najbardziej wydajnych implementacji!
Assemblera używa się tylko dla fragmentów kodu, które muszą być naprawdę wydajne! - resztę pisz się w bardziej przyjaznych językach.

Prosta funkcja licząca ciąg fibbonaciego w asemblerze zajmuje 140+ linijek (nie licząc komentarzy - które są niezbędne by zrozumieć kod). W pythonie to samo może zająć max kilka linijek!

IncrementCount:
    mov    cx,cntDigits    ;
    mov    di,counter+cntDigits-1
    std            ; go from LSB to MSB
    stc            ; this is our increment
    pushf            ; save carry flag
.top
    mov    ax,000fh    ; convert from ASCII BCD to BCD
    and    al,[di]        ; get next digit of counter in al
    popf            ; recall carry flag
    adc    al,ah        ; add these digits
    aaa            ; convert to BCD
    pushf            ;
    add    al,'0'        ; convert back to ASCII BCD digit
    stosb            ; save and increment counter
    loop    .top        ;
    popf            ; recall carry flag
    ret            ;

To wycinek kodu liczący ciąg fibonacciego z http://assembly.happycodings.com/code1.html


 

R

Wygodny język do obliczeń statystycznych.
Ewentualnie możesz spróbować pythona z NumPy i SciPy.
Jednak python jest już językiem ogólnego przeznaczenia, zatem może nie być aż tak wygodny do obliczeń statystycznych.


Perl

VBA

Matlab

Go

Scala

Groovy

CoffeeScript

Visual Basic 6

Lua

Haskell
 

Zarobki?

Korporacja -> Java

Dlaczego

Aplikacje Webowe

 

 

 

Możliwe opcje?

 

 

 

Aplikacje na telefon?

Korzystając z komputera prawdopodobnie korzystasz z systemu operacyjnego Windows.

Każdy smartfony również posiadają swój system operacyjny.
W przypadku smartfonów, na rynku dominują urządzenia z systemem Android.
Kolejnym najpopularniejszym systemem jest iOS - dostępny w urządzeniach firmy Apple (iPhone, iPad).
Istnieją jeszcze inne systemy np. Windows phone jednak Microsoft już ogłosił zakończenie wsparcia - to znaczy nie będzie więcej smartfonów z tym systemem.
Być może w przyszłości pojawi się system operacyjny Tizen (od Samsunga)

 

Koncepcyjny wykres systemów operacyjnych.

Wykres pochodzi z serwisu: AndroidPub.

 

I co z tego?

Każdy system operacyjny posiada inne API.

API jest to sposób w jaki możesz komunikować się z systemem z twojej aplikacji.

Aplikacje na Androida pisze się w języku: Java.

Aplikacje na iOSa pisze się w języku: Objective C.

Są to zupełnie inne języki programowania!
Musisz poznać zupełnie inną specyfikę systemu.

 

Skoro za większość rynku odpowiada Android, to po co iOS?

Każdy rynek ma swoją specyfikę.

Użytkownicy Androida są przyzwyczajeni, że aplikacje są darmowe.
Jeśli będziesz chciał sprzedać swoją aplikację, wiele osób wybierze darmową alternatywę.
Dlatego planując monetyzację aplikację trzeba być być kreatywnym.
Oczywiście można zarabiać na reklamach, dodatkowych opcjach w aplikacji, sprzedaży danych użytkowników, ...
 

Użytkownicy iOS, od początku są przyzwyczajeni, że trzeba płacić.
Dlatego mimo iż urządzeń z iOS jest zdecydowanie mniej przynoszą większe zyski.

 

Uwaga.
Zanim aplikacja trafi go sklepu np. iTunes (iOS), czy Google play w Androidzie musi zostać zweryfikowana.
Różne sklepy mają różny zasięg, różne wymagania.

 


Popularność języków programowania na platformach mobilnych. Zobacz pełen raport Realm.

Widać m.in, że język: Kotlin, powoli zaczyna zjadać Jave. Być może niedługo dogoni popularnością Objective-C.

Google na swojej konferencji "Google I/O", rekomendowało język Kotlin do tworzenia aplikacji na Androida.
Kotlin podobno jest wygodniejszy, zaś rozwiązanie wielu problemów wymaga średnio 40% mniej linii kodu, niż ten sam kod napisany w Javie.

 

 

Aplikacja na dowolny telefon (Android i iOS).

Istnieją technologie, które pozwalają napisać aplikację w jednym języku (bez potrzeby uczenia się osobno Javy i Objective-C i ..).

Technologia sprowadza się do tego, że tworząc aplikację faktycznie w aplikacji znajduje się przeglądarka internetowa, która udostępnia Ci możliwość komunikacji z systemem operacyjnym telefonu z poziomu JavaScript (język programowania).

W wyniku tego nawet najprostsza aplikacja np. dla Androida będzie zajmowała minimum 30MB!

Cordova

https://cordova.apache.org

Zalety:

  • Wygoda wystarczy że znasz tylko JavaScript.
    Dla wielu osób, to po prostu wykorzystanie znanych umiejętności.

Wady:

  • Duży rozmiar plików (minimum 30MB)

 

PhoneGap

https://phonegap.com/

 

 

react native

React - technologia od Facebooka.
Wydajny framework ...

Zobacz więcej: https://facebook.github.io/react-native/

 

 

Technologie webowe

 

 

 

 


 

Aplikacje na komputer

 

TODO: "Natywne czy .."

Języki, plusy i minusy

 

Electron pozwala na pisanie aplikacji przy użyciu dobrze znanych Webowych (internetowych) technologii: JavaScript, HTML, and CSS.

Takie aplikacje będzie można uruchomić na Windowsie, Makach a nawet na Linuxie.

https://electron.atom.io/

Przykłady aplikacji z wykorzystaniem "electron".

Ile kosztuje nauka?

W informatyce w zasadzie wszystkie informacje są dostępne za darmo!

Znajdziesz wiele kursów w pełni za darmo, choć możesz wybrać również płatne.
Większość narzędzi programistycznych dostępnych jest za darmo, choć również istnieją płatne.

 

Nie potrzebujesz rozwiązań płatnych, jednak mogą one dawać większą wygodę.

 

 

 

Zacznij od

CodecAdemy

https://www.codecademy.com/

W Code Academy możesz uczyć się bezpośrednio w przeglądarce w sposób interaktywny!
Zapewni to najszybszy sposób nauki.

 

CodeWars

https://www.codewars.com/

Dostępne języki

 

 

Trening wprowadzający

 

 

Przykładowa lekcja (opis, testy, zadanie). Można wybrać język i jego wersję.

CheckIO

checkio.org

Wybór języków

 

 

Wybór grypy zadań.

 

Przy niektórych zadaniach dostępne jest tłumaczenie na różne języki np. Polski

 

Tak wygląda edytor

 

 

CodeFights

https://codefights.com/

 

Dostępne jezyki.

 

HackerRank

www.hackerrank.com

 

Dostępne języki

 

 

 

Przykładowa lekcja

 

 

Tutorial

 

C++, py3, Java, JS, jQuery, CSS, C#, PHP, Ruby, SQL

https://www.sololearn.com/

====

https://learnxinyminutes.com/

====

 

Python

Kurs online (angielski)

codecademy

https://www.learnpython.org/

 

https://learnxinyminutes.com/docs/python3/

http://www.pyschools.com/

 

https://automatetheboringstuff.com/

 

https://www.youtube.com/watch?v=YYXdXT2l-Gg&list=PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU

 

https://www.youtube.com/watch?v=hvoiILSUWsc&list=PLT_6xP6jAq8jGg4QgDHqOwxHLy-L66mqU

http://anandology.com/python-practice-book/index.html

http://www.alwayslearning.io/8-practice-steps-to-help-you-become-a-qualified-python-web-developer.html

 

 

// like notprom http://www.pythonchallenge.com/

Ruby

https://www.learnrubyonline.org/

 

Java

https://www.learnjavaonline.org/

 

HTML & CSS

https://www.learn-html.org/

JS

https://www.learn-js.org/

 

PHP

https://www.learn-php.org/

 

 

Shell

https://www.learnshell.org/

 

 

Go

https://www.learn-golang.org/

 

C

https://www.learn-c.org/

 

C++ (cpp)

https://www.learn-cpp.org/

 

C#

https://www.learncs.org/

 

Perl

https://www.learn-perl.org/


 

Nauka języka programowania to mały fragment całej układanki!

 

 

Na pewno musisz rozumieć różne algorytmy i pojęcie złożoności obliczeniowej.

Kontrola wersji: np GIT,

Deployment (wdrażanie aplikacji).
Bazy danych,

Bezpieczeństwo,

Testy jednostkowe, testy integracyjne, automatyzacja.

 

 

 

 

 

 

Środowisko

 

Do programowania zazwyczaj wystarczy zwykły edytor tekstu.
Nawet standardowy notatnik może wystarczyć.
Jednak "wystarczy" nie oznacza komfortu i efektywności twojej pracy.

 

Tonę ziemi możesz można przekopać zwykłą łopatą (męczące, długotrwałe),
jednak zdecydowanie wygodniej jest użyć specjalnej maszyny.

 


 

 

Zamierzam opisać różne aspekty programowania - z czym się to wiąże

Dlatego poniżej znajduje się wiele obrazków, które mi się niedługo przydadzą :)

 

 

Styl, konwencje i dobre praktyki

W każdym języku istnieją pewne bardziej popularne konwencje.

Wiele rzeczy można napisać w różny sposób.
Twój kod może być czysty, przejrzysty - czytelny, może równie dobrze być nieczytelny i skomplikowany.

Trzymając się pewnego stylu:

  • inny programista będzie w stanie zrozumieć co miałeś na myśli,
  • gdy za pół roku wrócisz do swojego kod, będziesz w stanie go poprawić.

 

W Pythonie,
konwencje zostały opisane w dokumencie PEP8: Style Guide for Python Code.
Dokument opisuje nawet ile spacji mają mieć wcięcia.

Naprawdę warto się do nich stosować.

 

 

Błędy w oprogramowaniu

Błędów w oprogramowaniu nie da się uniknąć (im większa aplikacja tym większe prawdopodobieństwo istnienia jakiegoś błędu).

W IT, jeśli coś może się wydarzyć TYLKO raz na milion, to znaczy, że będzie to miało miejsce co kilka minut.
Sprawa jest prosta nasze komputery są bardzo szybkie, razy ilość komputerów.. Nie mniej, może się zdarzyć, że błąd ukrywa się latami.

 

By ograniczyć ilość potencjalnych błędów, pisze się tak zwane testy.
Testy to po prostu sprawdzenia, czy nasz program robi w danym przypadku robi to co powinien - czy nie zawiera błędów.

 

Błędu nazywamy BUGami (po angielsku: "Pluskwa").
Nikt nie lubi robactwa :)

 

Proces szukania błędów - próbę ich lokalizacji nazywami odpluskwianiem - debugowaniem (ang debugging).

Co ciekawe, nieraz naprawdę trudno odtworzyć sytuację w której może dojść do błędu.
Zatem możemy mówić o sztuce debugowania.

 

Stąd słynne.

 

"Dziwne,

U mnie DZIAŁA!"

 

 

 

Nie raz błąd nie wynika z czynności użytkownika, czy złego algorytmu

 

 

 

 

 

 

 

 

Czasem problemy wynikają po prostu z tego, że polegasz na innych rozwiązaniach.

 

Jak na obrazku jako programista, powinieneś przewidzieć, że gdy układasz karty, to ktoś może wpaść na pomysł by naprawić nogę od stołu.
W IT, każda funkcja, każde wywołanie systemowe, prawie każda czynność może skończyć się błędem.  Jako programista powinieneś przewidzieć i zrobić tak by program nadal działał prawidłowo - wszytko może pójść nie tak.

 

Warto pisać testy jednostkowe (ang. Unit Test).

Testy które testują poszczególne funkcje, komponenty.

Jednak to, że działają poszczególne komponenty, wcale nie oznacza, że będzie działała całość.

 

 

 

Problem z szukaniem błędów.

Ta chwila, kiedy dziewczyna zauważyła, że zgubiła kolczyk, pierścionek,.. w czasie spaceru.

 

Ile czasu może zająć debugowanie?

Tyle samo czasu ile zajmuje znalezienie zgubionego kolczyka w czasie spaceru.
Możesz go znaleźć w ciągu minuty, godziny, dni, miesięcy. Być może nigdy się nie znajdzie.

Z doświadczeniem, szukanie błędów zajmuje coraz mniej czasu, ponieważ domyślasz się gdzie potencjalnie "mógł wypaść kolczyk".

 

Społeczność

Przy wyborze języka i technologii istotna jest również społeczność.

W praktyce, każdy program opiera się o pracę innych.
Często ktoś inny napisał biblioteki z których korzystasz.

Dodatkowo z pewnością będziesz napotykał różne trudności. Nieraz pisząc wszystko na 100% zgodnie z dokumentacją, może okazać się, że w bibliotece z której korzystasz jest błąd.
Jeśli społeczność skupiona wokół technologii jest dość duża, to możesz kogoś zapytać, czy ma pomysł. Choć w 99,9% przy odpowiednio dużej społeczności ktoś już miał taki problem - a odpowiedź znajdziesz np. na:

https://stackoverflow.com

 

 

DevOps

Czym jest DevOps?

 

 

Projektowanie systemów 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Design patterns

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Co wybrać?

 

Często wybór technologii zależy od twoich preferencji.

W zależności kogo się zapytasz, taką usłyszysz odpowiedź.

Przypomina to wojnę: Lepiej mieć Psa czy Kota?

 

 

Tak samo jest w przypadku IT.

To mapa walki frameworków: Angular, React, vue, .. osobiście korzystam jeszcze z innego nawet niewidocznego na mapie :)

 

//TODO: Bootcamps 

 

 

 

 

 

Uwaga: Prawie wszystkie artykuły cały czas aktualizuję :) Możesz spotkać: literówki, niedokończone zdania itp. Najpierw jakoś potem jakość. Wszelkie uwagi są mile widziane!
Pomóż innym - Podziel się - Udostępnij, to takie proste.

Ciekawe?
Bądź na bierząco!
Polub StartHerePL: InfoTechnologia
Dodatkowo zobacz inne kategorie
Polub StartHerePL: Zdrowie
Polub StartHerePL: Biznes

Nie masz konta na FB?
Pomóż - Wsparcie - Darowizna?

Przygotowanie artykułów zajmuje dużo czasu, do tego dochodzą koszty m.in. serwera.
Dlatego wszelkie darowizny są mile widziane - każda złotówka się liczy!

PayPal (możliwość płatności kartą):
Konto

mBank: 81 1140 2004 0000 3902 7604 5817

Krypto

LTC: LZqTnSMxjEtJpT5VttKg8339gWJvig9rVE

ETH: 0x725F98e3eB04fbaC171410160F22a6cB95e26151 (duże prowizje)

BTC: 1E5Nk23zb7kohtX1tPNLiVyiRAjZxbuXr7 (bardzo duże prowizje)

Inne formy pomocy:

Kupując książki za pomocą porównywarki cen ksiązek (otrzymam 3-4% od ceny książki czyli ~1 zł).

Polub / Udostępnij