it-swarm.asia

Hack nedir?

İş arkadaşlarının sık sık birbirlerine "Bu korkunç, korkunç bir hack" dediğini duyuyorum.

Bundan uzaklaşabileceğim iyi değil. Onlara işe yarayıp yaramadığını sorduğumda "evet, ama iyi değil" diyorlar. Bu iyi bir çözüm olmadığı anlamına mı geliyor? Bir çözüm işe yararsa ne kadar kötü? İyi uygulama nedeniyle mi? Yoksa bakımı mümkün değil mi? Çözümünüzün bir parçası olarak kodun bir yan etkisi mi kullanıyor?

Bir şey kesmek olarak sınıflandırıldığında benim için ilginç. Nasıl tanımlayabilirsin?

55
dustyprogrammer

Büyük bir açıklık yarasına geçici bir bant yardımı uyguluyor. Şimdilik düzeltildi, ancak daha sonra daha fazla soruna neden olacak.

Son zamanlarda gördüğüm bir örnek: "Jim", alfabetik listede her zaman ilk sırada görünmek için. Hızlı bir şekilde çözmek için onu " Jim". Bu kesinlikle sizi daha sonra ısırmaya gelecek bir hack.

98
JD Isaacks

Her mühendislik kararı, derhal maliyet ve gecikme ile sonuçta ortaya çıkan maliyetler ve teknik borç arasında bir dengedir.

Kesmek, sonuç olarak ikincisini kabul ederken birincisinin tercih edildiği bir durumdur.

Deneyimsiz geliştiriciler (kısmen mühendislik eğitim sisteminin çalışma şekli nedeniyle) öncekine odaklanır ve ikincisini gerçekten anlamak veya tahmin etmek için yeterli deneyime sahip değildir.

Deneyimli geliştiriciler yapar, ancak çeşitli nedenlerle (birçok meşru) öncekini seçin.

Kesmek terimi neredeyse her zaman bir sorunu geçici olarak çözme ve "hemen sonra yapma" niyetini ima eder, ancak deneyimli geliştiriciler koddaki en kalıcı şeylerin geçici kesmek olduğunu bilir.

60
Uri

Bir çözüm işe yararsa ne kadar kötü?

Bunu düşün

2 + 2 <-- Correct.  Elegant.  Simple.

(2/1 + 2/1) * 1/1 <-- Also Correct.  Lots of useless weird code.  

Bununla birlikte, ikinci örnek, daha iyi bir uygulamanın cehaleti veya /1 'Nun o zaman daha basit gibi görünen bir varsayım veya yapılan bir kütüphanedeki bir hata nedeniyle kullanılan hack olabilir. /1 düzgün çalışıyor.

İyi uygulama nedeniyle mi?

Hayır. Saldırılar "uygun" koddur. Var üç dört neden.

  • Uygun tasarım ilkelerini bilmemek. (yani SOLID ilkeleri)

  • Bir API veya dil yapısı hakkında kibir (yani yanlış varsayımlar).

  • Çözülmemiş ancak çözülmüş gerçek hatalar.

  • Yönetim, iyi tasarım ve düzeltme varsayımlarını geçersiz kılar. "Bütçe" yaygın bir gerekçe olmakla birlikte, bu temelde teknik olmayan bir temel nedenden ötürü yukarıdaki üç taneden (cehalet, kibir veya hata) biridir.

Yoksa bakımı mümkün değil mi?

Mesele bu. Kesmek cehalet, böcek veya varsayımlara dayanmaktadır.

Çözümünüzün bir parçası olarak kodun bir yan etkisi mi kullanıyor?

Bu bir cehalet veya yanlış varsayım örneği olabilir.

20
S.Lott

Programlama bağlamında kesmek, ördek kaseti veya sakız ile bir şeyi düzeltmeye eşdeğer olacaktır.

Hack çoğu zaman kodunuzu kırmak için değişebilecek belgelenmemiş ve desteklenmeyen bazı özelliklerin kullanılmasını içerir. Ayrıca sabit kodlanmış değerler içerebilirler.

