Proje büyük olur gibi benim verimlilik azalmaktadır.

21 Cevap php

Ben başlangıçta notepad + + php dosyalarını ve bu düzenleme, küçük bir proje ile başladı. Bu özelliği düşünmek kolay ve proje üzerine ayrı bir dosya olarak eklemek için kullanılır. Proje büyük oldu gibi, benim verimlilik ben yapılan tüm fonksiyonları hatırlamıyorum çünkü azalmaya başladı, ve onlar gibi saklanan nerede .. Sonra, ben bir IDE (PhpED) ve SVN eklenir ve daha sonra fark ettim üretkenliğinde büyük artırmak.

I find myself slowing down in productivity again (because everything is becoming too complex again).The project has gone from about 20 or so files --> 100 files, and is becoming difficult to manage all in my head (even using an IDE). I am wondering if people have advice on what I can do to increase productivity again. (What is the next level? if there is one)

Program tasarımı yaklaşımı konusunda herhangi bir yazılım araçları veya ipuçları / en azından görselleştirmek için basit şeyler yapmak?

Ben hiçbir gümüş kurşun olduğunu biliyorum, ama herhangi bir fikir yararlı olacaktır.

Örneğin, siz bir IDE / SVN yanı sıra gün boyunca almak için belirli araçları kullanmak yok. Ayrıca, bu yüzden gelecekte bir sorun olmayacak belirli bir şekilde kod yazmak mı? (Özelliklerini) lütfen.

Teşekkürler!

Thanks for everyone's input! Everyone has such good advice!!

21 Cevap

Soğuk sert gerçeği geliştirici verimliliği proje büyüklüğü ile aşağı gidecek olmasıdır. Bu, on yıllardır bilinmektedir. Orada yardımcı yöntemlerdir, ancak bazı disiplin gerektirir.

En iyi çözüm daha yüksek bir soyutlama düzeyine gitmektir. Onlar standart kütüphane veya dil yapıları sanki kullanabileceğiniz, yapı taşları olarak hizmet edecektir rutinleri yazın. Sadece arayüzleri kendi arayüzleri, ve programı belge. Eğer üzerinde çalıştığınız değil bir rutin uygulanır bilmek gerekir gibi hiç düşünüyorsanız, ya o yanlış kullandığınız ya da yeterince arabirimini belge vermedi. , Bir arayüz eklemek için daha yavaş bir şey silmek için, ve bunun unsurları değişen kötü sizi ısırabilir unutmayın yavaş olun.

Yöre senin arkadaşın. Daha küçük bir alanda odaklanabilir, kapalı daha iyi bulunmaktadır. Arayüzlerine Programlama bu yardımcı olur. Rutinleri bir seferde bir şey yapıyorsun, böylece yapışkan rutinleri tutulması, bu yardımcı olur.

Bu yukarıdaki iki teşvik beri nesne yönelimi, çok yararlıdır. Bir arabirime kapsülleme ve kodlama teşvik ve bu grupların bir arada kod parçaları ile ilgili.

Test güdümlü geliştirme bir arayüze programlama uygulamak için değerlidir. Değil uygulanmasına, arayüzü dayanmaktadır testleri yazmak. Bu deney kendilerini arayüzü tanımlamak yardımcı suit güzel bir yan etkisi vardır. Bunun için test edilen değilse, bunu güvenmiyoruz. Kolayca test suit çalıştırabilirsiniz emin olun, ve alışkanlığı olsun.

Üstlenmeden gerekli olacak. Değişen bir şey, özellikle üzerinde planlayın. Sen temiz kodu gerekir. Ayrıca, ister istemez yanlış yerde işlevsellik koyduk bulacaksınız.

Bu hiçbiri tamamen sorunu çözmek için gidiyor da unutmayın. Büyük yazılım projeleri doğal olarak zordur.

Beraberlik ve / veya yazmak. Eğer 'tüm kafanın içinde' diyorsan, o zaman uzak kodlama biraz zaman alabilir ve işinizi belgelemek. Bu şey neden yaptığını açıklayan paragraf içerebilir.

Diyagramlar ve diğer görseller de bunu organize tutmaya yardımcı olacaktır.

Bazı programcılar projelerde teknik olmayan faktörlerin gözardı buldum. Bu onlara rehberlik etmek için bir grup yapısı yoktur yalnız geliştiriciler için özellikle doğrudur. Sizin iş sadece kod daha fazladır ve size sürecinin tüm yönleriyle bakmak gerekir.

