Okullar neden hata ayıklayıcıları kapsamıyor? [kapalı]


12

Sonra SO hakkında başka bir ödev soru . Öğrencilerin büyük çoğunluğunun bir hata ayıklayıcının ne olduğu veya nasıl kullanılacağı hakkında hiçbir fikri yok gibi görünüyor. Bir hata ayıklayıcıyı nasıl kullanacağınızı bilmenin, programlamanın diğer temelleri kadar önemli olduğunu hissediyorum.

  • Soru, hata ayıklama olmamalı ve programlama hatalarının yanı sıra modern hata ayıklama araçlarının nasıl kullanılacağı da öğretilmelidir. Eğer değilse neden olmasın.

2
Eee .. gdb'nin modern bir hata ayıklama aracı olduğunu mu söylüyorsunuz ? Kötü bir hata ayıklayıcı değil, ama kesinlikle en son teknoloji değil.
Billy ONeal

1
Kabul ediyorum ama aynı zamanda öğrencilerin görsel stüdyo kullandıkları ve bir hata ayıklayıcıyı nasıl veya neden kullanacaklarını bilmedikleri sorusunu da yanıtladım.
yeniden çalıştırın

@rerun: Erm .. ah. IDE'deki "play" düğmesine basamıyorlar mı? (BTW, I + 1'ledi)
Billy ONeal

system.out baskı günlüğü tembel ve beceriksiz son

6
@Jarrod, oldukça geniş bir genelleme ve belki de çok fazla. Bazen programınızda sorunun oluştuğu bir hata ayıklayıcıyı kullanamazsınız.

Yanıtlar:


7

Bu , öğretilmesi gereken hata ayıklayıcıların kullanımı değil, daha genel hata ayıklama teknikleri . Bu, elbette bir hata ayıklayıcının nasıl kullanılacağını öğretmeyi de içerecektir, ancak aynı zamanda çeşitli diğer önemli teknikleri de içerecektir.

  • kritik düşünce
  • böl ve fethet
  • printf hata ayıklama, günlüğe kaydetme, vb.
  • masa kontrolü
  • stres testi

Ek bir fayda olarak, tekniklerin birçoğu programlama dışındaki alanlarda problem çözme için de uygulanabilir.

Tüm bu konuda muhtemelen tüm lisans öğrencileri ve programlamanın temellerini öğrenen herkes için okunması gereken iyi bir kitap var: David J Agans tarafından hata ayıklama .


8

Üçüncül bilgisayar bilimleri dersleri, bahsettiğiniz gibi, öğrencilere programlama temellerini öğretmeye yöneliktir - bu kavramlar, öğrencilere gerekli kavramları kavramaları ve daha geniş bir programlama dilleri ve problem setlerine uygulamalarını umarak öğretilir .

Hata ayıklama araçları ise uygulama alanında bir alt kümedir - her araç her dil için farklıdır (kavramlar aynı olsa da). Hata ayıklama araçlarına maruz kaldık, ancak onları gerçekten derinlemesine kapamadık. Hata ayıklama araçlarına bir haftadan fazla zaman harcamış olsaydım, geriye dönüp baktığımda - zaman kaybı olduğunu düşünürdüm. BigO notasyonu veya polimorfizmi öğrenmeyi tercih ederim. Ancak, bir hata ayıklama aracının gücü öğrencilere (başarılı bir şekilde) aktarılmamışsa, bu bir eksiklik olacaktır.


3
+1. Çeviri: Çünkü herkes MSVS, GCC / GDB, LLVM / CLANG, vb.
Kullanmıyor

1
@Rerun kabul ettiğimi itiraf etsem de +1; Bir yazılım mağazasında kullanılan temel kavramları ve araçları ele alan bir ders (ya da bir bölümü), yeni mezunların üretken olma yolunda uzun bir yol kat edecektir. Bir süre kullandıktan sonra bile kaynak kontrolünü anlamayan birkaç tanesiyle karşılaştım.
Ken Henderson

ortalama geliştiricilerin orada çok fazla zaman geçirdiği Becerilerin çoğu okulda kapsanmaktadır. Kaynak Kontrolü, genel olarak Konfigürasyon yönetimi, kod keşfi, kod okuma, Derleme işlemleri vb. ve kodu kontrol ettirin ve "konuşlandırıldı" yeni bir geliştiriciyi çok daha kullanışlı hale getirecektir.
tekrar çalıştır

3
Ben kesinlikle katılmıyorum. Eğer gerçek kod yazılıyorsa (kod yazmak bilimsel kavramları uygulamak için iyi bir yol olduğu için), o zaman öğrenciler bu kodu yazmanın iyi yollarına erişebilmelidirler ve buna gerekirse bir hata ayıklayıcıdan faydalanma da dahildir. Bu, bigO gösterimi için harcanabilecek zamanı ortadan kaldırmaz - birçok öğrencinin küçük hatalar yoluyla yollarını kaba kuvvetlendirmek için harcadığı zamanı serbest bırakır. Bundan pek bir şey kazanılmaz. Ayrıca, diğer birçok fen dersi (örneğin fizik) müfredatlarının bir parçası olarak pratik ölçüm becerilerini içerir.
İnka

