Как стать автором
Обновить
1
0

Пользователь

Отправить сообщение

Поймут даже дети: простое объяснение async/await и промисов в JavaScript

Время на прочтение7 мин
Количество просмотров41K
Привет, Хабр! Представляю вашему вниманию перевод статьи «JavaScript Async/Await and Promises: Explained like you’re five years old» автора Jack Pordi.

Каждый, кто считает себя JavaScript-разработчиком, в какой-то момент должен был столкнуться с callback-функциями, промисами или, с недавних пор, с синтаксисом async/await. Если вы пробыли в игре достаточно долго, вы, вероятно, застали времена, когда вложенные callback-функции были единственным способом достижения асинхронности в JavaScript.

Когда я начал изучать и писать на JavaScript, уже существовало миллиард руководств и туториалов, объясняющих, как добиться асинхронности в JavaScript. Тем не менее, многие из них просто объясняли, как преобразовать callback-функции в промисы или промисы в async/await. Для многих этого, вероятно, более чем достаточно, чтобы они «поладили» с ними и начали использовать их в своем коде.

Однако если вы, как я, действительно хотите понять асинхронное программирование (а не только синтаксис JavaScript!), то, возможно, вы согласитесь со мной, что существует нехватка материалов, объясняющих асинхронное программирование фактически с нуля.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии25

Оптимизация хвостовой рекурсии в JavaScript

Время на прочтение4 мин
Количество просмотров26K
Привет, читатель.

Иногда для решении задачи приходится использовать Рекурсию, в которой есть свои плюсы и минусы. Я столкнулся с проблемой переполнения стека.
Максимальная глубина рекурсии ограничена движком JavaScript. Точно можно рассчитывать на 10000 вложенных вызовов, некоторые интерпретаторы допускают и больше, но для большинства из них 100000 вызовов – за пределами возможностей. Существуют автоматические оптимизации, помогающие избежать переполнения стека вызовов («оптимизация хвостовой рекурсии»), но они ещё не поддерживаются везде и работают только для простых случаев.

Пример рекурсивной функции:
function sum(n) {
  return n === 0 ? 0 : n + sum(n - 1)
}

sum(5) // 1 + 2 + 3 + 4 + 5  = 15
sum(100000) // Error: Maximum call stack size exceeded.

Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии32

Как и зачем делать очередь на двух стеках

Время на прочтение3 мин
Количество просмотров42K
Привет, Хабр!

Данный пост написан для новичков в олимпиадном программировании и начинающих разработчиков, готовящихся к прохождению алгоритмических интервью. В конце бонусная задачка. Если заинтересовал, прошу под кат :)
Читать дальше →
Всего голосов 15: ↑13 и ↓2+18
Комментарии13

Шаблоны GRASP: Low Coupling (низкая связанность) и High Cohesion (высокое зацепление)

Время на прочтение4 мин
Количество просмотров56K
И снова здравствуйте. Меня зовут Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Специально к старту нового набора на курс «Архитектура и шаблоны проектирования» я продолжаю серию своих публикаций про шаблоны GRASP.




Введение


Описанные в книге Craig'а Larman'а «Applying UML and patterns, 3rd edition», GRASP'овские паттерны являются обобщением GoF'овских паттернов, а также непосредственным следствием принципов ООП. Они дополняют недостающую ступеньку в логической лестнице, которая позволяет получить GoF'овские паттерны из принципов ООП. Шаблоны GRASP являются скорее не паттернами проектирования (как GoF'овские), а фундаментальными принципами распределения ответственности между классами. Они, как показывает практика, не обладают особой популярностью, однако анализ спроектированных классов с использованием полного набора GRASP'овских паттернов является необходимым условием написания хорошего кода.

Полный список шаблонов GRASP состоит из 9 элементов:

  • Information Expert
  • Creator
  • Controller
  • Low Coupling
  • High Cohesion
  • Polymorphism
  • Pure Fabrication
  • Indirection
  • Protected Variations

В прошлый раз мы обсудили принцип Creator. Сейчас я предлагаю рассмотреть два принципа GRASP, которые имеет смысл рассматривать только в паре, потому что рассмотрение их по отдельности в пределе приводит к явно плохому коду. Эти принципы могут рассматриваться не только в контексте микропроектирования, но и при проектировании, например, микросервисов. Ниже поговорим о Low Coupling и High Cohesion.
Читать дальше →
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Вам действительно нужен Redux?