Bir not defteri düzenleme kod gurur asla! IDE zaman kazandırır ve verimliliği artırır. When project becomes large, you should take care of the project management and stick to a efficient "Process Pattern", such as RUP (Rational Unified Process), EUP or OOSP. Sizin SVN SCM bir parçasıdır. Tabii ki, dosya yönetimi sorunu için bir Pattern.As tanımlanan çok daha fazla faaliyetler vardır, farklı paketler halinde onları bölünmüş ve farklı yerlerde bunları kaydedebilirsiniz. "Yazılım Mühendisliği" herhangi bir fikri yoksa, sen SE (Yazılım Mühendisliği) hakkında bazı Scott W Ambler tarafından yazılmış kitap veya başkalarına başvurabilirsiniz. Yazılım KOD çok daha fazla olduğunu unutmayın!

A good developer knows that there is more to development than programming. A great developer knows that there is more to development than development. By Scott W Ambler

Test Driven Development sizin için yararlı olabilir.

Ilk testler oluşturun, sonra bu testleri geçmek için kod yazmak.

Eklediğinizde / herhangi bir kod değiştirmek, size bir şey kırık değil emin olmak için çalışabilir bir regresyon test paketi var. Benim durumumda, bu bir uygulama karmaşıklığı ve boyutu büyüdükçe özellikle, zaman bir sürü kaydeder.

Büyük kod bazında verimlilik yazdığınız kodu hakkında araçları hakkında daha az ve daha fazladır. Yeni ve mevcut hem de, senin kod kalitesinin artırılması zaman harcayın. Evet, kısa vadede sizi yavaşlatır ama zaman geçtikçe sizin hızını korumak için olanak sağlar.

Bu olursa olsun araçları veya dil geçerlidir. Dünyanın en iyi araçları bir karışıklık yapmak için dışarı birisi yardımcı olmaz. Aklımda bazı basit fikirler saklardım ile başlatmak için:

  • Kod kalite gelecek verimlilik bir yatırımdır.
  • Gut size kod kötü söylerse, karmaşık, yanlış, çirkin ... muhtemelen, bunu düzeltmek edilir.
  • Yarın, şimdi, kötü kod değil yazma durdurmak.

Etrafa bir göz atmak sahip öneririz büyük kod tasarımı nasıl derinlemesine çok daha fazla bilgi için here.

Ben kod kabaca bir milyon satır (C #, C + +) vardı bir proje üzerinde çalışmak için kullanılan ve hala büyüyor.

1) Böyle bir kod tabanını yönetmek için, svn arşiv klasör yapısı Ürünümüzün çeşitli mimari katmanları taklit eder şekilde oluşturuldu. Bu şekilde arşive yolumuzu bulmak için daha kolay oldu.

2) Ayrıca kendi özel inşa aracı vardı. Eğer büyük bir kod tabanı var, bu her zaman size küçük bir özelliğini test etmek istediğiniz her şeyi inşa etmek mümkün olmayabilir. Bizim özel aracı inşa herhangi bir parçalı yapı arşivini inşa edebileceğini birçok seçenek vardı.

3) Genellikle ne gözlemledim doğru, bunun üstüne yeni şeyler inşa genel işlevselliği / yardımcıları olsun eğer daha kolay olur ve aynı zamanda kod kabartmak önler olduğunu.

Proje üzerinde çalışan geliştiriciler sayısı daha fazla ise 4), bir wiki ayarlayın. Wiki belgeleri doğru yapılırsa mümkün ve yararlı arama, zahmetsizdir.

Ben şimdi düşünüyorum tüm bu. Umarım bu yardımcı olur

O OOP uçuşan bu efsane hakkında ne gün kurtaracak? Eğer bu doğruysa, nasıl Linux / Kernel adamlar hala haftalık bazda yeni sürümlerini itiyor geliyor? Diğer bir deyişle, tüm ASM / C programcıları "Merhaba Dünya" karmaşıklık mahkumdur?

