Wszyscy zawsze mówią, że mogą pokonać „10 linii na programistę dziennie” z „Miesiąca Mitycznego Człowieka”, a rozpoczynając projekt, zwykle mogę dostać kilkaset linii dziennie.
Ale u mojego poprzedniego pracodawcy wszyscy programiści byli bardzo sprytni, ale był to duży projekt, ponad milion linii kodu, z bardzo uciążliwymi wymaganiami certyfikacyjnymi i łączący się z innymi wielomilionowymi projektami. W pewnym momencie, jako ćwiczenie z ciekawości, wykreśliłem linie kodu w produkcie wysyłkowym w mojej grupie (nie licząc narzędzi, które opracowaliśmy) i oczywiście, stopniowo, dochodził do około 12 linii dodawania netto na programistę dziennie. Nie licząc zmian, kodu testowego czy faktu, że programiści nie pracowali codziennie nad rzeczywistym kodem projektu.
Jak się mają inni ludzie? A jakie masz wymagania (wyobrażam sobie, że jest to czynnik)?
Odpowiedzi:
Myślę, że liczba dodanych wierszy w dużym stopniu zależy od stanu projektu, a tempo dodawania do nowego projektu będzie znacznie wyższe niż w przypadku projektu początkowego.
Praca jest inna w obu przypadkach - przy dużym projekcie zwykle spędzasz większość czasu na ustalaniu relacji między częściami, a jedynie niewielką ilość na faktyczną zmianę / dodanie. podczas gdy w nowym projekcie - głównie piszesz ... dopóki nie jest wystarczająco duży i tempo się zmniejsza.
źródło
Jestem dumny, że w jednym z moich obecnych projektów, w niektórych modułach, włożyłem ujemną liczbę wierszy do podstawy kodu. Określenie, które obszary kodu stały się niepotrzebnie skomplikowane i można je uprościć dzięki bardziej przejrzystemu i przejrzystemu projektowi, jest użyteczną umiejętnością.
Oczywiście niektóre problemy są z natury złożone i wymagają złożonych rozwiązań, ale w przypadku większości dużych projektów obszary, które miały słabo zdefiniowane lub zmieniające się wymagania, zwykle mają zbyt złożone rozwiązania z większą liczbą problemów na linię.
Biorąc pod uwagę problem do rozwiązania, zdecydowanie wolę rozwiązanie, które zmniejsza liczbę linii. Oczywiście na początku małego projektu mogę wygenerować o wiele więcej niż dziesięć linii kodu dziennie, ale nie myślę o ilości kodu, który napisałem, tylko o tym, co robi i jak dobrze to robi. Z pewnością nie zamierzałbym pokonywać dziesięciu linii dziennie ani uważać tego za osiągnięcie.
źródło
Podoba mi się ten cytat:
Czasami wnieśliście więcej, usuwając kod niż dodając
źródło
Powinieneś przestać używać tego wskaźnika, w większości przypadków jest on bez znaczenia. Spójność, sprzężenie i złożoność są ważniejszymi miernikami niż wiersze kodu.
źródło
Jestem jedynym programistą pracującym na pełny etat w naszej firmie i napisałem 500 000 linii kodu OCaml i F # w ciągu ostatnich 7 lat, co odpowiada około 200 liniom kodu dziennie. Jednak zdecydowana większość tego kodu to przykłady samouczków składające się z setek oddzielnych projektów, z których każdy ma kilkaset wierszy. Ponadto istnieje wiele duplikatów między OCaml i F #. Nie utrzymujemy żadnych wewnętrznych baz kodów większych niż 50 kLOC.
Oprócz tworzenia i utrzymywania własnego oprogramowania, w ciągu ostatnich 7 lat doradzałem także wielu klientom z branży. Dla pierwszego klienta napisałem 2000 linii kodu OCaml w ciągu 3 miesięcy, co daje 20 linii kodu dziennie. Dla kolejnego klienta czterech z nas napisało kompilator, który wygenerował miliony linii kodu C / C ++ / Python / Java / OCaml, a także dokumentację w ciągu 6 miesięcy, co daje 2000 linii kodu dziennie na programistę. Dla innego klienta zamieniłem 50kLOC C ++ na 6kLOC F # w 6 miesięcy, co daje -352 linie kodu dziennie. Dla jeszcze jednego klienta przepisuję 15kLOC OCaml w F #, który będzie tego samego rozmiaru, czyli 0 linii kodu dziennie.
Dla naszego obecnego klienta zamienię 1600000 linii kodu C ++ i Mathematica na ~ 160kLOC języka F # w ciągu 1 roku (pisząc kompilator na zamówienie), co będzie kosztować -6000 linii kodu dziennie. To będzie mój najbardziej udany projekt do tej pory i pozwoli zaoszczędzić naszym klientom miliony dolarów rocznie na bieżących kosztach. Myślę, że każdy powinien starać się pisać -6 000 linii kodu dziennie.
źródło
Bez faktycznego sprawdzania mojego egzemplarza „Mitycznego miesiąca człowieka” (każdy, kto to czyta, powinien mieć łatwo dostępny egzemplarz), był rozdział, w którym Brooks przyglądał się produktywności za pomocą napisanych wierszy. Interesującą kwestią dla niego nie była faktyczna liczba wierszy pisanych dziennie, ale fakt, że wydawało się, że jest mniej więcej taki sam w asemblerze i PL / I (myślę, że był to używany język wyższego poziomu).
Brooks nie miał zamiaru wyrzucać jakiejś arbitralnej wartości produktywności, ale pracował na podstawie danych dotyczących rzeczywistych projektów iz tego, co pamiętam, mogło to wynosić średnio 12 linii dziennie.
Zwrócił uwagę, że można się spodziewać wahań wydajności. Powiedział, że kompilatory były trzy razy trudniejsze niż programy użytkowe, a systemy operacyjne trzy razy trudniejsze niż kompilatory. (Wydaje się, że lubił używać mnożników trzech do oddzielenia kategorii).
Nie wiem, czy doceniał wtedy indywidualne różnice między produktywnością programisty (chociaż w argumencie o rząd wielkości postulował siedmiokrotną różnicę), ale jak wiemy, najwyższa produktywność to nie tylko kwestia pisania więcej kod, ale także napisanie odpowiedniego kodu do wykonania zadania.
Jest też kwestia środowiska. Brooks spekulował trochę na temat tego, co uczyniłoby programistów szybszymi lub wolniejszymi. Podobnie jak wiele osób, wątpił, czy obecne mody (debugowanie interaktywne z wykorzystaniem systemów podziału czasu) były lepsze od starych (ostrożne wstępne planowanie dwugodzinnego ujęcia z wykorzystaniem całej maszyny).
Biorąc to pod uwagę, zignorowałbym każdą rzeczywistą liczbę produktywności, którą wymyślił, jako bezużyteczną; Stała wartość książki tkwi w zasadach i bardziej ogólnych lekcjach, których ludzie uparcie się nie uczą. (Hej, gdyby wszyscy się ich nauczyli, książka byłaby interesująca tylko historycznie, podobnie jak wszystkie argumenty Freuda, że istnieje coś w rodzaju podświadomości.)
źródło
Łatwo jest uzyskać kilkaset wierszy kodu dziennie. Ale spróbuj uzyskać kilkaset wysokiej jakości linii kodu dziennie i nie jest to takie łatwe. Dodaj do tego debugowanie i przechodzenie przez dni z niewielką liczbą nowych linii lub bez nich, a średnia spadnie dość szybko. Spędziłem tygodnie na debugowaniu trudnych problemów, a odpowiedź to 1 lub 2 wiersze kodu.
źródło
Byłoby znacznie lepiej zdać sobie sprawę, że mówienie o fizycznych liniach kodu jest całkiem bez znaczenia. Liczba fizycznych linii kodu (LoC) jest tak zależna od stylu kodowania, że może różnić się o rząd wielkości od jednego programisty do drugiego.
W świecie .NET istnieje wygodny sposób liczenia LoC. Punkt sekwencji . Punkt sekwencji to jednostka debugowania, to część kodu podświetlona na ciemnoczerwono podczas wstawiania punktu przerwania. Za pomocą punktu sekwencji możemy mówić o logicznym LoC , a metrykę tę można porównać w różnych językach .NET. Metryka logicznego kodu LoC jest obsługiwana przez większość narzędzi .NET, w tym metrykę kodu VisualStudio, NDepend lub NCover.
Na przykład, oto metoda 8 LoC (punkty sekwencji w nawiasach początkowych i końcowych nie są brane pod uwagę):
Produkcja LoC musi być liczona w perspektywie długoterminowej. W niektóre dni będziesz pluć więcej niż 200 LoC, w inne dni spędzisz 8 godzin na naprawie błędu, nie dodając nawet jednego LoC. W niektóre dni wyczyścisz martwy kod i usuniesz LoC, w niektóre dni spędzisz cały swój czas na refaktoryzacji istniejącego kodu i nie dodawaniu nowego LoC do całości.
Osobiście liczę jeden LoC w moim własnym wyniku produktywności tylko wtedy, gdy:
W tym stanie mój osobisty wynik w ciągu ostatnich 5 lat, kiedy kodowałem narzędzie NDepend dla programistów .NET, to średnio 80 fizycznych LoC dziennie bez jakiegokolwiek uszczerbku dla jakości kodu . Rytm jest trwały i nie widzę, żeby w najbliższym czasie zmniejszył się. Podsumowując, NDepend to baza kodu C #, która obecnie waży około 115K fizycznego LoC
Dla tych, którzy nienawidzą liczenia LoC (widziałem ich wiele w komentarzach tutaj), zaświadczam, że po odpowiednim skalibrowaniu liczenie LoC jest doskonałym narzędziem do szacowania . Po zakodowaniu i pomiarze dziesiątek funkcji osiągniętych w moim szczególnym kontekście rozwoju, doszedłem do punktu, w którym mogę dokładnie oszacować rozmiar dowolnej funkcji TODO w LoC i czas, jaki zajmie mi dostarczenie jej do produkcji.
źródło
Nie ma czegoś takiego jak srebrna kula.
Pojedyncza metryka sama w sobie jest bezużyteczna.
Na przykład mam własną bibliotekę klas. Obecnie prawdziwe są następujące statystyki:
Załóżmy, że w ogóle nie piszę żadnych komentarzy, to znaczy 127.323 linii kodu. Z twoim stosunkiem napisanie tej biblioteki kodu zajęłoby mi około 10610 dni. To 29 lat.
Na pewno nie spędziłem 29 lat na pisaniu tego kodu, ponieważ wszystko to jest C #, a C # nie istnieje tak długo.
Teraz możesz argumentować, że kod nie jest wcale taki dobry, ponieważ najwyraźniej musiałem przekroczyć twoje 12 linii dziennie i tak, zgodzę się na to, ale jeśli mam sprowadzić oś czasu do kiedy została wydana wersja 1.0 (a nie zacząłem jej tworzyć przed wydaniem wersji 2.0), czyli 2002-02-13, około 2600 dni, średnia to 48 linii kodu dziennie.
Czy wszystkie te wiersze kodu są dobre? Na pewno nie. Ale do 12 linii kodu dziennie?
Na pewno nie.
Wszystko zależy.
Możesz mieć programistę najwyższej klasy, który wypuszcza kod w kolejności tysięcy wierszy dziennie, a średni programista produkuje kod w kolejności setek wierszy dziennie, a jakość jest taka sama.
I tak, będą błędy.
Suma, którą chcesz, to równowaga. Ilość zmienionego kodu, liczba znalezionych błędów, złożoność kodu, a trudność związana z naprawieniem tych błędów.
źródło
Steve McConnell podaje interesującą statystykę w swojej książce „Software Estimation” (str. 62 Tabela 5.2). Rozróżnia typy projektów (awionika, biznes, telekomunikacja, itp.) I wielkość projektu 10 kLOC, 100 kLOC, 250 kLOC. Liczby podano dla każdej kombinacji w LOC / StaffMonth. EG Avionic: 200, 50, 40 Systemy intranetowe (wewnętrzne): 4000, 800, 600 Systemy wbudowane: 300, 70, 60
Co oznacza: np. dla projektu Avionic 250-kLOC jest 40 (LOC / miesiąc) / 22 (dni / miesiąc) == <2LOC / dzień!
źródło
Myślę, że pochodzi to z dni rozwoju wodospadu , w których faktyczna faza rozwoju projektu może wynosić zaledwie 20-30% całkowitego czasu projektu. Weź wszystkie wiersze kodu i podziel je przez cały czas trwania projektu, a otrzymasz około 10 wierszy dziennie. Podziel tylko przez okres kodowania, a zbliżysz się do tego, co ludzie cytują.
źródło
Nasz kod źródłowy to około 2,2 MLoC na około 150 osobolat wysiłku. To daje około 75 linii C ++ lub C # na programistę dziennie, przez cały okres trwania projektu.
źródło
Myślę, że wielkość projektu i liczba zaangażowanych programistów to duże czynniki. W mojej karierze jestem daleko ponad tym, ale przez cały ten czas pracowałem sam, więc praca z innymi programistami nic nie kosztuje.
źródło
Dobre planowanie, dobry projekt i dobrzy programiści. Dostajesz to wszystko razem i nie poświęcisz 30 minut na napisanie jednej linii. Tak, wszystkie projekty wymagają zatrzymania się i zaplanowania, przemyślenia, omówienia, przetestowania i debugowania, ale przy dwóch liniach dziennie każda firma potrzebowałaby armii, aby tetris działał ...
Podsumowując, jeśli pracowałeś dla mnie z prędkością 2 linii na godzinę, lepiej przynosisz mi dużo kaw i masujesz moje stopy, żebyś nie został zwolniony.
źródło
Można podejrzewać, że ten odwieczny cukierek menedżerski powstał, gdy wszystko było aplikacją sys napisaną w C, ponieważ magiczna liczba różniłaby się o rzędy wielkości w zależności od języka, skali i charakteru aplikacji. A potem musisz zdyskontować komentarze i atrybuty. I ostatecznie kogo obchodzi liczba napisanych wierszy kodu? Czy powinieneś skończyć, gdy osiągniesz 10 tysięcy linii? 100K? Tak arbitralne.
To jest bezużyteczne.
źródło