Толковые книжки, которые мне очень понравились:
1. JavaScript: The Definitive Guide, 5th Edition By David Flanagan (есть в переводе, www.ozon.ru/context/detail/id/3881091/) — читать обязательно и первым делом, лучшая книга и справочник по JS.
2. Pro JavaScript Techniques by John Resig (да-да, это именно тот клёвый дядька, который сделал jQuery).
3. Простенькая интересная книжка — DOM Scripting Web Design with JavaScript and the Document Object Model by Jeremy Keith (как правильно управлять DOMом :) )
Поддержу рекомендации первых двух книг. Книга Фланагана вообще по моему единственная доступная на русском книга которая рассказывает о JavaScript именно как о языке.
Мое мнение, сугубо imho:
1) прочесть книжку по основам JS
2) прочесть книжку по ООП ( языконезаисимую )
3) полазить по zvon / xpoint.ru / xhtml.ru / rsdn.ru почитать основные фишки и проблемы у людей
4) начать писать задание, ибо практика ставит вопросы и находит на них ответы
задания ставятся… вопрос в том что хочется форсировать. у меня ощущение что я уже сейчас задания ставлю чуть сложнее чем он может сделать и соответственно в голове каша получается.
1, 2. А можно конкретный пример? Причем первое чтоб можно было посмотреть как можно с большим отрывом от штмля?
Хм, очень хороший вопрос )
Если я скажу по себе, то в качестве п.1 Это был справочник по JS + JS core ref :)
Знаю, что сейчас множество таких книжек есть. У меня народ очень хорошо отзывался про какуюто издательства O'Relly если мне не изменяет память. попробую потом узнать что за книжка.
По п.2. Этого очень много. Есть такая книженция праямо так и называется «Основы О.О.П.».
Я это читал людям по ( не поверите :) ) Wikipedia :)
Раз уж поднялась такая тема. Может кто скажет стандартные скрипты, который должен первым реализовать начинающий яваскриптер. Hello, world — понятно, калькулятор — понятно. Что еще?
мне важно жаваскриптеру важно пониманать различия между свойствами дом-объектов. К примеру почему браузеры быстрее отрисовывают изменение цвета у элементов, нежели изменение их геометрического размера.
Настоящий JavaScript-ер должен разбираться не только в DOM и Ajax. Он должен, например, без запинки написать функцию add которая складывает a и b и вызывается так: add(a)(b)
хм… забавный пример :) Но видимо я не настоящий жаваскриптер, ибо думал аж 15 секунд :(
А есть у него практическая сторона?
ЗЫ С моей точки зрения очень важно знать тонкость работы с объектами в ЖСе — я уверен что я их сам понимаю далеко не полностью. При этом многие не понимают их вообще и пытаются с ними работать совсем не так, как должно.
Возможно. Но моё слабое место — понимание ООП. Я пока не написал большой жаваскриптовый клиент не понял его плюсов. Сейчас вроде понял и пытаюсь осознать поглубже. Ибо у меня в голове только жаваскриптерская его версия, которая из-за окружения достаточно специфична получается даже в небольших скриптах.
А что же я на интервью тогда буду спрашивать? :)
Начинаю я обычно с азов:
Write the result of these expressions:
6 / «3»
«2» * «3»
4 + 5 + «px»
«$» + 4 + 5
«4» — 2
«4px» — 2
7 / 0
typeof null
typeof {}[0]
typeof («4px» — 2)
parseInt(«09»)
5 && 2
2 && 5
5 || 0
0 || 5
Сразу видно человек действительно знает язык или просто нахватался верхов.
Я считаю, что если человек пишет много скрипта, то он рано или поздно столкнётся и с «$» + 4 + 5, и с parseInt(«09»). Ответить на эти вопросы занимает минут 5, зато потом я знаю примерный уровень человека.
P.S. За 8 месяцев интервью ответил на все вопросы всего один человек.
Если бы я встретил как работодатель программиста, который такие функции пишет — этот программист пошёл бы искать другую работу. Почему понятно, надеюсь?
А читать надо нетскейповскую документацию — там всё прозрачно описано.
Страдает ясность и читаемость программ. Очень сильно, причём. О замыканиях, по хорошему, знают только те кто прошёл школу Perl, а таких нынче нету. Когда я пишу callback на JS — всё время себя контролирую на предмет использования замыканий, ведь это, по сути, глобальные переменные. И утечки памяти, кстати. Я, например, не знаю, что будет с памятью:
function a1(a){
return function(b){return a+b;}
}
var s='1';
alert('Check memory 1!');
for(i=0; i<20; i++)s=s+s;
alert(s.length);
Ну и в каком месте в вашей программе будут проблемы с памятью? Вызов a1(s)(s) создает, выполняет и уничтожает функцию-замыкание вместе с ее скопом. В чем проблема?
> Программа должна быть прозрачной кристально и не быть рассчитанной на очень хорошего специалиста
Ну так… давайте будем избегать ООП — там тоже не совсем прозрачно и далеко не каждый понимает, что происходит на самом деле, когда в коде встречается foo.bar().
> О замыканиях, по хорошему, знают только те кто прошёл школу Perl, а таких нынче нету.
О замыканиях, по-хорошему, знают только те, кто прошел школу Lisp, а вот таких, действительно нынче нету. Но это не значит, что замыкания — плохой инструмент. Он просто слишком хорош для современных программистов.
Какая разница в каком? Google пишет (http://code.google.com/apis/maps/documentation/#Memory_Leaks) что использует closures, и это приводит к утечкам памяти, и я вверю ему.
Требование прозрачности работы программы — обосновано практикой и к Вашему примеру отношения не имеет. Если программа написана просто и понятно, для её развития можно привлекать менее квалифицированных программистов.
По третьему пункту мы согласны — замыкания использовать нельзя?
Если бы Вы немножко покопались в данном вопросе, то узнали бы, что к утечкам памяти приводят не замыкания сами по себе, а кривой сборщик мусора в trident aka IE, который не освобождает память, занимаемую DOM-элементами, если на DOM-элемент повесить обработчик события, который является замыканием, в скопе которого есть ссылка на этот DOM-элемент. Решается этот момент тривиально: путем явного удаления обработчиков сотыбий для DOM-элементов при unload текущей страницы.
Замыкания использовать можно и нужно, потому что они позволяют существенно сократить объем программы, а, как известно, при прочих равных условиях большую ценность имеет та программа, в которой меньше кода.
Более того, поняв суть замыканий, можно писать офигенно элегантные вещи на том языке, который поддерживает концепцию «замыканий» и, как следствие, «продолжений».
Если Вы в своей практике не желаете развивать «менее квалифицированных специалистов», то грош цена Вам и вашей компании как работодателю.
Одним словом, если Вы не любите замыкания, то Вы просто не умеете их готовить. ;-)
P.S. Nothing personal, меня просто взбесила Ваша фраза «Если бы я встретил как работодатель программиста, который такие функции пишет — этот программист пошёл бы искать другую работу. Почему понятно, надеюсь?»
В данном случае я боюсь кривой дорожки — уйдет юный девелопер в эти библиотеки и будет именно их использовать, вместо того чтобы самому _уметь_ писать. Вот чуть попозже — да, я согласен что их стоит почитать.
По большому счету у нас тоже есть задания которые могут быть сделаны абы как :)
Вопрос в том, на что изначально ориентировать человека. Можно на поддержку, а можно и на разработку. Во втором случае вместе с ЖС идет вбивание в головы концепций, паттернов и прочих страшный вещей. Ну и прикладное, типа систем контроля версий и тракеров — учета задач.
По-моему, если «вбивать» эти самые «страшные вещи» без отрыва от земли, закрепляя практикой, то ничего страшного не будет. Особенно, если это все применяется пусть учебном цельном проекте. А не отдельными упражнениями-скриптиками. Тогда у ученика разовьется как бы комплексное видение. Без больших соблазнов «ой, а там легче применить jQuery и не мучаться, все-равно проект сложный».
И да, это мое мнение.
Соглашусь. Комплексный подход в этом деле полезен. В идеале еще смотреть как это делается другими. Но торопится с включением в командную разработку на данном уровне тоже не стоит… вот такая вот диалектика.
Ну почему никто просто документацию не хочет читать? Набла, признанная безграмотной после многостраничного обсуждения? А всего-то надо было почитать инструкцию. Апофеоз программирования…
Зачем кого-то заставлять? Надо из группы отобрать несколько человек и на них сосредоточить все усилия, а остальным поставить оценки и не тратить время. А вот с избранными работать на полную катушку.
JavaScript для начинающих — как учить?