แฮ็คคืออะไร? [ปิด]


55

ฉันมักจะได้ยินเพื่อนร่วมงานพูดกันว่า "นั่นเป็นการแฮ็คที่น่ากลัวและน่ากลัว"

สิ่งที่ฉันสามารถนำออกไปได้ก็คือมันไม่ดี เมื่อฉันถามพวกเขาว่ามันใช้งานได้หรือเปล่าพวกเขาพูดว่า "ใช่ แต่มันไม่ดี" นั่นหมายความว่าไม่ใช่ทางออกที่ดีใช่ไหม วิธีแก้ปัญหาจะไม่ดีถ้ามันทำงานอย่างไร มันเป็นเพราะการปฏิบัติที่ดี? หรือไม่บำรุงรักษา? มันใช้ผลข้างเคียงของรหัสเป็นส่วนหนึ่งของโซลูชันของคุณหรือไม่?

มันน่าสนใจสำหรับฉันเมื่อมีบางสิ่งจัดเป็นแฮ็ค คุณจะระบุได้อย่างไร


5
บางสิ่งอาจทำงานได้ แต่จะช้าเปราะบางน่าเกลียดที่จะทำงานด้วยและเจ็บปวดในการรักษา นี่คือแฮ็ค
Trezoid

1
โค้ดแบบสลัม == แฮ็ค
Garet Claborn

ฉันไม่ได้บอกว่ามันเป็นแฮ็ค แต่คุณต้องการคิดใหม่เกี่ยวกับการปะ+แก้ลิงแบบไดนามิกเพื่อแบ่งตามฮิวริสติก
dietbuddha

สำหรับทุกคนที่ระบุว่าแฮ็กเป็นวงดนตรีสกปรกโปรดดูว่าผู้ที่เรียกตัวเองว่าแฮ็กเกอร์ที่outpost9.com/reference/jargon/jargon_23.html#TAG824 - 2. / n. เป็นสิ่งที่ดีอย่างไม่น่าเชื่อ และอาจต้องใช้เวลานานซึ่งเป็นชิ้นงานที่สร้างสิ่งที่ต้องการอย่างแท้จริง

1
คุณลักษณะที่ไม่ได้ดำเนินการตามมาตรฐานที่เป็นที่นิยมหรือตามมาตรฐานที่เหนือกว่าของคุณ
Aditya P

คำตอบ:


97

มันใช้เครื่องช่วยวงดนตรีชั่วคราวกับแผลที่อ้าปากค้างขนาดใหญ่ ตอนนี้ได้รับการแก้ไขแล้ว แต่จะทำให้เกิดปัญหามากขึ้นในภายหลัง

ตัวอย่างที่ฉันเห็นเมื่อไม่นานมานี้: คุณต้องการให้ชื่อบุคคล"Jim"นั้นปรากฏขึ้นเป็นอันดับแรกเสมอในรายการตัวอักษร " Jim"ได้อย่างรวดเร็วแก้มันคุณเปลี่ยนชื่อให้เขา นี่คือแฮ็คที่จะกลับมากัดคุณในภายหลัง


34
หรือคุณอาจเรียกเขาว่า "AAA Jim"
compman

4
อีกตัวอย่างหนึ่งคือการขยายถ้า ... อื่น ... อื่น ... เนื่องจากข้อ จำกัด ด้านเวลาแทนที่จะเป็นโซลูชันที่ขยายได้มากขึ้น
Phil Lello

29
และทางออกที่แท้จริงสำหรับการทำให้ Jim ปรากฏตัวครั้งแรกในรายการเรียงตามตัวอักษรคือแน่นอนเพื่อเรียงลำดับตัวอักษรใหม่
artem

1
@artem จริงและมันดูเหมือนว่า jzbcdefghiklmnopqrstuvwxya นี้ (คุณไม่ต้องการเรียงลำดับตัวอักษรใหม่เพื่อลบ a และนำขึ้น z)
ชื่อที่แสดงใน

