Тренинг «Новый взгляд на Javascript»

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

Программа тренинга:
  • Основы языка, типы данных, понятия объекта и примитивного значения, свойства объектов, атрибуты свойств
  • Идеология и принципы работы с объектами, конструкторы, прототипирование, делегирование
  • Функция как объект, замыкания, карринг, цепочка контекстов выполнения [[Scope]], схожесть замыкания с делегированием
  • Описание встроенных объектов языка (Object, Function, Array и т.д.) в терминах, описанных выше. Объяснение единой природы встроенных объектов с объектами, создаваемыми в процессе выполнения программы.
  • Различные способы «наследования» объектов, практические предпосылки для использования того или иного способа (различия в скорости создания объектов, расходе памяти, гибкости изменения).


Объяснение всех пунктов программы простым и понятным человеческим языком, с рисованием схем на доске, по необходимости — с обоснованием по стандарту ECMA-262.
Ориентировочная длительность тренинга — 3-4 часа, с учетом времени для ответов на вопросы.
С меня — бесплатный чай, печенье :). Тренинг будет проводиться в офисе в бизнес-центре, недалеко от ст.м Площадь Восстания. Стоимость на одного человека — 3000 рублей.

Как некоторое подтверждение моих познаний в JS, могу привести свои статьи на Хабре:
habrahabr.ru/blogs/javascript/48542/
habrahabr.ru/blogs/javascript/49052/
Разумеется, материала в тренинге намного больше, чем в статьях, и подан он будет совершенно по другому.

Просьба желающим пройти тренинг отписываться в личку, а с предложениями и комментариями — соответственно в комменты.
UPD:
Для тех, кто не может написать в личку, по причине неавторизованности:
ICQ: 250-811-442
Mail: da@adwes.ru
–2
22 июля 2009, 17:10
depp 31,4

комментарии (58)

0
s1ntez #
Эх, кто бы в Киеве провел подобную встречу.
+1
depp #
В принципе, рассматривается возможность и онлайн-конференцию провести, через скайп.
Аудиторию только надо набрать.
0
zeroed #
Стоимость через скайп какая будет?
0
depp #
В 2-3 раза дешевле, смотря опять же, сколько желающих наберется.
НЛО прилетело и опубликовало эту надпись здесь
+1
django #
3-4 часа? Это из серии книг «Освой язык N за 24 часа». Смешно просто. За такое время философии js не научишься, как бы хорошо это подано не было. Гораздо разумнее по 3-4 часа отвести на каждый пункт программы, толку намного больше будет.
0
depp #
Книгу и живое общение — разные вещи. Кроме того, цель тренинга — не научить человека JS с нуля. Подразумевается, что уже имеется некоторый начальный уровень знаний, даже какой-то опыт работы, но нет четкого понимания языка, не сформировалось понимание картины в целом.

Задача тренинга — такую картину сформировать.
0
dsCode #
> цель тренинга — не научить человека JS с нуля. Подразумевается, что уже имеется некоторый начальный уровень знаний, даже какой-то опыт работы, но нет четкого понимания языка

ага, я как раз веду сейчас ряд таких статей: javascript.ru/blog/dmitry-a-soshnikov
0
depp #
Статьи это очень здорово, и для людей, обладающих достаточным запасом времени — хорошее подспорье для самообразования. Я сам провел много времени разбираясь в подобных статьях и в тонкостях стандарта. Удовольствия тоже получил немало )

Проблема в том, что КПД подобного занятия довольно низкий. Т.е. материала надо обработать уйму, а выводы (пригодные для практического применения) все равно получаются весьма сжатые.

Вот эти выводы я и хочу донести. В готовом к употреблению виде.

0
django #
Про ноль естественно никто и не говорит. Вы сами говорите про аудиторию — «нет четкого понимания языка».

Т.е. как я понимаю к вам придут люди которые в большинстве:
— не отличают примитивный строковый литерал от объекта string
— не знают что такое прототипы, scope, etc
— про наследование знают максимум «классы» в Mootols и иже с ними.
и т.д. и т.п.

А вы им за 3 часа непосильную программу будете шпарить да ещё и ecma.

Вот например чтобы разбираться в прототипах надо понимать следующую схему:
egachine.berlios.de/embedding-sm-best-practice/inheritance-ecma-sub.png
Вы думаете каждый ваш посетитель придя ничего не зная через 3 часа прекрасно всё объяснит?

