Przygotowuję się do konkursu programistycznego, w którym musimy napisać kod w C ++, a wszystko polega na tworzeniu działającego kodu w krótkim czasie. Przykładem może być użycie makra w celu uzyskania minimum dwóch liczb wewnętrznych lub użycie zestawów pamięci do zainicjowania tablic (ale powiedziano mi, że nie należy używać tutaj ).
Prowadzi to do pytania, jakie techniki kodowania istnieją w prawdziwej pracy?
Odpowiedzi:
Szybkim sposobem na wytworzenie działającego kodu jest ... spowolnienie. Rób bardzo małe kroki. Upewnij się, że wiesz, do czego służy każdy krok. Upewnij się, że po każdym kroku kod się kompiluje i uruchamia.
A co najlepsze, skorzystaj z programowania opartego na testach. Napisz test negatywny. Napisz tylko tyle kodu, aby pomyślnie przejść test. Przeprowadź refaktoryzację w celu wyczyszczenia kodu, upewniając się, że nadal przechodzi wszystkie testy. Powtarzać.
Jeśli tego nie zrobisz, bardzo łatwo jest napisać duży stos kodu, który nie działa. Wtedy zajmie ci bardzo dużo czasu, aby dowiedzieć się, dlaczego to nie działa.
źródło
Dokładnie przejrzyj standardowe biblioteki, szczególnie algorytmy STL. Pozwoli ci to zaoszczędzić wiele linii kodu i dużo czasu. Kluczem do wygranych konkursów programistycznych jest programowanie na jak najwyższym poziomie. W C ++, bez bibliotek zewnętrznych, oznacza to wywołania STL zamiast pętli.
źródło
Regularnie uczestniczę w konkursach ACM, mam nadzieję, że niektóre z tych wskazówek pomogą ci:
Jak powiedzieli inni, zapoznaj się z językiem , w C ++, zwłaszcza w STL, ma on zarówno typowe funkcje, których chcesz używać (wyszukiwanie binarne, min, maks.), Jak i solidne struktury danych, aby zaoszczędzić czas (stos, aby uniknąć rekurencji w górę , kolejka do BFS, nawet priorytet_kolejka dla Dijkstry, jeśli ci się to podoba).
Określ kategorię problemu, jeśli jest to matematyka, programowanie dynamiczne, teoria grafów itp. Zadaj sobie pytanie: czy znasz ten rodzaj problemu? Po wykonaniu tej czynności powinieneś podjąć decyzję dotyczącą kolejności ich rozwiązywania , która idzie w parze z następnym punktem ...
Chcesz całkowicie zrozumieć problem przed pisaniem na klawiaturze, rozwiązać właściwy problem , w moich pierwszych konkursach myślałem, że jeśli nie piszę, tracę czas; Później odkryłem, że to był błąd.
Nie myśl, że komentarze są stratą czasu, przynajmniej w „sprytnym” kodzie, nie chcesz debugować wiersz po wierszu, aby zobaczyć, co poszło nie tak (to jest prawdziwa strata czasu), jasność wartości .
Mają zabawy .
źródło
:)
Cóż, wydaje mi się, że znasz tylko C, a nie C ++. Odpowiedzi na te pytania z łatwością udziela osoba z podstawową znajomością języka.
Po prostu użyć funkcji?
std::min
już istnieje.std::array<T, N>
już inicjuje jego zawartość.Pierwszym krokiem jest poznanie języka, którego używasz.
źródło
Oprócz znajomości języka poznaj swoje narzędzia, a zwłaszcza edytor. Koduję od ponad 15 lat profesjonalnie i widziałem, jak inaczej wielcy programiści zwolnili, ponieważ jedynymi używanymi przez nich poleceniami edytora są klawisze kursora i crtl-x / c / v ..
Czy twój edytor obsługuje pojedyncze naciśnięcie klawisza w celu usunięcia linii? Aby ponownie wciąć linię? Poruszać się między funkcjami / metodami? zablokować wybrać / wkleić? zakładki? Poruszać się słowem? Czy edytor może automatycznie generować klasy / metody / funkcje? Czy obsługuje szablony, które można tworzyć z wyprzedzeniem? Szybkie refaktoryzacja? Nagrywanie makr?
Znajomość edytora może znacznie przyspieszyć proces programowania.
źródło
Pomyśl, zanim zrobisz. Lepiej pomyśleć i zaplanować przed napisaniem implementacji klasy niż po trzech nieudanych. Myśl także podczas działania - wykonywanie rzeczy małymi krokami znacznie upraszcza proces programowania.
Napisz tylko potrzebny Ci kod. Oznacza to, że nie zaczynaj pisać kodu z mentalnością: „ Będę potrzebował tych funkcji później, aby równie dobrze napisać ich prototypy, gdy będę przy nich ”. Rzeczy się zmieniają, plany się zmieniają. Otrzymasz kod, który może nawet nie być użyteczny. To strata czasu.
Wiedz co robisz Nie ma nic gorszego niż próba zapamiętania, jak działają podstawowe funkcje i cechy języka i / lub biblioteki. Zapoznaj się z używanymi narzędziami.
źródło
Było już wiele odpowiedzi, nadal chciałbym dodać swoją opinię.
Aby przyspieszyć kodowanie, zostań maszynistką dotykową do takiej prędkości, że podczas pisania możesz skoncentrować się zarówno na logice, jak i kodzie. Istnieje wiele programów do nauki pisania (na przykład Mistrz pisania, Szybkie pisanie, KTouch, gTypist), używaj ich
Widziałem wielu doświadczonych programistów, którzy wciąż są maszynistkami. Prowadzi to do nieprzyjemnego kodu bez dokumentacji i naprawdę tajemniczego kodu z makrami i skróconymi nazwami typów.
źródło
Tworzenie oprogramowania jest jednym z tych klasycznych działań 80–20 - tzn. Gdy pierwsze 80% pracy zajmuje 20% czasu, a ostatnie 20% pracy zajmuje 80% czasu.
Kluczem do ogólnego przyspieszenia pracy jest zatem praca nad poprawą wydajności, która zapewnia 20% wysiłku. Zazwyczaj są to etapy debugowania i praca nad związaniem wszystkiego razem i uczynieniem go użytecznym.
Możesz to poprawić, zachowując większą ostrożność na wczesnych etapach. Planowanie i prace projektowe na początku projektu mogą wydawać się stratą czasu, gdy masz ochotę zanurzyć się w hardcorowym programowaniu, ale mogą one zaoszczędzić dużo czasu później.
Ludzie będą mówić o konkretnych metodach, takich jak TDD lub BDD. Są świetne, ale jeśli nie robisz ich teraz, zajmie ci to trochę czasu, aby się do nich dostosować, więc prawdopodobnie nie są czymś, od czego chcesz zacząć od konkursu programistycznego. Ale przestaniesz planować, co robisz, zanim się w to zanurzysz, i zbierze nagrody, bez względu na wszystko. I tak są to pierwsze kroki w kierunku TDD i BDD. To jest miejsce, od którego chcesz zacząć.
źródło
Jeśli jest to prawdziwy konkurs programistyczny, nie używaj C ++. Użyj szybkiego, interaktywnego języka skryptowego RAD. Jest to coś, w czym VB6 absolutnie dominuje. Idź z uzbrojonymi bibliotekami, które wcześniej napisałeś. Dzielenie ciągów, odwracanie tablicy, wyszukiwanie, sortowanie, podstawowe grafiki, sterowanie konsolą.
Jeśli to do pracy, rób dokładnie odwrotnie. Dowiedz się, co tam jest, użyj solidnego języka (C ++ jest w porządku), komentuj wszystko i tak dalej. Te dwa rodzaje środowisk nie mogą być od siebie oddalone.
źródło