Teknik olmayan bir kişiye yeniden yapılanmayı nasıl açıklarsınız?


52

Yeniden yapılanmayı (ve teknik borcu) teknik olmayan bir kişiye (tipik olarak bir PHB veya müşteri) açıklamaya nasıl devam edersiniz? ("Ne, bana bir ay boyunca hiçbir fark yaratmadan işine mi mal olacak?!")

GÜNCELLEME Şimdiye kadarki tüm cevaplar için teşekkürler, bu listenin uygun kişileri işaret edebileceğimiz birkaç faydalı analoji sağlayacağını düşünüyorum (ancak PHB'lere yapılan referansları düzenlemek akıllıca olabilir!)


Apple'ın bu kadar çok insanı Leopard'dan Snow Leopard'a değişmeye nasıl ikna ettiğini hatırlamıyorum. Muhtemelen fiyat: o zaman normalden 100 $ daha az.
mouviciel

Bu soru, endüstride kodla çalışan herkes için şaşırtıcı derecede yararlı yanıtlar verebilir. İnsanlara dikkat et.
joshin4colours

neden akıllıca olsun ki?
Louis Rhys

Yanıtlar:


53

Büyük bir ev sinema sisteminiz varsa ve bir şeyler eklerseniz, yavaş ama kesin bir şekilde büyük fareler arkada yuvalar oluşturur.

Çoğu zaman parçaları değiştiriyorsanız, bazen tüm bunları düzeltmeye değer.

Elbette, bunu yaparsanız, daha önce çalışıyordu ve başladığınızdan daha iyi çalışmayacak, ancak tekrar karıştırmak zorunda kaldığınızda, işler çok daha kolay olacak.

Her durumda, PHB veya müşterinin zaten bildiği bazı konu alanlarına benzer bir karşılaştırma yapmak muhtemelen en iyisidir, yani araba veya inşaat veya başka bir şey ...


1
En iyi benzetme değil, çünkü kulağınıza sürekli girmenin doğrudan bir sonucu olarak ortaya çıkan kötü şeylerin aksine, spontane olarak kendiliğinden taranır.
doppelgreener

21
@Axidos: "sıçanlar yuva", "dolaştırmayı geri almak imkansız gibi görünen" anlamına gelen bir İngiliz deyimidir (bu durumda, eğlence merkezinin arkasındaki kordon ve kablolar için)
HedgeMage

8
Kavramsal olarak oldukça iyi - "sıçanlar yuvasından" sonra "kablolara" ihtiyaç duyuyor
Murph

2
@Peter: Sanırım en azından bir kere televizyonun arkasına geçmek zorunda kaldık. Sadece yüz kat daha kötü olarak açıklayın ve her yere bir kablo ipliği döndürün ve bunu çekin ve çekin ve karmaşanın herhangi bir yerinde ölü bir medeniyeti keşfedin.
doppelgreener 10:10

3
Birisi ilişki kuramazsa, onlara şunu göster: google.com/images?q=do+not+touch+any+of+these+wires
Steve S

41

Yeniden faktoring, her şey düzgün bir şekilde yerine oturuncaya kadar bir valizi yeniden paketleme işlemi gibidir. Bazen, bu süreçte, başlamak için neden bu kadar önemsiz olmaya çalıştığınızı merak ediyorsunuz.


1
Bir garaj veya kulübe ile biraz benzetme gönderecektim, ama bu daha iyi.
Matt Ellen,

Ya da bazen bir kaç tane daha bavul alırsınız ve fazla mesai ücretlerini ödemenin önemli olmadığını fark edersiniz, çünkü yazılım maliyetlerinde fiziksel dünyadakilere eşit değildir. O zaman her şeye gerçekten çok yakışır ve tek bir valizin kısıtlılığının keyfi ve saçma olduğu ortaya çıktı.
Dan Rosenstark

+1 Bu harika. İşlerin daha az yer kaplamasını sağlamanın yanı sıra, hiç ihtiyacınız olmadığını fark ettiğiniz şeyler var ve böylece dışarıda bırakabilirsiniz.
Robbie Dee

21

Teknik borç kavramını açıklayamam, çünkü gerekli değil. Bunun yerine, yeniden yapılanmaya odaklanın: Programınızın tasarımını değiştiriyorsunuz, mutlaka "daha iyi" veya "gelişmiş" olması için değil, yapmanız gereken bir değişikliği kabul etmesi için değiştiriyorsunuz.

Bir araba benzetmesi uygun olabilir: Bir arabaya bir klima eklemeniz gerekir, ancak orijinal olarak biri için tasarlanmamıştır. Sadece garip bir L şeklindeki klimayı yapmakla kalmaz, ilk önce başka şeyleri de dışarı çıkarmanız ve havalandırma sistemini değiştirmeniz gerekir.

Ayrıca, yeni özellikleri barındırırken yeniden canlandırmanın daha iyi bir strateji olduğunu düşünüyorum: aksi halde tasarımı yalnızca "daha iyi" görünen bir şey olarak değiştiriyor olabilirsiniz, ancak bir sonraki özelliğin eklenmesini çevreleyen koşullara gerçekten uygun olmayabilir.


Daha iyi performans ya da daha kolay bakım sağlamak için parçaları bir arabada taşımak, arabalarını kapatan herkes için işe yarar, fakat bunu kaç PHB yaptı?
Peter Boughton

3
Bunu sevdim çünkü yeniden yapılanmanın gerekli bir değişikliği kolaylaştırmak (veya mümkün kılmak) için yapıldığını vurguluyor. Yeniden düzenleme genellikle kendi iyiliği için yapılmamalı, belirli bir amacı yerine getirmelidir.
Kristopher Johnson,

Böylece, kısa cevap şu şekilde olur: Onlara söyleme! Zaman içinde sadece yeni özelliklere ve buna göre refactöre katlanın.
Jonathan van de Veen

12

Teknik Borç terimini kullanıyorum ve bunu doğrudan anladıkları bir şeyle ilişkilendiriyorum - Kurumsal Borç. Teknik Borç kredi almak gibi. Buna faiz ödersiniz. Örneğin, yeni bir fabrika kurabilir ve bunun bedelini tam olarak ödeyebilir veya bunun için borç alabilirsiniz. Borç alırsanız, uzun vadede bunun için daha çok para ödersiniz, ancak şartların doğru olması finansal olarak anlamlı olur .

Ancak, böyle bir kredi için% 25 faiz ödüyorsanız, kendinizi sürdürülebilir olmayan bir duruma soktunuz. Bu teknik borç ile aynı. Bazen bazı teknik borçları almak mantıklı geliyor. Ancak, ilginin çok yüksek olduğu ve ödenmesi gereken bir nokta var. Bir miktar teknik borç borcu ev kredisi, bazıları ise kredi kartı borcu gibidir. Acil durumlarda, kredi kartı borcu önemli ve değerli bir varlıktır. Bununla birlikte, akıllıca kullanıldığında bankayı (veya eğer istersen hane) de kırabilir.

Başka bir örnek: Gelecekte satışlar için daha fazla müşteri kazanma şansı elde etmek amacıyla bir pazarlama postası bırakması için 10.000 dolar ödeyebilirsiniz. "Satış borcunu" ödüyorsunuz. Bu, uzun vadeli kazancı olan bir giderdir. Bunu neden şimdi bir kod parçasını yeniden gözden geçirerek para harcamak istediğinize eşitleyin. Her iki durumda da acil bir ödeme yoktur, ancak gelecekte daha iyi performans için kendinizi hazırlıyorsunuz.

Hedef kitlenin kim olduğu ile konuşurken "xxxx borç" terimini bir benzetme olarak kullanma eğilimindeyim. Örn, Operasyonel Borç - Şu anda elimizdeki matbaa iyi çalışıyor, ancak bir gün (veya bir hafta) üretimini durdurarak ve yeni bir makineye yükselterek üretimi% 25 artırabiliriz.

EDIT - İşte bu başka bir almak


1
Gerçekçi ekonomiyi gösteren iyi bir gerekçeli cevap için +1. Borç zaman zaman rasyoneldir ve temizlikçiler buna tahammül edemedikleri takdirde çok fazla fırsatı kaçırmaktadırlar.
Macneil

1
İnsanlar, eski kredilere olan faizleri ödemek için kredi kullanmanın sürdürülebilir olmadığını anlıyorlar.
Christopher Mahan

1
Bu benim açıklama tercihimdir, çünkü her şeyi hurdaya çıkarmaya ve yeniden yazmaya (genellikle çok fazla teknik borç nedeniyle kalan tek seçenek) teknik iflasa
Wayne Molina

4
Bu korkunç bir cevap. (1) Bu, refactoring'in teknik açıklamasından daha karmaşıktır. (2) Bu yeniden yapılanmanın "nedenini" açıklamamaktadır; yeniden yapılanmanın "ne zaman" larını açıklar (yani: uygun maliyetli olduğu zaman). Ya da belki de bu yazıyı gerçekten anlamıyorum ve dolayısıyla (1).
Thomas Eding

2
@TamasEding (1) Bu yeniden ateşlemenin bir açıklaması değil, teknik borcun bir açıklamasıdır. (2) Bu, bir kişiye ne zaman yeniden ateşlenmenin nedenini açıklar. Dürüst olmak gerekirse, teknik sebeple ilgilenmiyorlar. Satışları artıracak bir sonraki özellik dışında bir şey üzerinde çalışıyor olmanızın haklı bir nedeni istiyorlar. Bu nedenle çoğu programcı patronuyla konuşamıyor ve patronun aptalca olduğundan şikayet ediyor. Aptal değiller, senden farklı sürücüler var.
Nemi

8

Bahar temizliği.

Evde herhangi bir değişiklik yapmıyorsunuz. Sadece etrafta bir şeyleri değiştiriyorsun ve tozdan kurtuluyorsun. Belki artık kullanmadığın veya ihtiyaç duymadığın bazı şeyleri atmak. ama hiçbir şey eklemiyorsun.


1
+1: Bu en iyi cevap imo: ve hemen hemen herkes ilişki kurabilir. “Evinizde yaşıyorsunuz, işler kirleniyor / tozlu / orta derecede - düzenli aralıklarla derinlemesine bir temizlik yapmanız gerekiyor.”
Steven Evers

7

“Hiç Mouse Trap oynadın mı? Yeni özelliklere girdiğimizde, arayüzleri değiştirdiğimizde ve hataları düzelttikçe, kod böyle görünmeye başlayabilir. Çok fazla sermaye harcamamız gereken bir nokta var (zaman ve emek (hangi paraya mal olacak) tüm hareketli parçaların her yeni değişiklik veya ekleme ile iyi bir şekilde çalışmasını sağlamak veya bunun yerine, tasarımı değiştirmek için zaman ayırabiliriz, böylece her değişiklik yaptığımızda daha az hareketli parçaya neden oluruz. olabilir gibi görünüyor refactor herhangi bir yarar yok, bir son kullanıcının bakış açısıyla, ama fayda yeni bir özellik sonrası refactor eklenen her zaman olmuyor. süreçtir hızlıdır, daha az hata tanıtır ve sonra daha az pahalı, refactored kodun genellikle genel olarak daha verimli olduğundan bahsetmiyorum.

Öncelikle neden Fare Kapanı gibi görünmesine izin verdiğimizi merak edebilirsiniz:

  • Bazen bir şeyi hemen şimdi yapmak, sadece "çalışması için" zarafeti ve verimliliği feda etmemiz gerektiği anlamına gelir.
  • Programcıların sıklıkla değiştiği dil özellikleri ve bize sunulan diğer teknolojiler. Bazen yeni özellikler altı hareketli parçanın titiz bir kargaşasını bir ile değiştirmemize izin verir.
  • Çoğu zaman, A ve B özelliklerine C özelliği eklediğimizde, B'nin düşeceğini ve D'nin ekleneceğini bilmiyoruz. C'yi başarmanın bir yolu B ile çok iyi çalışabilir ancak D ile çok iyi çalışamayabilir.

Daha iyi bir fare kapanı kurmaya devam etmek için sürekli geri dönüp karmaşıklığı azaltacak ve sahip olduklarımızı düzene sokacak yerler bulmalıyız. Sadece bir çok özelliğe sahip yazılıma sahip olmak ile gerçekten yüksek kaliteli bir yazılıma sahip olmak arasındaki fark bu. ”


6

alt metin

Bu, ev sineması analojisinin biraz daha grafiksel bir versiyonudur.

Bir tane daha yeni cihaz [aka, yeni işlevsellik] eklemek istiyorsanız, bir tutamda muhtemelen bir yere yerleştirebilirsiniz.

Başka bir cihaz daha eklemek istiyorsan, uzatma kablosu alabilirsin, bu da sana zaman kazandıracak.

Ancak her ilavede, bir çözüm bulmak zorlaşıyor. Ve kendinizi 1 yangın [ 1 hata] riskine maruz bırakıyorsunuz ve bir başkasını duvarın içine sokmak için birisini ödemek için büyük paraları çekmek zorunda kalacaksınız. devre kartı, hatta daha da fazlası.

1 Başka bir şey PHB'lerin çok iyi uymadığı bir şey: "Peki, sadece olabilirse , neden endişeleniyorsunuz?"


5

Yeniden düzenleme - giysi dolabını / Takım Çekmecesini düzenlemek gibidir.

  • Kıyafetlerini / aletlerini atma, çünkü her yerdeler.

  • Asla örgütsüzleşmemeleri gerektiğini savunabilirsin. Ama yaparlar.

Tıpkı kodun yaptığı gibi. Özellikle zamanla büyüdükçe.

Ve eğer temizlemezseniz, sevdiğiniz tişörtün veya her zaman ihtiyaç duyduğunuz ancak asla bulamayacağınız bir İngiliz anahtarının ne olduğunu merak etmeye devam edeceksiniz!


4

“Kod bakımı” derdim . Teknik olmayan bir kişinin aşina olduğu ve teknik olmayan bir dünya görüşüne mantıklı gelen kelimeleri kullanmak önemlidir. Eğer teknik olmayan kişi (müşteri) uygulama bakımı konusunda bilgiliyse, kod bakımı ve uygulama bakımını paralel hale getirmek kolaydır. Aynı olmasalar bile, buradaki son müşterinin geliştiriciler olduğunu veya sistemi nasıl koruduğunu açıklayabilirsiniz.


1
Teknik olmayan insanlar uygulama bakımı ile aranda mı? Büyükanneme sordum: O değil, bulduğum en teknik olmayan kişi o. Ayrıca: Teknik olmayan bir kişi kod ve uygulama arasındaki farkı bilmediğinden ("Kod uygulama ise, uygulama koddur") benzetmeniz çalışmaz.
Martin

2
Çalıştığım yerlerde, pazarlama ve projektör türleri "piyasaya sürüldükten sonra yapılan hata düzeltmeleri" anlamına gelen "bakım" ı anladılar ve yeniden yapılandırmanın hataları düzelttiğini iddia etmek anlamsızdı.

Benim için teknik olmayan kişi müşteridir. Müşteri hangi uygulama bakımının yapıldığını bilirse, kod bakımını da anlamalıdır.
Amir Rezaei 11

"Kod bakımı", kodunuzun aşınma ve yıpranma veya kullanılmadığı gibi sesler. Bir otomobilin bakımı gerekir, çünkü normal kullanım bileşenleri zorlar, sıvıları vb. Kullanır. Bir uygulama böyle değildir - sabit sürücüde oturan kod kendiliğinden "yaşlanmaz" veya "kötüleşmez".
Dan Ray,

Size bakım konusunda bazı örnekler vereceğim: Performans sorunları. Bileşeniniz, tüm sistem veya uygulamanız VB ile yazılmıştır ve Microsoft bunu desteklemeyi durdurur. İşletim sistemi, kodunuzun dayandığı teknolojiyi desteklemiyor. Güvenlik sorunları. Bu konularda bakım yapılması, son kullanıcının fark edebileceği herhangi bir yeni işlevsellik katmaz, ancak “uygulamayı” canlı tutmak için kritik öneme sahiptir.
Amir Rezaei

4

Diyelim ki, müşteri talep ederse arabaları kişiselleştirmede uzmanlaşmış, hatta sıfırdan inşa eden bir tamirci olduğunuzu söyleyin. Süper limuzininde her zaman yeni bir parlak şey koymak için her zaman dükkanınıza geri dönen bu müşteri var.

Bir zamanlar güzel bir ses sistemi kurmaya geldi. Kabloları geçirme ve hepsini doğru bir şekilde bağlama görevini özenle yerine getiriyorsunuz. Bir gün sonra dışarı çıkar, mutludur ve her zamanki gibi ciddiyetle öder.

Ertesi ay geri dönüyor ama bu sefer tam donanımlı bir ev sineması kurulmasını istiyor. Bir kez daha limuzini alıyorsunuz. Profesyonel olmak için ses sistemine tekrar baktınız ve telleri arabanın etrafına dolaştırmak için bir boru sistemi kurarak bakımını kolaylaştırıyorsunuz. Bu yolla teller korunur ve çıkarılması daha kolaydır ve daha fazlasını eklemeniz gerekirse de yapılması kolay olacaktır. Böylece eski kabloları sökersiniz, boruları yerleştirirsiniz ve ses sistemini ve sinema için ekstra kabloları geçirirsiniz, hepsini kapatırsınız ve bitirdiniz.

Müşterinin sizden, değiştirilenlerin ve tüplerin maliyetinin bir kısmını düşürdüğünüz eski ses sistemini değiştirmenizi istemediğini fark etmek. Yine de anlaşmadan hala para kazanıyorsunuz, Sadece yaptığınız kadar değil, sistemi ilk defa yaptığınız gibi bir araya getirdiniz.

Bir ay sonra geri döndü, bu sefer bir aydınlatma sistemi istiyor ve yeni hoparlörlerin haftanın başlarında eskilerine zarar vermesini istiyor.

Her şeyi güzel ve düzenli tuttuğunuz için yeni aydınlatma kablolarını tüpünüzden hızlı bir şekilde geçirebilir, sistemi kurabilir ve hoparlörü değiştirebilirsiniz. Ancak bu sefer çok daha hızlı bir şekilde bitirdiniz, yeniden faktoring sizi oyununuzda tutarken ödedi.

Mükemmel kabloları koparmak ve tüm bu ekstra boruları takmak için size gülmekte olan rakibiniz, müşterisini memnun etmek için hala mücadele ediyor. Eminim çoğu zaman sizden daha hızlı bir şekilde yapılıyordu ancak zaman geçtikçe müşterileri gittikçe daha fazla gecikme olduğundan ve işin genel kalitesinin düşmesinden şikayetçi.

Buna bakarak, yalnızca iş dünyasında kalmak değil, aynı zamanda en iyi silah olmak hedefinin, müşterinin taleplerini yerine getirmek için yaptıklarınızı ve yolda hayatınızı kolaylaştırmak için yaptıklarınızı dengelemek olduğunun farkındasınız. Çok nadiren bir müşteri her ikisi için de para öder, bu yüzden yakından yönetmek zorundasınız. İki kez yapma pahasına bile proaktif olarak doğru şeyler yaparak, bakım maliyetlerini üretkenliğinizi kontrollü bir yüzde olarak tutacağınıza kumar oynuyorsunuz.

Yazılımlar aynıdır, ancak programcılar, etkiler müşteriler ve yöneticiler tarafından gerçekten hissedilmeden önce çok uzun bir süre boyunca dijital koli bandı ile oynayabilirler. Maalesef, o zamana kadar işleri tekrar yapma maliyeti, koli bandının ne kadar olduğu ve söz konusu koli bandının ortalama yaşı ile ilgili olarak katlanarak artmaktadır.

Bu yüzden sistemi yeniden yönlendirmeye devam etmemiz önemlidir. Çok sık tecrübe bize aynı şeyi yapmanın daha etkili bir yolunu gösterecektir ya da benzer işlevleri birleştirip geçmişe kopyalamak yerine fazlalıklardan faydalanabiliriz. Bu şekilde sistemi yalın ve kaba tutuyoruz. Zaman, sistemin talepleri karşılamak için sürekli olarak yeniden faktörlendirilmesinin, bakımın içine yerleştirilen miktarı kontrol ederek verimliliği sabit tutacağını gösterecektir.

Koli bandı yerleştirmek, optimal olmayan bir sistemi taşıma pahasına üretkenliği geçici olarak artıracaktır. Bir sistemin diğer yönlerine zarar vermede anında verimlilik tercih edildiğinde teknik borç doğar. Borç analojisi iyidir, çünkü borçlanan sermayenin üzerindeki faizler, ödünç alınan zamanın karlarını yerken, işleri hızlı bir şekilde daha yüksek bakımlar yapar ve bir ekibi oluşturmak yerine ek kaynakları harcamaya zorlamak için sistemin kırılganlığını arttırır. Finansal akrabaları gibi, borçlanma azalmadan devam ederse çoğu kaynak faiz geri ödemesine harcanır ve iyileştirmeler için çok az şey bırakılır. Teknik borç, sistemin kaynaklarını diğer olası iyileştirmeleri durdurmak için öğütmeyi sürdürmekle harcayan çoğu kaynağın harcandığı bir noktaya kadar teknik kaynakları tüketecektir.

Sonuçta, sorular bizim yapmamamız gereken ya da yapmamamız gereken değil, yöneticilerin ve müşterilerin dijital koli bandı kullanımıyla yapay olarak şişirilmiş verimlilik rakamlarına güvenebileceklerine inanmalarına izin vermek etiktir. Bazıları bunun bir iş kararı olduğunu düşünürdü, ama açıkçası bunun nedeni yöneticilerin bunu anlamadığıdır. Sonunda, birileri yüksek yeniden faktörlendirme olsa da veya yeni bir sisteme geçerek borcunu ödemek zorunda kalacaktır. Nihayetinde bizim için, programcılar, sistemleri bakımdan korumak için, işin doğal bir parçası olduğu için yeniden faktör sormak zorunda kalmamalısınız, bunun ne anlama geldiğini anlamak, yazılım mühendisliğinin ne anlama geldiğini anlamayı başaramaz. Bu, zaten önemli bir borcu olan sistemler olduğunu ve bu borcun ödenmesinin ödeme yapanların karar vermesini gerektireceğini söyledi. İşiniz böyle bir durumdur, borç almaktan vazgeçmek için en azından rolünüzü yapmaktır. Bu borcu olduABD tarafından belki de daha iyi tanımadığımız için, çünkü bunu yapmaya zorlandık, yine de, bu borcu aldık ve çoğu zaman borcu elimizde bırakmamak için elimizde bıraktık, bu yüzden de düzgün idare edemedik.

İşte yazılımınız, hepsi bitti, umarız beğenirsiniz .... Bu arada, kredi kartınızı azarladım, umarım sakıncası yok ... cya


3

Yeniden faktoringin amacı, tasarımı basitleştirmek ve verimsizlikleri ortadan kaldırmaktır. Bu, hataları düzeltmeyi ve gelecekte yeni özellikler eklemeyi kolaylaştırır.

Hata ayıklama, kodu ilk etapta yazmaktan iki kat daha zordur. Bu nedenle, kodu olabildiğince akıllıca yazarsanız, tanımı gereği, hata ayıklamak için yeterince akıllı değilsinizdir.

Koda yeni özellikler eklemeye devam ederseniz, yeniden faktoring hızlı bir şekilde kendisi için ödeme yapar. Bu daha düşük hata oranı, daha hızlı hata ayıklama ve daha hızlı düzeltmelerde görülebilir.


Ama clever == 0öyleyse 2 * clever == 0...
Thomas Eding

3

Yazılım yazmak çok kurgusal olmayan büyük bir kitap ya da ansiklopedi yazmak gibi.

İlk taslak her zaman berbattır. Yeniden düzenlemek, orada olması gerekmeyen bölümleri kaldırmak ve boyunca tutarlı bir stil sağlamak suretiyle her zaman geliştirilebilir.

Ne zaman revize etmeniz gerekiyorsa, yapılacak en basit şey yeni bir bölüm eklemek, birkaç kelimeyi değiştirmek, vb. Ancak revizyonlar arttıkça, kitap organizasyonunu kaybetmeye başlar. Bu yüzden daha fazla yeniden yapılanma geçmek zorundasın. Bunu yapmazsanız, kitap saçma sapan bir kargaşaya dönüşür.


3

Mesela masaüstü bilgisayarınızı alın. Bir kule, monitör, klavye, fare, yazıcı, tarayıcı ve hoparlörleriniz var. Sonuçta istediğin tek şey güzel bir organize masa. Demek ki işleri kör bir şekilde yerine takıyorsunuz ve birkaç dakika sonra, her şey istediğiniz gibi ayarlandı. Şey ... neredeyse istediğiniz gibi.

Bir gün sonra hoparlörlerinizdeki dengeyi değiştirirken, sol ve sağ hoparlörlerinizi yanlışlıkla yanlış alanlara yerleştirdiğinizi fark edersiniz, böylece konumlarını değiştirmek istersiniz. Ama oh hayır! Bir karışık kordon ormanı var; hoparlörleri hareket ettirmeye devam ettiğinizde, fare kordonunuz takılır ve şimdi fareniz hoparlörlerle birlikte sürüklenir. Ayrıca, klavyenizde artık gevşeklik yok - onu masadan kucağınıza taşıyabiliyordunuz.

Tamam, sadece fareyi ve klavyeyi çıkarabilir ve yeniden yerleştirebilirsiniz, böylece her şey sabitlenir. Ancak bu, gelecekteki yeniden yapılanma ve gelecekteki ilavelere yardımcı olmaz. Ayrıca farenizi ve klavye kablolarınızı ormanda dolaştırmak çok zahmetlidir.

Daha iyi bir çözüm, her bir kablonun diğerine müdahale etmediği, temiz ve temiz bir şekilde takmaları için her şeyi yeniden takmaktır. Şimdi gelecekteki değişiklikler kolaydır ve kolay olmaya devam edin. Daha sonra büyük kazançlar için biraz ön yatırım yaparsınız.

Kilit nokta, orijinal çözümün çoğunlukla ÇALIŞMASI olmasıdır. Yeniden yapılanma ile ilgili mesele şudur: başlamak için işe yarar, ancak gelecekteki değişiklikleri kolayca yapabilmek için (hoparlörleri hareket ettirmek için) zaten olan şeyleri değiştirmeniz gerekir.


2

Daha önceki geceki vahşi ve çılgın bir partiden sonra evi temizlemek gibi.

Diyelim ki oturma odası tamamen çöktü. Ev hala bir ev, oturma odası hala bir oturma odası. Çalışıyor ama olabileceği gibi değil. Dağınıklığa baktıktan sonra, temizlenmesi gerektiğinin farkındasınız.

Demek çöpleri toplamaya başladın. Şimdiden daha iyi görünüyor. Demek ki odaya bakıyorsun ve mobilyayı düzeltmeye karar veriyorsun. Bir parçayı geri koyarsın, sonra bir sonraki ve bir sonraki. Vay, oda gerçekten çok iyi görünüyor. Sen gururlusun.

Kız kardeşin içeri girip odanın çöp gibi göründüğünü söylüyor, kitaplığı tamir etmeli ve halıyı doldurmalısınız. O haklı. Oda gerçekten çok iyi görünüyor.

Etrafınıza bakın ve hepsi aynı yükseklikte olsa, pencere gölgelerinin daha iyi görüneceğini görün. Bitti. Vay, oda muhteşem.

Kodunuza aynı şekilde davranın.


1
Beğendim ama mutfağı temizlemeye değiştirirdim. Bir süre yemek yapmak yok, ancak daha sonra işler daha iyi olacak. PHB'ler şirket zamanında parti vermekte zorlanıyor olabilir :)
Jaap

İyi bir benzetme, ancak okurların bilmesi gereken bir kusur vardır: Evinizi temizlemezseniz, o zaman eviniz kelimenin tam anlamıyla zamanla daha az kullanılabilir hale gelir. Oysa bir programla, bu olmaz.
Thomas Eding

1

Kolay!

Bir örnekle ele alalım ... herkes hayatlarında sevgili birine bir mektup yazdı. Sevgili biri olmalı, çünkü bu harflerde genellikle kompozisyona da dikkat ediyoruz.

Yani, metninizi aldınız, ... anlamı her iki şekilde de devam edecek, ama her şeyin kulağa hoş gelmesini istiyorsun ! Sağ?

Yeniden düzenleme, aynı şey ... aynı bilgi parçaları, az ya da çok, ancak kompozisyon daha iyi. Ve muhtemelen okuyucu tarafından daha iyi bir inceleme ile sonuçlanacaktır.

Başka bir örnek - bir dergi için makale yazmak. İkisi de “eşyalarını” bilen iki yazar, tek fark “biri nasıl yazılacağını” bilen ve diğeri gibi cevaplardan yazmayı öğrendiği gibi.

Kimin makalesini hatırlayacaksın?


1

Fiziksel dünyadaki şeylere yapılan benzetmeler - bir tiyatro inşa etmek gibi - IMO'dur.

Yeniden düzenleme kodunun ... yeniden düzenleme kodu olduğunu açıklamanız gerekir. Yazılım, fiziksel analogların olmadığı şekilde dövülebilir. İşler gittikçe daha karmaşık hale geldikçe, kişi kodkazanın büyük ya da küçük parçalarını reaktör (ya da yeniden yapmak) zorlaştırmalı, böylece karmaşıklığı delirmeden arttırmaya devam edebilelim.

Neden refactor yapıyoruz? Çünkü hiçbir zaman yenilenmeyen kod bakımı ve değişimi sürdürmek için dakika başına daha fazla maliyetle sonuçlanır ve sonuçta sorunlu hale gelir.

Yeniden yapılanma hakkında çok ilginç olan şey, kod tabanını yinelememizdir, ancak en azından başlangıçta işlevsellik aynı kalır.


/ Tüm analojiler /? Kesinlikle katılmıyorum. Sadece daha yaratıcı olmalısın. Ayrıca OP'nin sorusuna cevap vermiyor.
Thomas Eding

@ThomasEding Yorumunuz için teşekkür ederiz. İkinci noktaya katılmıyorum: Aslında soruyu yanıtlıyorum. Ancak şu anda sadece sizin için bir düzenleme yapacağım.
Dan Rosenstark

0

Yeniden faktoring, bir şeyi temizlemek ve eşyalara 'kalmak' için yeni bir yer vermekle aynıdır

Kolay, basit ve çok zaman alabilir bir şey. Bazen X kişisini bile çok fazla şey bıraktığını ekliyorum ve temizlemem gerekiyor.


0

Ben burada hiç kimsenin bahsetmediği başka bir örnek düşündüm: yeniden yapılanma, matematikteki bir denklemi yeniden düzenlemeyle tamamen aynıdır (sanırım 'teknik olmayan kişi, sanırım' kapsamı dışında kalsa da).

Bir denklemi yeniden düzenlediğinizde , anlamı değiştirmeden, daha okunaklı ve daha kullanışlı hale getirmek için sadece 'eşyaları hareket ettirirsiniz' .


1
Öyleyse bir PHB veya müşteriysem (bu yeniden düzenleme çabası için kim para ödeyecek), neden umursayayım? Kod çalışıyor (benim açımdan)
Dan Pichelman

0

Onlara basit bir matematik denklemi verin. Örneğin:

Hangisi daha basit?

y = x + x

veya

y = 2x

Yeniden düzenleme, basit matematik denklemleri yerine, algoritmaları koyduğunuz durumlar dışında benzer bir kavramdır. Ana fikir, iki şeyi yapmanın iki yolu arasında geçiş yapabileceğinizdir; çünkü aynı sonucu vereceklerdir.

Yapılabilecek en basit yeniden yapılandırma yeniden adlandırılıyor.

doX() { ... }
{
   doX()
}

Şimdi aslında DoX olarak adlandırılan şeyleri istemiyoruz çünkü bunun ne anlama geldiğini bilmiyoruz, daha açıklayıcı olan ve onu kullandığımız her yerin yerine başka bir şeyle yeniden adlandırıyoruz.

doBusinessTransaction() { ... }
{
   doBusinessTransaction()
}

Bu, daha sonra bir sorun veya geliştirme olduğunda size para kazandıracaktır çünkü insanların uygulamanızı anlama ve çözme süresini kısaltır. Daha fazla tasarruf etmek için, hangi dili kullandığınıza bağlı olarak bu işlemi sizin için otomatik olarak yapan ücretsiz araçlar vardır. Bu araçlar ayrıca kısıtlayıcı olmayacak şekilde lisanslanmıştır ve doğrudan kullanırsanız onaylamaktan başka özel bir şey yapmanızı gerektirir.


1
Bu benzetmeyi gerçekten çok seviyorum çünkü herkes için anlaşılabilir ve kodun kendisiyle aynı.
Venkat D.

Teşekkürler, hatta blogumda
Arşimet Trajano

0

Bir fotoğraf çok şey söyler. Örneğin, yeniden düzenlemenin iki kullanım durumu vardır:

  • İşler ilk kez doğru şekilde yapılmazsa:

ilk seferinde doğru şeyler yapılmadığında yeniden yapılanma

  • İşler sıkıcı olduğunda:

işler sıkıcı olduğunda yeniden yapılanma

Referanslar


XKCD, rutin bir işin daha verimli olmasının, aksi takdirde yapabileceğinizden çok daha fazlasını yapmanız anlamına gelebileceği gerçeğini görmezden gelmeye değer. Bu yüzden, görevin ekstra performanslarından elde ettiğiniz değeri hesaba katmanız gerekir.
bdsl


0

Refactoring'de verilen bir cevabı düşünün ve bunu teknik olmayan bir kişiye açıklamayın. Yeniden düzenleme, aşağıdakiler hakkında bilmek zorunda olmadıkları teknik bir faaliyettir:

Tabii ki, birçok kişi kaliteye göre yönlendirildiğini ancak programa göre yönlendirildiğini söylüyor. Bu gibi durumlarda tartışmalı tavsiyelerimi veriyorum: Söyleme!

Yıkıcı? Sanmıyorum Yazılım geliştiricileri profesyoneldir. İşimiz, mümkün olduğunca hızlı bir şekilde etkili bir yazılım oluşturmaktır. … Bir program odaklı yönetici, işleri en hızlı şekilde yapmamı istiyor; nasıl yaptığım benim işim. En hızlı yol refactor etmektir; bu yüzden ben refactor.

(Yeniden düzenleme, Martin Fowler, 2000, sayfa 61)

Tabii ki bir ayını yeniden yapılanmaktan başka bir şey yapmadan geçirecekseniz bu işe yaramaz, ama bence bu genel olarak yine de kötü bir fikirdir ve şu anki veya bir sonraki görevinizi kolaylaştırmak için gereken ölçüde yeniden yönlendirmek için çok daha iyidir veya yeni çalıştığınız kodu temizlemek için.

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.