środa, lipca 31, 2019

Statyczna analiza kodu, czy to ma sens?

Ostatnio się zajmuję statyczną analizą kodu i się nad tym zastanawiam. Czy to ma sens, gdzie jest ten sens i tak dalej.

Z jednej strony nigdy nie lubiłem statycznej analizy kodu.
Nawet jak w tamtym roku robiłem wtyczkę do SonarQube to prezentując ją zacząłem od stwierdzenia, że SQ używa się zwykle po to żeby development poczuł się lepszy, że proszę tak bardzo dbamy o jakość kodu. Że to głównie na pokaz, ale jakoś normalnie nie działa szczególnie dobrze.
Bo niby cala idea opiera się na całkiem rozsądnym założeniu, że jak kod jest "brzydki" i łamie pewne dobre praktyki to istnieje duże prawdopodobieństwo, że sam kod też ma błędy.
Nie działa to w drugą stronę, bo "ładny" kod wcale nie musi być bezbłędny, ale to nie jest aż tak istotne.
Problem w tym, że większość narzędzi jest po prostu bardzo głupia.

Może się np. rzucać, że nasz kod, który od 10 lat był pisany z całą możliwą miłością jaką mu można poświęcić, nie używa lambd. Bo ktoś uznał, że skoro gdzieś używam Runnable to zamiast interfejsu powinniśmy użyć lambdy, bo to poprawni czytelność kodu.
Może, i rzeczywiście tak może powinniśmy pisać teraz kod, ale skoro mamy fragment kodu, który działa od 10 lat i od tego czasu nie był zmieniany to czy użycie Runnable jest tu zbrodnią?

OK, można w takim przypadku dodać historię kodu i próbować wysnuwać wnioski z tego jak kod się w trakcie swojego życia zmieniał i np. nie rzucać się tak bardzo w przypadku czegoś co obecnie jest uznawane za brzydkie jeśli napisano to 10 lat temu i nigdy nie zmieniano.

Ale nadal ktoś musi na to wszystko spojrzeć i jak liczba issues które są uznane za Blockery wynosi ponad 2 tysiące sztuk to powstaje pytanie czy w ogóle warto.

Chociaż ciekawa sprawa, zagregowane dane w postaci "242 tysiące issues" i później miliony plików z błędami nie są zbyt pomocne, ale inspekcje w IntelliJ już zwykle są.

Tak na "chłopski" rozum masę rzeczy da się zautomatyzować.
Sam tu kiedyś wypisywałem code smellsy które wzbudzają moje podejrzenia w trakcie inspekcji kodu. Nie ufam np. protected, albo sytuacji gdy za dużo metod jest public.
Ale szybko się okazuje, że te takie łatwe strzały się kończą i jest o wiele trudniej.
Kiedyś w jednej z firm nasz architekt miał genialny pomysł, żeby użyć Prologa i wnioskowania do znajdowania akcji z menu które trzeba przetestować bo mogły być "zaafektowane" zmianami w kodzie.
Zrobiliśmy świetne narzędzie, które potrafiło na podstawie logów z historii wersji stwierdzić, które linie, a więc i które metody w klasach się zmieniły i znając strukturę kodu wskazać które opcje menu tego używają.
Ale w końcu narzędzie nie działało bo zbyt często pokazywało wszystkie opcje jako zaafektowane.
Problem nie był w toolu, ale w tym jak nasza aplikacja była napisana.

Znów w poprzedniej firmie zbudowałem narzędzia które na podstawie analizy skompilowanego kodu potrafiły odkryć gdzie tworzymy i przetwarzamy jeden z ponad 500 rodzajów komunikatów JMS, a inne na podstawie analizy zależności między projektami potrafiło powiedzieć i napisać plik do zrobienia clone'a z wszystkich niezbędnych repozytoriów.

Próbowałem jakoś zbudować coś podobnego w obecnej firmie i okazuje się, że nie ma to sensu. Tu mamy innego rodzaju problemy (mniejsze, to fakt :-)).
To co teraz próbujemy rozwiązać jest jeszcze innym rodzajem problemu i nie wiem czy analiza statyczna jest dobrym rozwiązaniem czy nie.... na razie jest pierwszym kandydatem ;-)


Podobne postybeta
Moc wykresu.... Czyli jak wieść szczęśliwsze życie ;-)
Jak walczyć z gigantycznym kodem w Java'ie, część 1.5 ;-) - czyli jak je się słonie ;-)
Inercja i koło wielokrotnego wynajdywania, czyli radosne macki piekieł w kodzie [alem pojechał w tytule ;-)]
Klasa statyczna - ki diabeł?;-)
Przesyłanie "obcych" na odległość, albo uniwersalny format danych ;-)

wtorek, lipca 30, 2019

Taki tam rant po Gradle i Dockerze ;-)

Jest coś takiego jak standardy, jest też coś takiego jak od lat stosowane praktyki.

