Neden bir hatayı düşünmek bazen onu çözmenize yardımcı olmaz? [kapalı]


12

Dün öğleden sonra iyi bir bölümünü, önemsiz olduğunu düşündüğüm bir hatayı düzeltmeye çalıştım. Dairelerde dolaşıyordum, yanlış olan bir ipucu yoktu. Kodun büyük bölümlerini yeniden yazma. SO üzerinde kontrol. Hala neşe yok.

Bu yüzden eve gittim, köpeği gezdim, küçük bir televizyon izledim ve uyumadan hemen önce bingo yaptığım açık hatayı fark ettim. Bu sabah düzeltilmesi yaklaşık 10 dakika sürdü.

Evdeyken, sorunu aktif olarak düşünmüyordum. Yine de kendimi durumdan çıkarmak, çözmemi sağladı.

İlk kez gerçekleşmedi ve bir programlama problemini çözmenin oldukça yaygın bir yolu olduğunu biliyorum. İnsanların cevapları hayal ettiğini bile duydum.

Bu neden işe yarıyor?

Belki daha da önemlisi, bir problemden ne zaman bir mola vermeniz gerektiği, mola ne kadar sürmeli ve bir problemden ne kadar süre sonra kalmayı bırakmanız konusunda iyi bir rehber var mı?

Sanırım bu bilinçaltı işlemeyi nasıl optimize edeceğimi anlamaya çalışıyorum (ya da her ne oluyorsa)


3
Bunun sadece programlama ile ilgili olduğundan emin değilim, aynı soruyu birçok alanda sorabilirsiniz.
ozz

1
Keşke bilişsel bilim yığını değişimi betada olsaydı !
Matt Ellen

1
Çünkü düşünce gizemli bir süreçtir.
davidk01


4
Bu soru konu dışı gibi görünmektedir çünkü genel problem çözme düşüncesi süreci ile ilgilidir ve programlama veya teknoloji alanlarına özgü değildir.

Yanıtlar:


22

Bir soruna fazla odaklanmak geri adım atmanızı engeller. Kodunuzda hata ayıkladığınızda, aynı testleri gereksiz yere tekrar etme eğilimindesiniz.

Ne kadar çok denerseniz, o kadar başarısız olursunuz ve çok sinirli hale gelirsiniz. Artan stres ve hayal kırıklığı işleri daha da kötüleştirir.

Bu yüzden sık sık, bir meslektaşınız tesadüfen, omzunuzun üzerinden bakabilir ve sorunu (ve çözümü) birkaç saniye içinde gösterebilir.

Sizinle aynı zihinsel durumda değiller .

Sık sık belirli bir süre bakmayı bırakmaya ve birkaç saat sonra daha sakin bir zihinle geri dönmeye çalışırım.

Ama en güçlü teknik sadece ... yardım istemektir .


9
Yardım istediğinizde +1, sorunu başkalarının anlayabileceği terimlerle tanımlama eğilimindedir, dolayısıyla bu süreçte daha fazla anlayış kazanırsınız. örneğin bir soru-cevap sitesine veya forumlara hemen bir konu gönderdiğinizde, bir sonraki adımda nasıl ilerleyeceğinize dair bir fikir edinebilirsiniz ..
Aditya P

1
@AdityaGameProgrammer için +1 ve +1: problemi tanımlamak o kadar yararlıdır ki, hayali bir kişiye - veya bir aksiyon figürüne veya bir tesise veya herhangi bir şeye - tanımlamak bile çoğu zaman aynı yeni düşünceyi tetikler (birçokları tarafından tarif edildiği gibi) .
Matthew Frederick

6

Bir süredir bir problem üzerinde çalışıyorsanız, zihniniz gelişim sırasında belirlediğiniz kalıpları takip eder. Başka bir deyişle, kurduğunuz zihinsel çerçevenin dışındaki şeyler için geçici "kara noktalar" geliştirirsiniz.

Zihninizi bir süre problemden çıkarmak, bu filtrenin kaldırılmasına yardımcı olur ve filtre yerinde olmadan işleri yeniden düzenlemenizi sağlar.

Bu gibi durumlarda sık sık bana yardımcı olan şey, bir başkasına neden çalışması gerektiğini (işe yaramadığında) açıklamaktır - normalde açıklamanızın yarısında, mantığınızda nerede yanlış gittiğinizi veya hangi adımı kaçırdığınızın farkına varacaksınız.

