Điều gì gây ra hiệu suất xấu trong các ứng dụng tiêu dùng? [đóng cửa]


32

DVR Comcast của tôi mất ít nhất ba giây để phản hồi với mọi phím bấm điều khiển từ xa, biến nhiệm vụ đơn giản là xem tivi thành một trải nghiệm ấn nút khó chịu. IPhone của tôi mất ít nhất mười lăm giây để hiển thị tin nhắn văn bản và gặp sự cố số lần tôi cố gắng mở ứng dụng iPod; chỉ đơn giản là nhận và đọc một email thường mất hơn một phút. Ngay cả bộ điều hướng trong xe của tôi cũng có các điều khiển khó chịu và không phản hồi, thường nuốt những đầu vào liên tiếp nếu tôi làm chúng cách nhau chưa đến vài giây.

Đây là tất cả các thiết bị tiêu dùng phần cứng cố định mà khả năng sử dụng là tối quan trọng, nhưng tất cả chúng đều thất bại ở độ nhạy và độ trễ cơ bản. Phần mềm của họ quá chậm .

Điều gì đằng sau điều này? Nó là một vấn đề kỹ thuật, hay xã hội? Ai hoặc cái gì chịu trách nhiệm?

Có phải vì tất cả đều được viết bằng các ngôn ngữ được quản lý, thu gom rác hơn là mã gốc? Có phải các lập trình viên cá nhân đã viết phần mềm cho các thiết bị này? Trong tất cả các trường hợp này, các nhà phát triển ứng dụng biết chính xác nền tảng phần cứng họ đang nhắm mục tiêu và khả năng của nó là gì; họ đã không đưa nó vào tài khoản? Có phải anh chàng đi khắp nơi lặp đi lặp lại "tối ưu hóa là gốc rễ của mọi tội lỗi", anh ta có khiến họ lạc lối không? Có phải đó là một tâm lý của "oh nó chỉ là thêm 100ms" mỗi lần cho đến khi tất cả những mili giây đó cộng lại thành vài phút? Có phải lỗi của tôi, vì đã mua những sản phẩm này ngay từ đầu?

Đây là một câu hỏi chủ quan, không có câu trả lời duy nhất, nhưng tôi thường thất vọng khi thấy rất nhiều câu trả lời ở đây nói "oh, đừng lo lắng về tốc độ mã, hiệu suất không quan trọng" khi rõ ràng tại một số điểm nó không vấn đề cho người dùng cuối bị mắc kẹt với trải nghiệm chậm, không phản hồi, khủng khiếp.

Vì vậy, tại thời điểm nào mọi thứ đã đi sai cho các sản phẩm này? Chúng ta có thể làm gì để lập trình viên làm gì để tránh gây ra nỗi đau này cho chính khách hàng của mình?


4
Bạn đang cho rằng mọi thứ đã đi sai. Tại một số thời điểm có người nói "như vậy là đủ tốt" và vận chuyển sản phẩm của họ. Nếu người dùng cuối chấp nhận nó, tốt, nó có. (Không nói đúng, nhưng phải có sự cân bằng giữa tàu bây giờ và vận chuyển không bao giờ.)
Michael Todd

3
@Michael: Điều đó dường như phù hợp với "lỗi của tôi vì đã mua các thiết bị này", hay nói chung hơn, "lỗi của chúng tôi là người tiêu dùng đã chấp nhận mức độ kém chất lượng này."
Crashworks

3
@Crashworks: Vâng, khá nhiều. Mọi người sẽ không tiếp tục bán crapware nếu chúng tôi không tiếp tục mua nó.
Mason Wheeler

4
Chúng được phát triển trong các tập đoàn hiện đại, không thu gom rác.

2
Thay vì "Có phải vì tất cả đều được viết bằng các ngôn ngữ được quản lý, thu gom rác?" Tôi đọc "Có phải vì tất cả đều được viết bằng ngôn ngữ rác được chọn bởi các nhà quản lý?"
Carlos Campderrós

Câu trả lời:


27

Câu hỏi hay. Những gì tôi thấy hàng ngày là đây.

Mọi người làm việc trên các ứng dụng kích thước tốt. Khi chúng hoạt động, các vấn đề về hiệu suất leo vào, giống như lỗi. Sự khác biệt là - lỗi là "xấu" - họ kêu lên "tìm tôi và sửa tôi". Vấn đề hiệu suất chỉ cần ngồi ở đó và trở nên tồi tệ hơn. Các lập trình viên thường nghĩ "Chà, mã của tôi sẽ không có vấn đề về hiệu năng. Thay vào đó, ban quản lý cần mua cho tôi một máy mới hơn / lớn hơn / nhanh hơn."

Thực tế là, nếu các nhà phát triển định kỳ chỉ săn lùng các vấn đề về hiệu năng (điều này thực sự rất dễ dàng ) thì họ có thể đơn giản làm sạch chúng.

