Обзор Node.js v16: Новые JavaScript конструкции
#nodejs_api
Начну с цитаты: V8 - это высокопроизводительный движок JavaScript и WebAssembly с открытым исходным кодом от Google, написанный на C++.
Этот движок выполняет JavaScript код внутри Chrome и #nodejs. Обновление V8 это breaking change. Произойдет это в октябре во время обновления мажорной LTS версии Node.js с 14-ой на 16-ую. V8 обновиться с 8-й на 9-ю версию. А это означает, что у нас должны появятся такие фичи:
➡️
➡️
➡️ Error causes, добавляет в конструктор
➡️
➡️ Class static initialization blocks. 🔗tc39 🔗v8
➡️ Private brand checks a.k.a.
#nodejs_api
Начну с цитаты: V8 - это высокопроизводительный движок JavaScript и WebAssembly с открытым исходным кодом от Google, написанный на C++.
Этот движок выполняет JavaScript код внутри Chrome и #nodejs. Обновление V8 это breaking change. Произойдет это в октябре во время обновления мажорной LTS версии Node.js с 14-ой на 16-ую. V8 обновиться с 8-й на 9-ю версию. А это означает, что у нас должны появятся такие фичи:
➡️
String.prototype.replaceAll, которые заменяет все вхождения в отличие от обычного replace. Подробней: tc39➡️
Object.hasOwn alias для Object.prototype.hasOwnProperty. Подробней: tc39, v8➡️ Error causes, добавляет в конструктор
Error дополнительный параметр со свойством cause куда передается ошибка причина. Это позволяет создавать цепочки ошибок. Пример:const parentError = new Error('parent');
const error = new Error('parent', { cause: parentError });
console.log(error.cause === parentError);
Подробней: tc39, v8➡️
ArrayLike.at упростят доступ к элементам в конце, так как принимают отрицательные значения. Подробней: tc39, v8➡️ Class static initialization blocks. 🔗tc39 🔗v8
➡️ Private brand checks a.k.a.
#foo in obj. Подробней: tc39, v8Где изучать Kubernetes
#freebies #list
Kubernetes уже стал стандартом де-факто в разворачивание проектов. Его необходимо знать не только DevOps инженерам, но и разработчикам. Материалов по его изучению много. Вот моя личная подборка:
➡️ Официальная документация kubernetes. Для сдачи CKAD необходимо знать ее структуру и уметь быстро находить нужное. В работе вы тоже будет регулярно ей пользоваться. Знайте на какой версии k8s вы работаете и смотреть изменения.
➡️ Документация от вендора где развернут ваш k8s. Основное знание это вендор специфик annotation, которые расширяют функционал.
➡️ container.training сайт с материалами воркшопов по Docker и kubernetes. Есть видео и Self-paced tutorials.
➡️ kube.academy от VMWare. Есть курсы разного уровня.
#freebies #list
Kubernetes уже стал стандартом де-факто в разворачивание проектов. Его необходимо знать не только DevOps инженерам, но и разработчикам. Материалов по его изучению много. Вот моя личная подборка:
➡️ Официальная документация kubernetes. Для сдачи CKAD необходимо знать ее структуру и уметь быстро находить нужное. В работе вы тоже будет регулярно ей пользоваться. Знайте на какой версии k8s вы работаете и смотреть изменения.
➡️ Документация от вендора где развернут ваш k8s. Основное знание это вендор специфик annotation, которые расширяют функционал.
➡️ container.training сайт с материалами воркшопов по Docker и kubernetes. Есть видео и Self-paced tutorials.
➡️ kube.academy от VMWare. Есть курсы разного уровня.
Обзор Node.js v16: Упрощение доступа к util.types
#nodejs_api
Встроенный модуль util дает возможность проверять типы. Я чаще всего использую такие проверки из util.types:
➡️
#nodejs_api
Встроенный модуль util дает возможность проверять типы. Я чаще всего использую такие проверки из util.types:
➡️
isDate
➡️ isMap
➡️ isSet
➡️ isNativeError
➡️ isPromise
До 16-й версии обращение к данным методом было только через require('util').types. В 16-й появляется альтернатива require('util/types'). Для встроенных #nodejs модулей это синтаксический сахар. А вот для устанавливаемых использование конкретного файла – хорошая практика: typescript компилируется быстрее, уменьшение затраты памяти. По сути это ручной tree-shaking, т.е. удаление не используемого кода.Forwarded from 🇺🇦 Math.random(): javascript community
This media is not supported in your browser
VIEW IN TELEGRAM
🪄Магия на github! Просто нажмите "." находясь в любом репозитории на github!
🔗 https://twitter.com/github/status/1425505817827151872
#github #shortcut #news
🔗 https://twitter.com/github/status/1425505817827151872
#github #shortcut #news
Как и зачем использовать
#nodejs_api
С 16.4 версии Node.js AsyncLocalStorage перестал быть экспериментальным, а значит его можно смело использовать в продакшене. Данный класс позволяет сохранять контекст между шагами асинхронного флоу. Он работает и с callback, и с promise chain.
Для получения текущего значения используется
Возможное использование данного апи – улучшение логгирования. В стейте храниться traceId, который пишется в лог. Так вы легко можете различить логи от нескольких запросов, которые параллельно обрабатываются #nodejs.
Статья с примерами использования из комментариев.
Пример для Nest.js.
AsyncLocalStorage?#nodejs_api
С 16.4 версии Node.js AsyncLocalStorage перестал быть экспериментальным, а значит его можно смело использовать в продакшене. Данный класс позволяет сохранять контекст между шагами асинхронного флоу. Он работает и с callback, и с promise chain.
Для получения текущего значения используется
asyncLocalStorage.getStore()
Для установки значения есть два способа:asyncLocalStorage.run(store, callback[, ...args]) – устанавливает значение внутри callback. Для использования скорее всего потребуется внести изменения на верхнем уровне кода.asyncLocalStorage.enterWith(store) – устанавливает значение до окончания текущего синхронного контекста и всех порождающих асинхронных операций. Проще в использование, но возможность его вызвать несколько раз создает сложности в поддержки. Мутировать стейт это плохо. Поэтому документация рекомендует использовать run.Возможное использование данного апи – улучшение логгирования. В стейте храниться traceId, который пишется в лог. Так вы легко можете различить логи от нескольких запросов, которые параллельно обрабатываются #nodejs.
Статья с примерами использования из комментариев.
Пример для Nest.js.
👍1
Знай свой JIT: ближе к машине
#worth_seeing
Сегодня видео с FrontendConf'18. В докладе идет очень подробный разбор как работает V8. Какие этапы javascript проходит код, прежде чем будет исполнен. Вдумчивый слушатель узнает, почему использование TypeScript улучшает производительность JS приложение.
Докладчик Андрей Мелихов известен благодаря своему подкасту девШахта. За последний год подкаст превратился в ютубканал.
Ссылки:
🔗 Слайды
🔗 Расшифровка доклада в виде статьи на хабр
🔗 ДевШахта
#worth_seeing
Сегодня видео с FrontendConf'18. В докладе идет очень подробный разбор как работает V8. Какие этапы javascript проходит код, прежде чем будет исполнен. Вдумчивый слушатель узнает, почему использование TypeScript улучшает производительность JS приложение.
Докладчик Андрей Мелихов известен благодаря своему подкасту девШахта. За последний год подкаст превратился в ютубканал.
Ссылки:
🔗 Слайды
🔗 Расшифровка доклада в виде статьи на хабр
🔗 ДевШахта
YouTube
Знай свой JIT: ближе к машине / Андрей Мелихов (Яндекс.Деньги)
РИТ++2018, FrontendConf
Тезисы и презентация:
http://frontendconf.ru/moscow-rit/2018/abstracts/3386
До того, как написанный нами код будет исполнен, он проходит довольно долгий путь. Мы рассмотрим каждый шаг на этом пути на примере движка V8 и поймём…
Тезисы и презентация:
http://frontendconf.ru/moscow-rit/2018/abstracts/3386
До того, как написанный нами код будет исполнен, он проходит довольно долгий путь. Мы рассмотрим каждый шаг на этом пути на примере движка V8 и поймём…
Build Better Workloads with the AWS Well-Architected Framework and Tool
#worth_seeing #aws #cloud_native
Сегодня в рекомендациях видео об AWS Well-Architected Framework. Данный фреймворк помогает разворачивать приложения в AWS правильно. Вот ссылки, которые помогут лучше разобраться:
- общая инфо
- white paper, по своей сути является манифестом. Стоит знать, даже если вы не работает с AWS.
- labs, лабораторные для применения идей на практике.
- Well-Architected Tool, инструмент для проверки.
Данное рецепт являет логическим продолжением для тех, кто уже выполнил 100 базовых упражнений для изучения AWS.
#worth_seeing #aws #cloud_native
Сегодня в рекомендациях видео об AWS Well-Architected Framework. Данный фреймворк помогает разворачивать приложения в AWS правильно. Вот ссылки, которые помогут лучше разобраться:
- общая инфо
- white paper, по своей сути является манифестом. Стоит знать, даже если вы не работает с AWS.
- labs, лабораторные для применения идей на практике.
- Well-Architected Tool, инструмент для проверки.
Данное рецепт являет логическим продолжением для тех, кто уже выполнил 100 базовых упражнений для изучения AWS.
YouTube
Build Better Workloads with the AWS Well-Architected Framework and Tool - AWS Online Tech Talks
Learn about the architectural best practice guidance available to you via the AWS Well-Architected Tool and Framework. Hear success stories from AWS customers and APN partners, and learn how to improve workload design using Well-Architected concepts across…
Как автоматизировать 2FA?
#package #security
Данный рецепт не о том, как реализовать в своем приложение 2FA (Two-factor authentication). Для этого существуют готовые сервисы, о которых я рассказывал на React fwdays’21. Сегодня кейс из сотрудничества с QA автоматизаторами.
Для проверки приложения необходимо произвести логин пользователя. Это происходит через gmail. Переодически gmail говорит необходима дополнительная проверка – неизвестное устройство. Варианты решения отправка смс или отправка емейл не подходят, так как требуют дождаться этих смс/емейлов, способа их получения, парсинга и т.п.
В данном кейсе правильно использовать google authenticator. Данный 2FA способ виден, только если вы добавили номер телефона. В момент настройке будет показан QR code, который содержит текст вида:
#package #security
Данный рецепт не о том, как реализовать в своем приложение 2FA (Two-factor authentication). Для этого существуют готовые сервисы, о которых я рассказывал на React fwdays’21. Сегодня кейс из сотрудничества с QA автоматизаторами.
Для проверки приложения необходимо произвести логин пользователя. Это происходит через gmail. Переодически gmail говорит необходима дополнительная проверка – неизвестное устройство. Варианты решения отправка смс или отправка емейл не подходят, так как требуют дождаться этих смс/емейлов, способа их получения, парсинга и т.п.
В данном кейсе правильно использовать google authenticator. Данный 2FA способ виден, только если вы добавили номер телефона. В момент настройке будет показан QR code, который содержит текст вида:
otpauth://totp/Google:<EMAIL>?secret=<SECRET>&issuer=Google
Для того, чтобы генерировать token валидные 30 секунд вам достаточно знания secret. В этом поможет пакет otplib. Пакет позволяет генерировать и проверять не только для authenticator, но One Time Passwords, но как я уже говорил, для этого лучше использовать готовые решения.Как подтянуть TypeScript?
#typescript #code_pattern
Лучший способ тренировки паттернов кодирование это решений задач. Для этого отлично подойдет проект type-challenges. Каждая из задач предлагает написать свой тип. Есть встроенная проверка. Как это работает можно глянуть на Hello World примере.
В Readme проекта задачи отсортированы по темам и уровням сложности. Некоторые задачи начального уровня предлагают реализовать built-in тип, т.е. который уже есть в TypeScript.
#typescript #code_pattern
Лучший способ тренировки паттернов кодирование это решений задач. Для этого отлично подойдет проект type-challenges. Каждая из задач предлагает написать свой тип. Есть встроенная проверка. Как это работает можно глянуть на Hello World примере.
В Readme проекта задачи отсортированы по темам и уровням сложности. Некоторые задачи начального уровня предлагают реализовать built-in тип, т.е. который уже есть в TypeScript.
GitHub
GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge
Collection of TypeScript type challenges with online judge - type-challenges/type-challenges
Зачем нужен Symbol в JavaScript?
#code_pattern
В ECMAScript2015 (ES6) появился примитивный тип Symbol. Он используется, чтобы создавать уникальные идентификаторы. Пример:
Основное назначение Symbol это работа со встроенными фичами языка. Для этого существуют Well-known Symbols, такие как:
- Symbol.iterator
- Symbol.hasInstance
- Symbol.toStringTag
- и т.д., подробней об встроенных символах смотри typescript doc или на habr.
Well-known Symbols, используются на системном уровне программирования, т.е. на уровне библиотек и фреймворков. На прикладном уровне, т.е. на уровне написания кода приложения, а не библиотек, устоявшейся практикой является использование Symbol в декораторах на TypeScript. Пример:
Стоит еще знать об Symbol.for и Symbol.keyFor, которые позволяют работать с shared Symbol. По своей сути это глобальные переменные в shared Symbol scope, поэтому опытные программисты стараются их избегать.
#code_pattern
В ECMAScript2015 (ES6) появился примитивный тип Symbol. Он используется, чтобы создавать уникальные идентификаторы. Пример:
const first = Symbol('example')
const second = Symbol('example')
first === first // true
first === second // false
Т.е. создать второй раз тот же самый идентификатор нельзя. Их используют для определения свойств объектов, т.е. обращения к его ключам.Основное назначение Symbol это работа со встроенными фичами языка. Для этого существуют Well-known Symbols, такие как:
- Symbol.iterator
- Symbol.hasInstance
- Symbol.toStringTag
- и т.д., подробней об встроенных символах смотри typescript doc или на habr.
Well-known Symbols, используются на системном уровне программирования, т.е. на уровне библиотек и фреймворков. На прикладном уровне, т.е. на уровне написания кода приложения, а не библиотек, устоявшейся практикой является использование Symbol в декораторах на TypeScript. Пример:
import { SetMetadata } from '@nestjs/common';
export const isPublic = Symbol('isPublic');
export function Public() {
return SetMetadata(isPublic, true);
}
Таким образом можно вы можете гарантировать, что не произойдет коллизии в чтение/записи метаданных из ваших объектов.Стоит еще знать об Symbol.for и Symbol.keyFor, которые позволяют работать с shared Symbol. По своей сути это глобальные переменные в shared Symbol scope, поэтому опытные программисты стараются их избегать.
www.typescriptlang.org
Documentation - Symbols
Using the JavaScript Symbol primitive in TypeScript
👍2
Как использовать Node.js REPL?
#nodejs_api
REPL расшифровывается как read–eval–print loop. Для запуска #nodejs в таком режиме достаточно выполнить
Работа с REPL очень похожа на работу с Console Panel в Google Chrome:
- пишешь JS код, его результат выводиться в консоль
- Cmd + K on MacOS / Ctrl + L on Windows – очистят консоль
Но есть и различия:
- Переменная _ хранит значение последней команды
- Есть команды начинающиеся с точки. Полный перечень .help
- Чтобы выйти из REPL используйте горячую клавишу Ctrl+D или Ctrl+C дважды
При желание можно написать свой REPL. Например для работы с API или базой данных, как это сделано для MongoDB. Подробней в документации.
#nodejs_api
REPL расшифровывается как read–eval–print loop. Для запуска #nodejs в таком режиме достаточно выполнить
node без указания файла.Работа с REPL очень похожа на работу с Console Panel в Google Chrome:
- пишешь JS код, его результат выводиться в консоль
- Cmd + K on MacOS / Ctrl + L on Windows – очистят консоль
Но есть и различия:
- Переменная _ хранит значение последней команды
- Есть команды начинающиеся с точки. Полный перечень .help
- Чтобы выйти из REPL используйте горячую клавишу Ctrl+D или Ctrl+C дважды
При желание можно написать свой REPL. Например для работы с API или базой данных, как это сделано для MongoDB. Подробней в документации.
Что нового в TypeScript 4.4?
#typescript
24 августа выйдет новая версии TypeScript. Вот краткий пересказ release notes:
– В catch блоках можно включить, что тип ошибки будет unknown, вместо any. Для этого добавлен флаг
– Добавлен флаг
– Добавлена поддержка Class static initialization blocks. Напомню, что при переходе на 16-й версию #nodejs будет поддержка уровне V8, т.е. можно будет использовать и в JS-base проектах.
– Улучшение работы с Index Signatures. До этого это могли быть только number и string. В новой версии добавлены Symbol и template string, а так же разрешены union.
– традиционные изменения в lib.d.ts, который используется по умолчанию, если не указаны lib. Эти изменения являются breaking change. Полный перечень. Если вы используете lib.d.ts в своем проекте, то самое время прочитать Как правильно настроить TypeScript в Node.js проекте?
– улучшена скорость сборки и интеграция с Visual Studio
#typescript
24 августа выйдет новая версии TypeScript. Вот краткий пересказ release notes:
– В catch блоках можно включить, что тип ошибки будет unknown, вместо any. Для этого добавлен флаг
useUnknownInCatchVariables, который по умолчанию включен с strict флагом. При переходе потребует изменить часть кодовой базы.– Добавлен флаг
--exactOptionalPropertyTypes, который запрещает для опциональных полей ставить undefined.– Добавлена поддержка Class static initialization blocks. Напомню, что при переходе на 16-й версию #nodejs будет поддержка уровне V8, т.е. можно будет использовать и в JS-base проектах.
– Улучшение работы с Index Signatures. До этого это могли быть только number и string. В новой версии добавлены Symbol и template string, а так же разрешены union.
– традиционные изменения в lib.d.ts, который используется по умолчанию, если не указаны lib. Эти изменения являются breaking change. Полный перечень. Если вы используете lib.d.ts в своем проекте, то самое время прочитать Как правильно настроить TypeScript в Node.js проекте?
– улучшена скорость сборки и интеграция с Visual Studio
Microsoft News
Announcing TypeScript 4.4 RC
Today we’re excited to announce our Release Candidate (RC) of TypeScript 4.4! Between now and the stable release of TypeScript 4.4, we expect no further changes apart from critical bug fixes. To get started using the RC, you can get it through NuGet,
30 seconds of code – сборник код-снипетов
#list #code_pattern
В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
#list #code_pattern
В начале лета я делился ссылкой на 1loc.dev. В комментариях была ссылка на аналогичный ресурс – 30 seconds of code. Примеры кода чуть длинней, но суть та же самая. Есть раздел отдельно по #nodejs сниппетам.
www.30secondsofcode.org
30 seconds of code
Browse 692 coding articles to level up your coding skills on 30 seconds of code.
Почему нужно избегать магии?
#code_pattern
Там где исчезает понимание техника превращается в магию. Программистам следует этого избегать.
Avoid magic strings
Выглядит данная магия так:
Поддерживать и читать этот код сложно. Вынесение таких строк как Alice в отдельный файл или объект с константами обычная практика в JS. В TypeScript для этих целей используется string base enum.
Avoid magic numbers
Аналогичная проблема может быть с числами.
Решение аналогично. Перенос в константы. Улучшение читабельности и поддержки. 16 лет как пороговое значение будет разным в разных доменах.
Для автоматизации используйте eslint, там есть правило no-magic-numbers.
#code_pattern
Там где исчезает понимание техника превращается в магию. Программистам следует этого избегать.
Avoid magic strings
Выглядит данная магия так:
function isFriend(name) { if (name === 'Alice') return true; ... }Поддерживать и читать этот код сложно. Вынесение таких строк как Alice в отдельный файл или объект с константами обычная практика в JS. В TypeScript для этих целей используется string base enum.
Avoid magic numbers
Аналогичная проблема может быть с числами.
function isAdult(user) { return user.age >= 16; }Решение аналогично. Перенос в константы. Улучшение читабельности и поддержки. 16 лет как пороговое значение будет разным в разных доменах.
Для автоматизации используйте eslint, там есть правило no-magic-numbers.
Как правильно проектировать обновление в REST?
#rest #architecture
Вот, что следует учесть при проектирование endpoint-ов, которые будут обновлять состояние ресурсов:
❓Необходимо полное (PUT) или частичное обновление (PATCH)? Возможно, необходимы оба способа. В блоге Postman на этой неделе была статья What We Learned from 200,000 OpenAPI Files. Из нее можно увидеть, что в среднем PUT используется в 10 раз чаще чем PATCH.
❓Должен ли сервер проверять, что клиент использует последнюю версию ресурса? Если это необходимо, то необходимы заголовки Etag и If-Match. Если версия ресурса описанная Etag-м на клиенте и сервере отличается, то сервер выдаст ошибку с 412 кодом (Precondition Failed).
❓Что мы редактируем, сущность или коллекцию сущностей? Для редактирования отдельной сущности (
#rest #architecture
Вот, что следует учесть при проектирование endpoint-ов, которые будут обновлять состояние ресурсов:
❓Необходимо полное (PUT) или частичное обновление (PATCH)? Возможно, необходимы оба способа. В блоге Postman на этой неделе была статья What We Learned from 200,000 OpenAPI Files. Из нее можно увидеть, что в среднем PUT используется в 10 раз чаще чем PATCH.
❓Должен ли сервер проверять, что клиент использует последнюю версию ресурса? Если это необходимо, то необходимы заголовки Etag и If-Match. Если версия ресурса описанная Etag-м на клиенте и сервере отличается, то сервер выдаст ошибку с 412 кодом (Precondition Failed).
❓Что мы редактируем, сущность или коллекцию сущностей? Для редактирования отдельной сущности (
/todos/:id) подойдут и PUT, и PATCH. Но при редактирование коллекции (/todos/) стоит использовать PATCH с body в формате JSON Patch.Делюсь крутой ссылкой с CTO meetup. https://www.progression.fyi
В ней собраны критерии кто есть синьор/мидл/whatever в разных компаниях.
В ней собраны критерии кто есть синьор/мидл/whatever в разных компаниях.
progression.fyi
A collection of open source frameworks for helping designers and engineers to grow at work
Context Aware Content Discovery: The Natural Evolution
#rest #worth_seeing
Идея сегодняшнего видео проанализировать как скрапинг контента меняется при работе с API по сравнению с файловыми серверами. Чтобы это сделать, команда из Assetnote собрала из открытых источников Open API Specs, проанализировала тысячи апи и их реализации. Компания занимаются безопасностью, поэтому они выкладывают свои инструменты в OpenSource.
Видео это фундаментальное отчет-исследование. Рекомендую посмотреть целиком особенно если вы занимаетесь парсингом.
Слайды
#rest #worth_seeing
Идея сегодняшнего видео проанализировать как скрапинг контента меняется при работе с API по сравнению с файловыми серверами. Чтобы это сделать, команда из Assetnote собрала из открытых источников Open API Specs, проанализировала тысячи апи и их реализации. Компания занимаются безопасностью, поэтому они выкладывают свои инструменты в OpenSource.
Видео это фундаментальное отчет-исследование. Рекомендую посмотреть целиком особенно если вы занимаетесь парсингом.
Слайды
YouTube
"Context Aware Content Discovery: The Natural Evolution"
Presented by Sean Yeoh, Patrick Mortensen, Michael Gianarakis, Shubham Shah
BSides Canberra 2021, 9-10 April
BSides Canberra 2021, 9-10 April
На август по voice chat был отпуск. В сентябре буду возвращать этот формат. Мне важно ваше мнение когда их проводить, чтобы вы могли послушать эфир, поучаствовать и задавать вопросы.
Как было – Четверг, вечер в 21:00 - 62
👍👍👍👍👍👍👍👍 45%
Morning coffee – Утро буднего дня с 8 до 10 - 11
👍👍 8%
Выходной день с 9 до 11 - 5
👍👍 4%
Все равно, если и слушаю то в записи - 57
👍👍👍👍👍👍👍 42%
Напишу в комментариях - 2
👍 1%
👥 137 человек уже проголосовало.
Как было – Четверг, вечер в 21:00 - 62
👍👍👍👍👍👍👍👍 45%
Morning coffee – Утро буднего дня с 8 до 10 - 11
👍👍 8%
Выходной день с 9 до 11 - 5
👍👍 4%
Все равно, если и слушаю то в записи - 57
👍👍👍👍👍👍👍 42%
Напишу в комментариях - 2
👍 1%
👥 137 человек уже проголосовало.
Complexity vs Incomprehensibility
#principles
Я рекомендую различать сложность, т.е. метрику количества элементов системы/кода/задачи и понятность, т.е. необходимые когнитивные усилия, чтобы понять систему/код/задачу. На английском это Complexity vs Incomprehensibility. Оба этих параметры определяют стоимость создания и поддержки кода. Но именно непонятность вносит большую часть.
Вещи, которые позволяют делать ваш код понятным:
- хороший нейминг
- абстракции и паттерны
- консистеная организация кода
- код ревью
- качественно поставленные задачи
Закончу своей же цитатой: "Все сложное — это состыкованное с друг другом простое. Поэтому делай просто и одинаково. А сложным оно станет само"
#principles
Я рекомендую различать сложность, т.е. метрику количества элементов системы/кода/задачи и понятность, т.е. необходимые когнитивные усилия, чтобы понять систему/код/задачу. На английском это Complexity vs Incomprehensibility. Оба этих параметры определяют стоимость создания и поддержки кода. Но именно непонятность вносит большую часть.
Вещи, которые позволяют делать ваш код понятным:
- хороший нейминг
- абстракции и паттерны
- консистеная организация кода
- код ревью
- качественно поставленные задачи
Закончу своей же цитатой: "Все сложное — это состыкованное с друг другом простое. Поэтому делай просто и одинаково. А сложным оно станет само"