Ошибки начинающих разработчиков: * Вера в магию * Путаница между причиной и следствием * Stackoverflow Driven Development Эффективная отладка: 1. Локализация проблемы 2. Поиск точки опоры 3. Пошаговое подключение кода
Еще стратегия по поиску ключей в квартире: восстановить траекторию своих перемещений по квартире за последнее время, и пройтись по ней. Применительно к коду: посмотреть, что трогали за время, прошедешее с последнего успешного запуска. Часто косяки либо напрямую там, либо правильный новый код триггернул скрытый косяк в другом месте. При нахождении "точки опоры" и обратного подключения частей программы, я обычно подключаю их не шаг за шагом, а "методом деления отрезка пополам" - раскомментирую сразу одну половину. Если программа работает - перехожу ко второй половинке тем же методом, если же ошибка всплыла - комментирую обратно одну из половинок раскомментированной части. Таким образом локализация ошибки происходит не за O(N), а за O(log N).
Да не правда все это, что он тут задвигает. Отладка - искусство) да, ага. И в спорте и везде конечно же играет роль насколько качественными инструментами ты пользуешься. Это просто проверить, ты играешь например в пинг-понг, проигрываешь. Меняешься ракетками - выигрываешь. Хм, почему же так)))
Многое зависит от приложения. Если отображаемая информация четко согласована с состоянием приложения, то тогда локализация занимает значительно меньше времени. Насчёт спускаться от точки опоры - спуск возможен, если путей один или два, иначе это уже перебор всего кода, отсюда стоит делать минимальное количество точек входа. А по поводу ключей: на последней стадии я не перерываю всё в одной локации, а навожу порядок - обычно после этого ключи легко находятся. Тоже самое у меня применимо и к коду - легкий рефакторинг и возможно станет ясна причина. Суммарно: чем строже и логичнее код, тем проще в нём искать баги, так как баг это что-то нелогичное и оно в логичном коде просто будет бросаться в глаза.
Лично я заметил, что применение TDD при малейшем изменении, реально помогает избегать большинство запутанных ошибок. По сути, Кирилл описал тот же принцип при отладке - разделяй и властвуй.
временами слушаю этот ролик как медитацию при прохождении заданий на Хекслет, зачастую код вроде правильный, но среди кучи символов иногда упускаешь какую-то мелочь)
Пррекрасный мультик для новичков. МилЧеловек, а что такое СтекОверфлоу? Что такое Сниппет? Если вы беретесь преподавать несведующим людям то каждый новый термин при первом упоминании должен быть расшифрован. Угу. Опять же.... Фреймворк? Можете объяснить внятным языком что это такое? Треды могут общаться... Гонки, Шаред Стейт..... Пдждите пжалста, язаписсывайу. Что касается вашего подхода, то была древняя шуточная задачка: как поймать льва в Пустыне и подход разных специалистов к этому процессу. Мой любимый способ - способ Деканата: Хвост есть - сам придет. А ваш это подход геометрический - делим пустыню пополам, смотрим где лев, дальше делим половину где лев еще пополам и.т.д. Чтобы мой комментарий не казался тупым наездом хочу сказать, что в названии ролика есть слова "для начинающих" и я сюда пришоло по ссылке с курса где учать писать "Hello, World."
Отличное замечание. Я слушал это всё и у меня начались сильные сомнения смогу ли я стать программистом. Но твой комментарий снова воодушевил меня и я опять решил не сдаваться
Чем отличается опытный разраб от джуна? У него есть привычка "класть ключи" всегда в одно и то же место, а также знать аналогичные привычки других. Поэтому, в случае пропажи, джун действительно начинает поиск по разным стратегиям, а опытный инженер просто идёт в нужное место и берёт ключи.😂
Изучал основы Python3 и было задание написать быстрое сортирование. Нашёл алгоритм с двух-концевым быстрым сортированием на JAVA и перевёл на питон оставляя for - а там изменяется переменная цикла внутри цикла и резултат был, что итоговый список выходил не как должен. Было интересно поучиться использовать средства отладки в питоне и в конце понять, что ошибка при переводе (поменял циклы на while и заработало).
Начала смотреть это видео, потому что не могла найти ошибку в коде. Поиск ключей. Представила, как бы искала. Начала с двери - не в замке ли они? Так и есть. Код тоже. Всё написала, всё здорово. Но самое главное - забыла нвписать print. )))
Очень интересно. Ключи всегда вешаю на гвоздик. Плохой ракеткой сыграть можно но трудно. Наклейки, резина. Насчёт сути. Во всём мне хочется дойти до сути. В работе, суете, душевной смуте. Б. Пастернак.
Если компилятор указывает на строку где все нормально, а ошибка находится где то выше по коду, то чаще все использую отладочный вывод переменных на экран)
Поиск ошибок - это искусство, которое дается только со временем и с опытом, и очень часто основывается на личной интуиции. Квалификация разработчика заключается именно в этом.
Странное обоснование утверждения, что инструменты для отладки не так важны - на примере мастера спорта с плохой ракеткой. Отлаживать вообще без инструментов, это всё равно, что играть в настольный теннис вообще без ракетки. Каким бы ты не был мастером спорта, играть так не получится. Вот и отлаживать без инструментов не получится. Ну никак.
@@vlad4876 С удовольствием понаблюдаю, как Вы будете отлаживать с помощью print код, который манипулирует коллекцией из нескольких сотен/тысяч объектов, каждый из которых содержит десяток-два полей =D. В отладчике в режиме останова я могу просматривать эту коллекцию как угодно, т.к. она загружена в память, Вам же придётся (а) выгружать в файл, т.к. в консоли просматривать килобайты текста нереально и (б) в текстовом редакторе потом с этим файлом общаться. Я даже не говорю о том, что в отладчике можно на лету подменять значения и смотреть, что из этого получится -- при использовании print такой возможности нет. Так что Ваш способ подходит (а) только для достаточно простых случаев и (б) если есть консоль. Если отлаживается код веб-сервера -- куда print выводит будет? Нужно прикручивать логирование. Так что ответ на "да ладно?" -- да, именно так. :)