Jak ważne jest to, że znasz standard C ++?

11

Próbowałem szukać, ale nie widziałem podobnego pytania (ani to, albo moja terminologia wyszukiwania była niepoprawna - jeśli tak, nie krępuj się).

Jestem zagorzałym użytkownikiem SO i zauważam, że w dyskusjach i odpowiedziach jest wiele odniesień do standardu C ++ - i muszę przyznać, że nigdy nie czytałem tego konkretnego dokumentu, język sprawia, że ​​bolą mnie oczy ... , pytanie brzmi: czy programista C ++ może naprawdę kodować życie, nie czytając nigdy tego dokumentu? Czy to naprawdę ważne dla nas zwykłych śmiertelników, którzy nie zajmują się pisaniem kompilatorów?

Nim
źródło
Trwałość pytań, na które odpowiedzi zawierają krótkie cytaty ze standardu, powinna być wystarczającym dowodem na to, że lektura nie jest warunkiem korzystania z języka ... (pod warunkiem, że masz gdzie się odwrócić, kiedy utkniesz)
Shog9

Odpowiedzi:

16

Nie - bez tego możesz sobie dobrze poradzić

Będziesz jednak miał znacznie głębsze zrozumienie, jeśli poświęcisz trochę czasu, aby się tego nauczyć. Być może skorzystaj z referencji z tych pytań, które Cię niepokoją, i ucz się naraz małego kawałka.

Gary Rowe
źródło
8

Jeśli chcesz kłócić się o semantykę języka i standardese, standard jest bardzo ważny. (Nie mam na myśli to całkowicie lekceważeniem.) Jeśli tylko chcesz dostać pracę wykonaną w tym językowych (w porównaniu z językiem), to jest o wiele mniej.

Standard może zawierać przyzwoite odniesienie do standardowej biblioteki (nie tyle w przypadku samego języka), kiedy będziesz się z nim czuć swobodnie, ale waham się, czy polecić korzystanie z niego w ten sposób. Wydaje się, że większość ludzi radzi sobie lepiej z innymi materiałami. To powiedziawszy, najczęściej sięgam do standardu, kiedy muszę coś sprawdzić w stdlib.

Jednak czytanie projektów i dokumentów komitetu jest jednym ze sposobów, aby być na bieżąco z C ++ 0x - w rzeczywistości jest to obecnie jeden z niewielu sposobów.

W przypadku SO i innych forów waham się zacytować standard, chyba że wydaje się, że plakat wyraźnie i zdecydowanie skorzysta - być może poprosili o to lub myślę, że domyślnie tego oczekują. W większości przypadków, a zwłaszcza w przypadku programistów początkujących w C ++, cytowanie go zwykle nie pomaga.

Fred Nurk
źródło
Jeśli ktoś chce wiedzieć, co powinien zrobić język, Standard jest nieoceniony. Jeśli chcą wiedzieć, dlaczego kompilator coś robi, często jest to bardzo przydatne. W przypadku innych pytań nie tyle.
David Thornley
1
@DavidThornley: Trudno jest ocenić po tak długim przyzwyczajeniu się do samodzielnego czytania standardu, ale zdecydowanie wydaje się, że większość ludzi uważa, że ​​teksty takie jak TC ++ PL są bardziej przystępne, nawet jeśli chcą dowiedzieć się, co powinien zrobić język.
Fred Nurk
1
@Fred Nurk: Prawie wszystko jest bardziej przystępne niż Standard. Chciałem odpowiedzieć na pytania dotyczące SO i tym podobnych, ale nie byłem tego pewien. Dodaje trochę autorytetu, gdy ludzie cytują cplusplus.com i inne źródła.
David Thornley
@DavidThornley: Bardzo rzadko cytuję takie witryny (w szczególności cplusplus.com ma zbyt wiele problemów jak na mój gust), ale w przypadku większości plakatów na SO wydają się one również bardziej przydatne, nawet z błędami, niż standardowe - i są łatwe dostępny online jest niestety dużą częścią tego.
Fred Nurk
@Fred, to interesujące wiedzieć, zawsze myślałem, że cplusplus to dobra referencja (minusem jest ich źródło reklamy - co jest bardzo nieodpowiednie!), Teraz będę musiał pamiętać o odsyłaczu do referencji sgi.
Nim
6