1
เพื่อกล่าวถึงมันในแง่ของการจัดการโครงการ: การแฮ็คเป็นวิธีการแก้ปัญหาที่สามารถสร้างอนาคตของเวลา / ชั่วโมงของคนงานและ / หรือขัดต่อแนวปฏิบัติที่ดีที่สุดหรืออนุสัญญามาตรฐาน
ไม่ระบุตัวตน

60

การตัดสินใจทางวิศวกรรมทุกครั้งเป็นการแลกเปลี่ยนระหว่างต้นทุนและความล่าช้าในทันทีและค่าใช้จ่ายที่ตามมาและหนี้ทางเทคนิค

การแฮ็คเป็นสถานการณ์ที่คนก่อนหน้านี้ต้องการขณะที่ยอมรับสิ่งหลัง

ผู้พัฒนาที่ไม่มีประสบการณ์ (บางส่วนเป็นเพราะวิธีการทำงานของระบบการศึกษาทางวิศวกรรม) มุ่งเน้นไปที่อดีตและไม่มีประสบการณ์เพียงพอที่จะเข้าใจหรือประเมินอย่างหลัง

นักพัฒนาที่มีประสบการณ์ทำ แต่ด้วยเหตุผลต่าง ๆ (หลายอย่างถูกต้องตามกฎหมาย) เลือกอดีต

คำว่าแฮ็คมักแสดงถึงความตั้งใจที่จะแก้ไขปัญหาชั่วคราวและ "ทำทันทีหลังจากนั้น" แต่นักพัฒนาที่มีประสบการณ์รู้ว่าสิ่งที่ถาวรที่สุดในรหัสคือแฮ็กชั่วคราว


13
+1 สำหรับ "แต่นักพัฒนาที่มีประสบการณ์รู้ว่าสิ่งที่ถาวรที่สุดในรหัสคือแฮ็กชั่วคราว"! ซึ่งหมายความว่าความเกียจคร้านไม่ควรป้องกันไม่ให้คุณทำถูก
Matthieu M.

20

วิธีแก้ปัญหาจะไม่ดีถ้ามันทำงานอย่างไร

พิจารณาสิ่งนี้

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

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

อย่างไรก็ตามตัวอย่างที่สองอาจเป็นแฮ็คที่ถูกนำมาใช้เนื่องจากไม่รู้วิธีปฏิบัติที่ดีกว่าหรือข้อสันนิษฐานที่ทำให้/1ดูง่ายขึ้นในเวลานั้นหรือมีข้อบกพร่องในไลบรารีที่ทำให้การ/1ทำงานถูกต้อง

มันเป็นเพราะการปฏิบัติที่ดี?

ไม่แฮ็กเป็นรหัส "สมควร" มีสามสี่สาเหตุ

  • ความไม่รู้หลักการออกแบบที่เหมาะสม (เช่นหลักการที่เป็นของแข็ง)

  • ความเย่อหยิ่ง (เช่นสมมติฐานที่เข้าใจผิด) เกี่ยวกับ API หรือโครงสร้างภาษา

  • ข้อผิดพลาดที่เกิดขึ้นจริงที่ไม่ได้แก้ไข แต่จะทำงานรอบ

  • การจัดการจะแทนที่สมมติฐานการออกแบบและการแก้ไขที่ดี "งบประมาณ" เป็นเหตุผลทั่วไป แต่นี่เป็นหนึ่งในสามข้อที่กล่าวมาข้างต้น (ความเขลาความเย่อหยิ่งหรือข้อผิดพลาด) ที่มีสาเหตุที่ไม่ใช่ด้านเทคนิค

หรือไม่บำรุงรักษา?

นั่นคือประเด็น การแฮ็คนั้นขึ้นอยู่กับความเขลาข้อบกพร่องหรือข้อสันนิษฐาน

