Onları biliyorsunuz, hiçbir anlam ifade etmeyen hatalar. Bir gremlin gibi gözüktüğü yer cipslerin içinde derinlere atladı ve bir şeyleri mahvetti. Yürüyüşe çık, bir şeyler yaz, bir amca mı çağırdın?
Onları biliyorsunuz, hiçbir anlam ifade etmeyen hatalar. Bir gremlin gibi gözüktüğü yer cipslerin içinde derinlere atladı ve bir şeyleri mahvetti. Yürüyüşe çık, bir şeyler yaz, bir amca mı çağırdın?
Yanıtlar:
Gerçekten korkunç sorunlar için stratejim genellikle şu şekildedir.
Deneme ve google. Sorunu çözmeye çalışmaya devam edin. Bu çoğu zaman sorunu bir saat veya daha kısa sürede çözer.
Yani işe yaramadı. Bir ara ver. Bir kahve alın, bir meslektaşla ilgisi olmayan bir şey hakkında konuşun. Sorunu aklınızdan çıkarın. 5 veya 10 dakika sonra soruna baktığınızda, biraz farklı bir açıdan bakıyorsunuz. Çoğu zaman bu işe yarıyor.
Bu durumda olmadı. Öyleyse, bakmak için 10 - 30 dakika daha harca. O zaman bir meslektaşınızı arayın. Ama ondan önce, bazı notlar alın; sorunu göstermek, yeniden üretmek, daha sonra denediğiniz şeylerin listesini görmek ve en önemlisi onları denediğinizi kanıtlamak istiyorsunuz. Öyleyse önce kuru bir işlem yapın. Kodda bazı işaretler koyun, gereksiz açık belgeleri vb. Kapatın. Bu şekilde sorunu kendiniz çözebilir veya sorunu gösterdiğinizde zamanını boşa harcamazsınız.
Meslektaşınızdan tüm varsayımlarınızı kanıtlamanızı isteyin. bu pasör aslında çağrılıyor mu? Bu yöntem, iddia ettiğin şeyi gerçekten geri veriyor mu? Bu nesnenin boş olmadığını düşünüyorsunuz - onlara boş olmadığını gösterin.
Çoğu zaman, sorunu göstermek ya da tüm olasılıkları denememiş olduğunuzu ya da meslektaşınızın hatayı göreceğini fark etmenize neden olacaktır.
Bu ciddi olma vakti gelmiyorsa. Yapmaya çalıştığınız şeyi, neyi denediğinizi ve neden çalışmadığını belgeleyin. Bunu tüm meslektaşlarınıza e-posta ile gönderin. SO'da yayınla. Bu noktada, belge mükemmel bir SO sorusu olmalıdır.
Yanıt beklerken, google google. Sahip olduğunuz sorunun her permütasyonunu deneyin. Bir sürü sekme açın. Muhtemelen bu noktada bir cevap alamayacaksınız, ancak soruna yaklaşmanın farklı yollarını, fikirleri, olasılıkları arıyorsunuz.
Başka bir şey yapın, bir soruna 5 saat harcadıysanız, başka bir güne bırakma zamanı geldi. Belki yararlı bir cevap alırsınız. Belki ertesi gün soruna saldırdığın zaman belli olacak.
Bunların hiçbiri işe yaramazsa, farklı bir çözüm arama zamanı. Belki farklı bir yöntem, farklı bir teknoloji kullanabilirsiniz. Belki de şimdilik bu özellikten vazgeçmelisin. Müşteriyi saate göre faturalandırıyor musunuz? Dahili bir uygulamada bir şirket için mi çalışıyorsunuz? Bunu sahibine yükseltmeniz ve onlara "bak, x saatimi harcadım ve ilerleme kaydetmedim, maliyet faydası yok mu?" Patronuna gidip onlara bir sorun için 16 saat harcadığını, sadece geri dönüp söylemek istediklerini söylemek istemiyorsun, bu önemli değil, bu sürüm için atla. Bunu daha önce öğrenmen gerekiyor.
Ve bu işe yaramazsa? Tek seçenek, problemden uzak durmaya çalışmak veya endüstri uzmanlığı aramak. Twitter'dan teknoloji uzmanlarına danışın. Teknoloji sağlayıcınıza e-posta gönderin.
Çıkın. Hayır, işin değil! Sadece kalk ve eve git. Gün ya da hafta sonu için bitti. Bir sonraki soruna döndüğünüzde 20 üzerinden 19 kez, çözüm bir saat içinde kendini gösterecek.
On saat geçmeden önce biraz yardım alırdım.
Bir kelime, timebox
bir şey üzerinde çalışmak için sınırlı bir süre belirleyin ve çözülmezse, başka bir şeye geçin ve ertesi gün yeni bir bakış açısıyla geri gelin.
Bu ve başka bir göz kümesi, bir şeye bakarak harcayabileceğiniz zamandan daha değerlidir.
Bir oturuşta bir şeyi çözmek için bir saatte asla 45 dakikadan fazla harcamazdım, azalan getiriler kanunu ihlal eder.
Sorunu başkasına açıklayın.
Sorunu bir başkasına açıklayarak, bunu açıklığa kavuşturmanız gerekir: bu genellikle çözümü görmenizi sağlar.
(İngiltere'deki profesyonel bilgisayar dergilerinden biri, bir zamanlar özellikle bu amaç için kıdemli bir programcının yaşam boyutu karton kesimlerini satmayı önerdi.)
Bir problem üzerinde uyumayı (bazen birkaç günlüğüne) de yardımcı olabilirim.
Üç adımlı bir planım var:
Bir önceki adım başarısız olursa, her aşama bir tırmanıştır. Neredeyse her zaman 2. aşamada çalışabileceğim verimli bir şey var.
Genellikle üç kişiden birini yaparım:
Üç kişiden herhangi biri, elindeki durumdan kendisini rahatsız etmek için iyi bir iş çıkarıyor. Dikkat dağıtıcı şeylerin bilinçaltı beynimin bir süreliğine çiğnemesine izin verdiğini fark ettim. Bundan bir saat kadar sonra, bam, çözüm var :-).
Bu Kusur ve Hedefi izole etmek için bir test Demeti kurun
Sadece iyi kodu kaldırmaya devam et .. kusuru kopyalarken. Hatayı gizleyen kodun tamamını hedefleyene kadar. Ardından kodu izleyin.
Önerilen okumalar: Özellikle Pragmatik Programcı Bölüm 10: İzleyici madde işaretleri
Tüm bu öneriler harika. Ancak, çok sık bahsetmediğim bir teknik kullanıyorum. Sorunla ilgili düşüncelerinizi düzenlemek için listeler yapın. Yapışkan bir sorunum varsa, genellikle aşağıdakiler gibi birden fazla liste yazarım: Gerçekler, Varsayımlar, Sorular, Belirtiler, vs. Bu genellikle yanlış olduğu ortaya çıkıyor), farketmediğim sorular sorulmalı, kontrol edebileceğim diğer izinler vs.
Düzenle:
Kısa cevap:
S: 10 saatten fazla bir süre boyunca sizi şaşırtan, tuhaf hatalarla nasıl başa çıkıyorsunuz?
C: Asla olmadıklarından emin olun: tasarımınızı anlayın, kodunuzu öğrenin, hata ayıklayıcınızı nasıl kullanacağınızı öğrenin.
Açıklama:
"Bir gremlin göründüğü yer cipslerin içine düştü ve bir şeyi berbat etti"
Bu asla olmamalı. Bu sizin kodunuzsa, düzeltmeyi denemeden önce hataya neyin neden olduğu hakkında çok iyi bir fikre sahip olmalısınız.
Dahası, kodunuzu yazarken, nerede ve neden başarısız olabileceğini zaten bilmelisiniz.
Bunu söylemek - bir arkadaşınıza sormak, SO'da yayınlamak, adımlarınızı geri çekmek ve geri almak ve ara vermek - yukarıda belirtilen tüm öneriler size yardımcı olacaktır.
Diğer bir şey ise, araçlarınızı - hata ayıklama araç setini bilmeniz gerektiğidir. Mesajlarınızı kodunuzdaki şüpheli noktalara kaydetmek, arama yığınınızı dikkatlice incelemek, koşullu kesme noktaları ve saatler vb. Kullanmak. Hata ayıklama becerileri ekstra değildir - bunlar programlamanın bir parçasıdır.
Benzer bir problemim vardı, Objective-C’de, saatlerce uğraştığım gibi görünen bir bellek bozulması. Ama daha sonra ben ve meslektaşlarım öğle yemeği için bir yürüyüşe çıktık ve sorunu açıkladım (ve belirli bir bitin init yönteminde bir nesnenin seri hale getirilmesi ile ilgili olması gerektiğini) ve temelde tüm sorunu kendime açıkladım.
(teknik detaylar: temelde, bir nesneyi kendimden başka bir şeyin üzerine başlattım ve geri verdim, bu yüzden iki alloc vardı, fakat sadece bir nesne geri döndü. Hafıza değişti ve çılgına döndü, çöktü ve hata ayıklayıcı gerçekten ne yapacağını bilmiyordu. ya).
Yıkanmak.
Herhangi Rodney McKay fanlar?
Cidden, tüm bu cevaplar arasında ortak bir nokta varsa, ara vermek ve başka bir şey yapmaktır .
Sorunu bilinçaltınıza aktarırken düşünmeyi seviyorum. Aksi halde farkında olmasak bile, zihinlerimiz (göründüğü gibi) banyo yapmak gibi başka bir şey yaparken bile sorun üzerinde çalışmaya devam eder .
Bunların hepsinin bir kombinasyonu:
Bir süre ondan uzak durun, böylece sırt ocağınıza oturabilir. Uyu, dinlen, ye, yürüyüş yap, herneyse.
Sorunu daha fazla inceleyin , başka ne yanlış yapar, başka hangi belirtileri bulabilirsiniz?
Sorunu araştırın , ne bulabileceğinizi görün. Farklı anahtar kelimeler denemeyi unutmayın
Farklı bir şey dene . Etrafta bir çalışma. Farklı bir hata ayıklama tekniği. Bir doğrulayıcı. Farklı bir bilgisayar.
Biriyle konuş . Yardımcı olamasalar bile, hatta bir programcı bile olmasalar, bazen konuşmak fikir ampulünü tetikler.
Tekrar başlat! Uygunsa, bilgisayarınızı, sunucunuzu vb. Yeniden başlatmayı deneyin. Başka bir şey yoksa, düşünmek için zamanı kullanabilirsiniz.
StackOverflow'a sor! Yardım etmek için buradayız
En çok oy alan cevabı hiç beğenmedim, çünkü bazen çalışsa da, bazen aynı günü bulmanız gerekir, bu nedenle, bu sırayla önerdiğim şey:
Bunun sadece senin için olmadığını onayla. Bu size çok zaman kazandırabilir. Belki gerekli bir bileşeni kaldırdınız ya da ortamınızda bir değişiklik yaptınız ve istisnalar kodunuzun bir yerinde yutuluyor. Sadece senin başına geliyorsa, bir çevre karşılaştırma aracı kullanırdım. Geçenlerde Envy adında bir yazılımı okudum, bu da bunu yapmanıza izin veriyor, ücretsiz olmasa da 10 USD'ye mal oluyor.
Herkese mi oluyorsun? İyi, şimdi kod üzerinde bir Geçmişi Görüntüle'yi yapın ve doğrudan veya dolaylı olarak hataya neden olmuş olabilecek son değişiklikleri doğrulayın.
Son değişiklik yok mu? Çok özel bir hata ise (bir istisna), 'stackoverflow it'. Şimdi bu 'google’dan daha iyi gelmiyor ama google’dan önce programlama araştırması için önce stackoverflow’u aradığımı söylemek güzel. Gerçekten bilinen bir sorunsa, burada bir çözüm bulmanız çok muhtemeldir. Değilse, ilgili stackexchange sitesinde bir soru gönderin. Çok hızlı bir cevap alabilirsiniz ya da yapmasanız bile, daha fazla araştırma yaparken sorunuzu orada bulabilirsiniz. Bu bir avantaj.
Çevrimiçi bir cevap bulamadıysanız veya genel bir hata değilse, her adımın elde ettiği sonuçların beklediğiniz sonuç için anlamlı olup olmadığını kontrol ederek kod adım adım ilerleyin. Her bir yöntemde bitmeye başlayın ve katmanlı bir çözümde aşağıdan yukarıya doğru gidin. (örneğin, performans sorunlarını giderirseniz, kayıtları alan kodla başlayın. İlk adımın sorun olup olmadığını hızlı bir şekilde belirleyebiliyorsanız, kullanıcı arayüzünde başlatmak mantıklı değildir).
Eğer birkaç kez kodu geçtikten sonra hala neyin yanlış olduğunu bulamadıysanız, konuşması için birisini arayın. Birinin daha önce de söylediği gibi, yüksek sesle konuşmak ampulü yakabilir. Ayrıca çift programlama gerçekten faydalıdır.
Bu noktada, uygunsa, bir süre veya gün boyunca ya uzaklaşın. Dün, "yatağın 'nasıl olduğunu' düşünerek yattım 've elbette' düşünerek uyandım" diyen çok gerçek bir tweet okudum. Çok doğru.
Hala bir cevabınız yoksa, daha küçük görevlere / yöntemlere / fonksiyonlara yeniden girmeyi deneyebileceğinizi söyleyebilirim. Henry Ford 'Küçük işlere bölünerek gerçekleştirilemeyecek kadar karmaşık bir iş yok' dedi. Bu noktada, eğer çözüm çok karmaşıksa ve kendiniz ya da başkasının yardımı ile çözemediyseniz, kodu daha küçük işlere dönüştürün. Bunu yapmayı başaramasanız bile, sebebi bulmanıza yardımcı olabilir.
Kodunuza enstrümantasyon ekleyin.
Bunun hakkında Tweet?
Geri adım atman gerekiyor. Benim sloganım 'sorun çok zorsa o zaman yanlış sorunu çözüyorsunuz'. Varsayımlarınız neler? hiçbir şeye güvenme.
Bunun sonucu olarak, “problem ne kadar garip, çözüm ne kadar garip” olur. Bilgisayarın gücü onun mantığı olduğundan mantık kazanamazsınız. Bir beynin var ve düşünmek zorundasın.
Modern zamanlarda, bir sistemde etkileşime giren birçok şey var - güvenlik duvarları, AV, Antispyware, her gece gerçekleşen otomatik güncellemeler - hareketli hedeflerle uğraşmak zorundasınız.