Ещё раз повторю, я не верю, да и не поверю никогда, что за 3-4 часа всему этому можно научить человека. Ещё и на вопросы успеть ответить. Посмотрите на заявленную программу, вы сами-то в это верите? Если вы действительно хотите помочь людям, проведите цикл в 5-6 занятий и тогда это будет иметь реальную пользу.
0
depp #
Жуткая совершенно схема. Чтобы разбираться в прототипах, достаточно понимать 2 вещи:
0
depp #
1. Что любой объект создается с помощью конструктора и прототипа. В том числе и встроенный (точнее они уже так созданы).
2. Что если свойство не найдено в текущем объекте, оно ищется в его прототипе.

Все остальное — это уже дальнейшие умозаключения и логические выкладки.
0
django #
Не ну а как же св-ва constructor, _proto_ и т.д., это же всё тоже важно знать. Очень многие например думают что constructor это свойство объекта-экземпляра, а не объекта-прототипа, как на самом деле и т.д. Ну ладно, это не столь важно.

Реально мой вам совет, если есть возможность создайте что-то по типу мини-курса и расжуйте там все эти темы подробно. У нас в стране этому практически невозможно научиться ни в вузах, ни на курсах, так что я думаю народ пойдёт ;)
+1
depp #
Ну в принципе, формат занятий (кол-во часов, дней) — это ж все довольно гибко, если будет потребность — можно будет изменить.

constructor, _proto_ — вон оно, болото, куда все закапываются.
__proto__ — оно только в FF, какой смысл его рассматривать в контексте языка. Есть inner свойство [[Prototype]], это и есть ссылка на прототип.

А constructor — вообще свойство малозначимое. Начиная с того, что его запросто можно переопределить (или вовсе затереть), и заканчивая тем, что для понимания прототипирования оно просто не нужно. Не участвует оно ни в создании объекта, ни в поиске значения в прототипе.

На практике я очень редко сталкивался с тем, чтобы была необходимость с помощью него определять конструктор объекта. Обычно и так понятно, кем объект создается и зачем.
0
tenshi #
var p= new Point( 1, 2 )
p.constructor( 3, 4 )

довольно удобно
0
depp #
Удобно, да, пока кто-нибудь в прототипе это свойство не затрет ненароком )
0
tenshi #
как и любой другой метод…
0
depp #
При чем тут методы )

Есть два свойства, которые являются необходимыми и достаточными для создания и дальнейшей жизни объекта. Это свойство prototype функции-конструктора (причем нужно оно только на этапе создания), и свойство [[Prototype]] созданного объекта.

При этом как-либо повлиять на этот механизм программными средствами нельзя.

Все остальное — бонус разработчику, на который нельзя полагаться на 100%, ибо это бонус может быть как уничтожен, так и переопределен.
–1
dsCode #
из чего сумма собирается? сколько из неё за аренду? сколько стоит Ваша переда знаний из этой суммы? я просто не знаю, 3000 — это много или мало для такого рода лекций? если наберёте достаточное количество человек, возможно, я тоже приду (без трёх тыщ =)).
0
depp #
Я тоже не знаю, много это или мало. Есть определенные знания в голове, полученные после многодневных рысканий по форумам, чтения стандарта языка, многолетней практики. Есть желание этими знаниями поделиться.

По поводу суммы: для сравнения, репетитор английского языка берет 1500 рублей за час. При этом репетиторов английского — пруд пруди. С Javascript ситуация совсем другая.

С другой стороны, репетитор занимается с одним человеком, я планирую набирать группы по 4-6 человек.

Так что сумма получается вроде как адекватная.
0
dsCode #
3-4 часа — это примерно 3 академические пары, хм… до 20 штук с 5-7 человек? каждый день? неплохо ;) Заняться, что ли.
0
depp #
Конечно не каждый день. У меня и без этого работы хватает )
В лучшем случае — раз в неделю.
0
dsCode #
не понял, за что минусанули? выйди, покажись.
0
akira #
3000 тыс. перебор — это факт.
Сравните аудиторию тех кому надо выучить английский и тех кто хочет освоить «философию js» в Вашем понимании.
На вашем месте, я бы устроил бесплатные тренинги для всех желающих в скайпу.
А деньги брал уже за индивидуальные занятия.
0
dsCode #
> бесплатные тренинги для всех желающих в скайпу