มันใช้ผลข้างเคียงของรหัสเป็นส่วนหนึ่งของโซลูชันของคุณหรือไม่?

นั่นอาจเป็นตัวอย่างของความเขลาหรือสมมติฐานที่ผิดพลาด


คำตอบที่ดี แต่ไม่คำนึงถึงว่าบางครั้งการเขียนแฮ็กด้วยคุณภาพที่ถูกบีบเนื่องจากสามเหลี่ยมเทียบกับเวลาเทียบกับต้นทุน
StuperUser

1
ฉันใช้เล่นเกมกับลูกค้า ฉันขอให้พวกเขาเลือกสองประเด็นที่สำคัญที่สุดของโครงการจากคุณภาพเวลาต้นทุน เลือกเวลาและค่าใช้จ่ายเกือบทุกครั้งแล้วพวกเขาก็ต่อรองกับคุณภาพ โดยเฉพาะการอ้างถึงความจริงที่ว่าฉันเป็นที่ปรึกษาและควรจะสามารถส่งมอบทั้งสามภายใต้เวลาราคาและคุณภาพที่โดดเด่น สถานการณ์นี้เป็นเหมือนฟันของไก่!
OptimizePrime

1
@ เพิ่มประสิทธิภาพ: ฟันของไก่หายาก สถานการณ์นี้หายากหรือไม่
Matt Ellen

@ Matt Ellen: อาจจะใช้วลี "Hen's Teeth" ที่ต่างออกไป มันอาจหมายถึง "ขัดแย้ง" แทน "หายาก"
S.Lott

ฉันพบว่าการตัดสินใจ "แทนที่การจัดการ" เกือบทุกครั้ง
Mark McDonald

15

การแฮ็กในบริบทการเขียนโปรแกรมจะเทียบเท่ากับการแก้ไขบางอย่างด้วยเทปเป็ดหรือหมากฝรั่ง

การแฮ็กมักเกี่ยวข้องกับการใช้คุณสมบัติที่ไม่มีเอกสารและไม่รองรับซึ่งอาจเปลี่ยนแปลงในอนาคตรหัสของคุณ พวกเขาอาจเกี่ยวข้องกับค่าตายตัว

โดยทั่วไปการแฮ็คอาจใช้รหัสชั่วคราวในการใช้งานไลบรารี / บริการแทนที่จะแก้ไขปัญหาพื้นฐาน หากภายหลังอยู่นอกเหนือการควบคุมของคุณแฮ็คอาจเป็นวิธีเดียวที่จะจัดการกับมัน


21
โดยใช้เป็ดเทปสำหรับท่อจะเป็นนักต้มตุ๋น;)
JeffO

ต้มตุ๋นต้มตุ๋นต้มตุ๋น
Mateen Ulhaq

11

บางครั้งคำนี้ใช้กับความหมายตรงกันข้ามในขณะที่ "แฮ็คที่ยอดเยี่ยม" เพียงเพราะมันเป็นเรื่องธรรมดามากที่จะพลาดมากกว่าที่จะทำอะไรที่ยอดเยี่ยมมันเป็นเรื่องธรรมดามากที่จะได้ยินเรื่องแฮ็คที่น่ากลัวมากกว่าแฮ็คที่ยอดเยี่ยม แต่ฉันเคยได้ยินคำที่ใช้ทั้งสองวิธี

"แฮ็ค" ที่ใช้ในแง่บวกโดยทั่วไปหมายถึงโซลูชั่นที่สง่างามที่แก้ปัญหาในลักษณะที่ไม่คาดคิดและฉลาดเป็นพิเศษ ความหมายเชิงลบและเชิงบวกนั้นใกล้เคียงกันจริงๆเพราะการแฮ็คที่ยอดเยี่ยมมักเกี่ยวข้องกับการใช้ประโยชน์จากเทคโนโลยีที่ไม่ได้ตั้งใจ


1
มันเป็นแฮ็คที่ยอดเยี่ยมเพราะมันจะยากที่จะเห็นสิ่งที่คุณทำบนพื้นผิว แต่เมื่อตรวจสอบรายละเอียดเพิ่มเติมอย่างชัดเจนก็เห็นได้ชัดว่านี่เป็นฟิลด์โค้ดด้านซ้ายที่ฉลาดอย่างน่าขัน ผมอาจจะนำคุณไปยังแผ่นดินไหวมายากลรากที่สอง: codemaestro.com/reviews/9
โรเบิร์ต Massaioli

10

ทางออกที่ใช้งานได้ในตอนนี้แต่อาจจะทำให้เกิดปัญหาในระยะยาว

ตัวอย่าง: คุณต้องสร้างเอกสาร HTML เติมค่าบางค่าแบบไดนามิก วิธีที่เหมาะสมในการทำเช่นนี้คือการใช้เครื่องมืออย่างใดอย่างหนึ่งที่ออกแบบมาเพื่อการนี้โดยเฉพาะเช่น Freemarker หรือ XSLT หรือ JSP แต่คุณไม่สามารถใช้สิ่งเหล่านี้ได้หรือคุณไม่สามารถใส่ใจในการทำอย่างถูกต้องดังนั้นคุณจึงเขียนสิ่งนี้:

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

9

การแฮ็คเป็นวิธีการแก้ปัญหาที่ชาญฉลาดซึ่งมักขึ้นอยู่กับการคิดนอกกรอบและใช้ประโยชน์จากข้อเท็จจริงที่ไม่คาดคิดเกี่ยวกับสภาพแวดล้อม มีการพูดออกมาเกี่ยวกับการแฮกแบบดั้งเดิมที่ผู้ชมเห็นว่ามันฉลาด แต่ไม่สามารถเข้าใจได้ว่ามันวิเศษหรือน่ากลัว นี่คือสิ่งที่คุณไม่ต้องการในการแก้ไขการบำรุงรักษา

แฮ็คที่แก้ไขปัญหานั้นมีแนวโน้มที่จะขึ้นอยู่กับรายละเอียดของสภาพแวดล้อมหรือคุณสมบัติที่ไม่มีเอกสารของเครื่องมือหรืออะไรทำนองนั้น เป็นไปได้ที่จะเป็นวิธีแก้ปัญหาที่เปราะบางตอนนี้ทำงานได้ แต่มีแนวโน้มที่จะแตกหักเมื่อมีบางสิ่งเปลี่ยนแปลง มันอาจเป็นเรื่องยากที่จะเข้าใจวิธีการทำงานและโปรแกรมเมอร์บำรุงรักษาใด ๆ จะเกลียดโค้ดที่เข้าใจยาก อาจมีผลข้างเคียงที่ไม่เจ็บอะไรในขณะนี้ แต่จะทำให้เกิดปัญหากับโค้ดที่ดีอย่างสมบูรณ์แบบในระยะที่ไกลออกไปในอนาคตและนั่นอาจเป็นฝันร้ายที่ต้องจัดการ


9

แฮ็คคำถูกนำไปใช้ในทางที่ผิด หากคุณต้องการรับประวัติศาสตร์สักหน่อยคุณสามารถทำ Wikipedia ได้ แฮ็คเป็นคำที่ใช้อธิบายกระบวนการปรับแต่งสิ่งที่ต้องทำในสิ่งที่พวกเขาไม่ได้ตั้งใจทำ ในบริบทของวิศวกรรมไฟฟ้านี่เป็นสิ่งที่ดี มีคำอธิบายที่ดีกว่าใน Wikipedia เกี่ยวกับเรื่องนี้

