Poznaję się z zielonymi robotami, czyli kilka słów o telefonie Asus Zenfone 8

To już jakieś dwa tygodnie, od kiedy w ręce moje trafił telefon z Androidem, chciałbym więc podzielić się z wami moimi spostrzeżeniami.

Pierwszym moim telefonem, dawno, dawno temu, była Nokia E51, potem zaś Nokia E52. Świat się zmienił, a telefony klawiszowe prawie całkiem odeszły do krain zapomnienia, przyznam jednak szczerze, że pewien sentyment pozostał, a i w pewnych sytuacjach po prostu sprawiały się lepiej, zwłaszcza jako, ekhem, telefony.
W roku 2014 moim telefonem został iPhone 4, potem iPhone SE, a od ponad dwóch lat jest to iPhone 8, którego na tym blogu ochrzciłem "być może ostatnim iPhone w mojej karierze". Trochę wody w Wiśle upłynęło, a ja dalej nie wiem, czy następne moje urządzenie będzie z jabłuszkiem, czy zielonym robotem.

Za kulisami

Od pewnego czasu trwa rozwój strony Internetowej pozwalającej na uczestnictwo w Eltenowych konferencjach. Dość często zgłaszano problemy z systemem Android – problemy, których nie mogłem diagnozować z braku urządzenia.
Gdzieś tam w mglistej przyszłości też wciąż błyska nadzieja na wersję mobilną Eltena, ponownie problemem jest brak sprzętu.
Dodając do tego różne inne zapytania, chęć obiektywizmu przy udzielanych informacjach i tak dalej, uznałem, że posiadanie telefonu z Androidem jest czymś po prostu niezbędnym. Mój wybór padł na telefon Asus Zenfone 8, w najuboższej wersji wyposażonej w 8GB pamięci RAM i 128GB dysku. Na pokładzie Android w wersji 11.

Pierwsze wrażenia

To nie tak, że nigdy wcześniej nie widziałem Androida. Podziwiałem ten system u kilku osób, zarówno z TalkBackiem, jak i CSR. Były to jednak przelotne spotkania i testy po kilka minut, za mało, by wyrobić prawdziwe wrażenie. Celowo zacząłem wykorzystywać ten telefon do rozmów, przeglądania Internetu i kilku innych rzeczy, by mieć porównanie.

Jaki czytnik ekranu?

Ja przyznam, pozostałem przy TalkBacku. Wiem, że CSR jest lepszy, bardziej responsywny, zaawansowany. Muszę wam jednak przyznać uczciwie, że nie mogę zaufać tu w temacie prywatności.
Pewnie za kilka tygodni usunę z tego urządzenia wszystkie prywatne informacje i zainstaluję CSR, by przetestować i ocenić, ale potem i tak raczej wrócę do TB.
Zanim zaczną się tu krzyki, jak bardzo autor bloga dyskryminuje Chiny, odpowiem. Mój brak zaufania nie wynika z narodowości, a faktu, że program ten niestety rozwija pojedynczy twórca. Nie jest to duża firma, nie mamy wglądu w kod źródłowy, trudno powiedzieć, jak sprawa wygląda. Używam i bardzo cenię sobie firmę Huawei, uważając nagonkę na nią za cel ściśle polityczny. Tu jednak sprawa wygląda inaczej.
Całkiem możliwe, że ten czytnik jest czysty, bezpieczny… Ja jednak, a mówię tu tylko za siebie, obecnie uznaję ryzyko za zbyt duże.

Ogólny werdykt

Porównując TalkBacka do VoiceOver, muszę zgodzić się z większością głosów, wbudowany screenreader systemu iOS jest po prostu szybszy, lepszy, stabilniejszy. Kilka razy udało mi się zawiesić TB w sposób wymagający restartu urządzenia, na VO jest to bardzo rzadkie. Ten Asus nie posiada także obsługi gestów wielopalczastych, co znacznie ogranicza dostępne skróty. Nie byłby to problem, gdyby nie brak pokrętła w TB. W ogóle brak pokrętła co chwila niestety się ukazuje, w niezbyt przyjemny sposób oczywiście.
Mimo to nie nazwałbym telefonu z TalkBackiem nieużywalnym, to jednak zbyt wiele powiedziane. To, że jest gorzej, nie znaczy, że jest źle. Jest znośnie, da się dzwonić, pisać, rozmawiać, przeglądać Internet i to we w miarę komfortowy sposób.
Pomijając sprawę czytnika ekranu, to jako system jednak dla mnie, użytkownika zaawansowanego, Android bije iOS możliwościami na głowę. Polityka więzienia Apple może i wpływa na większe bezpieczeństwo osób instalujących aplikacje, jakie popadnie, ale dla mnie w porównaniu z Androidową swobodą traci rację bytu.
Podłączałem do telefonu z Androidem pendrive, kopiując tak dane, stawiałem serwer SSH, wykonywałem na nim kompilacje kodu, przerzucałem launchery… Gdybym na Androidzie mógł uruchomić VoiceOvera, wiem, na jaki system bym postawił w swoim następnym telefonie osobistym.