Время на прочтение9 мин
Количество просмотров54K

Не так давно React позиционировал себя как "V in MVC". После этого коммита маркетинговый текст изменился, но суть осталась той же: React отвечает за отображение, разработчик — за все остальное, то есть, говоря в терминах MVC, за Model и Controller.


Одним из решений для управления Model (состоянием) вашего приложения стал Redux. Его появление мотивировано возросшей сложностью frontend-приложений, с которой не способен справиться MVC.


Главный Технический Императив Разработки ПО — управление сложностью

Совершенный код

Redux предлагает управлять сложностью с помощью предсказуемых изменений состояния. Предсказуемость достигается за счет трех фундаментальных принципов:


  • состояние всего приложения хранится в одном месте
  • единственный способ изменить состояние — отправка Action'ов
  • все изменения происходят с помощью чистых функций

Смог ли Redux побороть возросшую сложность и было ли с чем бороться?

Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии632

Что такое GraphQL

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров73K

В этой статье мы узнаем, что такое GraphQL и сравним его с REST API, проведём аналогии и посмотрим на главные различия. Ну а также, естественно, посмотрим, как работает GraphQL и какие у него возможности.

Читать далее
Всего голосов 16: ↑15 и ↓1+16
Комментарии72

Flux для глупых людей

Время на прочтение6 мин
Количество просмотров257K
Пытаясь разобраться с библиотекой от Facebook ReactJS и продвигаемой той же компанией архитектурой «Flux», наткнулся на просторах интернета на две занимательные статьи: «ReactJS For Stupid People» и «Flux For Stupid People». Чуть раньше я поделился с хабравчанами переводом первой статьи, настала очередь второй. Итак, поехали.

Flux для глупых людей


TL;DR Мне, как глупому человеку, как раз не хватало этой статьи, когда я пытался разобраться с Flux. Это было не просто: хорошей документации нет и многие ее части перемещаются.

Это продолжение статьи «ReactJS For Stupid People».
Читать дальше →
Всего голосов 38: ↑35 и ↓3+32
Комментарии35

Программа HolyJS: нюансы DevTools, минусы GraphQL, инструменты a11y

Время на прочтение15 мин
Количество просмотров2.6K


Осталось меньше месяца до конференции HolyJS (20-23 апреля, онлайн) — пора рассказать, что именно там будет. Под катом описания докладов с разбивкой по тематическим блокам. А для начала — несколько вопросов для затравки:


  • В чём недостатки GraphQL?
  • Зачем OCaml на фронтенде?
  • Чего вы не знаете о DevTools?
  • Как писать надёжные тесты для Vue?
  • Как сделать свой DSL-язык легко и непринуждённо?
  • Как добиться на дешёвом устройстве плавности дорогого?
  • Как отобразить 100500 метрик и не сойти с ума?
  • Как принести в JS типы ещё радикальнее, чем в TypeScript?

Ответы на всё это и многое другое — в докладах.

Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии4

Кастомные хуки в React: лучшие практики, пример использования и покрытия тестами

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров26K

Когда я искал свою первую работу в качестве Frontend-разработчика, меня часто спрашивали, умею ли я писать кастомные хуки в React. Тогда я только начинал изучать React и только-только запомнил основы, такие как useState и useEffect. Слово «кастомный хук» для меня было новым и сложным. Но теперь, когда я уже более опытный разработчик, знаю, что это значит и как их использовать.

В этой статье я расскажу о лучших практиках при создании кастомных хуков и приведу пример создания кастомного хука для работы с API. Эта информация будет полезна начинающим разработчикам, которые только начинают изучать кастомные хуки в React.

Читать далее
Всего голосов 11: ↑9 и ↓2+9
Комментарии9

Велосипедим Promise на TypeScript

Время на прочтение11 мин
Количество просмотров12K

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

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии6

На какие профессии повлияет ChatGPT

Время на прочтение8 мин
Количество просмотров46K

3 недели назад я написал инструкцию о том как получить доступ к ChatGPT в России. За это время она неожиданно набрала более 130т просмотров, что показывает явный интерес сообщества к этой теме.