Değil soran tam olarak ne olduğundan emin. Ben ortaya çıkmadan ve zaman sorunlar üzerinde çalışmak demek:

  • Birçok dosya ve LOCS varsa sadece azaltmak ve onları yeniden. Bazı görevler için kaya katı çerçeveleri (PDO yerine mysql ()) bina veya örneğin kullanarak. Diğer bir deyişle, kendini tekrar etmez. Kısa, akılda kalıcı, benzer fonksiyon isimleri: get_user_ID (), get_task_ID (), db_query () ....

  • Grubunda bir sorun iletişim mi? Wikileri deneyin, iç IM denemek fazla yorum kullanmayı deneyin, sevmediğim ne grubuna sormak ve gelişmiş olmak istiyorum. Bu tamamen projeye bağlıdır.

  • Bir grup çalışıyorsanız, her yerde olmak istemiyorum. Lütfen parçalar üzerinde çalışmak ve onları geliştirmek. Yani başkalarının programcılar zihniyet içine almak gerekiyor zaman kazandırır. Bir seferde bir değişiklik. 200 dosya açmak ve tamamen ilgisiz şeyler düzenlemek değil.

  • Dağıtım, sürüm, dokümantasyon, testler: Eğer mümkünse, otomatikleştirmek ve her şeyi hızlandıracaktır.

  • Büyük projeler büyük projeler ve bu her zaman tam olarak anlamak zordur. KISS iyidir, ama benim deneyim bazen sadece bağımsız XML ile iletişim bileşenleri çalışan şeyi yıkmak için yardımcı olur, dil belirli arayüzleri vs .. Kısacası: büyük birinin üzerinden küçük projelerin bir sürü olun.

  • Ben kişisel bir todo tutmak / "myname.todo.txt" olarak liste hatırlıyorum.

  • Hızlı dağıtım zorunludur! Örneğin, yerel bir lamba / xampp yüklemek ve doğrudan değişiklikleri görüntülemek.

Benim ilk düşünce aşağı şeyler yazmak gerekir olmasıdır. "Benim kafamda hepsi" hakkında açıklama beni endişelendiriyor ki

  1. Sonunda ciddi önemli bir şey unutmak için gidiyor ve hatırlayamıyorum çünkü atık zaman bir şey bulmaktan bizim ya da yeniden inşa ediyoruz.
  2. Projenin gelecekteki programcılar şey belgelemek için değil senden nefret edecek.

Ben sadece kullanıcı olsam bile ben, bir wiki bulmak, benim düşüncelerimi organize olağanüstü yardımcı olur. Düzenleme işlemi bana tam anlamıyla çekirdek bir aranabilir, dijital ortama beynimin içeriği dökümü sağlayan, kolay ve hızlıdır.

Size sürekli biçimlendirme dikkatinizi geçiş değil o yüzden sadece gerçekten sözdizimi öğrenmek için biraz zaman alabilir, hangi seçtiğiniz wiki, farketmez.

Sonra sadece otur ve dump.

Eğer sayfada şeyler var sonra, sizin düşüncelerinizi yeniden organize başlayabilirsiniz, ve bu sizin önünüzde varken yüksek bir seviyeden tüm sistem mimarisini görmek daha kolay.

Ben de sadece tamamen farklı bir ortamda önümde tüm olan benim mimarisi düzeltmek için zeki ve ilginç şekillerde bol buldum.

Steve McConnel'in dediği gibi, programlama ana sorun karmaşıklığını yönetiyor.

Bunu yönetmek için çeşitli yollar vardır:

  1. Doğru araçları (iyi IDE, VCS, vb) kullanarak, bir karmaşıklık yüksek miktarda yönetebilirsiniz - ama karmaşıklığı arttıkça, er ya da geç bunu yönetmek mümkün olmayacaktır.
  2. Doğru teknikleri (OOP, TDD, vb) karmaşıklığını azaltabilir kullanma - ama yakında giderek artacaktır.
  3. Doğru yaklaşımlar (üstlenmeden, birim test, vb) kullanılarak ve disiplin çok hangi karmaşıklık artar de hızını azaltabilir - ama yine de artacaktır.
  4. Açık arayüzleri kullanarak daha fazla kişi arasında projeyi bölme izin verebilir, her biri bir alt karmaşıklık işlemek zorunda olacak - ama takım büyüdükçe, ekip iletişim karmaşıklığı daha da artacaktır.

In my personal opinion, the first two points (tools and techniques) are indeed good, but not something that really changes. For instance, I have colleagues in my team that use old editors, and are almost as productive as colleagues using Eclipse.
The other two points, on the other hand, will help much more: discipline, good designs, and refactoring will help maintaining complexity as low as possible, and good team working allows for tackling bigger projects that alone would be really too complex.

However, as you already pointed out, there is no silver bullet. In the end, the complexity of any successful software grows to a point where its maintenance may become so expensive to require a complete new generation.
And that's life in software :-)

