Başka birinin yeniden düzenleme sorunu var mı? [kapalı]


17

Kodun önemli bir miktarını yazdıktan sonra mümkün olan en iyi şekilde yapmamışım gibi bu endişeli duyguyu alıyorum ve sürekli olarak projede çok fazla zaman harcadığım ve çok fazla zaman harcadığım ya da asla bazen yapılır. Bu hiç kimseye oldu mu ve bununla nasıl başa çıkıyorsunuz?


16
Daha sıkı son tarihlere ihtiyacınız var :)

Burada kendiniz için yazdığınız koddan (hobi projeleri) veya işinizin bir parçası olarak yazdığınız koddan mı bahsediyorsunuz?
Carson63000


1
Hiç şans eseri hayatın herhangi bir yerinde biraz anal misin? Kendime izin verirsem korkunç bir şekilde OKB ve mükemmel olabileceğimi biliyorum ...
Humphrey Bogart

1
Mükemmel, yeterince iyinin düşmanıdır. İyi bir iş yap. İşe yaraması için halledin. Buggy veya size performans sorunları verdiğine dair ampirik kanıt gösteremediğiniz sürece tekrar ziyaret etmeyin.
Blrfl

Yanıtlar:


18

Bu anları bana geldiklerinde seviyorum.

Nedeni: Eğer işime tekrar bakmaz ve geliştirici olarak ilerlemeyeceğimden daha iyi yapabileceğim bir şey olduğunu düşünürsem. Bu nedenle, bu aydınlanma anları meydana geldiğinde, onları kucaklayın ve öğrendiklerinizi not edin. Mevcut proje için zaman çizelgenizi göz önünde bulundurun ve mümkünse kodu yeniden düzenleyin, mümkünse dersi alın ve gelecekteki projeler için uygulamalarda kullanın.

Her iki durumda da, kendi hatalarınızdan öğrenmek harika bir şey!


8

Bu etkinliği sınırlamak ve daha üretken hale getirmek için birkaç kural:

  • zaman kutusunu ayarlayın, örneğin zamanlayıcıyı 25 dakikaya ayarlayın
  • sadece iyi bir test kapsamınız olduğunda yapın.
  • refactoring'inizi sonraki birkaç özelliğin geliştirilmesi için faydalı hale getirmeye çalışın

1
Sana katılıyorum, ama (3) ... sonraki birkaç özellik hakkında sadece bu özelliklerin bir sonraki sürüme dahil edilmesi gerektiğinden eminsem düşünürdüm, çünkü eğer değilse, YAGNI'ye (You Ain ' t İhtiyacım olacak). Martin Fowler ve Kent Beck'in "Yeniden Düzenleme: Mevcut Kod Tasarımını İyileştirme" adlı kitabını okumanızı öneriyorum.
Oscar Mederos

1
@Oscar: kabul etti. Demek istediğim kendi iyiliği için yeniden düzenlemekten kaçınmak ve YAGNI yaratmaktı.
azheglov

7

Her zaman yeniden düzenleme yapabileceğiniz gibi görünüyor, değil mi? Yeniden düzenleme işlemini yalnızca diğer sorunları çözmeye çalışırken sınırlamaya çalışıyorum. Örneğin, bir performans sorununuz olduğunda refactor ve çözmenize yardımcı olan refactoring - yeni işlevsellik eklemeniz gerektiğinde refactor ve refactoring bunu çözmenize yardımcı olacaktır


3

Dürüst olmak gerekirse, büyük kod yığınlarını açıp her şeyin mükemmel olduğunu ve herhangi bir yeniden düzenleme gerektirmediğini düşünürseniz daha fazla endişelenirim ...

Daha genç ve deneyimsiz olduğumda, programlama yeteneğim konusunda çok kibirliydim ve her zaman gerçekten iyi tasarlamanın ve planlamanın mümkün olduğunu hayal etme eğilimindeydim - ve uygulama aşamasına geldiğimde onu patlatacağım ve ' hepsi mükemmel olacak.

Gerçeklik tam tersidir. Hatta bazıları kodlamaya başlar başlamaz Bakım modunda olmanız gerektiğini söyler. Buradaki fikir, SDLC'nin "Uygulama" aşamasının gerçekten böyle olmadığıdır, çünkü asla hata düzeltmeyi veya yeniden düzenleme yapmayı bir kenara bırakmamalı ve ürettiğiniz kodun "taze" ve mükemmel olduğunu iddia etmemelisiniz.