Właśnie, jak to jest z launcherami?

W Androidzie launcher to aplikacja robiąca za pulpit. Domyślny launcher Asusa jest, hmm… Używalny, ale nie najwygodniejszy.
Zainstalowałem za radą Eltenowych forum launcher o nazwie Nova, który zdecydowanie umilił mi korzystanie z telefonu. Warto dodać, że daje on bardzo ciekawą i ważną możliwość ustawiania gestów do szybkiego wywoływania najczęstszych aplikacji, możemy na przykład przypisać do gestu ruchu dwoma palcami w górę uruchomienie aplikacji "Telefon", co zrobiłem i bardzo mi się spodobało.

Nie czuć dyskryminacji

Właśnie, napisałem "dyskryminacji" nie bez powodu. Apple traktuje polskich użytkowników bardzo niskim priorytetem. Oczywiste jest, że pewne funkcje najpierw testuje się w języku angielskim, ale brak polskiego języka w tłumaczeniach, polskiej Siri, polskich newsów i jeszcze paru innych rzeczy, mimo wprowadzenia tych rozwiązań lata temu, naprawdę może wprowadzać w poczucie krzywdy.
Google tak nie czyni. Nie używam Tłumacza na telefonie, nie potrzebuję też głosowego asystenta, ale po prostu miło widzieć, że telefon w moim kraju pozwala na to, co w innych.

Nowe technologie

Zenfone pozwolił mi na zapoznanie się też z kilkoma nowościami, które po prostu przyjdzie nam prędzej czy później przyjąć. Apple nie jest już tak innowacyjny, jak kiedyś, ja też nie mam najnowszego telefonu, ale mogę przyjąć, że to, co tu poznałem, już trafiło albo i wkrótce trafi do świata jabłek, a więc niezależnie od przyszłego urządzenia, będę się z tym spotykał.
Pierwszą, kontrowersyjną nadal w wielu środowiskach zmianą, jest 5G. Tak, widziałem, testowałem, sprawdzałem, szału nie zaobserwowałem, ale nie dziwi mnie to, na razie używamy tylko części dostępnych częstotliwości. Tak osiągnięte na 5G prędkości pobierania to, odpowiednio: 50mbps w Warszawie, 80mbps w Łodzi i 110mbps w Gdyni; testy u operatora Play.
Drugą nowością jest czytnik linii papilarnych w ekranie. Rozwiązanie to pozwala na pewną oszczędność miejsca, ale nie jest tak wygodne, jak stałe umiejscowienie. Oczywiście się da, dość szybko nauczyłem się tam trafiać palcem, ale jednak w wypadku niewidomych jest to raczej zmiana na minus – zmiana, którą Apple też testuje, więc już wkrótce…
Trzecia sprawa to coś, co na Androidzie było stare jak świat, brak przycisku home. Mój iPhone 8 jeszcze go ma, ale telefony Apple od iPhone X już nie, a przecieki twierdzą, że w iPhone SE 3 już go nie zobaczymy. Oczywiście dobrze zastępują go gesty, ale, znów, to gesty oddelegowane do czegoś, do czego potrzebne nie były, a więc zmniejszenie dostępnej puli. Nie jest to wielki problem, ale jest.
Warto też zauważyć, że Android od zawsze miał pewne funkcje, które w systemie iOS są relatywnie nowe: jak biblioteka aplikacji, menedżer plików czy widgety.

Inne różnice