Thay vào đó, "trạng thái của nghệ thuật" là:

  1. dựa vào những câu cách ngôn như "tối ưu hóa sớm eschew" và 90/10 hoo-haw.
  2. nói một cách dũng cảm về hồ sơ, và đôi khi thực sự thử nó, thường với kết quả đáng thất vọng, như bạn thấy trong tất cả các câu hỏi SO về nó.
  3. rơi vào phỏng đoán cũ tốt, ngụy trang như kinh nghiệm và kiến ​​thức.

Nhưng thực sự, đó là tiêu cực. Để tích cực, phương pháp này hoạt động gần như mọi lúc, và nó không thể đơn giản hơn. Đây là một ví dụ chi tiết .


3
Mike, một ngày nào đó bạn và tôi sẽ phải viết một cuốn sách về việc lấy mẫu hồ sơ cùng nhau; nó sẽ là "Nhà thờ và chợ" của lập trình hiệu suất.
Crashworks

@Crashworks: Điều đó sẽ rất vui. Nếu bạn nghiêm túc, hãy thả tôi một dòng.
Mike Dunlavey

@Mike Chắc chắn, nhưng vào cuối mùa hè, tôi nghĩ - Tôi đã có một lượng lớn các bài báo và giấy tờ tôi đã nợ GDC, #AltDevBlogADay và chủ nhân của chính tôi!
Crashworks

Tôi đồng ý chung. Nhưng mặc dù những người thậm chí không nghĩ về sự phức tạp tính toán, hiệu suất thực tế một mình, những câu nói như "tối ưu hóa sớm là gốc rễ của mọi tội lỗi" (mọi người từng trích dẫn điều này nên đọc phiên bản đầy đủ) và quy tắc 90/10 't nói "không tối ưu hóa" nhưng "tối ưu hóa hiệu quả". Không ai có được bất cứ điều gì từ việc cạo một phần nghìn giây khỏi mã khởi tạo; viết mã với mục đích biến mọi dòng đơn thành biểu diễn nhất có thể chỉ dẫn đến một mớ hỗn độn không thể nhận ra làm mất tập trung vào việc tìm cách giải quyết các vấn đề hiệu suất có liên quan, v.v.

@delnan: Lần đầu tiên tôi nhớ sử dụng tạm dừng ngẫu nhiên là vào khoảng '78, trên một chiếc Raytheon mini với các nút bảng điều khiển "dừng" và "bước". Tôi không nhớ đã từng nghĩ rằng có cách nào khác để làm điều đó. Vì vậy, trong khi các vấn đề lớn, nó làm tôi bối rối về cách mọi người thậm chí có thể thảo luận về tối ưu hóa trong phần mềm thực mà không cần phải có chương trình trước cho họ biết nơi tập trung.
Mike Dunlavey

16

Đây không phải là một vấn đề kỹ thuật, nó là một vấn đề tiếp thị và quản lý.

Bạn có thể đảo mắt vào thời điểm này, nhưng xin vui lòng chịu đựng với tôi.

Những gì một công ty bán là "sản phẩm" của họ và những người định nghĩa thế nào là "quản lý sản phẩm". Trong các công ty công nghệ, rất nhiều người khác cân nhắc về điều đó - các chuyên gia trải nghiệm người dùng, yadda yadda. Nhưng cuối cùng, người quản lý sản phẩm có trách nhiệm viết thông số kỹ thuật cho những gì người dùng phải có.

Vì vậy, hãy lấy DVR Comcast của bạn. Lý tưởng nhất, mọi thứ sẽ hoạt động như thế này:

  1. Người quản lý sản phẩm viết trong một thông số kỹ thuật, "Khi người dùng nhấn nút trên điều khiển từ xa và trong vòng 25 feet của DVR, DVR phải phản hồi với báo chí trong vòng 250 mili giây".
  2. Những người kỹ thuật xây dựng phần cứng, viết phần mềm nhúng, v.v.
  3. Những người kiểm tra QA chấp thuận rằng hệ thống đáp ứng thông số kỹ thuật hoặc trả lại cho nhóm kỹ thuật để khắc phục.

Tất nhiên, rất nhiều thứ có thể sai:

  • Người quản lý sản phẩm không đặt phản hồi nút trong thông số kỹ thuật
  • Những người QA làm một công việc tầm thường để kiểm tra thông số kỹ thuật
  • Ai đó đã chọn các công nghệ không cho phép thông số kỹ thuật được đáp ứng, do đó, yêu cầu được đưa ra
  • Các nhân viên kỹ thuật là người tay ngắn hoặc ai đó đã đẩy nhanh tiến độ và một số người quản lý nói: "Hãy quên đi khả năng đáp ứng - hoàn thành tính năng khác này."
  • Người quản lý sản phẩm không công bố yêu cầu đáp ứng cho đến khi quá muộn trong trò chơi, nó không thể được đáp ứng trước ngày giao hàng
  • Quản lý quyết định không gửi bất cứ điều gì để kiểm tra QA cho đến khi quá muộn, việc tăng tốc mã chậm sẽ làm mất ổn định sản phẩm

