Чому школи не покривають налагоджувачі? [зачинено]


12

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

  • Питання в тому, чи не слід налагоджувати і як використовувати сучасні засоби налагодження поряд з основами програмування? Якщо ні, чому ні.

2
Ем .. ви кажете, що gdb - це сучасний інструмент налагодження? Це не поганий налагоджувач, але це, звичайно, не сучасний стан.
Біллі ONeal

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

@rerun: Erm .. ой. Вони не можуть натиснути кнопку "відтворити" на IDE? (BTW, я поставив +1)
Billy ONeal

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

6
@Jarrod, досить широке узагальнення і, можливо, надто так. Іноді ви просто не можете використовувати налагоджувач у вашій програмі, де виникає проблема.

Відповіді:


7

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

  • критичне мислення
  • розділяй і володарюй
  • налагодження printf, ведення журналів тощо
  • бюро перевірки
  • стрес-тестування

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

На цю тему існує досить хороша книга, яку, мабуть, потрібно прочитати для всіх магістрів та тих, хто навчається основам програмування: Налагодження Девід Дж Аганс .


8

Курси вищої інформатики пристосовані до викладання студентів з програм програмування , як ви вже згадували - ці поняття викладаються студентам з надією, що вони зможуть використати необхідні поняття та застосувати його до більш широкого кола мов програмування та наборів проблем.

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


3
+1. Перекладено: Тому що не всі використовують MSVS, GCC / GDB, LLVM / CLANG тощо.
Біллі ONeal,

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

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

3
Я абсолютно не згоден. Якщо фактичний код пишеться (оскільки написання коду - це хороший спосіб практикувати наукові концепції), тоді студенти повинні мати доступ до хороших способів написання цього коду, що включає використання налагоджувача при необхідності. Це не забирає час, який можна витратити на нотацію bigO - це звільнення часу, який багато студентів витрачають на жорстоке просування шляхом незначних помилок. Від цього нічого не здобуто. Крім того, багато інших наукових курсів (наприклад, фізика) включають практичні навички вимірювання як частину своєї навчальної програми.
Інка

2
Використання налагоджувача вимагає розуміння того, як працює комп'ютер, а не лише код. Я вважаю це програмуванням основним . Я стикався із занадто великою кількістю студентів, які просто не мають уявлення, чим насправді займається їхній комп’ютер, і це не робить для хорошого програміста.
edA-qa mort-ora-y

2

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


4
Хороший налагоджувач простіший у використанні, ніж друковані заяви. Виписки заяви вимагають, щоб ви якось мали спосіб серіалізувати свої дані в рядок, що вимагає власного (можливо, помилки) коду, щоб зробити серіалізацію. Наприклад, програму зв'язаного списку легко переступити через налагоджувач, але друковані висловлювання не допоможуть студенту, який намагається написати алгоритм поперечного переходу пов'язаного списку - тому що вам знадобиться цей алгоритм для написання правильних заяв про друк .
Біллі ONeal

2
@Billy, якщо перейти через неправильний код, якимось чином їм допоможе?
Ніл Баттерворт

1
@Billi ONeal, ти помиляється. Відладчик, про який ви говорите, не існує. Інтерактивний перехід через програму корисний лише тоді, коли ви вже визначили проблему з журналом налагодження. Ніколи в моїй практиці (> 20 років) мені не довелося використовувати налагоджувач із власним кодом - належних тверджень та ведення журналу завжди було достатньо. Я використовую лише ті прокляті інструменти з кодом бібліотек та спадщиною. І, до речі, вміння серіалізувати будь-яку структуру даних у щось читабеле - це завжди гарна ідея. Деякі мови / середовища надають це безкоштовно.
SK-логіка

1
@Billy ONeal, як би ви переглядали пам'ять пристрою мікроконтролера, приєднаного до послідовного порту? І я вважаю, що не так-то гарна ідея викривати свіжіші мови низького рівня за допомогою покажчиків та інших матеріалів, перш ніж вони будуть достатньо грамотними в структурах даних та алгоритмах. До того часу вони будуть знати, як правильно налагоджувати.
SK-логіка

1
@Billy ONeal, найскладніша частина полягає у визначенні правильного моменту, коли або перевірити значення в налагоджувачі (btw., У більшості випадків це все-таки щось на зразок виклику методу .dump (), а не прямої перевірки пам'яті) або надрукувати серіалізоване значення. При наявності належної інфраструктури ведення журналу налагодження проблема звужується до аналізу файлів журналів. У більшості випадків простий grepробить свою роботу. Ні кроків, ні умовних точок перерви - просто греп.
SK-логіка

2

Це не так важливо. Я майже ніколи не використовую і ніколи. Найкращий спосіб налагодження коду:

  • не пишіть помилки в першу чергу
  • якщо ви все-таки пишете їх, виправте їх, думаючи, а не занурюючись до налагоджувача

А для багато сучасного багатопотокового програмного забезпечення відладчики приховують помилки, а не розкривають їх. І їх точно не слід "викладати" на рівні ступеня, будь-який більше, ніж один, навчив би користуватися текстовим процесором.


6
Я думаю, що це залежить. Якщо ви намагаєтеся звикнути до поведінки великої та погано задокументованої бази даних, яку ви не написали, налагоджувач - це один із найшвидших способів привчатись до того, що робить база даних коду. Якщо ви пишете весь код, звичайно, вам не буде потрібен налагоджувач часто, але не всі ми в цьому місці. +1
Біллі ONeal

1
@Billy Ми повинні погодитися відрізнятися. Ви намагаєтеся познайомитися з величезним сервером торгівлі 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.