OberonCore https://forum.oberoncore.ru/ |
|
К вопросу о воспитании правильных качеств программиста https://forum.oberoncore.ru/viewtopic.php?f=7&t=6305 |
Страница 2 из 3 |
Автор: | Валерий Лаптев [ Пятница, 09 Ноябрь, 2018 20:12 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Прочитал срач по поводу необходимости отладчика в ББ: viewtopic.php?f=1&t=6236 Поделюсь своим опытом. Мне СИЛЬНО повезло, что пришлось работать с перфокартами и в отсутствии интерактивных средств. Отладкой вполне занимались и на перфокартах. Элементарно, Ватсон! Расставляешь принты в нужных местах - это и есть контрольные точки. Они сразу и выводят значения проверяемых переменных Это и есть обучение отладке - отладчик здесь АБСОЛЮТНО не нужен! Мне в ту пору не пришло в голову, что вместе с принтами можно ставить сразу и проверяющий код типа assert(). Не было в PL/1 assert()... Потом перешли на дисплеи. Как сейчас помню, работали в ДУВЗ - Диалоговый Удаленный Ввод Заданий. Мой мозг не чужд рефлексии, и заметил еще тогда: - программисты (и я в том числе) стали гораздо меньше анализировать код при наличии ошибки. А зачем? Надо просто немного поправить код, где (КАК КАЖЕТСЯ) имеется ошибка, и запустить НА ПРОБУ. Не угадали? Не беда, попробуем новую догадку... Когда появились интегрированные среды, программы стали просто писать сразу в редакторе - без предварительного осмысления, чего и в каком порядке, собственно, писать-то требуется. Наблюдаю у студентов повсеместно. Возможно, парное программирование и возникло, как попытка хоть в какой-то степени нивелировать это отрицательное влияние инструмента на программиста. Если говорить конкретно об отладчике, то мне он фактически не нужен. Имею интересный опыт, когда отладчик в IDE фактически вредил, а не помогал. Писал я тогда в Турбо С++ 2.0... В отладочном режиме трансляции все прекрасно работало и значения всех переменных были вполне корректны. Проверял и по шагам, и по контрольным точкам... Делаю релиз - не работает. Причем, при запуске из-под среды - работает, а без нее - нет. Мне потребовался независимый отладчик, причем отлаживал я покомандно. Обнаружил хитрую ошибку, которая в исходном коде была не видна. ИМХО, обучать школьников инструменту отладки - не нужно. Вредно. Методике отладки - обучать обязательно. |
Автор: | Владимир Ситников [ Суббота, 10 Ноябрь, 2018 09:08 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Валерий Лаптев писал(а): . Если говорить конкретно об отладчике, то мне он фактически не нужен. Имею интересный опыт, когда отладчик в IDE фактически вредил, а не помогал. Мне потребовался независимый отладчик, причем отлаживал я покомандно. Вы интересно пишете: начинаете с того, что отладчик вам не нужен, а заканчиваете тем, что он вам понадобился. И, по вашим словам, ошибку вы нашли именно с помощью отладчика. Так всё-таки, отладчик вреден или полезен? И что вы вообще понимаете под отладчиком? |
Автор: | Валерий Лаптев [ Суббота, 10 Ноябрь, 2018 10:28 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Владимир Ситников писал(а): Вы интересно пишете: начинаете с того, что отладчик вам не нужен, а заканчиваете тем, что он вам понадобился. И, по вашим словам, ошибку вы нашли именно с помощью отладчика. Так всё-таки, отладчик вреден или полезен? И что вы вообще понимаете под отладчиком? 1. В интегрированной среде для начинающих отладчик не только не нужен, но и ВРЕДЕН. Здесь я абсолютно солидарен с Ткачевым. В среде для начинающих нужен ВИЗУАЛИЗАТОР - надо показывать ход выполнения программы. Для лучшего усвоения. 2. В интегрированной среде для профессиональных программистов отладчик почти бесполезен. Ибо профессиональный программист: а) пишет маленькие классы-методы-функции - там отлаживать-то нечего, все сразу работает б) пишет программу ПОСТЕПЕННО - после добавления ОДНОЙ функции-метода-класса программа проверяется на работоспособность (тестированием). Так как функции-методы-классы маленькие, то отладчик здесь практически не требуется. в) Unit-тесты фактически заменяют отладчик. 3. Профессиональному программисту отладчик может понадобиться в очень редких случаях, когда обнаруживается невоспроизводимая ошибка при пользовании динамическими ресурсами (например, динамической памятью). Этот отладчик, естественно, не входит в интегрированную среду, а должен быть независимым. Под отладчиком я понимаю то же, что и все. Отладчик - это программа, позволяющая выполнить под своим управлением другую программу, обеспечивая программиста средствами управления прогоном, просмотра и изменения переменных. Пожалуй так. Но еще раз подчеркну: в средах для начинающих отладчик вреден - воспитывает вредные привычки. Нужен визуализатор выполнения. Но и его нужно использовать НЕ БЕСКОНТРОЛЬНО. Он может быть помощником для научения учня представлению и анализу хода выполнения программы в уме. |
Автор: | Kemet [ Суббота, 10 Ноябрь, 2018 13:03 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Валерий Лаптев писал(а): Элементарно, Ватсон! Расставляешь принты в нужных местах - это и есть контрольные точки. Они сразу и выводят значения проверяемых переменных Это и есть обучение отладке - отладчик здесь АБСОЛЮТНО не нужен! Очень смешно)))) Поставил контрольную точку в отладчике получил тот же принт))), только намного удобней, да и инфы больше, да и поиграть со значениями можно, да ... да много чего. |
Автор: | Валерий Лаптев [ Суббота, 10 Ноябрь, 2018 16:28 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Kemet писал(а): Очень смешно)))) Поставил контрольную точку в отладчике получил тот же принт))), только намного удобней, да и инфы больше, да и поиграть со значениями можно, да ... да много чего. Не смешно. Мне не нужно "играть" со значениями. Мне нужно понять, почему эти значения не равны правильным. Мозги надо включать, а не отладчик. Мне, как квалифицированному программисту он практически не нужен - я пишу сразу правильный код. И никогда не пишу всю программу сразу целиком. Только порциями, причем небольшими. И у меня чрезвычайно редко возникает ситуация, когда программа сразу не работает. |
Автор: | Madzi [ Воскресенье, 11 Ноябрь, 2018 00:40 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Валерий Лаптев писал(а): Мне, как квалифицированному программисту он практически не нужен - я пишу сразу правильный код. И никогда не пишу всю программу сразу целиком. Только порциями, причем небольшими. И у меня чрезвычайно редко возникает ситуация, когда программа сразу не работает. Просто вам повезло писать программы одному. А вот в ситуации когда в вашей ветке всё работает, а при объединении с мастер веткой - накрывается медным тазом (причём тесты проходят и у вас и в мастер ветке, просто функционал конфликтующий) - отладчик практически незаменим. Причём он даёт вам возможность получить некоторое состояние программы и провести как эксперимент, так реверсивный анализ, т.е. как вы попали в данное состояние. Я уже не говорю про задачи с DEAD/LIVE блокировками потоков и т.п. |
Автор: | Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 10:16 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Валерий Лаптев писал(а): Ибо профессиональный программист: Я бы очень хотел посмотреть на опыт разработки ОС промышленного контроллера, где такой подход был бы возможен!а) пишет маленькие классы-методы-функции - там отлаживать-то нечего, все сразу работает б) пишет программу ПОСТЕПЕННО - после добавления ОДНОЙ функции-метода-класса программа проверяется на работоспособность (тестированием). Так как функции-методы-классы маленькие, то отладчик здесь практически не требуется. в) Unit-тесты фактически заменяют отладчик. Особенно в условиях существенной зависимости от входных сигналов (включая помехи), многопоточной среды, нетривиальных проблем с железом при казалось бы допустимой замене комплектующих, интеграции сторонних библиотек, реализующих хитрые и ресурсоёмкие протоколы и т.д. и т.п. |
Автор: | Kemet [ Воскресенье, 11 Ноябрь, 2018 11:30 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Валерий Лаптев писал(а): Мне, как квалифицированному программисту И кто же выдал справку о присвоении квалификации? Остальное вообще на уровне фантастики)Цитата: Не смешно. Мне не нужно "играть" со значениями. Со включенными мозгами становится сразу очевидно, что значения равны правильным, именно поэтому происходит "игра" со значениями. В общем я вижу что уровень понимания отладки где-то так начальный.
Мне нужно понять, почему эти значения не равны правильным. Мозги надо включать, а не отладчик. |
Автор: | Comdiv [ Воскресенье, 11 Ноябрь, 2018 15:24 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Alexey_Donskoy писал(а): Я бы очень хотел посмотреть на опыт разработки ОС промышленного контроллера, где такой подход был бы возможен! Вы про seL4? Там, правда, не полумеры с модульными тестами, а полноценное доказательство корректности.
|
Автор: | Валерий Лаптев [ Воскресенье, 11 Ноябрь, 2018 15:55 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Alexey_Donskoy писал(а): Я бы очень хотел посмотреть на опыт разработки ОС промышленного контроллера, где такой подход был бы возможен! Особенно в условиях существенной зависимости от входных сигналов (включая помехи), многопоточной среды, нетривиальных проблем с железом при казалось бы допустимой замене комплектующих, интеграции сторонних библиотек, реализующих хитрые и ресурсоёмкие протоколы и т.д. и т.п. Ну, современные контроллеры писать не приходилось, но "мастерство не пропьешь"" Опыт разработки и написания бортовой оси с отладкой в восьмеричных кодах вас устроит? |
Автор: | Валерий Лаптев [ Воскресенье, 11 Ноябрь, 2018 15:57 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Madzi писал(а): Просто вам повезло писать программы одному. А вот в ситуации когда в вашей ветке всё работает, а при объединении с мастер веткой - накрывается медным тазом (причём тесты проходят и у вас и в мастер ветке, просто функционал конфликтующий) - отладчик практически незаменим. Причём он даёт вам возможность получить некоторое состояние программы и провести как эксперимент, так реверсивный анализ, т.е. как вы попали в данное состояние. Я уже не говорю про задачи с DEAD/LIVE блокировками потоков и т.п. Вы правы. В Астрахани я писал программы только в одиночку. Только вы и правы. |
Автор: | Валерий Лаптев [ Воскресенье, 11 Ноябрь, 2018 16:00 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Кемет, вы слишком эмоциональны и ваши суждения о моей квалификации - сильно поверхностны. |
Автор: | Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 18:22 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Comdiv писал(а): Вы про seL4? Там, правда, не полумеры с модульными тестами, а полноценное доказательство корректности. Нет, я вообще.Как бы те вопросы, которые там в микроядре решаются, худо-бедно и в других местах решены, а проблемы, занимающие более 90% времени, от этого базового уровня не зависят никак... Валерий Лаптев писал(а): Ну, современные контроллеры писать не приходилось, но "мастерство не пропьешь"" У меня есть аналогичный опыт с тех же времён, кстати.Опыт разработки и написания бортовой оси с отладкой в восьмеричных кодах вас устроит? Но современные задачи всё-таки не в пример сложнее, чтобы вот так юнит-тестами их взять и покрыть. Поэтому повторю, что интересен именно реальный опыт разработки в условиях, описанных выше. |
Автор: | Comdiv [ Воскресенье, 11 Ноябрь, 2018 19:07 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Alexey_Donskoy писал(а): Как бы те вопросы, которые там в микроядре решаются, худо-бедно и в других местах решены, а проблемы, занимающие более 90% времени, от этого базового уровня не зависят никак... Правильно ли я понимаю, что по ходу дела "хотелось бы увидеть" превратилось в "у других это тоже худо-бедно решено", и было снабжёно уверенностью, что подход, применённый для разработки микроядра, не применим для того, что занимает 90% времени?Кстати, можете рассказать, как это должно решаться по правильному? |
Автор: | Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 20:35 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Comdiv писал(а): Правильно ли я понимаю, что по ходу дела "хотелось бы увидеть" превратилось в "у других это тоже худо-бедно решено", и было снабжёно уверенностью, что подход, применённый для разработки микроядра, не применим для того, что занимает 90% времени? Не так.Я задал выше конкретные вопросы и хотел бы увидеть подход к их решению. По приведённой ссылке я увидел несколько другие задачи, и у меня не получается с ходу экстраполировать их подходы на мои задачи. Цитата: Кстати, можете рассказать, как это должно решаться по правильному? Я первый спросил!
|
Автор: | Comdiv [ Воскресенье, 11 Ноябрь, 2018 21:19 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Alexey_Donskoy писал(а): Цитата: Кстати, можете рассказать, как это должно решаться по правильному? Я первый спросил! |
Автор: | Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 21:48 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Comdiv писал(а): Так ответ был представлен Напомню, мой вопрос начался с тезиса "Unit-тесты фактически заменяют отладчик".И я поинтересовался, как могут помочь юнит-тесты в комплексной системе, где интенсивная работа с железом во множестве потоков и т.д. Другими словами, когда требуется системное тестирование, от юнит-тестов проку мало. Даже из идеальных кирпичиков не факт что удастся сложить рабочую систему. На что, собственно, Лаптеву и указали. Да, собственно, и он сам далее писал про один из частных случаев: Цитата: 3. Профессиональному программисту отладчик может понадобиться в очень редких случаях, когда обнаруживается невоспроизводимая ошибка при пользовании динамическими ресурсами (например, динамической памятью)
|
Автор: | Comdiv [ Воскресенье, 11 Ноябрь, 2018 22:00 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Alexey_Donskoy писал(а): И я поинтересовался, как могут помочь юнит-тесты в комплексной системе, где интенсивная работа с железом во множестве потоков и т.д. На мой взгляд, с этого стоило начать, а не "напоминать". По опыту общения с людьми, могу сказать, что все понимают модульное тестирование по-своему, и не все отделяют его от системных тестов. Вот только какое отношение системные тесты имеют к пошаговому отладчику?
Другими словами, когда требуется системное тестирование, от юнит-тестов проку мало. |
Автор: | Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 22:23 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Comdiv писал(а): какое отношение системные тесты имеют к пошаговому отладчику? Полагаю, такое, что сей отладчик зачастую является единственным результативным инструментом, когда в системе "что-то идёт не так"...Но, пожалуй, соглашусь с исходным тезисом, что отладчик - это "высшая математика", для которой ещё не настало время в начальном обучении. |
Автор: | Валерий Лаптев [ Воскресенье, 11 Ноябрь, 2018 22:49 ] |
Заголовок сообщения: | Re: К вопросу о воспитании правильных качеств программиста |
Alexey_Donskoy писал(а): Напомню, мой вопрос начался с тезиса "Unit-тесты фактически заменяют отладчик". И я поинтересовался, как могут помочь юнит-тесты в комплексной системе, где интенсивная работа с железом во множестве потоков и т.д. Другими словами, когда требуется системное тестирование, от юнит-тестов проку мало. Даже из идеальных кирпичиков не факт что удастся сложить рабочую систему. На что, собственно, Лаптеву и указали. Да, собственно, и он сам далее писал про один из частных случаев: Цитата: 3. Профессиональному программисту отладчик может понадобиться в очень редких случаях, когда обнаруживается невоспроизводимая ошибка при пользовании динамическими ресурсами (например, динамической памятью) Поправлю свой ответ. На тех задачах, которые я писал, отладчик не нужен. То есть МНЕ он действительно не нужен. Вполне понятно, что есть задачи, не покрываемые unit-тестами. Но как я понял срач про отладчик, речь-то шла об IDE для обучения и программирования достаточно типовых задач. Для таких задач - отладчик не нужен. А для обучения начинающих - вреден. Еще раз повторю - в этом я с Ткачевым абсолютно солидарен. Отладчик вреден для неокрепших мозгов. |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |