Я на протяжении всей жизни встречаю повальное непонимание природы исключений и важности работы с ними 😑
Давайте разберемся!
Программа: это алгоритм, который работает с данными. Все, только алгоритм и данные (дада, посты в соцсети, видосы, показатели с периферийных устройств, кнопки, которые ты нажал в игре и урон с ульты в доте — это все данные).
Алгоритм: это заранее предопределенная последовательность действий над данными, которые программа получила на вход. Ну и конечно дальше програмама выводит эти данные: на экран, сохраняет в бд, передает на физическую перефирию, которая приводит в движение автомобиль и так далее
Исключения: это событие, когда мы в программе получили данные, не учтенные алгоритмом, что приводит к невозможности дальнейшего его исполнения (по умолчанию это приводит к остановке работы всей системы или локализуется в рамках одного потока обработки вызова)
То есть — наш алгоритм получил такие данные, на которые он не был рассчитан. Поэтому выбрасывается ошибка, которую нужно обработать (например, получили ошибку в ответе от сервера, пользователь загрузил кривые данные, которые не были проверены, нет сети и запрос не ушел, протухла сессия, не нашелся файл и так далее). Все одно — на вход пришли кривые данные, на которые программа не была расчитана
Но исключения происходят не только из-за внешних факторов. Никто не отменял кривые руки, когда программа ломается из-за кривого алгоритма, принимая «сломанное» состояние самостоятельно. Классика — когда напутали с типами (реальный кейс). Во всех случаях программа держала в переменной объект. Но при одном кейсе (когда ты заходил в редактирование) и успешно редактировал обьект, он клался в память как массив объектов. Ломая все поведение программы до перезагрузки страницы (дада, те самые type any).
Другими словами: любое исключение, есть недостаток нашей программы. И мы обязаны обрабатывать исключения: либо нормализуя данные для продолжения работы алгоритма, либо — отказываясь от исполнения, отбрасывать ошибку потребителю (под страхом смерти нельзя ломаться молча, оставляя потребителя в неведнии).
Плюс, обязательно, логировать события в аналитические системы (журналирование, аудит, мониторинг, обзервабилити платформа). Их необходимо учесть, сделать доступными для анализа, подсчета и построения графиков. Для того, чтобы итеративно разбирая негативные кейсы увеличивать устойчивость и качество работы нашей программы
Так вот, этого понимания повально не хватает разработчикам. Недавно я потратил неадекватно много времени и сил, чтобы донести эту мысль, и, кажется, об этом пора делать доклад
Я на протяжении всей жизни встречаю повальное непонимание природы исключений и важности работы с ними 😑
Давайте разберемся!
Программа: это алгоритм, который работает с данными. Все, только алгоритм и данные (дада, посты в соцсети, видосы, показатели с периферийных устройств, кнопки, которые ты нажал в игре и урон с ульты в доте — это все данные).
Алгоритм: это заранее предопределенная последовательность действий над данными, которые программа получила на вход. Ну и конечно дальше програмама выводит эти данные: на экран, сохраняет в бд, передает на физическую перефирию, которая приводит в движение автомобиль и так далее
Исключения: это событие, когда мы в программе получили данные, не учтенные алгоритмом, что приводит к невозможности дальнейшего его исполнения (по умолчанию это приводит к остановке работы всей системы или локализуется в рамках одного потока обработки вызова)
То есть — наш алгоритм получил такие данные, на которые он не был рассчитан. Поэтому выбрасывается ошибка, которую нужно обработать (например, получили ошибку в ответе от сервера, пользователь загрузил кривые данные, которые не были проверены, нет сети и запрос не ушел, протухла сессия, не нашелся файл и так далее). Все одно — на вход пришли кривые данные, на которые программа не была расчитана
Но исключения происходят не только из-за внешних факторов. Никто не отменял кривые руки, когда программа ломается из-за кривого алгоритма, принимая «сломанное» состояние самостоятельно. Классика — когда напутали с типами (реальный кейс). Во всех случаях программа держала в переменной объект. Но при одном кейсе (когда ты заходил в редактирование) и успешно редактировал обьект, он клался в память как массив объектов. Ломая все поведение программы до перезагрузки страницы (дада, те самые type any).
Другими словами: любое исключение, есть недостаток нашей программы. И мы обязаны обрабатывать исключения: либо нормализуя данные для продолжения работы алгоритма, либо — отказываясь от исполнения, отбрасывать ошибку потребителю (под страхом смерти нельзя ломаться молча, оставляя потребителя в неведнии).
Плюс, обязательно, логировать события в аналитические системы (журналирование, аудит, мониторинг, обзервабилити платформа). Их необходимо учесть, сделать доступными для анализа, подсчета и построения графиков. Для того, чтобы итеративно разбирая негативные кейсы увеличивать устойчивость и качество работы нашей программы
Так вот, этого понимания повально не хватает разработчикам. Недавно я потратил неадекватно много времени и сил, чтобы донести эту мысль, и, кажется, об этом пора делать доклад
Perpetrators of such fraud use various marketing techniques to attract subscribers on their social media channels. Since January 2022, the SC has received a total of 47 complaints and enquiries on illegal investment schemes promoted through Telegram. These fraudulent schemes offer non-existent investment opportunities, promising very attractive and risk-free returns within a short span of time. They commonly offer unrealistic returns of as high as 1,000% within 24 hours or even within a few hours. "The result is on this photo: fiery 'greetings' to the invaders," the Security Service of Ukraine wrote alongside a photo showing several military vehicles among plumes of black smoke. As a result, the pandemic saw many newcomers to Telegram, including prominent anti-vaccine activists who used the app's hands-off approach to share false information on shots, a study from the Institute for Strategic Dialogue shows. Individual messages can be fully encrypted. But the user has to turn on that function. It's not automatic, as it is on Signal and WhatsApp.
from in