Programımı sıfırdan tamamen yeniden inşa edersem, daha iyi yaparsam nasıl hissedebilirim? [kapalı]


91

Önemli miktarda kodlama öğrendim, ancak her zaman bilimsel bir ortamda (bilgisayar bilimi değil), kimsenin bana doğru yönde rehberlik etmesi için tamamen kendi kendine öğretildi. Böylece, kodlama yolculuğum ... dağınık oldu. Ne zaman bir çeşit program oluştursam, sonunda, onu nasıl daha zarif, daha verimli ve daha esnek ve ilerleyişini kolaylaştıracak şekilde gerçekleştirdiğimi fark ettim. Bazı durumlarda, aslında geri döndüm ve işleri sıfırdan tekrar yaptım, ancak bu genellikle pratik olarak mümkün değildir. Şimdiye kadar programlarımın çoğu nispeten küçük olsa da, bir şey oluşturduğunuzda büyük programları tamamen yeniden yazmak oldukça tuhaf görünüyor.

Sadece merak ediyorum, bu normal bir deneyim mi? Olmazsa, bunun olmasını nasıl önlersiniz? Önceden bir şeyler planlamaya çalıştım, ancak bir kod yazmaya başlayana kadar her şeyi gerçekten öngöremiyorum.


87
normal, daha fazla program
Ewan



43
Programlamaya hoş geldiniz. Eğer eski koda bakıp "urgh" diye düşünmezseniz, öğrenmeyi bıraktığınız için endişelenmeye başlamalısınız.
Caltor

9
Dürüst olmak gerekirse, bu soruyu gördüğümde güldüm - çünkü kelimenin tam anlamıyla ben de konuştuğum her programcı, kendim de dahil olmak üzere sürekli olarak bu duyguyu yaşıyor. Yaptığınız son ürün gibi hissettiğiniz bir alana girmek istemenizin hiçbir kusuru yoktu - programlama seçmek yanlış alandı.
Zibbobz

Yanıtlar:


4

Bu duygu tamamen normal ve beklenen bir durumdur. Öğreniyorsun demektir. Neredeyse her yeni projeye başladığımda, bir yöne başlıyorum ve sonunda farklı bir şekilde tasarlıyordum.

Gerçek şeye başlamadan önce ilk önce bir prototip geliştirmek yaygın bir uygulamadır . Ayrıca eski kodu tekrar ziyaret etmek ve onu yeniden düzenlemek çok yaygındır . Tasarımınız modüler ise bu daha kolaydır - eski tasarımınızı tamamen boşaltmak zorunda kalmadan bir anda parçaları ve parçaları kolayca yeniden tasarlayabilirsiniz.

Bazı insanlar için, ilk sözde kodunu yazmak için yardımcı olur . Diğerleri , kodun ne yapacağını açıklayan yorumlar yazmaya başladığınızda , daha sonra genel yapı geldiğinde kodu yazmanın yararlı olacağını düşünüyorlar. Bu iki şey, tasarımınızı daha iyi planlamanıza yardımcı olacak ve yeniden yazma gerekliliğini önleyebilir.

Bir ekibin parçasıysanız, inceleme sürecine sahip olmak tasarım süreci için çok önemlidir. Birinin kodunuzu incelemesini sağlayın, böylece tasarımınızı nasıl geliştireceğinizi öğrenebilirsiniz.


100

Bu çok yaygın bir deneyim

Etkileşimde olduğum çoğu insan ve kendim de kendimi böyle hissediyorum. Bunun bir nedeni söyleyebileceğim şey, etki alanı ve kodunuzu yazarken kullandığınız araçlar hakkında daha fazla şey öğrenmenizdir;

Diğer bir sebep, kafanızda ideal temiz kod çözümü hakkında bir fikriniz olabilir ve daha sonra gerçek dünya ve onun dağınık kısıtlamaları yolunuza girer ve sizi kusursuz çalışma ortamına ve sizi tatmin etmeyecek hack'lere yazmaya zorlar.

"Herkesin suratına yumruklanana kadar bir planı var."

Bu konuda ne yapmalı

