Czy warto przeczytać specyfikację języka? [Zamknięte]


18

Zastanawiam się, czy warto czytać specyfikacje językowe / standardowe dokumenty (np . Specyfikację języka Java ), jeśli nie zamierzasz pisać kompilatora / tłumacza dla tego języka lub czegoś podobnego? Rozumiem, że czytanie takiej książki nie powinno być pierwszym kontaktem z językiem, ale może być świetnym sposobem na poznanie drobniejszych szczegółów.

Czy kiedykolwiek się martwiłeś, a inni powinni?


4
Specyfikacja języka nie powinna być czytana od deski do deski, to tylko odniesienie.
Mahmoud Hossam

Odpowiedzi:


18

Zasadniczo sprowadza się do jednego dość prostego pytania: czy chcesz mieć autorytatywną, szczegółową znajomość języka, czy też jesteś szczęśliwy wiedząc, że jest wystarczająco dobry, aby go używać, zdając sobie sprawę, że prawdopodobnie są części, których nie znasz dobrze, a być może inne części, których w ogóle nie znasz?

Zasadniczo są ludzie, którzy wydają się prawie urodzeni jako „prawnicy językowi” - nie będą (nie mogli) odpoczywać, dopóki istnieje kilka zakamarków w języku, którego nie znają i / lub rozumiem. Wiele z nich skłania się ku względnie prostym językom po prostu dlatego, że nauka bardziej złożonych języków na tym poziomie szczegółowości jest często prawie niemożliwa dla jednej osoby.

Dla większości programistów byłoby to całkowitą stratą czasu - są dość szczęśliwi i produktywni, znając wystarczająco dużo języka, aby móc go (rozsądnie) dobrze używać. Poza tym po prostu ich to nie obchodzi. Język jest narzędziem i tak długo, jak potrafią używać go wystarczająco dobrze do swoich celów, fakt, że istnieją inne rzeczy, o których nie wiedzą, jest w dużej mierze nieistotny.


3
+1 za ostatni akapit. Właśnie to większość programistów powinna zdać sobie sprawę - czy chcą być Johnem Skeetem (który wie wszystko o C #, ale prawie nic o niczym innym - nie widział na przykład, jak odpowiada na pytania SQL), czy tylko użytkownikiem, ale wieloma innymi technologiami dzięki czemu praktyka jest bardziej praktyczna, a życie ciekawsze.

2
@Developer Art: Ale Jon Skeet jest bogiem;)
Anto

1
@sbi: Zgadzam się, że język (i jego złożoność) wyraźnie jest głównym czynnikiem. Standardowy rozmiar niekoniecznie wiele znaczy. Na przykład część standardu C ++ obejmująca właściwy język ma tylko ~ 400 stron, podczas gdy specyfikacja języka Java wynosi ~ 500. Chociaż tak naprawdę nie sądzę, że Java jest prawie „wyczyszczonym” C ++, jak twierdzą niektórzy, nie sądzę, aby był o 25% bardziej skomplikowany niż C ++.
Jerry Coffin

3
@Developer Art - nieco ostry o Jonie Skeecie, ma odznaki za wszystko (w tym SQL!)
SHug

2
@dietbuddha: Z pewnością nie zamierzam usprawiedliwiać ignorancji, ale uczciwie, dla większości ludzi nie chodzi o to , czy powinni się czegoś nauczyć, niż o to , co powinni spędzać na nauce. Co przyniesie korzyść programistom C ++: nauka nowego algorytmu lub nauka dokładnych reguł używanych do wyboru, która przeciążona funkcja ma wywoływać dany zestaw parametrów? Pamiętaj, że jeśli zwykle ma wiele powodów, by się tym przejmować, prawdopodobnie i tak nadużywa przeciążania!
Jerry Coffin

12

Nigdy

Nigdy nie należy czytać specyfikacji języka.

To całkowita strata czasu.

Wielcy programiści są w stanie pisać losowy kod, zadawać pytania na temat przepełnienia stosu i używać IDE, aby w końcu napisać kod, który często nie ulega awarii.

Nie trać czasu na zrozumienie języka. Po prostu znajdź świetne IDE z dobrym autouzupełnianiem. Zadawaj dużo pytań SO. To wszystko, czego potrzebuje każdy.


3
Nigdy? Nawet jeśli piszesz interpretera / kompilatora?
greyfade

1
Udało wam się! Tak to działa. ;)
x4u

4
@greyfade: Nigdy. Nigdy nie ufaj faktom. Trzymaj się założeń.
S.Lott

6
co w tym jest subtelne?
Aditya P,

2
Szczerze mówiąc, nie wiedziałem, czy to był sarkazm, czy nie. : P
greyfade

5

W języku Java specyfikacja języka ma na celu dać jednoznaczną odpowiedź na każde pytanie dotyczące znaczenia danej konstrukcji źródłowej. Czytanie tego jako ucznia nie jest zalecane - zamiast tego dobry nauczyciel pokazuje wszystkie pułapki i ich znaczenie.

