Стоит ли читать спецификацию языка? [закрыто]


18

Мне интересно, стоит ли читать спецификации языка / стандартные документы (например, спецификацию языка Java ), если вы не собираетесь писать компилятор / интерпретатор для языка или что-то подобное? Я понимаю, что чтение такой книги не должно быть первым знакомством с языком, но это может быть отличным способом узнать более мелкие детали этого.

Вы когда-нибудь беспокоились, и должны ли другие?


4
Спецификация языка не предназначена для чтения от корки до корки, это просто ссылка.
Махмуд Хоссам

Ответы:


18

По сути, все сводится к одному довольно простому вопросу: хотите ли вы авторитетного, детального знания языка или вы счастливы, зная его достаточно хорошо, чтобы использовать его, понимая, что, вероятно, есть части, которые вы не знаете хорошо, и, возможно, другие части вы вообще не знаете?

По сути, есть некоторые люди, которые, кажется, почти рождены, чтобы быть «языковыми адвокатами» - они не будут (не могут) отдыхать, пока есть даже несколько закоулков на языке, который они не знают и / или понять. Многие из них тяготеют к относительно простым языкам просто потому, что изучение более сложных языков на этом уровне детализации практически невозможно для любого человека.

Для большинства программистов это было бы пустой тратой времени - они вполне счастливы и продуктивны, зная достаточно языка, чтобы иметь возможность использовать его (разумно) хорошо. Кроме того, им просто все равно. Язык является инструментом, и пока они могут использовать его достаточно хорошо для своих целей, тот факт, что есть другие вещи, которые они не знают, в значительной степени не имеет значения.


3
+1 за последний абзац. Это то, что должны понимать большинство программистов - хотят ли они быть Джоном Скитом (который знает все о C #, но почти ничего о чем-либо еще - не видел, чтобы он отвечал на вопросы SQL, например), или просто пользователем, но многих других технологий что делает практику более практичной, а жизнь интереснее.

2
@Developer Art: Но Джон Скит - бог;)
Анто

1
@Sbi: Я бы согласился, что язык (и его сложность) явно является основным фактором. Стандартный размер не обязательно много значит, хотя. Например, часть стандарта C ++, которая охватывает собственно язык, имеет длину всего ~ 400 страниц, тогда как спецификация языка Java составляет ~ 500. Хотя я на самом деле не думаю, что Java - это почти «очищенный» C ++, о котором некоторые утверждают, я вряд ли верю, что он на 25% сложнее, чем C ++.
Джерри Коффин

3
@Developer Art - немного резок о Джоне Ските, у него есть значки для всего (включая SQL!)
Шуг

2
@dietbuddha: Я, конечно, не хочу оправдывать невежество, но, честно говоря, для большинства людей вопрос не в том, должны ли они чему-то учиться, а в том, на что им следует потратить свое время. Что принесет больше пользы программисту C ++: изучение нового алгоритма или изучение точных правил, используемых для выбора перегруженной функции для вызова для данного набора параметров? Имейте в виду, что если у него обычно есть много причин для ухода, что называется, он, вероятно, злоупотребляет перегрузкой в ​​любом случае!
Джерри Гроб

12

Никогда

Никогда не следует читать спецификацию языка.

Это пустая трата времени.

Хорошие программисты могут набирать произвольный код, задавать вопросы о переполнении стека и использовать IDE для написания кода, который не очень часто падает.

Не тратьте время на понимание языка. Просто найдите отличную IDE с хорошим автозаполнением. Задайте много ТАК вопросов. Это все, что нужно.


3
Никогда? Даже если вы пишете интерпретатор / компилятор?
Greyfade

1
Ты сделал это! Вот как это работает. ;)
x4u

4
@greyfade: никогда. Никогда не верь фактам. Придерживайтесь предположений.
С.Лотт

6
что в этом тонкого?
Aditya P

2
Я честно не мог сказать, был ли это сарказм или нет. : P
greyfade

5

