Я на протяжении всей жизни встречаю повальное непонимание природы исключений и важности работы с ними 😑
Давайте разберемся!
Программа: это алгоритм, который работает с данными. Все, только алгоритм и данные (дада, посты в соцсети, видосы, показатели с периферийных устройств, кнопки, которые ты нажал в игре и урон с ульты в доте — это все данные).
Алгоритм: это заранее предопределенная последовательность действий над данными, которые программа получила на вход. Ну и конечно дальше програмама выводит эти данные: на экран, сохраняет в бд, передает на физическую перефирию, которая приводит в движение автомобиль и так далее
Исключения: это событие, когда мы в программе получили данные, не учтенные алгоритмом, что приводит к невозможности дальнейшего его исполнения (по умолчанию это приводит к остановке работы всей системы или локализуется в рамках одного потока обработки вызова)
То есть — наш алгоритм получил такие данные, на которые он не был рассчитан. Поэтому выбрасывается ошибка, которую нужно обработать (например, получили ошибку в ответе от сервера, пользователь загрузил кривые данные, которые не были проверены, нет сети и запрос не ушел, протухла сессия, не нашелся файл и так далее). Все одно — на вход пришли кривые данные, на которые программа не была расчитана
Но исключения происходят не только из-за внешних факторов. Никто не отменял кривые руки, когда программа ломается из-за кривого алгоритма, принимая «сломанное» состояние самостоятельно. Классика — когда напутали с типами (реальный кейс). Во всех случаях программа держала в переменной объект. Но при одном кейсе (когда ты заходил в редактирование) и успешно редактировал обьект, он клался в память как массив объектов. Ломая все поведение программы до перезагрузки страницы (дада, те самые type any).
Другими словами: любое исключение, есть недостаток нашей программы. И мы обязаны обрабатывать исключения: либо нормализуя данные для продолжения работы алгоритма, либо — отказываясь от исполнения, отбрасывать ошибку потребителю (под страхом смерти нельзя ломаться молча, оставляя потребителя в неведнии).
Плюс, обязательно, логировать события в аналитические системы (журналирование, аудит, мониторинг, обзервабилити платформа). Их необходимо учесть, сделать доступными для анализа, подсчета и построения графиков. Для того, чтобы итеративно разбирая негативные кейсы увеличивать устойчивость и качество работы нашей программы
Так вот, этого понимания повально не хватает разработчикам. Недавно я потратил неадекватно много времени и сил, чтобы донести эту мысль, и, кажется, об этом пора делать доклад
Я на протяжении всей жизни встречаю повальное непонимание природы исключений и важности работы с ними 😑
Давайте разберемся!
Программа: это алгоритм, который работает с данными. Все, только алгоритм и данные (дада, посты в соцсети, видосы, показатели с периферийных устройств, кнопки, которые ты нажал в игре и урон с ульты в доте — это все данные).
Алгоритм: это заранее предопределенная последовательность действий над данными, которые программа получила на вход. Ну и конечно дальше програмама выводит эти данные: на экран, сохраняет в бд, передает на физическую перефирию, которая приводит в движение автомобиль и так далее
Исключения: это событие, когда мы в программе получили данные, не учтенные алгоритмом, что приводит к невозможности дальнейшего его исполнения (по умолчанию это приводит к остановке работы всей системы или локализуется в рамках одного потока обработки вызова)
То есть — наш алгоритм получил такие данные, на которые он не был рассчитан. Поэтому выбрасывается ошибка, которую нужно обработать (например, получили ошибку в ответе от сервера, пользователь загрузил кривые данные, которые не были проверены, нет сети и запрос не ушел, протухла сессия, не нашелся файл и так далее). Все одно — на вход пришли кривые данные, на которые программа не была расчитана
Но исключения происходят не только из-за внешних факторов. Никто не отменял кривые руки, когда программа ломается из-за кривого алгоритма, принимая «сломанное» состояние самостоятельно. Классика — когда напутали с типами (реальный кейс). Во всех случаях программа держала в переменной объект. Но при одном кейсе (когда ты заходил в редактирование) и успешно редактировал обьект, он клался в память как массив объектов. Ломая все поведение программы до перезагрузки страницы (дада, те самые type any).
Другими словами: любое исключение, есть недостаток нашей программы. И мы обязаны обрабатывать исключения: либо нормализуя данные для продолжения работы алгоритма, либо — отказываясь от исполнения, отбрасывать ошибку потребителю (под страхом смерти нельзя ломаться молча, оставляя потребителя в неведнии).
Плюс, обязательно, логировать события в аналитические системы (журналирование, аудит, мониторинг, обзервабилити платформа). Их необходимо учесть, сделать доступными для анализа, подсчета и построения графиков. Для того, чтобы итеративно разбирая негативные кейсы увеличивать устойчивость и качество работы нашей программы
Так вот, этого понимания повально не хватает разработчикам. Недавно я потратил неадекватно много времени и сил, чтобы донести эту мысль, и, кажется, об этом пора делать доклад
At its heart, Telegram is little more than a messaging app like WhatsApp or Signal. But it also offers open channels that enable a single user, or a group of users, to communicate with large numbers in a method similar to a Twitter account. This has proven to be both a blessing and a curse for Telegram and its users, since these channels can be used for both good and ill. Right now, as Wired reports, the app is a key way for Ukrainians to receive updates from the government during the invasion. Again, in contrast to Facebook, Google and Twitter, Telegram's founder Pavel Durov runs his company in relative secrecy from Dubai. Continuing its crackdown against entities allegedly involved in a front-running scam using messaging app Telegram, Sebi on Thursday carried out search and seizure operations at the premises of eight entities in multiple locations across the country. So, uh, whenever I hear about Telegram, it’s always in relation to something bad. What gives? Emerson Brooking, a disinformation expert at the Atlantic Council's Digital Forensic Research Lab, said: "Back in the Wild West period of content moderation, like 2014 or 2015, maybe they could have gotten away with it, but it stands in marked contrast with how other companies run themselves today."
from hk