Bạn có thấy tất cả các lập trình viên phi thường trong đó không? Không có gì cả.

Tôi không nói rằng chúng tôi hoàn toàn không chịu trách nhiệm về hiệu suất kém - thông thường, việc viết mã tốt, mạnh mẽ, hiệu quả cũng dễ như viết mã rác.

Nhưng thực sự, nếu quản lý sản phẩm và nhân viên QA đều ngủ quên trên bánh xe, chúng tôi lập trình viên không thể bù đắp cho điều đó.


FWIW, tôi hoàn toàn đồng ý về giao diện sâu sắc của hầu hết các sản phẩm tiêu dùng. Tôi đã viết mã UI khoảng 25 năm và tôi cố gắng vì sự thanh lịch và đơn giản. Đó thực sự là một vấn đề bởi vì tôi nghĩ về nó rất nhiều, bây giờ tôi rất tệ khi tìm ra các giao diện người dùng được thiết kế tồi, vì vậy người vợ tội nghiệp của tôi đã chạy hầu hết các thiết bị trong trung tâm truyền thông của chúng tôi.


+1 - Các sự cố (lỗi hoặc hiệu suất) với các sản phẩm cuối không bao giờ có thể đổ lỗi cho các lập trình viên. Nếu một sản phẩm đã vượt qua nhiều cấp độ kiểm tra cần thiết thì lập trình viên đã thực hiện đúng công việc của mình. Nếu một sản phẩm vượt qua các bài kiểm tra và có vấn đề với nó thì thử nghiệm / thông số kỹ thuật sẽ bị đổ lỗi.
Qwerky

5
+1 Văn bản độc đáo, đặc biệt là về quản lý sản phẩm, vv Tuy nhiên, tôi không đồng ý về trách nhiệm. Tôi đưa nó vào những người giáo dục lập trình viên, dẫn đến việc các lập trình viên không thực sự biết cách tìm ra các lỗi hiệu năng (và nó dễ như thế nào, so với các lỗi chính xác).
Mike Dunlavey

1
@Mike: Hoàn toàn đúng. Trong vai trò lãnh đạo đầu tiên của tôi, một trong những báo cáo của tôi là một anh chàng vừa nhận được một MSCS từ Stanford, người chỉ được dạy viết mã "chính xác", và nghĩ rằng tôi rất kỳ quặc vì cũng mong đợi một vòng lặp lồng hai cấp đơn giản không để CPU trên đầu gối thở hổn hển vì oxy trong một sản phẩm thương mại đa nhiệm. Có một chút cố vấn được thực hiện ở đó. :-)
Bob Murphy

11

Bởi vì lập trình viên không hoàn hảo.

Tôi là một lập trình viên của những thứ nhúng. Một số mã của tôi không hoàn hảo. Hầu hết các mã nhúng của tôi là nhanh chóng.

Để khắc phục các vấn đề hiệu suất ở cuối dự án là rất khó.

Đôi khi, để giữ mọi thứ đơn giản (và do đó có thể kiểm tra được, có thể phát triển trong thời gian thực tế, không gây ra lỗi nghiêm trọng), chúng tôi sẽ tạo các thứ, như đầu vào từ xa cho một "dịch vụ" không phải là một phần của ứng dụng chính. Kết quả cuối cùng, độ trễ. Cách khác là đặt mọi thứ vào một ứng dụng nguyên khối là một thảm họa lỗi trong C hoặc C ++ (hai ngôn ngữ nhúng phổ biến nhất.)

Đôi khi thiết bị nhúng của bạn có một bộ lập lịch xử lý mà không làm những gì bạn muốn như người dùng muốn. Khó sửa như một nhà phát triển nhúng.

Sự phức tạp gây ra độ trễ, vì độ trễ trên lớp. Bạn yêu cầu các tính năng. Hãy thử một Nokia thực sự cũ, như 3210 cũ. Giao diện người dùng nhanh Zippy. Không có nhiều tính năng.

Tôi cho rằng các nhà phát triển không nhận được bất kỳ thông minh hơn, vì vậy phần cứng nhanh hơn được hấp thụ vào các bản tóm tắt để ngăn chặn các tính năng giết lẫn nhau. (Hoặc không, trong trường hợp iPhone của bạn)

Hiệu suất UI cần phải là một yêu cầu mà bạn kiểm tra khi thiết kế tiến triển.

Nếu nó không được chỉ định, nhà phát triển sẽ quen với nó. Tất cả chúng ta làm điều này. "Con tôi không xấu"

Và đó không phải là ngôn ngữ GC; Java thời gian thực nhúng rất nhanh, thật đáng sợ. (Mặt khác, Python nhúng là một con chó hoàn toàn)