Ben Brooks'un klasik kitap 'The Mythical Man-Month, Anniversary Edition' okumak gerektiğini düşünüyorum. Orijinal kitap 60'ların ortalarında yapılan çalışmaları anlatan rağmen, altta yatan gerçekler hala doğru. Ve (yıldönümü baskısında ile birlikte) 'No Silver Bullet' üzerine daha sonra kağıt çok anlayışlı olduğunu.

Sözün kısası, kitap programların büyük olsun düşünmek için daha fazla şeyler vardır, çünkü onlar (anlamak, korumak, geliştirmek) yönetmek için zor olsun açıklıyor. Hemen hemen tüm tasarım teknikleri ve programlama teknikleri çevresinde bu sorunları sınırlamak için denemek için kullanılan, fakat yazılım büyüdükçe sorunlar (ki 'Silver Bullet of'No alt başlık "özü" kısmı) mevcut vardır.

Düzenli kodları okuyan ve eliminate repetition için yollar arayan alışkanlığı olsun (yani, geçerli Kendinizi veya DRY prensibi Tekrar etmeyin), ve uzakta o tekrarı üstlenmeden acımasız olabilir. Daha sen yeniden yöntemleri ve sınıflara ortak kod parçacıkları itmek, daha kolay yeni bir kod yazmak için, ve sorun üzerinde kazanç daha fazla kaldıraç.

Bir iyi kullanarak IDE Eğer ortak nokta bulmak ve refactorings uygulamanıza yardımcı olacaktır.

Ayrıca açık kaynak frameworks and tools bu yazılım yönleriyle otomatikleştirmek için arayın. Onları kullanarak DRY prensibi büyük bir uygulamadır.

Türlenmemiş ve prosedürel dillerdir büyük projelerde yıkmak. OO yapılmış ve ayırmasının ve kapsülleme gibi şeyler iyi tasarım yöntemleri kabul edilmesinin nedeni, her zaman bu şekilde oldu, bu.

Sure, first use oo programming and inheritance. Next, I would use framework like code igniter for start, add module for layout (so you would have consistent site layout) and maybe few others, point is not to spend too much time on common things. Unfortunatelly migrations for CI are not great, yet they exist, so something along those lines would be useful to deal with db. With those, you can have your productivity again as you will not spend time on small things.

Daha büyük projelerle şey, birden çok yönleri var ve daha bu mevcut olduğunu dikkate alarak, onları harcamak için gereken daha fazla zaman.

Umarım bu yardımcı olur.

Bir PHP MVC framework kullanarak büyük ölçüde takip etmek zorunda kod miktarını azaltacaktır. Bu muhtemelen bir çerçeve kullanarak vb oturumu, veritabanı katmanı gibi kendiniz yazmak zorunda şeyler çok ilgilenir, bu mantıksal dosyalarınızı düzenlemenize yardımcı olacaktır.

Ben test odaklı geliştirme (TDD) / davranış odaklı geliştirme (BDD) onlar büyük olsun bana sırayla şeyleri tutmaya yardımcı olduğunu bulduk. Eğer sadece tek başına büyük bir yardımcı olabilir, birim kenara fonksiyonel, entegrasyon bırakarak testleri, ve diğer testleri yazmak bile. Senin kod tabanı Doom Swamp Thing sürüyerek, bir keresteci dönüşür gibi, testler daha fazla ya da daha az doğru yönde shambling tutacak ve çok çünkü, bir kayanın üzerinde açma çamura yüzü aşağı düşme ve boğulma önlemek olacaktır kalkmak ağır.

Eğer yeterli testleri yazmak ve onlar iyi düşünülmüş eğer değişiklik yapmak ve değişim bir şey kırdı eğer hemen bilmek böylece bunu yapabilirsiniz. Testler olmaksızın, belli bir noktadan sonra ne tür hiçbir şeyi değiştiremezsiniz.

Ben çok iyi PHP sahneyi bilmiyorum ama PHPUnit denilen dahil olmak üzere PHP için test çerçeveler vardır görünür.

Sen benim görüşüme göre, PHP için büyük bir proje var. Bu yapılabilir, ama sen gerçekten organize etmek gerekir.

Sadece küçük bir arayüz ile her mümkün olduğunca bağımsız parçalara içine yıkmak.

Eğer mümkün olduğunca çok "Finish". Sonra bir API olarak bu "bitmiş" kod tedavi, böylece artık bakmak zorunda değilsiniz. Haftanın 4,5 günü, başkası yazmış ve sadece arayüzü biliyorum varsayalım.