Bir dereceye kadar, kodunuzun asla mükemmel olmayacağını kabul etmeyi öğrenmeniz gerekecektir. Bana bu konuda yardımcı olan şeylerden biri, "Bir ay önce yazdığım koddan nefret edersem, öğrendiğim ve daha iyi bir programcı olduğum" anlamına geliyor.

Bu konuyu hafifletmenin bir yolu, sürekli çalışırken ve refactor yaparken potansiyel gelişmelere sürekli bakmaktır. Yeniden düzenleme ile yeni özellikler / sabitleme hataları arasında iyi bir denge kurduğunuzdan emin olun. Bu, büyük tasarım sorunlarına yardımcı olmaz, ancak genellikle sizi gurur duyabileceğiniz daha parlak bir kod tabanına bırakacaktır.


18
Bu cevaba ekleyeceğim tek şey kod yazarken TDD prensiplerini öğrenmek ve uygulamaktır. Bu testler, bir geliştirici olarak gelişmeye devam ederken ve mevcut kodda değişiklik yapmak istediğinizde yeniden düzenleme ve yeniden yazma için güvenli bir ortam sağlar.
David Arno

10
@DavidArno mevcut testlerle yeniden yapılanmanın amacı nedir? Bir sistemi yükseltmek ve daha önce yedekleme yapmak gibi ... 0 eğlenceli.
Džuris

3
@ Džuris, :) Doğru, eğer zorluklardan hoşlanıyorsanız, test yazmayın
David Arno

6
@ Džuris Paraşüt takan bir uçaktan atlamak gibi!
JollyJoker

3
@jamesqf - Bu TDD ve ünite testlerinin yaptıklarının yanlış bir özelliğidir - örneğin, modelinizin veya algoritmanızın doğru bir şekilde uygulandığını ve yeniden yakarken hiçbir şeyi kırmadığınızı söyleyebilirler. Size modelinizin gerçekten yararlı olduğunu söyleyemezler. Bilimsel bir ortamda, herhangi bir diğerinde olduğu gibi bu doğru.
Ant P,

46

Yeniden düzenlemeyi öğrenin - yavaş yavaş kod geliştirme sanatı . Hepimiz her zaman öğreniyoruz, bu yüzden yazdığınız kodun daha iyi bir şekilde yazılabileceğini anlamak çok yaygın.

Ancak, bu geliştirmeleri sıfırdan başlamak zorunda kalmadan uygulamak için mevcut kodu dönüştürebilirsiniz.


4
Bu uygulama aynı zamanda modüler olan ve daha kolay yeniden yapılandırılabilen kod yazmayı öğrenmenize yardımcı olacaktır. Dünyadaki bütün dersler bana bu alışkanlığı öğretmedi, eski büyük fonksiyonları yönetilebilir parçalara bölmek zorunda kaldım, bu yüzden sıfırdan tekrar yazmak zorunda kalmayacağım. Her yeni projede daha iyisini yapıyorum.
JKreft


9

Mükemmel statik gereksinimleriniz varsa ve bunları iyi anladıysanız ve ayrıntılı analiz için zamanınız varsa, işiniz bittiğinde mutlu olacağınız iyi bir tasarımla karşılaşabilirsiniz.

Bu keyifli durumda bile, daha iyi bir tasarım yapmanıza yardımcı olacak yeni dil özelliklerini öğrenebilirsiniz.

Ancak, genellikle, o kadar şanslı olmayacaksınız: gereksinimler yıldız biçiminden ve eksikliğinden daha az olacaktır ve bunları anladığınızı düşünmenize rağmen, geçersiz kabul ettiğiniz alanlar olduğu ortaya çıkmaktadır.

Ardından, kullanıcılar ilk teslimatlarınıza baktıkça gereksinimler değişir. O zaman kullanıcıların kontrol etmediği bir şey, örneğin vergi yasasını değiştirir.

Yapabileceğiniz tek şey, her şeyin değişeceğini varsayarak tasarım yapmak. Yapabildiğiniz zaman refactor, ancak zamanın ve bütçenin çoğu zaman son teslimatınızın şu anda bildiğiniz şeyi biliyor olsaydınız olacağı kadar zarif olmadığı anlamına geldiğini anlayın.