Tôi viết một chương trình đọc chuyển đổi trên đầu vào kỹ thuật số như UI. Vẫn phải bật lại công tắc, vì vậy việc bật công tắc thực sự nhanh chóng không hoạt động, bởi vì việc bật lại là một vài lớp. Lý tưởng nhất là tôi có logic giải phóng ở cuối ngăn xếp chương trình cơ sở, nhưng đó không phải là cách phần cứng hoạt động.

Một số đầu DVD chỉ chạy tập lệnh "đẩy" để thực hiện đẩy. Bạn có thể đã thực hiện phương pháp này để giữ chi phí phát triển lành mạnh. Sau đó, bạn tiết kiệm CPU hoặc RAM và nó hút.


1
+1 Đặc biệt là "Con tôi không xấu" và những thứ gây tranh cãi. Tôi đã thực hiện một số cách làm việc nhúng trở lại khi (trong Pascal, tin điều đó). Khi nó đang vẽ các số dấu phẩy động trên video và rất chậm về nó. Một ngày cuối tuần, tôi cắm ICE, lấy một stackshot (bằng hex) và đánh đố nó ra. Đó là trong trình giả lập dấu chấm động, được gọi từ một thói quen tách ra từng chữ số bằng cách chia, cắt, nhân, trừ, v.v. Và tất nhiên đó là mã của tôi . (Tôi tìm thấy một cách tốt hơn để làm điều đó.)
Mike Dunlavey

3

Có phải vì tất cả đều được viết bằng các ngôn ngữ được quản lý, thu gom rác hơn là mã gốc?

Không. Mã chậm sẽ hoạt động kém bất kể. Chắc chắn, một ngôn ngữ cụ thể có thể giới thiệu một số loại vấn đề nhất định trong khi giải quyết những vấn đề khác. Nhưng các lập trình viên giỏi hoàn toàn có khả năng tìm ra cách giải quyết đủ thời gian.

Có phải các lập trình viên cá nhân đã viết phần mềm cho các thiết bị này?

Từng phần. Trong nhiều trường hợp, nó có khả năng ít nhất là một yếu tố góp phần. Đây là một tác dụng phụ đáng tiếc của một ngành công nghiệp nơi các lập trình viên giỏi có nhu cầu cao và nguồn cung ngắn. Ngoài ra, khoảng cách giữa các cấp độ khả năng kỹ thuật khác nhau có thể khá lớn. Vì vậy, lý do là đôi khi các lập trình viên được giao nhiệm vụ triển khai một số phần mềm nhất định có thể được chúc mừng chỉ để làm cho nó hoạt động (loại).

Trong tất cả các trường hợp này, các nhà phát triển ứng dụng biết chính xác nền tảng phần cứng họ đang nhắm mục tiêu và khả năng của nó là gì; họ đã không đưa nó vào tài khoản?

Từng phần. Để bắt đầu, nền tảng phần cứng chính xác có lẽ không được biết đến, vì điều đó thường được đàm phán với các nhà sản xuất khác nhau song song trong quá trình phát triển phần mềm. Trong thực tế, thậm chí có thể có những thay đổi nhỏ (nhưng không nhất thiết là không đáng kể) đối với phần cứng cơ bản sau khi phát hành ban đầu. Tuy nhiên, tôi đồng ý rằng các khả năng chung sẽ được biết đến.

Một phần của vấn đề là phần mềm có thể không được phát triển trên phần cứng, nó được thực hiện trong trình giả lập. Điều này gây khó khăn cho việc tính toán hiệu suất thiết bị thực sự ngay cả khi trình giả lập chính xác 100% - điều mà chúng không có.

Tất nhiên, điều này không thực sự biện minh cho việc kiểm tra không đủ trên phần cứng nguyên mẫu thích hợp trước khi phát hành. Sự đổ lỗi đó có lẽ nằm ngoài sự kiểm soát của dev / qa.

Có phải anh chàng đi khắp nơi lặp đi lặp lại "tối ưu hóa là gốc rễ của mọi tội lỗi", anh ta có khiến họ lạc lối không?

Không. Tôi chắc chắn rằng họ không nghe lời anh ta; nếu không, anh ta sẽ không bị trích dẫn sai thường xuyên (điều đó được cho là " tối ưu hóa sớm ..."). : -D

Nhiều khả năng có quá nhiều lập trình viên thực hiện một trong 2 thái cực liên quan đến tối ưu hóa.

  • Hoặc là họ hoặc bỏ qua nó hoàn toàn.
  • Hoặc họ ám ảnh mình với những chi tiết vụn vặt không liên quan gì đến các yêu cầu thực hiện thực tế . Hiệu quả ròng là ngân sách hết và mã quá bị xáo trộn để tối ưu hóa các vấn đề hiệu suất thực sự một cách an toàn.

Có phải đó là một tâm lý của "oh nó chỉ là thêm 100ms" mỗi lần cho đến khi tất cả những mili giây đó cộng lại thành vài phút?