Burada bir uzuv oluyor ama küçük projeler / API / modules / paket / derlemeleri (ne kadar istediğiniz onları aramak) projeyi kırma burada sonraki mantıklı adım olmalıdır.

  • Küçük, birkaç dosya, küçük editörü, komut satırı oluşturur, tüm iyi başladı ...
  • Büyük sürümleri yanıltıcıdır var var, SVN ve IDE taşındı ... verimlilik biiig boost
  • Sonra proje bile büyük ve tekrar bunalmış sürünür olma hissi var ...

Insan beyni aynı anda o kadar çok şey işleyebilir, sadece çok bizim çalışma belleği işleyebilir var. Kaputun altında yanlış bir şey olana kadar yüksek bir soyutlama düzeyinde arkasında küçük ayrıntılarını gizleme bu dosyalar hakkında unutmak sağlayacaktır. Eğer böyle olursa sadece orada bunu düzeltmek için bu özel başlık açmak gerekiyor. Soyutlamalar farklı seviyede kullanmak ve geri kalanı sadece onları çalışması için ise birimlerinin sadece bir avuç anlamlı olacaktır nerede projeleri aniden çok daha küçük olacak. OOP üst düzey functionalists teşhir ederken, uygulama ayrıntılarını gizleme çok iyidir. Bu varlık seçebilirsiniz OOP'deki başka paradigmalar vardır dedi.

Bu noktada size Yani benim tavsiyem

  • Projelerinizi küçük parçalar size geri kalanı için tek bir erişim noktası verecek bir arayüz ile her yıkmak.
  • Tek tek her bir yığın test etmek için iyi bir test çerçeve ile Birim testi ve diğer test tekniklerini kullanın. Bu arayüzü test etmenizi sağlayacak ve yararlı olup olmadığını göreceksiniz.
  • Eğer ihtiyacı hissediyorum, testler arayüzünü değiştirmek, arayüzü arkasında şeyler erişmek ve daha sonra arabirimini asla kullanmayın. Bu, bu nedenle, dolayısıyla arayüzleri, parçalar arasındaki etkileşim noktaları mümkün olduğunca azaltmak, geri şimdi (çok fazla kavrama) sahip sorunu alırsınız görmezden, en önemli parçasıdır.

Bu büyük ölçüde size proje hakkında hatırlamak zorunda ve büyüklük sonraki sipariş iyi dönüşebilecek şeylerin sayısını azaltmak için izin verir.

Sonra bir sonraki adım daha derinlemesine OOP bakıyor olması ve mimarlık ve tasarım desenleri hakkında öğreneceksiniz. Onlar daha da sistem alanını azaltmaya yardımcı olacaktır.

yararlı çerez

Stop pretending that you can keep it all in your head. At some point (looks like you have reached it), it's simply no longer possible. How to deal with a project too large to memorize? Well, the same way you handle projects that were written by another person, or that you write to be maintained by someone else.

Tek ve en önemli öğe: iyi kod yazın. Az, daha fazla, adı tam olarak ne diyor yapmak fonksiyonları (sırasıyla yöntemleri) yazın sınıfları, yöntemleri, vb değişkenler için tutarlı, anlamlı adlar kullanın. Hayır zor kısayolları, beklenmeyen yan etkiler, timebombs, sürprizler. Sen ne yaptığını kontrol edin ve nasıl uygulanmasını okumadan, güvenle bir fonksiyonunu kullanmak gerekir.

Kodunuzu düzenleyin. Iş mantığı kodu ayrı GUI kodu. Ayrı klasörlerde saklayın. Bir dosya hem de içeriyorsa, refactor. Eğer üretilen kod varsa, ayrı bir klasörde o tutmak (bunu değiştirmek için cazip asla).

Bir Revizyon Kontrol Sistemi kullanın. (Çok sık sözü olamaz)

Profile your process!

Sadece kod profilleme gibi size geliştirme süreci profil.

En çok zaman harcanan vardı bakmak ve sürecin o bölümünü optimize etmek için çalışın.

PHP büyük proje? Sadece gümüş kurşunlar, hiçbir kurşun mermi vardır ve hatta kil mermiler azdır.

Farklı dil!

Eğer kod yapım sürecini rearchitect gerekir. Muhtemelen kod de.

Ben de Kodunu Komple okumanızı öneririz.