Hata ayıklama becerileri iyi bir programcı olmak için önemli mi?


24

Diğer özelliklerle birlikte bir programcının iyi hata ayıklama becerilerine ihtiyacı var mı? Verilen programda hatayı bulamayan ancak tüm bulmaca ve programları çözebilecek bir başvuru sahibim varsa, onu iş için düşünmeli miyim?

EDIT: - Bulmacalar normal kırmızı, mavi ve kırmızı-mavi topları gibi. Programlar bir dizide sürekli sıfırlar bulmak gibidir. Hata ayıklama programı,> = olması gereken koşuldan dolayı başarısız olan, ancak> olan bir şeydir. Her şey kağıt üzerinde.


13
Programı çalıştırmasına izin verildi mi, yoksa koda bakarak bir hatayı bulmak zorunda mıydı?
Michael K

9
Yalnızca hata ayıklayabildiğiniz kadar iyi kod yazabilirsiniz. ikisi kitabımda el ele gider.
Demian Kasier

3
Bazı insanlar bu konuda diğerlerinden daha iyidir. Bir hatayı bir yabancı kodda görmek, özellikle de stresli bir röportaj sırasında genellikle zordur.
leed25d

6
@Fanatic: Sadece kendi kodunuzla çalışıyorsanız. İşyerinde yaptığım hata ayıklamanın çoğu diğer insanların hatalarını kazıyor.
Mason Wheeler

3
@Manoj R, aynı süre içinde aynı problemi bulabildiğinizden emin misiniz? Sadece başvuru sahibinin 20 dakika içinde kağıt üzerinde bir sorun bulamadığından, onun tarafında Google’la (Evet, lanet Google) iyi olamayacağından ve birkaç haftalık uygulamadan emin olamayacağından emin misiniz?
İş

Yanıtlar:


37

Evet çok önemli

Bu aday hakkında, hata ayıklamak için x kod temelini yeterince tanımamış olması mümkündür.

İyi bir problem çözücünün hata ayıklayabilmesi gerekir, çünkü genellikle gerekli olan çok mantıklı bir metoda / yaklaşıma sahip olmaktır.


1
Daha sonra programlamadaki diğer herhangi bir beceri, hata ayıklama deneyimi ile birlikte gelir ve yetenekle daha az ilgisi vardır.
Pieter B

24

Hata ayıklayamazsanız, hemen hemen hiç bir programcı değilsiniz, yalnız iyi bir tane.

Hata ayıklama, sadece teknik becerilerin değil, aynı zamanda analiz yeteneğinin ve düşünce sürecinin gerçek, pratik bir uygulamasıdır. Sonuç olarak, bunu beyaz tahtadan veya röportajdan çok daha kullanışlı ve alakalı bir test olarak değerlendiririm.

Sahip olduğun iş bütün gün teori sorularını cevaplamakla geçirmeyi gerektirmiyorsa, sahip oldukları becerileri uygulayabilecek birine ihtiyacın var.

Bununla birlikte, yapmanız gereken şey kendinize sormak, hata ayıklama yeteneğinin adil bir sınavıydı - kodu çalıştırabilir, ara verebilecekleri noktaları vb. Gerçek dünyadakilerle aynı şekilde yapabilir miydi? Ne tür bir hataydı? Derleyicinin alacağı ve işaretleyeceği bir şey mi? (Bu durumda asla görmemesi gerekmeyen oldukça anlamsız bir soru)?

Eğer sadece kağıda yazılsaydı, o zaman temelde sadece ayrıntılı bir okuma testidir ve bu ortalama teknik mülakat sorunuzdan daha soyut bir beceridir ve tartışacağım, neredeyse değersizdi.


2
+1 "Kendine sor, hata ayıklama yeteneğinin adil bir testi olduğunu" - Öyle değildi. Bir fuar testi , yani doğal, normal bir çalışma ortamında koydu (nadiren sans ayıklayıcısını çalışma olacak göz önünde bulundurarak) bir hata ayıklayıcı ile çalıştırılabilir kod dahil olurdu.
doppelgreener

11

Ana işe alma kuralı - şüphesiz hayır.

Eğer ucuza bir sürü yeni kod uygulamanız gerekiyorsa, bu adamı alabilirsiniz, ancak şahsen aramaya devam edeceğim.


7
Yıllarımda birçok insanı işe aldım ve işe aldığım hemen hemen her "Belki" adayına pişman oldum.
JohnFx

10

Geliştirici her zaman temiz kod yazamadığı sürece (kesinlikle imkansız) ve yalnızca "yeşil alan" projeleri üzerinde çalışacaksa (asla olmayacak), o zaman evet, hata ayıklama becerileri kesinlikle şarttır. Kesinlikle. Sadece hata ayıklamak istemeyen geliştiricilerle deneyimlerim oldu, bu yüzden tembel oldular ve test etmek için duvarın üstündeki QA kodunu attılar. Ancak bu geliştiriciler çok uzun sürmez.

Yazılım geliştirme bir zanaat ve problem çözme becerisidir. Bu problemler hem işletme problemlerini hem de (ve diğerlerinin) kodlarını içeren problemleri içerir. Bu arada, birçok bakım projesi özellikle hataları düzeltmekle ilgilidir, bu nedenle hata ayıklama kesinlikle gerekli bir beceridir.


Eklemek istediğim bir diğer şey ... Buradaki röportaj sürecimizin bir parçası, adaylara hem uygulamada hata ayıklama hem de ona birkaç küçük özellik ekleme konusunda bir egzersiz vermemiz. Bu sürecin her bölümü eşit derecede önemlidir.
Mark Freedman

7

Çok sayıda "röportaj sorusu" tipi web sitesi olduğunu ve birçok soru ve yapboz için çalışmanın tamamen mümkün olduğunu aklımda tutuyorum. Eğer bir şey olamaz için çalışma daha önce hiç görmediğiniz kod hata ayıklama edilir. Ya hata ayıklamayı bildiğiniz ya da yapmadığınız kadar kod yazdınız. Giriş seviyesi bir pozisyon ise adayı ekarte etmezdim, ancak dil ile ilgili deneyime sahip olduklarını ve kodda hata ayıklayamadıklarını iddia ettikleri takdirde, kesinlikle kırmızı bir bayrak ortaya çıkarır.


5

Küçük programcılar ve üst düzey programcılar arasında gördüğüm en büyük fark, hata ayıklama konusundaki yetenekleri. Hata ayıklama becerisi, yalnızca uygulama ve deneyimle gelen bir şeydir.

Örneğin, bir Java programının konsolda iyi modda çalıştığı ancak aynı giriş için bir Unix borusu kullanmaya çalıştığınızda garip bir hata olduğunu düşünün. Bu sorunla daha önce karşılaştıysanız, new Scanner(System.in)bunun yalnızca bir kez çağrıldığından emin olabilirsiniz ; Böcek borulandığı zaman arabellek tüketmesidir, fakat açıkçası etkileşimli moddayken. Daha kıdemli bir programcının bu hatayı daha hızlı tanımasını beklerdim. Belki daha önce deneyimledikleri için veya geçmişte tamponlama ile ilgili başka sorunları olduğu için.

Bulmaca çözme ve yeni kod yazma gelince, deneyim önemli olsa da, bu bir genç seviye programcının belki de daha üst düzey bir programcı kadar iyi veya daha iyi bir performans gösterebileceği bir şeydir. Yani, zeka ve beceri, deneyimden bağımsız olarak daha büyük bir etkiye sahip olabilir.

Yeni fikirleri olan ve yeni fikirleri olan ve ekibin "gel" ine yardımcı olabilecek bir genç programcıya yatırım yapacak bir pozisyondaysanız ve yeni kod yazarken iyi görünüyorlar, devam edin ve onları işe alın. Üst düzey bir programcı arıyorsanız, bu hata ayıklama becerisinin eksikliği büyük bir uyarı işareti olabilir: Yalnızca ilk yılı on kez yaşamaya yetecek on yıllık bir deneyime sahip olabilirler.

Bir yan not olarak, ilk 10 yıllık tecrübeye sahip olmadan hata ayıklamada daha iyi olmanın yolları vardır. Andres Zeller'in kitabını Neden Programların Başarısız Olmadığını Önerdi: Bilimsel prensipleri öğrenmenin ve hataları nasıl çoğaltmanın, bulmanın ve düzeltmenin daha iyi anlaşılmasının bir yolu olarak Sistematik Hata Ayıklamaya Yönelik Bir Kılavuz .


Bu yüzden hata ayıklama, pratikte gelen ve öğrenilebilecek bir şeydir ve aday seçerken çok fazla ağırlık verilmemelidir.
Manoj R