За последнее время я собрал достаточно много интересной информации вокруг этой технологии и очень хочу с вами всем этим поделиться. Я являюсь больше разработчиком мобильных приложений, а не специалистом в области ИИ - поэтому текст данной серии статей ориентирован больше на гипотетические размышления, чем на точные технические детали. Если вы можете опровергнуть что-то из написанного мной - жду вас в комментариях!

Окей, давай посмотрим что ты там пишешь
Всего голосов 46: ↑43 и ↓3+52
Комментарии204

3 лайфхака как пережить первые месяцы тим-лидерства

Время на прочтение5 мин
Количество просмотров2K

Всем привет! Меня зовут Лиза Ермакова, настраиваю Discovery процессы и организовываю cx-исследования для продуктов МТС ИИ.

По первому образованию - лингвист. По второму - коуч, практикующий по стандартам ICF.

Тим-лидерствую с 2017 года в разных сферах и командах. 

Первый опыт тим-лида получала в команде менеджеров переводческих проектов, далее в: строила направление разметки данных с 0, где руководила командами разметчиков данных (начинала с 1, затем 10 и 30 человек). В них были не только линейные сотрудники, но и старшие специалисты, менеджеры и ML-инженер. 

Также собирала временные кросс-функциональные команды для реализации проектов по сбору данных, продуктовых исследований. 

В свободное время работаю наставником начинающих тим-лидов, помогаю студентам старших курсов и выпускникам находить первую работу в IT (консультирую по вопросам карьеры) и коучу всех тех, кому сейчас это необходимо. Чаще приходят ребята из IT компаний, кто хочет менять род деятельности, делать разные карьерные переходы в рамках сферы или выходить в новую отрасль.

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

Читать далее
Всего голосов 9: ↑4 и ↓5+1
Комментарии1

Две культуры программирования: почему обе из них важны?

Время на прочтение13 мин
Количество просмотров57K
Уже несколько лет я замечаю, что программисты и программистские инструменты делятся на две разные культуры:



Изначально я человек первой культуры и очень долгое время считал вторую несерьёзной. Пару-тройку лет назад я окончательно понял, что ошибался. Многие «старички» ошибаются в ту же сторону, а в последние годы ещё большее число людей ошибаются в обратную. Знакомство с соседней культурой и понимание, почему дела в ней делаются так, как там принято, превратит вас в лучшего разработчика.
Читать дальше →
Всего голосов 156: ↑138 и ↓18+154
Комментарии107

Неудачный опыт миграции Electron приложения на ECMAScript модули

Время на прочтение4 мин
Количество просмотров7.2K

Работая над своим стартовым шаблоном для Electron приложений я решил полностью отказаться от CommonJS модулей и использовать исключительно ECMAScript модули.

Спойлер: ничего хорошего из этого не вышло.

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии8

Пример использования WebAssembly-модуля, скомпилированного из Rust, в React-приложении

Время на прочтение5 мин
Количество просмотров9.2K


Привет, друзья!


На днях прочитал интересную статью, в которой демонстрируется возможность использования WebAssembly-модулей (далее — Wasm), скомпилированных из Rust, в React-приложении.


Так вот, статья интересная, но автор толком ничего не объясняет, видимо, исходя из предположения, что читатели, как и он, владеют обоими языками программирования (JavaScript и Rust).


Поскольку я не отношусь к этой категории (пока не знаю Rust), но люблю как следует разбираться в интересующих меня вещах, представляю вашему вниманию собственную версию.


Исходный код проекта.


Если вам это интересно, прошу под кат.

Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии1

Node.js: разрабатываем сборщик модулей

Время на прочтение11 мин
Количество просмотров6.7K


Привет, друзья!


Вам когда-нибудь хотелось узнать, как работают сборщики модулей (module bundlers) JavaScript типа Webpack или Parcel, что называется, под капотом. Если хотелось, тогда эта статья для вас.


В данном туториале мы разработаем простой сборщик модулей на Node.js, который будет компилировать все модули приложения в один минифицированный файл с кодом, соответствующим стандарту ES5.


Источник вдохновения.


Репозиторий с кодом.

Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии4

Вектор енумов. С чем мы сталкиваемся в разработке

Время на прочтение8 мин
Количество просмотров10K
В любой команде разработки бывают курьёзные случаи, которые разработчики потом вспоминают за пиццей. Сторонний человек, тоже пришедший отведать пиццы, обычно эти внутренние байки не понимает, потому что не был в комнате в тот момент, когда «треснул шард» или «движку поплохело».