Zamanla, aldığınız gereksinimleri araştırmak ve tasarımınızın hangi kısımlarının değişimi emmek için esnekliğe ihtiyaç duyacağı konusunda bir burun elde etmek daha iyi olacaktır.

Sonunda, değişimin sabit olduğunu kabul edin ve "Daha iyisini yapabilirdim" diyen twinge'ı yok sayın. Hiç bir çözüm getirmediğiniz için mutlu ve gururlu olun.


Veya farklı bir yol belirtin: Gereksiz genel masraflar getirmeden, en baştan esneklik için tasarım yapmayı öğrenin . İdeal olarak, esneklik basitlikten kaynaklanır. O zaman tasarımınız değişen gereksinimlerin testini geçme şansına sahip.
cmaster

3

Programımı sıfırdan tamamen yeniden inşa edersem, daha iyi yaparsam nasıl hissedebilirim?

Yapabileceğiniz şey, "gerçek" projeye başlamadan önce basit bir prototip oluşturmak. Hızlı ve kirli. Ardından, bir kavramı kanıtlamak için bir prototip edindiğinizde, sistemi ve nasıl doğru bir şekilde yapılacağını öğrenirsiniz.

Ancak, eğer N yıl sonra bu koda geri dönüp, "ne dağınıklık" olduğunu düşünüyorsan şaşırmayın.


3
Ya da prototipi patronunuza gösterin, 'Harika olacak, yapacak' diyor. sizi başka bir projeye taşır ve prototipiniz üretime başlar.
RyanfaeScotland

2
Bu tavsiye çok yaygındır, bununla ilgili bir söz vardır. "Atmak için bir tane yap". Ve bu tavsiye o kadar kötüye kullanıldı: “Birini atmak için bir tane yaparsanız, muhtemelen iki tane atarsınız”.
Eric Lippert

2
@EricLippert Tecrübelerim ters yönden korkunçtu - atmak için bir tane yaparsak, kaçınılmaz olarak müşteriye gönderilir.
Jon

2
@Jon: Evet, bu durum, özellikle yönetim herhangi bir kodun olmasından dolayı "kullanıcı arayüzü işler gibi görünüyor" hatalarını yaptığı zaman olabilir. Bu, deneyimim her zaman, meslektaşlarımdan birinin "yanlış iki kez yapmak için yeterli zamanımız var, ancak bir kez doğru yapmak için yeterli zamanımız olmadığını" söylediğini söyledi. :-)
Eric Lippert

@EricLippert GUI'yi en son inşa etmenin ve GUI'yi prototip yapmamanın tam nedeni budur.)
BЈовић

3

Bu mantrayı hatırlayın:

Mükemmel, iyinin düşmanıdır .

Mükemmel bir çözüm her zaman değil ideal bir çözüm. İdeal çözüm işin az miktarda "yeterince iyi" statüsüne erişemez biridir.

  • İşlevsellik ve performans ile ilgili tüm gereklilikleri yerine getiriyor mu?
  • Mevcut mimaride düzeltemeyeceğiniz kritik hatalardan arınmış mı?
  • Gelecekte bu uygulamayı sürdürmek için ne kadar çalışacağınızı tahmin edin. Yeniden yazma çabası, kurtaracağı uzun vadeli çabanın ötesinde bir şey midir?
  • Yeni tasarımınızın aslında işleri daha da kötüleştirmesi olasılığı var mı?

Tüm bu sorulara evet cevabı verirseniz, yazılımınız "yeterince iyi" olur ve sıfırdan yazmak için iyi bir neden yoktur. Öğrendiğiniz tasarım derslerini bunun yerine bir sonraki projenize uygulayın.

Her programcının geçmişinde birkaç dağınık program olması normaldir. Bir yazılım geliştiricisi olarak kariyerim boyunca birkaç kez oldu, bazı kodlara baktım, "Bu salaklığı hangi salak yazdı?" Diye merak ettim, sürüm tarihini kontrol ettim ve birkaç yıl önce benim olduğumu fark ettim.


3

Önceden bir şeyler planlamaya çalıştım, ancak bir kod yazmaya başlayana kadar her şeyi gerçekten öngöremiyorum.

