Komputer dan bahasa pemrograman cenderung bersifat deterministik dan dapat diprediksi. Namun progress bar tampaknya bertolak belakang, terutama jika operasinya kompleks. Bahkan untuk produk profesional kelas dunia, beberapa bilah kemajuan tidak banyak mencerminkan kemajuan operasi yang sebenarnya. Saya telah melihat mereka berubah dari 10% menjadi 90% dalam satu lompatan setelah tidak melakukan apa pun selama 4 jam. Saya bahkan melihat beberapa langkah mundur, menyarankan pemrosesan ekstra tak terduga telah ditemukan.
Memang mungkin ada operasi basis data, pemrosesan jaringan, dan operasi paralel, tetapi tampaknya ini bisa dikuantifikasi dalam beberapa cara dan persentase yang diestimasi. Lagi pula, harus ada sejumlah instruksi terbatas yang dijalankan untuk menyelesaikan operasi. Apakah ini pengkodean yang buruk, atau adakah alasan mendasar yang menunjukkan kemajuan itu sulit?
sumber
Jawaban:
Untuk menambah jawaban yang lebih umum sejauh ini saya dapat memberikan beberapa contoh dari bidang saya di mana bilah kemajuan tidak bekerja dan mengapa;
Program desain berbantuan komputer - program yang melakukan analisis termal atau mekanika fluida secara umum bisa mengerikan dengan progress bar. Mereka melompat maju, mundur, mengambil langkah-langkah yang tidak konsisten dan hampir tidak ada gunanya mengawasi mereka. Ini disebabkan oleh sifat berulang dari jenis simulasi ini dan kebutuhan untuk menemukan konvergensi. Ini paling baik dilihat bukan oleh bilah kemajuan tetapi oleh plot konvergensi iterasi v.
Simulasi kompleks - Saya menulis sebuah program yang mensimulasikan lingkungan yang kompleks dengan banyak faktor terkait silang. Itu untuk timeline tetap sehingga Anda akan ini progress bar hanya waktu yang tepat? Dalam kasus saya simulasi terlalu lama dengan setiap langkah waktu baru dengan demikian berarti progress bar semakin lambat dan lambat - tidak hebat. Saya menemukan metrik lain untuk berapa lama simulasi rata-rata berdasarkan pada jumlah item dalam simulasi yang lebih dekat ke akurat - tetapi tidak ideal karena kadang-kadang bilah proses tidak pernah diisi (simulasi berhenti sebelumnya) atau mencapai 100% ke awal (simulasi berjalan lebih lama dari yang diharapkan).
Dalam kedua kasus bilah lengkap kemajuan murni tidak akan mungkin untuk menghitung maksimum untuk sebelumnya (kasus 1) atau tidak ada linier dan karenanya tidak banyak digunakan (kasus 2)
sumber
Kedua. Terkadang sulit memperkirakan berapa banyak waktu yang diperlukan untuk operasi, karena Anda tidak tahu ke depan berapa banyak pekerjaan yang harus dilakukan. Terkadang perkiraannya sederhana dan tidak akurat.
Contoh: Saya mengunduh empat file secara bersamaan. Seseorang tahu seberapa besar setiap file, berapa banyak yang telah diunduh, dan berapa megabyte per detik yang diunduh untuk setiap file. Tampak mudah untuk memperkirakan berapa lama. Namun, saya tahu bahwa setelah satu file diunduh, yang lain akan mengunduh lebih cepat. Terlebih lagi setelah 3 file diunduh; yang terakhir akan mengunduh empat kali lebih cepat. Belum pernah melihat progress bar yang mempertimbangkan hal ini.
Contoh: Anda menyalin folder besar. Bilah progres mengasumsikan bahwa Anda menyalin X megabita per detik, tahu berapa megabita yang ada, dan kecepatan rata-rata Anda sejauh ini. Masalahnya adalah, "megabyte per detik" sangat tidak akurat - dalam praktiknya, dibutuhkan x milidetik per file, ditambah y milidetik per megabyte. Jadi, banyak file kecil membutuhkan waktu lebih lama daripada perkiraan progress bar.
Masalahnya adalah bahwa pengembang perangkat lunak mungkin peduli, tetapi manajer mereka tidak selama komputer Anda tidak macet.
sumber
Saya pikir jawaban menyeluruhnya adalah bahwa seringkali terlalu rumit (atau tidak mungkin) untuk menghitung jumlah waktu yang diperlukan.
Kadang-kadang itu hanya akan menambah waktu komputasi untuk memperkirakan lebih baik jumlah pekerjaan yang diperlukan (misalnya, mengambil analisis yang lebih baik dari file yang akan disalin, atau menerapkan perhitungan yang lebih kompleks untuk lebih baik memperkirakan jumlah langkah yang diperlukan untuk lengkapi simulasi).
Di lain waktu itu agak tidak pasti. Ketika sistem Anda menginstal program baru, seringkali ada banyak dependensi untuk memeriksa apakah diinstal. Dan pada umumnya ia tidak memiliki gagasan tentang berapa lama masing-masing akan memakan waktu, dan dependensi apa yang mungkin dibutuhkan pada gilirannya. Anda mungkin sudah menginstal semua dependensi dan itu bisa memakan waktu 30 detik, atau Anda mungkin kekurangan puluhan dan butuh berjam-jam. Sulit untuk memberikan gambaran kasar tentang itu, terutama ketika setiap situasi akan unik.
Selain itu, saluran air lain pada sistem dapat berubah seiring waktu (karena apa yang dilakukan pengguna ... atau latar belakang / proses terjadwal).
Terkadang estimasi dapat ditingkatkan jika programmer akan menempatkan sedikit lebih banyak pekerjaan ke dalamnya. Tapi kemudian itu kenyataan lain bahwa ini mungkin bukan perhatian utama sebagian besar pengembang, dibandingkan dengan memajukan tugas-tugas produktif sebenarnya yang dapat dilakukan aplikasi.
Pada akhirnya, saat ini, saya percaya ini cukup sering hanya perkiraan linier - lihat berapa banyak tugas dasar yang diperlukan telah diselesaikan oleh program. Jadi itu memang cenderung menjadi perkiraan yang sangat kasar, dan Anda umumnya harus menganggapnya sebagai masuk.
Analogi yang bagus mungkin ketika Anda membaca buku.
Dan Anda memutuskan ingin mengetahui berapa lama waktu yang dibutuhkan untuk menyelesaikan buku ...
Anda dapat memeriksa jumlah halaman dan mendapatkan perkiraan cepat berdasarkan langkah sejauh ini.
Ini mungkin perkiraan yang buruk jika Anda baru saja mulai membaca, karena kecepatan Anda mungkin belum khas. Tapi seringkali itu hanya tebakan kasar.
Atau Anda juga bisa membaca buku, mendapatkan gambaran kasar tentang berapa banyak gambar yang ada dan jarak teks. Dan kemudian memiliki gagasan yang lebih baik tentang apa yang Anda hadapi.
Tapi itu masih bisa menjadi perkiraan yang buruk jika, misalnya, keterbacaan teks menurun, mungkin transisi dari prosa sederhana ke kompleks. Atau perkiraan tersebut mungkin salah jalan karena Anda gagal mengantisipasi tugas lain yang akan mengalihkan perhatian Anda.
Anda bisa mendapatkan perkiraan yang bagus dengan menerapkan sejumlah besar waktu untuk menganalisis dengan hati-hati apa yang tersisa di halaman buku demi halaman, dan juga bisa memperbaikinya dengan memeriksa kalender Anda dan menyimpan daftar langkah membaca jangka panjang untuk berbagai buku di masa lalu.
Tetapi pada akhirnya, apakah waktu yang diperlukan untuk melakukan itu sepadan dengan penundaan untuk hanya membaca buku?
Kita semua menyukai indikator yang lebih baik. Tetapi sebagaimana adanya, kita mungkin harus membuat karena perkiraan kasar, setidaknya sampai komputer secara keseluruhan mulai mendapatkan peningkatan algoritma standar, dan mahir dalam "cerdas" menimbang dan mengantisipasi faktor-faktor dinamis (seperti cara Anda)!
Dan progress bar yang mungkin macet 5% sekarang. Kita hanya harus melihat bagaimana hasilnya 8-)
sumber
Saya akan menambahkan ke jawaban @ gnasher729 bahwa ini adalah konsekuensi tersembunyi lain dari ketidakpastian masalah penghentian.
Mengesampingkan ketidakpastian yang tak terpisahkan dari perhitungan interaktif, bahkan yang dapat diisolasi dapat memiliki waktu eksekusi (dan "ritme"), yang prediktabilitasnya tidak dapat didekati dengan metode umum.
Sedihnya, progress bar seringkali merupakan metafora yang tidak berguna. Apa alternatifnya, Anda mungkin bertanya. Jika pengguna mengetahui apa yang terjadi "di bawah tenda", menambahkan beberapa informasi semantik ke antarmuka dapat menjadi pilihan, beralih ke eksekusi seperti mode jejak. Jika tidak, menciptakan suasana tenang yang mengurangi harapan.
Mendidik pengguna untuk memahami keterbatasan kami adalah opsi jangka panjang - ketiga.
sumber
Bilah progres digambar berdasarkan jumlah subtugas yang diselesaikan dan bukan pada waktu yang berlalu / yang dibutuhkan untuk penyelesaian.
Sebagai contoh, misalkan operasi X memiliki empat sub langkah yang berbeda, pada akhir setiap langkah Anda meningkatkan progress bar sebesar 25%. Jika satu langkah membutuhkan waktu lebih lama untuk dieksekusi, Anda mungkin akan melihat perilaku yang Anda uraikan - 1 hingga 90% dalam sekali jalan dan beberapa jam untuk sisanya.
Logika di balik penggunaan jumlah subtugas sebagai sebuah unit daripada waktu adalah bahwa yang terakhir tidak dapat diprediksi. Bahkan dalam kasus mengunduh file, koneksi dapat turun, sehingga waktu tidak dapat digunakan sebagai satu unit. Anda lebih suka menggunakan jumlah byte yang diunduh dan bukan waktu yang dibutuhkan sebagai unit kemajuan.
sumber