Saya sering mendengar rekan kerja berkata satu sama lain, "Itu peretasan yang mengerikan, mengerikan."
Yang bisa saya ambil dari itu adalah bahwa itu tidak baik. Ketika saya bertanya kepada mereka apakah itu berhasil, mereka berkata "ya, tapi itu tidak baik". Apakah itu berarti itu bukan solusi yang baik? Bagaimana solusi buruk jika berhasil? Apakah ini karena praktik yang baik? Atau tidak bisa dirawat? Apakah ini menggunakan efek samping kode sebagai bagian dari solusi Anda?
Sangat menarik bagi saya ketika ada sesuatu yang diklasifikasikan sebagai hack. Bagaimana Anda bisa mengidentifikasinya?
terminology
dustyprogrammer
sumber
sumber
+
untuk dibagi berdasarkan heuristik.Jawaban:
Ini menerapkan bantuan band sementara untuk luka menganga besar. Ini sudah diperbaiki untuk saat ini, tetapi akan menyebabkan lebih banyak masalah lagi nanti.
Contoh yang baru-baru ini saya lihat: Anda ingin seseorang bernama
"Jim"
, selalu muncul pertama kali dalam daftar alfabet. Untuk menyelesaikannya dengan cepat, Anda ganti namanya menjadi" Jim"
. Ini adalah retasan yang pasti akan kembali menggigit Anda nanti.sumber
Setiap keputusan teknik merupakan pertukaran antara biaya langsung dan penundaan dan biaya konsekuensial dan utang teknis.
Retasan adalah situasi di mana yang pertama disukai sementara menerima yang terakhir sebagai konsekuensinya.
Pengembang yang tidak berpengalaman (sebagian karena cara sistem pendidikan teknik bekerja) fokus pada yang pertama dan tidak memiliki pengalaman yang cukup untuk benar-benar memahami atau memperkirakan yang terakhir.
Pengembang berpengalaman melakukannya, tetapi karena berbagai alasan (banyak yang sah) pilih yang pertama.
Istilah peretasan hampir selalu menyiratkan niat untuk menyelesaikan masalah sementara dan "lakukan segera setelah itu", tetapi pengembang yang berpengalaman tahu bahwa hal yang paling permanen dalam kode adalah peretasan sementara.
sumber
Pertimbangkan ini
Contoh kedua, bagaimanapun, mungkin hack yang digunakan karena ketidaktahuan tentang praktik yang lebih baik atau asumsi yang dibuat
/1
tampak lebih sederhana pada saat itu atau bug di perpustakaan yang membuat/1
pekerjaan dengan benar.Hacks adalah kode "bijaksana". Ada
tigaempat penyebab.Ketidaktahuan tentang prinsip-prinsip desain yang tepat. (yaitu prinsip SOLID)
Arogansi (yaitu asumsi keliru) tentang API atau konstruksi bahasa.
Bug aktual yang tidak dipecahkan tetapi sedang dikerjakan.
Manajemen mengesampingkan asumsi desain dan koreksi yang baik. "Anggaran" adalah pembenaran umum, tetapi ini pada dasarnya adalah salah satu dari tiga di atas (ketidaktahuan, kesombongan atau kesalahan) dengan akar penyebab non-teknis.
Itulah intinya. Peretasan ini didasarkan pada ketidaktahuan, bug atau asumsi.
Itu bisa menjadi contoh ketidaktahuan atau asumsi yang salah.
sumber
Hack dalam konteks pemrograman akan sama dengan memperbaiki sesuatu dengan bebek-tape atau permen karet.
Peretasan sangat sering melibatkan penggunaan beberapa fitur yang tidak terdokumentasi dan tidak didukung, yang mungkin berubah saat melanggar kode Anda. Mereka mungkin juga melibatkan nilai-nilai hard-coded.
Peretasan biasanya bisa juga merupakan penyelesaian sementara dalam kode menggunakan beberapa pustaka / layanan, alih-alih memecahkan masalah mendasar. Jika nanti di luar kendali Anda, peretasan mungkin satu-satunya cara untuk mengatasinya.
sumber
Istilah ini kadang-kadang digunakan dengan konotasi yang berlawanan, seperti dalam "hack brilian." Hanya karena jauh lebih umum untuk gagal daripada melakukan sesuatu yang brilian, jauh lebih umum untuk mendengar tentang peretasan yang mengerikan daripada peretasan yang brilian, tetapi saya telah mendengar istilah itu menggunakan kedua cara.
"Retas" yang digunakan dalam arti positif pada dasarnya berarti solusi elegan yang memecahkan masalah dengan cara yang tak terduga dan khususnya pintar. Makna negatif dan positif sebenarnya agak dekat karena peretasan yang brilian sering melibatkan mengambil keuntungan dari aspek teknologi yang tidak diinginkan.
sumber
Sebuah solusi yang berfungsi saat ini , tetapi mungkin akan menyebabkan masalah dalam jangka panjang.
Contoh: Anda perlu membuat dokumen HTML, mengisi beberapa nilai secara dinamis. Cara yang tepat untuk melakukan ini adalah dengan menggunakan salah satu alat yang sebenarnya dirancang untuk tujuan ini, seperti Freemarker, atau XSLT, atau JSP. Tetapi Anda tidak dapat menggunakan salah satu dari itu, atau Anda tidak dapat diganggu untuk melakukannya dengan benar, sehingga Anda menulis sesuatu seperti ini:
sumber
Retasan adalah solusi cerdas untuk suatu masalah, sering kali bergantung pada pemikiran yang tidak biasa dan mengambil keuntungan dari fakta-fakta yang tidak terduga tentang lingkungan. Ada pepatah di luar sana tentang peretasan tipikal bahwa pemirsa setuju bahwa itu cerdik, tetapi tidak tahu apakah itu indah atau mengerikan. Ini adalah hal yang tidak Anda inginkan dalam perbaikan pemeliharaan Anda.
Retasan yang memperbaiki masalah kemungkinan besar akan tergantung pada detail lingkungan, atau fitur alat yang tidak terdokumentasi, atau sesuatu seperti itu. Ini mungkin menjadi solusi yang rapuh, bekerja sekarang tetapi kemungkinan rusak ketika sesuatu berubah. Mungkin sulit untuk memahami cara kerjanya, dan setiap programmer pemeliharaan akan membenci kode yang sulit dipahami. Ini mungkin memiliki efek samping yang tidak menyakiti apa pun untuk saat ini tetapi akan menyebabkan masalah dalam potongan kode yang sangat baik agak jauh di masa depan, dan itu bisa menjadi mimpi buruk untuk dihadapi.
sumber
Kata hack disalahgunakan. Jika Anda ingin benar-benar mendapatkan sedikit sejarah, Anda dapat Wikipedia. Retasan adalah kata untuk menggambarkan proses mengutak-atik hal untuk melakukan sesuatu yang tidak seharusnya mereka lakukan. Dalam konteks teknik elektro, ini bagus. Ada deskripsi yang lebih baik di Wikipedia tentang ini.
Sekarang, dalam konteks ilmu komputer. Peretasan umumnya buruk. Ya, itu berfungsi tetapi biasanya itu berarti bahwa programmer menulis beberapa kode ambigu yang tidak sesuai dengan desain perangkat lunak dan itu akan membingungkan setiap programmer yang harus membaca kode itu. Tentu saja waktu programmer mahal, sehingga sebagai seorang manajer ingin memiliki perangkat lunak yang paling mudah dirawat. Hal yang sama berlaku untuk programmer. Juga, peretasan cenderung merusak sesuatu yang lain, dalam perangkat lunak.
Ini adalah panggilan penilaian apakah akan menerima retas atau tidak. Setidaknya Anda ingin insinyur perangkat lunak senior menyetujui peretasan, karena ia memiliki lebih banyak pengalaman dan mampu membuat keputusan yang lebih terdidik. Tentunya Anda tidak ingin para junior membuat keputusan tentang menerima peretasan. Mereka dapat memunculkannya dan berdiskusi dengan para senior apakah manfaatnya sepadan dengan rasa sakit mempertahankan hack.
sumber
Ini adalah retasan , seperti yang ditemukan di thereifixedit.com .
Sebenarnya segala sesuatu di situs itu adalah peretasan.
Hacks adalah penggunaan beberapa hal secara cerdik dan berani di luar konteksnya.
Keindahan hack terdiri dari fakta, bahwa Anda memiliki masalah dan alat yang tidak pernah dimaksudkan untuk menyelesaikannya, tetapi Anda memecahkan masalah hanya dengan alat-alat itu (alih-alih mendapatkan yang tepat). Mereka pintar, cepat dan menyenangkan. Kelemahannya adalah, hasilnya seringkali rapuh dan berbahaya untuk digunakan oleh orang luar.
Maksud saya, jika Anda suka menyelesaikan masalah Anda seperti pada gambar, tidak ada masalah. Masalahnya terjadi, ketika Anda memecahkan masalah orang lain seperti itu. Dalam hal ini, mereka mungkin akan tersengat listrik atau terbakar atau semacamnya.
Dalam pengembangan perangkat lunak, Anda ingin agar kode Anda dapat ditangani oleh orang lain (yang mencakup masa depan Anda) tanpa cedera yang setara. Seperti yang Dijkstra katakan:
Dan hack adalah beberapa trik yang paling pintar.
Hacks menandai bom waktu di suatu tempat dalam kode Anda, karena yang umum secara inheren didasarkan pada terlalu banyak asumsi ("just do it" lebih disukai daripada decoupling yang tepat). Segera setelah asumsi-asumsi itu tidak lagi berlaku, seluruh sistem Anda dapat runtuh tanpa Anda tahu apa yang terjadi.
sumber
Istilah ini tidak terlalu tepat tetapi mungkin merujuk pada solusi cepat dan kotor untuk masalah yang sulit dipecahkan dengan benar. Solusi yang dimaksud mungkin berhasil, tetapi mungkin bukan implementasi yang sangat baik , mungkin memiliki bug halus, mungkin beberapa bug kecil yang diketahui , dan harus diulang kemudian, jika waktu mengizinkan. Saya pikir apa yang Anda dengar disebut "retas" juga kadang-kadang disebut " kludge ".
Saya sering melihat peretasan terjadi ketika ada batasan waktu yang sangat sempit untuk menyelesaikan tugas, dan solusi peretasan diimplementasikan karena berfungsi "cukup" untuk melewati QA, dengan harapan dapat diperbaiki nanti. Sayangnya, perbaikan / pembersihan nanti tidak selalu terjadi :(
sumber
Saya menghabiskan banyak waktu sebagai pengembang front-end, jadi definisi saya tentang peretasan adalah:
Lingkungan dapat berupa kerangka kerja Anda, browser web, database, ATM (mesin ATM tunai), kasing pengadilan. Setiap "sistem aturan", di mana Anda tahu loop-hole dan memanfaatkannya untuk menyelesaikan masalah.
sumber
Peretasan biasanya adalah beberapa kode yang tampaknya memang memberikan hasil yang diinginkan, tetapi dengan cara yang tidak optimal.
Biasanya menggunakan beberapa fitur bahasa / perpustakaan tidak terdokumentasi atau tidak jelas dalam beberapa cara yang tidak diinginkan oleh pencetus dan dengan demikian mengaburkan apa tujuannya.
Kadang-kadang ini dilakukan untuk mengatasi beberapa bahasa atau bug perpustakaan tetapi dalam kebanyakan kasus penyebab utama biasanya ketidaktahuan;
Hal-hal yang dilakukan dalam putaran tentang cara yang tidak efisien, biasanya dalam ruang dan waktu, tetapi pada akhirnya menghasilkan output yang diinginkan, tetapi dengan biaya, dan kemungkinan kasus tepi yang tidak diketahui tanpa testabilitas dan tanpa perawatan. Biasanya berasal dari kurangnya pemahaman mendasar tentang logika atau idiom bahasa. Lihat juga "jalan yang sulit".
Biasanya kodenya adalah sesuatu yang seseorang dengan pengalaman yang sesuai bahkan tidak akan mempertimbangkan untuk melakukannya, atau harus berpikir panjang dan keras untuk menjadikannya rumit dan tidak efisien seperti putaran tentang peretasan yang telah mereka temukan.
Contohnya
Perbaikan Vista
Validasi Validasi Email
Unit Perangkat Lunak
Hash Non deterministik
sumber
Ban gundul bekerja tetapi tidak ada yang menyebutnya solusi ideal untuk tusukan. Ini dapat menciptakan masalah yang lebih buruk di telepon.
Biasanya saya akan mempertimbangkan peretasan sebagai solusi cepat dan kotor untuk masalah langsung. Ini biasanya tidak sesuai dengan praktik pemrograman normal di toko pemrograman (misalnya, gunakan banyak hardcoding). Ini mungkin perbaikan kecil.
Alasan utama buruknya adalah bahwa a) dapat menyebabkan hasil yang tidak terduga b) mungkin tidak cocok dengan desain asli dari kode yang bersangkutan yang akan menyebabkan masalah pemeliharaan. Dalam pengalaman saya, peretasan biasanya didokumentasikan dengan sangat buruk.
sumber
Definisi singkat yang saya dengar dan hormati:
"Solusi untuk gejala yang tidak sepenuhnya menyelesaikan masalah dalam semua kasus"
Kode jelek mungkin atau mungkin bukan hack. Contoh 2 + 2 dalam jawaban lain bukanlah peretasan, ini adalah solusi kode yang jelek dan buruk dari sudut pandang pemahaman kode, tetapi menghasilkan solusi yang benar dalam semua kasus. Pikirkan persamaan faktor dalam matematika- perilaku / hubungan itu identik dan benar di kedua versi, tetapi bentuknya berbeda. Hmm, faktor persamaan, refactor persamaan, kode refactor ... tidak, tidak ada kesamaan saya yakin :)
Contoh di salah satu jawaban lain tentang mengubah nama depan menjadi "Jim" adalah hack: ia memecahkan gejala (nama depan dalam daftar adalah Jim), tetapi tidak sepenuhnya menyelesaikan masalah (daftar tidak diurutkan atau diprioritaskan dengan cara apa pun yang berfungsi untuk semua entri).
sumber
Peretasan adalah melakukan sesuatu yang mengembalikan hasil yang diharapkan, tetapi melakukannya dengan cara yang aneh (biasanya menimbulkan hit kinerja).
Misalnya:
sumber
Bayangkan jika kaki Anda terinfeksi dan harus dilepas agar Anda bisa selamat. Apakah Anda lebih suka dokter cepat-cepat melepaskannya dengan kapak, atau secara operasi menghapusnya setelah memeriksa masalah dan memilih alat, prosedur, dll yang sesuai? Hal yang sama berlaku untuk perangkat lunak.
sumber
Sebuah retas menandakan kelahirannya ketika pembuat kode yang bertanggung jawab menyatakan "Saya akan kembali dan memperbaikinya nanti".
Pada catatan serius - peretasan dalam konteks OP adalah sesuatu yang mencapai hasil yang diinginkan, tetapi menggunakan metode sementara atau tidak dapat diandalkan untuk melakukannya.
Definisi umum lainnya adalah teknik yang mengeksploitasi perilaku kasus tepi untuk menghindari batasan / perlindungan dalam platform.
Peretasan dalam konteks kedua memiliki cap tertentu di antara pahlawan kode "maverick" (baca: berbahaya) ...
sumber