Jest też kilka różnic, które najbardziej rzucają się w oczy.
W Androidzie dużo łatwiej zamyka się programy, po prostu wykonujemy gest cofania, aż aplikacja się z nami pożegna. Na iOS w założeniu aplikacje działają w tle i są zamykane, gdy to potrzebne, po dwukrotnym wciśnięciu klawisza home. W pewnym zakresie to użyteczne, ale sprawia też, że musimy, a raczej powinniśmy (co mi nie wychodzi), pamiętać o ich ręcznym zamykaniu. Tu rozróżniono zminimalizowanie i zamknięcie, podobnie jak w Windowsie, dla mnie subiektywnie spory plus.
Na minus z kolei zapisuję przeniesienie pewnych informacji do centrum powiadomień. Pasek na górze ekranu z godziną, stanem baterii i tak dalej to wybitnie użyteczne rozwiązanie, nie ma go tutaj.
Brakuje mi też czynności pod palcem w górę / w dół. Mamy menu kontekstowe, ale nie jest to aż tak szybkie.

Złącza

Małą wisienką na torcie są złącza.
Pierwsze to port jack, na słuchawki oczywiście. Minęły dwa ponad lata, a mnie wciąż brakuje tego portu w iPhone. Są przejściówki, ale tym trzeba żąglować, chować, wyciągać. Powrót do słuchawek łatwo podłączanych do telefonu to piękne wybawienie!
Drugie to USB-C. Wiecie, ile peryferiów mam już pod to złącze? I nagle okazało się, że ten sam pendrive, mikrofon czy nawet karta kryptograficzna, które podłączam do komputera, mogę podłączyć do telefonu! Coś pięknego!

Na koniec… Rozmiar.

To, co najważniejsze, zostawiłem na koniec. To dlatego, że chciałem bardziej pisać o systemie Android, mniej o telefonie, ale sprawa jest ważna.
Zenfone 8 jest odrobinkę większy od Iphone 8, ale naprawdę nie jest to wielka różnica. Są praktycznie porównywalne, z pewną tolerancją tych samych rozmiarów.
Dla mnie, i pewnie wielu niewidomych, bardzo ważna informacja.

Opcje zaawansowane nigdy nie będą przyjazne

Wiecie, że ten blog ma już 4 lata? Tak się śmiesznie złożyło, że założyłem go 11 listopada 2016, a więc razem z dniem Niepodległości, świętuję co roku taki mały jubileusz. Myślę, że z racji na tę rocznicę, należy coś napisać.

Obok mnie stoi komputer stacjonarny, na którym instaluje się system Windows 10. I przy okazji wspomniałem dawne czasy.

Ja uwielbiałem instalację Windowsa XP. Przyznać tu należy, że nigdy nie wypracowałem idealnej metody jego stawiania bezwzrokowego. Można użyć instalacji nienadzorowanej, ale to masa roboty. Można użyć 16-bitowego SCR, ale wymagany jest syntezator sprzętowy. Ostatecznie najlepszym rozwiązaniem wymyślonym przeze mnie było podłączanie swojego laptopa do portu RS232 komputera docelowego, odpalanie na nim scr, na swoim laptopie zaś Puttego i po prostu pozwalanie NVDA odczytywać komunikaty. Ale, umówmy się, nie było to jakoś wybitnie dobre rozwiązanie.
Mimo to instalacja XP była procesem niezwykle… klimatycznym, zawsze ją tak odczuwałem. Wciskanie klawiszy na klawiaturze w celu akceptowania licencji (F8 zdaje się), wybór dysku literą C, no miało to coś w sobie. Sam proces był wtedy podzielony na wiele etapów, a w trakcie instalacji pojawiały się pokazy i prezentacje innowacyjnego, nowoczesnego systemu Windows XP. Nie do przecenienia jest też muzyczka słyszana podczas pierwszej konfiguracji, choć usłyszenie jej było sporym wyczynem, gdyż prawdopodobieństwo, że Windows XP posiada sterowniki do naszej karty dźwiękowej, wynosiło jakoś z 1 na 100.

W ogóle Windows XP był dla mnie ostatnim systemem, przy którym w kontakcie z komputerem odczuwało się tę informatyczną magię. Potem wyszedł Windows 7, moim zdaniem system bardzo dobry, ale już obnażony z tej atmosfery nowości i tajemniczości, już zbyt próbował być przyjazny dla użytkownika, zbyt wiele robił w tle.