Gdy jeszcze nie było Internetu, a był ARPANET to komputery "widziały" się tylko po adresach IP.
To ludziom przeszkadzało, bo czasem fajnie było wiedzieć, że łączymy się do maszyny o nazwie ALICE zamiast do jakiegoś zbitka 4 liczb oddzielonych kropkami.
Więc ludzie zaczęli tworzyć pliki HOSTS.TXT, w których były zapisane mapowania adresów tekstowych na adresy IP.
W końcu wyewoluowało to z jednej strony w DNS, z drugiej w /etc/hosts, czyli plik w którym administrator lokalnej maszyny może zapisać swoje mapowania.
Przestrzega tego Linux i inne *niksy, przestrzega Windows (z ciut inną lokalizacją), przestrzega macOS.
Ale nie działa to z Dockerem ;-)
Przynajmniej w domyślnej konfiguracji.
Docker ma w głębokim poważaniu to co jest skonfigurowane w /etc/hosts jego hosta, z tego co widziałem olewa też to co ma w swoim.
Dopiero dodanie mu przełącznika -net=host powoduje, że zaczyna być świadom tego pliku.

Kiedyś wymyślono też coś takiego jak Exit code z aplikacji.
Jeśli aplikacja zwraca coś innego niż 0 to jest to error code i informacja dla procesu, który ją wywołuje, że wróciła z błędem.
POSIX to nawet "ustandaryzował" i wymaga by każdy OS który jest zgodny z POSIX stosował się do tego schematu.
Do tego w *niksach wprowadzono, a później przeszło to do innych OSów podział konsoli na konsolę i konsolę błędów. Idea była taka, że na konsolę błędów powinny iść wszystkie informacje, które są lub mogą być istotne w troubleshootingu.
I w pewnym momencie przyszli ludzie piszący Gradle'a. W swym szaleństwie uznali, że kto by tam bazował na jakimś kodzie wyjścia z aplikacji w celu uznania, że aplikacja skończyła się z błędem.
Uznali, że oni wiedzą lepiej i dlatego jeśli przez ich Exec czy jak to się zowie task odpali jakiś zewnętrzny proces i ten proces zapisze coś do konsol błędów to nawet gdy zwróci 0 mówiące, że skończył się z sukcesem to oni uznają, że wiedzą lepiej i zgłoszą, że był fail.
Teraz dodajmy do tego to, że jeśli używa się _JAVA_OPTIONS do nadpisania jakichś ustawień JRE to JRE wypisze na konsolę błędów, że użyje wartości z _JAVA_OPTIONS to mamy to, że taki proces w Java'ie nie będzie się nigdy w Gradle kończył sukcesem ;-)

Jak już o Gradle mowa.
Zwyczajowo robi się tak, że jak Twój kod jest odpalany w jakimś katalogu, to jest to katalog roboczy i wszystkie operacje które się robi powinno się robić względem tego katalogu.
Gradle tak robił, ale już nie robi ;-) Gradle 5.0 wie lepiej i robi tak. Jeśli w tasku wykonuje się kod w Java'ie i ten kod odpali proces, to ten proces odpali się w katalogu roboczym (startowym), ale pliki widziane przez ten kod będą w katalogu z którego startuje któraś tam "warstwa" wrappera Gradle'a ;-)


Podobne postybeta
Rant po toolach w stylu Mavane, Gradle, Bowera i całej tej hałastry
Gdzie popełniliśmy błąd?
Tak o niczym ;-)
Status 302 i import arkuszy z Google Docs
A ja wybrałem Xbox One ;-)

poniedziałek, lipca 29, 2019

5G do mnie nie trafia

Głośno się robi co jakiś czas w koło 5G.
Tego, że Huawei jest tu potęga, że zachodnie firmy przegapiły 5G.
Ale ja się zastanawiam co właściwie 5G wnosi.
Od strony technicznej są tam genialne rzeczy, jak formowanie wiązek w komórce tak by transmisja do urządzenia odbiorczego była nie dookolna, czy nawet kierunkowa, ale w wiązce, co powinno pozwolić na ogólnie mniejszą moc i wyższe prędkości, ma być większe spektrum czyli powinno się dać przyspieszyć transmisje jednocześnie zwiększając ilość urządzeń które jednocześnie mogą transmitować.
To wszystko fajne, ale nie jestem przekonany czy to jest nam właściwie potrzebne.
Urządzenia IoT mogłyby dzięki 5G operować na wyższych transferach, ale po co? Większość tych urządzeń, jeśli nie wszystkie ma raczej tryb pracy fire and forget, a nie taki gdzie jest konieczny ciągły przekaz tego co się dzieje w urządzeniu.
Jakieś elektroniczne niańki zyskają, bo będą mogły przesyłać wyższe rozdzielczości do jakiegoś urządzanie rejestrującego...
Ale nadal trzeba to będzie wypchnąć na zewnątrz albo gdzieś przechować, a 5G tu problemu nie rozwiązuje.
Mam teraz w domu downlink na poziomie 512 Mbps i tak zwykle nie leci więcej niż 100 Mbps bo serwery po drugiej stronie nie mają takiej przepustowości.
Fajnie będzie mieć transfer w 5G na poziomie 20Gbps, ale po co?
W moim odczuciu obecne transfery jakie mamy są blisko tego czego potrzebujemy.
Doszły do tego samego poziomu co komputery. Zwiększenie 2x czy nawet 20x nie zmienia znacząco warunków używania.
Czekanie na stronę 10ms zamiast 100ms jest niezauważalne.
Stąd, na dziś wydaje mi się, że 5G to takie szpanowanie, a nie realna potrzeba.
Większych zmian w świecie spodziewałbym się po tym co może się stać gdy ruszy StarLink od SpaceX.
Internet na całej powierzchni Ziemi to będzie coś... 5G na razie do mnie nie trafia.