Dla doświadczonego programisty Java Puzzlers jest naprawdę dobry, aby nauczyć się rozumieć przypadki ciemnego rogu.


2

Ogólna odpowiedź brzmi: tak, warto.

Jeśli chcesz napisać kod przenośny, jest to obowiązkowe.

W przypadku niektórych języków jest to po prostu nieuniknione, np. Ada lub Perl.

Ponadto, jeśli nie tylko piszesz kod, ale także odczytujesz kod od innych, w końcu będziesz musiał odwołać się do specyfikacji.


2

Być może to tylko ja, ale to pytanie nie ma sensu. Zrozumienie używanych narzędzi jest znakiem rozpoznawczym profesjonalisty. Im głębsze zrozumienie, tym lepsza umiejętność korzystania z narzędzia. Dla mnie to wybór między byciem dyletantem lub profesjonalistą.

Ilekroć uczę się nowego języka, pierwszą rzeczą, której szukam, jest specyfikacja.

Przeczytałem specyfikacje dla ANSI C, C ++, Java, Scheme, Python i JavaScript. Zapomniałem większości szczegółów C, C ++ i Java tylko dlatego, że często nie używam tych języków. Po przeczytaniu specyfikacji byłem lepszym programistą, ponieważ wiedziałem, jak lepiej używać języka.


1

Zasadniczo przydatne może być zrozumienie pewnych trudnych chwil, które napotykasz od czasu do czasu.

Ale na poważnie, jeśli opanowanie języka wymaga zapoznania się ze szczegółową specyfikacją, być może język jest niefortunny. Podobnie jak w powszechnym powiedzeniu, jeśli potrzebujesz dokumentacji aplikacji, jest ona źle zaprojektowana.


Właśnie dlatego trzymam pod ręką kopię ECMA-262.
greyfade

1

Przydaje mi się, gdy natrafisz na chwilę, ale trudno mi ją zachować jako zwykłą lekturę. Jednak kiedy użyłem po tym, jak czegoś nie zrozumiałem, zawsze bardzo poszerzyłem swoją wiedzę.


1

Jeśli jesteś twardym programistą w tym języku i musisz być w stanie wycisnąć z niego każdy subtelny niuans, tak. Istnieją wyraźne zyski z inwestycji czasu w tej sprawie .

W przeciwnym razie nie. Jeśli nie wykorzystasz tej wiedzy, to na pewno nie będzie się z tobą trzymać. Specyfikacje językowe dotyczą najgłupszych rzeczy, jakie można sobie wyobrazić.


1

Zwykle nie umieszczam zbyt wiele akcji w standardzie. Prostym faktem jest to, że Standard nie mówi ci, abyś nie używał wyjątków jako kontroli. Nie powie Ci, abyś nie korzystał z Singletonów. Nie powie ci, jak zaprojektować interfejs klasy, który można utrzymać. Nie powie ci, dlaczego aplikacja ulega awarii, jeśli nie wiesz dlaczego. Możesz mieć najlepiej zdefiniowany program na świecie, a on nadal będzie przerażający.

Moim zdaniem prosty fakt polega na tym, że zdecydowana większość wyzwań programistycznych nie polega na zmuszaniu języka do robienia tego, co chcesz, ale wiedzeniu, co jest właściwe. Tak długo, jak znasz podstawowe funkcje języka, liczy się sposób ich używania.


1

Zdecydowanie warto to przeczytać. Niektóre języki, takie jak C ++, Java i Python, są na tyle złożone, że czytając specyfikację językową nauczysz się dużo o tych językach i wszystkich ich fantazyjnych sztuczkach składniowych / semantycznych.

Czytałem specyfikację języka Scheme R5RS podczas jazdy autobusem na studia, ponieważ była krótka i zwarta, i nauczyłem się całej składni i wszystkich dostępnych podstawowych funkcji.


0

Część doc.python.org oznaczona jako „odniesienie językowe” jest niezwykle przydatna. Szczególnie w rozdziale dotyczącym modelu danych.


0

Myślę, że jeśli programowanie w tym języku jest Twoim zajęciem i chcesz poważnie potraktować swoją pracę, powinieneś przeczytać specyfikację języka, zwłaszcza gdy jest on stosunkowo łatwy i szybki do odczytania oraz zrozumieć jak specyfikacja języka Java, mimo że ma recently straciła dużo to prostota z lekami generycznymi.

Ale także, jeśli planujesz uczyć się i ostatecznie opanować nowy język, którego jeszcze nie znasz, może być bardzo wnikliwe, aby przeczytać specyfikację tego języka, zanim zmarnujesz z nim swój czas. Jestem pewien, że gdyby więcej programistów C ++ przeczytało i próbowało zrozumieć C ++ Annotated Reference Manual, zanim zaczną go używać, wielu uciekłoby od niego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.