kamyshev.code – Telegram
kamyshev.code
1.77K subscribers
40 photos
565 links
Архитектура, код, софт-скиллы и всё остальное. Вопросы, пожелания, комментарии — @igorkamyshev

https://kamyshev.me
Download Telegram
​​Очень странное тестирование

На HolyJS слушал доклад про тестирование на основе свойств. Мне понравилась эта техника написания юнит-тестов.

Ее суть очень проста — мы должны тестировать не работу функции на примерах, а логику ее работы.

function sum(a, b) {
if (a === 3 && b === 4) {
return 7
}

return 3
}


Такая функция пройдет несколько тестов с примерами. Для 1+2, 2+1, 3+4 она работает корректно. Чтобы найти проблему, не заглядывая в код, нужно придумать еще несколько тест-кейсов. Если функция сложнее — в ней не так просто найти граничные случаи.

Если подходить к тестированию со стороны свойств функции, то нужно выделить суть операции, производимой функцией. Для сложения все довольно просто — от перестановки слогаемых сумма измениться не должна. Тогда можно сгенерировать 1000 случайных чисел и попробовать для них вызывать функцию с разным порядком аргументов. Результат для одинаковых чисел должен оставаться одинаковым.

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

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

Для JavaScript есть классная бибилиотека — fast-check. Генерирует случайные наборы данных в заданных диапозонах, интегрируется со всеми популярными тест раннерами, умеет еще много чего.

#тестирование
Веб-воркеры

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

Это простая технология, которая поддерживается почти всеми браузерами (даже ie11).

Хорошая вводная лекция на тему — Как построить дом, если ты — веб-воркер

#фронтенд #производительность
​​WASM

Вчера публиковал пост о веб-воркерах. Вторая технология, важная для производительности фронтенда — WebAssembly. Это такой способ выполнять не-JS код в браузере. Со всеми вытекающими — можно проводить сложные вычисления на Rust, и строить графики на Python.

Этот подход тоже не лишен недостатков — wasm-файлы довольно тяжелые, ваше приложение будет медленно загружаться, зато быстро работать.

13 июня в 20-00 МСК OTUS проводит открытый урок "WebAssembly". Там подробно расскажут о WebAssemby, принципах его работы и кейсах применения.

#фронтенд #производительность #партнерский_материал
Deno

На HolyJS слушал доклад про Deno. Это был не очень хороший доклад про крутую технологию от интересного человека.

Deno — это рантайм для TypeScript (можно запускать и JavaScript), который должен стать лучшей версией Node.js.

Три ключевых приемущества:
+ распределенное хранилище пакетов — любая библиотека импортируется просто по URL;
+ безопасность — по умолчанию у приложения нет доступа до важных штук (сеть, диск, устройства) и их нужно выдавать явно;
+ поддержка TypeScript из коробки.

Технология еще совсем сырая — использовать ее в реальных приложениях не стоит. Но осенью обещают стабильный релиз.

Тематические материалы:
+ Deno on GitHub
+ Распаковываем фреймворк
+ Deno — новый Node.js?

Когда выложат запись доклада уже не будет смысла его смотреть, поэтому — просто почитайте о Deno. Мне кажется, эта штука может стать очень популярной.

#js
Веб и Python

Я уверен, что будущее в вебе. Может быть, не в браузере, но точно в вебе. Интернет вещей, роботы и заводы — все работает через интернет. Сайты, мобильные и десктопные приложения написаны на веб-технологиях. И поэтому важно уметь писать веб-приложения, понимать как внутри все устроено.

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

В программе есть не только занятия по хард-скилам, но и "бизнес-модуль". Там научат общаться с заказчиками, работать в команде и фрилансить.

#партнерский_материал
Опасное место

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

Многие языки (привет, TypeScript) не очень хорошо умеют сигнализировать о возможном отсутствии значения. Решение — явно указывать это в коде.

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

Стандарт Option включает в себя многое, что зачастую не нужно в реальных приложениях. А для фронтенда важен каждый байт. Поэтому я сделал минималистичную реализацию для TS/JS — nanoption (220 байт).

Почитайте, как использовать Option в вашем языке и попробуйте.

#проектирование #js
Есть замечательный коллективный аккаунт — twitter.com/jsunderhood, но не всем удобно читать его именно в твиттере.

Сделал зеркало в телеграме @jsunderhood_mirror. Туда автоматически попадают все из твиттера.
​​Dart

Я часто смотрю на новые языки программирования.

Пару месяцев назад уже пробовал Dart, делал небольшое приложение на AngularDart. Мне понравился фреймворк, но не понравился язык.

Неделю назад снова столкнулся с Dart, на этот раз для мобильной разработки (фреймворк Flutter).

В этот раз Dart мне понравился намного больше. Возможно, это связано с тем, что код исполняется родной виртуальной машиной и уши JS не торчат из каждой щели. Может быть, Flutter просто удачно раскрывает плюсы языка и прячет минусы.

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

#языки
Flutter

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

Сейчас я снова столкнулся с необходимостью сделать небольшое мобильное приложение и решил попробовать Flutter.

Это прекрасный фреймворк, которые помогает делать приложение с минимальным трением. Он в меру прост, библиотек мало, но они супер-качественные, тулинг отличный.

Конечно, и у Flutter есть свои проблемы (например, разметка описывается очень сложными конструкциями), но в целом он круче ReactNative.

Если вы умеете только в веб, но хочется попробовать сделать что-нибудь для мобилок — Flutter отличный вариант.

#рекомендации
SOLID

Создавать приложения сложно. В первую очередь, сложно уследить за зависимостями внутри кода. Умные люди придумали способ делать это — SOLID.

Тематический доклад — Солидный код

#проектирование