Mükemmel planlamanın size mükemmel bir yazılım tasarımı / mimarisi vereceğini düşünmek cazip gelse de, bunun kategorik olarak yanlış olduğu ortaya çıkıyor. Bununla ilgili iki büyük sorun var. Birincisi, "kağıt üzerinde" ve "kod" nadiren eşleşiyor ve bunun nedeni, aslında bunu yapmak yerine nasıl yapılması gerektiğini söylemek kolay olmasıdır . İkincisi, gereksinimlerdeki öngörülemeyen değişiklikler, başlangıçta neden olamadığı geliştirme sürecinde geç görünür hale gelir.

Çevik hareketi duydun mu? “Bir planı takip etmenin” aksine (“şeylerin yanı sıra” yerine) “değişime tepki vermeyi” değerlediğimiz bir düşünce tarzı. İşte manifesto (hızlı bir okuma). Ayrıca Big Design Up Front (BDUF) ve tuzakların ne olduğunu da okuyabilirsiniz.

Ne yazık ki, "Çevik" in kurumsal versiyonu bir grup sahtedir (sertifikalı scrum ustaları, "Agile" adına ağır işlem, scrum zorlama,% 100 kod kapsamını zorlama, vb.) Çevik'in bir süreç ve gümüş bir mermi olduğunu düşünün. Çevik manifestoyu okuyun, Bob Amca ve Martin Fowler gibi bu hareketi başlatan insanları dinleyin ve "şirket Çevik" in saçma versiyonuna emmeyin.

Özellikle, sadece bilimsel kod üzerinde TDD (Test Odaklı Geliştirme) yapmakla kurtulmak için elinizden geleni yapabilirsiniz ve yazılım projenizin oldukça iyi sonuçlanma olasılığı yüksektir. Bunun nedeni, başarılı bilimsel kodun çoğunlukla ikincil (ve bazen de rekabet eden) bir endişe olarak performans gösterdiği ultra kullanışlı arayüzlere sahip olması ve böylece daha "açgözlü" bir tasarımdan kurtulabilmenizdir. TDD, yazılımınızı ultra kullanışlı olmaya zorlar , çünkü aslında uygulamadan önce işlerin nasıl çağrılmasını istediğinizi (ideal olarak) yazarsınız . Aynı zamanda , basit, "giriş" / "çıkış" tarzında hızlıca çağrılabilecek küçük arayüzlere sahip küçük fonksiyonları zorlar ve sizi refaktör için iyi bir pozisyona getirir Gereksinimlerin değişmesi durumunda.

Bunun numpybaşarılı bir bilimsel bilgisayar yazılımı olduğuna katılıyorum . Arayüzleri küçük, süper kullanışlı ve her şey birlikte güzelce oynuyor. Referans kılavuzunun TDD'yi açıkça tavsiye ettiğini unutmayın numpy: https://docs.scipy.org/doc/numpy-1.15.1/reference/testing.html . Geçmişte TDD'yi SAR (Synthetic A Temperature Radar) görüntüleme yazılımı için kullandım: Ayrıca bunun belirli bir etki alanı için son derece iyi çalıştığını da söyleyebilirim.

Uyarı: TDD'nin tasarım kısmı, temel bir yeniden düzenleme işleminin (yazılımınızın aynı anda eşzamanlı olmanız gerektiğine karar vermek gibi) dağıtılmış bir sistemde olduğu gibi zor olacağı sistemlerde daha az işe yarar. Örneğin, milyonlarca eşzamanlı kullanıcınızın bulunduğu Facebook gibi bir şey tasarlamak zorundaysanız, TDD'yi (tasarımınızı sürdürebilmek için) yapmak bir hata olur ( ön tasarıma sahip olduktan sonra da kullanmaya devam etmek ve sadece ilk geliştirmeyi test etmek) "). Kod içine geçmeden önce uygulamanızın kaynaklarını ve yapısını düşünmeniz önemlidir . TDD sizi asla yüksek oranda kullanılabilir, dağıtılmış bir sisteme yönlendirmez.

Programımı sıfırdan tamamen yeniden inşa edersem, daha iyi yaparsam nasıl hissedebilirim?

