Istnieje witryna Stack Exchange o nazwie Programming Puzzles & Code Golf . Te puzzle programowania na tej stronie dopasować tę definicję układanki :
zabawka, problem lub inny pomysł mający na celu zabawę, stwarzając trudności do rozwiązania przez pomysłowość lub wysiłek pacjenta.
Zostały zaprojektowane z myślą o rozrywce, a nie w taki sposób, aby działający programista był rozbawiony rzeczywistym problemem napotykanym w ich codziennej pracy.
Code Golf to „rodzaj rekreacyjnych zawodów programistycznych, w których uczestnicy starają się uzyskać możliwie najkrótszy kod źródłowy, który implementuje określony algorytm”. W odpowiedziach na stronie PP&CG zobaczysz, jak ludzie określają liczbę bajtów w swoich odpowiedziach. Kiedy znajdą sposób na ogolenie kilku bajtów, wykreślą oryginalny numer i zapiszą nowy.
Jak można się spodziewać, golf-golf nagradza ekstremalne nadużycia w języku programowania. Jednoliterowe nazwy zmiennych. Brak białych znaków. Kreatywne wykorzystanie funkcji bibliotecznych. Funkcje nieudokumentowane. Niestandardowe praktyki programowania. Przerażające hacki.
Gdyby programista wysłał w pracy żądanie ściągnięcia zawierające kod w stylu golfa, zostanie ono odrzucone. Ich współpracownicy będą się z nich śmiać. Ich kierownik wpadał przy biurku na czat. Mimo to programiści bawią się, przesyłając odpowiedzi do PP&CG.
Co to ma wspólnego stdc++.h
? Jak zauważyli inni, używanie go jest leniwe. Jest nieprzenośny, więc nie wiesz, czy będzie działać na twoim kompilatorze, czy na następnej wersji kompilatora. Sprzyja złym nawykom. Jest niestandardowy, więc zachowanie Twojego programu może różnić się od tego, czego oczekujesz. Może to wydłużyć czas kompilacji i rozmiar pliku wykonywalnego.
Są to wszystkie uzasadnione i poprawne zastrzeżenia. Dlaczego więc ktoś miałby używać tej potworności?
Okazuje się, że niektórzy ludzie lubią programować puzzle bez kodu golfa . Łączą się i rywalizują na imprezach takich jak ACM-ICPC, Google Code Jam i Facebook Hacker Cup, lub na stronach takich jak Topcoder i Codeforces. Ich ranga zależy od poprawności programu, szybkości wykonania i tego, jak szybko przesyłają rozwiązanie. Aby zmaksymalizować szybkość wykonywania, wielu uczestników używa C ++. Aby zmaksymalizować prędkość kodowania, niektóre z nich używają stdc++.h
.
Czy to dobry pomysł? Sprawdźmy listę wad. Ruchliwość? Nie ma to znaczenia, ponieważ te zdarzenia kodowania używają określonej wersji kompilatora, którą znają wcześniej zawodnicy. Zgodność z normami? Nie dotyczy bloku kodu, którego okres użytkowania wynosi mniej niż godzinę. Skompiluj czas i rozmiar pliku wykonywalnego? Nie są one częścią rubryki punktacji konkursu.
Więc mamy złe nawyki. To jest ważny sprzeciw. Korzystając z tego pliku nagłówkowego, uczestnicy unikają szansy dowiedzenia się, który standardowy plik nagłówkowy określa funkcjonalność, z której korzystają w swoim programie. Kiedy piszą rzeczywisty kod (i nie używają stdc++.h
), będą musieli spędzać czas na wyszukiwaniu tych informacji, co oznacza, że będą mniej wydajni. To jest minus ćwiczenia z stdc++.h
.
Rodzi to pytanie, dlaczego w ogóle warto brać udział w programowaniu konkurencyjnym, jeśli zachęca do złych nawyków, takich jak używanie stdc++.h
i łamanie innych standardów kodowania. Jedną odpowiedzią jest to, że ludzie robią to z tego samego powodu, dla którego publikują programy na PP&CG: niektórzy programiści uważają za przyjemne korzystanie ze swoich umiejętności kodowania w kontekście gry.
Tak więc pytanie, czy używać, stdc++.h
sprowadza się do tego, czy korzyści płynące z szybkości kodowania w konkursie programistycznym przeważają nad złymi nawykami, które można rozwinąć, używając go.
Pytanie to brzmi: „Dlaczego nie powinienem #include <bits/stdc++.h>
?” Zdaję sobie sprawę, że został on poproszony o udzielenie odpowiedzi, a zaakceptowana odpowiedź ma stanowić Jedną Prawdziwą Odpowiedź na to pytanie. Ale pytanie nie brzmi „Dlaczego nie powinienem # zawierać <bits/stdc++.h>
kodu produkcyjnego?” Dlatego uważam, że uzasadnione jest rozważenie innych scenariuszy, w których odpowiedź może być inna.
using namespace std;
, że gdzieś tam będzie dostępna wersja .