Geliştiricilerime çığlık atan hızlı bir makine verdiğimi varsayalım. WPF tabanlı VS2010 çok hızlı yüklenir. Daha sonra geliştirici, kutusunda iyi çalışan ancak gerçek dünyada çok daha yavaş çalışan bir WPF veya WPF/e uygulaması oluşturur.
Bu sorunun iki bölümü var ...
1) Bir geliştiriciye daha yavaş bir makine verirsem, sonuçta ortaya çıkan kodun daha hızlı veya daha verimli olabileceği anlamına mı gelir?
2) Geliştiricilere 'tipik' çalışma zamanı deneyimleri verirken hızlı bir IDE deneyim sağlamak için ne yapabilirim?
Güncelleme:
Kayıt için, yönetime eşit yanıtımı hazırlıyorum. Bu benim fikrim değil ve sizler müvekkilimin yanlış yönlendirilmiş isteklerini düzeltmeme yardım ediyorsunuz. Bana daha fazla mühimmat verdiğiniz ve bunun nereye ve ne zaman yaklaşılacağına atıfta bulunduğunuz için teşekkür ederiz. Aşağıdaki gibi geçerli kullanım durumlarını + 1'ledim:
- sunucu tarafında özel programlama optimizasyonları
- test laboratuarları
- muhtemelen en iyi grafik kartı yerine daha iyi bir sunucu satın alıyor
Kesinlikle
Yöneticilerin tüm toplantıları Pig-Latin dilinde yapmaları gerektiği de doğrudur. Basit cümleler kurarken dezavantajlı olmaları için iletişim becerilerini genel olarak geliştirir. Noktalarını anlamak için yüz ifadelerine ve vücut diline daha fazla güvenmek zorunda kalacaklar ve hepimiz bunun tüm iletişimin en az% 70'i olduğunu biliyoruz.
CFO'lar sadece bir abaküs ve tebeşir kullanmalıdır. Aksi takdirde, 'ham verilere' çok fazla güveniyorlar ve 'bağırsak hislerine' yeterli değiller.
Ayrıca yarı sarhoşken golf sahaları gibi dikkat dağıtan ortamlarda tüm önemli iş toplantılarını düzenlemeleri gerekir. Ah çabuk ...
Cevap (cesur olacağım ve söyleyeceğim) her zaman
Bütçenizle elde edebileceğiniz en iyi sonucu geliştirin ve dağıtacağınız minimum maks. Ekipman yelpazesini test edin.
Bunun bir faktör olup olmadığını görmek için performansı test edebilen emülatörler, sanal makineler, test cihazlı gerçek makineler var.
1)
Çok, çok olası değil.Hayır, ve geliştiricileriniz kahvenize önerdiği için kötü bir şey koyabilir. Geliştiricilerinizin kodun derlenmesini veya IDE ne yaptığını veya ne zaman yaparsa yapmasını beklemek için harcadığı zaman) değil kodu daha iyi hale getirmek. Zihinsel akışlarını da bozar. Sorunlarını akıllarında tutun ve bu sorunu çözmede çok daha verimli olacaklar.
2) Her birine, desteklemelerini istediğiniz en düşük özellikleri temsil eden ikinci bir PC verin, bununla birlikte gerçek iş istasyonu arasında bir KVM geçiş yapın).
Uzun derleme zamanlarını seviyorum. Özgeçmişim üzerinde çalışmak bana daha fazla zaman veriyor.
Bu korkunç bir fikir. Geliştiricilerinizin olabildiğince verimli olmasını istersiniz, bu da onlara mümkün olduğunca hızlı bir makine vermek anlamına gelir, böylece gün boyunca oturup bir şeyler derlemesini beklemezler. (Biraz OT, ancak WebSense ve benzerleriyle potansiyel olarak yararlı sitelere erişimlerini engellememeye yardımcı olur.) Hala Stone-Age teknolojisini çalıştıran kullanıcılara sahipseniz, o zaman bir test makinesine ihtiyacınız olacaktır. benzer özelliklere sahip ve teknoloji seçenekleri açısından yanlış yolda gitmediğinizden emin olmak için erken ve sık sık test ettiğinizden emin olun.
Geliştirme mümkün olan en iyi ortamda yapılmalıdır. Testler mümkün olan en kötü ortamda yapılmalıdır.
Yavaş bir makine bana verildiyse, günümü geliştirme sürecini optimize ederek ve verilen kodumu optimize etmeyerek geçirirdim. Yani: HAYIR!
Gömülü sistem programcıları buna her zaman girer! Ve iki bölümlü bir çözüm var:
O zaman geliştiricilerinizin hangi donanım üzerinde çalıştığı önemli değildir.
Bunu yaptıktan sonra, daha hızlı ekipmanların programcılarınızı günde yarım saat veya yılda 125 saat kaydedebileceğini varsayalım. Ve diyelim ki faydaları ve ek yükleri (Silikon Vadisi için gülünç derecede düşük) ile yılda 100.000 $ ya da saatte 50 $. Bu 125 saat * 50 $/saat 6250 $ 'dır. Yani, programcı başına geliştirme donanımına yılda 6250 dolardan daha az bir şey harcarsanız, paradan tasarruf edersiniz.
Yönetiminize bunu söylemelisiniz.
Tim Williscroft, bunun ilk yarısını bir yorumda söyledi ve adil bir dünyada, bu cevabın aldığı puanların yarısını alacaktı.
24 Ekim Eklendi:
Eski işverenim bu teoriye sahipti ve yaklaşık 100 milyon dolar işemelerine yardımcı oldu.
Japonya, Kore ve Çin'deki programcıları işe almak için kullanılan Japon merkezli bir holding. Orada millet crappy geliştirme donanımını kullanmak, 13 saatlik iş günleri, masalarında uyumak ve hayat sahibi olmaktan uzak. Bu nedenle, Linux tabanlı bir cep telefonu işletim sistemi yapmak için dikkat çekici bir Silikon Vadisi şirketi edindiklerinde, modern donanım isteyen aptal Kaliforniyalıların sadece whina prima-donnas olduğunu ve bunun için iyi bir nedenleri olmadığını (verimlilik gibi) anladılar.
Dört yıl sonra, OS bok gibi çalıştı, tüm programlar patladı ve müşteriler sinirlendi ve sözleşmeleri sağa ve sola sonlandırdı. Son olarak, OS projesi iptal edildi ve holdingin dünya çapındaki işgücünün büyük bir yüzdesi geçen yıl işten çıkarıldı. Açıkçası, hissedarlara tüm bu paranın ve çabanın nereye gittiğini açıklamak zorunda olan yöneticilerden biri olmak istemem.
Bu fiyaskoya neden olan sadece yavaş geliştirme makineleri değildi. Başka stratejik ve taktik hatalar vardı - ama siperlerde çalışan insanların tren enkazının geldiğini görebildikleri ve karar vericilerin neden yapamadıklarını merak ettikleri aynı şeydi.
Ve yavaş vites kesinlikle bir faktördü. Sonuçta, zamanında teslim etmek için silahın altındaysanız, işi kasten yavaşlatmak gerçekten akıllıca bir şey mi?
Programlamada eski bir deyiş vardır: " erken optimizasyon tüm kötülüklerin köküdür ". Sanırım tüm kötülüklerin başka bir "kökünü (ya da en azından ilk dalını) yaratmayı başardın. Şu andan itibaren “erken geliştirici deoptimizasyonu tüm kötülüklerin köküdür” diyebiliriz.
Kısacası cevap, bunun yalnızca geliştirme sürenizi yavaşlatacağı ve daha fazla bakımı zorlaştıracağıdır. Derleme süreleri daha uzun sürecek, diskte kod aramak daha yavaş olacak, çevrimiçi yanıtları bulmak daha uzun sürecek ve en önemlisi, geliştiriciler gerekli işlevselliği test edebilmek için kodlarını erken optimize etmeye başlayacaklar.
Bu son nokta en kritik konudur ve diğer cevapların çoğunda gündeme gelmez. İlk sürümünüzü tamamlayabilirsiniz, ancak daha sonra kodu güncellemek istediğinizde, geliştiricilerin erken optimizasyonunun kodunuzun odağını iyi tasarımdan uzaklaştırdığını ve bunu " en az işimi tutmak için çalışır. Ek özellikler eklemek daha zor hale gelecektir çünkü o sırada seçilen optimizasyonlar gereksiz olabilir ve kodunuzu diğer yarı optimize edilmiş kesmek üzerindeki yarı optimize edilmiş hackler yoluna kilitleyebilir.
Bunun bir örneği olarak, mevcut sürümünüzün minimum sistem gereksiniminin biraz yavaş hızlı tek bir işlemci makinesi olduğunu düşünün. Geliştiricileri bu kutuya yerleştirirsiniz ve ürünü hızlı bir şekilde geliştirmek istedikleri için birçok hack'e dayanan karmaşık tek dişli bir çözüm bulurlar. Şimdi 5 yıl sonra, ürünün minimum çift işlemci makinesi gereksinimi olan yeni bir sürümüne sahipsiniz. Programın paralel olarak çalıştırabileceğiniz bölümlerini temiz bir şekilde ayırmak istiyorsunuz, ancak 5 yıl önce geliştiricilerinizi hileli bir yazılım yapmaya zorlayan karar şimdi yeni minimum gereksiniminizin tüm gücünü kullanmanıza engel oluyor .
Yapmanız gereken, geliştirme döngünüzün sonuna alt sınır kutularında kabul testi yaptığınız bir aşama eklemektir. Kesinlikle kodun bir kısmı geliştiricinin daha hızlı makinesi nedeniyle çok yavaş olacaktır, ancak bu parçayı izole edebilir ve orada optimize edebilirsiniz. Kodunuzun geri kalanı temiz ve bakımlı kalır.
Sorunuzu "Geliştiricilerimi zayıf geliştirici makineler vererek yine de iyi kodlar vererek erken optimize etmeye zorlayabilir miyim?" Şeklinde görüyorum. Ve cevap hayır.
İlginç okumalar, tüm bu cevaplar.
Ama bence burada cevap veren çoğu kişi bu noktayı kaçırıyor. Soru, okuduğum gibi (en azından) gerçekten geliştiricilere daha hızlı kod yapmak için bir P1 vermekle ilgili değil.
Mesele şu ki, bugün çok fazla yazılım, çok daha güçlü bilgisayarlara rağmen, geçen bin yılda kullandığımız yazılımdan daha yavaş veya daha yavaş. Buradaki cevaplardan yola çıkarak çoğu geliştirici bu ipucunu alamıyor. Bu web uygulamalarında çok belirgindir. Bu site çok iyi bir istisnadır, ancak birçok site 1 mb'lik bir ön sayfaya sahiptir. İndirmesi için ne beklerim? Bilmiyorum. Sanırım kullanıcı üzerinde harcamak gerekir zaman saygı geliştirici bir cehalet, ya da mb başına ödeme yaparsanız daha da kötü ödeme gibi görünüyor. Mesele şu ki, tüm bu web sayfaları yüksek çözünürlüklü resimler bile içermiyor. Genellikle, bazı geliştirme ortamlarından sağlanan bazı bok kodlarıdır. Tabii ki bok kodu değil sanırım, ama bana kullanıcı olarak kazanç sağlamaz.
Genel olarak sadece kodu optimize etmekle kalmaz, aynı zamanda verdiklerinden daha yavaş olan şeyleri dahil etmemeyi seçmektir.
Birkaç hafta önce 1995'ten itibaren bir dizüstü bilgisayar başlattım. Windows 3.x kısa sürede çalışmaya başladı. Veritabanı, enter anahtarı tamamen serbest bırakılmadan önce (neredeyse en azından) bazı verileri almalıyım.
Bugün yazılımımızdan çok daha fazlasını elde ettiğimizi biliyorum, ancak bilgisayarlarımız çok daha hızlı. Geliştirme endüstrisi neden 1995'ten itibaren yazılımın hızını korumaya ve yeni işlevsellik istedikleri için yeni donanım satın almalarına neden karar vermiyor? Bugün daha çok günlük programlar ve web siteleri, insanları daha önce yaptıklarıyla aynı şeyleri yapmak için yeni donanım satın almaya zorlamaktadır. Ama elbette daha süslü bir şekilde.
Linux gelişiminin bunu daha iyi hallettiğini düşünüyorum. Linux dağıtımları yıllardır animasyonlu pencereler gibi birçok göz şekeri ile süslü bir şekilde bile oldukça ileride pencereler olmuştur. Mesele şu ki bugün ve hatta dün bilgisayarlarda çalıştı. Sadece Edge donanımında değil.
Şimdiye kadar birçok geliştiricinin sağlıksız bir adrenalin seviyesi var. Evet, önünde bekleyen tüm hayal kırıklıklarını geri vermenin bir yolunu buldum:
ofis sql sunucusu (başlatma konsolu başlatma) arcgis (başlatma ve kullanma) acrobat reader (başlatma) agresso (en azından web uygulaması olarak kullanarak) pencereleri (bakıyor ve kullanıyorum, iyi denemedim 7 yet) .net web sayfaları (indiriliyor)
ve bunun gibi
İyi hissediyorum :-)
Şerefe
Nicklas
1) Bir geliştiriciye daha yavaş bir makine verirsem, sonuçta ortaya çıkan kodun daha hızlı veya daha verimli olabileceği anlamına mı gelir?
Son yirmi yıldır yazılım geliştiriyoruz ve hala böyle sorular mı alıyoruz? Daha çok köşeleri kesme girişimi gibi görünüyor. Suç yok, ama hadi, sence soru mantıklı mı? Bunu şu terimlerle düşünün (eğer yapabiliyorsanız): zorlu koşullar, yağmur, çamur, ne olursa olsun çalışabilen 4x4 bir araç yapmak istiyorsunuz. Elde edilen aracın üzerinde çalışabileceğinden emin olmak için mühendislerinizi ve Montaj hattını elemanların altına mı koyacaksınız?
Yani, İsa Mesih! Gelişme var ve test var. Test farklı, daha sert bir ortamda yapılır veya geliştirici, stres testine uygun bir şekilde kendi test ortamında bir test yatağının nasıl monte edileceğini bilir. Yapamazsa, onu daha iyi bir geliştirici ile değiştirin.
2) Geliştiricilere 'tipik' çalışma zamanı deneyimleri verirken hızlı bir IDE deneyim sağlamak için ne yapabilirim?
Bunu geliştiricilerinize sormalısınız. Ve size nesnel ve geçerli bir cevap veremezlerse, bunları gerçek geliştiricilerle değiştirmeniz gerekir.
Ancak soruyu eğlendirmek için geliştiricilerinize (iyi geliştiricilere sahip olduğunuzu varsayarak), iyi araçlara ve iyi donanıma, ödeyebileceğiniz en iyisini verin. Ardından, yazılımınızın çalışması gereken en düşük ortak taban ortamı oluşturun. B testin nerede yapılacağı. Geliştirme ortamından farklı bir test ortamına sahip olmak daha iyi bir mühendislik uygulamasıdır stres testi.)
Geliştiricileriniz iyi ise, bunu size bildirmiş olmalılar (sizden istediniz varsayalım.)
Bu, bir grup sürtük geliştiriciyle sonuçlanır. Bu şey olduğu gibi yeterince zor, deneyimi daha da kötüleştirmeyelim.
Ancak, herhangi bir performans sorununu ortadan kaldırmak için bir Test veya KG ortamında kullanıcılarınıza benzer bir donanıma sahip olmanızı teşvik ederim. Bu iyi bir fikir.
Ben norm buck ve sunucu yazılımı yazıyorsanız EĞER VE SADECE evet derim. İstediğiniz kadar gülün, ancak gördüğüm en verimli takım Wyse terminalleri olan bir grup Perl adamıydı. Bu 1990'ların sonlarındaydı, üniversite dışı bir dükkandı ve mekansal ızgara yazılımları yazıyordu (temelde sadece hesaplar). Ancak nispeten güçlü bazı geç model RS/6000'lerle konuşuyorlardı.
Sadece etkinliğe ilgi katmak için orada kör bir programcı vardı. Ben çok etkilendim.
Bu kötü bir fikir değil - ancak geliştiricilerinizin hızlı bir programlama ortamına sahip olmasını istiyorsunuz.
Bunu, programcılarınıza iki makine - hızlı bir geliştirme kutusu ve daha yavaş bir emtia kutusu (muhtemelen sanal) vererek test edebilirsiniz.
VS derleme işleminin bazı düzeltmeleri, uzaktan hata ayıklama ile test kutusuna dağıtımı norm haline getirebilir.
Kodlayıcılarınızı daha verimli kod geliştirmeye zorlamanın başka yolları da vardır - örneğin, birim testlerinize performans ve bellek kullanımı hedefleri ekleyebilirsiniz. Bellek kullanımı için bütçe belirlemek de mükemmel bir hedeftir. Ayrıca, html kodu için sayfa ağırlığı bütçelerini ayarlama.
Sorun, geliştiricinin hızlı bir makinede verimsiz kod oluşturması değil, sorun, ölçülmesi gereken performans metriklerini tanımlamamış olmanızdır.
Ürün gereksinimlerinin bir parçası olarak, gerekli müşteri deneyimine dayanarak tüm bilgisayarlarda ölçülebilen belirli bir hedef tanımlanmalıdır. Bilgisayarınızı diğer bilgisayar türleriyle ilişkilendirmenizi sağlayan birçok web sitesi (Check SpecInt) vardır.
Bu birçok nedenden dolayı iyidir. Minimum desteklenen donanımı daha kolay tanımlamanıza olanak tanır, böylece müşteri şikayetlerinin sayısını sınırlayabilirsiniz - çoğu yazılımın çoğu bilgisayarda çalıştığını biliyoruz, bu sadece bir performans meselesidir - spesifikasyonlarımızı minimum gereksinim aralığında insanlar olacak şekilde ayarlarsak makul bir şekilde kabul edilebilir bir performansa sahipse, müşteri şikayetlerini sınırlandırırsınız - ve ardından bir müşteri aradığında, gerçekten bir sorun olup olmadığını veya müşterinin ürünün nasıl çalışması gerektiğinden memnun olup olmadığını belirlemek için karşılaştırmaları kullanabilirsiniz.
Geliştirme için daha yavaş bir bilgisayara sahip olmanın daha hızlı kod ile sonuçlandığına inanıyorum, ancak bu bir bedeli var. Bunun mantığı şu ilk elden deneyimlememdir: uzun işe gidip gelme süresine sahip olarak, trende çalışmak için bir netbook aldım, netbook son 5 yılda aldığım herhangi bir bilgisayardan daha yavaş. Her şey çok yavaş olduğu için, bu netbook üzerinde bir şey dayanılmaz derecede yavaş olduğunda çok hızlı görüyorum ve yavaş noktaların çok daha hızlı olduğunun farkındayım (her zaman karşılaştırmaya gerek yok). Bir netbook üzerinde çalışmak gerçekten geliştirdiğimi değiştirdi.
Bununla birlikte, özellikle profesyonel bir ortamda bunu yapmayı savunmuyorum. İlk olarak moral bozucu. Hemen hemen herkesin bu fikrin mantıklı olmadığını söylemesi, programcıların bu fikre kötü tepki verdiğini gösteriyor.
İkincisi, her şeyin daha yavaş olması, hızlı bir makinede yapmak isteyebileceğiniz şeylerin (1 dakika sürüyor), yavaş bir makinede artık tembellik, vb.
Son olarak: üretilen kod daha hızlı olabilir, ancak üretimi kesinlikle daha uzun sürer.
Nokta 1, HAYIR! Studio, iyi makinelerde çalışacak ve bu gereksinim her sürümde daha güçlü hale geldi. Eğer intellisense'i açar ve tek çekirdekli HT olmayan bir kutu kullanırsanız, bazı stüdyo sürümlerini kilitleyebilirsiniz.
2. noktaya işaret etmek için, test projelerinde bazı kaynakları kısıtlamanıza izin veren bazı özellikler vardır. Mükemmel değiller ama oradalar. VPC veya düşük spec VM görüntüleri de çok iyi bir kısıtlama da iş.Kullanıcıların zaman zaman test yapmak için kötü makinelerde oturup sahip oldukları özelliklerin sonuçlarını görebildim talep etti.
Hayır - aslında daha fazla hataya neden olur çünkü fazla test yapmazlar ve profiler gibi ekstra araçlar kullanmazlar. Onlara karşılayabileceğiniz en iyi makineleri verin (oyun geliştirme veya grafik mağazanızsanız grafik hızlandırma donanımı dahil) ve VM'lerde test etmelerini sağlayın. VM özellikler gerektiği gibi büyütülebilir veya küçültülebilir.
Bence bu ilginç bir soru ve bu kadar çabuk bir "hayır" ı tercih etmem. Benim düşüncem şu: ne tür bir geliştirme ekibinden bahsettiğimize bağlı. Örnek: Yıllık ICFP programlama yarışması için çalışan bir gruba liderlik ediyorsanız, bir HPC kümesinde az miktarda geliştirme süresinden sonra iyi sonuçlar elde etmeniz, bulduğunuz çözümün iyi olduğu anlamına gelmeyebilir. Bazı bilimsel veya sayısal algoritmalar yazıyorsanız da aynı şey söylenebilir: 64 MB belleğe sahip eski AMD Duron 600 MHz'inizde işleri yapma şeklinize dikkat etmek zorunda kalırsınız ve bu bile bazı tasarımları etkileyebilir seçimler.
Öte yandan, akıllı bir programcı/bilim adamı/her neyse dikkatli olması gerekiyorsa. Ama hiçbir bilgisayar AT ALL ve kağıt üzerine notlar almak zorunda kaldığımda kendimi en iyi kodlarımdan bazılarını yazarken buldum. Bir IDE kesinlikle gerekli olduğunda, büyük çerçeveler içeren büyük projeler için bu geçerli olmayabilir.
Kesin olan bir şey var: hızlı makineler ve iyi sonuçlar, (kötü) programcıları şımartıyor ve bilgisayarlarda bulduğumuz bokun nedenlerinden biri olabilir.
8 çekirdekli 8G makinemi (tam temiz yapı) inşa etmek yaklaşık bir saat süren bir paket üzerinde çalışıyorum. Ayrıca test ettiğim nispeten düşük uçlu bir dizüstü bilgisayarım var. Düşük kaliteli dizüstü bilgisayar, tek bir iş günü boyunca iki tam yapıyı yönetmez.
Dizüstü bilgisayarda kasıtlı testler yapılarak hızlı makinede daha üretken miyim, yoksa dizüstü bilgisayarımdaki tüm yapılarımı yapmalı mıyım?
Bunların sayılardan oluştuğunu unutmayın.
Normalde her gün temiz bir yapı yapmam gerekmediği için sağlam bir demo (tek modüller üzerinde çok fazla test yapabilirim), ancak kısmi yapılar bile derleme/bağlantı sürelerinde kabaca bir büyüklük farkı sırası gösteriyor .
Bu yüzden asıl sorun yavaş makinemde tipik bir yapı bir fincan kahve almaya gidecek kadar uzun, daha hızlı makinemde sadece biraz kahve yudumlayabilirim.
İşi yapmak açısından hızlı bir makinede geliştirme yapmayı tercih ederim. Son teslim tarihlerini çok daha güvenilir bir şekilde vurabilirim. Öte yandan yönetim yavaş makinemde geliştirme yapmamı sağladığını düşünürsem çok daha fazla web'e göz atarım, ya da en azından kitap okumuş olurdum.
İlginç bir şekilde, bunu yaptığımız bir başlangıçta çalıştım. Aslında oldukça iyi çalıştığını düşünüyorum, ama sadece içinde bulunduğumuz özel durumdan dolayı. Sınıf otomatik yeniden yüklemesinin gerçekten doğru çalıştığı bir mod_Perl mağazasıydı. Tüm geliştiriciler vim'i IDE seçim (veya bazı uzaktan düzenleme yazılımları) olarak kullandılar) Sonuçta, kodun derlenmesi/yeniden yüklenmesi/vb.
Temel olarak, IFF fikrini sevdim, tüm geliştiriciler için geliştirme döngüsü üzerinde ihmal edilebilir bir etki var ve sadece kodunuzun çalışma zamanı işlemini etkiler. Kodunuz zaten derlenmiş, önceden işlenmiş vb. İse, geliştiricilerin çalıştığı "düzeltmek hata; test; sonraki" döngüsüne zaman ekliyorsunuz.
Kişilerarası açıdan, insanlar yavaş sunucuları kullanmak için asla zorunl değildi, ancak yavaş sunucuları kullandıysanız, kendi bakım veya kurulumunuzu yapmak zorunda kalmadınız. Ayrıca, bu kurulum en başından beri vardı, bunu yerleşik bir geliştirme ekibine satmaya çalışmayı hayal edemiyorum.
Orijinal sorunuzu yeniden okuduktan sonra, beni sürekli olarak korkutan bir şeyin, üretim ortamlarından farklı geliştirme ortamları olduğu bana geliyor. Neden dev iş istasyonunu etkilemeden çalışma zamanı için saklayabileceğiniz bir VM kod yürütme için) kullanmıyorsunuz? Son zamanlarda VirtualBox kullanıyorum/sevdim.
Burada da eğilimi yakalayacağım.
Anecdote: 286 bilgisayarı 486-es'e yükselten Hollandalı bir yazılım geliştirme firması için çalıştım (evet, o kadar yaşlıyım). Haftalar içinde tüm kurum içi kütüphanelerimizin performansı% 50 düştü ve hatalar arttı ... Küçük bir araştırma, insanların artık hata ayıklama işlemi sırasında kodun kendisini düşünmediğini, ancak 'hızlı' ardışık koda başvurduklarını gösterdi -> derleme -> test -> düzeltme (kod) vb.
İlgili: ABD'de aynı şirket için bir yan kuruluş kurduğumda, daha az özellik/daha az güce sahip PC'lere alışkın oldukları ve çok daha verimli kodlayıcılar oldukları için Rus programcıları işe aldım.
Bunların farklı zamanlar olduğunu ve kaynakların bugünkünden çok daha az olduğunu fark ettim, ama beni nasıl şaşırtmaktan asla vazgeçmiyor, donanım cephesinde kaydedilen tüm ilerlemeyle, net sonuç ileriye doğru her adımın daha yüksek minimum spesifikasyonlar gerektiren daha zayıf programlama ile reddedildi ...
Bu nedenle ... Programcıların uygulamalarını 'Ortalama Joe' bilgi işlem gücünü ve donanım özelliklerini aşmayan makinelerde test etmeye zorlanması gerektiğini hissediyorum.
Donanım geliştirme zamanından daha ucuzdur.
Darboğazların çoğu veritabanında istemci bilgisayarda değil, ancak geliştiriciden daha yavaş makinelerde test yapılmasına izin vermez. Optimizasyonu test etmek için test araçlarını kullanın.
Kesinlikle hayır. Programcılarınıza, satın alabilecekleri en iyi dizüstü bilgisayar parasını, seçtikleri bir klavyeyi, birden çok harika büyük ekranı, özel bir ofisi, telefonu olmayan, ücretsiz alkolsüz içecekleri, istedikleri tüm kitapları (ilgili olan), önemli teknoloji konferanslarına yıllık geziler ve harika sonuçlar elde edersiniz. Ardından üst ve alt sınır donanımı/yazılımı/tarayıcı/bant genişliği kombinasyonlarını test edin.
Birçok uygulama için sorun geliştiricilerin "yapılmadan" gerçek dünya veri kümeleri ile test etmelerini sağlamaktır. Etkileşimli uygulamalar için bir temel test makinesi/VM gerekir.
Yavaş bir Windows95 makinesinde çalışıyorum ve MindForth yapay zekasını Forth ve JavaScript'te verimli bir şekilde yazmamı sağlıyor.
Bu ilginç bir düşünce (devs'ye yavaş bir makine vermek onları daha fazla optimize etmeye yönlendirebilir).
Bununla birlikte, çözüm daha iyi bir şekilde çerçevelenir - yanıt süresini programların gereksinimlerine koyun ve test için düşük kaliteli bir makineye sahip olun.
Ayrıca, gerçekten bir whiz-bang derleyiciniz/diliniz varsa, kod oluşturmak ve en iyisini seçmek için farklı yollar tasarlayabilir. Buna sadece daha hızlı bir bilgisayar yardımcı olabilirdi.
Diğerleri genellikle geliştiricilerin hızlı makinelere sahip olmasını istediğinizi söyledi. Katılıyorum. RAM - bellekte olabildiğince çok istediğiniz) atlamayın - bazı oluşturma işlemleri disk kullanımında çok ağırdır.
Kurtulmayı düşünmek isteyebileceğiniz şeyler derleme sürücülerinde antivirüs! Bu sadece yavaşlar ve son derece güçlü bir yavaşlama faktörü olabilir.
Mümkünse geliştiricilerin Linux üzerinde gelişmesine izin vermek isteyebilirsiniz. Buradaki araçlar, her türlü ekstra görev için çok daha iyidir (sadece bir dosyadaki bir şey için grep). Bu aynı zamanda anti-virüsden de kurtulur.
Programcılara programcıların iyi bir donanım alıp almayacaklarını sormak şişman bir adama yiyeceklerden hoşlanıp hoşlanmadığını sormak gibidir. Bunun öznel değişim olduğunu biliyorum, ama yine de ... soru bize sormaya değer mi? : P
Tabii ki çoğunluğa katılıyorum: HAYIR .
Ben kategorik olarak "Hayır" demeye cazip geldim, ama yeni bir deneyim paylaşmama izin verin: Projemizdeki biri veritabanına veri almak için bazı kod üzerinde çalışıyordu. O zamanlar grubumuzdaki en eski PC'ye, hatta belki de tüm organizasyona sahipti. VS 2008 ile iyi çalıştı, ancak elbette daha hızlı bir makine deneyimi daha iyi hale getirebilirdi. Her neyse, bir noktada test ederken bomba yazdığı süreç (ve tam özellikli olandan önce). Hafızası bitti. Süreç bombalanmadan önce birkaç saat sürdü. Unutmayın, bildiğimiz kadarıyla, kullanıcıların kullanması gerekecekti.
Daha fazla RAM istedi. 3-4 hafta içinde daha yeni bir makine aldığı ve eskisinin atılacağı için reddetti.
Bu adamın optimizasyon felsefesinin şu olduğunu unutmayın: "Çok fazla RAM içeren hızlı makinelerimiz var" (onun ve birkaç makine zaten hariç), öyleyse neden değerli programcı zaman optimizasyonunu boşa harcayalım? Ancak durum onu algoritmayı daha fazla bellek verimli olacak şekilde değiştirmeye zorladı, böylece 2Gb makinesinde çalışacak (XP çalışıyordu). Yeniden yazmanın bir yan etkisi de sürecin daha önce olduğundan çok daha hızlı çalışmasıydı . Ayrıca orijinal sürüm, daha fazla veri içe aktarılırken sonunda 4Gb ile bile bombalanırdı - bu, düz ve basit bir bellek domuzuydu.
Soooo ... Genel olarak "Hayır" derken, bu daha az güçlü bir makineye sahip geliştiricinin daha iyi optimize edilmiş bir modülle sonuçlandığı ve kullanıcıların sonuç olarak faydalanacağı bir durumdur (çünkü bu, çok sık çalıştırılırsa, başlangıçta her iki şekilde de optimize etme niyeti yoktu, bu yüzden makine birkaç büyük testi çalıştırmak için yeterli RAM) olsaydı orijinal sürümle sıkışmış olurdu. .) Onun amacını görebiliyorum, ama kişisel olarak, kullanıcıların bir sürecin tamamlanması için 8 saat beklemesi gerektiği fikrinden hoşlanmıyorum.
Bununla birlikte, genel bir kural olarak programcıların güçlü makineleri olmalıdır çünkü çoğu geliştirme oldukça yoğundur. Ancak, işlemin bombalanmadığından ve kullanıcıların gün boyu Paint dry'ı izlemeyeceğinden emin olmak için "en düşük ortak payda" makinelerinde test yapılmasına dikkat edilmelidir. Ama bu zaten söylendi. :)
Soruyu ve cevapları okurken NO vakasının ateşliğinden şaşkına döndüm.
25 yıldır yazılım geliştirmede çalıştım ve tereddüt etmeden programcıların iyi kod geliştirmek için bir sürü şeye ihtiyaç duyduğunu söyleyebilirim:
MAKUL OLABİLİR bir geliştirme ortamı. Dinozor değil. Ayrıca kanamaya gerek yok Edge. Sinir bozucu olmamak için yeterince iyi.
İyi bir şartname (yazılı şartname olmadan ne kadar yapılır?)
İyi ve destekleyici yönetim.
Mantıklı bir gelişim programı.
Kullanıcıları ve kullanıcıların ÇEVRESİNİ iyi anlayabilme.
Ayrıca, bu son noktada, geliştiricilerin kullanıcıların ne kullanacağının zihninde olması gerekir. Kullanıcıların süper bilgisayarları varsa ve atom bölme simülasyonları ya da performansın çok paraya mal olduğu ve hesapların saatlerce çalıştığı bir şey yapıyorsa, düşünme performansı önemlidir.
Kullanıcıların 286 Steam destekli dizüstü bilgisayarı varsa, geliştiricilerin en son 47 GHz Core i9000'de geliştirme testlerini yapmaları ve bazı sorunlara yol açacaktır.
"Geliştiricilere en iyisini verin ve TEST EDİN" diyenler kısmen haklıdır, ancak bunun geliştiriciler için büyük bir MENTAL problemi vardır. Test başarısız olduğunda, çok geç olana kadar kullanıcı deneyimini takdir etmezler.
Test başarısız olduğunda - mimariler taahhüt edildi, yönetim söz verdi, çok para harcandı ve sonra felakete dönüştü.
Geliştiricilerin 1. günden itibaren kullanıcı deneyimi gibi düşünmesi, anlaması ve bu alanda olması gerekir.
Ağlayanlar "oh hayır böyle çalışmaz" ne diyorlar. Bunun olduğunu defalarca gördüm. Geliştiricilerin her zamanki yanıtı, müşteriyi etkili bir şekilde suçlayan "MÜŞTERİLERE daha iyi bir bilgisayar almasını söyle" den biridir. Yeterince iyi değil.
Bu, birkaç sorununuz olduğu anlamına gelir:
Geliştiricileri mutlu tutun ve yönetimin işemek, projenin başarısız olma şansını artırın.
Geliştirme için, geliştiricileri alt üst etme riskiyle daha yavaş makineler kullanın, ancak onları gerçekten önemli olan şeylere odaklayın.
Devs masasına 2 makine koyun ve CLUNKER'I TEST ETMEK İÇİN KUVVET EDİN (bu hor görmedikleri için yapmayacaklar ... ama en azından testte performans sorunları varsa çok açıktır).
Toplu sistemleri ve delikli kartları hatırlıyor musunuz? İnsanlar geri dönüş için bir saat ya da gün bekledi. İşler bitti.
5 MHz işlemcili eski unix sistemlerini hatırlıyor musunuz? İşler bitti.
Techo-geeks kanayan kenarı kovalamayı sever. Bu düşünmeyi değil çınlamayı teşvik eder. Yıllar boyunca daha fazla geliştirici ile tartıştığım bir şey .... parmaklarını klavyeden uzak tutmaya ve kodu okumak ve düşünmek için daha fazla zaman harcamak istediğimde.
Kodun geliştirilmesinde, düşünmenin yerini tutamaz.
Bu durumda, hislerim - GERÇEKTEN NELERİ ÖNEMLİDİR. Projenin başarısı? Bu bir şirket egzersiz/öldürme egzersizi mi? Eğer öyleyse, başarısız olmayı göze alamazsınız. Testte başarısız olan şeylere para harcayamazsınız. Test geliştirme döngüsünde çok geç olduğu için, başarısızlığın etkileri çok geç bulunur.
[Testte bulunan bir hata, geliştirme sırasında bir geliştirici tarafından bulunan bir hatayı düzeltmek için yaklaşık 10 kat daha pahalıdır.
Ve testte bulunan bir hata, mimari tasarım aşamasında tasarlanan bu hatanın düzeltilmesi için yaklaşık 100 kat daha pahalı.]
Bu bir anlaşma kırıcı değilse ve yakmak için zaman ve para varsa, o zaman kanayan Edge geliştirme ortamını kullanın ve test başarısızlıkları cehennemi yaşayın. Aksi takdirde, başka bir yol bulun. Alt uç s/b veya her masada 2 makine.
Macbook Pro'm işte birkaç yaşında. Linux ve Windows arasında (IE tuhaflıkları) vms'nin yanı sıra birkaç web tarayıcı ve terminal açıkken, OSX çıkrık çok şey gösterir. Tahmin et döndüğünde ne yaptığımı, oturuyorum ve bekliyorum. Bu durumda, yavaş bir makine üretkenliği yavaşlatır.
Geliştiricilerin mevcut en iyi geliştirme sistemine ihtiyaç duyduklarını söylüyorum - ama bu mutlaka en hızlı anlamına gelmiyor. Örneğin gürültüyü minimumda tutmak için tamamen pasif soğutmalı modern ancak nispeten yavaş bir sistem anlamına gelebilir.
Bir şey - bir geliştirme sistemi oldukça yeni olmalı ve kesinlikle birden fazla çekirdeğe sahip olmalıdır.
Eski bir PC, gösteri-performans-sorunları-erken bir şekilde çekici gelebilir, ancak örneğin bir Pentium 4, mevcut bazı yongalardan daha hızlı (çekirdek başına) olabilir. Bunun anlamı, bir geliştiriciyi bir P4 sistemi kullanmakla sınırlayarak (aslında şu anda kullandığım şey - bu benim kişisel bütçeleme sorunum olsa da) ...
Ayrıca, sanal makineleri iyi destekleyemeyecek kadar sınırlı bilgisayarlarla ilgili sorunlar da vardır - ör. birden fazla platformda test etmek için.
Cevap ortada yatıyor.
Geliştirme ortamını çalıştırmak için bir hızlı kutuya sahip olun (örneğin Eclipse)
Ve çıktıyı test etmek için başka bir yavaş kutu. Bu özellikle web uygulamaları için önemlidir.
Yan yana ekranlar, her kutu için bir tane.
Kod çıkış kutusunda kabul edilebilirse, çoğu kullanıcı için kabul edilenden daha fazla olacaktır.
Hızlı geliştirici kutuları programcıları tembel yapar. Örneğin, her ihtiyaç duyulduğunda DOM'da bir öğe aramak. Bir kez bulun ve sonucu önbelleğe alın.
IE 6 çalıştıran yavaş bir kutudaki farkı gerçekten farkedeceksiniz.
Bu teori basit fikirlidir ve modası geçmiş. O günlerde doğruydu.
Pentium öncesi bilgisayarımda Turbo Pascal eşyalarımı mikro-optimize etmek için daha fazla zaman harcadığımı hatırlıyorum. Y2K'dan önce mantıklıydı, o zamandan beri çok daha az. Günümüzde 10 yıllık donanım için optimizasyon yapmıyorsunuz. Darboğazları bulmak için yazılımı test etmek yeterlidir. Ancak buradaki herkesin arttığı gibi, bu geliştirici (ve dolayısıyla optimizasyon) verimliliğinin üretkenlik anlamına gelmesi, onlara geliştirme için eski donanımlar vermekle bağıntılı olduğu anlamına gelmez.
1) Bir geliştiriciye daha yavaş bir makine verirsem, sonuçta ortaya çıkan kodun daha hızlı veya daha verimli olabileceği anlamına mı gelir?
Hayır. İyi Geliştiriciler şımarık. Şirketinizde kötü araçlar aldıklarını görürlerse, başka bir yerde çalışmaya gidecekler. (İyi geliştiriciler genellikle başka bir yere gitme seçeneğine sahiptir)
Bu sorunun cevabı kime sorduğunuzdan bağımsız olarak yankılanan bir "HAYIR" değil mi?
Grafik sanatçılarınıza daha yavaş bir makine verilip verilmeyeceklerini sorun.
Yazarlarınıza daha hızlı bir makineden daha yavaş bir makine seçip seçmeyeceklerini sorun.
Yönetici asistanlarınıza daha yavaş mı yoksa daha hızlı bir makineyi mi tercih edeceklerini sorun.
Hepsi daha hızlı bir makine ile daha üretken olacaklarını söyleyecekler.
Profil deneyimini ancak yavaş bir makine kullanırken hayal edebiliyorum. Amanın.
Kısacası. Asla.
Ayrıca ana makinenizde 2 gb, VM için 1 ve VM için ihtiyaç duyulan fazladan bellek için 1 gb ve belleğiniz olması için en az 4 gb ram'a sahip olun. rotadan.
Ayrıca iki işlemci bir zorunluluktur, bu yüzden bir uygulama CPU'yu kilitlerse/yerse geliştiricinin acılı bir şekilde ctrl-alt-del yoluna gitmesi gerekmez.
Buradaki akışa karşı çıkalım: EVET. Ya da en azından bu onlarca yıldır endüstrideki genel bilgelikti (tabii ki, kraliyet gibi davranılmadığında her zaman sinirlenen ve en son gadget'ları ve bilgisayarları alan geliştiriciler arasında).
Tabii ki, geliştiricinin makinesini azaltmanın iş performansına zarar vereceği bir nokta var, çünkü işini yapmak için çalışması gereken uygulamaları çalıştırmak çok yavaş oluyor. Ancak bu nokta, 6GB RAM, 2 4GB video kartı, üst düzey ses kartı, 4 ekran vb.Gibi 10000 $ + bir bilgisayardan oldukça uzak.
İşte hiç yüksek kaliteli bir makinem yoktu ve iyi olduğu sürece beni asla önemli ölçüde yavaşlatmadı (ve beni nasıl yavaşlattıklarını gösterdiğimde birkaç gerçek alt standart makine hızla değiştirildi).
Geliştiricinizin yavaş kod yazdığı ve hedef dağıtım ortamını bilmediği için intikam almak veya cezalandırmak istemiyorsanız, geliştirici makinesindeki çalışma zamanı hızı çok önemlidir.
Yönetici olarak, geliştiricilerin projenin amacını bildiklerinden ve daima yolda olduklarından emin olmalısınız. Tartıştığımız hedef makine sorunu hakkında, yavaş makine üzerinde erken ve sık sık test yapılarak önlenebilir, onlara yavaş makine kullanmaları ve acı çekmeleri değil.
Çoğu programcı kod ve test yöntemini kullandığından yavaş çalışma zamanı hızı da gelişimi yavaşlatır. Çalışma süresi yavaşsa görevleri de yavaş olacaktır.