No i teraz mamy Windowsa 10. W trakcie instalacji widzimy okna o treści "Mamy teraz pewną ważną konfigurację do wykonania", musimy się męczyć, by nie zakładać konta Microsoft i w ogóle cały proces wygląda mi jak wielki wstęp do "szpiegowania by Microsoft", miast stawiania systemu operacyjnego.
Zastanawiam się, dlaczego Microsoft zdecydował się na sprawienie, by instalacja wyglądała, jakby przed komputerem siedział szary użytkownik, który w dodatku ma chyba jakieś problemy z głową, a jego wiedza informatyczna wynosiła mniej niż zero. Z doświadczenia wiem, że i tak nigdy przeciętny użytkownik nie odważy się stawiać tego systemu samemu, chociażbym mu i dopłacił.
Informatyka próbuje udawać prostą i przyjazną, ale to, co w 2005 roku było dla większości ludzi czarną magią, czarną magią pozostało. I prawdopodobnie będzie tak już zawsze.
Microsoft i inne firmy, udając przyjazne instalatory i kreatory, zamieniając "Bluescreena" na ekran ze smutną buźką, usuwając lub ukrywając narzędzia diagnostyczne, tylko utrudniają informatykom życie i sprawiają, że czują się oni traktowani jak idioci. A problemów i tak to nie rozwiązało, nie rozwiązuje i nigdy nie rozwiąże.

10 pytań przyszłych programistów

Nie, nie chodzi mi o kolejny z tysięcy poradnik o tym, jak nauczyć się Rubiego w 5 minut (nie da się nauczyć Rubiego w 5 minut) albo jak zostać programistą w tydzień (nie da się zostać programistą w tydzień). Zauważyłem jednak w naszym środowisku, tak Eltenowym jak poza-Eltenowym, pewną ciekawą tendencję, którą sprowadzę do twierdzenia "umiem programować". I fajnie, ale… No właśnie, ale.
Nie wiem, czy to stereotyp niewidomego informatyka, czy też fakt, że wymusza się na nas nieco większą wiedzę o zawiłościach komputerowych w stosunku do przeciętnego użytkownika widzącego, czy też inne czynniki, ale świadomość komputerowa bywa dość spora. Pewna garstka z nas, bo jednak grupa ta nie jest bardzo liczna, zaczyna myśleć o nauce programowania. I w tym momencie dzieje się coś dziwnego.
Mamy więc ludzi, którzy naprawdę zdobyli jakąś wiedzę, ale na tym się skończyło, bo albo mają wspaniałe teorie rewolucji świata, które nikną w zderzeniu z rzeczywistością, albo poświęcają pięć lat na wspaniały projekt, który jakoś nigdy nie doczekuje się światła dziennego, albo wciąż czekają na wenę/inspirację/motywację, te jakoś jednak nie przychodzą. I w rezultacie, gdy myślę o niewidomych programistach, prawdziwych programistach, na myśli mam tylko kilka nazwisk.
Pomyślałem sobie więc, że napiszę serię artykułów (ha ha ha, naprawdę wierzycie, że będę miał wenę na pisanie kolejnych), które poświęcę temu, jak zacząć swoją przygodę z programowaniem. Nie chcę, by był to kolejny tutorial w stylu "najpierw naucz się C", ale garść konkretnych porad wynikłych z mojej obserwacji tematu.

Nie mam jeszcze tyle doświadczenia w branży programowania, ile bym chciał. Z wyjątkiem jednak Grzegorza Złotowicza, chyba na Eltenie styczność z tematem miałem największą. Mam za sobą i duży projekt (tu Elten), i kilka mniejszych, także różne zlecenia płatne i współprace nad kodem. I w oparciu o to nasuwa się mi kilka wniosków.
Od razu uczulam, że wpis może być zbyt techniczny, nie przestraszcie się tego. Zakładam jednak, że jako osoby tematem zainteresowane, wiecie już, co to jest C++, innymi słowy to nie jest wpis dla osób, które nie mają o temacie zielonego pojęcia, tu wymagane jest przynajmniej seledynowe. 🙂
Na początek chciałbym odpowiedzieć na 10 najczęstszych pytań, które albo się gdzieś po forach zadaje, albo w domyśle ma się na myśli, albo które mi na myśl przychodzą. Przy założeniu, że pojawią się jakieś komentarze, a mi pomysł z głowy nie wyparuje, w następnym wpisie chciałbym odpowiedzieć na wasze uwagi i skupić się na dziesięciu najczęściej popełnianych na początku błędach.
Dobra, spróbujmy.

1. Czy programista musi być dobry z matematyki?