Powinieneś mieć go do dyspozycji w celach informacyjnych, ale nie sądzę, żeby ktokolwiek oprócz jego autorów przeczytał całość ... nawet jeśli tak (pracują w grupach skupiających się na obszarach, więc wątpię w to).

Powodem, dla którego powinieneś go mieć, jest to, że czasami na pytanie dotyczące poprawności kodu można odpowiedzieć tylko poprzez odwołanie się do standardu.

Edward Strange
źródło
3
W większości sytuacji nie potrzebujesz tego. To, czego potrzebujesz, opisano w innych książkach. Tylko wtedy, gdy dojdziesz do tych skrzynek narożnych lub nigdy nie użyjesz narożników języka, musisz sprawdzić definicję w standardzie (i zwykle istnieje alternatywa dla używania narożników w języku). Pozostaw standard dla programistów kompilatora, a główny programista może dogadać się z innymi nieformalnymi tekstami.
Martin York
2

Prawdopodobnie ważniejsze jest, aby wiedzieć, gdzie jest standard i wiedzieć, kiedy sprawdzić.

Jeśli nic więcej, należy okresowo sprawdzać, aby upewnić się, że przestrzegasz najnowszej wersji i nie dopuściłeś do zmiany kodu.

ChrisF
źródło
2

W dużym zespole na ogół powinieneś mieć jedną (ale zwykle nie więcej) osobę, która zna standard co najmniej dość dobrze, aby mógł on robić takie rzeczy, jak rozstrzyganie wszelkich argumentów / pytań dotyczących takich rzeczy, jak to, czy określony kod jest zgodny z wymaganiami standardu.

Realistycznie jednak odpowiedzi te muszą zostać złagodzone osądem i doświadczeniem. (Obecny) standard mówi, że exportjest słowem kluczowym i mówi, co robi. W rzeczywistości po prostu nie działa w ten sposób z większością kompilatorów. Podobnie, w wielu przypadkach, jeśli masz trzy osoby nie zgadzając się o jakiegoś konkretnego kodu i co średnia może powiedzieć o tym, że może być oznaką, że kod może wymagać przepisania być bardziej proste.

W tym samym czasie większość zespołów wykona większość pracy na jednej platformie, a posiadanie standardowego (i kogoś, kto jest przynajmniej dość dobrze z nim zaznajomiony), aby sprawdzić, czy to, co robisz, nie jest zbyt ściśle związane z tą platformą, z pewnością może być przydatnym.

Jerry Coffin
źródło
„Nie więcej” jest prawdopodobnie ważne - chyba że chcesz spierać się między ekspertami o interpretację standardu <g>
Steve314
2

Zarabiam na chleb jako programista C ++ w sumie od około 4 lat, nie czytając standardu. W rzeczywistości przez pierwsze dwa lata nie czytałem nic więcej poza C ++ Primer autorstwa Stan Lippman i artykuły MSDN. Jest więc możliwe - obawiam się, że większość osób tworzących kod C ++ nawet nie przeczytała tak podstawowych dzieł, jak Effective C ++ i in. które sam odkryłem dopiero później.

IMHO, aby być dobrym programistą C ++, należy zrozumieć wewnętrzną logikę języka (ów) (jak zauważa Scott Meyers, C ++ dotyczy około 4 różnych języków) oraz typowe idiomy i pułapki, i zawsze być gotowym do dalszego uczenia się. Czytanie wątków na temat SO może wiele nauczyć o przypadkach narożnych, w których z kolei warto przeczytać odpowiednie części normy, jeśli ktoś naprawdę chce głębiej kopać. Ale przeczytanie całości jest prawdopodobnie rzadko konieczne dla większości z nas.

