Niedawno odbyłem rozmowę o pracę, podczas której dali mi godzinę na napisanie prawdziwego kodu. To nie była wielka ilość, prawdopodobnie mniej niż 100 linii. Po około 45 minutach skompilowałem, uruchomiłem i uruchomiłem. Być może spędziłem 5-10 minut na opracowywaniu błędów kompilacji i kilku drobnych błędów, ale ogólnie było bardzo płynnie. (Nawiasem mówiąc, dostałem od nich ofertę.)
Zaskoczyło mnie jednak to, że po przekazaniu wypełnionego kodu ankieter powiedział mi, że jedyne, co zrobiłem źle, to „nie kompilacja podczas pracy”. Zapytałem go, na czym polega różnica, a on odpowiedział: „co byś zrobił, gdybyś ukończył kod, który nie skompilował się w czasie”.
W moim rozumieniu jest to niepoprawny argument, ponieważ „uzyskanie kodu do kompilacji” dla danej długości kodu zazwyczaj wymaga naprawy stałej liczby błędów kompilacji i zajmuje dość stałą ilość czasu, co powinno być takie samo, niezależnie od tego, czy zrobisz to po tobie zakończ pisanie kodu lub jeśli przeplatasz go czasem kodowania. Jeśli już, przeszkadzanie w kodowaniu w poszukiwaniu brakujących średników prawdopodobnie wpłynie negatywnie na wydajność. Z wyjątkiem ekstremalnych okoliczności, gdy eksperymentuję z niejasnościami na krawędziach takich rzeczy, jak funkcje wirtualne w klasach pochodnych itp., Rozsądne wydaje się oczekiwanie, że kod napisany przez doświadczonego programistę się skompiluje, pomijając od czasu do czasu błąd pisania, a nawet jeśli nie, to „
W innym podobnym incydencie otrzymałem niepełną bazę kodów w wywiadzie i poprosiłem o jej zakończenie i wprowadzenie niezbędnych modyfikacji, aby uruchomić. Zacząłem od przeczytania istniejącego kodu, a następnie po kilku minutach (nawet zanim skończyłem przeglądać kod), ankieter powiedział mi, że to wystarczy. Kiedy zapytałem go, co by zrobił (tj. „Co zrobiłem źle”), powiedział mi, że zacząłby od natychmiastowego skompilowania kodu.
Dlaczego to w ogóle ma znaczenie? Moim zdaniem i z mojego doświadczenia, to, czy kompilacja fragmentu kodu jest zasadniczo losowa, wiąże się z takimi rzeczami, jak to, czy brakuje średników, i ma niewiele wspólnego z poprawnością podstawowego programu. (Dla mnie skupianie się na kompilacji jest jak przeprowadzanie artykułu przez sprawdzanie pisowni bez korekty w celu sprawdzenia gramatyki.)
Jeśli podasz mi niekompletny kod, pierwszą rzeczą, którą zrobię, będzie jego przeczytanie. Nie będę nawet próbował go skompilować, dopóki nie będę wiedział, co robi kod i nie będę wiedział, że algorytm jest poprawny.
W każdym razie, to tylko kilka ostatnich incydentów, ale ogólnie słyszałem, że wielu programistów mówi o kompilowaniu swojego kodu w miarę ich rozwoju, a jednak nikt nie był w stanie powiedzieć mi o korzyściach płynących z tego. Rozumiem korzyści płynące z testowania kodu podczas pracy, ale po co kompilować?
Więc moje pytanie brzmi: czy coś mi umknęło? Czy kompilacja w trakcie pracy jest rzeczywiście korzystna? Czy jest to jakiś mit propagowany przez społeczność programistów, że należy często kompilować kod?