Почему студентам не преподают использовать отладчик? [закрытый]

Существует много вопросов о домашней работе здесь на ТАК.

Я предположил бы, что 90% + могут быть решены путем продвижения через код в отладчике и наблюдения состояния программы/переменной.

Мне никогда не преподавали использовать отладчик. Я просто распечатал, и прочитайте руководство GDB, и ступил через их примеры. Когда я использовал Visual Studio впервые, я не забыл думать, Ничего себе! насколько более простой может это быть, нажать, чтобы установить точку останова, мышь по переменной для значения, нажать клавишу для продвижения, непосредственное окно, debug.print, и т.д...

Во всяком случае студентам "преподают" использовать отладчик? В противном случае, почему нет? (Возможно, лучший вопрос, почему они не могут учиться использовать отладчик сами..., возможно, им нужно сказать, что существует такой инструмент, который может помочь им...),

Сколько времени занимает учиться использовать отладчик?

25
задан 4 revs, 4 users 100%user113476 15 September 2012 в 17:08
поделиться

19 ответов

Я не думаю, что проблема в обучении. Использование современного графического отладчика - это не ракетостроение (по крайней мере, для большинства программ пользовательского режима, работающих на одном компьютере). Проблема в отношении некоторых людей. Чтобы эффективно использовать отладчик, вы должны:

  • Признать , что это ваша вина и select не сломан .
  • Проявить настойчивость, чтобы потратьте пару ночей на отладку, не забывая предыдущий пункт.
  • Нет конкретного алгоритма, которому нужно следовать. Вы должны грамотно догадываться и эффективно рассуждать на основании того, что видите.

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

27
ответ дан 28 November 2019 в 18:19
поделиться

На моем первом занятии по CS меня научили пользоваться отладчиком. Установка точек останова и пошаговое выполнение кода не принесло мне особой пользы, когда большая часть того, что я написал, было «Hello World!». С этого момента я практически игнорировал отладчик, пока не научился использовать GDB в более продвинутом курсе, работая над домашним заданием «бинарная бомба».

С тех пор как я закончил школу и работал, я потратил гораздо больше времени на отладчик и узнал, насколько он может быть полезен. Я бы сказал, что обучение использованию отладчика включает в себя три вещи: необходимость в одном, обучение / изучение того, как его использовать, и опыт, зная, как использовать один в своих интересах.

Также может быть полезно потратить некоторое время на изучение «эхо-отладки» в тех ситуациях, когда отладчик недоступен / необходим. Это всего лишь мои 0,02 доллара.

0
ответ дан 28 November 2019 в 18:19
поделиться

С практической точки зрения, скорее всего (из-за политических или технических ограничений) вы не можете использовать отладчик в производственном приложении . Отказ от использования отладчика как костыля способствует добавлению необходимого количества журналов в ваше приложение.

2
ответ дан 28 November 2019 в 18:19
поделиться

На мой взгляд, здесь есть несколько вопросов. Вот некоторые из них, о которых спрашивают, и некоторые из них, о которых я могу сделать вывод:

Изначально меня учили на БЕЙСИКЕ и Паскале, обычно с помощью интерпретатора, который облегчал выполнение программы до тех пор, пока что-нибудь не взорвется. У нас не было точек останова или многих из тех модных вещей, которые есть сейчас для трассировки по коду, хотя это было бы с 1983 по 1994 год с использованием Commodore 64, Watcom BASIC и Pascal на Mac.

Даже в моем более позднем варианте. университетские годы у нас не было отладчика. Если бы наш код не работал, у нас были операторы печати или ручная трассировка, с точки зрения времени это был бы 1995-1997 годы.

Один кавет с отладчиком - это что-то вроде Visual Studio, Вы хоть представляете, сколько времени может потребоваться, чтобы пройти через каждую функцию, которую он имеет для отладки? Думаю, в некоторых случаях на это могут уйти годы. Это без вдавления во все варианты сборки и другие вещи, которые он может сделать, которые в конечном итоге можно использовать. Другой момент заключается в том, что для всех хороших вещей, которые дает отладчик, есть что сказать о том, насколько сложными могут быть вещи, например, при использовании точки останова в VS есть стек вызовов, локальные переменные, окна часов, память, разборка и другие вещи, которые можно было бы изучить, пока выполнение остановлено.

