2012-04-03 20 views
5

Właśnie przeniosłem się z uczelni na uniwersytet i wydaje mi się, że wszystko, co wiem o prawidłowej technice kodowania, jest złe. Sposób, w jaki nauczył się kod czytelny byłoCo jest uważane za dobrą praktykę kodowania w sytuacjach "rzeczywistych"?

  • wcięcie kodu w ciele instrukcji warunkowych i pętli
  • Favor tworząc nową funkcję, na które duży blok kodu
  • komentarz na kod używany do debugowania lub może być ponownie użyty w przyszłości
  • Umieść spacje między operatorami i argumentami np. jeśli (a < = b) func1 (arg1, arg2, arg3)

straciłem głównych znaków ponieważ

  • W kodzie montażu nie powinien być wcięty i tylko etykiety powinny być wykorzystywane do skanowania źródło oko
  • Jeśli coś można osiągnąć bez definiowania nowej funkcji, nie rób tak
  • nie zachować stary kod i mają krótkie komentarze, żeby nie biegać w następnym wierszu
  • Nie spacje między argumentami i operatorami

Ostatnia rzecz, z którą się zepsułem, była pierwszą rzeczą w programie, która inicjalizuje rejestry do 0, ponieważ używał tego symulator, ale faktyczna deska nie. Czy wadą tego jest strata czasu? Pomyślałem, że pomogłoby to uczynić kod mniej powikłanym ...

+2

"W kodzie montażowym" Wystąpił problem. Zgromadzenie jest przeznaczone przede wszystkim dla komputerów, a nie dla ludzi. Inne języki programowania są przeznaczone przede wszystkim dla ludzi, a kompilator musi wykonać trudną pracę polegającą na przekonwertowaniu kodu przyjaznego dla człowieka na przyjazny dla użytkownika montaż. –

+4

Twoi instruktorzy mogą nie mieć racji, ale to oni cię oceniają, więc musisz robić rzeczy tak, jak chce instruktor. Zwłaszcza w kwestiach subiektywnych, takich jak styl, preferencje lub opinia. W idealnej sytuacji dowiesz się, czego chce instruktor lub instruktor, zanim zajmiesz się czymś, co będzie główną częścią oceny. –

+0

Nikt nie powiedział mi, że montaż jest inny i na pewno czyni mnie szalonym tracąc oceny za wkładanie wysiłku w to, co uważałem za dobrą praktykę. Jest to problem polegający na tym, że nie wiem, czego nie wiem. – Celeritas

Odpowiedz

4

Twoje zasady (z wyjątkiem kodu komentarza) są nadal uważane za dobrą praktykę. Jednak mogą one nie pasować równie dobrze do montażu, jak do innych języków. Programowanie zespołów jest specyficzną bestią, więc może mieć różne reguły stylu/najlepsze praktyki.

Zgodnie z tym, twoje pierwotne zasady nadal obowiązują w prawie każdym innym języku programowania.

Również w przypadku komentowania kodu. Jest to zwykle uważane za złą praktykę, ponieważ skomentowany kod często zostaje pozostawiony w tyle i dezorientuje następną generację programistów. Ogólnie rzecz biorąc, system kontroli kodu źródłowego ułatwia odzyskanie kodu usuwania, więc nie należy go komentować, aby go zachować.

1

Wygląda na to, że najpierw uczono dobrych praktyk pisania w języku wysokiego poziomu.

Twoja nowa szkoła chce, abyś programował przy użyciu niskiego poziomu języka. Najlepsze praktyki są całkowicie odmienne dla obu. Musisz tylko wiedzieć, jakie praktyki odnoszą się do jakiego języka.

2

Zasady obowiązujące dla języków wysokiego poziomu i języków asemblera są bardzo różne.

(kiedy odnosi się do czegoś jest oczywiste, to znaczy do innego programisty, który ma wokół jak najwięcej doświadczenia, jak to zrobić, a nie oczywiste losowej studenta dziennikarstwa, czy coś)

W ogólnych, dobrych praktyk w jakikolwiek sytuacja:

  1. Podaj krótki komentarz, gdy celem zmiennym/Rejestracja nie jest od razu oczywiste
  2. Unikaj oczywistych komentarze (czyli mówiąc, że licznik zlicza jest trochę zbędny)
  3. W submitt praca ed, usunąć wszystkie niepotrzebne komentarze
  4. graniczna długość linii 80 znaków (przechowuje kod schludny wyglądający i łatwy do odczytania)

Jeśli chodzi o konkretne języki iść, to wydaje się mieć całkiem przyzwoity pojąć odpowiednie standardy. Zasadniczo zastosuj swoją pierwszą listę do wszystkiego, oprócz języków montażu i montażu, a drugą do złożenia.

Nie trzeba również inicjować rejestrów, ponieważ po uruchomieniu mają one domyślne znane wartości. Inicjowanie w językach wyższego poziomu jest zwykle wymagane przez nauczycieli, ponieważ niektóre sprawy wymagają tego, a niektóre nie, a dużo łatwiej (i bezpieczniej) po prostu inicjujesz wszystko. EDIT: Zakładam, że pracujesz z płytą ARM lub AVR dla tego ostatniego akapitu. Myślę, że inni są w ten sam sposób, ale nie jestem pozytywny ...

