30 devstories

Od jakiegoś czasu biorę udział w akcji #30devstories i publikuję nagrania na YouTube. Chodzi w skrócie o to, żeby nagrać 30 filmików związanych z różnymi aspektami programowania.

Na razie opublikowałem 6 odcinków:

Więcej o samej akcji mówię tutaj:

Kolejne odcinki znajdziecie na moim kanale YouTube.

Jeżeli również chcesz wziąć udział w akcji – weź kamerę i podziel się swoimi przemyśleniami z pracy jako programista!

Inicjalizacja struktur

Ostatnio było o inicjalizacji tablic, dzisiaj pora na struktury. Ostatnio zdarzył mi się projekt, gdzie kompilator nie wspierał inicjalizacji z podawaniem nazwy pól. Dlatego pomyślałem, że dobrze będzie zebrać w jednym miejscu opcje inicjalizacji, od jakich standardów są dostępne i co się dzieje, kiedy nie podamy wartości dla wszystkich pól.

Continue reading

Inicjalizacja tablic

Jakiś czas temu widziałem taki kod inicjalizujący tablicę:

int32_t values[SIZE] = {-1};

Celem autora było zainicjalizowanie wszystkich elementów tą samą wartością. Pewnie dla wielu z Was błąd w tej linijce wyda się oczywisty. Ale skoro

int32_t values[SIZE] = {0};

inicjalizuje wszystkie wartości na zero, to można pomyśleć, że analogiczny zapis inicjalizuje wszystko na -1. Niestety tylko indeks zerowy przyjmie wartość -1, natomiast cała reszta tablicy będzie mieć wartości zerowe.

Dlaczego tak się dzieje? Co zrobić, aby zainicjalizować tablicę na wartości inne niż 0? Odpowiedzi na te pytania znajdziecie poniżej.

Continue reading

Bool C99 jest lepszy niż Twój

W tym artykule pokażę pewne niuanse związane z typem bool w C. Wartości tego typu są wynikami operacji logicznych i warunkami w ifach i pętlach. Jednak bool nie jest do końca pełnoprawnym typem, a raczej intem w przebraniu. Sytuację próbowano poprawić w standardzie C99, ale teraz problem jest taki, że w różnych kontekstach bool może zachowywać się inaczej zależnie czy korzystamy z boola C99 czy własnego.

Continue reading

C dla zaawansowanych

Od jakiegoś czasu pracuję nad szkoleniem online C dla zaawansowanych. Ostatnio uruchomiłem stronę szkolenia: https://cdlazaawansowanych.pl/

Na razie możecie na niej przeczytać trochę jak będzie wyglądać ten program. Możecie także zapisać na mój newsletter i mieć pewność, że nie przegapicie żadnych informacji dotyczących szkolenia i otrzymacie najlepszą ofertę dołączenia. Przy okazji na listę mailową wrzucam różne materiały z prac nad kursem takie jak szkic agendy, czy przykładowe lekcje.

Moim celem jest stworzenie takiego kompendium dla programistów C zawierającego wiedzę potrzebną do codziennej pracy nad komercyjnymi projektami. Chcę pokazać nie tylko składnię i działanie kompilatora, ale przede wszystkim dobre praktyki i przydatne narzędzia.

Po więcej informacji odsyłam na stronę: https://cdlazaawansowanych.pl/

Stream o IDE i debugerach sprzętowych

Ostatnio na live omawiałem IDE i debugery sprzętowe w embedded. Nagranie jest dostępne tutaj:

Pod nagraniem są też timestampy i linki. Wyszło tego bardzo dużo więc lepiej to będzie zebrać we wpisie. Od razu zapraszam również na kolejny live w czwartek 28 maja o 20:00, gdzie tematem będą języki programowania w embedded.

Continue reading

Compiler explorer – Twój najlepszy przyjaciel w rozmowach o wydajności kodu