Yukarıda verilenler göz önüne alındığında, mükemmel bir tasarımın elde edilmesinin gerçekten mümkün olmadığı açıkça görülmelidir, bu nedenle mükemmel bir tasarım peşinde koşmak aptal bir oyundur. Gerçekten sadece yakınlaşabilirsin. Eğer bile düşünmek sıfırdan yeniden tasarlamayı, muhtemelen orada hala kendilerini göstermedim gizli gereksinimleri. Ayrıca, yeniden yazma, en azından orijinal kodu geliştirmenin sürdüğü süreyi alır . Neredeyse kesinlikle daha kısa olmayacak, çünkü yeni tasarımın kendi başına öngörülemeyen sorunlarına sahip olması muhtemel , ayrıca eski sistemin tüm özelliklerini yeniden uygulamanız gerekiyor.

Dikkate alınması gereken bir başka şey, tasarımınızın yalnızca ihtiyaçlar değiştiğinde gerçekten önemli olduğudur .Hiçbir şeyin değişmemesi durumunda tasarımın ne kadar kötü olduğu önemli değildir (mevcut kullanım durumları için tamamen işlevsel olduğu varsayılmaktadır). 22.000 satır anahtarı deyimi olan bir temel çizgisi üzerinde çalıştım (işlev daha uzun sürdü). Berbat tasarım mıydı? Evet, berbattı. Düzeltdik mi? Hayır. Olduğu gibi iyi çalıştı ve sistemin bu kısmı hiçbir zaman gerçekten çökmelere veya hatalara neden olmadı. Projede bulunduğum iki yılda sadece bir kez dokunuldu ve bir başkası, siz onu tahmin ettiniz, anahtara başka bir dava ekledi. Ancak çok nadiren dokunulan bir şeyi düzeltmek için zaman ayırmaya değmez, öyle değil. Kusurlu tasarım olduğu gibi olsun ve kırılmadıysa (veya sürekli kırılmıyorsa) düzeltmeyin. Böylece belki olabilir iyi yapmak ... ama tekrar yazmaya değer mi? Ne kazanacaksın?

HTH.


2

Andreas Kammerloher tarafından verilen cevaba tamamen katılıyorum, ancak kimsenin henüz en iyi kodlama uygulamalarını öğrenmeyi ve uygulamayı önermediğine şaşırdım. Tabii ki bu gümüş bir mermi değil, ama açık odaklı bir yaklaşım kullanarak, tasarım desenleri, kodunuzun ne zaman koktuğunu anlamak ve dahası sizi daha iyi bir programcı yapacaktır. Kütüphanelerin, çerçevelerin vb. En iyi kullanımının ne olduğunu araştırın. Kesin olarak daha çok şey var, sadece yüzeyi çiziyorum.

Bu, eski kodunuza tam bir çöp olarak bakmayacağınız anlamına gelmez (aslında en eski programları bu bilgiden daha fazla çöp kullanmayacaksınız), ancak yazdığınız her yeni yazılım parçasıyla göreceksiniz. gelişirsiniz. Ayrıca, kodlamada en iyi uygulamaların sayısının zamanla arttığına dikkat edin, bazıları sadece değiştiğini ve böylece asla mükemmelliğe ulaşamayacağınızı unutmayın. Bunu kabul et ya da oldukça yolu.

Bir başka güzel şey de kod revizyonu yapmak. Yalnız çalıştığınızda köşeleri kesmek kolaydır. Kodunuzu inceleyen ikinci bir kişiniz varsa, bu en iyi uygulamaları nerede takip etmediğinizi gösterebileceklerdir. Bu şekilde daha iyi kod üreteceksiniz ve bir şey öğreneceksiniz.


1

Buradaki diğer mükemmel cevapları eklemek için, yararlı bulduğum bir şey de nereye gitmek istediğinizi bilmektir .

Büyük miktarda yeniden düzenlemenin kendi başına yapılması için nadiren verilmesi nadirdir. Ancak, kod tabanının her alanı üzerinde çalışırken, “radar altında” ilerledikçe sık sık daha küçük yeniden yapılandırma işlemleri yapabilirsiniz. Aklınızda bir hedef varsa, bu fırsatları adım adım doğru yönde ilerletmek için kullanabilirsiniz.