Có thể. Rõ ràng nếu Sleep(100)đã được sử dụng như là giấy tương đương được sử dụng để làm chậm chảy máu chân tay bị cắt đứt - thì vấn đề sẽ được dự kiến. Tuy nhiên, tôi nghi ngờ vấn đề còn tinh tế hơn thế.

Vấn đề là phần cứng máy tính hiện đại (bao gồm cả các thiết bị nhúng) nhanh hơn nhiều so với việc mọi người cho họ tín dụng. Hầu hết mọi người, ngay cả các lập trình viên "có kinh nghiệm" đều không đánh giá cao máy tính nhanh như thế nào. 100ms là một thời gian dài - một thời gian rất dài . Và khi nó xảy ra, "thời gian rất dài" này cắt giảm 2 cách:

  • Đầu tiên là các lập trình viên lo lắng không cần thiết về những điều mà máy tính làm cực kỳ nhanh chóng. (Điều đó xảy ra rằng đó chỉ là một mối quan tâm " tăng giá trị 300 lần mỗi giây " đã đưa tôi đến đây ngay từ đầu.)
  • Thứ hai là đôi khi họ không thể hiện sự quan tâm đúng mức khi mọi thứ mất một thời gian rất dài (trên thời gian tính toán). Vì thế:
    • nếu họ bỏ qua ảnh hưởng của độ trễ khi giao tiếp qua mạng hoặc với thiết bị lưu trữ;
    • nếu họ bỏ qua tác động của một luồng bị chặn và chờ đợi một luồng khác;
    • nếu họ quên rằng vì máy tính hoạt động quá nhanh, nó rất có khả năng lặp lại một nhiệm vụ thường xuyên hơn mức cần thiết, mà không có nhà phát triển nhận thức được vấn đề
    • ... Nếu có bất kỳ sự kết hợp nào của quá mức như vậy xảy ra, một thói quen sẽ bất ngờ chạy rất chậm (theo thời gian tính toán). Một vài lần lặp lại và nó thậm chí sẽ được con người chú ý - nhưng có thể rất khó để xác định vì hàng trăm thứ liên kết với nhau đều tự chạy một cách nhanh chóng.

Có phải lỗi của tôi, vì đã mua những sản phẩm này ngay từ đầu?

Vâng chắc chắn. Vâng, không phải cá nhân bạn mà là người tiêu dùng nói chung. Sản phẩm được bán (và mua ) theo danh sách kiểm tra tính năng. Quá ít người tiêu dùng đang đòi hỏi hiệu suất tốt hơn.

Để minh họa quan điểm của tôi: Lần cuối cùng tôi muốn mua một chiếc điện thoại di động, cửa hàng thậm chí không thể cung cấp một mô hình demo để chơi với tại cửa hàng. Tất cả những gì họ có là vỏ nhựa có nhãn dán để hiển thị màn hình trông như thế nào. Bạn thậm chí không thể cảm nhận được trọng lượng như thế - hãy để một mình hiệu suất hoặc khả năng sử dụng. Quan điểm của tôi là nếu đủ người phản đối mô hình kinh doanh đó và bỏ phiếu bằng ví của họ để lên tiếng phản đối, chúng tôi sẽ là một bước nhỏ đi đúng hướng.

Nhưng họ không, vì vậy chúng tôi không; và mỗi năm điện thoại di động mới chạy chậm hơn trên phần cứng nhanh hơn.

(Những câu hỏi không được hỏi.)

  • Là người tiếp thị để đổ lỗi? Từng phần. Họ cần ngày phát hành. Và khi nói ngày hiện ra lờ mờ, sự lựa chọn giữa "làm cho nó hoạt động" và "làm cho nó nhanh hơn" là không có trí tuệ.
  • Là người bán hàng để đổ lỗi? Từng phần. Họ muốn nhiều tính năng hơn trong danh sách kiểm tra. Họ thổi phồng danh sách tính năng và bỏ qua hiệu suất. Họ (đôi khi) đưa ra những lời hứa không thực tế.
  • Là người quản lý để đổ lỗi? Từng phần. Các nhà quản lý thiếu kinh nghiệm có thể mắc nhiều sai lầm, nhưng ngay cả những người quản lý có kinh nghiệm cũng có thể (hoàn toàn đúng) hy sinh thời gian để giải quyết các vấn đề về hiệu suất có lợi cho những mối quan tâm khác.
  • Là thông số kỹ thuật để đổ lỗi? Từng phần. Nếu một cái gì đó bị bỏ qua đặc điểm kỹ thuật, việc "quên" về nó sau này sẽ dễ dàng hơn nhiều. Và nếu nó không được nêu cụ thể, mục tiêu là gì? (Mặc dù cá nhân tôi tin rằng nếu một đội tự hào về công việc của mình, họ sẽ lo lắng về hiệu suất bất kể.)
  • Là giáo dục để đổ lỗi? Có lẽ. Giáo dục có thể sẽ luôn luôn ở phía sau. Tôi chắc chắn không chấp nhận "giáo dục" mà nhanh chóng tạo ra những người mới bắt đầu với sự phát triển phần mềm hiểu biết hời hợt. Tuy nhiên, giáo dục được hỗ trợ bởi lý thuyết và thấm nhuần văn hóa học tập không thể xấu.
  • Là nâng cấp để đổ lỗi? Từng phần. Phần mềm mới, phần cứng cũ thực sự là định mệnh hấp dẫn. Ngay cả trước khi phiên bản X được phát hành, X + 1 đang trong kế hoạch. Phần mềm mới tương thích, nhưng phần cứng cũ có đủ nhanh không? Nó đã được thử nghiệm? Một bản sửa lỗi hiệu năng cụ thể có thể được đưa vào phần mềm mới - khuyến khích nâng cấp phần mềm không đúng cách.

Về cơ bản, tôi tin rằng có nhiều yếu tố đóng góp. Vì vậy, thật không may, không có viên đạn bạc để sửa nó. Nhưng điều đó không có nghĩa là nó cam chịu và u ám. Có nhiều cách để góp phần cải thiện mọi thứ.

Vì vậy, tại thời điểm nào mọi thứ đã đi sai cho các sản phẩm này?

IMHO chúng tôi không thể thực sự xác định bất kỳ điểm duy nhất. Có nhiều yếu tố đóng góp phát triển theo thời gian.

  • Quầy đậu: cắt giảm chi phí, thời gian thị trường. Nhưng sau đó một lần nữa chúng ta sẽ thực hiện những tiến bộ chúng ta đã đạt được mà không có áp lực?
  • Nhu cầu cao và nguồn cung thấp của những người có kỹ năng trong ngành. Không chỉ các lập trình viên, mà cả các nhà quản lý, người thử nghiệm và thậm chí là nhân viên bán hàng. Thiếu kỹ năng & kinh nghiệm dẫn đến sai lầm. Nhưng sau đó một lần nữa nó cũng dẫn đến việc học.
  • Công nghệ chảy máu cạnh. Cho đến khi một công nghệ trưởng thành, nó sẽ thường xuyên cắn theo những cách không ngờ tới. Nhưng sau đó một lần nữa nó thường cung cấp một số lợi thế ở nơi đầu tiên.
  • Biến chứng phức tạp. Theo thời gian, ngành công nghiệp đã phát triển: thêm nhiều công cụ, công nghệ, lớp, kỹ thuật, trừu tượng, phần cứng, ngôn ngữ, biến thể, tùy chọn. Điều này khiến cho phần nào không thể có sự hiểu biết "đầy đủ" về các hệ thống hiện đại. Tuy nhiên, kết quả là chúng tôi cũng có khả năng làm được nhiều hơn trong thời gian ngắn hơn rất nhiều.

Chúng ta có thể làm gì để lập trình viên làm gì để tránh gây ra nỗi đau này cho chính khách hàng của mình?

Tôi có một vài gợi ý (cả kỹ thuật và phi kỹ thuật) có thể giúp:

  • Trong sofar càng tốt - sử dụng sản phẩm của riêng bạn. Không có gì giống như trải nghiệm đầu tay để tiết lộ những điều khó xử, chậm chạp hoặc bất tiện. Tuy nhiên, bạn sẽ cần có ý thức tránh bỏ qua những thiếu sót do "kiến thức nội bộ". Ví dụ: Nếu bạn không gặp vấn đề gì khi đồng bộ danh bạ vì bạn làm điều đó với tập lệnh Python backlink - bạn không sử dụng "sản phẩm". Điều này dẫn đến điểm tiếp theo ...
  • Lắng nghe người dùng của bạn (tốt nhất là người đầu tiên, nhưng ít nhất là người thứ hai thông qua hỗ trợ). Tôi biết các lập trình viên (nói chung) thích ở xa và tránh sự tương tác của con người; nhưng điều đó không giúp bạn khám phá những vấn đề mà người khác gặp phải khi sử dụng sản phẩm của bạn. Ví dụ: Bạn có thể không nhận thấy rằng các tùy chọn menu chậm, bởi vì bạn biết tất cả các phím tắt và sử dụng riêng các phím tắt đó. Ngay cả khi hướng dẫn sử dụng đầy đủ tất cả các phím tắt, một số người vẫn sẽ thích các menu - mặc dù bị chậm một cách khó tin.
  • Phấn đấu để cải thiện kỹ năng và kiến ​​thức kỹ thuật của bạn một cách liên tục. Phát triển kỹ năng để phân tích phê bình mọi thứ bạn học. Đánh giá lại kiến ​​thức của bạn thường xuyên. Trong một số trường hợp, hãy chuẩn bị để quên những gì bạn nghĩ bạn đã biết. Điều này dẫn đến ...
  • Một số công nghệ / kỹ thuật có thể rất phức tạp dẫn đến những hiểu lầm tinh vi và triển khai không chính xác. Những người khác thông qua sự phát triển của kiến ​​thức phổ biến hoặc các công cụ có sẵn có thể rơi vào hoặc không được ủng hộ (ví dụ: Singletons). Một số chủ đề khó đến nỗi họ tạo ra một loạt các "học giả h Focus-p Focus" truyền bá một cơ thể thông tin sai lệch khổng lồ. Một lỗi đặc biệt của tôi là thông tin sai lệch xung quanh đa luồng. Một triển khai đa luồng tốt có thể cải thiện đáng kể trải nghiệm người dùng. Thật không may, rất nhiều cách tiếp cận sai đối với đa luồng sẽ làm giảm đáng kể hiệu năng, tăng các lỗi thất thường, tăng rủi ro khóa chết, làm phức tạp việc sửa lỗi, v.v.
  • Lấy quyền sở hữu. (Không nghiêm túc, tôi không chơi lô tô trong phòng họp.) Đàm phán với người quản lý, chủ sở hữu sản phẩm, nhân viên bán hàng về các tính năng hiệu suất được ưu tiên hơn một số mục trong danh sách kiểm tra. Yêu cầu thông số kỹ thuật tốt hơn. Không phải trẻ con, mà bằng cách đặt câu hỏi khiến mọi người nghĩ về hiệu suất.
  • Hãy là một người tiêu dùng sành điệu. Chọn điện thoại có ít tính năng hơn nhưng nhanh hơn. (Không phải CPU nhanh hơn, UI nhanh hơn.) Sau đó hãy khoe về nó ! Càng nhiều người tiêu dùng bắt đầu yêu cầu hiệu suất, càng nhiều quầy đậu sẽ bắt đầu lập ngân sách cho nó.

Đây là một câu trả lời thực sự kỹ lưỡng, chu đáo! Thật trùng hợp, tôi đã đọc được điều này ngay sau khi trở về từ một cuộc họp nhóm với chủ đề là "lỗi ưu tiên số 1 trong chu kỳ này: độ trễ là> 60ms, phải là 33ms, ZOMG !!! 1!"
Crashworks

1

Sai lầm đầu tiên của bạn, và có lẽ tại sao bạn đã bỏ phiếu xuống, nó xứng đáng với sự cường điệu rõ ràng rõ ràng. Bạn có thực sự mong đợi tin rằng iPhone và iPad là xấu.

Cuối cùng, khách hàng chịu trách nhiệm. Nó liên quan đến chi phí và những gì khách hàng đã chuẩn bị để trả và những gì họ nhận được. Nếu họ chọn các tính năng vượt quá tốc độ, đó là những gì họ nhận được. Nếu họ chọn giá vượt quá tốc độ, đó là những gì được xây dựng và bán. Nếu hình ảnh thương hiệu quan trọng hơn ..... Cuối cùng, khách hàng quyết định bằng ví của họ, điều gì quan trọng và điều gì không. Bạn có thể lựa chọn trở thành một con điếm thương hiệu và mua sản phẩm bởi vì những người khác làm, hoặc là một nhà tư tưởng độc lập, nhìn đằng sau sự bóng bẩy và cường điệu tiếp thị, và mua một cái gì đó đáp ứng nhu cầu của bạn.

Bạn đang đổ lỗi cho các lập trình viên. Họ đã viết mã, chắc chắn, nhưng họ không xác định và không nên xác định, yêu cầu của khách hàng, phần cứng, chi phí BOM, chi phí R & D, ngân sách tiếp thị ..... tất cả những điều cần làm cho một sản phẩm , đó không phải là phần mềm.

Các công nghệ được sử dụng, ngôn ngữ được sử dụng, vv, không có gì để làm với điều này. Xấu so với các nhà phát triển tốt, không có gì để làm với nó. Bất kỳ lập trình viên nửa vời nào cũng có thể làm cho một đoạn mã chạy nhanh hơn, phản ứng nhanh hơn, trở thành cuối cùng có thể. Kinh nghiệm của tôi là các lập trình viên đàng hoàng không phá sản doanh nghiệp khi còn lại để đưa ra quyết định, trong khi một nửa những người đàng hoàng phàn nàn rằng "nó" tốt hơn "nên" như thế nào.


2
Số iPhone của tôi không phải là cường điệu; Tôi đã nhận được chúng bằng cách đếm số giây lớn trong khi sử dụng điện thoại của mình. Có một mô tả hài hước (nếu ít cực đoan) về vấn đề này tại youtube.com/watch?v=Pdk2cJpSXLg . Ngoài ra, điện thoại của tôi vẫn ổn khi tôi mua nó! Tôi đánh giá hiệu suất cẩn thận khi chọn điện thoại. Nhưng nó trở nên chậm hơn và chậm hơn với mỗi bản cập nhật firmware liên tiếp từ Apple, đến mức không thể sử dụng được. Tôi cho rằng đó có thể là lỗi của tôi khi cài đặt các bản cập nhật của Apple.
Crashworks

Tôi đổ lỗi cho các lập trình viên ở một mức độ lớn - tôi thấy các ứng dụng thương mại luôn có lỗi và phân tích trường hợp sử dụng khủng khiếp mà không nhà phát triển nào có năng lực hoặc niềm tự hào trong công việc của họ sẽ phát hành, bất kể họ làm việc cho ai - những người này là một sự ô nhục đối với nghề nghiệp của chúng tôi.
Vector

1

Tối ưu hóa sớm đôi khi là xấu, nhưng không phải khi cần thiết cho trải nghiệm người dùng tốt hoặc tuổi thọ pin tốt trong một hệ thống đủ hạn chế. Thất bại là lỗi của việc ưu tiên cao hơn để làm sạch kỹ thuật phần mềm có thể bảo trì so với nấu ăn trong bất cứ điều gì cần thiết để cung cấp trải nghiệm người dùng tốt và tuổi thọ pin tốt là ưu tiên cao hơn khi bắt đầu dự án, ngay cả khi khó bảo trì và ngắn hơn nhiều mạch một số ngăn xếp và phương pháp phần mềm được kiến ​​trúc sạch sẽ.

Nếu bạn có iPhone 3G, Apple đã phát hành một vài bản cập nhật hệ điều hành chỉ được tối ưu hóa cho các thiết bị mới hơn. Các bản cập nhật hệ điều hành sau này cho 3G có thể cung cấp hiệu suất tốt hơn một chút trên 3G.


1
"Tối ưu hóa sớm đôi khi rất tệ, nhưng không phải khi cần thiết cho trải nghiệm người dùng tốt" thì đó không phải là tối ưu hóa sớm
Carlos Campderrós

1
Đôi khi bạn phải bắt đầu tối ưu hóa rất nhiều thứ trước khi bạn có số liệu về các tắc nghẽn thực tế cần tối ưu hóa, nếu không, hệ thống sẽ bị lỗi do kiến ​​trúc tối ưu hóa đáp ứng lịch trình và hiệu suất.
hotpaw2

0

DVR của bạn mất nhiều thời gian để thay đổi kênh vì trước tiên nó phải đổ dữ liệu được đệm, sau đó xếp hàng một bộ đệm khác chứa đầy dữ liệu cho kênh mới mà bạn đang xem. Bộ đệm này rất có thể được lưu trữ trên ổ cứng nên các thao tác này mất thời gian (cộng với nó chỉ có thể lấp đầy bộ đệm trong thời gian thực). Với một DVR bạn không bao giờ xem chương trình "trực tiếp", nó luôn bị trì hoãn (không phải ngẫu nhiên, nó bị trì hoãn cùng lúc với độ trễ nhận thức của bạn khi chuyển kênh). Điều này có thể dễ dàng được xác minh bằng cách xem một chương trình thể thao cùng lúc với bạn nghe nó trên radio.


Đây không hoàn toàn là những gì tôi đã đề cập - vấn đề của tôi với DVR của tôi là phải mất vài giây để hiển thị bất kỳ phản hồi nào cho bất kỳ thao tác nào, ngay cả những thao tác bên trong menu của nó. Ví dụ: nếu tôi đang điều hướng qua menu chính của nó (không xem chương trình) và tôi nhấn DOWN trên điều khiển từ xa, thì phải mất vài giây trước khi phần nổi bật trên màn hình di chuyển xuống bởi một mục. Nếu tôi nhấn 'tạm dừng' trong khi xem một chương trình, sẽ có độ trễ năm giây trước khi nó tạm dừng. Khi tôi đi đến lập trình một bản ghi và trang lên xuống trong hướng dẫn, mỗi lần nhấn nút sẽ mất nhiều giây để đăng ký và thay đổi màn hình.
Crashworks

Tôi không đồng ý với tuyên bố này. Vừa mới chuyển từ AT & T Uverse sang Comcast, tôi đã thấy rằng DVR cho Comcast rất chậm so với hộp Uverse. Đó có thể là một lý do cho sự chậm trễ, nhưng điều đó không có nghĩa là đó sẽ là lý do duy nhất khiến hộp chậm.
Jetti

-2

Tôi nghĩ lý do là hầu hết các ứng dụng hướng đến người tiêu dùng được kiểm soát và tiếp thị bởi những người không biết gì về phần mềm và thuê các nhà phát triển dựa trên sơ yếu lý lịch của họ hoặc đề xuất của một số người quản lý không có gì, trái với kỹ năng và kiến ​​thức thực tế của họ .


2
không có lời giải thích, câu trả lời này có thể trở nên vô dụng trong trường hợp nếu người khác đăng một ý kiến ​​trái ngược. Ví dụ: nếu ai đó đăng một yêu cầu như "ứng dụng được kiểm soát và tiếp thị bởi những người tuyệt vời thuê những nhà phát triển tuyệt vời" , câu trả lời này sẽ giúp người đọc chọn ra hai ý kiến ​​trái ngược nhau như thế nào? Xem xét chỉnh sửa ing nó thành một hình dạng tốt hơn
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.