ตอนนี้ในบริบทของวิทยาศาสตร์คอมพิวเตอร์ แฮ็คโดยทั่วไปจะไม่ดี ใช่มันใช้งานได้ แต่โดยปกติแล้วมันหมายถึงว่าโปรแกรมเมอร์เขียนโค้ดบางส่วนที่คลุมเครือซึ่งไม่สอดคล้องกับการออกแบบซอฟต์แวร์และจะทำให้โปรแกรมเมอร์ทุกคนที่ต้องอ่านโค้ดสับสน แน่นอนว่าโปรแกรมเมอร์ในเวลานั้นมีราคาแพงดังนั้นในฐานะผู้จัดการคนหนึ่งต้องการมีซอฟต์แวร์ที่บำรุงรักษาได้ง่ายที่สุด เช่นเดียวกับที่ถูกต้องสำหรับโปรแกรมเมอร์ นอกจากนี้แฮ็กมักจะแตกอย่างอื่นในซอฟต์แวร์

เป็นการเรียกการตัดสินว่าจะยอมรับการแฮ็กหรือไม่ อย่างน้อยคุณต้องการวิศวกรซอฟต์แวร์อาวุโสอนุมัติแฮ็คเนื่องจากเขามีประสบการณ์มากกว่าและสามารถตัดสินใจได้อย่างมีการศึกษามากขึ้น แน่นอนคุณไม่ต้องการให้ผู้อยู่ใต้บังคับบัญชาตัดสินใจเกี่ยวกับการรับแฮ็ก พวกเขาสามารถมากับหนึ่งและพูดคุยกับคนอาวุโสว่าผลประโยชน์คุ้มค่าความเจ็บปวดในการรักษาแฮ็ค


6

นี่คือสับเท่าที่พบในthereifixedit.com

สับ

จริงๆแล้วทุกสิ่งในไซต์นั้นเป็นแฮ็ค

แฮ็กมีความเฉลียวฉลาดและใช้ประโยชน์จากบางสิ่งออกจากบริบทของพวกเขา
ความสวยงามของแฮ็คนั้นประกอบไปด้วยข้อเท็จจริงที่ว่าคุณมีปัญหาและเครื่องมือที่ไม่เคยตั้งใจจะแก้ แต่คุณแก้ปัญหาด้วยเครื่องมือเหล่านั้น (แทนที่จะได้มาถูกทาง) พวกเขาฉลาดเฉลียวและสนุก ข้อเสียคือผลลัพธ์มักจะเปราะบางและเป็นอันตรายต่อการใช้กับบุคคลภายนอก
ฉันหมายความว่าถ้าคุณชอบที่จะแก้ปัญหาของคุณในภาพไม่มีปัญหา ปัญหาเกิดขึ้นเมื่อคุณแก้ปัญหาของคนอื่นเช่นนั้น ในกรณีนี้พวกเขาอาจถูกไฟฟ้าดูดหรือถูกเผาไหม้หรือบางสิ่งบางอย่าง

ในการพัฒนาซอฟต์แวร์คุณต้องการให้ผู้อื่นสามารถจัดการโค้ดของคุณได้ (ซึ่งรวมถึงอนาคตของคุณด้วย) โดยไม่ทำให้เกิดการบาดเจ็บร้ายแรง ดังที่ Dijkstra กล่าวไว้

โปรแกรมเมอร์ผู้มีความรู้ความสามารถในขนาดที่ จำกัด ของกะโหลกศีรษะของเขาเอง ดังนั้นเขาจึงเข้าใกล้ภารกิจของเขาด้วยความถ่อมใจอย่างเต็มที่และหลีกเลี่ยงอุบายที่ฉลาดเช่นโรคระบาด

และแฮ็กอยู่ในกลอุบายที่ฉลาดที่สุด

Hacks กำลังฟ้องเวลาวางระเบิดในที่ของคุณเพราะคนธรรมดานั้นมีพื้นฐานมาจากข้อสันนิษฐานที่มากเกินไป ทันทีที่สมมติฐานเหล่านี้ไม่ได้อยู่ในระบบของคุณอีกต่อไประบบของคุณก็สามารถพังทลายลงได้โดยที่คุณไม่รู้ว่าเกิดอะไรขึ้น


