Mój kolega nie rozumie rzeczy, z którymi pracuje. Co robić? [Zamknięte]

13

Spędziłem 3 dni debugując jeden bardzo niejasny błąd w bibliotece stworzonej przez mojego kolegę, ten błąd zdarza się bardzo rzadko. W końcu odkryłem, że ten błąd występuje z powodu dostępu do obiektu bez wątku w postaci wątku. W rzeczywistości nie jest to pierwszy tego typu błąd, wcześniej były podobne błędy. Po prostu przeprowadza testy jednostkowe, a jeśli coś się nie powiedzie, zamyka się gdzieś. A jeśli nic nie zawiedzie, to jego kod jest idealny. Wygląda na to, że nie ma pojęcia o bezpieczeństwie wątków. Jestem w 100% pewien, że istnieje wiele podobnych błędów, które jeszcze się nie pojawiły. Wygląda na to, że PM też nie rozumie wątków.
Problem polega na tym, że pracuje on w firmie znacznie dłużej niż ja. W każdym razie nie mogę po prostu powiedzieć „ten facet jest niekompetentny w tym obszarze”, ponieważ to zawsze pokazuje cię jako „złego gracza zespołowego” itp.

tika
źródło
Co to za kraj?
To międzynarodowa firma.
tika
2
Jeśli to naprawdę duży problem i masz 100% pewności, że twój kolega popełnia błąd, najpierw uprzejmie zwróć uwagę na to, aby nie był zagrożony. Drugą rzeczą jest, jeśli twój kolega nie słucha, to po prostu wskazać potencjalne szkody w gotówce. Tego słuchają wszyscy menedżerowie, i to bardzo ostrożnie. Problem z wątkami, taki jak opisany, jest potencjalnie bardzo szkodliwy i jeśli nie masz 100% pewności w swoich oświadczeniach, kontynuuj z nimi.
NB
Prawdopodobnie należy do witryny Project Management SE.
Bernard
1
Witryna Project Management SE nie ma znacznika „Wielowątkowość”, który powinno mieć to pytanie.
RalphChapin

Odpowiedzi:

13

Przekonaj premiera, że ​​aby uniknąć takich błędów, wiedza zespołu na temat tworzenia wątków powinna zostać ulepszona i powiedz im, że jesteś gotów zorganizować coś w rodzaju warsztatów lub prezentacji na ten temat. Nie rób z tego osobistej rzeczy między tobą a twoim kolegą.

Doktor Brown
źródło
Obawiam się, że nie będzie to mile widziane przez tego faceta, ponieważ uważa, że jest profesjonalistą w tej dziedzinie (i sam może uczyć wszystkich). Ale mogę spróbować.
tika
Ach tak, i jeden wielki problem - angielski nie jest moim językiem ojczystym, nie mówię zbyt dobrze.
tika
Jeśli zarówno twój kolega, jak i PM mają ograniczoną wiedzę na temat nawlekania i bezpieczeństwa nici, trening jest zdecydowanie najlepszym podejściem. To nie jest niekompetencja jednego faceta - problemem są kompetencje zespołu.
boisvert
1
Warsztaty to coś, w czym każdy może wnieść swoją wiedzę i wszyscy powinni się z niej czegoś nauczyć. Jeśli twój kolega myśli, że wie coś o nawlekaniu, być może możesz się od niego czegoś nauczyć.
Doc Brown
8

Napisz test jednostkowy, który pokazuje błąd i poproś go o naprawienie.


źródło
1
On już wie o tym błędzie. Po prostu nie może znaleźć przyczyny.
tika
Nie znalazłeś powodu w trzydniowej sesji debugowania? A może źle czytam twoje pytanie?
1
@scarfridge Zależy od platformy. W przypadku języka Java można użyć instrumentacji kodu bajtowego lub programowania zorientowanego na aspekt, aby wstawić oczekiwanie dokładnie tam, gdzie jest problem (lub użyć JVMTI do kontroli wykonania). Można to zrobić!
1
To nie tylko kwestia sekwencji. W grę wchodzi wiele innych czynników - które rdzenie wykonują kod, kiedy pojawia się GC i jak przenosi obiekty, jak zmiany są przenoszone z pamięci podręcznej jednego rdzenia na inny itp.
tika
1
W rzeczywistości jest to tylko zestaw wywołań metod powtarzanych miliardy razy. Ale to nie ma większego znaczenia. Prawdziwym powodem jest dostęp do obiektu słownika z 2 wątków bez blokady (tj. Bez barier pamięci). Wątek A go tworzy, a wątek B go odczytuje.
tika
4
  • Zadaniem starszego programisty jest przejrzenie jego kodu i zasugerowanie ulepszeń.
  • Nie jesteś tam, by sprawdzić po jego pracy, osobiście nienawidzę, jeśli ktoś ponownie sprawdza wszystkie moje zmiany, aby zobaczyć, czy coś się zepsuło
  • Jeśli nie zaakceptuje twojej rady, zadaniem PM jest rozwiązanie problemu z komunikacją.
  • Problem z wątkami w teście jednostkowym sprawia, że ​​zastanawiam się, czy ten test jest faktycznie testem jednostkowym, a nie testem integracyjnym czy testowym.
CodeART
źródło
Rozumiem twój pomysł. Przestrzegaj swojego polecenia.
tika
2
Co ma znaczenie, jeśli test wykazujący problem nazywa się „testem jednostkowym” lub „testem integracyjnym”? Cała sytuacja pozostaje taka sama.
Doc Brown
1
Obawiam się, że jego kolega może nie znać różnicy między testem jednostkowym a testem części, dlatego może być konieczne dalsze szkolenie, aby rozwiązać ten problem.
CodeART
@CodeRush - Rozumiem, że nie wierzysz w recenzowanie? Co byś potrzebował, aby docenić fakt, że ktoś jeszcze raz sprawdził kod (a nie tylko awaria w produkcji)?
Wpadłem na pomysł, ale nie widziałem, żeby działał efektywnie w moich poprzednich pracach. Myślę, że recenzje starszych deweloperów to lepszy mechanizm przekazywania opinii.
CodeART
-5

