Einstellung Etkisiyle Mücadele [kapalı]


17

Einstellung Etkisi iyi "bulunmasına rağmen belirli bir şekilde belirli bir sorunu çözmek için bir kişinin yatkınlık 'anlamına gelir' problemi çözme ya da daha uygun yöntemler."

Yeterli miktarda deneyime sahip bir programcı olarak, kişi geçmiş deneyimin "denenmiş ve gerçek" yollarından her zaman problem çözme yaklaşımına yaklaşma eğilimi ile nasıl mücadele edebilir?

Çok somut iki örnek vermek için, uzun süredir, Javascript çerçevelerinin (örn. JQuery) ve daha iyi web uygulaması çerçevelerinin (örn. ASP.NET MVC) geniş kullanımını önleyecek kadar uzun süredir web uygulamaları geliştiriyorum. Eğer sorunlu etki alanından veya iş kurallarından sık sık sorun yaşadığım veya sorun yaşadığım yerde müşteri işlerim varsa, sadece bir çözüm elde etmek için bildiklerimi kullanma eğilimindeyim. Bu çok çirkin şeyler içeriyor

document.getElementById 

veya ASP.NET MVC yaklaşımı ile şeyleri nasıl yeniden arayacağınızı bulmak yerine şablon bağlı denetimlerle (DataList / Repeater) ASP.NET kullanmak.

Geçmişte kullandığım tekniklerden biri, sadece bu yeni teknolojileri keşfetmek için var olan kişisel projelere sahip olmaktır, ancak bunun sürdürülmesi zordur. Başka hangi yaklaşımlar önerilebilir?


Yalnız mı çalışıyorsun?
Apalala

3
"MVC" bandwagonu konusunda dikkatli olun, onun yeri var. Bir Webforms çözümü çalışırsa, bırakın.
Mart'ta Darknight

Yanıtlar:


4

Bu harika bir soru. Ve bence bununla ilgilenen sadece kıdemli programcılar değil - bunu erken ele almak bir öğrencinin beceri gelişimini hızlandırması için harika bir yol olabilir.

Bu sorunun iki tarafı var - biri kötü , diğeri gerçekten iyi .

Kötü - Yanlış çözümü seçme

İşte bir örnek - deneyimsiz bir geliştirici olarak, A ve B problemlerini daha önce sadece iki problemi çözmüş olabilirsiniz . Bu noktada, bilmediğiniz problemler olduğunu biliyorsunuz, ancak kendi deneyiminizin merceği göz önüne alındığında, gördüğünüz şeylerin çoğu A veya B gibi görünüyor .

Birlikte yeni bir sorun geliyor. Size göre, bu yeni problem A problemine benzemektedir , bu yüzden genellikle A'yı çözdüğünüz şekilde çözersiniz . Bir şey doğru gelmiyor ve daha uzun sürer ve çalışırken bu, yeni bir sorundur hayata sona C . Var olduğunu bilmediğiniz A'nın bir varyasyonu .

Peki bu hatayı bir daha yapmamak için ne yapıyorsunuz? İki şey:

  1. Bu yeni problemde neyin farklı olduğunu anlayın. Hangi yaklaşımların farklı çalıştığını ve nedenini anlayın.
  2. Bu problemi kataloglayın ve daha yeni problemleri çözmeye devam edin.

Bu, doğal olarak bu sorunu çözmenize yardımcı olacaktır . Zamanla deneyimi 10 yıldır var, sorunlar aşina A yoluyla Z ve çözümleri sizin repertuarı geniş kapsamlıdır.

İyi - Verimlilik

Gerçek dünyada, son tarihler ve sınırlı kaynaklarla, bildiklerinizi kullanmak her zaman kötü değildir:

  1. Sorun çözme işleminin başlangıcında, yeni sorunu bildiğiniz tüm sorunlarla karşılaştırırsınız.
  2. İşaretleri tanımayı deneyecek ve bunun hangi problem setine benzediğine karar vereceksiniz.
  3. % 100 eşleşme yapılamazsa, deneyimli bir geliştirici, muhtemelen kusurlu bir yürütmenin risklerine karşı keşif için daha fazla zaman harcama riskini tartacaktır. Boşa zaman riski çok yüksekse, sadece bildiklerinizle devam edersiniz.

