Внедрение зависимости (Dependency Injection) на примере PHP

В объектно-ориентированном программировании часто возникают ситуации, когда объект должен содержать в некую конфигурацию, которую он берет из объекта другого класса.

Например, если у нас есть RSS-агрегатор, который использует кеш, то как нам конфигурировать этот кеш?

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

class FeedFetcher {
 protected $cache;
 function __construct() {
    $this->cache = new FeedCache();
 }
}

Класс кеша может в будущем меняться, требовать каких-то новых параметров в конструкторе, так что наше «жесткое связывание» пагубно скажется на поддержке кода. К тому же, возникает вопрос, как нам конфигурировать кеш. Все опции: делать это в FeedFetcher, делать это вне FeedFetcher, либо расширять FeedFetcher, чтобы он кофигурировал кеш, ведут к плохо поддерживаемому коду. В первом случае при любом изменении класса кеша придется вносить изменения в FeedFetcher, во втором случае FeedFetcher будет зависеть от каких-то внешних констант/настроек, а в третьем он замусорится вещами, относязимися к другому классу (кеша).

Лучшим выходом в подобных ситуациях является паттерн внедрения зависимости. Вместо создания объекта другого класса в конструкторе лучше передавать этот объект в параметрах конструктора, вот так:

class FeedFetcher {
 protected $cache;
 function __construct(Cache $cache) {
   $this->cache = $cache;
 }
}

При таком подходе конфигурирование обоих классов будет осуществляться снаружи, в клиенте, который их использует:

$cache = new FileCache(‘/tmp’);
$fetcher = new FeedFetcher($cache);

В целом, внедрение зависимости можно проводить через конструктор (Constructor injection), как в вышеуказанном примере, через сеттер (Setter injection):

class FeedFetcher
    {
      function setCache(Cache $cache)
      {
        $this->cache = $cache;
      }
    }

и через свойство (Property injection):

class FeedFetcher
{
   public $cache;
}

$user->cache= $cache;

Обычно для обязательных зависимостей (тех, которые всегда должны присутствовать) используется инъекция через конструктор, а для опциональных — через сеттер.

Все современные фреймворки используют этот нехитрый паттерн проектирования.

Как склонять национальности в немецком

Названия национальностей в немецком имеют сильное или слабое склонение.

Слово оканчивается на e = слабое склонение (der Däne — den Dänen — des Dänen)

на er = сильное (der Australier — den Australier — des Australiers)

Asiat = слабое склонение

Чтобы получить женский род, надо добавить окончание —in (die Dänin, die Australierin)

Deutsch склоняется, как прилагательное (der Deutsche/ein Deutscher, die Deutschen/ Deutsche, die Deutsche/eine Deutsche)

Национальности, оканчиващиеся на i, являются исключениями и склоняются по-своему.

 

«Пропаганда» Жака Эллюля. Глава 2. Часть 2. Тезисы.

Эта глава посвящена объективным условиям существования пропаганды. Основные идеи:

  1. Для успешности интеграционной пропаганды нужен более-менее благополучный уровень жизни граждан.
  2. Наименее удобны для такой пропаганды бедняки, крестьяне, в связи с низким уровнем образования (или даже безграмотностью) и погруженностью в быт. Такие люди зато наиболее подвержены агитационной пропаганде, так как легко взывать к их низменным инстинктам.

  3. Наиболее удобны для интеграционной пропаганды представители обеспеченного рабочего класса и средний класс из-за стандартности взглядов, уровня образования и информированности и массовости.

  4. Пропагандисты чаще всего формируются из верхних слоев среднего класса, так как могут посмотреть «издали» на взгляды классов ниже уровнем, в то же время без отрыва от их интересов. Уровень образования таких людей также идеален для работы пропагандиста.

  5. Высшие слои общества не являются ни главной мишенью пропаганды, ни пропагандистами в силу своей оторванности от остального общества.

  6. Повышение уровня массовой культуры является необходимым фундаментом для эффективной пропаганды.

  7. Информированность людей ведет к их податливости пропаганде. Там, где люди не информированы, пропаганда невозможна. Например, если вы не знаете, что где-то идет война, невозможно вас убедить поддержать одного из противников.

  8. Идеология является четвертым условием существования пропаганды. Идеология, в отличие от мифа, более пассивна, более «задоктринована», менее эмоциональна, а в отличие от доктрины, основана на вере, а не на рациональной составляющей.