Я думаю, что основы использования отладчика можно изучить примерно за неделю. Однако, чтобы понять, что делает отладчик,

0
ответ дан 28 November 2019 в 18:19
поделиться

В старшей школе нас учили отлаживать, записывая данные на консоль.

В колледже нас учили сочетать это плюс использование отладчика.

В инструментах есть стало только проще в использовании, поэтому я действительно не уверен, почему этому не учат.

0
ответ дан 28 November 2019 в 18:19
поделиться

А обнаружил, что среди академических кругов и опытных системных программистов очень много отрицательного отношения к отладчикам. Я столкнулся с одним весьма талантливым программистом, который утверждал, что «отладчики не работают, я просто использую файлы журналов». Достаточно справедливо, для многопоточных серверных приложений вам необходимо вести журнал, но нельзя отрицать, что отладчик полезен для 99% кода, который не является многопоточным.

Отвечая на ваш вопрос, да, отладчики должны быть охвачены программированием учебный план, но как один из инструментов отладки программы. Также важны отслеживание и регистрация.

1
ответ дан 28 November 2019 в 18:19
поделиться

В колледже меня учили пользоваться отладчиком. Немного, поздно (это должно быть почти второе, чему нужно учить), но они меня научили.

В любом случае, важно научить DEBUG, а не только «пользоваться отладчиком». Бывают ситуации, когда вы не можете отлаживать с помощью gdb (например, пытаетесь отладить программу, выполняющую 10 параллельных потоков), и вам нужен другой подход, например, старомодный printf. Я, конечно, могу согласиться с вами в том, что обычно методы отладки изучаются и начинают использоваться гораздо позже, чем в первый раз.

2
ответ дан 28 November 2019 в 18:19
поделиться

Это хороший вопрос, чтобы задать его преподавателям вашей школы.

В моем университете они привели очень краткий пример отладки, а затем указали нам на "справочные" файлы и книги.

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

4
ответ дан 28 November 2019 в 18:19
поделиться

Я сделаю предупреждение на другой стороне. Я научился программировать на Visual Basic и Visual C (середина 80-х), а отладчики были встроенными и простыми в использовании. На самом деле, слишком просто ... Обычно я не думал о том, как решить проблему, я просто запускал ее в отладчике и настраивал поведение. О, эта переменная слишком велика ... Я должен вычесть здесь единицу!

Только когда я перешел на Linux с не такой простой комбинацией gcc / gdb, я начал цените дизайн и думайте в первую очередь о своем коде.

Признаюсь, сейчас я, наверное, зашел слишком далеко в другом направлении. Я использую отладчик для анализа трассировки стека, и на этом все. Между анализом проблемы и ее пошаговым выполнением в отладчике должна быть золотая середина. Безусловно, людям следует показать все доступные инструменты.

3
ответ дан 28 November 2019 в 18:19
поделиться

Если под студентами вы имеете в виду студентов, изучающих информатику, я думаю, что ответ довольно очевиден. Тематика курсов - это, как правило, теория с использованием языка программирования / фреймворка / библиотеки в качестве помощи. Профессор не может углубиться в конкретный инструмент, поскольку это отнимет у него время, когда он преподает сети, системы или что-то еще. Может быть, если бы существовал курс под названием «Программирование в реальном мире» или что-то в этом роде, они бы охватили отладчики, но в целом я не вижу особого зла в том, чтобы ожидать, что студенты прочитают документацию по языку / инструменту для выполнения курсовой работы. .

5
ответ дан 28 November 2019 в 18:19
поделиться

В моей школе и университете большинство учеников вообще не заботились о программировании.

7
ответ дан 28 November 2019 в 18:19
поделиться

Ваш вопрос вроде как похож на "Почему студентов не обучают тестированию программного обеспечения"? Я уверен, что в некоторых местах это так, но обычно университеты/колледжи придерживаются преподавания "интересных" теоретических материалов по информатике и, как правило, не обучают практическим инструментам. Например, как если вы изучаете английский язык в школе, они учат вас писать, а не использовать MS Word (да, я уверен, что есть некоторые курсы Word, но вы понимаете, о чем я говорю)