2
Bir hata ayıklayıcı kullanmak, yalnızca kodu değil bilgisayarın nasıl çalıştığını anlamayı gerektirir. Bunu bir programlama temeli olarak düşünürdüm . Bilgisayarlarının gerçekte ne yaptığını bilmeyen çok sayıda öğrenciyle karşılaştım ve bu iyi bir programcı için uygun değil.
edA-qa mort-ora-y

2

En giriş programlama dersleri program durumu birkaç baskı ifadeleri ile herhangi bir hata ayıklamak yeterince basittir. Öğrencileri elle bir şeyler yapmaya zorlama sorunu da olabilir, böylece kodda belirli hata türlerinin nasıl ve nerede oluştuğuna dair bir fikir edinirler. Nereye bakacağınız hakkında bir fikriniz yoksa, bir hata ayıklayıcı oldukça işe yaramaz olacaktır.


4
İyi bir hata ayıklayıcının kullanımı basılı ifadelerden daha kolaydır . Yazdırma ifadeleri, verilerinizi bir dizeye serileştirmek için bir yolunuzun olmasını gerektirir; bu da serileştirmeyi yapmak için kendi (muhtemelen hata basmış) kodunu gerektirir. Örneğin, bağlantılı bir liste programını bir hata ayıklayıcıda kolayca atlayabilirsiniz, ancak yazdırma ifadeleri bağlantılı liste enine algoritması yazmaya çalışan bir öğrenciye yardımcı olmaz - çünkü doğru algoritmaların yazılması için bu algoritmaya ihtiyacınız olacaktır .
Billy ONeal

2
@Billy yanlış kodda adım atmak onlara bir şekilde yardım edecek mi?
Neil Butterworth

1
@Billi ONeal, yanılıyorsun. Bahsettiğiniz bir hata ayıklayıcı mevcut değil. Program boyunca etkileşimli adım atma, yalnızca hata ayıklama günlüğü ile ilgili sorunu zaten tanımladığınızda yararlıdır. Pratikte asla (> 20yrs) kendi kodumla bir hata ayıklayıcı kullanmak zorunda kaldım - uygun iddialar ve günlük kaydı her zaman yeterliydi. Sadece bu lanet araçları kütüphane kodu ve eski şeyler ile kullanıyorum. Ve btw., Herhangi bir veri yapısını okunabilir bir şeye serileştirmek her zaman iyi bir fikirdir. Bazı diller / ortamlar bunu ücretsiz olarak verir.
SK-logic

1
@Billy ONeal, bir seri bağlantı noktasına bağlı bir mikrodenetleyici aygıtının belleğine nasıl göz atarsınız? Ve veri yapılarında ve algoritmalarda yeterince okuryazar olmadan önce tazeleyicileri işaretçiler ve şeyler içeren düşük seviyeli dillere maruz bırakmanın iyi bir fikir olmadığına inanıyorum. O zamana kadar düzgün bir şekilde nasıl hata ayıklayacağını bilirler.
SK-logic

1
@Billy ONeal, en zor kısım, bir hata ayıklayıcıdaki bir değerin ne zaman denetleneceğinin doğru anının belirlenmesidir (btw., Çoğu durumda hala doğrudan bellek denetimi değil, bir .dump () yöntemi çağırmak gibi bir şeydir) veya serileştirilmiş bir değer yazdırmak için. Uygun bir hata ayıklama günlüğü altyapısı uygulandığında, sorun günlük dosyalarının analizine daraltılır. Çoğu durumda basit bir grepiş yapar. Adım yok, koşullu sınır yok - sadece grep.
SK-logic

2

O kadar önemli değil. Neredeyse hiç kullanmıyorum ve hiç kullanmadım. Kodda hata ayıklamanın en iyi yolu:

  • böcekleri ilk etapta yazma
  • bunları yazarsanız, hata ayıklayıcıya dalarak değil düşünerek düzeltin

Ve çok modern, çok iş parçacıklı yazılımlar için, hata ayıklayıcılar, hataları ortaya çıkarmak yerine hataları gizleme etkisine sahiptir. Ve kesinlikle derece düzeyinde "öğretilmemelidir", birden fazla kelime işlemcinin nasıl kullanılacağını öğretirdi.


6
Sanırım buna bağlı. Yazmadığınız büyük ve kötü belgelenmiş bir kod tabanının davranışına alışmaya çalışıyorsanız, hata ayıklayıcı, kod tabanının yaptığı şeyle alışmanın en hızlı yollarından biridir. Tüm kodu yazıyorsanız, sık sık bir hata ayıklayıcıya ihtiyacınız olmayacak, ancak hepimiz o yerde değiliz. +1
Billy ONeal

1
@Billy Farklı olmayı kabul etmeliyiz. Bir hata ayıklayıcı ile büyük bir MT ticaret sunucusu tanımayı deneyin.
Neil Butterworth