W artykułach o sprytnym kodzie i mikrooptymalizacjach postawiłem tezę, że często większa wydajność kodu, którą usprawiedliwiamy zmniejszenie czytelności, jest fikcją. Aby to stwierdzić potrzebujemy danych. Tymi danymi są czas wykonania aplikacji i kod asemblerowy generowany przez kompilator. Dzisiaj opiszę narzędzie przeglądarkowe pozwalające nam analizować właśnie kod asemblerowy. A jest nim Compiler Explorer.

Continue reading

Style Guide i Coding Standard – czy to już jakość?

Kiedy zdamy już sobie sprawę, że sprytny kod i mikrooptymalizacje to nie jest dobra droga, dochodzimy do wniosku, że jakość kodu jednak ma znaczenie. A wyrazem dbania o tą jakość kodu jest wprowadzenie odpowiednich reguł. Temu właśnie służą Style Guide i Coding Standard. W C są one szczególnie ważne, bo język pozwala nam na wiele dziwnych rzeczy. Czasem występują jako dwa oddzielne dokumenty, a czasem jako jeden. Różni się również sposób ich użycia. Czasem zawierają rozsądny zestaw zasad, który faktycznie jest przestrzegany w projekcie. Czasem natomiast są tak restrykcyjne i tak niemożliwe do wyegzekwowania, że nikt nawet nie próbuje. Kiedy indziej natomiast każdy i tak wie lepiej. W dwóch ostatnich przypadkach reguły służą głównie do chwalenia się na zewnątrz, że do naszego projektu DODALIŚMY jakość. No właśnie to tak nie działa. Możemy wprowadzić te wszystkie reguły a i tak pisać w sposób zupełnie niezrozumiały dla innych.

Dlatego dzisiejszym artykule porozmawiamy sobie właśnie o zasadach znajdujących się zwykle w tego typu dokumentach. Po co powstały i jak je egzekwować. Oczywiście temat jest tak rozległy, że omówię tylko mały odsetek najczęściej spotykanych reguł.

Continue reading

Mikrooptymalizacje są bez sensu

Poza próbą napisania jak najsprytniejszego kodu robiącego wszystko w jednej linijce o czym pisałem ostatnio, drugim największym grzechem programistów C jest próba optymalizowania wszystkiego i wszędzie. Jest to koronny argument usprawiedliwiający nieczytelny kod. A ta optymalność bardzo często jest fikcją. Nie jest poparta żadnymi pomiarami dla naszego konkretnego przypadku. Bazuje tylko na legendach i przekazach ustnych kultywowanych przez kolejne pokolenia programistów C. O ile kiedyś – w zamierzchłych czasach – te zasady miały jakiś sens, teraz najczęściej kompilatory mogą wykonać tą robotę za nas. Albo nie musimy w ogóle się tym przejmować, bo już nam wystarczy RAMu. A my możemy cieszyć się kodem, który da się rozczytać.

Continue reading

Livestreamy – projekt od zera

Jak zapewne wiecie – od jakiegoś czasu prowadzę streamy na youtube. W ostatnim czasie głównym tematem jest projekt zegara szachowego, którego robię od zera. Pokazuję tam wszystkie fazy łącznie z analizą istniejących rozwiązań i ewolucją koncepcji. Do tej pory ukazały się trzy odcinki:

W trzecim odcinku już pojawił się kod i unit testy. Wygląda to całkiem fajnie. Zapraszam do oglądania!

Przy okazji zmiany w kodzie można śledzić również na moim githubie:

https://github.com/ucgosupl/chess_clock

W tym tygodniu niestety nie było streama, ponieważ jestem na wsi i mam słaby internet. Z tego samego powodu nie wiem, czy uda mi się zrobić streama w przyszłym tygodniu. Ale za to w najbliższym czasie dojdzie trochę treści pisanych. Te są odporniejsze na problemy z internetem 😀

© 2020 ucgosu.pl

Theme by Anders NorénUp ↑