Przeczytałem wywiad ze świetnym programistą (nie jest to po angielsku), w którym powiedział, że „świetny programista może być 10 razy tak dobry, jak przeciętny”, podając powód, dla którego dobrzy programiści są bardzo dobrze opłacani i dlaczego firmy programistyczne zapewniają swoim pracownikom wiele udogodnień. Pomysł polegał na tym, że istnieje bardzo duże zapotrzebowanie na dobrych programistów, z powyższych powodów i dlatego firmy płacą za nie bardzo dużo.
Czy zgadzasz się z tym stwierdzeniem? Czy znasz jakieś obiektywne fakty, które mogłyby to poprzeć?
Edycja: pytanie nie ma nic wspólnego z doświadczeniem; jeśli mówisz o jednym świetnym programatorze z rocznym doświadczeniem, to powinien on być 10 razy bardziej wydajny niż mierny programista z rocznym doświadczeniem. Zgadzam się, że od niektórych lat doświadczeń rzeczy zaczynają się rozpraszać, ale nie o to chodzi w tym pytaniu.
źródło
Odpowiedzi:
Całkiem dokładny przegląd i analiza badań nad różnicami wydajności znajdują się w dwóch artykułach napisanych przez Steve'a McConnella :
Różnice produktywności wśród programistów i zespołów: geneza „10x”
Początki 10X - jak ważne są badania leżące u podstaw?
Pierwszy artykuł ( zmiany produktywności ... ) stwierdza:
Ten artykuł ma również ciekawą notatkę:
Drugi artykuł ( ... Jak ważne są badania podstawowe? ) Został napisany głównie w celu omówienia krytycznej recenzji pierwszego Laurenta Bossavita :
W drugim artykule, w sekcji A Głębsze zanurzenie w badaniach, wspierających „10x” McConnell ponownie sprawdza bardziej szczegółowo odniesienia użyte w pierwszym artykule i stwierdza:
Dla kompletności lista odnośników użytych w wariantach Produktywność ... jest również cytowana poniżej:
źródło
Naprawdę okropny programista może mieć produktywność poniżej zera (błędy, które wprowadzają, wymagają naprawy dłużej niż wykonanie całej pracy za nich).
A naprawdę świetny programista może robić rzeczy, których biedni i przeciętni programiści nigdy nie osiągnęliby, bez względu na to, ile czasu im dałeś.
Z tych powodów trudno mówić o „10-krotności produktywności” lub „100-krotności produktywności”.
Trzeba jednak pamiętać, że większość pracodawców programistów nie ma potrzeby wykonywania trudnych zadań, z którymi przeciętni programiści nie mogliby sobie poradzić. Większość pisanych kodów to strony internetowe, aplikacje biznesowe, aplikacje intranetowe itp., Wiele z nich naprawdę nie jest tak trudnych. Wydajny programista w tym środowisku to ten, który najlepiej rozumie i realizuje potrzeby użytkowników, a nie ten, który potrafi napisać najmądrzejszy kod.
Rzeczywiście, dla większości pracodawców programistów lepiej byłoby mieć dobrego programistę niż świetnego, ponieważ ten wielki znudzi się i odejdzie. Muszę znaleźć dobre dopasowanie między programistami a zadaniami.
źródło
Fakty i wady stanów inżynierii oprogramowania (Fakt 2, dostępny w wersji zapoznawczej Amazon):
(poszukaj tam listy źródeł do badań)
Oczywiście, jeśli porównasz produktywność nieprogramisty (lub bardzo złego programisty) z dobrym (pod względem doświadczenia i wiedzy), różnica może być nieskończenie duża (
n/0 == infinity
dla każdego pozytywnegon
), ale nie jest to ani sprawiedliwe ani rozsądne porównanie.Twoje wynagrodzenie może zależeć od wielu czynników (w losowej kolejności):
wraz z osobistym ...
źródło
Moja odpowiedź brzmi „tak, ale uważaj, jak używasz tych danych”.
Programista, który, powiedzmy, działa optymalnie, to ten, który tworzy funkcjonalność i powoduje mniej błędów, które wymagają naprawy, niż jego mniej wydajni bretheren. Nie trudno byłoby mi uwierzyć, że ci ludzie są w stanie osiągnąć 10-krotnie wyższą produktywność od innych, szczególnie gdy weźmie się pod uwagę, że pojedynczy dobry lub zły wybór dokonany w ciągu godziny może z łatwością mieć 10 godzin wpływu, a programiści dokonują wielu takich wyborów większość dni.
Ale...
Bądź ostrożny, mierz to. Naprawdę nie ufam większości pomiarów wydajności, ponieważ widziałem nieskończone przypadki, w których prawie każda znana metryka nie bierze pod uwagę czegoś, co uważam za istotne dla produktywności zespołu. Dlatego generalnie nienawidzę takich twardych liczb za „produktywność”. Oto kilka przykładów:
Wiele systemów pomiarowych próbowało wziąć pod uwagę te czynniki, ale nie widziałem jeszcze jednego, który bierze pod uwagę wszystkie te kwestie, więc nigdy nie jestem pod wrażeniem takich czynników, jak: „dobry programista jest 10 razy bardziej wydajny niż przeciętny ”, ponieważ muszę się zastanawiać, czy metryka rzeczywiście odpowiada za całą pracę, która musi zostać wykorzystana do stworzenia udanego produktu na stałe lub odnoszącego sukcesy, dobrze prosperującego zespołu.
Więc moim wielkim zastrzeżeniem jest - co zamierzasz zrobić z tymi danymi? Wykorzystam coś takiego, aby mieć świadomość, że odpowiednie narzędzia i talent mogą spowodować dużą różnicę w sposobie wykonywania pracy, ale jeśli spróbujesz zoptymalizować zespół, w którym każda osoba wytwarza 10-krotność „typowego” wyniku, jesteś zobowiązany przypadek frustracji. Lepiej jest znaleźć sposób, aby twój zespół zrobił 2-3 razy więcej niż wcześniej, dzięki lepszej współpracy.
źródło
W swojej książce The Leprechauns of Software Engineering Laurent Bossavit opisuje badanie 10-krotnego wzrostu wydajności. Odkrył, że za tym nie kryją się żadne liczby dźwiękowe - twierdzenie przeszło od spekulacji do „ustalonego faktu” poprzez grę telefoniczną o kolejne, bardziej konkretne cytaty. Wpis na blogu, który zawiera rozdział o 10-krotnym roszczeniu i zawiera odpowiednie cytaty i cytaty, jest faktem i folklorem w inżynierii oprogramowania .
Znalazł coś takiego: ktoś w 1968 roku przeprowadził badanie porównujące ludzi rozwiązujących konkretny problem debugowania i stwierdził, że niektórzy z nich zrobili to 10 razy szybciej niż inni. Z tego możemy wywnioskować, że niektórzy ludzie są 10 razy lepsi w rozwiązywaniu tego problemu , lub możemy dojść do wniosku, że niektórzy mieli szczęście lub wiele różnych rzeczy. Niektóre osoby zdecydowały się zacytować to, ponieważ (wszystkie są parafrazami) „badanie (Sackman i in., 1968) wykazało, że niektórzy programiści pracują 10 razy szybciej niż inni”. Potem stało się „badania wykazały, że dobrzy programiści są 10 razy lepsi niż przeciętni”, a potem „powszechnie wiadomo, że wydajność programistów różni się 10 razy między poszczególnymi osobami”. Następnie ktoś zbiera wszystkie te cytaty, błędnie cytując jedno oryginalne źródło mówiąc „wielu badaczy uważa…”.
Oczywiście nie byłaby to gra telefoniczna, gdyby zmieniła się tylko prawdziwość tego twierdzenia: mnożnik również osiąga 11 .
źródło
„ Wydajny programista w tym środowisku to ten, który najlepiej rozumie i realizuje potrzeby użytkowników, a nie ten, który potrafi napisać najmądrzejszy kod. ” ( Odpowiedź Carson63000 )
Ten kluczowy punkt w połączeniu z bethlakshmiPunkty mają ogromne znaczenie. Świetny programista może być świetny w swojej jednej rzeczywistości, ale rozpadnie się, gdy świat się zmieni. Zdolność nadążania za potrzebami firmy jest o wiele ważniejsza niż cokolwiek innego. Ostatecznie, chyba że Twoja firma jest technologią, nie dba o technologię; potrzebują rozwiązań. Tak więc bycie świetnym w zakresie wzorców projektowych nie oznacza, że użytkownicy końcowi, którzy potrzebują zrzutu danych, aby pokazać się na stronie internetowej, nie muszą robić nic prostego. Widziałem przeciętnych programistów, którzy zapewnili sobie pracę, dbając o biznes, który ich wspiera, podczas gdy wielcy programiści nudzą się i odchodzą w poszukiwaniu niekończącego się wyzwania. W zależności od organizacji i projektów możliwe jest nakarmienie tych głodnych wyzwań programistów, ale najprawdopodobniej nadejdzie moment, w którym po prostu Potrzebuję takiej mocy obliczeniowej. Ci programiści nie lubią po prostu siedzieć bezczynnie jak procesor. Wyłączą się i uruchomią ponownie w innym miejscu.
Na koniec powiem, że w porządku jest wiedzieć, kto jest waszym „kluczowym” wykonawcą, ale „zespół” ds. Rozwoju wciąż jest zespołem. Aby powtórzyć bethlakshmi, „ co zamierzasz zrobić z tą miarą?„Jeśli potrzebujesz zespołu, który zachowuje się jak zespół, nie skupiłbym się na takich danych. Zdałbym sobie sprawę, że nawet najmniejszy gracz jest nadal ważną częścią zespołu. Nawet przy 60% mniejszej wydajności twojego klucza gracz, ten jeden gracz może dawać Twojemu zespołowi coś, czego potrzebuje. Dowiedz się, co to jest i spróbuj go pomnożyć. Nie wypalaj swojego kluczowego gracza, zakładając, że powinien on kierować drużyną, znaleźć sposoby na zwielokrotnienie swojej wydajności, przez zanieczyszczenie innych graczy tą wielkością. To wymaga odrobiny kreatywności, nie tylko liczb. W końcu możesz dowiedzieć się, że to, co czyni dobrego programistę, nie jest nawet tym programistą, mogą to być jego rówieśnicy, jego możliwości w miejscu pracy a może nawet ty.
źródło