Kod yazdıktan sonra neden bir süre sonra “daha ​​iyi yazardım” diye hissediyorum? [kapalı]


12

2 yıldan fazla süredir C ++ 'daki hobi projem üzerinde çalışıyorum. Ne zaman bir modül / fonksiyon yazsam, onu çok düşünerek kodluyorum. Şimdi soruna bakın,

do {
  --> write the code in module 'X' and test it
  --> ... forget for sometime ...
  --> revisit the same piece of code (due to some requirement)
  --> feel that "This isn't written nicely; could have been better"
} while(true);

İşte 'X'herhangi bir modül (küçük / büyük / orta olsun). Bunu gözlemliyorum, kodlama sırasında ne kadar çaba harcıyorsam da bu oluyor. Çoğunlukla kendimi çalışan bir kod görmekten kaçınıyorum. :)

Bu birçok insan için ortak bir duygu mu? Bu dile özgü fenomenler mi? (Çünkü C ++ ile aynı şeyi farklı şekillerde yazabilirsiniz).

Gerçek bir üretim kodu için bu yeniden faktoring hissini alırsam, çalışma kodunu değiştirmenin bana fazla övgü kazanmayacağı, ancak başarısız olması durumunda sorunları davet edebileceği durumlarda ne yapmalıyım.


14
Eğer eski kodumla hiç sorun bulamazsam daha fazla endişe duyarım. Bu becerilerinizin geliştiğini gösterir.
Darren Young

1
Eğer senin eski kodu bakıp yoksa değil "Bunu neden yapmadıklarını lanetlemek, düşünmek bu kodu yazmış beri sonra dönüş yolu ?!", o zaman yeterince öğrenmiş değil.
sbi

Yanıtlar:


17

Bu fenomen çok yaygındır ve programcılara özgü değildir. Entelektüel bir görevi yerine getirdiğinizde, biraz mesafe aldıktan sonra , iyileştirebileceğiniz düzinelerce yeri fark edeceksiniz . Hiç bir tez yazdı herhangi bilge (WO-) adamı sor, onlar sana bir şey söyleyeyim: "Bunun bakma sen edecek ilk bakışta bir hata bulmak."

Yeniden düzenleme döngüsünü önlemek için temel olarak iki şey vardır:

  1. Yazarken ve tasarlarken, mümkün olduğunca erken bir perspektif elde etmeye çalışın. Bir meslektaşınızın tasarımınıza / kodunuza bakmasını sağlayın. Bir haftasonundan sonra tekrar bak. Sarhoş veya yüksek olduğunda bakın (ama dikkat: ayık olana kadar hiçbir şeyi değiştirmeyin ).
  2. Kusurlu yaşayın. Sadece güzel değilse, ancak iyi çalışıyorsa (okuyun: genişletilebilirlik ve okunabilirlik de dahil olmak üzere tüm gereksinimleri karşılamada iyi bir iş çıkarır), mükemmel iş için çabalamadan, yaptığınız iyi işten memnun kalmanıza izin verin.


3

Sürekli yeniden düzenleme gitmek için bir yoldur. Çalışma kodunun değiştirilmesi sorunlara neden olmaz ve düzgün bir şekilde yapılırsa teşvik edilmelidir. Kodunuz tamamen birim olarak test edilmişse, kodunuzu güvenle yeniden çarpanlarına ayırabilirsiniz.

Gerçek dünya üretim kodu hakkında tahmin edebileceğiniz tek şey, WILL değişikliği. Nasıl değişeceğini, yarın hangi yeni teknikleri öğreneceğinizi tahmin etmeye çalışmayın. Kısacası, kodunuzu "mükemmel" hale getirmeye çalışmayın. Mevcut bilginizle olabildiğince iyi hale getirin. Ayrıca, kodunuzun kapsamlı bir şekilde test edildiğinden ve genişletilebilir olduğundan emin olun.

Zamanımın% 20 -% 30'unu mevcut kodu yeniden düzenleyerek geçiriyorum. Ben bir teknoloji şirketi çalışmak ve "yönetim" mevcut kod değiştirme hakkında hiç şikayet etmedi. Ancak bunun bazı şirketlerde bir sorun olabileceğinin farkındayım. Martin Fowler'in yeniden düzenleme kitabında bir bölümü bile var .

Özetle, bu benim deneyimimde yaygın bir duygu, ama olumsuz bir duygu değil.


2