Bu kötü bir şey değil - % 100 doğruluktan daha fazla verimlilik seçmek için risk analizi kullanıyor . Her gün yapılır ve biz yapmazsak bizi hiçbir yere götürmeyen şeylere bağlıyız.

Sorunuzu cevaplamak için:

Yeterli miktarda deneyime sahip bir programcı olarak, kişi geçmiş deneyimin "denenmiş ve gerçek" yollarından her zaman problem çözme yaklaşımına yaklaşma eğilimi ile nasıl mücadele edebilir?

  1. Yeni sorunları aramaya ve kataloglamaya devam et
  2. Sorun için doğru çözümü seçme konusunda daha iyi olun ; sadece hangi çözümü bilmek yerine, neden doğru olduğunu bilin .
  3. Pratik ve bilemek için karar verme becerileri. Bazen verimlilik doğru seçimdir ve bu zamanları daha iyi tanımak ölçülebilir gerçek dünya avantajlarına yol açacaktır.

Bu cevabı seviyorum, zaman ayırdığınız için teşekkürler.
David in Dakota

9

Becerilerinizi geliştirmek / işlerinizi hızlı yerine doğru yapmak için çalışma sürenizin% 20'sini ayırın. Aksi takdirde yavaşça geride kalmaya başlarsınız. Bu, kısa vadede daha az iş yapmanız anlamına gelebilir, ancak uzun vadede yatırımın ödeyeceği anlamına gelebilir.

Sert kısım, köşeleri kesmek için baskıya direniyor. Alışkanlık kökleşmiş olana kadar, o köşeyi kesmeyin. Becerilerinize yapılan bu yatırımın "normal" olduğunu düşündüğünüz noktaya geldiğinizde, zaman zaman bir projeye acele etmeyi seçebilirsiniz. Bu arada, bu zamanı isteğe bağlı olarak düşünmeyin ve tahminlerinizi buna göre oluşturun.


2
bunun için zamanınız varsa,% 20'yi artırın. Ben bu kadar deneyimli değilim, ama bunu zaten anladım: doğru yapmak her zaman sonunda işe yarar. Ayrıca, doğru yapmak konusunda ne kadar bilginiz varsa, o kadar hızlı doğru ve sonunda sonuçlandıracaksınız (iyi, umarım budur; P) ikisi birlikte birleşecek ve hemen hemen her şeyi doğru yapabileceksiniz VE hızlı.
stijn

btw bana daha sık olmamakla birlikte: bir şey başlatmak, tamamen doğru olmadığını bilmek, sonra 2 gün sonra deli zaman kaybetmek çünkü ilk başta yanlış olduğunu bildiğim şey şimdi yeniden yapmak için yeniden düzenleme gerekiyor herşey.
stijn

1
Ya da iş düşük olduğunda ya da projeler arasında daha az olduğunda% 50. İncelediğim hiçbir şey boşa gitmedi. Sadece önemli olduğunda bilgili bir görüşe sahip olsa bile, hepsi daha sonradan daha erken kullanılmıştır.
Apalala

5

Yazılım Geliştirme, bence her zaman mutlak * en iyi * çözümü bulmak değil, işleri halletmekle ilgilidir. Belki de sorunu her zaman en iyi şekilde çözmezseniz, bu dünyanın sonu değildir.

Ancak, işleri en iyi şekilde yapmanın önemli olduğunu düşünüyorsanız, en iyi bahsin bir takımın parçası olarak gelişeceğini düşünüyorum. Tasarımı tartışın ve meslektaşlarınızla kod incelemeleri yapın. İnsanların normalde farklı geçmişleri ve tercihleri ​​olduğu için, iki veya üç kişi arasında, sorunlara ve çözümlere birkaç farklı bakış açınız olmalıdır.


