Krótko o tym, czy warto i jak zacząć uczyć się C.
Obecnie na klawiaturach programistów królują Java, Python, JS. Gdzie w tym wszystkim znajduje się C, starszy brat C++, C# i Objective-C? Czy jeszcze ktoś sięga po ten język? Oczywiście, że tak; C ma się całkiem dobrze (:
Poniższy wykres sporządzony przez StackOverflow przedstawia najpopularniejsze technologie 2019 roku.
Źródło: https://insights.stackoverflow.com/survey/2019.
Jeżeli pominiemy takie technologie jak SQL, HTML/CSS czy języki skryptowe, widać, że C pozostaje w czołówce. Co sprawia, że język ten jest nadal powszechnie używany?
Warto zacząć od tego, gdzie wykorzystano C. Zapewne większość interesuje się tym, z użyciem jakich języków została stworzona wyszukiwarka Google lub Facebook. Czy ktoś jednak myśli o systemach operacyjnych jak Linux czy Mac OS, sterownikach, z których korzystamy na co dzień, programach, które wielu z Was zapewne zna, jak 7-zip czy Gimp? A co z oprogramowaniem wbudowanym, np. w pralkach lub pociągach? To wszystko w większości bazuje na C.
C łatwo można dopasować do platformy niezależnie od tego, czy używamy komputera z Linuxem bądź Windowsem, czy Raspberry Pi lub Arduino. Wystarczy odpowiedni kompilator i można pisać. Język ten świetnie spisuje się, gdy zasoby są ograniczone i/lub chcemy uzyskać lepsze efekty wydajnościowe.
Często pojawia się konflikt, czy użyć C czy C++. Języki te są do siebie dość podobne i łatwo pogubić się w drobnych szczegółach odróżniających. Mnie się to nadal zdarza. Znajdziemy oferty pracy dla programisty C/C++, bo okazuje się, że w jednym projekcie można użyć obu języków. Łatwo wywołać niemały konflikt mówiąc, że któryś jest lepszy. Moim zdaniem, wybór leży tutaj pomiędzy wygodą pisania a wydajnością, choć, co ważne, nie w każdym przypadku.
Wrócę do mojego ulubionego porównania języków programowania i aut, które tyczy się nie tylko C i C++, ale także pozostałych. Traktorem na autostradę nie wjedziemy, sportowym autem za to na pole, a po mieście opłaca się znaleźć coś, co mało pali (;
C nadal w dużej mierze wykorzystuje się na uczelniach. Zapewne komuś, kto zaczyna przygodę z programowaniem, może to wydawać się dziwne, dlaczego uczy się języka stworzonego prawie pół wieku temu. Czy to nie archaizm? Jednak język ten świetnie pozwala zrozumieć działanie programów oraz urządzeń – zarządzanie pamięcią itp. Uwidacznia istotne szczegóły, które w innych językach są już przed nami trochę ukryte (co może ograniczać nasze możliwości).
Dlatego moim zdaniem warto poznać i zrozumieć C, nawet jeśli zawodowo jest się związanym bardziej np. z Javą lub jeśli dopiero ma się zamiar rozpocząć przygodę programisty – przy znajomości C ze znalezieniem stanowiska nie będzie problemu.
Jak uczyć się C, który nie należy do najłatwiejszych języków? Oczywiście, kilka źródeł polecałem przy okazji notki o ciekawych kanałach na YouTube. Kompleksowym rozwiązaniem może być także video kurs C od Videopoint.pl, który miałem przyjemność zobaczyć.
O Videopoint już wspominałem przy okazji opisu video kursu Arduino. Tutaj moja krótka recenzja kursu C.
Co go wyróżnia? Na pewno podejście, które bardzo mi się podoba, czyli najpierw praktyka, która potrafi pokazać możliwości i przez to zainteresować, a po tak wciągającym wstępie teoria – bardzo ważna w tym języku i niekoniecznie najprostsza. Przyswojenie tematu przysparza zdecydowanie mniej trudności w oparciu o praktykę.
Prowadzący Adam Bobowski ma radiowy głos i wypowiada się bardzo rzeczowo oraz nadzwyczaj swobodnie, co daje wyobrażenie, jakby ktoś się z nami zdzwonił na Skype, żeby wytłumaczyć, o co chodzi. Podziwiam to bardzo. Jeśli ktoś ogląda lub oglądał mój kanał na YouTube, wie, że mnie jeszcze trochę do tego poziomu brakuje. Na swoją obronę dodam, że praca nad formą prezentacji jest bardzo żmudna, dlatego tym bardziej doceniam autora. Zwykle z takimi umiejętnościami człowiek się nie rodzi (;
Przedstawię spis treści całego kursu:
- Wstęp
1.1. Słowo wstępu o kursie
1.2. Środowisko programisty
- Praktyka
2.1. Witaj programisto! – podstawowe operacje wejścia/wyjścia
2.2. Prosty kalkulator – podstawowe operacje arytmetyczne
2.3. Równanie kwadratowe – wyrażenia warunkowe
2.4. Drukowanie kwadratów – pętla for
2.5. Lata przestępne – funkcje
2.6. Ciąg Fibonacciego – rekurencja
2.7. Silnia – typy całkowitoliczbowe
2.8. Suma odwrotności – pętla while i typ zmiennoprzecinkowy
2.9. Min, Max, Avg – tablice
2.10. Zamiana liter – ASCII i typ char
2.11. Zamiana liter c.d. – C-String
2.12. Fibonacci v2.0 – przekazywanie przez wskaźnik
2.13. Rzutowanie
2.14. Alokacja pamięci – malloc + free
2.15. Lista jednokierunkowa – struktury
2.16. Suma macierzy – tablice wielowymiarowe
2.17. Lista uczestników – Podstawowa obsługa plików
2.18. Kalkulator v2.0 – Argumenty wywołania programu, wiele plików źródłowych
2.19. Biblioteka standardowa
- Teoria
3.1. Podstawowe typy danych
3.2. Wskaźniki i struktury
3.3. Funkcje
3.4. Operatory
3.5. Wyrażenia warunkowe i pętle
3.6. Zarządzanie pamięcią
3.7. Preprocesor
3.8. Stałe
3.9. Operacje rzutowania
3.10. Zasięg zmiennych
- Projekt
4.1. Plan i zakres funkcjonalności
4.2. Struktura projektu i Makefile
4.3. Tworzenie statycznej biblioteki
4.4. Obsługa argumentów programu
4.5. Format danych w pliku
4.6. Wczytywanie danych
4.7. Wczytywanie c.d.
4.8. Obsługa kolejnych funkcji
4.9. Dodawanie rekordów
4.10. Podsumowanie i zakończenie
Łączny czas trwania kursu: 4:59:52
Jak widać, kurs daje solidne podstawy do napisania własnego projektu i jest świetnym wstępem do dalszej pracy nad umiejętnościami związanymi z C. Jeżeli macie jakieś swoje przemyślenia co do tego języka, dajcie znać w komentarzach.
Jeśli artykuł był dla Ciebie wartościowy, możesz mnie wesprzeć na https://inzynierdomu.tipo.live/
Podchodziłem już kilka razy do C i C++. Za każdym podejściem czegoś nowego się uczę i zyskuję sporo wiedzy i zrozumienia, jak działają różne rzeczy, z których korzystam na co dzień. Myślę, że w tym przypadku droga może być ważniejsza od celu, tzn. nauczenia się programowania.
Zaczynałem od Basica…potem FORTH, Asembler…trochę Progress. Raczej jednak byłem sprzętowcem. Teraz postanowiłem połączyć to wszytko , w sensie sprzęt i oprogramowanie…C wydaje się idealny, a z mojego punktu widzenia nie widzę w nim nic skomplikowanego… kwestia perspektywy 🙂