4

คำนี้ไม่แม่นยำมาก แต่อาจหมายถึงคำตอบที่รวดเร็วและสกปรกสำหรับปัญหาที่ยากต่อการแก้ไขอย่างถูกต้อง วิธีแก้ปัญหาในคำถามอาจใช้งานได้ แต่อาจไม่ใช่การนำไปใช้ที่ดีมากอาจมีข้อบกพร่องเล็กน้อยอาจมีข้อบกพร่องเล็กน้อยที่รู้จักและควรจะทำซ้ำในภายหลังหากเวลาอนุญาต ฉันคิดว่าสิ่งที่คุณได้ยินชื่อ "แฮ็ค" บางครั้งก็เรียกว่า " kludge "

ฉันมักจะเห็นแฮ็กเกิดขึ้นเมื่อมีเวลา จำกัด มากในการทำงานให้เสร็จสิ้นและมีการใช้งานโซลูชันแฮ็คเพราะใช้งานได้ "เพียงพอ" ในการส่ง QA ด้วยความหวังว่าจะสามารถแก้ไขได้ในภายหลัง น่าเสียดายที่การแก้ไขในภายหลัง / การทำความสะอาดไม่ได้เกิดขึ้นเสมอ :(


ฉันไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดย "ไม่แม่นยำมาก" - ฉันจะบอกว่าโปรแกรมเมอร์ส่วนใหญ่จะรู้ว่าสิ่งที่มีความหมายโดยการพูดบางรหัสเขียนเป็นแฮ็ค แต่คำตอบที่เหลือคือจุดที่มันทำงานได้ แต่ด้วยเหตุผลบางอย่าง (สถาปัตยกรรมการแสดงและอื่น ๆ ) มันไม่ได้เป็นทางออกที่ดีที่สุด
ozz

@ James: จากประสบการณ์ของฉันโปรแกรมเมอร์สองคนสามารถดูรหัสบางอย่างและหนึ่งจะเรียกว่าแฮ็คอื่น ๆ จะไม่ ไม่มีวิธีจริงๆในการหาปริมาณของรหัสเป็นแฮ็ค ทุกคนมีความคิดของตนเองว่าแฮ็คคืออะไรและบ่อยครั้งที่พวกเขาเหมือนกัน แต่ไม่เหมือนกันเสมอไป เขียนเป็นคนที่มีรหัสของเขาเรียกว่า "แฮ็ก" โดยผู้อื่นและไม่เห็นด้วย และฉันได้เรียกรหัสของคนอื่นว่า "แฮ็ก" และพวกเขาไม่เห็นด้วย จริงอยู่กรณีเหล่านี้อาจเป็นขอบเขต แต่ขอบเขตอาจคลุมเครือในบางครั้ง ...
FrustratedWithFormsDesigner

1
@FWFD - มันไม่เห็นด้วยกับสิ่งที่แฮ็ค หากมีคน "พูดว่า" รหัสบางอย่างเป็นแฮ็คคุณจะรู้ว่าพวกเขาหมายถึงอะไร
ozz

4

ฉันใช้เวลามากในฐานะนักพัฒนาส่วนหน้าดังนั้นคำจำกัดความของการแฮ็คคือ:

วิธีการแก้ปัญหาซึ่งอยู่บนพื้นฐานความรู้เชิงลึกเกี่ยวกับข้อบกพร่องของสภาพแวดล้อมและพฤติกรรมที่ไม่มีเอกสาร

สภาพแวดล้อมสามารถเป็นกรอบเว็บเบราว์เซอร์ฐานข้อมูล ATM (เครื่องกดเงินสด) คดีในศาล "ระบบของกฎ" ใด ๆ ที่คุณรู้จักรูวงจรและใช้ประโยชน์จากมันเพื่อแก้ปัญหา


4

แฮ็คมักจะเป็นรหัสที่เห็นได้ชัดว่าให้ผลลัพธ์ที่ต้องการ แต่ในลักษณะที่เหมาะสมที่สุด

โดยปกติแล้วจะใช้คุณสมบัติภาษา / ไลบรารีที่ไม่มีเอกสารหรือคลุมเครือในทางที่ไม่ได้ตั้งใจโดยผู้สร้างและทำให้งงงวยว่าเจตนาคืออะไร

บางครั้งมันทำเพื่อหลีกเลี่ยงข้อผิดพลาดบางภาษาหรือห้องสมุด แต่ในกรณีส่วนใหญ่สาเหตุหลักมักจะไม่รู้

หากต้องการค้อนทุกอย่างดูเหมือนเล็บ

สิ่งที่ทำในลักษณะที่ไม่มีประสิทธิภาพมักจะอยู่ในพื้นที่และเวลา แต่ในที่สุดก็สร้างผลลัพธ์ที่ต้องการ แต่มีค่าใช้จ่ายและอาจเป็นไปได้ว่ากรณีขอบที่ไม่สามารถรู้ได้โดยไม่มีการทดสอบและไม่มีการบำรุงรักษา มักเกิดจากการขาดความเข้าใจพื้นฐานของตรรกะหรือสำนวนภาษา ดูที่ "วิธีที่ยาก"

โดยทั่วไปแล้วรหัสนั้นเป็นสิ่งที่คนที่มีประสบการณ์ที่เหมาะสมจะไม่ได้พิจารณาที่จะทำหรือจะต้องคิดให้นานและยากที่จะทำให้มันซับซ้อนและไม่มีประสิทธิภาพเท่ากับรอบของการแฮ็กที่พวกเขาได้ค้นพบ

ตัวอย่าง

การแก้ไข Vista

การตรวจสอบความถูกต้องของอีเมล

หน่วยของซอฟต์แวร์

แฮชที่ไม่สามารถกำหนดค่าได้


+1 สำหรับผลที่ไม่ดี และเนื่องจากแฮ็กไม่จำเป็นต้อง "ชั่วคราว" ตามที่ได้รับการโหวตมากที่สุด
rlb.usa

2

ยางหัวโล้นทำงานได้ แต่ไม่มีใครเรียกมันว่าเป็นทางออกที่ดีที่สุดในการเจาะ มันอาจสร้างปัญหาที่เลวร้ายลงในบรรทัด

โดยทั่วไปฉันจะถือว่าแฮ็คเป็นวิธีแก้ปัญหาที่รวดเร็วและสกปรกสำหรับปัญหาทันที โดยทั่วไปอาจไม่สอดคล้องกับการฝึกเขียนโปรแกรมตามปกติในร้านค้าโปรแกรม (เช่นใช้การเข้ารหัสจำนวนมาก) มันอาจจะเป็นการแก้ไขเล็กน้อย

เหตุผลสำคัญที่ไม่ดีคือก) อาจทำให้เกิดผลลัพธ์ที่ไม่คาดคิด b) อาจไม่ตรงกับการออกแบบดั้งเดิมของรหัสที่เป็นปัญหาซึ่งจะทำให้เกิดปัญหาในการบำรุงรักษา จากประสบการณ์ของฉันแฮ็กมักจะมีเอกสารไม่ดีเช่นกัน