Bütün bunlar, bunu herhalde IS üstlenmeden hakkında çok obsesif almak mümkün. Henüz görmedim. Daha fazla deneyimim varsa, daha fazla yazılım ekibinin sıkı son teslim tarihlerine çalışmayı ve teknik borca ​​girmeyi reddetmesi daha iyi bir şey olacağını düşünüyorum. Sonuçta, yeniden düzenlemenin gerçek dünyada bir kenara bırakılmasının en yaygın nedeni budur.


2

Sadece duygu veya kod kokusuna bağlı olmamayı öneririm.

Kodda neyin yanlış olduğunu ve çözümlerin ne olduğunu açıkça numaralandırın. Cidden, not edin, çünkü refactorunuzun buna karşı ne kadar etkili olduğunu gözden geçirmek isteyeceksiniz.

Refactoru ulaşılabilir parçalara ayırmanın yollarını belirleyin ve bunlara öncelik verin. Disiplinin sadece her bir parçanın kapsamına odaklanmasını sağlayın ve görevinizi zayıflatabilecek teğetlerden kaçının.

Ayrıca, devam etmeden önce mevcut koda karşı hangi birim testlerini yazabileceğinizi belirleyin. Zaten kapsamlı testler varsa, bu harika bir şey. Birim testleri eksikliği, bazılarını yapmak için harika bir fırsattır.


1

Bu tuzağa düştüğümden şüphe yok ama gelecekteki destek / hata ayıklama için bazı yeniden düzenleme önemlidir.

Büyük bir kod parçası yazarken, şu anda yazılmakta olan yönteme kod satırlarından geçmek çok kolay olur. Büyük bir kod parçasını tamamladığımda bir todo: kod inceleme yorumu yerleştirdim. Sonra birkaç gün sonra buna göre kod incelemesi ve refactor yapacağım. Birkaç gün sonra okumakta güçlük çekersem, birkaç ay hatta yıllar içinde ne olacak.


1

Bir dili veya teknolojiyi ilk öğrendiğimde bu tuzağa düşüyorum. Örneğin, java'yı ilk öğrendiğinizde, bunun doğru yol olduğunu düşünerek bir sunucu uygulamasıyla bir web uygulaması yazdığınızı hayal edin. Sonra jsp olduğunu fark edersiniz ve oh bunun daha doğru olduğunu düşünürsünüz. Sonra bir kez Struts ve belki bazı EJB şeyler bulduktan sonra, bahar (xml tabanlı) bulduktan sonra serin @MVC ek açıklamalarını bulursunuz, daha sonra çok ayrıntılı bulursunuz ve şımarıksınız groovy / grails ve scala / lift arasında seçim! Bu, kişisel projeler için mükemmel bir şeydir, çünkü amaç genellikle öğrenmek ve bazı son tarihlere ulaşmak zorunda değildir.

Eskiden de uber-refactorer olurdum. Ama daha fazla deneyim kazandıkça, yeniden düzenleyeceğim şeyler konusunda daha seçici hale geliyorum. Bir şirketten ayrıldığınızda kodu yanınıza almazsınız ve genellikle diğer mühendisler kodu düzeltebileceğinizden neredeyse daha hızlı yıkabilirler.


1

Takip ettiğim başparmak kuralı şudur: O zaman olabildiğince optimize edilene kadar refactor ve sonra durumlar değişmedikçe tekrar refactor etmiyorum veya yeni ve daha iyi bir yol hakkında ilham alırsam daha nadiren bir şeyler yapın (örneğin yeni bir dil özelliği kullanarak).

Örneğin, bir zamanlar mevcut bir uygulama için yeni bir kod modülü yazmak zorunda kaldım. Belli bir şekilde yazdım ve ertesi gün daha fazla düşündüm ve yeniden düzenleyebileceğimi ve daha soyut hale getirebileceğimi düşündüm, çünkü diğer kullanımlar için yolda uzatılması gerektiğinden oldukça emindik. Bu yüzden kodu yeniden düzenledim. Daha sonra, biraz fazla genel olduğuna karar verdim ve aynı işlevselliği elde etmek için Generics (C #) kullanarak temelde aynı şeyi yapan bazı sınıfları ve arayüzleri birleştirdim. Bu noktada muhtemelen coulddaha da iyi hale getirmek için daha fazla refactor, ancak "yeterince iyi" - kod iyi yazılmış, uygun tasarım desenlerini ve mühendislik kavramlarını takip ediyor ve genişletilebilir. Ben sadece gereksinimleri yeniden kodu yeniden değerlendirmek için zorladı, ya da kodu daha net ve / veya daha okunabilir hale getirebilir bir dil özelliği varsa tekrar refactor olur.

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.