хорошая идея, возможно чуть позже, её можно будет воплотить.
0
remal #
Была бы интересна информация про построение больших систем на серверном JS. Сейчас таким начинаю заниматься, но всегда интересна другая точка зрения.

Тонкости же языка лучше давать в виде ссылок, чтобы человеку не надо было держать постоянно это в голове, а просто помнить «где-то у меня в избранном было...».

Про сам тренинг информации слишком мало. Я прекрасно представляю себе две грани: перечисление объектов и методов, детальный разбор стандарта. Интересно к какой из них ближе будет ваш тренинг и что именно уместиться в 3-4 часа с вопросами.

Мне кажется, что преподавать лучше опыт, чем мануальные знания, которые все заинтересованные так или иначе получат в процессе разработки.

Сумбурно получилось…
0
depp #
> Я прекрасно представляю себе две грани: перечисление объектов и методов, детальный разбор стандарта.

Основное содержимое — описание сути языка, его концепции. Того факта, что весь язык построен буквально на 2-3х положениях, которые, тем не менее, в комбинации дают огромные возможности. Вместо простого перечисления, что есть object, function, array и т.д. будет рассказано — как они взаимосвязаны, кем друг другу приходятся, как связаны с вновь создаваемыми объектами. Как работает делегирование и замыкание, чем они похожи. Как эмулируется класс-объектная парадигма, что взято из функциональных языков, и т.д.

Разбор стандарта — только при необходимости, чтобы объяснить спорные моменты. Разобрать стандарт детально вряд ли получится и за 8 часов.
0
remal #
Все это можно получить введя в гугл " javascript". В результате в избранном появится набор прекрасных статей. Помнить «это было в избранном» намного проще, чем помнить материалы тренинга.

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

Что будут знать участники тренинга после него из того, что тяжело найти за 30 минут в гугле?
0
depp #
Что вы понимаете под опытом?
Там в программе есть пункт — «объяснение различных способов наследования с точки зрения задач и производительности.» Могу также рассказать про различные варианты использования прототипирования, помимо наследования (например, хранение истории изменений объекта). Про опасности использования замыканий в IE (ну и про циклические ссылки вообще).

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

0
remal #
Какое наследование лучше использовать? Стоит ли эмулировать привычные классы или нет? Почему? На какие грабли можно наткнуться, когда код станет в два раза больше? А когда в 20?

Как обстоят дела с документацией? JSDoc — наше все? Code conventions? Плюсы/минусы?

Как набирать команду JS программистов?

И тп…

Это первое что пришло в голову за минуту. И вообще, это ваша задача предложить интересный материал:)

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

ЗЫ: Тонкости DOM должен брать на себя framework.
ЗЗЫ: Кстати, JS не ограничивается браузером.
0
depp #
> Какое наследование лучше использовать? Стоит ли эмулировать привычные классы или нет? Почему? — как раз это и входит в программу тренинга

> На какие грабли можно наткнуться, когда код станет в два раза больше? А когда в 20?
Как обстоят дела с документацией? JSDoc — наше все? Code conventions? Плюсы/минусы?
Как набирать команду JS программистов?

Каждый из этих пунктов — отдельная, большая тема. Я не пытаюсь охватить необъятное и обучить всему, что вообще хоть как-то касается JS.

Хотите — организуйте свои курсы по этим темам )
0
remal #
> Каждый из этих пунктов — отдельная, большая тема. Я не пытаюсь охватить необъятное и обучить всему, что вообще хоть как-то касается JS.

Я это прекрасно знаю. Имеется ввиду не сами эти темы, а в чем отличие при использовании JS.
0
depp #
> ЗЫ: Тонкости DOM должен брать на себя framework.
Как раз исходя из опыта скажу, что ни один framework (из популярных на данный момент) не способен на 100% скрыть в себе тонкости работы с DOM.

