Путь веб-разработчика: JavaScript "не с того конца"

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


Такой подход, аналитический, срабатывает не со всеми и не всегда. У многих людей преобладает второй тип мышления, его ещё называют синтетическим. Можно очень долго объяснять им теоремы, а потом - очень долго заставлять решать задачи, можно ещё побить указкой или врезать журналом, но, даже разобравшись в теории, начать решать задачи для них будет весьма проблематично. Врач-синтетик, читая сотни книг по анатомии человека, так и не узнает какой орган где находится. Но, побывав на настоящей операции или поковырявшись в трупе, в теорию он вникнет гораздо быстрее. И программисты, кстати, говоря, не исключение.

Меня однажды спросили: "А как тебя угораздило програмистом работать?" В школе я, хоть и учился в физмате, хоть и понимал математику, терпеть всё это не мог. Программирование меня заинтересовало на опыте: в один день оно мне потребовалось, а в теории разбираться не было времени. Сейчас мне кажется, что, если бы моё знакомство с программированием началось с изучения типов данных, классов и объектов, методов, исключений и прочей вкуснятины, - вряд ли бы меня занесло сюда.

Хорошо это или плохо? Как обычно - ни то, ни другое. Это именно так, как должно быть. С одной стороны, синтетики часто будто бы на шаг впереди, овладевая практикой ещё до понимания теории. К тому же, они не ограничены рамками теорий, следовательно, имеют возможность добыть новые знания, которых теория не предусматривала. С другой стороны, часто им бывает гораздо сложнее учиться, ведь учителя в данном случае мало чем могут помочь, они могут подсказать пример, а знания приходится добывать самостоятельно. К тому же, в реальной жизни всегда существует опасность встретить некачественый пример, сделать неправильный вывод и, в результате, пойти неверным путём. Именно это часто происходит при познании JavaScript.

Поскольку люди, использующие его, в большинстве своём вообще не являются программистами, у тех, кто только начинает свой js-путь, создаётся в корне неверное о нём представление. И даже книги не приходят на помощь, ведь нормальную книгу, как и нормальную документацию по JavaScript, найти весьма проблематично.

Когда веб-разработчик впервые сталкивается с js? Мне, если не ошибаюсь, потребовалось сделать слайдер картинок со стрелочками "влево-вправо". Что мне могло для этого потребоваться? Судя по всему, это были основы работы с DOM, а так же обработчики событий. Кажется, я прописал вызов глобальной функции подмены картинок в атрибут onclick прямо в html тег этих стрелочек. А функцию эту описал внизу страницы, нафигачив вокруг неё глобальных переменных. И был счастлив.

Из-за таких вот прецедентов и складывается ощущение, что JavaScript - не язык программирования, а способ вставлять финтифлюшки на сайт. Когда верстальщику показывают JQuery, который сам по себе является объектно-ориентированным, это впечатление крепнет. Ведь теперь финтифлюшки стало вставлять гораздо удобнее! Это и есть не тот конец javascript, который всё портит.

Сейчас, когда JavaScript потребовался мне как основной программный язык и мне пришлось познакомиться с ним поближе, я понял, что не использовал раньше и сотой доли его возможностей. В связи с этим верстальщикам хочу порекомендовать стать хотя бы немножко программистами. Программистам, которые знакомы с js поверхностно, но хотят вникнуть, советую книгу Дугласа Крокфорда, которая называется JavaScript: The Good Parts (на русском - JavaScript: сильные стороны). Я же в этом разделе попробую делиться полезным опытом, приобретённым как из этой книги, так и из личной практики.