Kendinizi sık sık işinizle meşgul etmek, kendinizi bir sonraki "en iyi" teknolojiyi öğrenen adam kadar verimli tutmak anlamına gelir. Ticarette otuz yıl saymak üzereyim ve hatırladıklarımın çoğu çalışma, çalışma ve daha fazla çalışma.
Apalala

Programlama için +1 (en azından profesyonel programlama) teorik olarak mükemmel bir sanat eseri olan koddan ziyade işi yapan kod yazmakla ilgilidir.
jwenting

3

Yeterli miktarda deneyime sahip bir programcı olarak, kişi geçmiş deneyimin "denenmiş ve gerçek" yollarından her zaman problem çözme yaklaşımına yaklaşma eğilimi ile nasıl mücadele edebilir?

Düzenli olarak refactor. Yeniden düzenleme, geçmişte yazdığımız kodu incelememizi gerektirir. Bu zamanı eski kodu yeni bir bakış açısıyla görüntülemek için kullanabiliriz. Büyük teknoloji değişikliklerine ayak uydurduğunuz sürece, gerekli gördüğünüz güncellemeler yapılabilir.

Eğer sorunlu etki alanından veya iş kurallarından sık sık sorun yaşadığım veya sorun yaşadığım yerde müşteri işlerim varsa, sadece bir çözüm elde etmek için bildiklerimi kullanma eğilimindeyim.

İyi. Kendi hedefleriniz yerine müşterinin ihtiyaçlarına odaklanıyorsunuz. Gitme zamanı.

Bu çok çirkin şeyler içeriyor

document.getElementById

veya ASP.NET MVC yaklaşımı ile şeyleri nasıl yeniden arayacağınızı bulmak yerine şablon bağlı denetimlerle (DataList / Repeater) ASP.NET kullanmak.

Web Formlarında yanlış bir şey yok. MVC, Web Formlarının yerini almaz. Bu da yeni bir teknolojiyi öğrenme zamanı değil. Üçgeni hatırla . Zamanınız olduğunda refactor. Ayrıca, ilk ifadeye bakınız.

Geçmişte kullandığım tekniklerden biri, sadece bu yeni teknolojileri keşfetmek için var olan kişisel projelere sahip olmaktır, ancak bunun sürdürülmesi zordur. Başka hangi yaklaşımlar önerilebilir?

Sürdürülmesi zor olan nedir? Umarım öğrenmeniz için tasarlanmış projeleri sürdürmüyorsunuzdur. Öyleyse, örnek projeleri atın. Öğrenme amacıyla bir defaya mahsus projeler oluşturmakta yanlış bir şey yoktur. Bu çok iyi bir şey. İlk ifadeye bakın.

Denenmiş ve doğru! = Kötü. "Einstellung Etkisi" burada biraz bağlam dışıdır. Testler "kavanoz açmayı" optimize eden kişileri ifade eder. İnsanların "kavanoz açma" yöntemleri sınırlıdır ve zamanla gelişmez (herhangi bir Bilimkurgu malzemesi hariç). Yazılımda, "X görevini gerçekleştirmenin" en iyi yolu zamanla değişir.


2

Kutunun dışında düşünmeye yardımcı olan bir şey, bunu yapmak için gerçek bir pratik yapıyor. Edward De Bono , yanal düşünme ve ilgili konular hakkında birçok kitap yazmıştır .

Ancak verilen herhangi bir karar noktasında, en önemli şey riski değerlendirmek ve kucaklamaktır. De Marco ve Lister tarafından Bears ile Waltzing, yazılım geliştirmeye uygulandığında konuyla ilgili en iyi kitaplardan biridir.

Aşırı Programlama ve diğer çevik metodolojiler, kişinin devam etmesini ve rutin olarak yeni (başak) çözümleri denemesini önerir. Proje başlangıcında farklı teknolojilerle deneyler yapıyorum ve bu beni gerçek ve denenmiş lehine düşmüş olmaktan ve bazen yeni bir teknolojik mücevher keşfetmekten kurtardı.


1

Bir ekip olarak, paterni bozan mükemmelliği tanıyarak grubu değiştirebilirsiniz. Bunun için sık sık yeni insanlar kullanıyorum, çünkü normal şeyler yapma yoluna girmiyorlar. Bu biraz yönetsel bir cevaptır - ancak deneyimli bir mühendis olarak bile, bir başkasının görüşünün daha az önyargılı olabileceğini fark edebilirsiniz ve bu yüzden en azından kendi fikriniz kadar (belki daha fazla) bir sıralama ile düşünün.


1

Sadece document.getElementById yerine ne koyacağınızdan emin değil misiniz, ne kadar uygun olursanız olun gerçekten zaman kaybıdır?

Düzenleme: Sadece anladım, her iki örnek araçlar hakkında, bunun nedeni size yetenek geliştirme en büyük kilometre taşı olarak araçları değiştirmeyi düşünüyor olabilir. İyi bir kodlayıcı, harikalarını çalıştırmak için bir Turing tam dilinden biraz daha fazlasına ihtiyaç duyar, yani araçların önemli olmadığı anlamına gelmez, ancak zaten kullandığınız şey tam olarak bir rock alt araç seti değildir. Bir araçtan diğerine geçmek aklınıza gelebilecek en büyük ilerlemeyse, temelde daha az ölçülebilir alanlarda durmuş olabilirsiniz.


1
Neyi kastettiğinden emin değilim; Daha iyi bir yaklaşım olarak jQuery seçicileri kullanmaktan bahsediyordum. Düz DOM kullanmak iyi çalışır, ancak jQuery çok daha iyi bir yaklaşımdır. Net olmak gerekirse, her ikisi de çalışır, biri diğerinden daha iyidir.
David in Dakota

1
Peki, $("#id")daha kısa, ama nihayetinde sadece bir document.getElementById("id")ek yükü olan bir takma ad . İş akışınızı iyileştireceğini biliyor musunuz? Yoksa jQuery'ye inandığınız kadar çok daha iyi olduğu söylendi mi?
aaaaaaaaaaaa

1
@eBusiness - Bunun $("#id")nihayetinde sadece bir takma ad olduğunu biliyor musunuz document.getElementById("id")? Yoksa daha önce size bu kadar çok kez inandığınız söylendi mi? Umarım her kullandığınızda getElementByIdIE ve Opera'nın öğeleri adıyla döndürdüğü durumu ve Blackberry 4.6'nın artık belgede bulunmayan düğümleri döndürdüğü durumu ele almayı unutmayın.
Nick Knowlson

Farklı nesnelerin adı ve kimliği için aynı tanımlayıcıyı kullanıyorsanız veya kodunuz hangi nesneleri sildiğini 'hatırlayamazsa' jQuery kullanmak pratiktir. Aksi takdirde, kodunuzun hızını aşağıya çeken şişkinlikten başka bir şey değildir. JQuery'nin yaptığı şeyin yanlış olduğunu söylemiyorum, ama her amaç için daha iyi değil.
aaaaaaaaaaaa

1
Bunu ateşlediğimi biliyorum, ama bence bir jQuery ve JavaScript flamewar içine biraz fazla ilerliyoruz.
aaaaaaaaaaaa

1

Yeterli miktarda deneyime sahip bir programcı olarak, kişi geçmiş deneyimin "denenmiş ve gerçek" yollarından her zaman problem çözme yaklaşımına yaklaşma eğilimi ile nasıl mücadele edebilir?

Öz farkındalık

Eğilimlerinizin, zayıf yönlerinizin ve güçlü yönlerinizin farkında olun.

Bilinçli Kararlar

Kararlarınızı açık ve bilinçli yapın. Nasıl yapacağınızı bilinçli olarak düşünmeden bir şeyler yapmak için zıplamayın.

Öğrenin ve Başvurun

Yeni teknikler öğrenmeye devam edin ve nerede uygulanabileceğini düşünün. Uygulanabileceği bir durumla karşılaştığınızda, bir maliyet-fayda analizi yapın. Bazen yeni bir şey denemenin yararı, bilinen bir çözümden daha ağır basar.

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.