Péter Török
źródło
Dobrze, że istnieją niezbędne książki, które są o wiele bardziej istotne (dla większości programistów, którzy nie piszą kompilatorów) niż standardowe. +1 - ale jest sporo „niezbędnych” książek.
Steve314
@ Steve314, rzeczywiście - rozpoczęcie ich wymieniania nie pomogłoby jednak odpowiedzieć na to konkretne pytanie. Ale teraz dodałem link do odpowiedniego wątku na SO.
Péter Török
@ Péter - miły akcent, ale moim nieopisanym punktem było to, że żadna z „niezbędnych” książek nie jest tak naprawdę niezbędna. Większość programistów C ++ powinna przeczytać kilka tytułów z tej listy, ale wszystkie z nich? Mało prawdopodobne. Nawet jeśli tak, wątpię, czy naprawdę mógłbyś zachować całą tę wiedzę. „Effective C ++” znajduje się na mojej liście „jeszcze nie przeczytałem”, więc oczywiście uważam go za niezbędną książkę.
Steve314
@ Steve314, nie miałem na myśli, że trzeba je wszystkie przeczytać - ja też nie, a niektóre z nich przeczytałem, ale nie byłem pod wrażeniem :-) Niektóre z nich nakładają się na siebie, więc jest to kwestia osobistego gustu i szansy, którą deweloper spotyka jako pierwszy i / lub którą określa jako „niezbędny”. Uważam, że ważną rzeczą jest to, że istnieją pewne popularne idiomy, których należy przestrzegać, i częste pułapki, których należy unikać, i należy wiedzieć o większości z nich, a najmniej bolesnym sposobem na poznanie ich jest (niektóre) z tych książek .
Péter Török
Oczywiście tak naprawdę nie będę wiedział, jak ważne jest, dopóki go nie przeczytam.
Steve314
1

„Znajomość standardu” jest kwestią stopnia i niekoniecznie oznacza zapamiętywanie oryginalnego dokumentu.

Dokument normatywny został opracowany tak, aby był autorytatywny - niekoniecznie dostępny. Istnieje wiele jednoetapowych źródeł, które są znacznie bardziej dostępne. To prawda, jest w tym trochę chińskich szeptów, ale rzadko jest to duży problem - z pewnością na poziomie usuniętym o jeden krok.

Pełne ujawnienie - muszę to powiedzieć - nigdy nie przeczytałem standardu. Chociaż zapewne postaram się uzyskać pełny dokument w C ++ 0x po jego sfinalizowaniu.

EDIT oczywiście, jeśli Stroustrup wyda nowe wydanie „The C ++ Programming Language”, mogę się na to zgodzić ponownie.

Steve314
źródło
1

Kiedy programowałem w C ++, często odwoływałem się do standardu językowego, aby uzyskać informacje o standardowych funkcjach biblioteki. Standardowa biblioteka C ++ jest dość duża i uznałem, że standard językowy jest najwygodniejszym źródłem.

Kevin Cline
źródło
1
łał, naprawdę? Zawsze uważam, że zasoby online, takie jak cplusplus, są niezbędne w tym sensie ...
Nim
1

Mógłbym przysiąc, że już odpowiedziałem na to pytanie, ale nie mogę go znaleźć. Zasadniczo C ++ różni się od Java, ponieważ ma zawierać dziury w specyfikacji, które inne specyfikacje platformy mogą wypełnić (np. POSIX, specyfikacja ABI architektury lub kompilator). Dlatego odpowiadając na pytania w witrynach takich jak StackOverflow, często pojawia się specyfikacja wskazująca, że ​​to, że coś działa na jednym kompilatorze, nie oznacza, że ​​działa wszędzie. Innymi słowy, wiele powodów odwoływania się do konkretnych specyfikacji podczas pracy z C ++ polega na dokładnym wyjaśnieniu, jak przenośne jest określone użycie tego języka.

Ken Bloom
źródło