Materiał o programowaniu, który wyjątkowo nie będzie dotyczył pisania kodu 😯! Przedstawię Ci w nim czcionki dla programistów, którzy mają ochotę zmienić czcionkę jaką się posługują i chcą sobie odświeżyć spojrzenie na kod źródłowy 😉! Nie było żadnej wysublimowanej selekcji, to tylko czcionki z których ja korzystam na co dzień z uwagi na ich czytelność ✅.
Dawno temu u Jasona, padł temat rekurencji. Dzisiaj rozbudujemy sobie ten wątek o kontynuację opisując Wam na czym polega rekurencja ogonowa. Popatrzymy sobie na przykład obliczania silni dodając do niej "upgrade" rekurencyjny ;)!
Wczoraj wytłumaczyłem czym jest kompilator (mimo faktu, iż niejedna strona internetowa o nauce IT mogła to opisać już dekady temu), więc dzisiaj porozmawiamy sobie o tym, jak działa interpreter, druga metoda "odpalania" napisanych programów.
Kompilator...to słowo jeszcze nieraz będziecie widzieć i słyszeć drodzy przyszli (albo obecni) programiści. Chcecie znać krótkie i rzetelne wyjaśnienie? No to wchodzić :)!
Hasło z jakim równie często możesz mieć do czynienia podczas pisania kodu, jest rzutowanie typu. Typu danych ma się rozumieć. Co to za sztuczka i jak z tego korzystać z głową, zapraszam po szczegóły do środka!
Operacja modulo jest kolejnym wątkiem programistycznym stanowiącym podstawy absolutne. Poza dodawaniem, odejmowaniem, mnożeniem i dzieleniem, jest także wyznaczanie reszty z dzielenia które wcale nie jest rzadziej wykorzystywane w kodzie. Uwierz mi!
Jak wygląda zmienna w programowaniu, każdy widzi. Jednak mam pewien powód, dla którego muszę rozebrać temat na czynniki pierwsze i zrobić z prostego terminu cały artykuł. Wchodźcie!
No, zabieramy się za następne hasło programistyczne o którym wszyscy wiedzą, tylko jak przychodzi co do czego, to jest problem żeby zdefiniować. Mianowicie, struktura danych. Co to takiego? Zapraszam do środka!
Podyskutowaliśmy sobie już o wielu kwestiach dotyczących kodu źródłowego, natomiast zabrakło mi tutaj na stronie wyjaśnienia kolejnego terminu związanego już nie tyle z programowaniem, co z całą nauką o komputerach. Pseudolosowość, to jest hasło dzisiejszego artykułu!
"if'y" w programowaniu są podstawowym budulcem do konstruowania przebiegu działania aplikacji i oprogramowań. Instrukcja warunkowa to następny temat, o którym powiem wszystkim parę słów. Przekazuję Wam same "mięcho" informacji ;)!
Bierzemy dziś pod lupę następne hasło programistyczne: iteracja. Jest to hasło, które ma dużą popularność jeśli chodzi o język programistów podczas pracy. Poznajcie jego znaczenie i noście dumnie definicję, ilekroć przechodzicie obok kodu źródłowego ;).
Nowy artykuł o programowaniu "tak ogólnie". Opiszę do czego służy i jak funkcjonuje tablica jako taka, z tym że położę grubszy nacisk na teorię, bo od części praktycznej macie kategorie wiedzy o językach programowania (np. Kotlin tu, a C# tu), także darujemy sobie stosy kodów źródłowych ;). Będzie ich tyle, ile potrzeba.
Było o inkrementacji, to teraz druga strona medalu. Odejmowanie w skróconej formie czyli dekrementacja. Wchodź i dowiaduj się więcej, bo to Ci się bardzo przyda podczas pisania!
Przerobimy sobie dzisiaj kolejne pojęcie dotyczące programowania, które będziecie często widzieć na oczy. Jest nim inkrementacja. Zapraszam głodnych wiedzy adeptów do środka po darmowy zastrzyk informacji, bez zastrzyku ;).
A to już na do widzenia, jeśli chodzi o operacje logiczne. Poznacie drugi rodzaj alternatywy choć działającej nie podobnie, lecz ZUPEŁNIE INACZEJ. Istnieje jeszcze alternatywa rozłączna, tak zwana operacja "XOR". A co to znaczy, dowiecie się w środku!
Negacja kolejną częścią mini ciągu o operacjach logicznych. Zapraszam serdecznie po dawkę wiedzy na temat operatora "NOT".
Było o koniunkcji, to teraz poczytacie sobie o alternatywie! Alternatywa w rozumieniu operacji logicznych, rzecz jasna. Właźcie i czytajcie jak to wygląda z programistycznego punktu widzenia. No chyba, że macie alternatywę...na alternatywę ;).
Przejdźmy teraz do otwarcia cyklu artykułów należących do absolutnych podstaw nauki programowania. Koniunkcja jest z jednym z regularnie wykorzystywanych elementów podczas pisania kodu źródłowego, o którym MUSISZ wiedzieć! Po prostu musisz i nie ma odwołania!
Dotarło do mnie, że pominąłem jeden z najbardziej fundamentalnych wątków programowania jakie każda szanująca się strona internetowa dotycząca informatyki powinna mieć. Po prostu, łał! Wciskamy gaz do dechy i tłumaczę na szybkości do czego służy funkcja w programowaniu, a także jaka jest jej definicja, bo co to za programista który pisze, nie wie co pisze i nie potrafi krótko zdefiniować tego, co pisze ;). Zapraszam!
Małe uzupełnienie wiedzy ogólnej z programowania! Zauważyłem po artykułach z algorytmiki sporo odniesień do podstawowych terminów i pojęć, o których nie zdołałem jeszcze napisać czegokolwiek, więc chcę to nadrobić po części. Dzisiejszy temat to obcinanie jako proces pozbawiania części ułamkowej z liczby zmiennoprzecinkowej, a także kiedy się to pojawia.
Przesuwamy się ku coraz trudniejszym tematom i tym razem rozpocznę temat wątków. Wątek w programowaniu jest już zaawansowanym rozdziałem i nawet doczekał się własnego działu naukowego, "programowanie współbieżne". Bez względu na wszystko, trzeba zacząć od samego początku i najpierw wyjaśnić sobie teorię zanim przejdziemy do części praktycznej. Zapraszam serdecznie do wpisu.
Dzisiaj przyjrzymy się uważnie co się dzieje "pod spodem" w chwili tworzenia obiektów i definiowania zmiennych. To już dotyka niskich warstw systemu w kwestii przydzielania pamięci, aczkolwiek każdy programista powinien wiedzieć jak to wygląda w praktyce. Pokażę Wam jak wygląda stos i sterta. Pokażę czym się różnią te struktury danych od siebie oraz na czym polega przechowywanie danych na jednym i drugim.
Dzisiaj rozwiązanie zagadki czemu dziedziczenie wielokrotne jest niedopuszczalne w językach wysokiego poziomu z wyjątkiem C++. Wpierw należy sobie wytłumaczyć co się kryje konkretnego pod tym terminem. Zapraszam wszystkich zaintrygowanych!
Dawno nie było żadnego artykułu na temat samego programowania więc macie ode mnie kolejny wpis dotyczący tym razem prostej rzeczy, którą można wykonać na kilka sposobów zarówno klasycznie, jak i wyjątkowo. Chodzi mi o często spotykany manewr jakim jest zamiana wartości dwóch zmiennych. Zdecydowana większość posługuje się metodą polegającą na użyciu zmiennej tymczasowej (pomocniczej) do tymczasowego przechowania jednej z dwóch liczb tuż przed operacją zamiany. To jak najbardziej logiczne podejście, bo podczas zamiany trzeba gdzieś przechować na chwilę jedną z dwóch wartości. Czy rzeczywiście to jest konieczne?
Na końcówkę tego dnia przygotowałem artykuł, który będzie próbował obalić teorię, że mniejszy zakres danych to zawsze lepszy wybór. Dysponujecie szerokim wachlarzem różnych zakresów typów danych (zależy też jaki język). C i C++ na ten przykład mają "int" jak każdy inny język, ale dysponują również typem "short", "long" czy nawet "long long". Byłbym zapomniał, są też podziały na typ ze znakiem ("signed") i bez znaku ("unsigned"). W niektórych sytuacjach człowiek jest absolutnie pewny, że niektóre wartości NIGDY nie będą musiały potrzebować ujemnych liczb, na przykład liczba użytkowników w bazie danych. Jeden programista to wie, drugi to wie, koledzy tego drugiego też to wiedzą, a mimo wszystko ludzie na upartego trzymają się kurczowo standardowego rodzaju "int". Co to może oznaczać? Czemu mimo tych "pewniaków", że pewne zakresy czy zbyt duże liczby nie będą wcale potrzebne, twórcy kodu wciąż wykorzystują typ danych "int"? Przeczytajcie moje hipotezy, a być może chociaż częściowo postaram się ukoić Waszą ciekawość.
Mam dla Was następną część z cyklu rekurencji. Wiemy już, że rekurencja oznacza odwoływanie się funkcji do samej siebie. A co w przypadku chęci zrobienia w drugą stronę? Powiedzmy, że ktoś grymasi przy rekurencji i chciałby zaaplikować wersję iteracyjną jakiegoś algorytmu poprzez zwykłą pętlę. Da się tak zrobić, ba, nawet na taki manewr wymyślono hasło. Nie połamcie sobie języka: "derekursywacja"!
W ten piękny (przynajmniej w moim rejonie) czwartek witam Was z następnym tematem programistycznym dotyczącym pewnej techniki wielokrotnego wykonywania tych samych instrukcji. Zachowanie identyczne jak w pętli, ale samo w sobie to nie jest pętla. To tak zwana "rekurencja", nie mylić z "referencją" (o niej było tu)! Eleganckie tłumaczenie w teorii plus przykład kodu źródłowego w języku C.
Programowanie obiektowe jest jednym z dostępnych paradygmatów programowania polegających na podzieleniu problemu na obiekty starając się zachować najbardziej zbliżony podział jak w rzeczywistości. Wszystko w informatyce rządzi się własnymi prawami, a pewne 4 zasady programowania obiektowego muszą Wam być znane. Opanujcie to jak najprędzej, gdyż znajomość tych zasad jest często weryfikowana na egzaminach i rozmowach. Najpopularniejszym "przedstawicielem" tego paradygmatu jest oczywiście Java, natomiast istnieje o wiele więcej języków wspierających programowanie obiektowe.
Jak zapowiedziałem, teraz podam szczegóły na temat inkrementacji i dekrementacji. Jest to proces zwiększania czy też zmniejszania wartości liczbowej dokładnie o jeden przy czym nie będę truł na temat samej definicji. Bardziej chcę przykuć uwagę odnośnie dwóch sposobów zapisu. Wchodząc w szczegóły jest to preinkrementacja i postinkrementacja. Niby nic, a istnieje bardzo istotna różnica między nimi.
W kolejnym artykule mam dla wszystkich chętnych parę wskazówek jak pisać dobry kod. "Dobry" czyli czytelny, efektywny i mniej obciążający dla procesora. Zachęcam wszystkich zainteresowanych do czytania!
Mamy 1 kwietnia! Nieuchronnie zbliża się pewna chwila a właściwie dwie, które dotyczą mojej osoby. Pierwsza z nich będzie pojutrze, zatem spodziewajcie się wtedy wyjątkowo szerokiego artykułu. Przechodząc do tematu właściwego, chciałem napisać o pewnej bardzo ciekawej funkcji umożliwiającej wyświetlanie zawartości pliku w programie, a także możliwość zapisywania wprowadzonej treści do nowego pliku oraz skopiowania zawartości do innego pliku. I to wszystko za pomocą prostego kodu! Co prawda, to nie jest optymalne rozwiązanie, natomiast jest dużo prostsze i można je opanować w ciągu kilku godzin. O ile korzystamy z języka C, mamy szansę wykonać tak zwane "przekierowanie strumienia".
Coraz mniej czasu w ciągu dnia, więc postanowiłem wziąć na klatę podobny temat zbliżony do poprzedniego (poprzednio pisałem o przesunięciach bitowych). Mają ze sobą wiele wspólnego (przesunięcia to jeden z typów) więc postanowiłem "postawić" te wątki obok siebie. Przed Wami, następna opowieść o alternatywnych zapisach. W roli głównej, operatory bitowe, ale nie te, które już dobrze znacie.
Następny zalążek historii programowania. Opowiem dzisiaj o tym, jak w latach .80 trzeba było często stosować inny zapis do wykonywania działań arytmetycznych na liczbach całkowitych (i nic nie stoi na przeszkodzie, aby dzisiaj z tego korzystać ;)). Kolejny temat i kolejny termin: "przesunięcie bitowe".
Instrukcja wielokrotnego wyboru. Coś Wam to mówi? To kolejny ze sposobów czytelniejszego zapisu rozgałęzienia instrukcji warunkowej. W odróżnieniu od poprzednio omawianego operatora trójargumentowego, pozwala to obsłużyć wiele wartości w jednej klauzuli. Nie myślcie tylko, że to jest zapis bez wad bo jak w całej informatyce, wszystko ma swoje plusy i minusy. Zachęcam do lektury.
Kolejny lekki temat dla każdego chcącego się tego programowania nauczyć. Poboczny, ale warto opanować zapis który zaraz pokażę, bo potrafi świetnie zredukować treść kodu do jednej linii. Kodu w postaci instrukcji warunkowej. Kodu, który będzie w stanie występować zarówno w wyrażeniu, jak również w miejscu wstawiania parametru do funkcji. Za kolejną wygodą kryje się kolejny zapis i oczywiście kolejny termin: "operator trójargumentowy" (ang. "ternary operator"). Jeżeli to kogoś interesuje, to na pewno nie pożałuje. Nawet na studiach można nie spotkać się z tym zapisem, a jest on prosty i przyjemny.
W tę dużo swobodniejszą sobotę mam kolejne zjawisko programistyczne do omówienia. Dotyczy ono liczbowych typów danych, a dokładniej ich minimalnych i maksymalnych zakresów. Ich osiągnięcie może być czasem nieprzewidywalne i spowodować "zapętlenie", które bardziej kulturalnie wypadałoby nazwać "przekroczenie zakresu liczb całkowitych".
Wśród najczęściej wpisywanych fraz w Google, pojawia się między innymi pytanie "jak nauczyć się programować?". Myślałem o tym czy aby nie za wcześnie dla mnie, żeby rzetelnie odpowiedzieć na to pytanie. Ze względu na fakt, iż parę lat się kształcę w tym kierunku bo to masowy dział nauki, zwróciłem uwagę na parę rzeczy co się przyczyniło do znacznego wzrostu szybkości opanowywania materiału. Nie są to żadne wielkie spostrzeżenia, aczkolwiek mogą każdemu z Was dać do myślenia. Miejcie również na uwadze, że każdy z nas ma inne sposoby nabywania wiedzy i nie wszystkie porady mogą okazać się dla Was skuteczne. Oto one.
Finalizujemy wątek związany z konwersją systemów liczbowych i zabieramy się za system heksadecymalny. Zamienimy wspólnie system dziesiętny na szesnastkowy. W drugą stronę również. Nigdy nie wiadomo kiedy to się może przydać. Jeśli to nie ten system liczbowy Was interesuje, sięgajcie tutaj po tłumaczenie jak obchodzić się z liczbą binarną, a tutaj, ósemkową.
Kłopoty przy systemie oktalnym? Po tym artykule (mam nadzieję) będziecie mieli podstawowy zakres w kierunku konwertowania liczb dziesiętnych na ósemkowe i na odwrót. System dziesiętny na ósemkowy i odwrotnie, oto poradnik jak to wykonywać w obie strony. Jeśli interesujecie się systemem dwójkowym, to klikajcie tutaj lub tutaj, jeśli szesnastkowym.
Teraz dużo istotniejszy temat. Skoro zacząłem już pisać o tych konwersjach to pomyślałem, że dociągnę ten temat już do końca i napiszę o sposobach konwersji dowolnej liczby zamieniając system dziesiętny na dwójkowy (tu znajdziecie zamianę na ósemkowy, a tu na szesnastkowy). Nie traćmy czasu na bzdety i przejdźmy do tematu tego artykułu.
Na dzisiaj przygotowałem jeden z tematów pobocznych, które każdy z Was może opanować wedle własnego uznania. Nie jest to ani często widziane, ani szeroko wykorzystywane. Temat ten dotyczy szesnastkowego systemu liczbowego, a posługując się eleganckim słownikiem mogliście zetknąć się z terminem "heksadecymalny literał zmiennoprzecinkowy" (ang. "hex float literal"). Jest to rzadki okaz, praktycznie już w ogóle niestosowany, aczkolwiek ze względów historycznych chciałem przybliżyć Wam ten wątek. Na końcu artykułu pokażę Wam jak zamienić coś takiego na liczbę w systemie dziesiętnym.
Kolejne pytanie, które pragnę poddać głębszej analizie: "czy każdy może nauczyć się programować?". Krótka odpowiedź brzmi "tak", chociaż doskonale sobie zdaję sprawę, że taka odpowiedź nikomu z Was nie wystarczy. Nieco dłuższa brzmi: "to zależy jak daleko sięgasz z tym nauczaniem".
Raz kolejny zbliżymy się do nieco innego tematu niż czyste programowanie. Na pewno niejednego z Was interesuje modyfikacja jakiegoś swojego ulubionego tytułu (mam na myśli gry na PC). Chcielibyście coś w nim dodać, zmienić, poprawić. Modyfikacja gry komputerowej już od dawna jest odrębnym zainteresowaniem wielu graczy i programistów. Spróbuję Wam rzucić "programistyczne" światło na tę sprawę, wytłumaczyć definicję i dać parę wskazówek co możecie zrobić gdy nie ma żadnego oprogramowania do edytowania zawartości gry, a wszystkie dane są zaszyfrowane.
Oto druga część z trzech na temat pętli. Tak jak obiecałem, teraz pętla "while". Układ będzie taki sam. Najpierw krótkie wyjaśnienie, następnie przykłady zastosowań, a na koniec dwa przykłady. Jak ktoś przegapił pierwszą część, niech klika tutaj i nadrabia zaległości.
Jeśli wyrywacie sobie włosy z głowy nad tym, co to jest pętla "for", to już się głowić nie musicie. W ten sobotni dzień postaram się wrzucić aż trzy artykuły w ciągu jednego dnia na temat każdej z podstawowych pętli, zatem traktujcie ten artykuł jako część 1 z 3. Tu jest część druga, a tu trzecia.
Napotkałem niejednokrotnie na pytanie powtarzane przez wiele osób: "czy programowanie jest trudne?". Cóż, patrząc na swoje przeżycia i kłopoty z tym związane przyznaję, że to JEST trudne zajęcie. Aby przetrwać lata w tym fachu nie wystarczy kucie na blachę. Trzeba mieć wiele wytrwałości i anielskiej cierpliwości. W oparciu o swoje (niewielkie) doświadczenie prezentuję fakty i mity z tym związane.
Mała niespodzianka! Ponieważ znalazło się trochę więcej czasu w dniu dzisiejszym, postanowiłem napisać po raz drugi tego samego dnia. Postaram się przedstawić swój punkt widzenia w odpowiedzi na pytanie: "od jakiego języka zacząć naukę programowania?". Niejeden z Was pewnie miał dylematy który język będzie dla Was najodpowiedniejszy. Zależy też do czego jednak w tym artykule uwzględnię podejście uniwersalne, czyli przedstawię język odpowiedni dla każdego żółtodzioba. Język, który jest prosty. Język, który się przyda teraz, za tydzień, za pięć lat, za dwadzieścia lat. Język, który jeszcze przez długi okres czasu nie wypadnie z obiegu. Język otwierający wrota do tworzenia graficznych interfejsów, obsługi baz danych, rozwiązywania problemów dotyczących sztucznej inteligencji oraz do kilku innych rzeczy. Tym językiem (moim zdaniem) jest Python!!!
Na dzisiaj kolejna dawka nauki programowania. Omówimy wspólnie różnicę pomiędzy słowem kluczowym "break" i "continue". Jakie jest ich zastosowanie w pętli i jaki mają wpływ na jej przebieg? Artykuł przyniesie odpowiedzi na te pytania, a na końcu znajduje się przykładowy kod źródłowy.
Dziś znowu oprę się o język C, a właściwie o C i C++ jednocześnie. Istnieje wiele debat na temat tego, który z tych dwóch języków wybrać. Większość programistów sugeruje się jedynie nazwą myśląc, że jeden jest bardziej rozbudowany od drugiego. Natomiast na tym nie może kończyć się podejmowanie decyzji. Języki nie różnią się od siebie tylko oferowanymi możliwościami. Czy C, czy C++, trzeba przeanalizować dużo więcej szczegółów niż nam się wydaje na pierwszy rzut oka. To nie jest aż tak oczywiste!
Czas napisać coś na temat odchodzący od mojej działalności. Ponieważ dość już siedzę w tym fachu i dopatruję się wielu powtarzających się sytuacji uważam, że mogę w jakimś stopniu odpowiedzieć na pytanie "jakie języki programowania opłaca się znać?" i podzielić się swoimi spostrzeżeniami tym bardziej, że ja sam mam zamiar opanować poniższe języki. Podkreślam, że to jest tylko moje subiektywne zdanie i jak zawsze poparte konkretnymi argumentami. Macie prawo się nie zgadzać. Przedstawiam języki programowania, które w 2019 roku uważam za fundamentalne, zarówno w kwestii znalezienia pracy, jak również rozwijania swoich zdolności w zaciszu domowym. Ponadto do każdego z nich przedstawiam garść zalet i wad.