Geliştirme çalışması sırasında zihinsel bir filtre geliştirmenin yanı sıra, beyniniz çok fazla iş parçacıklıdır ve genellikle bilinçsiz süreçlerin bir parçası olarak bir problemin üzerinden geçmeye devam eder. Bazen bir öğleden sonra bir sorun hakkında elimden gelen her şeyi öğrenerek, sonra bir çözüm üzerinde çalışmadan önce sorunun bir veya iki gün yatmasına izin vererek kullanıyorum.


1
Ofis dışında masanın üzerinde oyuncak ayı tutacak belli bir profesör hakkında okudum. Öğrenciler ondan yardım istemeden önce problemlerini ayıya açıklayacaklardı.
Michael K

Jeff Atwood'un blogundaki bloguna yazdıklarına oldukça benzer bir görünüm blog.codinghorror.com/rubber-duck-problem-solving . Aslında bunun çok yardımcı olabileceğini düşünüyorum. Kaç kez SO için yarı yazılı bir soru vardı ve sonra cevabı fark ettiniz? Bunu epey zaman geçirdim :)
Rémi

5

Ben bir psikolog değilim, ama tek bir konu üzerinde çok fazla konsantre olduğunuzda (hatayı bulmak), daha büyük sistem için görüş kaybetme eğilimindedir. Ama genellikle cevap şu anda aradığınız "aşağı" değil, başka bir yerde - o noktada göremeyeceğinizdir.

Yani gerçekten yapmanız gereken siperlerden çıkmak ve tüm sisteme daha genel bir bakış açısıyla bakmaya başlamak. Biri "Gerçekten burada olduğunu biliyorum, henüz bulamadım" düşüncesini göz ardı etme eğilimindedir. Hepimizin başına gelir, her zaman. Hatta "o yüzden bir iyi ayıklama tekniği kullanılarak hata bulamıyorum biliyorum noktasına ulaşmak vardır ve hala doğru olanı alıp bir ara vermiyoruz başka bir yerde olmak" - İnsan beyni böyle bir olduğunu komik şey.

Ancak, banyoya gidip, bir iş arkadaşınızla konuşurken veya köpeği yürürken, yaptığınız şeyle çok fazla eşleşmiyor. Sıkıştığımda yakındaki bir mağazaya giderdim ve ceketimi kafama atılan çözeltiye koyar koymaz - neredeyse her zaman. Programladığınız süre boyunca çok fazla su içmek de iyi bir şey olabilir. Sizi her zaman ara vermeye zorlar ve sonra banyoyu ve zapı ziyaret etmenizi sağlar, sizi siperlerden çıkmaya zorlar.


4

Kişisel deneyimimden ve eğittiğim genç geliştiricilerde tanık olduğumdan hepimiz bir soruna varsayım ve beklentilerle yaklaşıyoruz. X fonksiyonunun, z sonucunu üretmek için y görevini yaptığını varsayıyoruz. Her zaman var, neden bu değişsin? Bir soruna gittikçe daha fazla odaklandıkça, temelleri ele aldığımızı ve sorunun aslında ilk ele aldığımızdan çok daha karmaşık olması gerektiğini varsayıyoruz. Doğru olduğunu varsaydığımız ancak gerçekte doğrulanmadığımız, gittikçe artan bir şeyler listesine yorgunluk ekleyin ve daha sonra kendinizi tam bir "WTF" anı için ayarladınız.

Ancak daha sonra, varsayımların atılabileceği ve geri çekilebileceği sorunuyla bağlantıyı kestiğinizde. Buna ek olarak, genellikle çözdüğümüz farklı bir sorunun arkasında bir problemle uğraşırız. A'yı sabitledim, ancak B'yi kırdı, şimdi B'yi düzeltmeliyim. Bu yüzden seyahat ettiğimiz bir momentum ve yönümüz var (bu da varsayımlarımızın ayrılmasını zorlaştırıyor). B problemini çözmeye geri döndüğünüzde, A problemi artık zihninizde potansiyel olasılıkları engelleyecek şekilde yeni değildir. Sorunu önyargılar olmadan ele alabilirsiniz ve bu yeni düşünme yollarını ve soruna yeni bakış açılarını açar.

