Saturday, March 12, 2016

Обзор книги "JavaScript: The Good Parts"

Сегодняшняя статья посвящена обзору замечательной книги по языку Java Script автора Дугласа Крокфорда JavaScript: The Good Parts
Мое знакомство с этой книгой началось после того, как я спросил у коллег по работе, что бы такого почитать по JavaScript, чтобы понять его более глубоко. И одним из источников, который мне порекомендовали, была данная книга. В этой книге есть как свои плюсы и минусы. Но на них я бы хотел остановиться более подробно.
Плюсы:
  • Небольшой объем книги
  • Достаточная глубина подачи большей части материала
  • Полезные рекомендации по языку
  • Интересные примеры

Минусы:
  • Навязывание автором своего мнения
  • Лишние главы, которые можно было опустить
  • Некоторые части книги объяснены поверхностно
  • Диаграммы
Давайте продвигаться от позитивного. Так почему же все-таки стоит почитать эту книгу? Первая причина  это достаточная известность автора данной книги, а также размер книги (всего около 150 страниц). Как разработчик .NET, я достаточно продолжительное время не встречал книг, которые могут при таком маленьком количестве страниц передать нужную информацию и заинтересовать в дальнейшем развитии себя в роли JS (JavaScript) разработчика. Но Дугласу Крокфорду это удалось. Кроме отличной книги, у него есть не менее замечательный курс на Plurasight, который носит такое же название, как и книга JavaScript the Good Parts. Если вам интересен язык JavaScript, рекомендую посмотреть этот курс. Тем более, не думаю, что 1287 человек, которые проголосовали за этот курс на Plurasight могли ошибиться о оценить его случайно на 4.5 рейтинга.
Вторая причина, которую я указал – глубина подачи материала. Часть материала описана просто замечательно, но некоторые моменты описаны очень поверхностно. Например, по книге вы не поймете отношение между объектами, прототипами и функциями. Слишком уж мало информации об этом дает автор. Но другие аспекты  как работает оператор new, как правильно использовать тот или иной подход, как работают сравнения – подано очень неплохо. Как видите, со второго пункта я плавно перешел в третий, а именно: почему стоит использовать синтаксис языка JS и какие подводные камни нас могут ожидать. Пример таких предупреждений и рекомендаций:
  • JavaScript arrays aren’t proper arrays with array-like performance, they are weird dictionaries;
  • variables have function not block scope;
  • unless declared inside a function variables have global scope;
  • there is a difference between the equality == and === (and similarly the inequality operators). The short one coerces and then compares, the longer one does not, and is thus preferred.

У автора же есть целых две главы, в которых он это описывает. Идут они как дополнения и называются Awful Parts и Bad Parts. Думаю, по названию более-менее понятно, что там описано.
Ну и последний пункт – это интересные примеры. Мне, например, нравятся книги, где приводится пример, а затем раскрывается, что в этом примере не так и почему стоит использовать другое описание. Также приводятся примеры с описанием того, к чему такой код может привести. Правда, таких примеров очень мало; в видеокурсе автора их намного больше, и раскрыты они намного глубже.
Негативные моменты книги
Теперь пора пройтись по негативным моментам, которые встречаются в книге. Их не так и много, но они, к сожалению, присутствуют. Например, рекомендация не использовать “i++”, а использовать вместо инкрементной операции такой подход: “i += 1”. По мнению автора, такой подход делает “код чище”. К сожалению, подход, который описывает автор, ведет к другой проблеме, которая известна в мире разработке как магические числа. Понимаю, что некоторые понятия, как классические паттерны, DDD паттерны по боку для JS девелоперов, но мне кажется, что подход с магическими числами  неудачный подход, тем более, для такого примитивного сценария. Еще небольшое смущение вызвала рекомендация автора по поводу void. А так в целом рекомендации больше позитивные, чем негативные, что подчеркивает огромный опыт автора в этой области.
Второй пункт, который я описал и который мне не понравился, – так-это то, что некоторые части книги, или даже целые главы, можно было просто убрать. Я считаю, что вместо регулярных выражений, которые написаны ну очень плохо, да и больше отталкивают от их использования, чем помогают, плюс примеры не несут по себе никакой информативности, лучше было бы больше внимания уделить ООП. А такие дополнения, как LSLint в дополнение C и JSON в дополнение E, можно спокойно выбросить. Дополнение С является рекламой разработки автора. А информация о JSON описана ну очень скудно, да и сам пример, мягко говоря, никакой.
Так как я и писал, некоторые моменты в книге плохо раскрыты. А именно: ООП как таковое. Лучше эту книгу в данном случае читать после какой-то другой книги в которой эти моменты рассмотрены намного лучше. Считаю, если бы эту книгу немного переделать и убрать лишнее, то у нас будет + 30-50 новых страниц, и объем книги будет 180-200 станиц, но зато с покрытием всех тем.
И последний негативный момент – огромное количество диаграмм.
Если честно, то меня очень смущает уместность этих диаграмм, так как люди не запоминают обычно их в таком большом количестве. Странно, что OReilly пропустили такое большое количество диаграмм. Мне понравился комментарий одного читателя о блоках-картинках в книге.
“A large portion of the book is occupied by flowcharts describing the syntax of the language. (E.g., one page is a flowchart describing how to format floating-point numbers.) If I were a finite-state automaton who wanted to know how to recognize floating-point numbers, this would be useful for me. Since I am a human being who can already read and write floating-point numbers, it's an inexplicable waste of space. I'm baffled that the author thought such diagrams served any purpose, and that O'Reilly allowed him to include them and assigned someone to lay them out for publication. If anyone can explain this to me I'd be grateful.”
Итоги
Хотелось бы кратко прорезюмировать свои впечатления от данной книги. Я бы ей поставил оценку 4 из 5-ти и рекомендовал бы к прочтению ввиду краткости и лаконичности подачи материала, а также за то, что автор дает дельные советы, чего и когда нужно избегать. А так как я начал читать эту книгу после просмотра курса этого автора на Plurasight, то она стала для меня отличным дополнением. Я обычно не многим книгам даю лестные отзывы, но эта, наверное, будет исключением. Вердикт – must read

No comments:

Post a Comment