posted from Bloggeroid




Podobne postybeta
Telefon lepszym aparatem niż prawdziwy aparat ;-)
Biurko
Social networks, mapy i papierowy organizer
Pogoda emigracyjna ;-)
Nexus R - czyli mój telefon marzeń ;-)

niedziela, lipca 28, 2019

Alert RCB - minimalizacja false negative prowadzi do zwiększenia false positive ;-)

Drugi raz w ciągu 24 godzin dostałem SMSa z Alertem RCB.
Wczorajszy się nie sprawdził, patrząc na pogodę od Google jest znaczna szansa, że dzisiejszy się też nie sprawdzi.

Mamy tu klasyczny konflikt między użytecznością, a przysłowiowym kryciem swojego tyłka.
Albo jak kto woli, problem wysokiego stopnia false postive ;-)

Mamy tak:

Niebezpieczne anomalie
pogodowe
Normalna pogoda
Alert RCBtrue positive
Ludzie zostali poinformowani, mieli czas na przygotowanie się, jak ktoś się dał złapać to jego problem
false positive
Odbiorcy wkurzeni
Ludzie zaczynają ignorować
alerty RCB
Brak alertu RCBfalse negative
Wszyscy wśiekli
Pojawiają się pomysły by
kogoś postawić przed sądem
za "niedopełnienie obowiązków"
true negative
Wszyscy mają w nosie

I jak patrzeć racjonalnie to jeśli wiemy, że może przyjść nawałnica czy burza i mogą coś drogiego uszkodzić, albo komuś krzywdę zrobić to trzeba ludzi o tym poinformować.

Pytanie co znaczy "wiemy". To nie jest binarna sprawa, bo zamiast wiedzieć "na 100% będzie" albo "na 100% nie będzie" wiemy tylko, że z prawdopodobieństwem X wystąpią opady o wielkości Y.
Nawet nie tak, wiemy tylko, że model przewiduje opady od wartości A do wartości B, większość symulacji wskazuje na wartość C, ale kilka wskazuje na wartość D, która jest wyższa niż jakiś arbitralnie ustawiony threshold to krzyczymy, że coś się może stać.

Coś jakby zbudować klasyfikator mówiący czy grozi nam w ciągu następnych 24 godzin uderzenie asteroidy, który może zabić ludzi i zawsze odpowiadać tak.
W końcu duża asteroida spada na Ziemię średnio raz na 20 milionów lat, a mała raz na pół miliona lat, czyli patrząc na dane historyczne duża każdego dnia ma szansę spaść jak 1 do trochę ponad 7 miliardów, a mniejsza jak 1 do jakichś 180 milionów.
Jeśli duża może zabić całą ludzkość, to mamy średnio szansę śmiercie tak jakoś 1 osoby, jeśli mała może zniszczyć miasto z okolicami gdzie mieszka powiedzmy 30 mln ludzi, to mamy średnio 6 osób. Czyli nasz klasyfikator ostrzega przed śmiercią jakichś 7 osób.
Dzień w dzień.

W przypadku alertów RCB jest tak, że jak np. jest sobie kolonia, czy obóz harcerski i przyjdzie nawałnica i coś się komuś stanie, a alertu nie było to prokurator zacznie ścigać meteorologów z RCB czy okolic, szczególnie jeśli się okaże, że jakaś symulacja mówiła, że coś się może zdarzyć.
Jak alert pójdzie, to w razie coś się uczestnikom kolonii/obozu stanie to problem opiekunów, nie RCB.

Jak alert pójdzie, a nic się nie stanie, to tylko się ludzie trochę wkurzą.

Czyli z punktu widzenia "gracza" jakim jest RCB, by uniknąć problemów prawnych należy ostrzegać o wszystkim co może źle się skończyć. Nieważne jakie jest tego prawdopodobieństwo.

To minimalizuje false negative, czyli minimalizuje szansę na zarzuty prokuratorskie za "niedopełnienie obowiązków".

Maksymalizuje też false positive (nie wprost, ale zwykle jak się dąży do zminimalizowania false negative, to zwiększa się liczbę false positive), a co za tym idzie zmniejsza się zaufanie do klasyfikatora.

Czyli chociaż pracownicy RCB są kryci i nie grożą im zarzuty prokuratorskie, to sam alert RCB staje się coraz mniej wiarygodny i coraz więcej ludzi go ignoruje.
A to siłą rzeczy prowadzi do tego, że ktoś może zginąć, bo zignoruje alert RCB.


Podobne postybeta
Ofiara algorytmu
Paranoja i Strach
Magia CallBacka w JavaScript :-) - czyli jak przekazać dodatkowy parametr
Czemu uważam, że 500+ jest złe
Wyliczanie właściwości i funkcji obiektów w JavaScript

sobota, lipca 27, 2019

Kiedy Twój kod to legacy kod?

Jest stosunkowo prosty test na to czy Twój kod jest legacy.

