Na naukę nigdy nie jest za późno, czyli sześć miesięcy ze Swiftem
Na naukę nigdy nie jest za późno, bo człowiek uczy się przecież całe życie. Powiedziałem to sobie pod koniec ubiegłego roku. Mając 41 lat, postanowiłem nadrobić zaległości z przynajmniej ćwierćwiecza i nauczyć się programować.
To właśnie pod koniec lat 80. stukałem na klawiaturze mojego Atari 65 XE i pożyczonego ZX Spectrum proste programy w Basicu. Trudno było jednak nazwać nauką przepisywanie prostego kodu opublikowanego w Bajtku, Komputerze (rzadziej) czy wydawanym na zwykłym gazetowym papierze magazynie IKS (skrót od Informatyka Komputery Systemy). Niewiele się z tego przepisywania nauczyłem. Poza prostymi instrukcjami w Basicu, na większą część kodu składały się długie linie liczb właściwego programu napisanego w języku maszynowym. Szybko więc dałem sobie z tym spokój.
Być może potrzebowałem dwudziestu lat, by dojrzeć do tego tematu? To też, tak naprawdę jednak poczułem, że stanąłem w miejscu i zwyczajnie pragnąłem ruszyć do przodu ku nowym wyzwaniom. Po latach recenzowania aplikacji na Maca, iPhone'a czy iPada napisanych przez innych chęć poznania tej drugiej strony i ciekawość tego, jak to jest pisać własne programy, wzięła górę. Wybór języka programowania i platformy był w tym wypadku oczywisty: Swift, nowy język dla iOS, macOS, watchOS i tvOS, słowem wszystkich urządzeń Apple, na które można pisać programy.
Będąc zupełnie zielonym, z wyjątkiem może absolutnych podstaw programowania, a więc rozumienia, czym są zmienne, stałe, pętle i instrukcje warunkowe, zabrałem się za naukę od podstaw. Po niemal dziesięciu miesiącach zaczynam tworzyć pierwsze własne programy z zamiarem udostępnienia ich w App Store, choć daleki jestem jeszcze od nazywania siebie deweloperem. Trudno też, bym dzielił się z Wami wiedzą na temat samego programowania. Podejrzewam, że wśród czytelników jest wielu świetnych programistów. Pragnę jednak podzielić się z Wami doświadczeniami zebranymi przez te dziesięć miesięcy, a jest ich sporo. Myślę, że przydadzą się one tym z Was, którzy dopiero myślą o nauce programowania, a szczególnie Swifta, wprowadzonego dwa lata temu nowego języka, który docelowo zastąpić ma Objective-C.
Składniki: dyscyplina, samozaparcie, dobra muzyka tła i dobre słuchawki
Niezależnie od tego, czego się uczymy, musimy do procesu nauki podchodzić z dużą dyscypliną i samozaparciem, zwłaszcza jeśli uczymy się sami. Założyłem, że wygospodaruję każdego dnia od jednej do trzech godzin na naukę programowania. Pewnie, że w tygodniu poświęcenie na naukę więcej niż godzinę lub dwie graniczy z cudem. Pisze to osoba, która pracuje w domu i której czas pracy jest w miarę elastyczny (nie jest też określony np. od 8:00 do 16:00). Często, kiedy udało mi się już usiąść przed komputerem i poświęcić nauce, miałem za plecami dwójkę moich synów bawiących się klockami czy oglądających jakiś film na stojącym obok mojego biurka telewizorze. Nie są to warunki sprzyjające nauce. Na szczęście na wyciągnięcie ręki mam dobre, izolujące mnie od dźwięków otoczenia słuchawki, z których zwykle sączy się muzyka tła, na ogół jest to jakaś płyta Vangelisa albo - szerzej - muzyka filmowa. W ten sposób udało mi się, oczywiście z licznymi wyjątkami, poświęcić przynajmniej godzinę dziennie na naukę programowania. Wyjątkami są różne wyjazdy służbowe i prywatne, na których zwyczajnie uczyć się nie da.
Ogromnie ważnym elementem, w moim przypadku decydującym o sukcesie całego przedsięwzięcia, jest samodyscyplina i samozaparcie. Potrzebne mi były one do pokonywania licznych przeszkód, jakie spotkałem na swojej drodze. Ich natura jest różnorodna, od własnego lenistwa, diabełka podpowiadającego z tyłu głowy, że już wieczór i lepiej się zdrzemnąć, przez różnego rodzaju błędy w materiałach szkoleniowych (o czym piszę w dalszej części), po nierozumienie pewnych pojęć, często wręcz na poziomie abstrakcyjnym - programowanie, tak jak matematyka, wymaga abstrakcyjnego myślenia. Oczywiście, jeśli czegoś nie rozumiecie, nie oznacza od razu, że jesteście pozbawieni takiej zdolności. Często jednak pewne pojęcia wyjaśnione są ogólnikowo i zwyczajnie trudno je zrozumieć. Sam wielokrotnie wytężałem mój mózg, próbując zrozumieć coś, i dopiero w którymś z kolejnych podręczników autor wyłożył to niemal tak jak dziecku. Wspomnę tutaj np. wyjaśnienie pojęcia określonego typu danych, jakie przyjmować mogą zmienne lub stałe w języku Swift, czy pojęcia zmiennych opcjonalnych, które mogą te dane zawierać lub nie. I tak, autor jednego z podręczników przedstawił zmienne opcjonalne jako pudełko, którego zawartość należy najpierw wyjąć, by móc ją wykorzystać. To stosunkowo błahe problemy. Zdecydowanie trudniej było mi zrozumieć i przyznaję, że do dzisiaj nie jestem w stanie do końca ogarnąć protokołów i domknięć w języku Swift (stosowane są też w innych). Do tych pierwszych nasz kod musi stosować się, jeśli ma posiadać pewną określoną funkcjonalność, te drugie to z kolei bloki kodu umieszczane często jako parametry funkcji, których wykonanie przesunięte jest w czasie. Nawet opisując je, mam pewną trudność i nie jestem do końca pewien, czy to, co napisałem, jest prawdą. Niezależnie jednak od tego, że myśląc o protokołach czy domknięciach, dalej drapię się w głowę, nauczyłem się ich używać i oswoiłem się z nimi, i wiem już, kiedy muszę je stosować. W moim przypadku problemy ze zrozumieniem tych pojęć niemal zniechęciły mnie do dalszej nauki. Zacisnąłem jednak zęby i brnąłem dalej, przerabiałem lekcje po dwa, trzy, a nawet cztery razy, by wrócić do nich po miesiącu lub dwóch.
Jeśli więc sami uczycie się już Swifta i macie poważne problemy ze zrozumieniem pewnych pojęć, nie zrażajcie się, nie rezygnujcie. W tym wypadku porównałbym naukę programowania do nauki tradycyjnego języka. Zwykle bowiem trzeba na blachę wkuć zasady gramatyki, konstrukcje zupełnie nam obce i niezrozumiałe. Z biegiem czasu, stosując je, kiedy są potrzebne, można się z nimi oswoić, a ich zrozumienie przychodzi samo.
Czas, w którym zdecydowałem się podzielić z Wami moimi doświadczeniami, nie jest przypadkowy. Zwłaszcza jeśli chodzi o tak młody i wciąż rozwijany język, jakim jest Swift. Co roku pojawia się jego nowa wersja różniąca się składnią, a zmiany te mogą stanowić kolejny problem dla osób, które rozpoczęły naukę kilka miesięcy wcześniej. Dlatego naukę Swifta najlepiej rozpocząć teraz, kilka tygodni po pojawieniu się nowej wersji i korzystać ze sprawdzonych źródeł i podręczników napisanych przez autorów, którzy poważnie podchodzą do sprawy i zapewniają ich aktualizację do obecnej wersji języka. Większość z nich już została zaktualizowana. Niestety, w internecie znaleźć można masę różnego rodzaju krótkich „dzikich” samouczków, odnoszących się do starszych wersji Swifta. Próba korzystania z nich może nie tylko namieszać w głowie, ale i skutecznie zniechęcić do dalszej nauki, a przecież nauka programowania ma zarówno stymulować, jak i dawać radość. Warto zatem korzystać z takich podręczników, które uczą, a jednocześnie dają satysfakcję z ukończonych aplikacji - te ostatnie często można wykorzystać na co dzień. Ja sam z czystym sumieniem mogę polecić Wam niżej przedstawione pozycje. Muszę jednak zaznaczyć, że wszystkie one napisane są po angielsku. Do dzisiaj nie znalazłem podręcznika do nauki Swifta w języku polskim, co oczywiście nie oznacza, że takowego nie ma.
iOS Apprentice
To obszerny kurs programowania w Swifcie oparty na przykładzie czterech projektów aplikacji, od stosunkowo prostej gry pod tytułem Bull's Eye, w której gracz musi wskazać na suwaku zadaną losową wartość, przez bardziej rozbudowane, jak lista rzeczy do zrobienia, notatnik miejsc wykorzystujący geolokalizację i zapisywanie danych do bazy danych (za pomocą CoreData), po przeglądarkę zawartości sklepu iTunes. Każdy z projektów to osobny rozdział i osobny dokument PDF. Całość opisana jest bardzo prostym językiem, wiele pojęć trudnych do zrozumienia przez początkującego wyjaśnionych jest w sposób przejrzysty. Projektując poszczególne aplikacje, czytelnik poznaje postawy języka Swift, obsługi Xcode i projektowania programów, wszak nie ogranicza się to tylko do samego kodowania.
Jedyna rzecz, do której mógłbym się przyczepić, to długość rozdziałów. Na każdy z nich potrzeba przynajmniej paru dni, choć lektura i przerobienie zawartego w niektórych rozdziałach materiału może zająć nawet tydzień. Może to skutkować pewnym znudzeniem i znużeniem, zwłaszcza wtedy, kiedy czytelnik zderzy się z czymś, czego nie rozumie. To dlatego tak ważne jest samozaparcie i dyscyplina. Nagrodą są ciekawe aplikacje, z których można później normalnie korzystać i to do tego z dużą satysfakcją.
iOS Apprentice to jeden z najlepszych moim zdaniem podręczników do nauki Swifta dla początkujących, jakie dostępne są w sieci.
Beginning iOS 10 Programming with Swift
To kolejny podręcznik wart polecenia. Jego autor prostym językiem opisuje podstawy programowania w języku Swift. Pierwsze rozdziały to wprowadzenie do Xcode oraz podstawowych pojęć jak ViewController, elementy widoczne na ekranie itp. Simon NG - autor tego podręcznika - w bardzo prosty sposób tłumaczy też zasady automatycznego layoutu (Auto Layout) oraz stosów (Stack View), ułatwiających projektowanie interfejsów uniwersalnych aplikacji przeznaczonych zarówno dla iPhone’a, jak i iPada. Tak jak każdy dobry kurs, także i ten opiera się na projekcie aplikacji, której konstruowanie powinno przynieść dużo satysfakcji, a także radości. W następnych rozdziałach powstają kolejne jej elementy: interfejs użytkownika oparty na widoku tabeli, kod podstawowej funkcjonalności (obrazki, lokalizacja, mapy, ocenianie)oraz wykorzystanie CloudKit.
Cena: 39 dolarów (darmowa wersja web dostępna online)
Hacking with Swift
To zdecydowanie najbardziej rozbudowany pod względem objętości materiału, a jednocześnie najbardziej przystępny podręcznik z tych, które miałem okazję przerobić. Jego autor podszedł do tematu inaczej niż poprzednicy. Niemal każdy z rozdziałów, a jest ich prawie 40, to osobny projekt aplikacji. Użytkownik poznaje nie tylko podstawy programowania w Swifcie, a więc składnię języka, podstawowe typy interfejsów użytkownika, ale także wiele zaawansowanych technologii i frameworków. Tworzy w SpriteKit w pełni grywalne gry, z których kilka to odpowiedniki popularnych tytułów z App Store (np. Fruity Ninja), uczy się wykorzystywać beacony (niewielkie boje sygnałowe), pobierać i parsować treści z kanałów RSS czy korzystać z zabezpieczeń biometrycznych (TouchID).
Każdy z rozdziałów/projektów można przerobić w jeden dzień, dzięki temu, przy dobrej organizacji czasu, podręcznik można przerobić w kilka tygodni. Hacking with Swift dzięki zakresowi materiału to pozycja, za którą śmiało mogą zabrać się zarówno początkujący adepci programowania, jak i osoby, które pierwsze kroki mają już za sobą.
Cena: 30 dolarów (darmowa wersja web dostępna online)