@Neil: Ben asla kişisel olarak bu tür bir şeyle uğraşmadım ... ama daha önce sorunsuz MT kodu hata ayıkladım. Belki de MSVC ++ tarafından şımarık - orada hata ayıklayıcılar çeşitli iş parçacığı gerçekten ne yaptığını gösteren yapmak. Ancak 2008'den önceki sürümlerde hata ayıklama yapsaydım (sanırım bu eklendiğinde) bunun nasıl daha zor olabileceğini görebiliyordum.
Billy ONeal

@Neil: Beni yanlış anlamayın - Hata ayıklayıcının düşünmenin yerini tuttuğunu ya da baktığınız tek şeyin bu olması gerektiğini söylemiyorum. Ben sadece bunun bazı durumlarda bir şeyi daha kolay anlaşılmasını sağlayacak bir araç olduğunu söylüyorum. Bir hata ayıklayıcı daha fazla karışıklığa neden oluyorsa, genellikle daha fazla karışıklığa neden olduğunu söylemek kolaydır (çünkü daha fazla karışıyorsunuz) ve o zaman hata ayıklayıcıyı kapatıp başka bir şey denersiniz. Bazı durumlarda yardımcı olur, ancak kod / girdi / çıktıya bakmanın ve neler olduğunu düşünmenin yerini tutmaz.
Billy ONeal

2
Buralarda alınan bilgeliğin yüzünü uçtuğunu biliyorum. Ama Linus Torvalds, Larry Wall, Brian Kernighan ve Rob Pike gibi insanlarla iyi bir ilişkiniz var.
btilly

0

Hata ayıklama öğretilmelidir, çünkü öğrenciler her türden hata yaparlar, bazıları ise belirli bir hata ile ilgili herhangi bir aydınlanmadan önce bazı deneysel veriler (hata ayıklama bilgisi) edinilmesini gerektirir.

Hata ayıklama, programların tasarımla doğru, belki de kanıtlanabilir olması gerektiği gerekçesiyle (belki de matematik bölümünden miras alınmıştır) öğretilmemiştir. Ve böylece öğrenciler doğru programlamayı "denememeli". Ancak bu, program basınçları vb. Altında değişen özelliklere göre yazılım kuran kusurlu insanların gerçek dünya üretim sürecini göz ardı eder.


Hmm .. belki benim okulum sadece farklıdır, ama CWRU'da işler böyle yapılmaz.
Billy ONeal

Muhtemelen söz konusu programlama kursunun tarihsel bölüm kalıtım ağacına bağlıdır.
hotpaw2

Tüm bunları nereden aldığınızdan emin değilim. Tüm giriş sınıfları hataları izlemek için birkaç ders harcıyorlar.
davidk01

@ davidk01 - Bu OP'nin duyduğum gözlemini açıklamıyor, sık değil, bir kereden fazla.
hotpaw2

@ hotpaw2: OP'nin gözlemini ne açıklamıyor? Öğrencilerin programlarda hata ayıklamayı öğrenmekte zorlanmaları, öğretilmediğiniz anlamına gelmez, ki bu da atladığınız sonuçtur. Hem lisans öğrencisi hem de yüksek lisans öğrencisi olarak çeşitli programlama dersleri aldım. Her sınıfta eğitmen, yanlış bir programın üzerinden geçmek ve bazı yaygın hata ayıklama tekniklerini göstermek için bunu düzeltmek için en az bir ders harcadı.
davidk01

0

Bu soru benim için yabancı. Üniversitemde hata ayıklayıcının (JDB ve Eclipse hata ayıklayıcı) kullanımı ilk yıl bilgisayar bilimleri dizisi kadar erken bir tarihte öğretildi. Yazılım testi dersinde hata ayıklayıcıların ve diğer test araçlarının kullanımı tekrar öğretildi.

Şahsen insanları işgücüne girmeye hazırlamaya çalışan herhangi bir iyi okulun uygun hata ayıklama ve test tekniklerini öğretmediğine inanmakta inanılmaz zorlanıyorum. Açıkçası tüm yönlerini kapatamazlar, ancak en azından sınıftaki temel bilgileri öğretebilirler.


0

Kendi başınıza halledin

Bir profesörün ya da TA'nın kendi başıma kolayca anlayabileceğim bir şeyi öğretmek için zaman ayırmasını istemedim . Zor kavramları öğretmek ve öğrenmeye rehberlik etmek için oradalar. Orada değiller ve orada olmamalılar, bu yüzden RTFM'ye ihtiyacınız yok.

Nasıl Öğreneceğinizi Öğrenin

Üniversite sadece bilmediğiniz her konuya elinizi sürmekle kalmayıp, nasıl öğreneceğinizi öğrenmekle ilgili olmalıdır. Eğer bu süreçte elinizi sürekli tutarsanız, gerçek dünyada sefil bir şekilde başarısız olursunuz.

Yokuş Yukarı, Her İki Yolda, Karda

Okula gittiğimde sana da dili öğretmek için uğraşmadılar. Sizden kendi zamanında almanız bekleniyordu. Size proje ve tesisler vereceklerdi. Uygulamayı tamamlamak ve çalışan bir program göndermek için ihtiyaç duyduğunuz bilgileri izlemek size kalmış. Çalışma saatleri dışında gerçek dünyaya oldukça benzer.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.