Bunların hepsi yerel kodlardan ziyade yönetilen, çöp toplanan dillerde yazılmış mıydı?
Hayır. Yavaş kod ne olursa olsun kötü performans gösterir. Elbette, belirli bir dil başkalarını çözerken bazı problem sınıflarını ortaya çıkarabilir. Fakat iyi programcılar, yeterince zaman verilen geçici çözümleri bulma konusunda oldukça yeteneklidirler.
Bu cihazlar için yazılımı yazan bireysel programcılar mı?
Kısmen. Çoğu durumda, en azından katkıda bulunan bir faktör oldukça muhtemeldir. Bu, iyi programcıların yüksek talep ve yetersiz arzda olduğu bir sektörün talihsiz bir yan etkisidir. Ayrıca, çeşitli teknik yetenek seviyeleri arasındaki uçurum oldukça büyük olabilir. Bu nedenle, bazen belirli yazılımları uygulamakla görevlendirilen programcıların sadece işe yaraması için tebrik edilebilir (bir nevi).
Tüm bu durumlarda, uygulama geliştiricileri, hangi donanım platformunu hedeflediklerini ve yeteneklerini tam olarak biliyorlardı; dikkate almadılar mı?
Kısmen. Başlangıç için, kesin donanım platformu büyük olasılıkla bilinmemektedir, çünkü bu yazılım geliştirme sırasında çeşitli üreticilerle paralel olarak sıklıkla görüşülür. Aslında, ilk piyasaya sürüldükten sonra altta yatan donanımda küçük (ancak mutlaka önemsiz olmayan) değişiklikler olabilir. Ancak, genel yeteneklerin bilineceğine katılıyorum.
Sorunun bir kısmı, yazılımın muhtemelen donanım üzerinde geliştirilmemesi, öykünücüler içinde yapılmasıdır. Bu, emülatörler% 100 doğru olsalar bile gerçek cihaz performansını hesaba katmayı zorlaştırır - ki bu değildir.
Elbette bu, piyasaya sürülmeden önce uygun prototip donanımı üzerinde yetersiz test yapılmasını haklı göstermez. Bu suçlama muhtemelen dev / qa kontrolünün dışında yatıyor.
"Optimizasyon tüm kötülüklerin kökenidir" diye tekrar ederek etrafta dolaşan adam, onları yoldan saptırdı mı?
Hayýr. Her halükarda onu dinlemeyeceðinden eminim; Aksi takdirde o kadar sık yanlış sorgulanmayacaktı (“ erken optimizasyon olması gerekiyordu ”). :-D
Optimizasyon konusunda çok fazla sayıda programcının 2 uçtan birini alması daha olasıdır.
- Ya ya tamamen görmezden gelirler.
- Ya da gerçek performans gereklilikleri ile ilgisi olmayan minutelere kendilerini takıntılı hale getirirler . Bütçenin tükenmesi ve kodun gerçek performans sorunlarını güvenli bir şekilde optimize etmek için fazla karışık olması net etki .
Tüm bu milisaniyeler dakikaya kadar ekleyene kadar her seferinde "ah, sadece ek 100ms" zihniyeti miydi?
Muhtemelen. Açıkçası Sleep(100)
, kesilmiş bir uzuv kanamasını yavaşlatmak için kullanılan kağıt mendilinin eşdeğeri olarak kullanılmışsa - o zaman problemler beklenir. Ancak, sorunun bundan daha ince olduğundan şüpheleniyorum.
Mesele şu ki, modern bilgisayar donanımı (gömülü cihazlar dahil), insanların kendilerine verdiği kredilerden çok daha hızlı. Çoğu insan, hatta "deneyimli" programcılar bile bilgisayarların ne kadar hızlı olduğunu takdir edemezler. 100ms uzun bir zaman - çok uzun bir zaman . Ve olduğu gibi, bu "çok uzun zaman" 2 yolu keser:
- Birincisi, programcıların gereksiz yere bilgisayar son derece hızlı bir şekilde yaptığı şeyler için endişelenmeleridir. (Öyle ki, beni ilk etapta buraya getiren " saniyede 300 kez bir değer artışı " gibi bir endişe yaşandı .)
- İkincisi, bazen işler çok uzun sürdüğünde (hesaplama zaman çizelgesinde) zaman zaman endişe göstermedikleridir. Yani:
- bir ağ üzerinden veya bir depolama aygıtıyla iletişim kurarken gecikmenin etkilerini yok sayarlarsa;
- engellenen ve başka bir iplik bekleyen bir dişlinin etkisini görmezden gelirlerse;
- Bilgisayarlar çok hızlı çalıştığı için bunu unuturlarsa, geliştiricinin bir sorundan haberi olmadan bir işi gereğinden çok daha sık tekrarlayabilmesi çok yeteneklidir.
- ... bu tür denetimlerin herhangi bir kombinasyonu meydana gelirse, rutin beklenmedik şekilde çok yavaş çalışacaktır (hesaplama zaman çizelgesinde). Birkaç defa tekrarlanır ve insanlar tarafından bile fark edilir - ancak birbirleriyle yüzleşmek zor olabilir çünkü birbiriyle bağlantılı yüzlerce şey kendiliğinden çabucak bitiyor.
Bu ürünleri ilk etapta satın almak benim suçum mu?
Evet kesinlikle. Kişisel olarak değil, genel olarak tüketiciler. Ürünler özellik kontrol listeleri ile satılmaktadır (ve satın alınmaktadır ). Çok az tüketici daha iyi performans talep ediyor.
Amacımı göstermek için: En son bir cep telefonu almak istediğimde, mağaza mağazada oynamak için bir demo model bile sunamadı. Tüm bunlar ekranın nasıl görüneceğini göstermek için çıkartmalarla plastik kabukları vardı. Böyle bir ağırlık için bir his bile elde edemezsiniz - tek başına performans ya da kullanılabilirlik. Demek istediğim, eğer bu iş modeline yeterince insan itiraz etmiş ve itirazlarını dile getirmek için cüzdanlarıyla oy kullanacak olursak, doğru yönde küçük bir adım olacağız.
Ama onlar değil, biz değiliz; ve her yıl yeni cep telefonları daha hızlı donanım konusunda daha yavaş çalışıyor.
(Sorular sorulmadı.)
- Pazarlama insanları suçluyor mu? Kısmen. Çıkış tarihlerine ihtiyaçları var. Ve söz konusu tarih geldiğinde, "işe koyulması" ile "daha hızlı hale getirme" arasındaki seçim hiç akıllıca olmaz.
- Satış insanları suçlu mu? Kısmen. Kontrol listesinde daha fazla özellik istiyorlar. Özellik listelerini düzenler ve performansı yok sayarlar. Onlar (bazen) gerçekçi olmayan sözler veriyorlar.
- Yöneticiler suçlu mu? Kısmen. Deneyimsiz yöneticiler birçok hata yapabilir, ancak çok deneyimli yöneticiler bile performans sorunlarını diğer kaygıları lehine çözmek için zamandan fedakarlıkta bulunabilir.
- Özellikler suçlu mu? Kısmen. Bir şey belirtimin dışında bırakılırsa, daha sonra "unutmak" çok daha kolaydır. Özel olarak belirtilmemişse, hedef nedir? (Kişisel olarak bir takımın çalışmasıyla gurur duyması halinde performansından bağımsız olarak endişe duyacaklarına inanıyorum.)
- Eğitim suçu mu? Olabilir. Eğitim muhtemelen her zaman arkada olacak. Yeni başlayanları, yüzeysel bir anlayış yazılımı geliştirmesiyle hızla sonuçlandıran “eğitimi” kesinlikle reddediyorum. Bununla birlikte, teori ile desteklenen ve bir öğrenme kültürü aşılayan eğitim fena olamaz.
- Yükseltmeler suçlu mu? Kısmen. Yeni yazılım, eski donanım gerçekten kaderi cezbediyor. X sürümü piyasaya sürülmeden önce bile, X + 1 planlıyor. Yeni yazılım uyumlu, ancak eski donanım yeterince hızlı mı? Test edildi mi? Belirli bir performans düzeltmesi yeni yazılıma dahil edilebilir - bu da tavsiye edilmeyen bir yazılım yükseltmesini teşvik eder.
Temel olarak, birçok katkıda bulunan faktör olduğuna inanıyorum. Yani, ne yazık ki düzeltmek için gümüş kurşun yok. Ancak bu, mahkum ve kasvet demek değildir. İşlerin geliştirilmesine katkıda bulunmanın yolları vardır.
Peki, bu ürünler için hangi noktada işler ters gitti?
IMHO, tek bir noktayı gerçekten tanımlayamıyoruz. Zaman içinde gelişen birçok katkıda bulunan faktör vardır.
- Fasulye sayaçları: maliyet düşürme, piyasa zamanlaması. Fakat yine de baskı olmadan elde ettiğimiz ilerlemeleri başarır mıydık?
- Endüstride yüksek talep ve düşük vasıflı insan kaynağı. Sadece programcılar değil, yöneticiler, test edenler ve hatta satış görevlileri de. Beceri ve deneyim eksikliği hatalara yol açar. Ama sonra tekrar öğrenmeye de yol açar.
- Kanama teknolojisi. Bir teknoloji olgunlaşana kadar beklenmedik şekillerde düzenli olarak ısırır. Fakat yine de, ilk başta, çoğu zaman birçok avantaj sağlamıştır.
- Bileşik komplikasyon. Zaman içinde endüstri gelişti: daha fazla araç, teknoloji, katman, teknik, soyutlama, donanım, dil, çeşitlilik, seçenek ekleme. Bu, “tam” bir modern sistemler anlayışına sahip olmayı biraz imkansız hale getirir. Ancak, sonuç olarak çok daha kısa sürede çok daha fazlasını yapabiliyoruz.
Programcılar olarak bu acıyı kendi müşterilerimize vermemek için ne yapabiliriz?
Yardımcı olabilecek birkaç önerim (hem teknik hem teknik olmayan) var:
- Mümkün olduğu kadar yumuşak olarak - kendi ürününüzü kullanın. Garip, yavaş ya da uygunsuz olan şeyleri ortaya çıkarmak için ilk elden deneyim gibisi yoktur. Ancak, “içeriden edinilen bilgiler” nedeniyle eksiklikleri atlayarak bilinçli olarak kaçınmanız gerekecektir. Örneğin, bir arka kapı Python betiği ile yaptığınız için kişileri senkronize etmekte sorun yaşamazsanız - "ürünü" kullanmıyorsunuzdur. Bir sonraki noktaya değinen ...
- Kullanıcılarınızı dinleyin (tercihen ilk elden, ancak en azından ikinci elden destek yoluyla). Programcıların (genellikle) gizli kalmayı ve insan etkileşiminden kaçınmayı tercih ettiklerini biliyorum; ancak bu, ürününüzü kullanırken diğer kişilerin yaşadığı sorunları keşfetmenize yardımcı olmaz. Örneğin, menü seçeneklerinin yavaş olduğunu fark etmeyebilirsiniz, çünkü tüm kısayolları biliyorsunuz ve bunları yalnızca kullanıyorsunuz. Kılavuz tüm kısayolları eksiksiz bir şekilde belgelese bile, bazı insanlar yetersiz bir şekilde olmasına rağmen menüleri tercih edeceklerdir.
- Teknik beceri ve bilginizi sürekli olarak geliştirmek için gayret gösterin. Öğrendiğiniz her şeyi eleştirel olarak analiz etme becerisini geliştirin. Bilginizi düzenli olarak yeniden değerlendirin. Bazı durumlarda, bildiklerini düşündüğünüzü unutmaya hazır olun. Hangi getiriyor ...
- Bazı teknolojiler / teknikler, ince yanlış anlaşılmalar ve yanlış uygulamalar için çok zor olabilir. Ortak bilgi ya da mevcut araçların evrimi yoluyla diğerleri lehine ya da dışına düşebilir (örneğin, Singletons). Bazı konular öylesine zordur ki, büyük bir yanlış bilgi kaynağını yayan bir grup "hokus pokus cezalandırıcı" yetiştirirler. Benim özel bir böceği, çoklu iş parçacığı çevreleyen yanlış bilgidir. Çok parçacıklı iyi bir uygulama, kullanıcı deneyimini önemli ölçüde iyileştirebilir. Maalesef, çok diş açmaya yönelik yanlış biçimlendirilmiş birçok yaklaşım performansı önemli ölçüde azaltacak, düzensiz hataları artıracak, kilitlenme riskini artıracak, hata ayıklamayı karmaşıklaştıracaktır.
- Sahipliğini almak. (Cidden hayır, toplantı odası bingo oynamıyorum.) Bazı kontrol listesi öğelerine göre öncelikli olan performans özellikleri için yöneticiler, ürün sahipleri, satış görevlileri ile görüşün. Daha iyi spesifikasyonlar isteyin. Çocukça değil, insanların performans hakkında düşünmelerini sağlayan sorular sorarak.
- Seçkin bir tüketici olun. Daha az özelliği olan ancak daha hızlı olan telefonu seçin. (Daha hızlı CPU değil, daha hızlı UI.) Sonra övünmek ! Ne kadar fazla tüketici performans talep etmeye başlarsa, o kadar fazla fasulye tezgahı bunun için bütçelemeye başlar.