To pytanie staje się niemal tak nudne, jak szablonowe "How are you", ale wciąż jest kwestią sporów. Kwestią zupełnie dziwną o tyle, że odpowiedź jest po prostu oczywista. Przykro mi, ale tak.
Wiem, że pojawią się pewnie osoby, które zaczną argumentować, że to bzdura, że one sobie radzą, że… Nie, programista musi dobrze sobie radzić z matmą. I nie chodzi tu nawet o rozwiązywanie układów równań różniczkowych, choć na pewnym poziomie zagadnienia np. teorii sygnałów i taka zdolność się przyda. Chodzi jednak o pewną wyobraźnię.
Nie jest ważne, czy programować będziecie w C, czy w Pythonie, na jakim poziomie złożoności i w jakiej branży, elementy logiki, systemu binarnego, obliczeń i oszacowań po prostu okażą się w waszym wypadku niezbędne. Na pewno traficie czasem na potrzebę oszacowania złożoności danego algorytmu albo podzielenia zadania na wątki. Nie ma rady, komputery są na matematyce zbudowane i od matematyki nie uciekną.
Oczywiście pytaniem innym jest, co znaczy "bycie dobrym z matematyki". Znam osoby, które miały z matury rozszerzonej z matematyki naprawdę wyniki średnie, a rozwiązywały od ręki takie zadania, nad którymi ja musiałbym posiedzieć przynajmniej kilka godzin. Znam też osoby, które uzyskiwały świetne wyniki z testów, ale kiedy stawały przed prawdziwym obliczeniem (nie schematycznym zadaniem ze szkoły), pojawiał się problem.
Ale matematyka jako taka jest w programowaniu niezbędna.

2. Od jakiego języka zacząć?

Od jakiegokolwiek, naprawdę. Najbardziej bawi mnie sytuacja, gdy dana osoba zamiast zabrać się do nauki, spędza pół roku na rozważaniu za i przeciw różnych technik, zaczyna jedno i zaraz przerywa, coś tam napisze w języku A, by przejść na B, C i D.
Jedyne ważne jest to, by był to język mainstreamowy, najlepiej należący do najpopularniejszych. Wg portalu Toward’s Data Science, w roku 2020 najpopularniejsze języki to, w kolejności, JavaScript, Python, Java, Go, TypeScript, C++, Ruby, PHP, C# i C. W tej mainstreamowości chodzi o to, by łatwo było znaleźć poradniki i przykłady danego języka, a nie męczyć się z szukaniem odpowiedzi, jak napisać coś w języku znanym przez trzydziestu ludzi w Polsce.
Jako programiści i tak będziecie musieli w praktyce poznać przynajmniej kilka języków biegle, a znośnie właściwie ze 10-20. Będzie jeszcze czas na wybranie tych ulubionych, tym czasem zastanawianie się, co wolicie na samym początku, początek ten tylko oddala.
Są kłótnie i spory, czy lepiej zaczynać od języków strukturalnych czy obiektowych, poznać najpierw podstawy, czy zrobić od razu coś dużego i do podstaw wrócić. Szkół jest tyle, że i tak nie zadowolicie wszystkich, więc spróbujcie po prostu zadowolić siebie.

3. Ile muszę się uczyć przed napisaniem pierwszego programu?

Jak najmniej, bo to pisząc się uczy. I nie ma na to innego sposobu. Nigdy nie poznacie programowania tak naprawdę, jeśli nie wydacie pierwszego, drugiego, dziesiątego projektu. Jeśli spojrzycie na swój kod z przed trzech lat i nie powiecie sobie "Jaki głupek to pisał?", to znaczy tylko tyle, że niczego się nie nauczyliście.
Fakt, dobrze jest rozplanować pracę, ale nie stworzycie dobrego planu bez doświadczenia. W programowaniu są różne wzorce projektowe, struktury danych, rozwiązania i biblioteki. Ale nie ma żadnego poradnika, który dokładnie wam wyjaśni, jakie rozwiązanie pasuje do jakiego problemu.
Po pierwsze dlatego, że taka książka miałaby z milion stron, a po drugie, że to także od waszego indywidualnego stylu będzie zależało.

4. A ten pierwszy program, to co to ma być?