Sprawdź jak szybko jesteś w stanie:
a) przetestować zmianę,
b) zrobić prototyp, w którym Twój kod służy jako komponent,
c) zrobić prototyp, w którym Twój kod wyrzuca odpowiedź w innym formacie,
d) zrobić prototyp, w którym Twój kod dostaje dane w innym formacie,
e) zrobić prototyp, w którym jeden (dowolny) aspekt Twojej logiki "biznesowej" ulega zmianie tak, że chcesz móc inicjalizować Twój kod tak by ten kawałek był tam dostarczany z zewnątrz,
f) zrobić prototyp, w którym jeden (dowolny) aspekt Twojej logiki "biznesowej" ulega zmianie tak, że możesz wyrzucić go na zewnątrz i podpiąć po sieci.

Im wcześniej na tej liście okazuje się, że tego się nie da zrobić bez głębokiego refaktoringu i zajmie to więcej niż powiedzmy 1/10 czasu zużytego na napisanie kodu to masz legacy code.

Dodatkowe sygnały to klasy ze słowami Old, Legacy i podobnymi w nazwie, które opisują "stary" sposób robienia czegoś.


Podobne postybeta
Delete Driven Development ;-)
AppInventor - tego się da używać :-)
Za co nie lubię machine learningu.... i jak się przed nim bronić ;-)
Jak zamachuję się na wolność wiary....
Czemu strony only for IE są złe.

Coś chyba robimy nie tak w programowaniu ;-)

SpaceX właśnie wykonał pierwszy 20 metrowy skok swoim skoczkiem dla Starshipa.
Elon odgraża się, że w ciągu tygodnia, czy dwóch zrobią 200 metrów.

To nie jest takie proste, trzeba policzyć wszystko, zrobić symulacje, przebudować sprzęt, wcześniej go jeszcze przeprojektować, do tego pewnie coś zmienić w sofcie i sprzęcie na podstawie tego 20 metrowego skoku.
I zrobią to w tydzień, albo dwa.

A w IT, połączenie 2 prostych narzędzi może wziąć więcej czasu, bo każdy test może trwać godzinę, albo i dwie....

Mój rekord jakiś czas temu to było jakieś góra 20 minut pracy dziennie, resztę czasu czekałem na kompilację....

Coś chyba robimy nie tak ;-)


Podobne postybeta
Kiedy polecimy na Marsa?
Dobrze wykorzystany programista
Rząd wykonał swój plan aż w 17% ;-)
Żonglowanie to kolejna sztuczka w zasobniku programisty ;-)
Jak nauczyć się żonglować? ;-)

czwartek, lipca 25, 2019

Fotografowanie

Dużo fotografuję, szczególnie na imprezach w stylu koncertów czy fajerwerkach.
Tylko nie wiem po co ;-)

Wczoraj w okolicach koncertu Rammsteina zrobiłem jakieś 500-600 zdjęć, które zajęły 1.7GB.
Żadnego nigdy jakoś szczególnie nie obejrzę ;-)


Chociaż mam Pixela 3 XL z najlepszym aparatem w telefonie to ciemne zdjęcia nie oddają tego co widziałem będąc na koncercie.
A robiąc zdjęcia ryzykuje się, że coś się z tego co się dzieje na scenie nam ucieknie.

Chociaż tutaj już kilka lat temu nauczyłem się, żeby robiąc zdjęcie NIE PATRZEĆ na ekran, jeśli robię zdjęcia w trakcie jakiejś imprezy.
Bo wtedy widzę nie imprezę, a to co widać na ekranie telefonu i pomiędzy mną, a tym co odbiera wchodzi dodatkowa przerwa.

Jeden plus ze zdjęć, jest jakieś które pamiętam, wpisuję jego opis w Google Photos i dostaję zdjęcie ;-)


Podobne postybeta
Rammstein :-)
No to posprzątane, pójdę siedzieć, za obrazę uczuć religijnych....
Matrix to niezawodny sposób na sen ;-)
Jak rozwiązać krzyżówkę? ;-)
Spik mnie wkurzył

Rammstein :-)

Byłem wczoraj w Chorzowie na koncercie Rammstein :-)

Prawie ogłuchłem, ale słuchawki nawet takie "na wtyk" w uszach powodują, że jednak trochę mniej się dostaje niż te 80-90 dB ;-) [mam nadzieję ;-)]

Ludzie na Stadionie Śląskim od jakichś 10 lat (pewnie byli młodsi też) do ponad 60 ;-)

W samym Chorzowie było widać wielu, którzy szli na koncert. To dla mnie trochę dziwne, bo w Krakowie tego zwykle nie widać ;-)

A ja czas przed koncertem wykorzystałem do tego by pochodzić po Chorzowie (~14 km przeszedłem ;-)) i zobaczyć "stare śmieci", czyli miejsce gdzie mieszkałem, gdzie chodziłem do szkoły i inne podobne :-)

Trudno mi powiedzieć czy ten koncert był lepszy czy gorszy od koncertu Rammstein na którym byłem 3 lata temu.
Był inny, inną miał oprawę, nawet inną dynamikę.