Myślę, że Twoja firma nie powinna używać wielowątkowości.

Po wykonaniu ogromnie wielowątkowego projektu odkryłem, że dwie techniki mają kluczowe znaczenie dla sprawnego działania. Po pierwsze , kod musiał być napisany poprawnie. Każde pole musiało zostać ręcznie sprawdzone, aby upewnić się, że zostało poprawnie zadeklarowane i poprawnie zsynchronizowane, gdziekolwiek się odwołuje. (Ostrzeżenie: Upraszczam tu trochę, aby moja odpowiedź była krótka - lub w każdym razie krótsza.) Po drugie , kod musiał zostać przetestowany przez uruchomienie go na maszynach jedno- i wielordzeniowych - wiele minut przy użyciu 100% każdego rdzenia. (A jeśli wykorzystuje tylko 2% każdego rdzenia, jak to często robiłem, to też jest błąd).

Możesz być w stanie sobie z tym poradzić, ale Twoja organizacja nie. Nawet jeśli zrozumieli problem, którego nie rozumieją, nie mają specjalistycznej wiedzy.

Większość języków zapewnia sposoby na uniknięcie tego. Jeśli masz czytnik gniazd, który zwykle ma swój własny wątek, poproś o informacje w głównym wątku tak szybko i prosto, jak to możliwe. Jeszcze lepiej, poszukaj klas / funkcji systemowych, które poradzą sobie z wątkiem czytania. Użyj kolejki, która uruchamia „zdarzenia” jedna po drugiej, jak większość interfejsów API GUI. (Skorzystaj z samej kolejki zdarzeń interfejsu GUI API.) Jeśli potrzebujesz przetwarzania równoległego, prawdopodobnie znajdziesz jakiś „wątek roboczy”, który pozwoli ci przechowywać dane / pola w jednym wątku, obsługując wszystkie transfery.

Podkreśl wszystkie niebezpieczeństwa wielowątkowości. (Straszne historie: Mój ulubiony błąd zawierał kilka wierszy, takich jak int i = 5; i = i * i;:, co spowodowało, iże uzyskałem wartość 35. Jednym z nich, które dużo widziałem, było: if (thing != null) thing.reset();zgłoszenie wyjątku zerowego wskaźnika.) Myślę, że twoją jedyną nadzieją jest zrozumienie, że są wkraczając w cały, nowy, dziwny świat, i że może powinni zrobić jeden wielki krok wstecz.

Nie jestem pewien, jak należy obsługiwać wielowątkowość . Jeśli pracę można powierzyć jednej osobie, a wszystko, co zrobią, zostanie wyrzucone, jeśli zawiedzie, dobrze. Ale zespół będzie tylko tak silny, jak jego najsłabszy członek, a nawet dobry programista będzie miał problem z pełną obsługą wielowątkowości. Mam nadzieję, że język znajdzie sposób, aby zapewnić mu bezpieczeństwo. Widziałem tam pomocne oprogramowanie. Myślę jednak, że najlepiej unikać wielowątkowości, chyba że czas wykonania jest krytyczny i dostępny jest dobry programista lub sprawdzony zespół.

RalphChapin
źródło
2
Nie masz pojęcia, co to za firma lub co oni robią, więc komentarz „Możesz być w stanie sobie z tym poradzić, ale Twoja organizacja nie może” jest nieco bezzasadny - z tego co wiesz, tika może pracować w Microsoft . Kimkolwiek są, wielowątkowość może być najlepszym sposobem na rozwiązanie ich problemu; istnieje wiele sytuacji, w których pasuje. I odkładając to na bok, pytanie nie dotyczy wielowątkowości, lecz obsługi kolegi, który powoduje problemy z powodu braku wiedzy specjalistycznej.
anaximander
@anaximander: Wielowątkowość powoduje błędy, które są bardzo trudne do odtworzenia i bardzo trudne do wyśledzenia. Aby wyprodukować użyteczne, naprawialne oprogramowanie MT, będziesz potrzebował przynajmniej programistów i kierownictwa świadomych niebezpieczeństw. Organizacja Tiki po prostu nie mogła sobie z tym poradzić. Widziałem, że osoby testujące / QA zmuszają programistów do pisania kodu dźwiękowego przez intensywne testowanie i wymagające poprawek dla każdego błędu. To nie działa z MT. Jeśli koledze brakuje umiejętności, zainteresowania i motywacji, radzić sobie z nim, trzymając go z dala od MT.
RalphChapin
@anaximander: Musisz mieć lepsze doświadczenia z Microsoftem niż ja. Chociaż, mówiąc szczerze, nigdy nie widziałem niczego, co wyglądałoby na błąd w liczeniu. .... I dzięki za komentarz.
RalphChapin
1
Niezależnie od tego, kiedy pytanie brzmi „jak radzić sobie ze współpracownikiem, który nie ma specjalistycznej wiedzy?”, Nie sądzę, by „Twoja firma źle tworzyła oprogramowanie” jest prawidłową odpowiedzią. W każdej organizacji, bez względu na to, jak rozległa i kompetentna, zawsze znajdą się osoby z brakami w wiedzy. Nie wiedząc, kim jest organizacja ani czym zajmuje się oprogramowanie, nie sądzę, że można rzetelnie osądzić, że firma nie wie, co robią, lub że ich problem można rozwiązać bez wielowątkowości.
anaximander