it-swarm.asia

Kötü kod yazmak zorunda kaldım. Yüzümü nasıl kurtarırım?

Ben sadece küçük bir geliştiriciyim ama işim beni gerçekten korkunç PHP koduyla (en kötü PHP kod gördüğünüz; genellikle iki kez kodu düzeltin.Yanırım genellikle hataları düzeltmeye ve yeni özellikler eklemek için kod tabanıyla savaşmaya çalışıyorum.Bir zaman en kısa sürede kirli hack'leri içermeyen şeyleri ASAP ile çalışmam gerekiyor.

Ürün daha önce açık kaynak kodluydu ve gelecekte açık kaynak kodlu olabileceğinden endişeliyim. Birisi (özellikle potansiyel işverenler) bazı değişiklik kümelerinin yanında adımı bulabilirse utanırdım. İyi adımı korumak için ne yapabilirim?

Bunun alakalı olup olmadığından emin değilim ama ne patronum ne de meslektaşlarım kodun kötü olduğunu itiraf etmek istemeyeceğim, ama bunun için onları suçlayabileceğimden emin değilim - çoğu için bu onların ilk iş.

70
Ashamed One

Roma bir günde inşa edilmedi, ancak iyi bir 'İzci' olabilirsiniz. Koda her dokunduğunuzda, kodu eskisinden daha iyi bırakın. Mantıklı fonksiyon isimlerini, iyi kodlama standartlarını kullanmak ve çalışırken iyi yorumlar koymak olağanüstü zaman almaz.

Bence tehlike ya hep ya hiç. Zarif kod yazmak istediğiniz zamanı harcayamayacağınız için, tamamen vazgeçmeniz ve çöp yazmak zorunda olduğunuz anlamına gelmez.

133
Amy Anuszewski

Yorumlardan S.Lott ile anlaşın * (bir kez için :) Kimse sizi kötü kod yazmaya zorlamıyor. Mesele şu ki, junior dev. sık sık (bu site bunun için de suçlamaktır) en iyi uygulamalarda kaybolmak, "güzel kod", ... ne demek istersen ... ve fazla bir şey yapmıyorlar; ya da hallederler ama çok zaman kaybederler. Onlara kötü kod yazmalarını söyleyen (ki bu da işe yarayan kod), "bundan" geçer, sadece bir şey teslim etmelerini sağlar. Zaman geçtikçe (artık artık yok) genç bir dev çok hızlı bir şekilde hızlı ve kirli bir çözüm bulur, ancak geri kalan süreyi iyileştirerek geçirir. Ve zaman geçtikçe daha fazla bilgi edinirsiniz ve bir noktada aslında iyi kod olan hızlı ve kirli çözümler sunmaya başlarsınız.

Ancak, yolunuza gidip en baştan mükemmel kod yazmayı denediyseniz, büyük olasılıkla çok zaman harcarsınız ve neredeyse hiçbir şey yapmazdınız.

Yani ... kötü kod yaz, ... birçoğu ... zar zor çalışan kod ve sonra ITERATE. Her yineleme biraz daha iyi!

Kimse ilk kez mükemmel çözümü yazmadı.

*, kısa olsaydı bir yorum olurdu.

59
Rook

Kod yorumları burada arkadaşınızdır.

Basınç nedeniyle ucuz bir kesmek yazmak istediğinizi hissettiğinizde, sadece "Bu kod zaman kısıtlamaları nedeniyle X yapar. İdeal olarak, bunun yerine Y yaparım.

O zaman potansiyel işverenler görürse, iyi kod yazmayı tercih ettiğinizi fark edeceklerdir, ancak kodlama tarzınızı iş ihtiyaçlarına göre ayarlamak için istekli olursunuz. Çoğu işveren her ikisini de iyi şeyler olarak görecektir.

40
Bob Murphy

Sizi nasıl zorladıklarına bağlıdır.

Deneyimlerime göre, iki olasılık var:

Sıkı bir program, eski kod vb. Tarafından zorlandığınızı hissedersiniz.

Bu durumda, diğer cevapların çoğunun söylediği gibi, 'serinlik için optimize etmek' size kalmış. Kod tabanını MVC'ye yeniden yazmak için zamanınız olmayabilir, ancak ilk adım olarak, örneğin, SQL'inizi elle tutkallamayı durdurabilir ve bunun yerine execute_sql($query, $params), vb. Gibi soyutlamaların temelini oluşturan Nice fetch_customer($filter_params) yazabilirsiniz. en iyi uygulamalar nihayetinde patronunuzun daha erken bir ürün almasıdır, bu yüzden geleceğe ne kadar zaman ayıracağına dair bir çatışma vardır.

Doğru bağlamı ayarladığınızda ('6 ay içinde, fazladan zaman almadan, monolitik kodu MVC'ye yeniden düzenledim'), kodda adınızı bırakmalı ve bir inme kurbanını öğreten bir terapist gibi gurur duymaya çalışmalısınız. tekrar tek kelime söyle.

Açıkça uygun olmadığını düşündüğünüz bir şekilde uygulamanız istenir

Görünümü modelden ayırmaya çalışmak, incelemede hayatta kalmaz, çünkü 'çok karmaşık, neden sadece düz sql sorguları yapmıyorsunuz?'. Sizin execute_sql konserve edilir çünkü 'disipline sahip bir kodlayıcı buna ihtiyaç duymaz'.

Bu dava çok kötü. Deneyimlerime göre, genellikle başarıları için değil, politik nedenlerle terfi eden mikro yönetim ve takım liderleri ile birlikte gelir. Asıl sorun, kontrol edemediğiniz bir şeyden (kod) sorumlu olmanızdır (kendi yollarıyla yapmanız gerekir). En iyi çözüm, temel nedeni (yani, bir homurdanma olarak muamele görmeniz) çözmek olacaktır. İkinci en iyi (ve benim deneyimime göre, olağan) çözüm bırakmaktır.

Yukarıdakiler, bu senaryoda, adınızın zaten yayınlanması muhtemel değildir, çünkü takım lideri tüm başarılar için krediyi alır.

10
keppla

Patronunuzun hızlı bir şey teslim etmenizi talep ettiğinden eminim, ancak kasten kötü yapmak için ekstra çaba sarf etmediğinizden değil. Bu, gerçekten kötü kod ve biraz daha az kötü kod arasında bir seçiminiz olduğunda ve her iki seçeneğin de uygulanması aynı derecede uzun süreceği anlamına gelir, biraz daha az kötü seçeneği tercih edersiniz. Bu kısa vadeli bir çözümdür ve hiç çaba gerektirmez.

Uzun vadede patronunuzla konuşun. Buraya 15 dakika yatırım yapmanın burada saatlerce nasıl tasarruf edebileceğini açıklayın. İkna edici örneklere sahip olduğunuzdan emin olun - "bunu yapsaydım ve burada, umarım gelecek yıl başka bir şey yapabileceğim" şeklinde değil, "bak, burada bu şeyi yaptım ve çünkü bu yüzden, problemi orada bulmam üç saatimi aldı; eğer bunu bu şekilde yapsaydım, hata hemen belli olurdu "dedi. Burada bir uyarı: zarif ve sürdürülebilir kod çok daha iyi ve daha verimli hissettirirken, bazen değil. Özensiz bir hızlı düzeltmenin mükemmel bir şekilde haklı görüldüğü durumlar vardır: bazen tek kullanımlık kod yazıyorsunuz, bazen eski bir önemsiz parçayı canlı tutuyorsunuz, gerçek şeyi bekliyorsunuz; bazen, uygun bir çözümün yararı çabayı haklı çıkarmaz (para-bilge, ki patronun ilgilendiği tek şey).

Her şey başarısız olursa, gidip başka bir iş bulun.

8
tdammers

Kimse sizi kötü kod yazmaya zorlamaz. Bu durumu tersine çevirebilir ve olumlu yapabilirsiniz. Politikalar ve prosedürler için öncü değişiklik. Ve her zaman "evet" erkek/kadın olamazsınız. Gün bitmeden işlevsellik x ihtiyaç duyduklarını söylüyorlarsa, onlara bunun mümkün olmadığını söyleyin, ancak neden gerçekten olmadığına dair gerekçeler verin. Bir sorun olduğunda, çözümler sunun. Sadece kör bir göz değil, daha kötüsü de ...

Geliştirme mağazanız, kesin olarak son tarihlere sahip olan ilk kişi değil, yine de iyi tasarlanmış kodu koruma arzusuna sahip.

3
user29981

Her şirketin, kapsamlı dokümantasyon ve birim testleri ile makul bir bütçe ve zaman aralığında ürünleri pazara sunma ile parlak kod yazma arasında bir denge bulması gerekir.

Dünyadaki en iyi kod, piyasaya sürülmeden önce eski olup olmadığı önemli değildir.

Pragmatik olmak bu dengeyi bulmaya çalışmakla ilgilidir. Özelliklerin hızlı bir şekilde düzeltilmesi şu anda ticari olarak gerekli olabilir, bu her zaman olacağı anlamına gelmez.

Bu dengeyi doğru bir şekilde elde etmek için çok fazla deneyim gerekiyor (Çoğu kodlayıcıdan daha fazla). Her iki uçtan birine gitmek çok kolaydır. Orta yol bulmak daha zordur.

Patronunun haklı olduğunu söylemiyorum. Bir kodlayıcı olarak, ticari olarak uygun olmayan güzel kodlar yaratmaya çalışmak için bir cazibe vardır. Bu cazibeye dikkat etmek, bu saldırıların bazılarının çok kötü olmadığını anlamanıza yardımcı olabilir.

Yeterli süre sonunda kodların çoğu, genel bir çerçeveye yeniden sığdırmak için çok maliyetli olan belirli durumlar için kesmek içerecektir.

3
Jeremy French

Sadece şimdi yaptığınız gibi devam etmemeniz, hiçbir şey söylememeniz ve sadece hacklemeniz ve hacklemeniz gerektiğini eklemek isterim.

Ayağa kalkmalı ve somut yasaya işaret etmeli ve onlara neyin berbat olduğunu söylemelisin. Net olun ve taleplerinizi yedeklemek için kod metriklerini kullanın. Hiçbir şey aslında bir kod kötü olduğunu iddia daha utanç verici değil, aslında, sadece ne yapıldığını anlamadı.

Ben php kod analizi için kullanmak için ücretsiz birçok araç olduğundan eminim http://en.wikipedia.org/wiki/Code_analysis

Ayrıca, elbette bu http://en.wikipedia.org/wiki/Code_smell

Okuyun, uygulamanızda neler bulabileceğinizi ve elbette alternatifleri toplayın. Sadece bunu yapmak için alternatif (tercihen) daha iyi bir yol sunmadan "Nasıl yapıldığını sevmiyorum" diye bağırmak kötü bir uygulamadır.

Hızlı kesmek paraya mal olur. Ve bunu tamamen olumsuz olarak görmeyin - Bu işten şimdi çok şey öğrenebilir ve bir sonraki işinizde edindiğiniz deneyimlerden faydalanabilirsiniz.

hth

2
UrbanEsc

Her şeyden önce, bir tür kaynak kontrolünü kullanıyorsunuz, değil mi? Değilse, oradan başlayın. İlk önce size yardımcı olacak ve ekibin geri kalanı tarafından hızlı bir şekilde benimsenecektir.

Kaynak kontrolünüz varsa, adınızı koda yazmamalısınız, sadece şirketinizin adını yazmalısınız. Hatalı kodda, dosyaların üst kısmındaki yorumlara bir düzeltme geçmişi koymak yaygındır, bu daha iyi kaynak kontrolüne delege edilmiştir.

Şimdi, kod kalitesi ile ilgili olarak, büyük patlama yaklaşımı olarak değiştiremezsiniz. Yavaş yavaş, tek tek farklı konulara yeni yaklaşımlar ekleyin. Doğru yaparsanız, size biraz zaman kazandırır ve genel kaliteyi daha iyi hale getirmek için kullanırsınız.

Size bir örnek vermek için, bir keresinde tüm HTML kodunda olduğu bir Perl/CGI uygulaması ile bir projenin ortasına geldim. Tüm uygulama net bir yapıya sahip olmayan tek bir dosyadaydı. Hiçbir şey sürümlendirilmedi. Bir CVS repo yapılandırarak (o sırada kullanılabilir SVN yok), müşteri için bir web arayüzü koydum. İlk başta meslektaşlarımın taahhütlerini kendim hallediyordum. Sonra, farklı modüller (dosyalar) tüm yöntemleri bölmek. Bu noktada meslektaşlar CVS kullanmaya başladı. Sonra, HTML kodun dışına taşındı. Sonra, kodun bir bölümünde her değişiklik yapmak zorunda kaldığımda, bazılarını yeniden düzenlemek için biraz zaman aldım. Sonunda, geliştirme hızı o kadar artmıştı ki, müşteri son derece mutluydu. Kozmetik bir değişim talep ederler ve bizlere “2 gün sürecek” demektense, dev ortamında anında değiştirdim.

Ancak bu yaklaşım yalnızca genel kodu yeterince iyi yönetirseniz işe yarayacaktır. Büyük resmi anlamadıysanız, uygulamanın bazı bölümleri anlaşılmaz kalırsa, işinizi gerçekten zorlaştıracaktır.

Son bir şey, tam bir yeniden yazma bazen tek çözümdür, ancak yönetim maliyetini haklı çıkarmak genellikle çok zordur.

0
Eric Darchis

Küçük bir geliştirici olduğunuz için bu aslında iyi bir şey. Büyük bir ol 'kod karmaşasının ortasına atmak size ne yapmamanız gerektiği konusunda sadece mükemmel' temiz 'kod üzerinde çalışmaktan çok daha fazlasını öğretecektir. Durumdan yararlanın ve kötü kodu nasıl yeniden düzenleyeceğinizi öğrenin ve yavaşça daha yönetilebilir bir şeye dönüştürün. Ve ASAP olmak zorunda şikayet etmeyin. Mesele şu - sıkı bir son tarihte bir şeyler yaparken kodu yeniden düzenlemeyi ve temizlemeyi öğrenin. Sonuçta, sonsuz zamanı varsa herkes mükemmel kod yazabilir.

0
GrandmasterB