Rammstein postanowił też wkurzyć skrajną prawicę ;-) i gdy "płynęli" na pontonach bisować to wymachiwali nie tylko Polską flagą, ale i tęczowymi ;-)


Podobne postybeta
Fotografowanie
"Wstydliwy" sekret
Zły samochód i PKP, czyli koncert narzekania;-)
Bored now.....
Jeden kawałek za mną ostatnio łazi ;-)

środa, lipca 24, 2019

Ksiązki - nieksiążki ;-)

OK, czas przyznać, chociaż mogłem już to robić tutaj kilkukrotnie. Lubię książki.
Ale tak naprawdę.

Całkiem naturalne jest u mnie by mieć książkę po angielsku w wersji elektronicznej na Kindle'a, później papier po angielsku i w końcu papier po polsku (bo w takiej kolejności wychodzą) ;-)

Kocham czytać i mieć książki. Nic nie wygląda tak fajnie jak biblioteczka pełna książek.

Jednak, mimo całej tej miłości do papierowych książek coraz rzadziej czytam papier.
Książka z Kindle czy ekranu telefonu w tramwaju jest po prostu łatwiejsza. Nie muszę jej wyjmować, po prostu wyjmuję telefon i czytam.

Od momentu gdy mam wodoodpornego Kindle nawet czytanie w wannie (jak się zdarza) oznacza książkę elektroniczną.

Chociaż są wyjątki, książki jak Cracking the Coding Interview, Introduction to Algorithms i podobne wolę w wersji papierowej, jakoś łatwiej się je wtedy czyta i używa.


Podobne postybeta
Słuchawki bezprzewodowe dobre :-)
Book vs eBook
Jak poprawić użyteczność tabletu ;-)
Przeżycie artystyczne ;-)
Rant śmietnikowy ;-)

wtorek, lipca 23, 2019

Plastikowa supermoc

Dotarło do mnie kiedyś, że posiadanie karty kredytowej to taka trochę supermoc.
Tak trochę zdejmuje z człowieka część trosk.
Gdy mieszkając przez pół roku w Stanach odwiedzałem Waszyngton to wylądowałem na lotnisku w Boltimore.
Szukałem jak szalony jakiegoś transportu, ale autobus nie przyjechał tam gdzie miał być, ja mimo kilku prób biletu na pociąg nie umiałem kupić w automacie...
W końcu gdy miotałem się po lotnisku już jakieś 30-60 minut stwierdziłem, że w końcu mam supermoc.... Kartę podpiętą pod Ubera.
Byłem zmęczony, chciałem już do hotelu i okazało się, że supermoc działa. Jazda do Aleksandrii kosztowała mnie 70 czy 80 USD, 2-3 razy więcej niż zamierzałem wydać, ale zamiast miotać się dalej mogłem skorzystać z supermocy. Przy okazji poznałem fajnego kierowcę Ubera.
Ale to było użycie tej supermocy, innym razem to działa po prostu jako taka lina asekuracyjna. Nie muszę z supermocy korzystać, ale świadomość że w razie czego istnieje jest naprawdę pomocna i taka nawet wyzwalająca.

Chociaż ta moc nie działa dla wszystkich, nie chodzi nawet o to, że trzeba mieć pieniądze czy kartę, bardziej o to jaki się ma do tego stosunek.
Mnie szkoda wydawać na fancy jedzenie, czy modne ciuchy dla metki, nie wydaje na samochód i imprezy. Ważne jest za to dla mnie by było wygodnie. Tu karta kredytowa robi za supermoc, bo wiem że w razie czego, prawie zawsze jest opcja awaryjna. Może droga, ale w razie jej będę potrzebował mogę z niej skorzystać. I już sam fakt tej świadomości sprawia, że część stresów mi znika.
Coś na tej zasadzie, w najgorszym przypadku wydam może i pół pensji żeby rozwiązać ten problem jeśli się pokaże, ale jego rozwiązanie jest dzięki temu w moim zasięgu. A jak jest to może wcale nie trzeba używać supermocy ;-)

posted from Bloggeroid




Podobne postybeta
Potrzebny mi radar....
Raport z emigracji ;-)
Dwa małe błędy - czyli czemu świat nie jest do końca taki jak powinien być ;-)
Człowiek to dziwne zwierze....
Raport z emigracji

niedziela, lipca 21, 2019

Dziś programista ma być teoretycznym algorytmistą, a praktycznym kleistą ;-)

Taki paradoks na dziś.
Od programisty w dzisiejszych czasach wymaga się by jednocześnie znał lub znała algorytmy i struktury danych, a z drugiej by ich nie używał czy nie używała i zamiast tego by odwoływali się do czegoś co już zostało napisane ;-)
Z jednej strony w trakcie rekrutacji można zostać poproszonym na jednym interview by napisać kod dla cache LRU, a na innym w tym samym dniu można musieć odwołać się do użycia memchached który wspiera LRU ;-) (chociaż teraz bardziej Redisa który wspiera jeszcze inne algo).
Wymagamy wiedzy ja działa garbage collector, pytamy o major i minor collections, ale oczekujemy projektowania mikroserwisów które będą używały GC zero...
Z jednej strony nam brakuje programistów i programistek, z drugiej podnosimy poziom interview tak, że cała masa jak już znajdzie pracę to w ogóle nawet nie myśli o zmianie...
Przez co mamy grupę która tak naprawdę ciągle jest w rekrutacji i chodzi na rozmowy nawet dla sportu....
Dziwne to ;-)

