Secara umum, jenis optimasi apa yang biasanya Anda condongkan saat merancang perangkat lunak?
Apakah Anda tipe yang lebih memilih untuk mengoptimalkan desain Anda
- Waktu pengembangan (yaitu, cepat untuk menulis dan / atau lebih mudah untuk mempertahankan)?
- Waktu memproses
- Ruang penyimpanan (baik RAM, DB, Disc, dll)
Tentu saja ini sangat subjektif untuk jenis masalah yang sedang dipecahkan, dan tenggat waktu yang terlibat, jadi saya ingin mendengar tentang alasan yang akan membuat Anda memilih satu bentuk pengoptimalan dari yang lain.
design
optimization
Jason Whitehorn
sumber
sumber
Jawaban:
Pemeliharaan
Kemudian membuat profil jika perlu dan mengoptimalkan kecepatan. Jarang sekali saya memiliki kebutuhan untuk penyimpanan - setidaknya tidak dalam 10 tahun terakhir. Sebelum itu saya lakukan.
sumber
Waktu pengembangan
Pemrosesan dan penyimpanan murah. Waktu Anda tidak.
Hanya untuk diperhatikan:
Ini tidak berarti melakukan pekerjaan yang buruk dalam menulis kode hanya untuk menyelesaikannya dengan cepat. Itu berarti menulis kode dengan cara yang memfasilitasi pengembangan cepat. Itu juga sepenuhnya tergantung pada kasus penggunaan Anda. Jika ini adalah situs web sederhana, dua atau tiga halaman dengan formulir kontak Anda mungkin tidak perlu menggunakan kerangka kerja PHP. Beberapa menyertakan dan skrip mailer akan mempercepat pengembangan. Jika rencananya adalah menciptakan platform yang fleksibel untuk menumbuhkan dan menambahkan fitur baru, ada baiknya meluangkan waktu untuk menaruhnya dengan benar dan kode sesuai karena itu akan mempercepat pengembangan di masa depan.
Dalam perbandingan langsung dengan waktu pemrosesan dan penyimpanan, saya condong ke arah waktu pengembangan yang lebih cepat. Apakah menggunakan fungsi collectionutils mengurangi metode pengumpulan koleksi tercepat dan paling efisien memori? Tidak! Tapi ini waktu pengembangan yang lebih cepat. Jika Anda mengalami hambatan kinerja atau memori, Anda dapat menyelesaikannya nanti. Mengoptimalkan sebelum Anda tahu apa yang perlu dioptimalkan adalah buang - buang waktu dan itulah yang saya anjurkan.
sumber
Pengalaman pengguna.
Ini adalah satu-satunya nilai yang penting bagi pelanggan Anda.
Waktu pengembangan kurang penting. Saya dapat menulis aplikasi baris perintah berfitur lengkap jauh lebih cepat daripada GUI, tetapi jika Ny. Jane tidak dapat menemukan cara untuk mengeluarkan laporan yang dia inginkan, itu tidak berguna.
Perawatan kurang penting. Saya dapat memperbaiki jungkat-jungkit dengan sangat cepat, tetapi jika berada di tengah hutan, pengguna tidak dapat menemukannya.
Waktu pemrosesan kurang penting. Jika saya membuat mobil dengan kecepatan 0 hingga cahaya dalam 60 detik, pengguna tidak dapat menyetir.
Estetika kurang penting. Saya bisa melukis Mona Lisa, tetapi jika dia bersembunyi di balik dinding tidak ada yang bisa melihatnya.
Pengalaman Pengguna adalah satu-satunya nilai yang penting. Membuat aplikasi yang melakukan apa yang diinginkan pengguna dengan cara yang diharapkan pengguna adalah pencapaian tertinggi.
sumber
Hanya ada satu hal untuk dioptimalkan dan itu adalah:
Apa yang diinginkan pelanggan Anda
Apakah pelanggan Anda membutuhkan program secepat mungkin? Optimalkan untuk kecepatan.
Apakah pelanggan Anda membutuhkan keandalan absolut? Optimalkan untuk itu.
Apakah mereka membutuhkannya dikirim besok atau tidak akan berguna? Optimalkan untuk kecepatan pengembangan.
Berjalan di perangkat yang sangat terbatas sumber daya? Optimalkan untuk sumber daya tersebut.
sumber
waktu memproses
Waktu pengguna saya tidak murah. Apa yang terjadi berputar-putar.Saya baru saja memutakhirkan aplikasi yang saya gunakan ini tahun lalu. Mereka telah sepenuhnya menulis ulang aplikasi itu, dan bocah itu lambat. Saya akhirnya harus membeli komputer baru untuk menjalankannya dengan cepat. Saya jamin itu tidak murah, tapi waktu saya lebih berharga.
sumber
Saya cenderung condong ke arah membatasi konsumsi memori dan alokasi. Saya tahu ini sekolah tua, tetapi:
sumber
Saya akan mengatakan saya mengoptimalkan efisiensi, dengan efisiensi didefinisikan sebagai kompromi antara waktu pengembangan, pemeliharaan masa depan, pengalaman pengguna dan sumber daya yang dikonsumsi. Sebagai pengembang, Anda harus menyulap semua ini untuk menjaga keseimbangan.
Bagaimana Anda mencapai keseimbangan itu? Pertama, Anda perlu membuat beberapa konstanta, seperti apa tenggat waktu, perangkat keras apa yang akan dijalankan aplikasi Anda, dan orang seperti apa yang akan menggunakannya. Tanpa mengetahui ini, Anda tidak dapat menetapkan keseimbangan yang benar dan memprioritaskan di mana diperlukan.
Misalnya, jika Anda mengembangkan aplikasi server pada mesin yang kuat, Anda mungkin ingin menukar efisiensi kinerja untuk memastikan Anda mencapai tenggat waktu yang tidak dapat digerakkan. Namun, jika pengembang Anda merupakan aplikasi yang perlu merespons input pengguna dengan cepat (pikirkan permainan video) maka Anda perlu memprioritaskan input rutin Anda untuk memastikannya tidak lamban.
sumber
Apa pun teknologi virtualisasi yang saya gunakan
Ingat hari-hari ketika sistem dengan lebih dari 512 MB RAM dianggap berdarah? Saya menghabiskan hari-hari saya menulis kode untuk sebelumnya.
Saya bekerja sebagian besar pada program tingkat rendah yang berjalan pada domain istimewa di lingkungan Xen. Langit-langit kami untuk domain istimewa adalah 512 MB, meninggalkan sisa RAM gratis bagi pelanggan kami untuk digunakan. Ini juga tipikal bagi kita untuk membatasi domain istimewa hanya pada satu inti CPU.
Jadi di sinilah saya, menulis kode yang akan berjalan pada server $ 6k yang benar-benar baru, dan setiap program harus bekerja (idealnya) dalam plafon yang dialokasikan 100kb, atau menghindari alokasi memori dinamis sepenuhnya.
Secara ringkas, saya mengoptimalkan untuk:
Saya juga harus sangat rajin dalam hal waktu yang dihabiskan menunggu kunci, menunggu I / O atau hanya menunggu secara umum. Sejumlah besar waktu saya digunakan untuk meningkatkan perpustakaan soket non-blocking yang ada dan mencari metode yang lebih praktis untuk pemrograman bebas kunci.
Setiap hari saya merasa agak ironis bahwa saya menulis kode seperti yang saya lakukan 15 tahun yang lalu, pada sistem yang dibeli bulan lalu, karena kemajuan teknologi.
Ini adalah tipikal bagi siapa saja yang bekerja pada platform tertanam juga, meskipun banyak dari mereka yang memiliki setidaknya 1GB. Seperti yang ditunjukkan Jason, itu juga khas ketika menulis program untuk dijalankan pada perangkat seluler. Daftar berjalan, Kios, klien tipis, bingkai foto, dll.
Saya mulai berpikir bahwa pembatasan perangkat keras benar-benar memisahkan programmer dari orang-orang yang dapat membuat sesuatu berfungsi tanpa peduli apa yang sebenarnya dikonsumsi. Saya khawatir (turunkan suara saya jika Anda harus) bahasa apa yang sepenuhnya tipe abstrak dan memeriksa memori ke kumpulan kolektif akal sehat yang (dulu) dibagi di antara programmer dari berbagai disiplin ilmu.
sumber
Hasil penelitian
Sebagai seorang akademisi, saya pikir saya harus membagikan apa yang saya optimalkan. Perhatikan bahwa ini tidak sama dengan mengoptimalkan untuk waktu pengembangan yang lebih singkat. Seringkali itu berarti bahwa pekerjaan itu mungkin mendukung beberapa pertanyaan penelitian, tetapi tidak menjadi produk yang dapat dikirim dan dipoles. Ini mungkin dipandang sebagai masalah dengan kualitas, dan itu bisa menjelaskan mengapa banyak yang mengatakan bahwa ilmuwan komputer (akademik) tidak memiliki pengalaman "dunia nyata". (Misalnya, "Apakah mereka tidak tahu bagaimana mengembangkan produk yang bisa dikirimkan?" )
Ini garis yang bagus. Dalam hal dampak, Anda ingin karya Anda digunakan dan dikutip oleh orang lain, dan Joel's Iceberg Effect ikut bermain: sedikit polesan dan kilau bisa sangat bermanfaat. Tetapi jika Anda tidak membuat fondasi untuk proyek lain yang akan dibangun, Anda mungkin tidak dapat membenarkan waktu yang dihabiskan untuk membuat produk yang bisa dikirim.
sumber
... setelah itu segalanya
... akhirnya, optimalkan kinerja ;-)
sumber
Kualitas / Pengujian
Mengoptimalkan kualitas, seperti memastikan ada waktu dalam jadwal pengembangan untuk pengujian, baik pengujian unit maupun pengujian setelah fitur / fase.
sumber
Itu tergantung pada kebutuhan program Anda.
Sebagian besar dari apa yang saya lakukan sangat dibatasi oleh kemampuan pemrosesan dan memori, tetapi tidak mengalami banyak perubahan, jika ada, yang signifikan pada tahun rata-rata.
Di masa lalu saya pernah bekerja pada proyek-proyek di mana kode sering diubah sehingga pemeliharaan menjadi lebih penting dalam kasus-kasus itu.
Saya juga bekerja pada sistem di masa lalu di mana jumlah data adalah masalah yang paling signifikan, bahkan pada disk untuk penyimpanan, tetapi lebih umum ukurannya menjadi masalah ketika Anda harus memindahkan data secara keseluruhan, atau lebih lambat tautan.
sumber
Keanggunan .
Jika kode Anda dirancang dengan baik, itu akan memiliki beberapa efek:
sumber
Waktu pengembangan, tentu saja. Saya juga mengoptimalkan bandwidth, tetapi saya tidak pergi ke biner.
sumber
Karena saya melakukan instalasi pada berbagai jenis sistem, mulai dari mainframe IBM hingga PC, saya pertama-tama mengoptimalkan kompatibilitas, lalu ukuran, lalu kecepatan.
sumber
Tergantung
Jika Anda bekerja pada sistem pemrosesan video tertanam waktu nyata maka Anda mengoptimalkan kecepatan pemrosesan. Jika Anda menggunakan pengolah kata, Anda mengoptimalkan waktu pengembangan.
Namun, dalam semua kasus, kode Anda harus berfungsi dan harus dipelihara.
sumber
Ekspresifitas maksud saya.
Saya ingin seseorang membaca kode saya agar dapat dengan mudah melihat operasi apa yang saya coba lakukan pada domain. Demikian pula saya mencoba meminimalkan sampah non-semantik (kawat gigi, kata kunci 'fungsi' di js, dll) untuk mempermudah pemindaian.
Tentu saja Anda harus menyeimbangkannya dengan rawatan. Saya suka menulis fungsi yang mengembalikan fungsi dan segala macam teknik canggih dan mereka MELAKUKAN lebih lanjut tujuan saya, tetapi jika manfaatnya sedikit saya akan berbuat kesalahan di sisi menempel pada teknik yang programmer jr solid akan terbiasa dengan.
sumber
Mereka semua
Waktu memproses
Komputer saat ini cepat, tetapi jauh dari cukup. Ada banyak banyak situasi di mana kinerja sangat penting - jika Anda melakukan streaming server media.
Penyimpanan
Pelanggan Anda mungkin memiliki disk besar, katakanlah, 1 TB. Yang bisa diambil oleh 1000 film HD, jika Anda ingin menjadikannya layanan yang jauh dari cukup, bukan?
Waktu pengembangan
Yah saya tidak yakin apakah ini dianggap sebagai "optimasi", yang saya lakukan adalah saya menggunakan Java daripada C ++, dan pengembangannya menjadi 10 kali lebih cepat. Saya merasa seperti saya mengatakan apa yang saya pikirkan langsung ke komputer, sangat lurus maju dan benar-benar batu!
BTW Saya percaya untuk mempercepat pengembangan proses pengembangan Anda, Anda harus memilih java, jangan pernah mencoba sampah seperti python ... yang mengklaim mereka dapat mempersingkat waktu DEV Anda.
sumber