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()... :shock:

Потом перешли на дисплеи. Как сейчас помню, работали в ДУВЗ - Диалоговый Удаленный Ввод Заданий.
Мой мозг не чужд рефлексии, и заметил еще тогда:
- программисты (и я в том числе) стали гораздо меньше анализировать код при наличии ошибки.
А зачем? Надо просто немного поправить код, где (КАК КАЖЕТСЯ) имеется ошибка, и запустить НА ПРОБУ.
Не угадали? Не беда, попробуем новую догадку...

Когда появились интегрированные среды, программы стали просто писать сразу в редакторе - без предварительного осмысления, чего и в каком порядке, собственно, писать-то требуется.
Наблюдаю у студентов повсеместно.
Возможно, парное программирование и возникло,
как попытка хоть в какой-то степени нивелировать это отрицательное влияние инструмента на программиста.

Если говорить конкретно об отладчике, то мне он фактически не нужен.
Имею интересный опыт, когда отладчик в 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 писал(а):
Я бы очень хотел посмотреть на опыт разработки ОС промышленного контроллера, где такой подход был бы возможен!
Особенно в условиях существенной зависимости от входных сигналов (включая помехи), многопоточной среды, нетривиальных проблем с железом при казалось бы допустимой замене комплектующих, интеграции сторонних библиотек, реализующих хитрые и ресурсоёмкие протоколы и т.д. и т.п.

Ну, современные контроллеры писать не приходилось, но "мастерство не пропьешь"" :D :D :D
Опыт разработки и написания бортовой оси с отладкой в восьмеричных кодах вас устроит?

Автор:  Валерий Лаптев [ Воскресенье, 11 Ноябрь, 2018 15:57 ]
Заголовок сообщения:  Re: К вопросу о воспитании правильных качеств программиста

Madzi писал(а):
Просто вам повезло писать программы одному.
А вот в ситуации когда в вашей ветке всё работает, а при объединении с мастер веткой - накрывается медным тазом (причём тесты проходят и у вас и в мастер ветке, просто функционал конфликтующий) - отладчик практически незаменим. Причём он даёт вам возможность получить некоторое состояние программы и провести как эксперимент, так реверсивный анализ, т.е. как вы попали в данное состояние. Я уже не говорю про задачи с DEAD/LIVE блокировками потоков и т.п.

Вы правы. В Астрахани я писал программы только в одиночку.
Только вы и правы.
:D

Автор:  Валерий Лаптев [ Воскресенье, 11 Ноябрь, 2018 16:00 ]
Заголовок сообщения:  Re: К вопросу о воспитании правильных качеств программиста

Кемет, вы слишком эмоциональны и ваши суждения о моей квалификации - сильно поверхностны.

Автор:  Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 18:22 ]
Заголовок сообщения:  Re: К вопросу о воспитании правильных качеств программиста

Comdiv писал(а):
Вы про seL4? Там, правда, не полумеры с модульными тестами, а полноценное доказательство корректности.
Нет, я вообще.
Как бы те вопросы, которые там в микроядре решаются, худо-бедно и в других местах решены, а проблемы, занимающие более 90% времени, от этого базового уровня не зависят никак...


Валерий Лаптев писал(а):
Ну, современные контроллеры писать не приходилось, но "мастерство не пропьешь"" :D :D :D
Опыт разработки и написания бортовой оси с отладкой в восьмеричных кодах вас устроит?
У меня есть аналогичный опыт с тех же времён, кстати.
Но современные задачи всё-таки не в пример сложнее, чтобы вот так юнит-тестами их взять и покрыть.
Поэтому повторю, что интересен именно реальный опыт разработки в условиях, описанных выше.

Автор:  Comdiv [ Воскресенье, 11 Ноябрь, 2018 19:07 ]
Заголовок сообщения:  Re: К вопросу о воспитании правильных качеств программиста

Alexey_Donskoy писал(а):
Как бы те вопросы, которые там в микроядре решаются, худо-бедно и в других местах решены, а проблемы, занимающие более 90% времени, от этого базового уровня не зависят никак...
Правильно ли я понимаю, что по ходу дела "хотелось бы увидеть" превратилось в "у других это тоже худо-бедно решено", и было снабжёно уверенностью, что подход, применённый для разработки микроядра, не применим для того, что занимает 90% времени?

Кстати, можете рассказать, как это должно решаться по правильному?

Автор:  Alexey_Donskoy [ Воскресенье, 11 Ноябрь, 2018 20:35 ]
Заголовок сообщения:  Re: К вопросу о воспитании правильных качеств программиста

Comdiv писал(а):
Правильно ли я понимаю, что по ходу дела "хотелось бы увидеть" превратилось в "у других это тоже худо-бедно решено", и было снабжёно уверенностью, что подход, применённый для разработки микроядра, не применим для того, что занимает 90% времени?
Не так.
Я задал выше конкретные вопросы и хотел бы увидеть подход к их решению.
По приведённой ссылке я увидел несколько другие задачи, и у меня не получается с ходу экстраполировать их подходы на мои задачи.

Цитата:
Кстати, можете рассказать, как это должно решаться по правильному?
Я первый спросил! :wink:

Автор:  Comdiv [ Воскресенье, 11 Ноябрь, 2018 21:19 ]
Заголовок сообщения:  Re: К вопросу о воспитании правильных качеств программиста

Alexey_Donskoy писал(а):
Цитата:
Кстати, можете рассказать, как это должно решаться по правильному?
Я первый спросил! :wink:
Так ответ был представлен, но он Вас не устраивает, так как вы не можете его экстраполировать на свой опыт. Так представьте же его(как надо правильно), чтобы было понятно, на что Вы не можете экстраполировать.

Автор:  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/