posted from Bloggeroid




Podobne postybeta
Samochód jako zmniejszacz temperatury.... GC i jak to możliwe, że Young Generation może być zbyt duże, strzeż się finalize() i muzyczka :-) Czyli potok świadomości....
Odrobina miłości i serwery działają ;-)
Go, a łatwość czytania kodu
Błędy jakie ludzie robią na rozmowach kwalifikacyjnych
Nie jestem pewien czy zadania koderskie/algorytmiczne są dobrym elementem rekrutacji

sobota, lipca 20, 2019

Growing mindset vs fixed mindset, a wrodzone granice

Gdy czytam różne książki, to często przywoływane są badania Carolin Dweck i terminy growing i fixed mindset.
Jak ktoś nie zna terminów, to w skrócie fixed mindset to przekonanie, że właściwie rodzimy się z jakimś potencjałem i go nigdy nie przeskoczymy, nawet gdybyśmy ciężko pracowali nad tym, growing mindset mówi, że to nieprawda, że jeśli będziemy ciężko pracować to zawsze "urośniemy".
Do tego Dweck twierdziła (teraz już nie twierdzi tak bardzo), że jak się mówi dzieciom, że są smart czy sprytne/inteligentne to robi się im krzywdę bo ustawia im się fixed mindset, ale jak się je chwali za pracę to daje się im podstawy do growing mindset.

I ogólnie podoba mi się idea growing mindset.

Ale jak żyję już trochę na tej planecie, to przekonuję się, że są ludzie którzy są tak błyskotliwi i tak szybko łapią, że przez samo przebywanie przy nich człowiek czuje się lepszy i są ludzie tak tępi, że po kontakcie z nimi odechciewa się wszystkiego i z nadzieją patrzy się w niebo czy jakaś asteroida tu nie leci.
I to mi się kłóci z tym growing vs fixed mindset.

Wiem, że jestem inteligentny, wiem, że mam dobrą pamięć, ale mimo mówienia po angielsku od ponad 20 lat czy więcej nadal mam akcent i tego nie przeskoczę.
Nauczyłem się w miarę szybko żonglować, ale nawet jak włożę w to 10 tysięcy godzin to nie dojdę do poziomu ludzi z Cirque do Soleil.
Studiowałem fizykę, ale chromodynamika mnie przerosła.
Z drugiej strony wiem, że bez zbytniego problemu umiem zrozumieć złożone systemy w których umiem zejść do poziomu wzajemnej interakcji na najniższym poziomie.

Przypuszczam, że po kilkuset godzinach treningu w żonglowaniu czy chromodynamice mógłbym dojść do poziomu, z którym niektórzy ludzie się rodzą.

Złamię prawie każde zadanie algorytmiczne, tylko że mnie to może zająć parę godzin, albo i tydzień, a są ludzie, którzy zobaczą rozwiązanie w ciągu kilkudziesięciu sekund.

Ja potrafię patrząc na schemat elektryczny "widzieć" jak płynie w nim prąd i ja się gromadzi ładunek, są tacy, którzy patrzą na kod i widzą jak działa. Ja muszę dla tej drugiej rzeczy mocno się pilnować.

Gdy patrzę na kandydatów, z którymi prowadzę rozmowy, są tacy którzy momentalnie wszystko łapią i są tacy, którzy nie są w stanie zrozumieć najprostszych spraw.

OK, z tymi kandydatami wiem, że ważny jest stres, w końcu jak człowiek w danym momencie potrafi trzymać w głowie tylko 4 rzeczy, to jak jest przestraszony i w jednej jednostce pamięci trzyma "nie płakać", a w drugiej "nie uciekać" to zostają takiemu komuś tylko 2 "rejestry" na których może operować.

Pewnie to wyżej wszystko znaczy, że ja mam fixed mindset ;-)

W mojej ocenia to jest tak, że rodzimy się, czy bardziej jak rośniemy to rośniemy do jakiegoś potencjału i przy growing mindset'cie możemy bliżej dotrzeć do granic tego potencjału, jak mamy szczęście i mamy mistrza to może taka osoba pomóc nam nawet wejść wyżej przez nauczenie nas sztuczek i pokazując inne sposoby patrzenia na problem, ale nadal jest gdzieś jakaś granica do której można dojść stosując metodę "nie spieprz tego"*, dalej nawet bardzo ciężka praca daje tylko mały przyrost.


* - czyli nie zmarnuj swojego potencjału


Podobne postybeta
12 lat ;-)
Zła lojalność ;-)
Błysnęło, huknęło i zepsuło telewizje :-(
Czy Brillo czeka los tagów NFC?
A takie tam słowo na niedzielę ;-)

piątek, lipca 19, 2019

Instrukcje obsługi do ludzi

Twierdzę, że powinni dawać instrukcję obsługi do ludzi.

Szczerze, chciałbym mieć nawet taką dla samego siebie ;-)

Coś w stylu:
Przemek się nie odzywa -> najpewniej czeka na inicjację rozmowy bo nie wie czy może się odezwać

