Tytuł notki zainspirowany jest notką Boniego - "Twit of the Year". A co do meritum:
Jako - było nie było - fachowiec od inżynierii oprogramowania, z za chwilę trzydziestoletnim doświadczeniem, ze zgrozą obserwuję poziom wykonania programów wszędzie dookoła. Tak w zasadzie to tworzenie oprogramowania jest stosunkowo proste. Są do tego dość jasno określone zasady, cała kupa darmowych narzędzi pomocniczych, mnóstwo książek, nieprawdopodobne ilości porad do znalezienia w sieci, ... Co prawda w dowolnej innej branży też są dość jasne zasady, narzędzia, książki, tyle że przy programowaniu jest łatwiej - bardzo dużo można sobie po prostu wypróbować i poćwiczyć w domu, praktycznie za darmo. A na przykład w takim budownictwie to jakoś tak nie bardzo da radę.
Tymczasem w realnym świecie trudno o kawałek programu, który nie jest spieprzony i to najczęściej w sposób który powinien być łatwy do uniknięcia. Jaki-taki poziom mają najczęściej programy z okolic Free Software pisane w Javie, ale też wcale nie wszystkie. Dlaczego tak jest? To jest proste: Oni tam stosują się do ogólnie znanych reguł - używają development patternów, robią module testy, konsekwentnie robią komentarze w Javadocu z których potem powstaje dokumentacja, testy wykonują automatycznie w jakimś serwerze CI w rodzaju Jenkinsa, ... W sumie nic skomplikowanego, tyle że inni tego nie robią, albo robią to źle.
Ja rozumiem że bardzo duża część programów które można zdownloadować w systemowym sklepie jak Google Play czy Windows Store to produkcje półamatorskie i ich autorzy nie mają większego pojęcia o tym, co robią. Ale w produkcjach profesjonalnych, zwłaszcza w branżach które nie zajmują się tylko czystym softem nie jest wiele lepiej. Na przykład u mnie, w automotive.
U nas w fabryce, jestem jedyny który ma rzeczywiście pojęcie o inżynierii oprogramowania. Cała reszta to elektronicy, którzy na studiach mieli pobocznie cośtam o programowaniu. Albo i nawet nie i są samoukami. Niektórzy są nawet nieźli, myśleć logicznie potrafią, tyle że podstaw im brakuje. No i potem wygląda to na przykład tak, że w kawałkach w C++ nie jest nawet dobrze określone który header file jest do C, a który do C++ i jak pojawiają się problemy przy includowaniu, to ktoś łata problem takimi sposobami, że jakbym miał jeszcze dość włosów na głowie, to bym je sobie powyrywał. W innych, zupełnie podstawowych sprawach też nie jest lepiej. A jak jakiś problem trzeba rozwiązać, to niemal każdy szuka podobnego miejsca w innym module i zrzyna rozwiązanie. A ponieważ to rozwiązanie rzadko tylko jest dobre, to złe rozwiązania rozprzestrzeniają się coraz bardziej. Testy modułowe są wymuszane przez klienta - więc robi się je na sam koniec, często już po tym jak program poszedł do na produkcję. Według mnie to zbędna robota, równie dobrze można by wyprodukować oszukany test report, nic by nie zmieniło a roboty mniej. I tak dalej, i tak dalej, ogólnie to cieszcie się że samochody w ogóle są w stanie ruszyć z miejsca.
No ale mimo wszystko programiści z automotive nie zasługują jeszcze na tytuł "Twit Programmers of the Year". Ponieważ samochód podpada pod różne takie tam związane z bezpieczeństwem (znaczy może kogoś zabić), to producenci wymuszają na wykonawcach żeby program nie wieszał się co chwilę, a przynajmniej żeby się potem jakoś znalazł. Na spełnienie tych wymagań idzie niesamowita ilość wysiłku a modus operandi typowego projektu w automotive to eskalacja. Jeszcze nigdy nie słyszałem o projekcie w automotive który by nie wszedł w eskalację. Mi to ręce opadają, bo tego wszystkiego można by uniknąć, gdyby chociaż trochę stosować się do ogólnie znanych zasad.
Ale jest branża w której jest jeszcze gorzej - to consumer electronics. Soft do telewizora jeszcze nigdy nikogo nie zabił, więc nikt nie wymusza w nim zachowania zasad fuctional safety. Ba, jak poklikać trochę w jakiś współczesny telewizor to wychodzi że oni w ogóle nawet podstawowego system testu to raczej jednak nie robią.
Skąd mi się temat wziął? Mój sprzęt audio-video już się mocno historyczny zrobił. Telewizor był jeszcze CRT, od Sony, ale nic bardzo specjalnego. Ciągłe mam video VHS i analogowy zestaw kina domowego z wejściem przez SCART. Najnowszym z urządzeń był dekoder kablowy, też dający sygnał na SCARTa. No i ten dekoder zaczął mieć problemy. Zaczęło się od różnych zakłóceń w obrazie, potem odbierał coraz mniej kanałów, w końcu zostało tylko Russia Today. A potem poszedł z niego dym - sfajczyły się dwa elektrolity. No i po analizie opcji wyszło mi, że najlepiej będzie kupić nowy telewizor, bo tunel kablowy będzie w zestawie, a i nagrywanie na dysk USB przynajmniej częściowo zastąpi video. A w następnej kolejności będzie nowe kino domowe.
Jako warunki brzegowe postawiłem rozmiar 32 cale (wystarczy mi), FullHD (4K to przesada, ale poniżej FullHD w dzisiejszych czasach bez sensu) i żeby był Smart. No i zaraz wybór skurczył mi się do zaledwie kilku modeli. A potem się doczytałem, że są już telewizory z Androidem. Ponieważ moje zdanie o programistach od telewizorów było utrwalone już od dawna, stwierdziłem że wezmę taki - jak nie będą pisać wszystkiego sami tylko wezmą za bazę niezłego Linuxa i jakie-takie API od Googla to okazji do narobienia głupot będą mieli mniej.
Od paru dni mam taki telewizor i jak widzę, prawdziwy Twit Programmer of the Year potrafi spieprzyć nawet taką integrację:
- To nie jest "telewizor na Androidzie" tylko "telewizor z własnym systemem + Androidem". Miejsca sklejenia widać dość wyraźnie. Ale i tak jest trochę lepiej niż bez Androida.
- Do telewizora można podłączyć mysz. Wszystko pięknie, tyle że rolka myszy chodzi w różnych menu, ale nie w web browserze. Po prostu nie chodzi i już, do scrollowania strony trzeba klikać w suwak, nawet ciąganie go nie działa.
- Można sobie utworzyć cztery listy ulubionych kanałów, ale wybrać jakiejś już nie. Znaczy okienko wyboru się pojawia, na liście są utworzone listy, ale listy wszystkich kanałów na niej nie ma. Nie muszę chyba pisać, że niezależnie od tego co wybiorę, po wyjściu z okienka ustawiona jest lista wszystkich kanałów. Zmienić to mogę tylko przy użyciu programu zdalnego sterowania na innym urządzeniu Androidowym. Na telewizorze nie da rady, próbowałem chyba z pół godziny. Proszę sobie darować komentarze że RTFM- w manualu nie ma o tym nawet słowa. Tytuł Twit Programmer of the Year słusznie się należy.
- Własny program do zdalnego sterowania z innego urządzenia Androidowego od producenta telewizora nie łączy się z telewizorem. Inne, od jakichś amatorów, jakoś się łączą (ale też nie wszystkie). Może ma to związek z tym, że w drugim urządzeniu WiFi chodzi na 2,4GHz, a telewizorowe na 5 GHz, ale amatorzy radzą sobie mimo routera po drodze.
- Nagrywać na dysk USB można tylko to, co się widzi. To akurat zrozumiałe - tuner jest tylko jeden. Ale nie da się odtwarzać nagranego programu na komputerze (przez DLNA) oglądając co innego.
- Jak ustawić nagrywanie na powiedzmy za dwa dni, dysk kręci się przez te dwa dni cały czas, nawet przy wyłączonym telewizorze. Naprawdę nie można go obudzić na pięć minut przed nagraniem?
- Już raz mi się coś powiesiło - oglądać TV można było, ale nie chodziło odtwarzanie nagranego programu i nic z internetem. Pomógł dopiero twardy reset z odłączeniem zasilania. Chyba zwisała część Androidowa.
Oczywiście nie twierdzę, że ten model telewizora przebija dno, z pewnością są gorsze. Ale programiści od consumer electronics rozumianej jako cała branża z pewnością zasługują na tytuł Twit Programmers of the Year
Jeszcze autoreklama, jakby czytał to jakiś decydent z branży: Za odpowiednią opłatą zorganizuję wam to bez porównania lepiej. Tylko poważne propozycje.