.
0
ответ дан 28 November 2019 в 18:19
поделиться

Выдвигая гипотезу, основанную на моем опыте работы в качестве ассистента и стремящегося стать профессором криминалистики:

На самом деле это смутило бы детей, у которых почти нет опыта программирования больше, чем помогло бы.

Теперь, прежде всего: я полностью согласен с тем, что обучение использованию отладчика было бы замечательной вещью, но я думаю, что барьер на пути к этому проистекает из более серьезной, систематической проблемы, что программная инженерия и вычислительная техника не являются отдельными мейджорами. Для большинства программ CS потребуется 2-4 класса, в которых основное внимание уделяется обучению коду. После них требуется умение кодировать, но не тема класса.

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

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

И все это подводит меня к моей удивительной идее, которую, как мне кажется, должен делать каждый профессор CS при обучении кодированию: вместо того, чтобы просить у ребят только проекты, время от времени давайте им большой кусок сложного кода и просите их исправить ошибки. Это научит их пользоваться отладчиком

.
1
ответ дан 28 November 2019 в 18:19
поделиться

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

Оставшись на традиционных занятиях cs, студенты, похоже, не уходят с тем же набором навыков, которые помогают им сузить проблему, манипулировать данными во время выполнения программы/услуги/страницы/сайта/компонента, и действительно понимают последствия того, что они написали, в сравнении с тем, что им нужно было написать, чтобы сделать это правильно.

Я пошел в Rensselaer и "научился сам", потому что мне платили по фиксированной ставке за некоторые проекты, и я хотел свести к минимуму свое собственное время, потраченное на программирование - и это было еще больше усилено работой в качестве стажера @Microsoft в 1994 году, где я получил возможность увидеть, насколько полезной на самом деле является Интегрированная среда разработки (Integrated Dev Environment).

1
ответ дан 28 November 2019 в 18:19
поделиться

Меня не учили использовать отладчик в моей бакалавриате, потому что нельзя использовать отладчик на колоде перфокарт. Даже печатные заявления являются роскошью, если у вас есть 15-минутный поворот на "задания", и т.д.

Я не говорю, что людей не следует учить пользоваться отладчиками. Просто важно научиться отлаживать и без этой помощи, потому что:

  1. это поможет вам лучше понять свой код, если вам не придется полагаться на отладчик, и
  2. существуют ситуации, когда сложный отладчик будет недоступен.

По последнему пункту я также могу вспомнить отладку boot prom на встроенном устройстве с помощью (довольно дорогого) логического анализатора для перехвата того, что происходило на адресной строке / строке данных.

.
0
ответ дан 28 November 2019 в 18:19
поделиться

Потому что нет учебника по отладке, период.

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

Может быть, лекция о взломе игры может побудить студентов пройти через игру с помощью отладчика? По крайней мере, именно поэтому я рассказал себе, как использовать отладчик в 12 лет :)

.
2
ответ дан 28 November 2019 в 18:19
поделиться

По той же причине студенты не обучаются управлению версиями, модульному тестированию, написанию сценариев оболочек, редактированию текстов, написанию документации и даже (помимо вводных курсов) языкам программирования. Класс посвящен вычислительной технике, как правило, одному понятию или семейству понятий, а не программированию. Предполагается, что вы научитесь тому, что вам нужно.

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

.
0
ответ дан 28 November 2019 в 18:19
поделиться

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

По моему опыту, довольно редки случаи, когда на самом деле приходится иметь дело с кодовой базой достаточно большой, чтобы сделать нечто большее, чем просто беглое знакомство с отладчиком, стоящее вложения времени в большинство компиляторов. Учебные программы по естественным наукам. Программы маленькие, и проблемы, с которыми вы сталкиваетесь, в большей степени связаны с определением пространственно-временной сложности вашего алгоритма.

Отладчики становятся гораздо более ценными в реальных проектах, где у вас много кода, написанного разными людьми в разное время, чтобы проследить за тем, что продолжает застывать перед вызовом в bar().

.
5
ответ дан 28 November 2019 в 18:19
поделиться

Не совсем родственные, но люди должны использовать отладчики не только для отладки, но и для понимания рабочего кода.

4
ответ дан 28 November 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: