Tüketici uygulamalarında kötü performansa ne sebep olur? [kapalı]


32

Benim Comcast DVR sinir bozucu bir düğme-ezme deneyim haline televizyon izleme basit bir görev haline, her uzaktan kumanda basışı için yanıt verdiklerini en az üç saniye sürer. İPhone'umun metin mesajlarını görüntülemesi ve iPod uygulamasını açmaya çalıştığım sürelerin crash çökmesi en az on beş saniye sürüyor; basitçe bir e-posta almak ve okumak çoğu zaman bir dakikadan fazla zaman alır. Arabamdaki navcom'un bile duygusal ve tepkisiz kontrolleri var, aralarında birkaç saniyeden daha az zaman harcarsam, genellikle art arda gelen girdileri yutuyor.

Bunların tümü, kullanılabilirliği en üst düzeyde olması gereken sabit donanımlı son tüketici cihazlarıdır, ancak hepsi temel duyarlılık ve gecikme süresinde başarısız olmaktadır. Yazılımları çok yavaş .

Bunun arkasında ne var? Teknik bir problem mi yoksa sosyal bir problem mi? Kim ya da ne sorumlu?

Bunların hepsi yerel kodlardan ziyade yönetilen, çöp toplanan dillerde yazılmış mıydı? Bu cihazlar için yazılımı yazan bireysel programcılar mı? Tüm bu durumlarda, uygulama geliştiricileri, hangi donanım platformunu hedeflediklerini ve yeteneklerini tam olarak biliyorlardı; dikkate almadılar mı? "Optimizasyon tüm kötülüklerin kökenidir" diye tekrar ederek etrafta dolaşan adam, onları yoldan saptırdı mı? Tüm bu milisaniyeler dakikaya kadar ekleyene kadar her seferinde "ah, sadece ek 100ms" zihniyeti miydi? Bu ürünleri ilk etapta satın almak benim suçum mu?

Bir noktada zaman açıkça "performans önemli değil, ah, kod hızı hakkında endişelenmeyin" Bu tek cevap öznel bir soru, ama sık sık söyleyerek burada bu kadar çok yanıtları görmek sinirli değilim yapar için olsun Yavaş, tepkisiz, korkunç bir deneyime kapışan son kullanıcı.

Peki, bu ürünler için hangi noktada işler ters gitti? Programcılar olarak bu acıyı kendi müşterilerimize vermemek için ne yapabiliriz?


4
İşlerin yanlış gittiğini düşünüyorsun. Bir noktada birisi "bu yeterince iyi" dedi ve ürünlerini gönderdi. Son kullanıcılar kabul ederse, işte orada. (Doğru olduğunu söylemiyorum, ama şimdi gemi ile asla gemi arasında bir denge olmalı.)
Michael Todd

3
@Michael: Bu, "bu cihazları satın almamdaki hatam" ya da daha genel olarak "bu kibirlik seviyesini kabul etmek için tüketiciler olarak bizim hatamız" ile uyumlu görünüyor.
Crashworks

3
@ Crashworks: Evet, hemen hemen. Satın almaya devam etmezsek insanlar crapware satmaya devam edemezler.
Mason Wheeler

4
Modern, çöp toplanmamış şirketlerde geliştirildiler.

2
"Bunların hepsi yönetilen, çöp toplanan dillerde yazılmış olduğu için mi?" "Bunların hepsi yöneticiler tarafından seçilen çöp dillerinde yazılmış olduğu için mi?"
Carlos Campderrós

Yanıtlar:


27

İyi soru. Günlük gördüğüm şey bu.

İnsanlar iyi uygulamalar üzerinde çalışıyor. Çalışırken, performans sorunları tıpkı böcekler gibi içeri giriyor. Aradaki fark - böcekler "kötü" - "beni bulup düzelt" diye haykırdılar. Performans sorunları sadece orada oturup daha da kötüye gidiyor. Programcılar sık sık "Bir düşün benim kod performans sorunu olmazdı. Aksine, yönetim bana yeni / daha büyük / daha hızlı makineyi satın almak gerekiyor."

Gerçek şu ki, eğer geliştiriciler periyodik olarak sadece performans problemlerini araştırıyorsa (ki bu gerçekten çok kolay ) basitçe temizleyebiliyorlardı.