Uzun zaman alabilir, ancak adımların çoğu kodu iyileştirecek ve nihai sonuç buna değecektir.

Ayrıca, daha iyisini yapabileceğini hissetmek iyi bir işarettir ! İşinizin kalitesini önemsediğinizi ve eleştirel olarak değerlendirdiğinizi gösterir; bu yüzden muhtemelen öğreniyor ve gelişiyorsunuz. Bunların seni endişelendirmesine izin verme - ama yapmalarını bırakma!


1

Yanlışlıkla insanoğlunun en büyük zorluklarından birine (maceralara), insanla makine arasındaki köprüye rastladınız. İnsan ve fiziksel yapı arasındaki köprü, örneğin İnşaat Mühendisliği, yaklaşık 200 yıldır devam etmektedir.

Yazılım geliştirme gerçekten 90'lı yıllarda yalnızca ana akım haline geldiğinden, yaklaşık 30 yaşındadır. Bunun bir sosyal bilim kadar mühendislik disiplini olmadığını öğrendik ve daha yeni başladık.

Evet, TDD, Yeniden Düzenleme, İşlevsel Programlama, Havuz Şablonu, Olay Kaynağı, MV bir şey, Java Komut Dosyası (<- Bunu yapın, çılgınca), Model Bağlama, Sql, Konteynerler, Çevik, SQL (<- bunu yapın) bu güçlü).

Tek bir düzeltme yok. Uzmanlar bile hala pipet tutuyor.

Karşılama ve uyarılma, yalnız bir yer; ama kesinlikle büyüleyici.


1

Tahıl aleyhine biraz gideceğim. Bu inanılmaz derecede yaygındır , ancak kabul edilebilir değildir . Bunun anlamı, kodunuzu yazarken düzenlemenin iyi yollarını tanımadığınızdır. Duygu kodunuzu gelen basit olmamak .

Senin tecrüben de uzun zamandır benimki ama son zamanlarda (son birkaç yıldır), her şeyi çöpe atmam gerektiği gibi hissetmeme neden olan daha fazla kod üretiyorum . İşte kabaca ne yaptım:

  1. Herhangi bir kod bloğunun hangi varsayımlarda bulunduğunu açıkça belirtiniz. Karşılaşmadıklarında hata at. Yazılımın geri kalanının ne yaptığıyla ilgili detaylara bağlı olmadan, bunu yalıtılmış olarak düşünün . (Yazılımın geri kalanının ne yaptığı, hangi varsayımları uyguladığınızı ve hangi davaları desteklediğinizi kullanır, ancak bir varsayım ihlal edildiğinde hata atıp atmamayı etkilemez.)
  2. Aşağıdaki kurallara, kalıplara ve uygulamalara iyi kod üreteceğine inanmayı bırakın. Açık ve net olmayan zihniyet ve uygulamaları atın. Bu çok büyüktü. OO ve TDD, genellikle kod yazarken uymanız gereken soyut ilkeler kümesi olarak pratik düşüncelere dayanmayan bir şekilde öğretilir. Ancak bu aslında iyi kod geliştirmek için tamamen yararsızdır. Eğer OO veya TDD kullanıyorsanız, sahip olduğunuz problemlerin çözümünde kullanılmalıdır . Başka bir deyişle, yalnızca bir soruna baktığınızda ve "Tamam, bu tam anlamlıdır ve iyi bir çözüm olarak son derece açıktır" derken kullanılmalıdırlar. Önce değil.
  3. Kod yazarken iki soruya odaklanın:
    • Özellikleri ve kütüphaneleri kullanmaları için tasarlandıkları şekilde kullanıyor muyum? Bu, çözmesi amaçlanan problemler için veya en azından benzer problemler için kullanmayı içerir.
    • Öyle mi basit ? İş arkadaşlarım ve ben daha sonra mantığı kolayca takip edebilecek miyiz? Kodda hemen belli olmayan şeyler var mı?