1
Netleşmek için: Üst düzey geliştiriciler için ağır, fakat küçük geliştiriciler için daha az ağırlıkla tartmalısınız. Örneğin, üniversiteden yeni başlayanlar, birinci sınıf yıllarını programlamaya başlayanlar, bir şeyleri ayıklamak için 10 kat daha uzun sürebilir. Ancak küçük geliştiricilere yatırım yapmak için iyi sebepler var.
Macneil

5

Ortamınıza bağlı. Bütün gün sodoku ve diğer bulmacaları oynarsanız, belki de iyi bir aday olabilir.

Bununla birlikte, bazen kodunuzda hatalar olabilir veya her zaman tam olarak beklendiği gibi çalışmazsa sorun gidermede iyi birisini elde etmenizi öneririm.

İhtiyacınız olanı işe alın, bir programcının ne olması gerektiği konusunda ideal değil.


3

Diğer özelliklerle birlikte bir programcının iyi hata ayıklama becerilerine ihtiyacı var mı?

Evet.

Hata ayıklama kodu, problem çözmenin bir parçasıdır. Mükemmel kod ve sıfır hata yazan bir geliştiriciyle hiç karşılaşmadım. Bir geliştirici ya kodunu ya da bir başkasının kodunu ayıklayacaktır. Bu bir zorunluluktur.

Onu iş için düşünmeli miyim?

Belki de değişir.

Bir röportajda bir programın hatalarını ayıklayamamak, eğer başvuru sahibi röportajdaki diğer tüm bulmaca ve programları tamamlayabildiyse, muhtemelen bir anlaşma kırıcı olmamalıdır. Bu gerçekten röportajın derinliğine ve nefesine bağlıdır.

Konum ne kadar hata ayıklama gerektiriyor? Çok fazla ise, bir başvuranın hata ayıklama sorusuna ne kadar iyi cevap verebileceğine daha fazla ağırlık konmalıdır. Ancak yalnızca bir hata ayıklama sorusunun sorulduğundan bahsettiğinizden, öyle görünmüyor.


2
+1 Hata ayıklamayı yinelemek için gerekli, ancak görüşme sırasında dağıtıcı değil.
Gaurav,

3

Bir programcının iyi hata ayıklama becerilerine ihtiyacı var mı?

Evet. Bununla birlikte, röportajdaki metodolojiyi (yani sınav / test tarzı) mükemmelden (tamam, kusurlu) daha az kağıda kodlamanın kodunu tuhaf, tanıdık bir deneyim bulmamaya dikkat etmesini rica ediyorum.

Yana ayıklama bir olan süreç değil, cevap veya sonuç (örneğin hata ), ben yeteneklerini hata ayıklama bir aday değerlendirmek için daha iyi bir araç olarak interaktif bir diyalog ya da tartışma kullan. Çoğu kişi gayri resmi bir geçici hata ayıklama sistemi kullanırken, iyi adaylar genel olarak sistemi veya varsayımları ve gereksinimleri anlama, sonra problemi tecrit etme (genellikle bölme ve fethetme) ve yöntemsel olarak karşılaştırma gibi sorular sorma konusunda benzer bir yapıya sahip olacaktır. gereksinimlere kodu ve beklenen değerlendirmek giriş / çıkış, bir yerine ister istemez bir kez gelişigüzel çalıştığını kadar en şeylerin bir demet değişen.

Ayrıca, özellikle yazılı olarak, görüşmeler sırasında bulmaca sorunlar hakkında çekinceleri ifade olarak aday (referans çerçevesinin sağ varsayımları yoksa hile), bulmaca belki onlar için çözülemez. Diğer bir deyişle, birçok görüşme bulmacası tek bir doğru yola sahip olmaktan muzdariptir, oysa yaşam karmaşıktır ve en yaratıcı düşünceler, belli bir önceden pişirilmiş bilmeceyle çalışamayan bir sorunu, beklenen bir çözümle çözmek için şaşırtıcı şekilde yeni yaklaşımlar gösterenlerdir. . Tüm trompetçilerin caz çalmasını beklemek gibi. Bu, soruyu yüz yüze olmayan (baskı yaratıcılığı etkileyebilir) etkileşimli tartışma olarak sorarak yönetilebilir. Yine, bana göre cevap, iyi bir düşünce sürecinin ifade edildiğini görmek için ikincildir. Muhtemelen, yüksek sesle düşünmelerini istemeniz gerekecektir, ancak bu benim deneyimimde daha üretken olma eğilimindedir.

