Apakah karena semua ini ditulis dalam bahasa sampah yang dikelola dan dikumpulkan daripada kode asli?
Tidak. Kode lambat akan berkinerja buruk. Tentu saja, bahasa tertentu dapat memperkenalkan kelas masalah tertentu sambil memecahkan yang lain. Tetapi programmer yang baik cukup mampu menemukan solusi yang diberikan waktu yang cukup.
Apakah itu programer individu yang menulis perangkat lunak untuk perangkat ini?
Sebagian. Dalam banyak kasus kemungkinan besar setidaknya merupakan faktor yang berkontribusi. Ini adalah efek samping yang tidak menguntungkan dari suatu industri di mana programmer yang baik dalam permintaan tinggi dan pasokan pendek. Juga jurang pemisah antara berbagai tingkat kemampuan teknis bisa sangat besar. Jadi masuk akal bahwa kadang-kadang programmer yang ditugaskan untuk mengimplementasikan perangkat lunak tertentu dapat diberi selamat hanya untuk membuatnya berfungsi (semacam).
Dalam semua kasus ini, pengembang aplikasi tahu persis platform perangkat keras apa yang mereka targetkan dan apa kemampuannya; Apakah mereka tidak memperhitungkannya?
Sebagian. Sebagai permulaan, tepatnya platform perangkat keras yang mungkin tidak diketahui, karena sering dinegosiasikan dengan berbagai produsen secara paralel selama pengembangan perangkat lunak. Bahkan, mungkin ada perubahan kecil (tapi tidak berarti tidak signifikan) untuk perangkat keras yang mendasari setelah rilis awal. Namun, saya setuju bahwa kapabilitas umum akan diketahui.
Sebagian dari masalahnya adalah bahwa perangkat lunak mungkin tidak dikembangkan pada perangkat keras, itu dilakukan dalam emulator. Ini membuat sulit untuk memperhitungkan kinerja perangkat yang sebenarnya bahkan jika emulator 100% akurat - padahal sebenarnya tidak.
Tentu saja ini tidak benar-benar membenarkan pengujian yang tidak memadai pada perangkat keras prototipe yang sesuai sebelum rilis. Kesalahan itu mungkin terletak di luar kendali dev / qa.
Apakah itu orang yang berulang-ulang mengulangi "optimisasi adalah akar dari semua kejahatan," apakah dia menyesatkan mereka?
Tidak. Aku cukup yakin mereka toh tidak mendengarkannya; kalau tidak, dia tidak akan salah mengutip begitu sering (itu seharusnya " optimasi prematur ..."). :-D
Itu lebih mungkin bahwa terlalu banyak programmer mengambil salah satu dari 2 ekstrim terkait dengan optimasi.
- Entah mereka mengabaikannya sama sekali.
- Atau mereka terobsesi dengan hal-hal kecil yang tidak ada hubungannya dengan persyaratan kinerja aktual . Efek bersihnya adalah anggaran habis dan kode terlalu dikaburkan untuk mengoptimalkan masalah kinerja nyata dengan aman.
Apakah itu mentalitas "oh, itu hanya tambahan 100 ms" setiap kali sampai semua milidetik itu bertambah hingga menit?
Mungkin. Jelas jika Sleep(100)
telah digunakan sebagai setara dengan kertas tisu yang digunakan untuk memperlambat pendarahan anggota badan yang terputus - maka masalah yang diharapkan. Namun, saya curiga masalahnya lebih halus dari itu.
Masalahnya adalah perangkat keras komputasi modern (termasuk perangkat yang disematkan) jauh lebih cepat daripada yang diberikan orang kepada mereka. Kebanyakan orang, bahkan pemrogram "berpengalaman" gagal menghargai seberapa cepat komputer itu. 100 ms adalah waktu yang lama - waktu yang sangat lama . Dan seperti yang terjadi, "waktu yang sangat lama" ini memotong 2 cara:
- Yang pertama adalah bahwa programmer tidak perlu khawatir tentang hal-hal yang dilakukan komputer dengan sangat cepat. (Kebetulan bahwa itu hanya masalah " meningkatkan nilai 300 kali per detik " yang membuat saya di sini di tempat pertama.)
- Yang kedua adalah bahwa mereka kadang-kadang gagal menunjukkan kekhawatiran ketika hal-hal memang memakan waktu yang sangat lama (pada skala waktu komputasi). Begitu:
- jika mereka mengabaikan efek latensi saat berkomunikasi melalui jaringan atau dengan perangkat penyimpanan;
- jika mereka mengabaikan dampak utas yang diblokir dan menunggu utas lainnya;
- jika mereka lupa bahwa karena komputer bekerja sangat cepat, ia sangat mampu mengulangi tugas jauh lebih sering daripada seharusnya, tanpa pengembang menyadari masalah.
- ... jika kombinasi dari kekeliruan semacam itu terjadi, sebuah rutinitas tiba-tiba akan berjalan sangat lambat (pada skala waktu komputasi). Beberapa pengulangan dan bahkan akan terlihat oleh manusia - tetapi mungkin sulit untuk dijabarkan karena ratusan hal yang saling berhubungan semua berjalan dengan cepat sendiri.
Apakah ini salah saya, karena telah membeli produk ini sejak awal?
Iya tentu saja. Nah, bukan Anda secara pribadi tetapi konsumen pada umumnya. Produk dijual (dan dibeli ) oleh daftar fitur. Terlalu sedikit konsumen yang menuntut kinerja yang lebih baik.
Untuk mengilustrasikan poin saya: Terakhir kali saya ingin membeli ponsel, toko bahkan tidak dapat menawarkan model demo untuk bermain dengan di dalam toko. Yang mereka miliki hanyalah kerang plastik dengan stiker untuk menunjukkan seperti apa tampilan layar itu. Anda bahkan tidak bisa merasakan bobot seperti itu - apalagi kinerja atau kegunaan. Maksud saya adalah jika cukup banyak orang yang keberatan dengan model bisnis itu, dan memilih dengan dompet mereka untuk menyuarakan keberatan mereka, kami akan menjadi satu langkah kecil ke arah yang benar.
Tetapi mereka tidak, jadi kita tidak; dan setiap tahun telepon seluler baru berjalan lebih lambat pada perangkat keras yang lebih cepat.
(Pertanyaan tidak diajukan.)
- Apakah orang pemasaran yang harus disalahkan? Sebagian. Mereka membutuhkan tanggal rilis. Dan ketika kata tanggal tampak, pilihan antara "membuatnya bekerja" dan "membuatnya lebih cepat" adalah hal yang mudah.
- Apakah orang penjualan harus disalahkan? Sebagian. Mereka menginginkan lebih banyak fitur dalam daftar periksa. Mereka mengacaukan daftar fitur dan mengabaikan kinerja. Mereka (kadang-kadang) membuat janji yang tidak realistis.
- Apakah manajer harus disalahkan? Sebagian. Manajer yang tidak berpengalaman mungkin membuat banyak kesalahan, tetapi bahkan manajer yang sangat berpengalaman pun dapat (dengan tepat) mengorbankan waktu untuk menyelesaikan masalah kinerja demi kepentingan orang lain.
- Apakah spesifikasi yang patut disalahkan? Sebagian. Jika ada sesuatu yang terlewatkan dari spesifikasi, akan jauh lebih mudah untuk "melupakan" nanti. Dan jika tidak disebutkan secara spesifik, apa targetnya? (Meskipun saya secara pribadi percaya bahwa jika suatu tim bangga dengan pekerjaannya, mereka akan mengkhawatirkan kinerja bagaimanapun juga.)
- Apakah pendidikan yang harus disalahkan? Mungkin. Pendidikan mungkin akan selalu berada di belakang. Saya tentu saja tidak menyetujui "pendidikan" yang dengan cepat menghasilkan pemula dengan pengembangan perangkat lunak pemahaman yang dangkal. Namun, pendidikan yang didukung oleh teori, dan menanamkan budaya belajar tidak mungkin buruk.
- Apakah upgrade harus disalahkan? Sebagian. Perangkat lunak baru, perangkat keras lama benar-benar menggoda nasib. Bahkan sebelum versi X dirilis, X +1 sedang dalam perencanaan. Perangkat lunak baru ini kompatibel, tetapi apakah perangkat keras yang lama cukup cepat? Apakah sudah diuji? Perbaikan kinerja tertentu dapat dimasukkan ke dalam perangkat lunak baru - mendorong pembaruan perangkat lunak yang keliru.
Pada dasarnya, saya percaya ada banyak faktor yang berkontribusi. Jadi, sayangnya tidak ada peluru perak untuk memperbaikinya. Tapi itu tidak berarti itu adalah malapetaka dan kesuraman. Ada beberapa cara untuk berkontribusi dalam memperbaiki berbagai hal.
Jadi, pada titik apa kesalahan produk ini?
IMHO kita tidak bisa mengidentifikasi satu titik pun. Ada banyak faktor yang berkontribusi yang berkembang seiring waktu.
- Penghitung kacang: pemotongan biaya, waktu pasar. Tetapi sekali lagi apakah kita akan membuat kemajuan yang kita capai tanpa tekanan?
- Permintaan tinggi dan pasokan rendah orang-orang terampil di industri. Tidak hanya programmer, tetapi juga manajer, penguji, dan bahkan orang-orang penjualan. Kurangnya keterampilan & pengalaman menyebabkan kesalahan. Tetapi sekali lagi itu juga mengarah pada pembelajaran.
- Teknologi mutakhir. Sampai suatu teknologi matang, ia akan secara teratur menggigit dengan cara yang tidak terduga. Tapi sekali lagi itu sering memberikan sejumlah keunggulan di tempat pertama.
- Komplikasi yang diperberat. Seiring waktu, industri telah berevolusi: menambahkan lebih banyak alat, teknologi, lapisan, teknik, abstraksi, perangkat keras, bahasa, variasi, opsi. Ini membuatnya agak tidak mungkin untuk memiliki pemahaman "penuh" tentang sistem modern. Namun, kami juga mampu melakukan lebih banyak dalam waktu yang jauh lebih singkat.
Apa yang bisa kita lakukan sebagai programmer untuk menghindari menimbulkan rasa sakit ini pada pelanggan kita sendiri?
Saya punya beberapa saran (baik teknis dan non-teknis) yang dapat membantu:
- Sedapat mungkin - gunakan produk Anda sendiri. Tidak ada yang seperti pengalaman tangan pertama untuk mengungkapkan hal-hal yang canggung, lambat atau tidak nyaman. Namun Anda perlu secara sadar menghindari melewati kekurangan karena "pengetahuan orang dalam". Misalnya. Jika Anda tidak memiliki masalah menyinkronkan kontak karena Anda melakukannya dengan skrip Python backdoor - Anda tidak menggunakan "produk". Yang memunculkan poin berikutnya ...
- Dengarkan pengguna Anda (lebih disukai tangan pertama, tetapi setidaknya tangan kedua melalui dukungan). Saya tahu programmer (umumnya) lebih memilih untuk tetap tersembunyi dan menghindari interaksi manusia; tetapi itu tidak membantu Anda menemukan masalah yang dialami orang lain saat menggunakan produk Anda. Misalnya, Anda mungkin tidak melihat bahwa opsi menu lambat, karena Anda tahu semua pintasan dan menggunakannya secara eksklusif. Bahkan jika manual sepenuhnya mendokumentasikan semua cara pintas, beberapa orang masih akan lebih suka menu - meskipun lambat.
- Berusaha keras untuk meningkatkan keterampilan teknik dan pengetahuan Anda secara berkelanjutan. Kembangkan keterampilan untuk menganalisis secara kritis semua yang Anda pelajari. Menilai kembali pengetahuan Anda secara teratur. Dalam beberapa kasus, bersiaplah untuk melupakan apa yang Anda pikir Anda tahu. Yang menampilkan ...
- Beberapa teknologi / teknik bisa sangat sulit mengarah pada kesalahpahaman halus dan implementasi yang salah. Orang lain melalui evolusi pengetahuan umum atau alat yang tersedia mungkin jatuh atau tidak disukai (misalnya Singleton). Beberapa topik sangat rumit sehingga mereka mengembangbiakkan "pakar-pakar hocus-pocus" yang menyebarkan sejumlah besar informasi yang salah. Salah satu kesalahan saya adalah informasi yang salah seputar multi-threading. Implementasi multi-utas yang baik dapat secara signifikan meningkatkan pengalaman pengguna. Sayangnya banyak pendekatan yang salah informasi untuk multi-threading secara signifikan akan mengurangi kinerja, meningkatkan bug yang tidak menentu, meningkatkan risiko dead-lock, menyulitkan debugging dll. Jadi ingat: hanya karena "pakar" mengatakannya, tidak menjadikannya benar.
- Ambil kepemilikan. (Tidak serius, saya tidak bermain bingo ruang dewan.) Bernegosiasi dengan manajer, pemilik produk, tenaga penjualan untuk fitur kinerja yang diutamakan daripada beberapa item daftar periksa. Menuntut spesifikasi yang lebih baik. Bukan kekanak-kanakan, tetapi dengan mengajukan pertanyaan yang membuat orang berpikir tentang kinerja.
- Jadilah konsumen yang cerdas. Pilih ponsel yang memiliki lebih sedikit fitur tetapi lebih cepat. (CPU tidak lebih cepat, UI lebih cepat.) Lalu sesumbar tentang itu ! Semakin banyak konsumen mulai menuntut kinerja, semakin banyak penghitung kacang akan mulai menganggarkan untuk itu.