Albo:
Przemek ogląda batoniki -> najpewniej jest głodny -> nakarmić

To by mogło działać tak, że każdemu z nas robiono by test co kilka lat i dostawalibyśmy instrukcję do danego typu.
Gorzej jak ktoś by nie pasował do typowej grupy... wtedy albo tak jak w Divergent trzeba by było takiego kogoś odstrzelić ;-) [raczej zły pomysł], albo zesztukować instrukcję obsługi z kilku innych ;-)

W Dolnie Krzemowej jest teraz moda na to, żeby managerowie/team leadzi pisali instrukcję obsługi siebie dla teamów.
Dzięki temu nowi pracownicy wiedzieliby czego się od nich oczekuje i jak osiągnąć to co chcą.

Taka osobista instrukcja mogłaby mieć kilka "kręgów".
Na najbardziej zewnętrznym byłaby instrukcja dla interfejsu publicznego ;-)
Na drugim od zewnątrz dla znajomych, później przyjaciół i tak dalej, ta na ringu 0 jak w CPU byłaby dla samego zainteresowanego ;-)

A, co pomarzyć można ;-)


Podobne postybeta
Okrutniki ;-)
"Zostaw, zostaw. Tamtego świata się nie da uratować." - czyli syndrom Maksa
Kody źródłowe JPC - emulatora x86 w Java'ie
Postęp
Google Friend Connect - pierwszy "test" ;-)

Wheel emotion hacking ;-) [pomysł ;-)]

Istnieje coś takiego jak Wheel of Emotions, stworzone przez Roberta Plutchika.
Teoria zakłada, że istnieją 4 diady emocji i że jednocześnie z danej diady możemy odczuwać tylko jedną emocję (przynajmniej w kierunku jednej rzeczy, zjawiska czy osoby).
Do tego, że poszczególne emocje w połączeniu (z 2 różnych diad) tworzą nowe emocje.

Nie wiem czy Plutchik to badał, ale wydaje mi się, że między "sąsiednimi" emocjami można spróbować się świadomie przesuwać.
Skoro znudzenie wraz z irytacją tworzą pogardę, to jeśli ze znudzenia chcemy przejść do radości to można próbować w sobie wzbudzić pogardę dla źródła nudy, z czego może się zrobić irytacja lub gniew, które w połączeniu z oczekiwaniem czy zainteresowaniem mogą stać się agresją, która może stać się już samym oczekiwaniem czy zainteresowaniem, a stąd już krok do optymizmu (czyli połączenia oczekiwania/zainteresowania z radością).

Zastanawiam się czy dałoby się zrobić apkę na komórkę, która mogłaby próbować pomagać w hackowaniu emocji używając właśnie koło emocji ;-)

Wyobrażam sobie to tak, że wybieramy, że jest nam np. smutno bo*, i chcemy czuć radość.
I teraz apka mogłaby zacząć zadawać pytania, których celem byłoby wywołanie kolejnych emocji w drodze do celu.

Idea już jest, ale ciągle mam wątpliwości czy takie coś udałoby się zbudować ;-)



* - to jest właśnie trudność, bo my możemy wiedzieć co jest źródłem, ale jak to przerobić na coś bardziej komputerowego żeby móc np. zadawać pytania by prowadzić do celu?


Podobne postybeta
Klauzula samoluba?
Dieta pączkowa.... to zły pomysł ;-)
Szlak mnie trafia jak emocje sprzedają się lepiej od rozumu.
Web 2.0, czyżby opowieść o tym jak oddaliśmy Internet idiotom?
Kino, a w nim Harry Potter i Książę Półkrwi ;-)

środa, lipca 17, 2019

Chcę do Ameryki ;-)

No nie jest dobrze ;-)
Powoli zbliżam się do najdłuższego czasu w mojej obecnej firmie bez wyjazdu do USA...
To już 208 dni....
Jeśli dobrze liczę to 15 sierpnia 2019 będzie dzień w którym obecna moja przerwa w bytności w USA zrówna się z najdłuższą....
A po 16 sierpnia to już będzie najdłuższa przerwa....

Uważam, że to co najmniej niepokojące.
Do tej pory ponad 18% czasu pracy w firmie spędziłem w USA, a teraz każdego dnia tych procentów ubywa!

Szczerze rozsmakowałem w USA ;-)
Podoba mi się tam. Nie jest idealnie, ale nigdzie nie jest.
Kalifornijska pogoda jest genialna.
Niebo bez chmur jest genialne.

Tak, to, że trzeba mieć samochód genialne nie jest, tłok w SF też nie jest genialny.
Ale zaczyna mi tego brakować ;-)


Podobne postybeta
Fotografowanie
[Wikipedia fun facts] Coraz więcej stacji kosmicznych
Gdzie by się tu przenieść...
AST w akcji - zamieniamy źrodło w Java'ie w "rysunek" ;-)
Zaburzenie "pola przyczynowości" :-)

wtorek, lipca 16, 2019

Zaćmienie Księżyca :-)

