Подтвердить что ты не робот

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

Здесь много вопросов о домашних заданиях.

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

Отладчики были введены на моем втором курсе Intro to C, если я правильно помню. Конечно, проблема, с которой большинство студентов боролись, в этот момент заключалась в том, что их работа скомпилировалась, что отладчик не поможет. И как только их десять команд командной строки линии компилируются, а затем выходят из строя, ну, у них уже есть некоторые printfs. Борьба за освоение GDB является чрезмерной.

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

Потому что нет текстовой книги для отладки, периода.

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

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

Ответ 11

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

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

Ответ 12

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

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

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

Ответ 13

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

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

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

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

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

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

Ответ 14

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

В колледже нас научили сочетанию этого плюс с помощью отладчика.

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

Ответ 15

В моем первом классе CS меня научили использовать отладчик. Мне не очень понравилось устанавливать контрольные точки и выполнять мой код, когда большая часть того, что я написал, была "Hello World!". Я в значительной степени игнорировал отладчик с этого момента, пока не научился использовать GDB в гораздо более продвинутом курсе, работая над домашним заданием "бинарной бомбы".

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

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

Ответ 16

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

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

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

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

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

Ответ 17

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

Ответ 18

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

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

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

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

Ответ 19

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

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