> ЗЗЫ: Кстати, JS не ограничивается браузером.
Я в курсе )
–1
theOnlyBoy #
3 т.р. за 3 часа за базовые знания JS, показателем которых являются 2 статьи, информации по тематике которых в интернете более чем достаточно… ну да, неплохая попытка заработать, но как-то, простите, нагловато. За эти деньги лично я бы посоветовал начинающим JS-программистам купить хорошую бумажную литературу и не торопясь вникать с практикой, без обид.
0
depp #
90% информации по этой тематике — устаревшая и сбивающая с толку копипаста. Уж поверьте, я этого дела предостаточно начитался в свое время.

2 статьи являются лишь «некоторым показателем», просто чтобы не выглядеть вообще «человеком с улицы». Материала тренинга, в том виде, в котором он подается — в интернете нет.
0
theOnlyBoy #
Уж не поверю, ибо занимаюсь JS, простите, 11+ лет. Не обязательно читать первую статью, которая попадется по кнопке «Мне повезет» в Гугле.

Вы запрашиваете достаточно высокую цену за достаточно малое время. Было бы не лишним указать адекватные этому уровню знания.
0
depp #
А как по вашему эти знания можно указать?
Чтобы это было железобетонным аргументом — «знаток Javascript».
0
theOnlyBoy #
Простите, но деньги вы собираете, не я ;)
0
dsCode #
> Материала тренинга, в том виде, в котором он подается — в интернете нет.

а что за вид?
0
depp #
habrahabr.ru/blogs/javascript/65140/#comment_1820615 — вот тут вкратце описан вид
0
dsCode #
а

хотя, там материал, а не вид
0
tenshi #
расскажешь, почему typeof null === 'object'? %-)
0
depp #
А оно реально надо? )
На мой взгляд, потому что Object.prototype.[[Prototype]] = null. А прототип должен быть объектом.
Это в качестве предположения, почему оно так задумано изначально.

Если вопрос конкретно в том, почему равно — потому что стандарт, 11.4.3 The typeof Operator :)
0
depp #
Object.prototype.[[Prototype]] == null, конечно
0
tenshi #
то есть ты утверждаешь, что null — это объект?
0
depp #
нет, я такого нигде не писал )
я написал, что возможно (возможно), typeof null == 'object' из-за того, что null может быть прототипом объекта (значением свойства [[Prototype]]).

при этом, что интересно, Object.prototype.[[Prototype]] — это единственный такой случай.
Другой объект, прототипом которого является null невозможно создать

0
tenshi #
а typeof 5 === 'number' потому, что 5 может быть прототипом числа? >_
0
depp #
Не гони )
0
dsCode #
> А прототип должен быть объектом

не обязательно

The value of the [[Prototype]] property must be either an object or null
0
dsCode #
0
tenshi #
что это?
0
dsCode #
Попытка B. Eich увязать null со словом «object» (и оправдать typeof null == 'object'). Вообще же, тип null'a — Null Type (если всё ещё до сих пор не понятно ;)), а typeof возвращает захардкоженное значение из таблицы, говорил уже.
0
depp #
> а typeof возвращает захардкоженное значение из таблицы, говорил уже
Эту простую истину знает любой еж, читавший стандарт или хотя бы умеющий вбить фразу typeof null == 'object' в гугл.

Вопрос то не в этом. Вопрос в том, почему в стандарте прописано именно так.
Понятное дело, что вопрос не особо практичный, и почти риторический — но интереса от этого не теряющий.
0
dsCode #
> Эту простую истину знает любой еж читавший стандарт

а? что ещё ежи знают? откуда вопросы тогда? ;)

> Вопрос в том, почему в стандарте прописано именно так.

The null value is different, and connotes «no object» or «null
reference»


B. Eich

По мне, — так там честно можно было вернуть «null», а не «object», но создатель языка, вероятно, решил так обозначить факт, что «null бывает там, где говорят об объектах, а вернее, там, где их нет — no object». Когда писался ES4 (который не вышел), этот момент в багтреккере был обычным багом (typeof null должен возвращать «null» — wiki.ecmascript.org/doku.php?id=discussion:typeof).
0
dsCode #
а, кстати, в финальном драфте ES5 всё равно typeof null == «object» пока оставили, может к релизу передумают
0
dsCode #
0
tenshi #
а бага «нах нужен нулл, если есть андэфвйнэд» там нету?
0
dsCode #
cм. выше (правда там, может, наоборот — «нах нужен андефайнд, если есть нулл», но тоже в ту степь).

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.