Coś małego, użytecznego, ale prostego. Często słyszę o programistach (choć akurat widzących), których gubią nadmierne ambicje co do pierwszego projektu.
Jeśli zaczniecie od pisania na przykład nowego edytora dokumentów PDF albo klienta Facebooka, to raczej daleko nie zajdziecie. A przecież są inne, małe zadania, które można sobie uprościć.
I co, że na początek program będzie pisany w konsoli? Ważne, by działał.
Jeśli macie komu, pokażcie kod, bądźcie otwarci na sugestie. A potem napiszcie coś nowego. I nowego. Z biegiem czasu przyjdzie czas i na interfejs graficzny, i większe wyzwania.

5. Z innej bajki, jaki edytor na początek?

A nawet niech będzie to i Notatnik. To nieśmiertelne rozwiązanie, które będzie wam towarzyszyło do szybkiego szkicowania już na zawsze. O nowym edytorze czas pomyśleć wtedy, gdy pojawi się taka potrzeba. Na początek macie się nauczyć programowania, a nie obsługi złożonych narzędzi.
A jeśli wam jednak mimo wszystko od razu zależy na profesjonalnym wyglądzie albo już tego następnego narzędzia szukacie, to ja zdradzę, że pracuję w Visual Studio Code oraz Vimie.

6. Czego jeszcze trzeba się nauczyć, prócz języka programowania?

To dość złożone zagadnienie. Generalnie zanim sięgniecie głębiej do istoty tematu, naprawdę uznajcie, że coś umiecie. Analiza złożonych przypadków bez ogólnego pojęcia w temacie jest jak uczenie się gramatyki języka bez słówek.
Nie odkładajcie tego jednak też zbyt daleko. Pewne wzorce, struktury i pomysły w programowaniu powstawały przez lata nie w celu utrudnienia, ale uproszczenia wam życia. I nauczenie się poprawnej implementacji gotowych rozwiązań nie tylko wam uprości pracę, ale i sprawi, że będzie ona czytelniejsza dla innych.
Z drugiej strony nic na siłę. Często widuję kody początkujących programistów, które są tak na siłę budowane wedle wzorców projektowych, że wyglądają jak jakieś przykłady encyklopedyczne, a nie gotowe aplikacje, a ich czytelność, miast zyskiwać, traci. To po prostu kwestia wprawy, kiedy coś się przyda, a kiedy trzeba machnąć na to ręką.
Jak już wydacie kilka projektów z GUI, na pewno polecam zapoznanie się z tematem najpopularniejszych szablonów aplikacji (MVC, MVVM, MVP), jak również z najważniejszymi wzorcami projektowymi i strukturami danych. Gorąco też polecam książkę pt. "Programowanie współbieżne i rozproszone" autorstwa panów Zbigniewa Weis oraz Tadeusza Gruźlewskiego, która w moim wypadku była bardzo ważnym podręcznikiem dobrych praktyk algorytmicznych.

7. Kiedy używać tych klas, interfejsów?

Dość często zauważam, że osoby uczące się programowania, nie do końca łapią się w tym, kiedy stosować które narzędzia. Dostajemy więc aplikacje napisane np. w C++ zawierające 80 funkcji i ani jednej klasy, z jakimiś dziwnymi zmiennymi albo, najgorsza praktyka z możliwych, tablicami, w których elementy o danym indeksie oznaczają dany zasób, ale schemat tworzenia ich występuje naturalnie tylko w głowie twórcy.
Czasami jest to zachowanie korzystne, ale w zdecydowanej większości przypadków nie. Dlatego warto eksperymentować z nowo poznawanymi elementami programowania obiektowego lub strukturalnego. Wszystko się jakoś samo poukłada, kiedy zauważycie, co pomaga, a co nie.

8. Ile plików ma mieć mój program?

To jest generalnie ciekawe zagadnienie i nie ma na nie dobrej odpowiedzi. Zależy to od ilości plików, pomysłu na organizację kodu i preferencji twórcy. Czasem wygodniej jest mieć pliki giganty, czasem lepiej mieć dużo karłów.
Na pewno jednak należy unikać dwóch skrajnych sytuacji, gdy program ma 10 plików po 10 linijek albo jeden plik zawierający linijek 38520. Generalnie na początku najlepszą praktyką jest dzielenie programu wg zastosowania.
Jeśli piszę więc kalkulator, jeden plik może odpowiadać za interfejs graficzny, drugi za obliczenia, a trzeci za przekazywanie informacji między jednym a drugim. I tak, to jest klasyczny przykład schematu MVC typu 2, mówiłem, że szablony i wzorce są przydatne.