Hack genellikle, altta yatan sorunu çözmek yerine, bazı kütüphane/hizmet kullanarak kodda geçici bir çözüm olabilir. Daha sonra kontrolünüz dışındaysa, kesmek onunla başa çıkmanın tek yolu olabilir.

15
vartec

Terim, "parlak bir hackte" olduğu gibi, zaman zaman zıt çağrışımla birlikte kullanılır. Sadece berbat bir şey yapmaktan çok daha yaygın olduğu için, korkunç hack'leri parlak hack'lerden duymak çok daha yaygındır, ancak terimin her iki şekilde de kullanıldığını duydum.

Olumlu anlamda kullanılan "Hack" temelde sorunu beklenmedik ve özellikle akıllı bir şekilde çözen zarif bir çözüm anlamına gelir. Olumsuz ve olumlu anlamlar aslında biraz yakındır, çünkü parlak bir kesmek genellikle teknolojinin istenmeyen bir yönünden yararlanmayı içerir.

11
jhocking

Çalışan bir çözüm şu anda, ancak muhtemelen uzun vadede sorunlara neden olacaktır.

Örnek: Bazı değerleri dinamik olarak dolduran bir HTML belgesi oluşturmanız gerekir. Bunu yapmanın uygun yolu, bu amaç için tasarlanmış Freemarker veya XSLT veya JSP gibi araçlardan birini kullanmaktır. Ancak bunlardan hiçbirini kullanamazsınız veya düzgün bir şekilde yapmaktan rahatsız olamazsınız, bu yüzden böyle bir şey yazıyorsunuz:

public String getGreetingPage(String name) {
    return "<html><body>Hello, "+name+"!</body></html>";
}
10
Mike Baranczak

Bilgisayar korsanlığı, çoğu zaman kullanıma hazır düşünmeye ve çevre hakkında beklenmedik gerçeklerden yararlanmaya bağlı olarak, bir soruna ustaca bir çözümdür. Arketipik hack hakkında, izleyicilerin dahiyane olduğunu kabul ettikleri, ancak harika ya da korkunç olup olmadığını anlayamadıkları konusunda bir söz var. Bu, bakım düzeltmelerinizde istemediğiniz bir şeydir.

Bir sorunu gideren bir saldırı, büyük olasılıkla ortamın ayrıntılarına veya bir aracın belgelenmemiş özelliklerine veya buna benzer bir şeye bağlı olacaktır. Muhtemelen kırılgan bir çözüm, şimdi çalışıyor ama muhtemelen bir şey değiştiğinde kırılıyor. Nasıl çalıştığını anlamak zor olabilir ve herhangi bir bakım programcısı anlaşılması zor koddan nefret eder. Şimdilik hiçbir şeye zarar vermeyen, ancak ileride biraz uzakta olan mükemmel kod parçalarında sorunlara neden olacak ve bununla başa çıkmak kabus olabilir yan etkileri olabilir.

9
David Thornley

Word kesmek yanlış kullanılır. Gerçekten biraz tarih almak istiyorsanız, Vikipedi yapabilirsiniz. Bilgisayar korsanlığı, yapmak istedikleri bir şeyi yapmak için bir şeyler yapma sürecini tanımlayan bir Word'dür. Elektrik mühendisliği bağlamında bu iyidir. Bu konuda Wikipedia'da daha iyi bir açıklama var.

Şimdi, bilgisayar bilimi bağlamında. Bir kesmek genellikle kötüdür. Evet, işe yarıyor, ancak genellikle programcının, yazılımın tasarımına uymayan ve bu kodu okumak zorunda olan her programcıyı karıştıracak belirsiz bir kod parçası yazdığı anlamına gelir. Tabii ki programcılar zaman pahalıdır, bu yüzden bir yönetici olarak en kolay korunabilen yazılıma sahip olmak ister. Aynı şey programcılar için de geçerlidir. Ayrıca, hackler yazılımda başka bir şeyi kırma eğilimindedir.