Для Java языковая спецификация предназначена для того, чтобы дать определенный ответ на любой вопрос о значении данной исходной конструкции. Читать его как ученика не рекомендуется - вместо этого хороший учитель показывает вам все ловушки и что они на самом деле значат.

Для опытного разработчика Java Puzzlers действительно хорош для тренировки понимания темных случаев.


2

Общий ответ: да, это стоит.

Если вы хотите написать переносимый код, это обязательно.

Для некоторых языков это просто неизбежно, например, Ada или Perl.

Более того, если вы не только пишете код, но и читаете код других, вам в конечном итоге придется обратиться к спецификации.


2

Возможно, это только я, но этот вопрос не имеет смысла. Понимание используемых вами инструментов является отличительной чертой профессионала. Чем глубже понимание, тем лучше ваша способность использовать инструмент. Для меня это выбор между дилетантом или профессионалом.

Всякий раз, когда я изучаю новый язык, первое, что я ищу, - это спецификация.

Я прочитал спецификации для ANSI C, C ++, Java, Scheme, Python и Javascript. Я забыл большинство деталей C, C ++ и Java только потому, что я не часто использую эти языки. Прочитав спецификации, я стал лучшим программистом, потому что знал, как лучше использовать язык.


1

В целом может быть полезно понять некоторые сложные моменты, с которыми вы сталкиваетесь время от времени.

А если серьезно, если для овладения языком требуется, чтобы вы ознакомились с его подробной спецификацией, то, возможно, язык неудачный. Подобно общему высказыванию, если вам нужна документация для вашего приложения, то она плохо спроектирована.


Именно поэтому я держу в руках копию ECMA-262.
Greyfade

1

Я нахожу это полезным, когда вы сталкиваетесь с тем, какой момент, но мне трудно сохранить это как простое чтение. Однако, когда я использовал после того, как я ничего не понял, это всегда сильно способствовало моим знаниям.


1

Если вы программист на этом языке, и вам нужно уметь извлекать из него все тонкие нюансы, да. Есть четкие доходы от инвестиций времени в этом случае .

В противном случае нет. Если вы не собираетесь использовать знания, они, конечно же, не останутся с вами. Спецификации языка - самая скучная вещь, которую только можно себе представить.


1

Я обычно не помещаю большой запас в Стандарт. Простой факт заключается в том, что Стандарт не скажет вам не использовать исключения в качестве потока управления. Это не скажет вам не использовать Singletons. Он не расскажет вам, как разработать поддерживаемый интерфейс класса. Он не скажет вам, почему ваше приложение падает, если вы не знаете, почему. У вас может быть самая четко определенная программа в мире, и она все равно будет ужасной.

На мой взгляд, простой факт заключается в том, что подавляющее большинство задач программирования заключается не в том, чтобы заставить язык делать то, что вы хотите, а в том, чтобы знать, что правильно. До тех пор, пока вы знаете основные языковые функции, важно знать, как их использовать.


1

Это определенно стоит прочитать. Некоторые языки, такие как C ++, Java и Python, достаточно сложны, так что, прочитав спецификацию языка, вы узнаете много нового об этих языках и обо всех изощренных синтаксических / семантических приемах, которые у них есть.

Я читал спецификацию языка Scheme R5RS на автобусе до колледжа, потому что он был коротким и компактным, и я изучил весь синтаксис и все основные функции, доступные.


0

Часть doc.python.org, помеченная как «справочник по языку», чрезвычайно полезна. Глава "Модель данных" особенно так.


0

Я думаю, если программирование на этом языке - ваша работа, и вы хотите серьезно относиться к своей работе, вам следует прочитать спецификацию языка, особенно когда ее относительно легко и быстро читать и понимать, как в спецификации языка Java, хотя она recentlyпотеряла много это простота с дженериками.

Но также, если вы планируете изучать и в конечном итоге освоить новый язык, который вы еще не знаете, может быть очень полезно прочитать спецификацию этого языка, прежде чем тратить на него свое время. Я уверен, что если бы больше разработчиков C ++ читали и пытались понять аннотированное справочное руководство C ++ до того, как начали его использовать, многие бы испугались этого.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.