Saya telah membangun game android di waktu luang saya. Ini menggunakan perpustakaan libgdx sehingga sedikit dari angkat berat dilakukan untuk saya.
Saat mengembangkan, saya dengan sembarangan memilih tipe data untuk beberapa prosedur. Saya menggunakan hashtable karena saya ingin sesuatu yang dekat dengan array asosiatif. Nilai kunci yang dapat dibaca manusia. Di tempat lain untuk mencapai hal serupa, saya menggunakan vektor. Saya tahu libgdx memiliki kelas vector2 dan vector3, tapi saya belum pernah menggunakannya.
Ketika saya menemukan masalah aneh dan mencari bantuan Stack Overflow, saya melihat banyak orang hanya mengulang pertanyaan yang menggunakan tipe data tertentu ketika yang lain secara teknis "tepat". Seperti menggunakan ArrayList karena tidak memerlukan batasan yang didefinisikan versus mendefinisikan kembali int [] dengan batas yang diketahui baru. Atau bahkan sesuatu yang sepele seperti ini:
for(int i = 0; i < items.length; i ++)
{
// do something
}
Saya tahu itu mengevaluasi item.length pada setiap iterasi. Namun, saya juga tahu item tidak akan pernah lebih dari 15 hingga 20 item. Jadi haruskah saya peduli jika saya mengevaluasi item. Panjang pada setiap iterasi?
Saya menjalankan beberapa tes untuk melihat bagaimana kinerja aplikasi menggunakan metode yang saya jelaskan versus yang tepat, ikuti tutorial dan menggunakan tipe data yang tepat yang disarankan oleh komunitas. Hasilnya: Hal yang sama. Rata-rata 45 fps. Saya membuka setiap aplikasi di tab telepon dan galaksi. Tidak ada perbedaan.
Jadi saya kira pertanyaan saya kepada Anda adalah ini: Apakah ada ambang batas ketika itu tidak lagi menjadi masalah? Apakah boleh mengatakan - "selama pekerjaan itu selesai, saya tidak peduli?"
sumber
Jawaban:
Anda menulis sebuah program untuk memecahkan masalah. Masalah itu disertai dengan serangkaian persyaratan khusus untuk menyelesaikannya. Jika persyaratan itu dipenuhi, masalahnya terpecahkan dan tujuannya tercapai.
Itu dia.
Sekarang, alasan praktik terbaik diamati adalah karena beberapa persyaratan berkaitan dengan rawatan, pengujian, jaminan kinerja, dan sebagainya. Akibatnya, Anda memiliki orang-orang sial seperti saya yang membutuhkan hal-hal seperti gaya pengkodean yang tepat. Tidak perlu banyak upaya untuk melewati T dan dot I Anda, dan itu merupakan sikap hormat kepada mereka yang harus membaca kode Anda nanti dan mencari tahu apa fungsinya.
Untuk sistem yang besar, pengekangan dan disiplin semacam ini sangat penting, karena Anda harus bermain baik dengan orang lain untuk menyelesaikan semuanya, dan Anda harus meminimalkan utang teknis sehingga proyek tidak runtuh karena bebannya sendiri.
Di ujung lain dari spektrum adalah utilitas satu kali yang Anda tulis untuk memecahkan masalah tertentu sekarang, utilitas yang tidak akan pernah Anda gunakan lagi. Dalam kasus itu, gaya dan praktik terbaik sama sekali tidak relevan; Anda meretasnya bersama, menjalankannya, dan melanjutkan dengan hal berikutnya.
Jadi, seperti halnya banyak hal dalam pengembangan perangkat lunak, itu tergantung.
sumber
Ada kutipan kuno yang bijak: "Jangan mengikuti jejak orang-orang bijak di masa lalu. Carilah apa yang mereka cari." Ada alasan untuk semua aturan pengkodean 'benar'. Mengetahui mengapa aturan itu ada lebih penting daripada mengetahui apa aturan itu.
Ada aturan bahwa Anda tidak boleh melakukan tes yang bisa berulang kali dihitung ulang dalam for for loop seperti itu. Dalam kasus-kasus bahwa aturan diciptakan untuk memperbaiki (di mana kinerja akan sangat berbeda), masuk akal. Dalam hal ini, hanya ada satu jawaban yang benar. Dalam contoh Anda, diketahui bahwa tidak ada perbedaan kinerja dan tidak mungkin ada lebih dari beberapa lusin iterasi. Dalam hal ini, ada dua jawaban yang benar, baik untuk menerapkan aturan, karena itu sederhana dan tidak akan menyakiti apa pun dan dapat membantu membentuk kebiasaan yang baik, atau mengabaikan aturan, karena tidak ada perbedaan kinerja yang perlu dikhawatirkan.
Saya lebih suka jawaban benar pertama, dan Anda tampaknya lebih suka yang kedua. Anda tidak salah tentang itu. Saya pikir Anda salah dalam ide tentang pemrograman yang 'tepat'. Ini bukan tentang mengikuti serangkaian aturan yang dipilih secara acak yang tidak membantu Anda dan tidak memiliki tujuan. Anda tidak memperbaiki loop for dalam contoh ini sebenarnya mengikuti aturan yang sangat baik terhadap optimasi prematur.
Pemrograman yang tepat dan benar adalah tentang mengikuti aturan yang baik yang masuk akal dengan cara yang cerdas.
sumber
Cara yang tepat untuk melihat ini adalah hasil yang semakin berkurang: membandingkan manfaat tambahan dari pengembangan program dengan biaya pengembangan tambahan.
Pengembalian yang berkurang ditetapkan saat manfaat marjinal kurang dari waktu / upaya marjinal.
Bisakah Anda membuat kasus bisnis untuk
items.length
keluar darifor
lingkaran? Secara ekonomi, dapatkah perubahan itu membenarkan waktu yang dihabiskan untuk mencoba membenarkannya? Karena tidak ada perbedaan dalam pengalaman pengguna, Anda tidak akan pernah mendapatkan apa pun untuk pengukuran waktu yang dihabiskan (selain pelajaran yang berguna untuk diingat). Pengguna tidak akan menyukai program lebih dari yang mereka lakukan, dan lebih banyak salinan tidak akan dijual, sebagai akibat dari perubahan itu.Ini tidak selalu mudah untuk dievaluasi, karena kasus-kasus bisnis dipenuhi dengan hal-hal yang tidak diketahui dan risiko, dan dengan demikian rentan untuk menjadi mangsa faktor-faktor yang tidak dipertimbangkan yang hanya akan menjadi jelas di belakang. Perubahan yang diajukan bisa sepenuhnya nontrivial, sehingga membuat perbedaan besar.
Jenis pemikiran pengurangan-pengembalian bisa berarti perburuan alasan untuk tidak mengambil tindakan, dan menghindari mengambil risiko, yang di belakang mungkin terbukti menjadi serangkaian peluang yang terlewatkan.
Tetapi kadang-kadang jelas ketika tidak melakukan sesuatu. Jika beberapa bagian dari pembangunan tampaknya memerlukan keajaiban ekonomi terjadi hanya untuk membayar biaya pembangunan (impas), itu mungkin ide yang buruk.
sumber
Ketika Anda seharusnya tidak peduli kode Anda menjadi "layak"
Kapan menulis kode yang tepat
sumber
Apakah kinerja menjadi perhatian utama Anda? Itukah yang ingin Anda maksimalkan?
Jika demikian, ada pelajaran mendasar untuk dipelajari, dan jika Anda melakukannya, Anda akan menjadi salah satu dari sedikit.
Jangan mencoba "berpikir" apa yang harus Anda lakukan untuk membuatnya lebih cepat - itu dugaan. Jika Anda bertanya "Haruskah saya menggunakan kelas wadah ini atau yang itu?", Atau "Haruskah saya menempatkan
length
dalam kondisi loop?", Anda seperti seorang dokter yang melihat seorang pasien dan mencoba untuk memutuskan perawatan apa yang akan diberikan tanpa benar-benar mempertanyakan atau memeriksa pasien.Itu menebak. Semua orang melakukannya, tetapi itu tidak berhasil.
Sebaliknya, biarkan program itu sendiri memberi tahu Anda apa masalahnya. Ini contoh terperinci.
Apakah Anda melihat perbedaannya?
sumber
Pertanyaan Anda adalah "selama pekerjaan itu selesai, saya tidak peduli?"
Jawaban saya adalah, "Anda tidak pernah tahu apa yang akan terjadi pada kode Anda." Saya telah terlibat dalam banyak proyek yang dimulai dengan "hei, izinkan saya menulis hal cepat ini untuk mengatasi masalah pengguna." Tulis itu, letakkan di sana, jangan pernah pikirkan lagi.
Suatu kali, hal yang saya tulis berubah menjadi "oh, sekarang seluruh departemen pengguna ingin menggunakan kode itu," yang sebelum saya bisa berbalik menjadi "seluruh perusahaan menggunakan kode itu dan sekarang saya harus membuktikan bahwa ia akan bertahan dalam audit dan ada tinjauan kode 20 orang dijadwalkan untuk besok dan beberapa wakil presiden telah menjualnya kepada pelanggan kami. "
Saya menyadari Anda "hanya menulis game android di waktu luang Anda" tetapi Anda tidak pernah tahu apakah game itu akan lepas landas dan menjadi tiket Anda menuju ketenaran dan kekayaan. Lebih buruk lagi, game itu bisa menjadi tiket Anda untuk keburukan karena terus menabrak ponsel orang. Apakah Anda ingin menjadi orang yang mendapat tawaran pekerjaan karena anak-anak seseorang tidak bisa berhenti memainkan permainan Anda di ponsel mereka, atau Anda ingin menjadi orang yang difitnah di papan pesan seperti ini?
sumber
Jawabannya adalah itu tidak pernah penting, dan itu selalu penting ....
Itu tidak pernah penting karena pemrograman, layak atau tidak, adalah cara untuk mencapai tujuan, bukan tujuan itu sendiri. Jika tujuan itu dicapai tanpa pemrograman "yang benar" itu bagus (dari perspektif bisnis, sering kali yang terbaik adalah jika tujuan itu dapat dicapai tanpa pemrograman).
Itu selalu penting karena pemrograman yang tepat adalah alat yang akan membantu Anda dalam mencapai tujuan Anda. Cara yang tepat dalam melakukan sesuatu hanyalah pengakuan bahwa melakukannya dengan cara lain menyebabkan lebih banyak rasa sakit dalam jangka panjang daripada menghemat.
Yang menjawab pertanyaan kapan Anda bisa mengabaikannya - ketika Anda yakin bahwa cara lain akan lebih mudah dalam jangka panjang (mungkin karena tidak akan ada jangka panjang).
Satu alat biasanya dilakukan secepat dan kotor yang Anda bisa, dengan sedikit atau tidak ada pengecekan error atau validasi lainnya, tanpa pencatatan pengecualian, kode cut-n-paste dengan perubahan kecil atau bahkan tanpa perubahan alih-alih fungsi generik, dan sebagainya .
Hanya hati-hati: kadang-kadang aplikasi yang cepat dan kotor itu hidup sendiri, yang berarti semua jalan pintas membuat Anda ...
sumber
Sebenarnya dalam kode akhir, items.length tidak akan dievaluasi dalam setiap iterasi karena kompilator mengoptimalkannya. Dan bahkan jika tidak, panjang adalah bidang publik di objek array; mengaksesnya tanpa biaya.
Itu benar-benar tergantung pada apa yang Anda harapkan dari produk akhir Anda; perbedaan antara produk rata-rata dan produk hebat bergantung pada detail. Mobil seperti Tata Nano dan mobil seperti Mercedes S "menyelesaikan tugasnya" - ini membawa Anda dari satu tempat ke tempat lain. Perbedaannya bergantung pada detail: tenaga mesin, kenyamanan, keselamatan dan lainnya. Ini sama dengan produk apa pun yang ada, termasuk produk perangkat lunak; misalnya mengapa orang membayar ke Oracle, IBM atau Microsoft untuk basis data Oracle, DB2 atau MS SQL Server karena MySQL dan Postgre gratis?
Jika Anda ingin memperhatikan detail dan mendapatkan produk berkualitas tinggi Anda harus peduli tentang hal ini (dan tentang hal-hal lain, tentu saja).
sumber
Jika Anda memprogram di rumah untuk diri sendiri maka mungkin Anda dapat memotong beberapa sudut; dan ketika Anda bereksperimen dan mencoba hal-hal ini sepenuhnya dibenarkan.
Namun berhati-hatilah. Dalam contoh yang Anda berikan, sebenarnya tidak perlu memotong sudut itu, dan Anda harus berhati-hati. Ini bisa memulai tren dan kebiasaan buruk yang Anda lakukan di rumah bisa masuk ke kode Anda di tempat kerja. Jauh lebih baik untuk berlatih dan memperbaiki kebiasaan baik di rumah dan membiarkan mereka meresapi kode Anda di tempat kerja. Itu akan membantu Anda dan itu akan membantu orang lain.
Setiap pemrograman yang Anda lakukan dan setiap pemikiran yang Anda lakukan tentang pemrograman adalah latihan. Buat itu berharga, kalau tidak akan kembali dan menggigit Anda.
Lihatlah sisi baiknya. Anda telah menanyakan hal ini, jadi mungkin Anda sudah mengetahui poin yang saya sampaikan.
sumber
Jika pembuat furnitur membuat perabot yang akan digunakan di mana kualitasnya tidak terlalu penting atau di mana kualitasnya tidak diperhatikan, haruskah mereka tetap berusaha membuat potongannya lurus, dan melakukan pekerjaan yang tepat dengan menggabungkan potongan-potongan itu?
Banyak orang melihat perangkat lunak sebagai keahlian. Apa yang kita bangun tidak hanya menjalankan fungsi, itu harus dapat diandalkan, dipelihara, kuat. Membuat perangkat lunak semacam itu membutuhkan keterampilan, dan keterampilan itu berasal dari latihan.
Jadi, meskipun pilihan konstruksi perulangan untuk apa yang Anda kerjakan hari ini mungkin tidak masalah, fakta bahwa Anda berusaha untuk menggunakan konstruksi yang tepat setiap saat, seiring waktu, akan menjadikan Anda seorang programmer yang lebih baik.
sumber