Bunun yerine, "sanatın durumu":

  1. "eschew premature optimization" ve 90/10 hoo-haw gibi aforizmalara güveniyor.
  2. Profil oluşturma hakkında cesurca konuşun ve bazen gerçekten hayal kırıklığı yaratan sonuçlarla deneyin, bununla ilgili tüm SO sorularında gördüğünüz gibi.
  3. tecrübe ve bilgi kılık değiştirmiş eski güzel tahminlere geri dönelim.

Ama gerçekten, bu olumsuz. Olumlu olmak gerekirse, bu yöntem neredeyse her zaman işe yarar ve daha kolay olamazdı. İşte detaylı bir örnek .


3
Mike, bir gün sen ve ben birlikte örneklenmiş profilleme üzerine bir kitap yazmak zorunda kalacağız; performans programlamasının "Katedrali ve Çarşısı" olacak.
Crashworks

@Crashworks: Bu eğlenceli olurdu. Eğer ciddiysen, bana bir çizgi bırak.
Mike Dunlavey

@Mike Tabii, ama yaz sonunda, sanırım - zaten GDC'ye borçlu olduğum çok sayıda makale ve yazı biriktirdim, #AltDevBlogADay ve kendi işverenim!
Crashworks

Genel olarak katılıyorum. Ancak hesaplama karmaşıklığı hakkında düşünmeyen insanlar tarafından suistimal edilmesine rağmen, tek başına gerçek performans, "erken optimizasyon tüm kötülüğün kaynağıdır" (bunu söyleyen herkesin tam sürümü okuması gerekir) ve 90/10 kuralı "iyileştirme" deme ama "verimli bir şekilde optimize et" deme. Hiç kimse bir milisaniye kapalı başlatma kodunu tıraş etmekten hiçbir şey alamaz; her bir çizgiyi mümkün olduğunca performans gösterme niyeti ile kod yazmak, sadece ilgili performans problemlerini

@delnan: Rastgele duraklatma kullandığımı ilk hatırladığımda, "durma" ve "adım" paneli düğmelerine sahip bir Raytheon mini'de '78 civarında. Bunu yapmanın başka bir yolu olduğunu düşündüğümü hiç hatırlamıyorum. Bu yüzden, büyük-O önemli olsa da, ilk önce programın kendilerine nerede konsantre olacaklarını söylemeden insanların gerçek yazılımda optimizasyonu nasıl tartışabileceklerini bile mistik ediyor.
Mike Dunlavey

16

Bu teknik bir problem değil, bir pazarlama ve yönetim problemi.

Bu noktada gözlerini yuvarlıyor olabilirsin, ama lütfen benimle kal.

Bir şirketin sattığı şey "ürünleri" ve bunun ne olduğunu "ürün yöneticileri" olarak tanımlayanlar. Teknoloji firmalarında, bu konuda çok fazla insan tartıştı - kullanıcı deneyimi uzmanı yadda yadda. Ancak, sonuçta, ürün yöneticileri, kullanıcının ne alması gerektiğine ilişkin özellikleri yazmaktan sorumludur.

Öyleyse Comcast DVR'nizi alalım. İdeal olarak, işler böyle işe yarar:

  1. Ürün yöneticisi, "Bir kullanıcı uzaktan kumandadaki bir düğmeye bastığında ve DVR'nin 25 feet yakınında olduğunda, DVR basına 250 milisaniye içinde yanıt vermelidir" şeklinde yazıyor.
  2. Teknik elemanlar donanımı inşa eder, gömülü yazılımı vb. Yazar.
  3. KG test uzmanları ya sistemin şartnameye uygun olduğunu onaylar ya da bir düzeltme için teknik ekibine geri döner.

Tabii ki, birçok şey yanlış gidebilir:

  • Ürün yöneticisi teknik özelliklere düğme yanıtı veremiyor
  • QA milleti şartnameye karşı test yapmak için vasat bir iş yapıyor
  • Birisi, özelliklerin karşılanmasına izin vermeyen teknolojiler seçti, bu nedenle gereksinim ortadan kalktı
  • Teknik kadro kısaca verildi ya da birisi programı hızlandırdı ve bazı menajerler "Yanıt vermeyi unut - bu diğer özelliğin bitmesini sağla" diyor.
  • Ürün menajeri, cevap verme şartını oyunda bu kadar geç yayınlamıyor, gönderim tarihine kadar yerine getirilemiyor
  • Yönetim, QA testi için bu kadar geç bir şey sunmamaya karar verdi ve yavaş kodu hızlandırmak ürünü dengesiz hale getirdi

İçerideki bütün acımasız programcıları gördün mü? Hiç yoktu.

Kötü performans konusunda hiçbir sorumluluk üstlenmeyeceğimizi söylemiyorum - çoğu zaman, önemsiz yazmak için olduğu kadar iyi, sağlam, verimli bir kod yazmak kadar kolay ve hızlıdır.

Ancak, ürün yönetimi ve KG personeli tümüyle direksiyon başında uyuyorsa, programcıların bunu telafi edemeyiz.


FWIW, çoğu tüketici ürününün berbat arayüzleri hakkında tamamen katılıyorum. Yaklaşık 25 yıldır UI kodu yazıyorum ve zarafet ve sadelik için çabalıyorum. Bu aslında bir sorun çünkü ben çok fazla düşünüyorum, artık kötü tasarlanmış kullanıcı arayüzlerini bulmaktan çok çaresizim, bu yüzden zavallı karım medya merkezimizdeki çoğu cihazı çalıştırıyor.


+1 - Son ürünlerdeki problemler (hatalar veya performans) asla programcılara yüklenemez. Bir ürün gerekli çoklu test seviyelerini geçerse, programcı işini doğru bir şekilde yapmıştır. Bir ürün testleri geçerse ve bununla ilgili sorunlar varsa, o zaman test / şartname suçludur.
Qwerky

5
+1 Güzelce yazılmış, özellikle ürün yönetimi vb. Hakkında. Ancak sorumluluğu kabul etmiyorum. Programcıları eğiten insanlara koydum, programcıların performans hatalarını nasıl bulacağını (ve doğruluk hatalarına kıyasla ne kadar kolay olduğunu) bilmiyorum.
Mike Dunlavey

1
@Mike: Oldukça doğru. İlk başrolümde, raporlarımdan biri Stanford’dan yeni bir MSCS almış olan ve yalnızca “doğru” kod yazması öğretilen bir adamdı ve iki seviyeli basit bir iç içe döngü beklediğim için çok garip olduğumu düşünüyordu. CPU'yu çok görevli bir ticari üründe oksijen için soluyarak dizlerinin üzerine bırakmamak. Orada yapılacak küçük bir rehberlik vardı. :-)
Bob Murphy

11

Çünkü programcılar mükemmel değildir.

Ben gömülü şeylerin programcısıyım. Kodumun bazıları mükemmel değil. Katıştırılmış kodumun çoğu hızlı.

Bir projenin sonunda performans sorunlarını gidermek çok zordur.

Bazen, işleri basit tutmak (ve bu nedenle test edilebilir, gerçekçi zamanda geliştirilebilen, ölümcül olmayan bir şekilde değil) yapmak için, uzaktan giriş gibi ana uygulamanın parçası olmayan bir "hizmete" olan şeyleri katmanlandırıyoruz. Sonuç, gecikme. Alternatif, her şeyi monolitik bir uygulamaya koymaktır, C veya C ++ 'da (iki en yaygın gömülü dil) buggy felaketidir.

Bazen gömülü cihazınızda, kullanıcı istediğinizi yapmayan bir işlem zamanlayıcı bulunur. Gömülü bir geliştirici olarak düzeltmek için çok zor.

Karmaşıklık, katmanlaşmadaki gecikme nedeniyle gecikmeye neden olur. Özellikleri sen istedin. Gerçekten eski bir Nokia'yı deneyin, eski 3210 gibi. Zippy fast UI. Çok fazla özellik yok.