2

คำจำกัดความสั้น ๆ ที่ฉันได้ยินและเคารพ:

"วิธีแก้อาการที่ไม่สามารถแก้ปัญหาได้อย่างสมบูรณ์ในทุกกรณี"

รหัสที่น่าเกลียดอาจจะใช่หรือไม่ใช่แฮ็ค ตัวอย่าง 2 + 2 ในคำตอบอื่นไม่ใช่แฮ็คมันเป็นโซลูชันรหัสที่น่าเกลียดและไม่ดีจากจุดยืนการทำความเข้าใจโค้ด แต่มันสร้างโซลูชันที่ถูกต้องในทุกกรณี คิดว่าสมการแฟคตอริ่งในคณิตศาสตร์ - พฤติกรรม / ความสัมพันธ์เหมือนกันและถูกต้องในทั้งสองเวอร์ชัน แต่รูปแบบนั้นแตกต่างกัน อืมปัจจัยสมการ refactor สมการ refactor รหัส ... ไม่ไม่เหมือนกันฉันแน่ใจว่า :)

ตัวอย่างหนึ่งในคำตอบอื่น ๆ เกี่ยวกับการเปลี่ยนชื่อเป็น "Jim" คือแฮ็ค: มันแก้อาการ (ชื่อแรกในรายการคือ Jim) แต่ไม่แก้ปัญหาทั้งหมด (รายการไม่ได้เรียงอย่างสมบูรณ์ หรือจัดลำดับความสำคัญในทางใดก็ได้ที่เหมาะกับการเข้าร่วมทั้งหมด)