Zeller'in Neden Programları Başarısız olduğunu okumadım ya da değerlendirmedim , ancak Agans tarafından Hata Ayıklamayı , geçici hata ayıklama sürecini daha yapılandırılmış, somut ve organize bir çabaya dönüştürmek için daha katı bir çaba haline getirmeye yardımcı olacak kısa, hızlı bir okuma olarak önerebilirim hata ayıklamada daha verimli olun. Ayrıca bir kopyasını da basıp, hücresinize veya geçici çözümünüz olan Hata Ayıklama Kuralları posterine asın ; hiçbir şeyin doğru gitmediği kötü günler için mükemmel bir hatırlatma. Birkaç kötü günüm var ve mektupta olmasa da onları ruhsal olarak izlemeye çalışarak aktif olarak hata ayıklamak (okuma: kafamı karıştırarak tırmalamak) için daha az zaman harcıyorum .


Mükemmel cevap. Kelimenin tam anlamıyla günlerini en basit hata düzeltmeyi aradım ve tam anlamıyla zor bir hatanın birkaç dakika içinde düzeltilmesiyle karşılaştım. İyi bir dev, makul bir stratejiye sahip olmalıdır. Ve bu uygulamaya çok bağlıdır. Bir dizi print / log deyimi uyguladığınızda veya sürümü sembollerle çalıştırdığınızda uygulamanızın bir sorun göstermediğini söyleyin. Sonra ne? Başvuru sahibi, en azından bir tür tutarlı strateji belirleyebilmelidir.
SnoopDougieDoug

2

Programcı hiç bir zaman hata yapmadığı kadar iyi olmadığı sürece hata ayıklamanın şart olduğunu söyleyebilirim. Bunun imkansız olduğuna ikna olmadım, ancak şu anki popüler dil ve araçlarla hayal edemiyorum.

Bir röportajda bu şekilde oraya konma kavramını beğenmedim. Eğer aday gerginse (kim değilse), programcı olarak boş bir whera çekebilir, bu tür sorunları rutin olarak halledebilir. Öyleyse, iyi bilinen bir röportaj veya teknik test problemi olsaydı, aday sonucu ezbere biliyor olabilirdi, ancak yeni bir problemde yolunu düşünme kabiliyetine sahip değildi. Ayrıca aday dile aşina değilse, mücadele etmek zorunda kalacak. Pek çok hata zordur, çünkü iyi bir programcı ne yazacağını bilir ve beyni kod okurken kısayollar alır. Muayene sırasında C stilini kullanmamasını = where == bulamıyorum, çünkü amacın ne olduğunu biliyorum ve beynim onu ​​okurken ayrıştırıcı bir kısayol alacak.


1

Problem çözmenin programlanmasının iyi bir parçası ve bir problemi çözmek için, temel problemi sadece semptomları veya tutarsızlıkları değil, bilmek zorundasınız. Hata ayıklama, temel problemi tanımlama sanatıdır.

  • çekirdek sorunu tanımlamak
  • akışı daha iyi görselleştirmek mümkün

ve daha fazlası.


1

Hatayı işaret etmek ve kişinin ne gibi bir tepki verdiğini görmek için duruma biraz daha eklerdim. "Evet, ben bir aptalım, bu kadar aptal ..." türü hakkında aşırı derecede dramatikler mi, "Evet, her hangi bir ahbap" kampında aşırı kayıtsız mıydı, ne olduğunu aktif olarak dinliyor muydu? Bir tür özür ya da çözüme kavuşturması gereken bir şeyi batırdıklarını belirten bir açıklama ile yanlış mı? Sadece gelecekteki durumlarda düşünülmesi gereken bir şey.

Zamanında hata ayıklamak için büyük bir beceridir. Bu, birine tamir edildiğinde çözüldüğü bir problemi vermekten biraz farklıdır. Bazen, birçok şirket şirketin kullandığı muhasebe yazılımında bir hatayı düzeltirken çoğu şirketin satışlarını durdurmak istemeyeceğini tahmin ettiğim gibi, kabul edilmesi gereken sistemi kurtarmak için agresif önlemler alınması gerekir.


1

Hata ayıklama kritik bir beceridir. Aslında, sorun gidermenin kritik beceri olduğunu daha fazla söyleyebilirim. Birisi sorunu nasıl tanımlayacağını (ne için hangi kullanıcı bilgisini isteyeceğini ve hangi günlüklere bakacağını da dahil), nasıl çoğaltacağını, sorunu teşhis etmek için hangi veri kaynaklarını kullanabileceğini ve nasıl hata ayıklayacağını ve bir şeyi nasıl düzelteceğini bilmelidir. başka bir şeyi bozmadan. Ancak, görüşme sırasında belirlemek zordur.

