И тут я открываю ещё один поток, связанный с хорошим кодом, и дебагом. Хороший код должно быть легко дебажить - ибо мы точно в наших условиях написания кода допустим баги. И не всегда есть доступ к устройству.
Да тред про логи, но начнём с assert 😅
assert - функция которая нужна для программистов и отсекается в дебаге. Может иметь ещё названия: precondition, postcondition. Но суть у них одна.
С ней стоит быть аккуратней - нельзя в ней писать код, который что-то может изменить.
А то в дебаге работает, в релизе нет :)
Её мы используем, когда мы хотим сообщить себе/другим программистам, что что-то пошло не так - чаще всего какие-то данные отличаются от тех, что планировались.
Но код должен нормально продолжать работать при этом.
Написание ассертов позволяет избежать будущих проблем, когда ошибка долга остаётся не замеченной пока не выстрелит. А выстреливают обычно сильно.
Это первый звоночек, что стоит проверить код. Возможно вы не правильно используете функцию.
А теперь самое интересное - я считаю, что ассерт должен попадать в логи релиза. Я считаю, что это важная информация, если у клиента произошел ассерт.
Ну а дальше про логи. 1. Логирование это привычка - если ей не обладает вся команда, то логи вас не сильно спасут
Ну просто из-за того, что половинчатые логи, могут дать ложную информацию - по логам проблема была в одном, а в реальности она была в другом, просто там не было логов.
2. Логи это не панацея. Если вы не понимаете зачем они вам, и их ценности, то лучше не надо. Это инструмент. Как и дебагер, или профайл - это один из инструментов доступный всем.
3. Но инструмент при правильном использовании решает две проблемы:
а. Дебаг в многопоточной среде - бывает, что остановка программы влияет на её исполнение.
б. Дебаг в случае если устройство далеко, а баг только на нём. В ковид особенно актуально 😅
Я бы хотел написать потоки "зачем вам логи?" и "как пользоваться логами?", но у меня не хватит времени.
Поэтому расскажу просто случай, недавний. Пока ещё помню:
Перед этим важная информация. В проекте я использую крашлитикс и конечно же логи настроена на неё.
Более того логи уровня assert и error прилетаю в крашлитикс как nonFatal, и говорят мне - где-то есть проблемы, не приводящие к крашу.
И так срабатывает ассерт: пользователь пробует войти в систему с незаполненными полями логин или пароль.
Почему проблема? Ну кнопка должна блокироваться по идее, если нет данных.
Но не критичная - сервер то проверит.
Тестирование пропустило - не заметило. Да и если запустить, то всё хорошо - ввожу кнопка активно, удаляю не активна.
Идём в логи: в логах видно, что это всегда второй вход. А первый вход отсекается из-за неверных данных.
Проверяем: вводим не верные данные, получаем ошибку, и... ничего.
Тут смотрим логи, там запись ещё - логин пароль почистился.
А у нас есть опциональная функция - не сохранять данные если ты залогинился. То есть все данные чиститятся
Ага, ок как воспроизвести удалось. Да это всё заняло 5 минут.
Но проблема то по факту оказывается не в том, что кнопка не блочиться (это тоже поправил), а в том - а чего данные то чистятся?
Получаем в итоге что это уже не ошибка UI, а ошибка бизнес логики.
А это уже критичнее.
Вот так за 20 минут было поправлено две разных ошибки - отсутствие обновление UI + косяк в бизнес логике.
Последняя возможно в будущем бы стрельнула, а может нет.
А UI просто не приятная.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Ладно начнем тему истории ООП.
Сразу оговорюсь - я не считаю это чем-то важным для программиста, но и бесполезным тоже не считаю.
Так-как твиттер не то мест, где можно много написать, то пройдусь по важным моментам только.
Начнем с опроса:
Правильный ответ на опрос "ты серьезно?". И опечатку я совершил случайно, но когда увидел решил оставить.
Подвох был в том, что я не уточнил в какое время то нужно считать сколько было принципов.
Удивлен, что кто-то ответил 7 - видимо есть еще люди знающие историю
Как говорится вначале было слово, ну точнее до ООП было :) термин ООП ввел Алан Кей, в 1970х годах, для языка smallTalk. Но многие считают, что первым языком был все-же simula67.
На всякий случай повторим, что же такое ООП, конечно это можно и в интернете найти:
И сразу ответ - идти туда не стоит. Исключение: если вы не способны за собой даже смыть в общественном туалете, то вам стоит 😂
Вот таких личностей там быстро воспитывают.
Так был я в войсках связи. Сейчас я сержант - это три полоски. Являюсь командиром командно штабной машины. В мои задачи входит поддержание связи со штабом для капитанов во время движения и в поле.
Вначале я учился в учебе пол. Года. Там было почти скучно - снег кидали на дорогу, потом с дороги.
Ну пожалуй самое весёлое это люди переболевшие по 3 раза ветрянкой за пол. Года.
Но жили мы на болоте/торфе. Весной стало жарко - ну чтож тушить палками горящий лес возможно 😂
Теперь поговорим про "прогнозы" на 5-10 лет.
Начнём с главного - я не пытаюсь делать прогнозы даже на 2 года, слишком всё меняется.
Поэтому этот поток надо назвать "мои мечты о будущем" чем реальные прогнозы.
Первая моя надежда на ближайшие два года - появление iGlass. И я верю, что apple сделаю то, что нужно рынку.
Возможно захватит мир только 2/3 поколение, но apple не должны накосячить тут.
И они изменять наш UI/UX. И думаю намного больше чем появление часов.
Скорей всего спрос на AR технологии вырастет после не только у apple. И люди чаще начнут взаимодействовать с миром через AR
Первый мини поток - 10 пальцевая печать.
Вначале зачем? Я будучи коммерческими разработчиком писал двумя пальцами вначале, и мне не мешало... Но я решил переучиться всеже.
Мотивация одна: пока я напишу код, я уже забуду, что я писал 😅
Собственно говоря ради этого и нужен 10 пальцевых набор - чтобы максимально быстро и максимально не задумываясь о клавиатуре его записать.
Экономия ресурсов мозга получается значительной.
P.S. тоже самое и к перемещению по коду/проекту
А теперь как я учился. Поскольку начинал я в гипсе (на левой руке) то клавиатуру я сразу освоил криво. И писал около 7 лет по итогу такая двумя пальцами. Быстро тыкая - 180 символов в минуту 😅
Но в какой-то момент понял - надо переучиваться, так дело не пойдет
Возвращаемся к этой теме. Из около 10 проектов где я был в 4 мне понадобилось это знание, и в 3 я правил баг связанный с этим.
Вначале что это такое вообще, а потом одна самая прикольная история на это.
И так bigEndian и littleEndian относиться - о чудо к записи числа. Как всем известно у нас в памяти идут битики 01001011 :) 8 битиков это один байт (но не везде 8) но число обычно занимает не один байт, а 4 или 8.
Внутри одного байта все биты всегда идут в одном порядке - справа младший разряд слева старший. А вот байты можно переставлять - у кого-то справа старший байт у кого-то слева.
Так и появляется два типа записи: bigEndian и littleEndian.