Saldırıyı kabul edip etmemeye karar verir. En azından kıdemli yazılım mühendisinin hack'i onaylamasını istersiniz, çünkü daha fazla deneyime sahiptir ve daha eğitimli bir karar verebilir. Kesinlikle gençlerin kesmek kabul etme konusunda karar vermelerini istemezsiniz. Bir tane ile gelebilir ve faydaların kesmek için acıya değip değmeyeceğini üst düzey adamlarla tartışabilirler.

9
Erion

thereifixedit.com adresinde bulunan bir hack.

Hack

Aslında o sitedeki her şey bir hack.

Bilgisayar korsanları, bazı şeyleri kendi bağlamları dışında ustaca ve cesurca kullanırlar.
Bir hackin güzelliği, belirli bir probleminiz ve onu asla çözmeyi amaçlamayan araçlarınız olması, ancak problemi sadece bu araçlarla (doğru olanları almak yerine) çözmenizdir. Zeki, hızlı ve eğlenceli. Dezavantajı, sonuçların genellikle kırılgan ve dışarıdakiler için tehlikeli olmasıdır.
Yani, sorununuzu resimde olduğu gibi çözmeyi seviyorsanız, sorun yok. Sorun, diğer insanların sorunlarını böyle çözdüğünüzde ortaya çıkar. Bu durumda, muhtemelen elektrik çarpmış veya yanmış olabilirler.

Yazılım geliştirmede, kodunuzun ölümcül bir yaralanmaya eşdeğer olmadan başkaları tarafından (geleceğinizi de içeren) ele alınmasını istersiniz. Dijkstra'nın dediği gibi:

Yetkili programcı, kendi kafatasının sınırlı boyutunun tamamen farkındadır. Bu nedenle görevine tam alçakgönüllülükle yaklaşıyor ve veba gibi akıllı hilelerden kaçınıyor.

Ve hackler en akıllı numaralar arasında.

Hack'ler kodunuzda bir yerde saatli bombaları işaretliyor, çünkü yaygın olanları doğal olarak çok fazla varsayımlara dayanıyor ("sadece yapmak" uygun ayırma için tercih ediliyor). Bu varsayımlar artık geçerli olmadığında, ne olduğuna dair bir fikriniz olmadan tüm sisteminiz bozulabilir.

6
back2dos

Terim çok kesin değildir, ancak muhtemelen doğru çözülmesi zor bir soruna hızlı ve kirli bir çözümden bahseder. Söz konusu çözüm muhtemelen işe yarıyor, ancak muhtemelen çok iyi bir uygulama değil, belki ince hatalar var, belki biraz küçük bilinen hatalar ve zaman izin veriyorsa daha sonra yeniden yapılmalıdır. Bence "hack" olarak adlandırılan şeylere bazen " kludge " da denir.

Sık sık bir görevi bitirmek için çok sıkı zaman kısıtlamaları olduğunda saldırıların gerçekleştiğini görüyorum ve daha sonra düzeltilebileceği ümidiyle KG'yi geçecek "sadece" çalıştığı için bir saldırı çözümü uygulandı. Ne yazık ki, daha sonra düzeltme/temizleme her zaman gerçekleşmez :(

Bir saldırı genellikle görünüşte istenen çıktıyı sağlayan, ancak en uygun olmayan şekilde verilen bir koddur.

Genellikle, yaratıcı tarafından istenmeyen ve böylece niyetin ne olduğunu gizleyen bir şekilde belgelenmemiş veya belirsiz bir dil/kütüphane özelliği kullanılır.

Bazen bir dil veya kütüphane hatası etrafında çalışmak için yapılır, ancak çoğu durumda asıl neden genellikle cehalettir;

Bir çekiç için her şey çivi gibi görünür.

Genellikle hem boşlukta hem de zamanda verimsiz bir şekilde yuvarlak olarak yapılan, ancak sonuçta istenen çıktıyı üretebilir, ancak test edilebilir ve sürdürülebilirliği olmayan maliyet ve olası bilinemez Edge vakaları. Genellikle temel mantık veya dil deyimlerinin anlaşılmamasından kaynaklanır. Ayrıca bkz. "Zor yol".

Genellikle kod, uygun deneyime sahip birisinin yapmayı düşünmeyeceği veya ortaya çıkardıkları kesmek hakkındaki karışıklık turu kadar karmaşık ve verimsiz hale getirmek için uzun ve zor düşünmesi gereken bir şeydir.