Byłem przed chwilą oglądać zaćmienie Księżyca.
Wziąłem lornetkę, choć obawiałem się, że nie będzie to zbyt spektakularny widok.
W końcu nie będzie terminatora (który wygląda genialnie, jak dostrzeże się szczyty "gór" które są oświetlone, a ich doły są ciemne)... ale jednak wygląda ciekawie taki księżyc.
Widać, że tam jest ;-)

Tak się zastanawiałem i pierwsze zaćmienie Księżyca oglądałem chyba mając jakieś 7-8 lat, zimno było.
Drugie na zimowisku i zamiast na zebraniu, na które miałem iść (nie wiem, czy byłem "grupowym" czy coś w ten deseń) siedziałem w oknie i oglądałem :-)
Z takich pamiętnych pamiętam jeszcze jedno ze stycznia albo lutego tamtego roku, jak siedziałem w Stanach, ale było mało widowiskowe.

Fajnie się składa, że jest w 50 rocznicę startu Apollo 11 :-)

Chociaż nie do końca wierzę w to, że ludzie wrócą na Księżyc już w 2024 roku, niby 5 lat to masa czasu, ale nie wiem... chociaż mam nadzieję :-)


Podobne postybeta
Nie ma Księżyca :-(
To jednak było zaćmienie ;-)
Jowisz, mglawica i Księżyc
Chrome2ChromeV2, TabCast czy może TabHermes albo Tabcury? ;-)
Motocosie

poniedziałek, lipca 15, 2019

Nie jestem pewien czy zadania koderskie/algorytmiczne są dobrym elementem rekrutacji

Ostatnio robiłem jakieś testy koderskie, tzn. robię je dość często tak sam dla siebie, tu mnie o to poproszono.
Sam wybierałem testy, którymi my ludzi testujemy i zaczynam mieć wątpliwości. Czy takie testy są dobrym narzędziem rekrutacyjnym.
Tego się można nauczyć, choć fakt, niektórzy się z tym rodzą, inni nie ;-)

Ale nie jestem pewien do końca co to sprawdza. Czy X umie programować?
To wtedy pytanie jak wysoko ustawimy poprzeczkę.

Niby idea pierwszego etapu rekrutacji jest taka by odfiltrować tych, którzy się nie nadają nawet na phone interview. Ale nie wiem, w takim przypadku sam wybierałem zbyt ostre zadania.

Do tego ja się zawsze przy takich testach denerwuję.
Znam ludzi, którzy panikują przed rozmową telefoniczną czy twarzą w twarz, ja panikuję przed takim testem.

To pewnie przez osobowość, ale wolę polec przed ludźmi (moje defaultowe założenie w jakiejkolwiek rekrutacji gdziekolwiek, nawet jak tak trochę grzecznościowo się rekrutuję ;-)) niż przed maszyną.

Z tego co wiem niektóre firmy zaczynają też rezygnować z takich testów, bo podobno nie widziały korelacji między ich wynikami, a późniejszą rekrutacją.

Chyba sam jestem bardziej zwolennikiem dawania ludziom prostego problemu, gdzie algorytm jest prosty jak konstrukcja cepa i wystarczy niemal użyć wbudowanych struktur danych i sprawdzić jak tego użyją.


Podobne postybeta
Nie rozumiem, czyli czemu niektórzy ludzie pytają jak przejść z Windows 7 na XP?
Znajomości
Dziś programista ma być teoretycznym algorytmistą, a praktycznym kleistą ;-)
Jak wywołałem kryzys....
Nauka ;-)

niedziela, lipca 07, 2019

Szybki hack dla podejmowania decyzji

Każdy znalazł się w sytuacji gdy nie do końca wiedział co zrobić.
Pojawiła się jakaś okazja i trzeba podjąć decyzję, ale nie do końca wiadomo jaką...

Zaprosić kogoś na randkę? Zmienić pracę? Pojechać na urlop do X? Kupić Y?

Odpowiedź jest prosta ;-)

Losowanie :-)

Co najlepsze wcale nie musisz robić tego co każe Ci los. Sprawdź jak Ci się ta odpowiedź podoba.
Jeśli Ci się podoba to to zrób, jeśli Ci się nie podoba to prawdopodobnie nie chcesz jednak tego zrobić.

Działa to bo gdzieś w środku masz kawałek Ciebie który ma zdanie w danej sprawie i jak los wskaże coś przeciwnego to ten kawałek zacznie głośno krzyczeć.

OK, a co w sytuacji gdy wynik losowania jest Ci obojętny? Może czujesz lekką radość, albo lekki niepokój, ale bez niczego silnego?

To wtedy zadaj sobie pytanie "co najgorszego może się zdarzyć gdy to zrobię?" i dokładnie odwrotne "co najgorszego może się zdarzyć jeśli tego nie zrobię".
To też powinno pomóc.

Jeśli nadal obie strony są tak samo równe... to podejmij decyzję, która będzie wymagała najmniejszego wysiłku.

Nadal nic? Obie możliwości wymagają tyle samo wysiłku?

Poczekaj, albo losuj jeszcze raz i zrób to co wskazał los ;-)


Podobne postybeta
Life hacki z obrazka ;-)
"Promocja homoseksualizmu" co to niby ma być?
O wyższości podejmowania decyzji partiami zamiast per sztuka ;-)
Myjnia
Komputer dla mamy