Kodum artık daha "prosedürel", demek istediğim , hangi veri yapılarını kullanmaktan ziyade hangi eylemleri gerçekleştirdiği tarafından organize edilmesi . Bağımsız işlevlerin anında değiştirilemediği dillerde nesneler kullanıyorum (C # ve Java anında işlevleri değiştiremiyor, Python olabilir). Artık daha fazla fayda sağlayacak fonksiyonlar oluşturma eğilimim var , bu sadece can sıkıcı bir kazan tabağını sürükledi, böylece kodumun mantığını okuyabilirim. (Örneğin, bir listedeki tüm öğelerin kombinasyonlarını işlemeye ihtiyaç duyduğumda, indeksi dönen bir uzatma yöntemine dönüştürdümTupleBöylece, orijinal işlev bu uygulama ayrıntılarıyla karıştırılmaz.) Bir işlevi almak için başka bir nesneye ulaşmak yerine, şimdi işlevlere parametre olarak çok daha fazla şey iletiyorum. (Arayan kişi onu yerine getirir veya oluşturur ve içeri aktarır.) Şimdi , yalnızca bir yöntemin mantığını izlemeyi kolaylaştıran koda bakmaktan açık olmayan şeyleri açıklayan daha fazla yorum bırakıyorum . Sadece az önce yaptığım bir şeyin mantığıyla ilgilendiğim sınırlı durumlarda testler yazıyorum ve alay kullanmaktan kaçınıyorum. (İzole edilmiş mantık parçaları üzerinde daha fazla girdi / çıktı testi yapıyorum.) Sonuç mükemmel olmayan kod , ancak aslında tamam görünüyorhatta 2 veya 3 yıl sonra. Değişime oldukça iyi yanıt veren kod; tüm sistemler dağılmadan, küçük şeyler eklenebilir, çıkarılabilir veya değiştirilebilir.

Bir dereceye kadar, işlerin karışık olduğu bir dönemden geçmek zorundasınız , böylelikle kaçmak için deneyiminiz olabilir. Fakat işler hala o kadar karışıksa, hepsini bir kenara atmak ve baştan başlamak istersen, bir şeyler yanlış olur; öğrenmiyorsun


0

Zamanınızın sınırlı olduğunu hatırlayarak. Ve gelecekteki zamanın da sınırlı. İster iş ister okul veya kişisel projeler için, çalışma koduna gelince , kendinize "bu sınırlı ve değerli zamanımı en iyi şekilde mi kullanıyorsunuz?" Diye sormalısınız. Ya da belki, "bu sınırlı zamanımın en sorumlu kullanımı" mı?

Bazen cevap kesin olarak evet olur . Genellikle değil. Bazen çitin üzerinde olur ve kendi takdirini kullanmak zorunda kalırsın. Bazen sadece yaparak öğreneceğiniz şeyler nedeniyle zamanınızı iyi kullanır.

Hem iş hem de kişisel olarak bir limandan / yeniden yazmadan faydalanacak birçok projem var. Yapacak başka işlerim de var.


0

Öğrenmenin tamamen normal bir parçasıdır. İlerledikçe hataları fark edersiniz.

İyileşmenin yolu budur ve kaçınmanız gereken bir şey değildir.


0

Yeniden yazma dürtüsünün genellikle verimsiz olduğunu bilmek için kendinize bir deneyim verebilirsiniz. Orta karmaşıklıkta eski, kıllı, inelegant açık kaynaklı bir proje bulun. Sıfırdan yeniden yazmaya çalışın ve nasıl yaptığınızı görün.

  • Sıfırdan tasarımınız, umduğunuz kadar zarif mi oldu?
  • Çözümün gerçekten aynı soruna mı bağlı? Hangi özellikleri dışarıda bıraktınız? Hangi uç vakaları kaçırdınız?
  • Özgün projede hangi zor kazanılmış dersleri zarafet arayışı içinde sildiniz?
  • Bu eksik parçaları tekrar tasarımınıza ekledikten sonra, onlarsız olduğu kadar temiz mi?

Sonunda, içgüdüleriniz "bu sistemi daha iyi yeniden yazabilirim" düşüncesinden "bu sistemin zalimliliğinin hemen görülmeyen bazı karmaşıklıkların göstergesi olabileceğini" düşünmekten geçecektir.

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.