Предыдущая часть                                                Следующая часть

Как обойтись без jQuery

JQuery вездесущ. Но зачем он всё-таки нужен? Если вы пользуетесь только тем, о чём пойдёт речь дальше, то считайте, что jQuery вам не нужен. Достаточно обычного JavaScript.

1. Селекторы

Можно использовать функции querySelector (возвращает первый элемент из соответствующих критериям) и querySelectorAll (возвращает NodeList из всех элементов, удовлетворяющих критериям). Они покрывают почти все нужды.

2. Обработчики событий

Обработку событий сейчас легко делать с помощью addEventListener. Например, так:

btn.addEventListener("click", function () {
   //Ваш код здесь
}

3. Управление классами и атрибутами

Классы можно присваивать/удалять при помощи свойства classList.

Аттрибуты можно присваивать с помощью setAttribute().

4. Вставка и удаление элементов страницы

Это делать не так удобно, как на jQuery, но всё же возможно при помощи функций createElement (создать не привязанный к DOM новый элемент. До поры он будет «висеть в воздухе»), appendChild (добавить дочерний элемент, который может быть создан, например, предыдущей функцией), insertBefore(втсавить элемент перед тем, на котором вызывается функция) и т.п. Удалять элемент из дерева DOM можно функцией removeChild.

5. Получить содержимое элемента или поменять его

Это делается с помощью свойств элемента textContent (берем только текст) и innerHTML (берем полностью HTML внутри элемента).

6. Обработка массивов

Пройти по всем элементам массива можно сс помощью forEach или функции map

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// теперь roots равен [1, 2, 3], а numbers всё ещё равен [1, 4, 9]

7. Осуществить действия по готовности страницы (document ready)

Это делается так:

document.addEventListener('DOMContentLoaded', function () {
    // код, который надо выполнить
});

Выводы

Все упомянутые вещи легко делать с помощью нативного JavaScript. За рамками рассмотрения остались некоторые другие часто нужные задачи, такие как навигация по DOM, но она тоже реализуется с помощью JavaScript достаточно легко, хотя и не так красиво, как в jQuery. Вместо AJAX-вызова jQuery можно использовать объекты XMLHttpRequest и его методы, либо какую-нибудь небольшую библиотеку, специально для этого предназначенную. Возможно, если ваш сайт нагружен визуальными эффектами вроде анимации, то отказываться от jQuery и рано, хотя если дело только в этом, то имеется много маленьких, быстрых специализированных библиотек для этих задач.

«Пропаганда» Жака Эллюля. Глава 2. Часть 1. Тезисы.

Вся глава посвящена условиям и предпосылкам существования пропаганды.

1.Важным социологическим условием существования пропаганды является массовое общество. Как убедительно доказывает автор, массовое общество и общество индивидуалистическое — это суть одно и то же.

  1. До конца 19 века человек принадлежал к небольшим группам: семье, приходу, общине… После эти мини-общества были разрушены урбанизацией и индустриализацией. Человек оторвался от своих коллективов и от земли.
  2. Индивид стал не защищен от пропагандистского влияния в современном смысле. Ноша ответственности за свои убеждения и свою судьбу является для большинства людей непосильной.

  3. В теории (согласно гуманистам-идеалистам) индивид свободен нести такую ответственность, но на практике он становится легкой жертвой пропаганды.

  4. С разрушением мини-сообществ человек попадает под каток большого сообщества — государства или нации.

  5. Для успеха своей пропаганды тоталитаризм пытается разрушить существующие в обществе группы или выхолостить их содержание. В демократиях такие минисообщества обычно разрушаются сами.

  6. Общественное мнение обычно не кристаллизуется самостоятельно. Ему в этом помогают посредники и определенные каналы, через которые можно на это мнение влиять.

  7. Общественное мнение формируется слишком большим количеством слишком разных людей, поэтому оно обычно очень расплывчато и не опирается на конкретные факты.

  8. СМИ необходимы пропаганде, которой важно также повсеместное внедрение средств доставки контента до конечного потребителя.

  9. Чем больше неподконтрольных СМИ, тем сложнее путь пропаганды, что логично, поэтому в современных обществах наблюдается уменьшение количества СМИ и их укрупнение. Этому способствуют и экономические причины.

  10. Читатель, имея выбор СМИ, отдает предпочтение только тем, которые озвучивают его собственную позицию, но при этом он становится их рабом, потому что такие СМИ, настраиваясь на его лад, легко влияют на него, углубляя его взгляды, расширяя их и призывая к действию.

Предыдущая часть                                          Следующая часть

Испанский. Советы начинающего изучающим со знанием английского

1. Аудио-курсы.
Для «низкого старта» отлично подходит аудио-курс Pimsleur Spanish , 4 части по 30 уроков в каждой, по уроку каждый день, важна регулярность. С помощью курса доводится до автоматизма самая основная лексика, формируется «костяк» языка.
Где-то начиная со 2-3 части пимслера в подмогу ему советую использовать курс Michel Thomas. У преподавателя не очень хорошее произношение, и сам курс построен так себе, зато он дает очень дельные советы, как запомнить спряжения глаголов и другие грамматические правила. Советы действительно стоящие ,сэкономят вам массу времени. Самые полезные вещи начинаются с 5-6 урока. Советую ознакомиться — отличное подспорье к учебникам по грамматике.
Оба курса — на английском языке.

2. Учебники.
Espanol en vivo — грамотная подача материала, упражнения с ключами (что немаловажно), упражнения на аудирование. Я ошибся с покупкой другого учебника, Дышлевой, так как он может быть использован только в качстве вспомогательного пособия при работе с учителем, для самостоятельного изучения малопригоден.
Есть также много хороших учебников на английском, позже напишу об избранных.

3. Сериалы
Порывшись в интернете, обнаружил два интересных и относительно легких для понимания молодежных сериала, которые могут быть полезны более продвинутым студентам. Однако, испанские субтитры к ним найти не удалось. Если кто найдет, поделитесь, пожалуйста.
Названия сериалов:
Plutón BRBNero   (его я пока не видел, но на форумах пишут,что интересный)
Aqui no hay quien viva (сериал очень забавный, на данный момент состоит из 5 сезонов, производство — Испания)

4. Подкасты
Отличный образовательный подкаст из Эквадора для детей и взрослых — http://radialistas.net  Короткие передачи на разнообразные темы, снабженные текстами с транскрипцией.

5. Песни с текстами
Портал, на котором можно прослушать онлайн испаноязычные песни, прочитать слова к ним и перевод:http://es.lyrsense.com

6. Грамматические справочники онлайн:
http://www.studyspanish.ru/grammar/handbook/index.html   — один из русскоязычных онлайн-справочников

7. Словари
http://spanishdict.com
http://wordreference.com

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

Уткин А.И. — Первая мировая война

Сегодня я хотел бы немного рассказать об одной из последних прочитанных книг, о «Первой мировой войне» Уткина.

Ни для кого не секрет, что в этом году весь мир отмечал годовщину этой войны, а потому ажиотаж вокруг темы довольно большой — в книжных магазинах отдельная полка обязательно была посвящена этой теме, в музеях проводились выставки, а в некоторых городах были установлены памятники в честь события. Однако, книга, о которой я хочу рассказать, была написана задолго до всей этой ажитации, да и прочёл я её уже достаточно давно.

_1150830_2

Литературы про Первую мировую написано немало, но данная книга отличается от других тематикой и подачей материала. Во-первых, радует, что Уткин не стал «развенчивать мифы» в модной для нашего времени манере, его изложение достаточно ровно и отличается серьёзностью слога, не шокирует небылицами. Во-вторых, изложение истории войны в книге ведётся не в стиле хронологического описания битв, а в рамках анализа решений политиков и военачальников, учитывая контекст их взаимоотношений и электоральной борьбы. Автор описывает в подробностях кадровые назначения, ответственные решения, принимаемые мировыми лидерами, закулисную борьбу мировой дипломатии в контексте исторической обстановки. Чем-то эта книга напоминает «Дипломатическую борьбу в Европе накануне Второй мировой войны» Наумова, однако не является настолько специализированной. Детальный анализ политических расстановок накануне и в ходе войны интересен сам по себе, но приведён несколько в ущерб описанию сражений войны. Если бы речь шла о шахматной партии, то книгу можно было бы сравнить не с нотацией ходов на доске, а с описанием общей стратегии борьбы с приведением реплик игроков и анализом причин некоторых ключевых ходов в контексте игры.

Из недостатков могу отметить нехватку карт и иллюстраций, что является непростительным для книги про войну. Рыскание по интернету в поисках карт фронтов и постоянное использование сервисов типа Google Maps для локализации мест событий отнюдь не скрашивает чтение. Отсутствие подробной хронологии и описания сражений также можно отнести к недостаткам, так как не всегда читатель досконально разбирается в предмете, а книга отчасти рассчитана как раз на массового читателя.

В общем, книга получилась достаточно сбалансированной, и уж точно заинтересует любителей истории, большой политики и дипломатического искусства. Однако, я бы рекомендовал для начала ознакомиться с хронологией событий, с описанием основных сражений войны, а уже после этого, зная основы, браться за эту книгу — так чтение будет намного более информативным и продуктивным. Радует также, что книга написана отечественным историком, а потому вы не будете запинаться о «лень переводчика».

За иллюстрацию спасибо жене Марине.

Медитация

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

Вышеупомянутые книги — это «Медитация и осознанность» Эдди Паддикомба (я читал в русском переводе) и «The 10 Minute Meditation» by Barbara D. Sigman.

Паддикомб — известный человек, зарабатывающий деньги, в частности, на проекте headspace.com, посвящённом медитации по его собственному методу. Хотя, надо сказать, что ничего нового в его методе нет, а то, чему он учит — это старая добрая медитация осознанности (mindfulness meditation). Книга чересчур многословна, на мой взгляд. Скажем, непосредственно описанию практики медитации посвящена всего одна короткая глава. Однако, многословность эта имеет определённую цель. Всё, что не относится к практике или советам, как обеспечить эту практику, посвящено либо мотивации (очень много рассказывается историй успеха, включая личный опыт), либо к развлечению читателя, при этом направляя его мысли в нужное русло. Некоторые концепции «обсасываются» с разных сторон, приводятся притчи, метафоры для наилучшего усвоения некоторых концепций, которые трудно объяснить «в лоб». Всё же, имея дело с мыслями и сознанием, достаточно трудно точно передать смысл своих суждений, просто описывая вещи, как они есть — языкового аппарата иногда не хватает, либо он чересчур тяжеловесен. Тут и приходят на помощь притчи, иносказания, жизненные истории и т.п. Паддикомбу удалось объяснить достаточно сложные концепции «на пальцах».

Книга же Барбары Сигман, напротив, чрезвычайно лаконична. По сути это брошюра в двадцать с лишним страниц. В ней приводится краткая справка о том, что такое медитация, для чего она нужна, какие виды медитации встречаются и как ей начать заниматься. В общем-то, в ней есть всё, что нужно знать новичку.

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

1. Медитация нужна для успокоения сознания, чтобы избавить от неконтролируемых цепочек мыслей, как средство от бессоницы, депрессии и тревожных состояний, для улучшения концентрации внимания в частности и когнитивных способностей вообще, для воспитания в себе позитивного взгляда на окружающий мир, доброты и как следствие — улучшения общего самочувствия. В общем и целом, медитация выполняет такую же роль для мозга, как утренняя зарядка и закаливание — для тела. Своего рода, этакая «профилактика сознания, отчасти совмещённая с диагностикой». «Тех. обслуживание для мозга».

2. Медитация по своей сути не имеет никакого отношения к религиям и обрядам, а также к национальным культурным традициям. Боксёр на ринге или музыкант, увлечённо играющий моцарта — это люди, находящиеся примерно в том же состоянии сознания, что и медитирующий человек. Они вовлечены в процесс полностью. Вовлечённость и есть то, для чего люди медитируют. Если вы обдумываете сложную проблему- это полезный процесс, вы активно думаете. Если же ваш мозг выстраивает нелепые цепочки мыслей типа «услышал, как заработал холодильник — в нём закончилась морковь — надо сходить на рынок — есть ли у меня деньги? — когда следующая зарплата? — ведь это же за два дня до дня рождения друга — что бы ему подарить? — о, я сам всегда хотел новую «плазму» — нет, лучше на эти деньги слетать в Париж — французы не любят говорить по-английски». Вот такого типа цепочки — это работа мозга «вхолостую». Это отвлекает сознание от более важных дел, при этом ресурсы затрачиваются, мозг устаёт. Оборвать эти цепочки помогает медитация.

3. Для медитации не нужно сидеть в позе лотоса на вершине горы. Необходимо и достаточно иметь уголок, где не побеспокоят в течение процесса. Не побеспокоят в том смысле, что от вас не потребуется каких-то реакций на происходящее. Вообще, медитировать можно и в кузнечно-прессовом цеху — внешние раздражители сами по себе не помеха. Далее, нужна удобная поза, но чтобы она была не полностью расслабленная, а также и не чересчур напряжённая. Важно, чтобы спина была прямая по этой причине. В фильмах показывают йогов, сидящих в позе лотоса, но ведь это восточные традиции — там люди по большей части привыкли с детства работать на полу, например, перебирать зёрна или стирать, находясь в юрте. Если бы древние буддистские монастыри могли себе позволить венские стулья, думаю, ничто не мешало бы им медитировать на этих венских стульях. Поза лотоса сама по себе не плоха, но западный человек обычно не имеет необходимой растяжки, и мышцы его недостаточно развиты, а потому вместо комфортного сидения он получает дрожащие висящие в воздухе колени и настоящую пытку в пояснице — тут уж не до медитации. В общем, можно сидеть на стуле (в кресле уснёте — ни к чему), можно — в лотосе, подложив подушку под колени и попу, можно так же по-турецки, а то и вообще на коленях на подушке, в японском стиле. Главное, чтоб была прямая спина, чтобы было комфортно, и чтоб в позе можно было просидеть долго, особо не задумываясь о ней. Не обязательно даже закрывать глаза, хотя с закрытымИ, в общем-то, проще концентрироваться. То же относится и к тишине в помещении, и к комфортной температуре. Чем комфортнее и меньше раздражителей, тем проще…но если хотите усложнить себе медитацию, то это тоже не проблема — любые сложности преодолимы.

4. Во время медитации нужно концентрироваться на чём-нибудь (тут есть разные техники и школы медитации, но они отличаются по большей части тем, на чём они концентрируются) — на собственном дыхании, на воображаемых образах, на свече, воде, звуке (например, мантре «Ом»), стихе, ощущении в теле, эмоциях, сострадании к другим людям и т.п. Собственно, сама по себе концентрация на чём-то конкретном вам лишь помогает в это время не думать о чём-то, о чём вы не планировали думать (те самые цепочки мыслей) и воспитывает в вас волю управлять собственным неприручённым сознанием. А так, кроме этого, в концентрации на дыхании или пламени свечи больше нет какого-то особого смысла. Иногда советуют дополнительные «обманные манёвры». Например, если даже при старательной концентрации на дыхании мысли уходят в сторону, то можно считать вдохи-выдохи или даже считать их в обратном порядке. Главное, чтобы сам счёт не перенапряг вас чересчур. Ведь цель всё же разгрузить мозг, а не нагрузить его.

5. Ни в коем случае нельзя стараться «остановить» поток мыслей, «прогнать» их, даже очень плохие из них, не нужно также пытаться ментально «исправить» что-то, что болит в теле. Нужно просто отстранённо наблюдать за всем этим безобразием — за хороводом мыслей, за ощущениями в теле, за звуками вокруг, просто наблюдать и фиксировать, не вовлекаясь в сами мысли и переживания. В этом и есть задача — учиться контролю.

6. В узком смысле медитация минут на десять позволит вам разгрузить мозг, расслабиться. В более широком контексте регулярная медитация должна помочь дисциплинировать мозг, повысить способности к концентрации, привести к осознанности в повседневной жизни и к большей вовлечённости во все аспекты жизнедеятельности, включая работу.

7. Медитация была известна и в первобытном обществе, её вариации встречаются во всех без исключения мировых религиях. Скажем, усердная молитва — это тоже по сути медитация. Но несмотря на это, многие люди пытаются воспользоваться эффектами от обучения медитации, чтобы «навешать» на неё дополнительный контекст — религиозный, финансовый и т.п. Все эти словечки, намеренно оставленные без перевода, все эти чакры, мантры, мудры, потоки сознания и энергии, вся эта околорелигиозная аксессуарика — на мой взгляд, это либо «шелуха», своего рода рудименты, оставленные от тех контекстов, откуда медитация пришла — из Тибета, Индии, буддизма, индуизма и т.п., либо это маркетинг, успешно выкачивающий деньги из клиентов. Могу привести пример с руководством по управлению автомобилем. Вот представьте, вам пишут: «Для того, чтобы завести автомобиль, поверните ключ в замке зажигания…». Вроде, это правило работает, и ничего лишнего при этом тоже нет. Другой пример руководства: «Для того, чтобы завести автомобиль, поверните ключ в замке зажигания, обязательно при этом напевая любимую песню». Да, машина заведётся, но при этом она завелась бы и без песни. А вот ещё пример: «Для того, чтобы завести автомобиль, поверните ключ в замке зажигания той рукой, на которой надет наш супер-браслет, помогающий заводить автомобиль, ценой в 100 долларов». Тут уже чистый маркетинг. Примерно так же мне видится и современное состояние дел с медитацией.

8. Осталось добавить, что исследования медитации и эффектов от неё на данный момент достаточно многочисленны, они проводятся с использованием современных методов статистики и клинических исследований. Помимо уже описанных эффектов, непосредственно связанных с сознанием, медитация также помогает при гипертонии и прочих заболеваниях, косвенно связанных с нарушениями нервной регуляции, стрессами и т.п. Огромное количество видов медитации и школ, её проповедующих, с точки зрения науки можно грубо разделить на три типа:
— медитации концентрации (concentration):  тибетская медитация («безусловные любовь, доброта и сострадание»)
— медитации наблюдения (observation) медитация осознанности (випассана, mindfulness meditation);
— медитации высвобождения без усилий (effortless transcending): трансцендендентальная медитация

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

Спасибо за иллюстрацию моей жене Марине

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

Сегодня я немного расскажу о книге Андре Кукла «Ментальные ловушки. Глупости, которые делают разумные люди, чтобы испортить себе жизнь». Эта книга перекликается с темой медитации, которой я увлёкся в последнее время. И, хотя медитация там практически не упоминается, но образ мыслей, пропагандируемый книгой, а также упражнения, предлагаемые автором для «разгрузки» мозга, суть не что иное, как медитация, описанная без лишних наносных слов.

В целом, книга даёт определение различным ментальным ловушкам, в которые угождает человек практически каждую минуту своей жизни. Ментальные ловушки — это такие состояния мозга, в которых ход мыслей не является продуктивным, а только ведёт к лишней работе и потере времени. Например, когда мы зацикливаемся на какой-то мысли, когда мы просто «ждём» кого-то или что-то, не делая при этом ничего другого, когда мы делаем ненужную работу «на всякий случай», когда «заранее переживаем», когда прокручиваем по десять раз одну и ту же ситуацию из прошлого или же до умопомрачения «репетируем» нашу будущую речь, наконец, когда весь вечер пытаемся вспомнить имя актёра из фильма, хотя эта информация не имеет для нас никакого значения — во всех этих случаях мы не получаем ничего, затрачивая огромное количество ненужной работы мозга. Книга учит распознавать в себе такие состояния, классифицирует их, а также даёт рекомендации, как можно вернуть свой мозг в нормальное состояние спокойного внимания и осознанности.

Поскольку книга невелика по объёму, то и чтение не отнимет у вас много времени. В любом случае, даже если советы автора не пригодятся лично вам, то её стоит прочесть, поскольку написана она живым языком (переводчику также зачёт). Но я уверен, каждый найдёт на её страницах много такого, что он узнает в собственном мыслительном процессе, и в этом смысле обретёт пищу для размышлений о работе собственного мозга и её эффективности.

Рецензия на книгу Effective JavaScript Дэвида Хермана (и немножко пересказ)

Сегодня хотелось немного рассказать о книге Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript. (Сила JavaScript. 68 способов эффективного использования JS) Конечно, учебников по JavaScript написано немало, и большая часть из них повторяет друг друга. Однако, в данной книге во-первых, толковая структура — каждая глава посвящена какому-то одному аспекту языка, и в то же время все главы собраны в удобно структурированные разделы, а во-вторых, язык книги живой, воды там мало. Да, забыл сказать, что книга рассчитана на профессионалов, так что там нет описания синтаксиса языка и т.п. Подразумевается, что у читателя уже есть опыт программирования на JavaScript, и он лишь хочет отшлифовать свои знания и ознакомиться с некоторыми сложными концепциями.

Итак, хватит похвал. В скобках лишь замечу, что почти все рецензии на этот учебник хорошие, люди ставят оценку 4 или 5 из 5. Пробежимся по главам…

Раздел 1 о конструкциях языка как такового
В нем вы узнаете, что числам с плавающей запятой нельзя доверять, что неявные преобразовнаия ттпа опасны, что примитивные типы лучше их объектных аналогов, что операция == опасна, если применяется с разными типами данных, что точка с запятой хоть и может подставляться интерпретатором автоматически, однако, в этом могут быть «подводные камни», наконец, что строки — это последовательности 16-битовых значений.

Раздел 2 о зонах видимости
Он предостережёт вас от использования глобальной зоны видимости и посоветует всегда объявлять локальные переменные. Вы узнаете, что использование with опасно. Научит комфортно работать с замыканиями, а эта тема очень важна в JavaScript. Если вы ещё не знаете, как устроен hoisting перменных, самое время узнать в этом разделе. Наконец, даются советы по использованию анонимных функций и функций-перменных, а также даются указания по eval.

Раздел 3 полностью посвящён функциям
Использование call для вызова функции с произвольным приёмником, разъяснение устройства конструктора псевдокласса, рассказ о функциях высшего порядка, использование apply для вызова функций с переменным числом аргументов, применение arguments для создания вариадических функций, применение bind, каррирование функций, использование замыканий для инкапсуляции кода — вот неисчерпывающий список вопросов, рассмотренных в разделе.

Раздел 4 посвящён объектам и, как следствие, псевдо-ООП на JavaScript
Здесь вы найдёте: всё о прототипах, советы по написанию конструкторов, многое об использовании замыканий для хранения закрытых данных, о неявном связывании this, о вызове конструктора родительского класса из потомка и многое другое.

Раздел 5 — всё о массивах и словарях
Здесь вы научитесь создавать «лёгкие» словари, защищаться от Prototype Pollution, тому, что массивы предпочтительнее словарей для упорядоченных коллекций и что нельзя добавлять перечисляемые свойства в прототипе объекта, а также особенностям работы циклов (for лучше, чем for in), созданию подобных массиву объектов и другому.

Раздел 6 о создании собственных библиотек и API
Особенности типа Undefined, передачи параметров через объекты, а также много советов по созданию грамотно построенных библиотек.

Раздел 7 посвящён программированию конкурентных задач
Научит вас не блокировать очередь событий при операциях ввода/выводаи вычислениях, использовать вложенные обратные вызовы (callback), рекурсию для асинхронных циклов, применять счётчик для конкурентных задач и никогда не вызывать асинхронные обратные вызовы синхронно, а также расскажет об API, реализующих обещания (promises) — очень интересную новую концепцию в JS.