Я делаю баннерную крутилку, делаю давно и уже оброс такими историями со всех сторон. Мне удалось уговорить команду рассказать на камеру хотя бы часть историй — с контекстом, чтобы зритель не чувствовал себя тем самым сторонним человеком. Надеюсь, читателям Хабра наши грабли покажутся интересными. Всего будет семь историй.

Высвобождение ресурсов


Периодически мы решаем задачи экономии разных ресурсов: памяти, процессора и так далее. Во время очередного подхода обнаружили, что один из наших процессингов употребляет неразумное количество процессорных ядер. Суть этого процессинга в том, что он читает поступающие с фронтовых серверов данные маленькими пачками, группирует их и передаёт в основной конвейер, где они варятся большими блоками по 100-200 тысяч строчек за раз.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+28
Комментарии14

Где порешать реальные задачи для кандидатов в Яндекc: тренировка на Codeforces и разбор

Время на прочтение43 мин
Количество просмотров75K
Хабр, это снова я, Алексей Рак (фото не мое). В прошлом году, помимо основной работы, мне довелось стать одним из авторов задач для кандидатов в Яндекс. Сегодня наша команда впервые за долгое время публикует на Хабре реальные задачи для разработчиков, которые устраиваются в компанию. Эти задачи использовались до февраля 2020 года при отборе на стажировку для бэкендеров. Решения проверял компьютер. Сейчас кандидатам достаются похожие задания.

Разборы и код сознательно спрятаны в спойлеры. Если вы готовитесь к собеседованиям в большие IT-компании, попробуйте решить одну или несколько задач, прежде чем смотреть разбор. Отправить решение для проверки можно на Codeforces — ответ придёт сразу же (ссылка на Codeforces и примечание). Код представлен на Python, C++ и Java. Важно: авторский «олимпиадный» код не предназначен для продакшена, он написан исходя из того, что система будет проверять его автоматически.
Читать дальше →
Всего голосов 34: ↑20 и ↓14+26
Комментарии34

Где порешать аналитические задачи от команд Яндекса? Контест и разбор

Время на прочтение8 мин
Количество просмотров18K
Сегодня начинается пробный раунд чемпионата по программированию Yandex Cup. Это означает, что можно с помощью системы Яндекс.Контест решать задачи, подобные тем, которые будут в квалификационном раунде. Пока результат ни на что влияет.

В посте вы найдёте условия задач трека аналитики и разборы, которые сознательно спрятаны в спойлеры. Вы можете подглядеть решение либо сначала попробовать сделать задачи самостоятельно. Проверка происходит автоматически — Контест сразу сообщит результат, и у вас будет возможность предложить другое решение.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии1

Concurrent Mode в React: адаптируем веб-приложения под устройства и скорость интернета

Время на прочтение10 мин
Количество просмотров24K
В этой статье я расскажу о конкурентном режиме в React. Разберёмся, что это: какие есть особенности, какие новые инструменты появились и как с их помощью оптимизировать работу веб-приложений, чтобы у пользователей всё летало. Конкурентный режим — новая фишка в React. Его задача — адаптировать приложение к разным устройствам и скорости сети. Пока что Concurrent Mode — эксперимент, который может быть изменён разработчиками библиотеки, а значит, новых инструментов нет в стейбле. Я вас предупредил, а теперь — поехали.

Сейчас для отрисовки компонентов есть два ограничения: мощность процессора и скорость передачи данных по сети. Когда требуется что-то показать пользователю, текущая версия React пытается отрисовать каждый компонент от начала и до конца. Неважно, что интерфейс может зависнуть на несколько секунд. Такая же история с передачей данных. React будет ждать абсолютно все необходимые компоненту данные, вместо того чтобы рисовать его по частям.



Конкурентный режим решает перечисленные проблемы. С ним React может приостанавливать, приоритизировать и даже отменять операции, которые раньше были блокирующими, поэтому в конкурентном режиме можно начинать отрисовывать компоненты независимо от того, были ли получены все данные или только часть.
Читать дальше →
Всего голосов 20: ↑19 и ↓1+25
Комментарии3
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Frontend Developer
Senior
JavaScript
TypeScript
React
Redux
GraphQL
Apollo
Node.js
NextJS