1

แฮ็คกำลังทำอะไรบางอย่างที่ให้ผลลัพธ์ตามที่คาดหวัง แต่จะทำในลักษณะที่แปลก

เช่น:

ภารกิจ : การแปลงค่าตัวแปรจำนวนเต็มเป็นสองเท่า

วิธีแก้ไข : ใช้ Cast Operator เช่น: dblVar = CType (intVar, Double)

แฮ็ค : หารด้วยสองครั้ง Ie: dblVar = intvar / 1.0


+1 สำหรับตัวอย่างที่เป็นตัวเอก ในรหัส AS400 อันเก่าฉันจะเห็นวันที่ในยุโรปคูณด้วยทศนิยมที่แปลกประหลาด ปัญหาเริ่มต้นขึ้นเมื่อผู้เข้ารหัสบางรายเริ่มรั่วไหลไปยังโค้ด. Net ของเรา ... อ๊ะ!
Morgan Herlocker

0

ลองนึกภาพว่าขาของคุณติดเชื้อและต้องถูกกำจัดเพื่อที่คุณจะรอดชีวิต คุณอยากให้หมอตัดออกอย่างรวดเร็วด้วยขวานหรือเอาเครื่องมือผ่าตัดออกหลังจากตรวจสอบปัญหาแล้วเลือกเครื่องมือขั้นตอนและอื่น ๆ ที่เหมาะสม? เช่นเดียวกับซอฟต์แวร์


ฉันจะให้เขาแฮ็คมันก่อนที่ผู้โจมตีจะมีโอกาสแฮ็กเข้าไปในสมองของฉัน
Mateen Ulhaq

ถ้าคุณมีเวลาเพียงไม่กี่นาที
StuperUser

0

แฮ็คส่งสัญญาณว่ามันเกิดขึ้นเมื่อ coder ที่รับผิดชอบประกาศว่า "ฉันจะกลับมาและแก้ไขในภายหลัง"

ในบันทึกที่ร้ายแรง - การแฮ็คในบริบทของ OP เป็นสิ่งที่บรรลุผลตามที่ต้องการ แต่ใช้วิธีการชั่วคราวหรือไม่น่าเชื่อถือในการทำเช่นนั้น

คำจำกัดความทั่วไปอื่น ๆ เป็นเทคนิคที่ใช้ประโยชน์จากพฤติกรรมผู้ป่วยกรณีขอบเพื่อหลีกเลี่ยงข้อ จำกัด / การป้องกันในแพลตฟอร์ม

การแฮ็กในบริบทที่สองมีตราประทับบางอย่างใน "ผู้ไม่ฝักใฝ่ฝ่ายใด" (อ่าน: อันตราย) ฮีโร่ตัวแปลงสัญญาณ ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.