+0

Tak, pracuję nad płytą Embest z architekturą ARM. Ktoś powiedział mi, że nie inicjalizuje rejestrów do 0 (lub jakiegokolwiek innego) po załadowaniu programu. Z ciekawości dowiesz się, jak czytasz instrukcję? – Celeritas

+0

Zazwyczaj po prostu czytam instrukcję. Ctrl + F jest tu zdecydowanie twoim przyjacielem (poszukiwanie wartości początkowej, inicjalizacja lub po prostu znalezienie strony opisu rejestru zwykle działa dobrze) –

4

Jak wiele osób wskazało do tej pory, bardzo ważne jest, aby odróżnić język wysokiego poziomu od niskiego.

Języki wysokiego poziomu realizują wiele konstrukcji, które pozwalają nam, mizernym ludziom, tłumaczyć nasze pomysły tak blisko oryginału, jak to możliwe. Mamy projekt zorientowany obiektowo, zorientowany na dane projekt, projektowanie zorientowane na prototypy ... Wszystko to ma dać ludziom przewagę w opisywaniu rzeczy w czytelny i możliwy do utrzymania sposób.

W niemal każdym przypadku jest to kosztowne działanie (w odniesieniu do języków asemblerowych, które są jedynie warstwą abstrakcji od kodu maszynowego). Nawet niektóre rzeczy, które są uważane za dobrą praktykę z projektowaniem zorientowanym obiektowo, zmuszają komputer do wykonywania niepotrzebnych prac, które po prostu ograniczają wydajność. Może to być cokolwiek z niepotrzebnych loadhitstores, chybień w pamięci podręcznej (zarówno instrukcji, jak i danych) przez kiepskie modelowanie danych przez programistów. Kolekcjonerzy i setery trafiają w numer jeden z regularnego projektu OO. Zaraz po nich są programiści, którzy nie myślą o tym, co piszą.

Na niższym poziomie zadaniem jest udobruchanie komputera, a nie poczucie estetyki. Żonglujesz rejestrami, adresami pamięci, ładowaniem, zapisywaniem danych. Musi to być sposób, w jaki podoba się dana architektura sprzętowa.

Nie zgadzam się z niektórymi z pomysłów nauczycieli na temat dobrych praktyk, zwłaszcza jeśli egzekwowane są w językach wysokiego poziomu. Jak już powiedziałem, jeśli nie ogranicza wydajności, wygląda ładnie i czytelnie, staje się twoim stylem robienia rzeczy. A karanie indywidualności jest, moim zdaniem, ... Cóż, powiedzmy niezbyt miłe.

Co najważniejsze, musisz ułagodzić nauczycieli. Mogą być ciężkim zespołem, z którym można sobie poradzić. Nawet jeśli są one złe, musisz to zaakceptować i zagrać w ich grę. Spróbuj spierać się z tobą, zapytaj, czego od ciebie chcą, a wszystko będzie dobrze.

Powodzenia!

0

Uważam, że twoje wskazówki dotyczące stylu kodu wysokiego poziomu są podobne do tego, czego się zwykle uczy. Jak zauważyli inni, montaż to inny rodzaj programowania. Na przykład, często lepiej napisać określony podprogram do (powiedzmy) pomnożyć przez 6 niż mieć podprogram ogólnego przeznaczenia do pomnożenia dowolnych liczb. Wynika to z tego, że programy montażowe są generalnie używane w aplikacjach czasowych lub o znaczeniu krytycznym dla przestrzeni kosmicznej, w których obciążenie związane z funkcją ogólnego przeznaczenia po prostu przeszkadza. Powoduje to również powtarzanie kodu z niewielkimi modyfikacjami (np. Pomnożenie przez 6, pomnożenie przez 10 itd.), A nawet powtarzanie instrukcji (zwiększanie rejestru 3 razy jest często szybsze niż dodawanie 3 do niego, ponieważ dodawanie musi być wykonane w akumulatorze , którego aktualna wartość może wymagać zachowania, przeniesienia wyczyszczone itd.).

Robi się jeszcze dziwniej: czasami podprogram przeskakuje bezpośrednio do innego podprogramu bez zwracania ("wywołanie ogona"); czasami program przesunie adres na stosie, a następnie powróci z podprogramu (tj. wykona instrukcję RET lub RTS) bez wywoływania podprocedury jako pierwszej: pozwala to na rozgałęzienie do dużej liczby różnych procedur bez uprzedniego wykonania długiej serii instrukcje porównania/rozgałęzienia. Często programy montażowe mają datę przeplataną z kodem, z instrukcjami skoku lub rozgałęzienia, aby upewnić się, że dane nigdy nie są wykonywane (ponieważ do komputera prawidłowy kod operacji jest po prostu sekwencją szesnastkową).

To trudne i często frustrujące, ale nagrody za naukę programowania asemblerowego są ogromne: zrozumiesz dokładnie, co robi program komputerowy (i jak to robi) w sposób, którego inni nie robią. Powodzenia!

Powiązane problemy