Почему школы не охватывают отладчиков? [закрыто]


12

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

  • Вопрос в том, не следует ли отлаживать и как использовать современные средства отладки наряду с основами программирования? Если нет, то почему бы и нет.

2
Хм .. вы говорите, GDB это современный инструмент отладки? Это не плохой отладчик, но, безусловно, не современный.
Билли ONEAL

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

@rerun: Хм .. ой. Они не могут нажать кнопку "Play" на IDE? (Кстати, я +1)
Билли ONEAL

Ведение журнала печати system.out - последний бастион ленивых и неумелых

6
@Jarrod, довольно широкое обобщение и, возможно, слишком много. Иногда вы просто не можете использовать отладчик в вашей программе, где возникает проблема.

Ответы:


7

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

  • критическое мышление
  • разделяй и властвуй
  • отладка printf, ведение журнала и т. д.
  • кабинетная проверка
  • Стресс-тестирование

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

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


8

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

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


3
+1. Переведено: потому что не все используют MSVS, GCC / GDB, LLVM / CLANG и т. Д.
Billy ONeal

1
+1 хотя должен признать, что согласен с @rerun; Курс (или его часть), в котором рассматриваются базовые концепции и инструменты, используемые в магазине программного обеспечения, будет иметь большое значение для повышения производительности новых выпускников. Я сталкивался с несколькими, которые, кажется, не понимали контроль исходного кода даже после некоторого использования.
Кен Хендерсон

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

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

2
Использование отладчика требует понимания работы компьютера, а не только кода. Я бы посчитал это программированием фундаментальным . Я встречал слишком много студентов, которые просто понятия не имеют, что на самом деле делает их компьютер, и это не подходит для хорошего программиста.
edA-qa mort-ora-y

2

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


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

2
@ Билли, так что пошаговый неверный код как-то им поможет?
Нил Баттерворт

1
@Billi ONeal, ты не прав. Отладчик, о котором вы говорите, не существует. Интерактивный пошаговый просмотр программы полезен только тогда, когда вы уже определили проблему с ведением журнала отладки. Никогда в моей практике (> 20 лет) мне не приходилось использовать отладчик со своим собственным кодом - правильных утверждений и ведения журнала всегда было достаточно. Я использую только эти проклятые инструменты с кодом библиотек и устаревшими материалами. И, кстати, возможность сериализации любой структуры данных в нечто читаемое - это всегда хорошая идея. Некоторые языки / среды дают это бесплатно.
SK-logic

1
@Billy ONeal, как бы вы просматривали память устройства микроконтроллера, подключенного к последовательному порту? И я полагаю, что не очень хорошая идея выставлять новички на языки низкого уровня с помощью указателей и прочего, прежде чем они станут достаточно грамотными в структурах данных и алгоритмах. К тому времени они будут знать, как правильно отлаживать.
SK-logic

1
@Billy ONeal, самая трудная часть заключается в определении правильного момента, когда нужно либо проверить значение в отладчике (кстати, в большинстве случаев это все еще что-то вроде вызова метода .dump (), а не прямой проверки памяти) или распечатать сериализованное значение. При наличии надлежащей инфраструктуры ведения журнала отладки проблема сводится к анализу файлов журнала. В большинстве случаев простой grepделает работу. Нет степпинга, нет условных точек останова - просто grep.
SK-logic

2

Это не так важно. Я почти никогда не пользуюсь им и никогда не пользуюсь. Лучший способ отладки кода:

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

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


6
Я думаю, что это зависит. Если вы пытаетесь привыкнуть к поведению большой и плохо документированной кодовой базы, которую вы не написали, отладчик - один из самых быстрых способов привыкнуть к тому, что делает кодовая база. Если вы пишете весь код, конечно, вам не понадобится отладчик часто, но не все из нас находятся в этом месте. +1
Билли ONEAL

1
@ Билли Мы должны согласиться на разницу. Вы пытаетесь познакомиться с огромным торговым сервером MT с помощью отладчика.
Нил Баттерворт

@Neil: я никогда лично не имел дело с такими вещами ... но я раньше отлаживал код MT без проблем. Возможно, я испорчен MSVC ++ - отладчики там показывают, что различные потоки делают очень легко. Но если бы я выполнял отладку в версиях до 2008 года (думаю, именно тогда это было добавлено), я мог бы понять, как это может усложнить ситуацию.
Билли ONEAL

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

2
Я знаю, что вы летите здесь лицом полученной мудрости. Но вы находитесь в хорошей компании с такими людьми, как Линус Торвальдс, Ларри Уолл, Брайан Керниган и Роб Пайк.
Btilly

0

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

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


Хм ... может быть, моя школа просто другая, но в CWRU дела обстоят иначе.
Билли ONEAL

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

Я не уверен, откуда ты все это взял. Все вводные классы проводят несколько лекций о том, как отследить ошибки.
davidk01

@ davidk01 - Это не объясняет наблюдения ОП, о котором я слышал не часто, но не раз.
hotpaw2

@ hotpaw2: Что не объясняет наблюдение ОП? Тот факт, что ученикам трудно научиться отлаживать программы, не означает, что они не учат, к какому выводу вы стремитесь. Я прошел несколько курсов по программированию как студент, так и аспирант. В каждом классе преподаватель проводил хотя бы одну лекцию, чтобы просмотреть неправильную программу и исправить ее, чтобы продемонстрировать некоторые распространенные методы отладки.
davidk01

0

Этот вопрос для меня чужд. В моем университете использование отладчика (JDB и отладчик Eclipse) преподавалось еще в первом курсе компьютерных наук. Использование отладчиков и других инструментов тестирования было вновь изучено в курсе тестирования программного обеспечения.

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


0

Разберись сам

Я не нуждался и не хотел, чтобы профессор или ТА занимали время, обучая меня чему-то, что я мог легко понять самостоятельно. Они здесь для того, чтобы научить меня сложным концепциям и руководить обучением. Их нет и не должно быть там, поэтому вам не нужно RTFM.

Узнайте, как учиться

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

В гору, в обе стороны, сквозь снег

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.