9. Optymalizować, czy nie optymalizować?

Oto jest pytanie!
Współcześnie bardzo się zaciera granica między tym, kiedy kod lepiej optymalizować, a kiedy dbać o jego czytelność. W czasach, kiedy platforma Dotnet używa wirtualnej maszyny do wykonywania kodu, naprawdę sprawa staje się złożona.
Z jednej strony, kiedy mamy za zadanie posortowanie gigantycznej listy, na pewno będziemy zastanawiać się nad najlepszym algorytmem. Zwłaszcza, gdy w grę wchodzi przycinanie się programu.
Z drugiej strony mamy na przykład wybór większej wartości. Załóżmy, że mamy dwie liczby i zastanawiamy się, która z nich jest większa. Pokażę to na przykładzie zmiennych a i b, chcemy w zmiennej x zapisać większą z nich.
Najprościej zrobić to tak:
Jeśli a jest większe od b, zapisz x równe a,
w przeciwnym wypadku zapisz x równe b.
W języku C++:
if(a>b) x=a;
else x=b;
Czy można zrobić to wydajniej? Oczywiście!
Zapiszemy, że x jest równe różnicy a oraz wartości powstałej z iloczynu bitowego różnicy a i b oraz różnicy a i b przesuniętej bitowo o rozmiar w prawo.
x = a – ((a-b) & ((a-b) >> sizeof(x)*8-1));
Gratuluję! Właśnie stworzyliśmy wspaniale wydajny kod! Wydajny w każdym razie dla komputera, bo jak za tydzień będziemy go czytać, spędzimy na pewno dobrych kilka sekund zastanawiając się, jak to ma działać, co robić i obiecując sobie, że od tej pory będziemy programować tylko na trzeźwo.
Dla jasności, są sytuacje, gdy takie sztuczki naprawdę się przydadzą. Jeśli dysponujemy ograniczoną pamięcią lub mocą obliczeniową, bez nich się nie obędziemy. A to nie jest aż tak nieprawdopodobne, wszak mikrokontrolery są wszędzie, a rzadko który przekracza 4kB pamięci RAM i 16MHz.
Ale po pierwsze, wtedy stosuje się makra, a po drugie… Uznajmy, początkujący programiści nie piszą oprogramowania dla mikrokontrolerów.

10. Jak się ćwiczyć w programowaniu?

To chyba najważniejsza sprawa. Programowanie to przede wszystkim gra wyobraźni. Trzeba się nauczyć algorytmicznego myślenia, odruchowego rozwiązywania kłopotów.
Wiele jest żartów o programistach, które jednak doskonale to lustrują. Ja przytoczę dwa.
Pierwszy z nich: Jak zająć programistę? Dać mu kartkę z napisem:
Przeczytaj poniższą linijkę.
Przeczytaj powyższą linijkę.
Drugi natomiast: Żona do męża programisty:
– Kup chleb, a jak będą jajka, kup 10.
Nasz programista wchodzi więc do sklepu i pyta: "Są jajka"?
– Są – odpowiada ekspedientka.
– To poproszę dziesięć chlebów.
Komputer to taka maszyna, która robi tylko i dokładnie to, co jej każemy. A początkujący programiści mają taką skłonność do myślenia po ludzku, nie zaś po komputerowemu. I z tego wynika masa błędów.
Z drugiej strony doświadczeni programiści mają skłonność odwrotną i… też bywa ciekawie.
Na koniec pozostawiam was z zagadką logiczną, którą powinno się zadawać na pierwszych zajęciach z programowania, a jakoś się tego nie robi.
Jasiu dostał pięć jabłek i zjadł dwa. Ile jabłek ma Jasiu?
Zapraszam do odpowiadania w komentarzach.

Ufff, przebrnęliśmy przez to. Wiem, że wpis był nieco chaotyczny, ale mam nadzieję, że dla kogoś będzie jakąś tam podpowiedzią.
Zapraszam do zadawania wszelkich waszych pytań w komentarzach, spróbuję na nie odpowiedzieć, a będą one tylko motywacją do napisania jednak tego następnego wpisu.
Jeśli będę widział zainteresowanie, następnym razem omówię 10 grzechów głównych początkujących programistów na Eltena i Eltenowiczów przykładzie. 🙂

Z pozdrowieniami,
Dawid Pieper
Chociaż raczej powinienem napisać
446177696420506965706572