Her modül / işlev bir öncelikler dünyasında doğar ve gelişir. Dış dünya hedeflerine hizmet etmeye yeterli olduğunda, genellikle durgunluk kalır. Tüm sonuçta daha yüksek amaca hizmet için iskele. Evet, kod konusunda takıntılı olmalıyız ve evet bu da durgunluğumuza neden olabilir. Belki de odağınızı kodun kendisinden biraz uzaklaştırmanız ve kodun üreticisi olan içinizde olan süreçler üzerinde daha fazla düşünmeniz iyi bir hareket olacaktır.


2

Bu birçok insan için ortak bir duygu mu? Bu dile özgü fenomenler mi?

Bu, bilginizi ve görüşlerinizi genişlettiğiniz anlamına gelir.

Daha yüksek önceliğe sahip hiçbir göreviniz yoksa, her zaman geri dönüp kodunuzu geliştirmelisiniz.


“... geri dön ve kodunu geliştir.” - bunu yapman için sana kim para ödeyecek? Kodunuz çalıştıktan sonra devam edin. Bir programcı olarak öğrenip büyüdükçe, DAİMA bir şeyler yapmanın daha iyi yollarını bulacak ve daha önceki çabalarınızın geliştirilebileceğini hissedeceksiniz. Bununla ilgili her şeyi yapma dürtüsüne karşı koy - geri dönüp eski kodunu geliştirmek çoğunlukla büyük bir zaman kaybıdır.
Dawood ibn Kareem

1
@David Wallace - Hiç kimse eski koda geri dönmek zorunda kalmasaydı, bu konuda böyle bir karışıklık yapmazdık.
JeffO

1
"Kodunuz çalıştığında, devam edin" - kod çalıştığından üretim kodunda ne tür hatalar gördüğümü
düşünmezsiniz

@ Jeff O - bu çok doğru. Eski kodu koruyacaksam, kodumu veya başka birinin kodunu düzeltmeyi düşünürüm. Ancak, arkasında bu kodun korunmasını gerektiren bazı dolarları olan bir proje yoksa, onu düzenlemek için harcanan zamanı haklı çıkarmanın bir yolu yoktur. Tabii ki buggy olmadıkça.
Dawood ibn Kareem

@VJovic - üretimde hatalar varsa, bunun nedeni kodun DIDN'T çalışmasıdır. Ben OP doğru çalışan kod hakkında konuşuyordu düşünüyorum, ama çirkin.
Dawood ibn Kareem

2

Her zaman bir kişinin önceki sınıftaki becerilerini güçlendirmek için bir matematik dersi aldığını düşünüyorum. Cebir II'yi alana kadar Cebir zor görünüyordu; Sonra Cebir'de öğrendiğiniz beceriler faydalı oldu. Programlama, yazma, ahşap işleme veya başka bir şey için de aynı şey geçerlidir.

Bir programlama dersi alırken, anahtarları öğrenene kadar çok şey yapan If-then-else hakkında bilgi edindiniz. Yeni bir şey öğrenirken, bu ilerlemeden geçiyorsunuz, herkes biliyor.


2

Geçmişte kendim tarafından yazılan çoğu kodu okuduğumda aynı duyguyu yaşıyorum. Bu iyi bir şeydir, bilgi ve kodlama stilinizin yıllar içinde geliştiği anlamına gelir.

Çalışan üretim kodunu değiştirmek için, açık hataları tespit etmedikçe bu büyük bir hayır. Sadece zaman kaybı olabileceği için değil, daha da önemlisi, yaratılan yazılım hatalarının büyük çoğunluğu yayımlanan programlarda değişiklik yapıldığında ortaya çıkan türdendir. İstatistiksel olarak muhtemelen öngörülemeyen hatalar getireceksiniz. Eğer kırık değilse, tamir etmeyin.


1

Bir uygulama geliştirmek, onu geliştirmek ve daha iyi hale getirmek anlamına gelir; bu sürekli bir süreçtir, bu nedenle programlama yaparken daha fazla deneyim ve bilgi kazanırsınız. Aynı zamanda gelişmekte olduğunuz anlamına gelir, bu nedenle eski kodunuza tekrar baktığınızda geliştirilebileceğini öğrenebilirsiniz.

Bu duyguya sahip değilseniz, bu iki şeyden biri anlamına gelir:

  1. Hala aynı beceri seviyesindesin.
  2. Kodunuz zaten mükemmel (olası değil).
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.