Чи варто читати специфікацію мови? [зачинено]


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!)
1111

2
@dietbuddha: Я, звичайно, не хочу вибачити від невігластва, але, чесно кажучи, для більшості людей це менше питання, чи варто їм чомусь навчитися, ніж того, на що вони повинні витратити свій час на навчання. Що більше піде на користь програмісту на C ++: вивчити новий алгоритм або вивчити точні правила, які використовуються для вибору, яку перевантажену функцію викликати для заданого набору параметрів? Майте на увазі, що якщо у нього зазвичай є багато причин для піклування, які викликаються, він, мабуть, зловживає перевантаженням все одно!
Джеррі Труну

12

Ніколи

Ніколи не слід читати специфікацію мови.

Це тотальна втрата часу.

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

Не витрачайте час на розуміння мови. Просто знайдіть чудовий IDE з хорошим автозаповненням. Задавайте багато запитань. Це все, кому потрібно.


3
Ніколи? Навіть якщо ви пишете перекладача / упорядника?
greyfade

1
Ти впорався! Ось як це працює. ;)
x4u

4
@greyfade: Ніколи. Ніколи не довіряйте фактам. Дотримуйтесь припущень.
С.Лотт

6
що тонка в цьому?
Адітя Р

2
Я, чесно кажучи, не міг сказати, був це сарказм чи ні. : P
greyfade

5

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

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


2

Загальна відповідь: Так, це варто.

Якщо ви хочете написати портативний код, це обов'язково.

Для деяких мов це просто неминуче, наприклад, Ада або 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.