Şimdi, bir çocuk benden yardım istediğinde, cevaplamaları gereken ilk sorunun "varsayımlarınız nedir?" Olduğunu biliyorlar. Bu soruna cevap vermeye çalışmak bile zihinsel bloklarınızdan kurtulmanıza yardımcı olabilir.


3

Sanırım beyniniz, kaslar gibi, yorulur. Mola vermek, dinlenmesini, oksijen / yakıt vb. İle doldurmasını ve tekrar çalışmaya başlamasını sağlar.

Yürüyüşe çıkmak veya egzersiz yapmak, gerçekten bir şeye sıkışıp kaldığınızda iyi bir yaklaşımdır. Bir "eureka" anınız olmasa bile, genellikle geri dönmenize ve sorunu çözmek için yeni bir yaklaşım izlemenize izin verebilir.


3

Fikirler ve problemler üzerinde kuluçka zamanı demeyi seviyorum .

Vicdanınız hala lineer olmayan bir yaklaşımla sorunu farkındalığınızdan çıkarmaya devam ediyor. Bu, şekerleme yapmadan önce yeni bir şey öğrendiğinizde olanlara çok benzer. Zihniniz, bilgiyi daha fazla esneklikle ele alınabilecek şekilde 'birleştirmek' için zamana sahiptir.

Ayrıca, bir hata üzerinde takılıp üstesinden gelmek için başka bir yararlı ipucu, confessional de-bugging denir . Burada sorunu bilmeyen başka bir kişiye yaklaşıyorsunuz ve sorunu açıklamaya başlıyorsunuz. Daha sık görmüyorum, sadece sorunu yüksek sesle söyleyerek çözüm akla geliyor.

şu psişik bağlantılarına göz atın: yaratıcılık ipuçları ve sorunlu uyuklama


2

"Hepimiz batması gül bazen. Ne yazık ki biz ne zaman konsantre üzerinde çok fazla acı biz unutmak hakkında güzelliği gül."


2

Kariyerim sırasında duş sırasında birkaç kritik hatayı düzelttim.

Ben bir psikolog değilim ama sanırım fark şu:

  • bilgisayar başında otururken kaynak kodları, kesme noktalarını, printfçıkışları görüyorum ...

  • banyoda, kodlar aklımda.


1

Aynı fenomeni yaşadım ve ondan uzak zaman geçirdiğim için soruna farklı bir bakış açısıyla bakmaya bağladım (daha fazla zaman daha uzak bir bakış açısı anlamına geliyor).

Ama çoğu zaman aynı şeyi başardığım başka bir numara daha var: kodu bir iş arkadaşınıza açıklayın. Bu için değil onları onlar olabilir ancak Hatanızı yakalamak için; o zorlamak için var seni geri adım ve ilgili tüm seviyelerde kod mantığını açıklamak için. Asla (adil uyarı - örnek boyutu sınırlı olsa da) bilinçsizce bu tarif-iş arkadaşına tedaviden kaçan bir hatayı çözemedim.


1

Son zamanlarda bu sitedeki birisinin önerisi sayesinde pomodoro tekniğini kullanıyorum ve bunun zamanlama ve mola uzunlukları hakkındaki sorunuza iyi bir cevap verdiğini düşünüyorum. Temel olarak, 25 dakika boyunca bir probleme odaklanmış, ardından 3-5 dakikalık kısa bir mola, daha sonra her 4 döngüden sonra daha uzun bir mola vermeniz gerekir. Bunu desteklemek için bazı çalışmalara atıfta bulunuyorlar, ancak anekdot olarak bu aralıkları çok etkili buldum.

25 dakikalık açıklıkların beni "bölgede" almamızı engelleyeceğini düşünmüştüm, ki bu insanlar 15 dakika kadar sürüyor. Aksine, bu zamanlamayla neredeyse hemen bölgeye giriyorum. Sanırım bunun nedeni, sadece 25 dakika boyunca devam etmem gerektiğini bildiğimde, dikkatim dağılmasını önlemek çok daha kolay. Harici kesintileri sadece 25 dakika ertelemek daha kolaydır. Öğle yemeğinden önce 4 saat çalışıp çalışmaya çalışırken çok zordu.

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.