Geliştiricilerin daha akıllı olmadıklarını, bu yüzden özelliklerin birbirlerini öldürmesini önlemek için daha hızlı bir donanımın soyutlamaları absorbe ettiğini düşünüyorum. (Ya da iPhone'unuzda değil)

UI performansının, tasarım ilerledikçe test etmek için bir gereksinim olması gerekir.

Belirtilmezse, geliştirici buna alışır. Bunu hepimiz yapıyoruz. "Bebeğim çirkin değil"

Ve bu GC dilleri değil; Gömülü Realtime Java çok hızlı, korkutucu. (Öte yandan gömülü Python toplam bir köpektir)

Bir programı yazıyorum, okunan UI dijital girişleri açıyor. Yine de düğmeyi geri çevirmek zorundasınız, bu yüzden gerçekten hızlı bir şekilde geçiş yapmak, düğmenin kaldırılması birkaç kat yukarı olduğu için çalışmıyor. İdeal olarak, üretici yazılımı yığınının altındaki mantıktan çıkmış bir mantığa sahip olurdum, ancak donanım böyle değil.

Bazı DVD oynatıcılar, çıkartmak için yalnızca bir "çıkart" komut dosyasını çalıştırır. DVR, geliştirme maliyetlerini akıllı tutmak için bu yaklaşımı benimsemiş olabilir. Sonra CPU ya da RAM'e eksik ve berbat.


1
+1 Özellikle "Bebeğim çirkin değil" ve debouncing şeyleri için. Gömülü bazı işleri geri aldığımda yaptım (Pascal'da buna inan). Bir zamanlar videodaki kayan nokta sayılarını boyayordu ve acı çekiyordu. Bir haftasonu ICE'ye taktım, bir yığın çekip aldım (altıgen) ve şaşırttım. Kayan nokta öykünücüsüydü, her basamağı bölerek, keserek, çarparak, çıkararak, vs. çıkararak soyan bir rutinden çağrılıyordu. Ve elbette benim kodumdu . (Bunu yapmak için daha iyi bir yol buldum.)
Mike Dunlavey

3

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.

Bu gerçekten kapsamlı ve iyi düşünülmüş bir cevap! Tesadüfen bu temayı, temanın "# 1 A öncelikli hata: gecikme> 60ms, 33ms, ZOMG !!! 1!" Olduğu bir ekip toplantısından döndükten sonra okudum.
Crashworks

1

İlk hatan ve muhtemelen neden aşağı oy kullandığın açıkça bariz abartıyı hak ediyor. İPhone ve iPad'in bu kadar kötü olduğuna inanmayı umuyor musunuz?

Nihayetinde müşteri sorumludur. Maliyete, müşterinin ne ödemeye hazır olduğunu ve karşılığında ne aldığını gösterir. Hızın üzerindeki özellikleri seçerlerse, elde ettikleri de budur. Hız üzerinden fiyat seçerlerse, inşa edilen ve satılan şey budur. Eğer marka imajı daha önemliyse ..... Müşteri nihayetinde cüzdanına, neyin önemli neyin önemli olduğuna karar verir. Herkesin yaptığı, ya da bağımsız bir düşünür olduğu, parlak ve pazarlama yutturmaca arkasına bakmak ve ihtiyaçlarınızı karşılayacak bir şey satın almak, çünkü bir marka fahişe ve ürün satın almak için bir seçeneğiniz var.

Programcıları suçluyorsun. Kodu yazdılar, elbette, ancak müşterilerin gereksinimlerini, donanımını, ürün reçetesi maliyetini, AR-GE maliyetini, pazarlama bütçesini tanımlamamış ve tanımlamamalılar… bir ürün yapmaya giden her şeyi , bu yazılım değil.

Kullanılan teknolojiler, kullanılan diller vb. Bununla hiçbir ilgisi yoktur. Kötü vs iyi geliştiriciler, onunla ilgisi yok. Herhangi bir yarı saygın programcı daha hızlı çalışabilir, daha hızlı yanıt verebilir, en üst düzeyde olabilir. Tecrübelerim iyi bir programcı kararları almak için bırakıldığında işi iflas etmiyor, yarısı iyi olanlar ise ne kadar "daha iyi" olması gerektiğinden şikayet ediyor.


2
İPhone numaralarım abartı değil; Kendi telefonumu kullanırken saniyeleri yüksek sesle saydım. Youtube.com/watch?v=Pdk2cJpSXLg adresinde , bu konuyla ilgili mizahi (daha az aşırı) bir tasvir vardır . Ayrıca, aldığımda telefonum iyiydi! Telefonları seçerken performansı dikkatlice değerlendirdim. Ancak, Apple'dan kullanılamayacak hale gelen her bir bellenim güncellemesi ile yavaşladı ve yavaşladı. Sanırım Apple'ın güncellemelerini yüklemek benim suçum olabilir.
Crashworks

Programcıları büyük ölçüde suçluyorum - ticari uygulamaları sürekli hatalar ve korkunç kullanım durum analizi ile görüyorum, işlerinde herhangi bir yeterliliği veya gururu olan hiçbir geliştiricinin, kimin için çalıştığından bağımsız olarak, asla serbest bırakmayacaklarını görüyorum - bu insanlar mesleğimize karşı bir utanç.
Vektör

1

Erken optimizasyon bazen kötüdür, ancak yeterince kısıtlı bir sistemde iyi bir kullanıcı deneyimi veya iyi bir batarya ömrü için gerekmediğinde gerekli değildir. Başarısızlık, iyi bir kullanıcı deneyimi ve iyi bir batarya ömrü sağlamak için, bir projenin başlangıcında, bakımı zor ve kısa olsa bile, bir projenin başlangıcında daha yüksek bir öncelik olarak iyi bir batarya ömrü sağlamak için ne kadar olursa olsun pişirme konusunda temiz bir yazılım mühendisliği temizliği için daha yüksek bir öncelik verme hatasıdır. temiz bir şekilde tasarlanan bazı yazılım yığınlarını ve metodolojilerini devreler.

Bir iPhone 3G'niz varsa, Apple yalnızca daha yeni cihazlar için optimize edilmiş bir kaç işletim sistemi güncellemesi yayınladı. Daha sonra 3G için yapılan OS güncellemeleri, 3G'de biraz daha iyi performans sağlayabilir.


1
"Erken optimizasyon bazen kötüdür, ancak iyi bir kullanıcı deneyimi için gerekli olduğunda değil", o zaman erken optimizasyon değildir
Carlos Campderrós

1
Bazen, optimizasyon gerektiren gerçek darboğazları ölçmeden önce pek çok şeyi optimize etmeye başlamanız gerekir; aksi halde sistem, programlamayı ve performansı karşılayan optimizasyon sonrası yanlış tasarladı.
hotpaw2

0

DVR’niz kanalları değiştirmek için uzun zaman alıyor çünkü ilk önce tamponlanmış verileri atıyor ve ardından izlemekte olduğunuz yeni kanal için veri dolu bir başka tamponu sıraya sokuyor. Bu arabellek büyük olasılıkla sabit sürücüde depolanır, bu nedenle bu işlemler zaman alır (ayrıca arabellek yalnızca gerçek zamanlı olarak doldurulabilir). Bir DVR ile asla "canlı" programlamayı izlemiyorsunuz, her zaman erteleniyor (tesadüfen değil, kanalları değiştirirken algıladığınız gecikmeyle aynı zamanda erteleniyor). Bu, bir radyo programını dinlerken aynı zamanda bir spor programını izleyerek kolayca doğrulanabilir.


Bahsettiğim şey bu değildi - DVR'mla ilgili problemim, herhangi bir işleme, menülerinde bile olsa, herhangi bir işleme yanıt vermenin birkaç saniye sürmesi. Örneğin, ana menüsünde geziniyorsam (bir şov izlemiyorsanız) ve uzaktan kumandada AŞAĞI düğmesine basarsam, ekran vurgusu bir öğe aşağı hareket etmeden önce birkaç saniye sürebilir. Bir şovu izlerken 'duraklat'a basarsam, duraklamadan önce beş saniyelik bir gecikme olur. Bir kayıt programlamaya gidip kılavuzda sayfa yukarı ve aşağı gittiğimde, düğmeye her basışında ekranı kaydetmek ve değiştirmek çok uzun sürüyor.
Crashworks

Bu ifadeye katılmıyorum. AT&T Uverse'den Comcast'a yeni geçiş yaptıktan sonra, Comcast için DVR'ın Uverse kutusuna kıyasla inanılmaz derecede yavaş olduğunu keşfettim. Bu gecikme nedeni olabilir, ancak kutunun yavaş olmasının tek nedeni olacağı anlamına gelmez.
Jetti,

-2

Bunun nedeni, tüketiciye yönelik uygulamaların çoğunun, yazılım hakkında hiçbir şey bilmeyen insanlar tarafından kontrol edilip pazarlanması ve geliştiricilerin özgeçmişlerine veya gerçek olmayan becerilerinin, bilgisinin aksine, hiçbir işe yaramayan yöneticisinin tavsiyelerine dayanarak işe alınmasıdır. .


2
Bir açıklama yapılmadığında, bir başkasının aksi bir görüş bildirmesi durumunda bu cevap yararsız olabilir. Örneğin, eğer birileri "uygulamalar geliştiricileri işe alan harika insanlar tarafından kontrol ediliyor ve pazarlanıyor" gibi bir iddia yayınlarsa , bu cevap okuyucunun karşıt olan iki görüşü seçmesine nasıl yardımcı olur? Düşünün düzenlemek daha iyi bir şekle ing
tatarcık
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.