örnekleri

Vista Düzeltmesi

E-posta Doğrulama Geçerliliği

Yazılım Birimleri

Deterministik olmayan Hash

4
user7519

Bir ön uç geliştirici olarak çok zaman harcıyorum, bu yüzden hack tanımım:

Ortam kusurlarının derinlemesine bilgisine ve belgelenmemiş davranışa dayanan bir çözüm.

Ortam sizin çerçeveniz, web tarayıcı, veritabanı, ATM (bankamatik), mahkeme olabilir. Bir döngü deliği bildiğiniz ve bir sorunu çözmek için kullandığınız herhangi bir "kural sistemi".

4
mefisto

Kel bir lastik işe yarıyor, ancak hiç kimse bunu delinmek için ideal bir çözüm olarak adlandırmaz. Hatta daha kötü sorunlar yaratabilir.

Genellikle bir hack acil bir soruna hızlı ve kirli bir çözüm olarak kabul ediyorum. Genellikle bir programlama mağazasındaki normal programlama uygulamasına uymayabilir (örn. Çok fazla kodlama kullanın). Küçük bir düzeltme olabilir.

Kötü olmasının önemli bir nedeni, a) öngörülemeyen sonuçlara neden olabilir b) söz konusu kodun bakım sorunlarına neden olacak orijinal tasarımıyla eşleşmeyebilir. Benim tecrübelerime göre, kesmek genellikle çok kötü belgelenmiştir.

2
temptar

Duyduğum ve saygı duyduğum kısa bir tanım:

"Sorunu her durumda tam olarak çözmeyen bir semptomun çözümü"

Çirkin kod bir hack olabilir veya olmayabilir. Başka bir cevaptaki 2 + 2 örneği hack değildir, çirkin bir kod çözümüdür ve kod anlama açısından kötüdür, ancak her durumda doğru çözümü üretir. Matematikte çarpanlara ayrılmış bir denklem düşünün - davranış/ilişki her iki versiyonda da aynı ve doğrudur, fakat form farklıdır. Hmm, faktör denklemi, refactor denklemi, refactor kodu ... hayır, benzerlik yok eminim :)

İlk adı "Jim" olarak değiştirmeyle ilgili diğer yanıtlardan biri hack'tir: semptomu çözer (listedeki ad Jim'dir), ancak sorunu tam olarak çözmez (liste sıralanmaz) veya tüm kayıtlar için geçerli olan herhangi bir şekilde önceliklendirilmiş).

2
anon

Bir saldırı, beklenen sonucu döndüren bir şey yapıyor, ancak bunu garip bir şekilde yapıyor (genellikle bir performans isabeti veriyor).

Örneğin.:

Görev: Bir Tamsayı Değişkenini İkiye Dönüştürmek

Çözüm: Döküm İşleci kullanın. Yani: dblVar = CType (intVar, Double)

Hack: İkiye Böl. Yani: dblVar = intvar/1.0

1
Onion-Knight

Bir hack, sorumlu kodlayıcı "Geri dönüp daha sonra tamir edeceğim" ilan ettiğinde doğduğunu gösterir.

Ciddi bir notta - OP bağlamında bir saldırı, istenen sonucu elde eden bir şeydir, ancak bunu yapmak için geçici veya güvenilir olmayan bir yöntem kullanır.

Diğer yaygın tanım, platformdaki sınırlamaları/önlemleri atlatmak için Edge vaka davranışlarını kullanan bir tekniktir.

İkinci bağlamda Hack "maverick" (okuma: tehlikeli) kahraman kodlayıcılar arasında belirli bir kaşe var ...

0
sunwukung

Bacağınızın enfekte olup olmadığını ve hayatta kalmak için çıkarılması gerektiğini düşünün. Sorunu inceledikten ve uygun araçları, prosedürü vb. Seçtikten sonra doktorun hızlıca bir balta ile kesilmesini mi yoksa cerrahi olarak çıkarmasını mı tercih edersiniz? Aynısı yazılım için de geçerlidir.

0
Josh Smith