Ona bulmak için gerçek bir sorun ve mevcut araçları kullanma fırsatı veririm ve sonra konuyu bulmak için hangi adımları attığını veya tahsis edilen zamanda konuyu bulamadıysa başka ne yapabileceğini sorardım. Sorunu gerçekten sistematik bir şekilde ele alan ve araç setinde yalnızca hata ayıklayıcı ve google’dan daha fazla aracı olan birini arıyorsun (en azından her ikisini de denemesi gerektiğinde Junior düzeyinde hariç) Bu iki şeyi denemek muhtemelen yetkin değil ya da en azından onun için bir şansım olmayacaktı.

Sorun çözme becerilerine bulmacalara verilen cevaplardan daha fazla ağırlık verirdim (iyi de istemedim) ya da gösterişli programlama becerisine. Nadiren iyi kod yazabilen veya iyi kod yazamayan veya gereken düzeltmeleri yapamayan bir geliştirici gördüm. "Çalışıyor" ürününü almak için bir takım kodları bir araya koyan birçok insan gördüm ama yaşamları buna bağlı olarak bir sorunu çözemedi. Çoğunlukla yapmazlar; aslında ne yaptıklarını ya da çözmeye çalıştıkları sorunu anlamazlar. İyi sorunlu kişiler, sadece belirtinin değil, asıl sorunun nasıl tanımlanacağını bilirler. Yeni gelişmeler için sorunu tanımlamak için hangi soruları sormaları gerektiğini bilirler.


1

Herhangi bir işte 4 ila 5 temel beceri vardır ve programlama farklı değildir. Mesleki düzeyde, temel becerilerin tümünde iyi olmak zorundasınız. 5 üzerinden 4'ünüz varsa, sizi hala tutacaktır.

Müşterileri sunabilecek, ikna edebilecek, dile getirebilecek, niteleyebilecek, ancak anlaşmayı kapatamayan bir satış temsilcisi hayal edebiliyor musunuz? Dışarıdalar ve onları satış ekibinizde istemiyorsunuz.

Hata ayıklama kesinlikle bir programcının onsuz olamayacağı temel bir beceridir.


0

Ben miminal hata ayıklama gerektiren böyle bir kodlama tarzı var. 3 kod satırı ile işim bittiğinde, onu çalıştırıyorum ve test ediyorum, sıklıkla birkaç değişken yazdırıyorum. İstenmeyen sonuç veya davranış elde ettiğimde, hata ayıklama yerine koduma birçok dökümü koydum. Çok nadir hata ayıklayıcı kullanıyorum. Garip ama gerçek.


0

Hata ayıklama, yazılım üzerinde belirli bir test yapıldıktan ve bir hata keşfedildikten sonra ortaya çıkan aşamadır. Yazılımınızdaki hatayı arama ve düzeltme eylemidir. Çoğu durumda, hatayı bulmak genellikle onu düzeltmek için daha fazla zaman gerektirir.

Bilgisayar uygulamasında / sisteminde mevcut olan hataları (güvenlik açıklarını) kaldırma işlemidir. Bu yapılmazsa, bilgisayar korsanları böceklerden yararlanabilir ve çeşitli kötü amaçlı faaliyetler yapabilir:

1) Geliştiriciler ve satıcılar için gelir, iş ve itibar kaybına neden olan güvenlik açığını kamuya açık hale getirebilirler.

2) Solucanlar, yararlanabilecekleri savunmasız sistemleri arar ve bu yüzden kendilerini bu sunuculara kopyalarlar. Örneğin. Ocak 2003'te Slammer Solucanı, MS SQL Server'daki güvenlik açığından yararlandı.

3) Solucanlar söz konusu olduğunda, virüsleri nasıl unutabiliriz. Ayrıca, virüslerin, uygunsuz maruz kalmaların birincil amacı için programda bulunan hatalardan yararlanan geliştiricileri tarafından kaybedilmesi ...

4) Programlar düzgün şekilde hata ayıklanmazsa, paralarının karşılığını alamazlarsa tüketiciler asla tam olarak devam edemezler. Bu durumda, kirli işleri yapmak için bir bilgisayar korsanına bile ihtiyacınız yoktur - halkın halkına da güvenebilirsiniz.

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.