คุณจะอธิบาย“ รหัสที่สวยงาม” ให้กับผู้ที่ไม่ใช่โปรแกรมเมอร์ได้อย่างไร [ปิด]


44

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

เมื่อโค้ดทั้งหมดดูเหมือนว่าไม่มีความหมายต่อใครสักคนคุณจะอธิบายได้อย่างไรว่าอะไรทำให้โค้ดชิ้นหนึ่งสวยกว่าอีกรหัสหนึ่ง การเปรียบเทียบอาจมีประโยชน์เช่นกัน


12
คุณสามารถอธิบายรหัสที่สวยงามให้กับโปรแกรมเมอร์โดยไม่แสดงรหัสได้หรือไม่? คำอธิบายเป็นศิลปะอย่างหนึ่ง
kojiro

9
หากเราสามารถหาแนวคิดที่ดีได้ที่นี่บางทีฉันสามารถใช้มันเพื่ออธิบายหลักฐานที่สวยงามสำหรับนักคณิตศาสตร์ที่ไม่ใช่นักคณิตศาสตร์
David Thornley

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

โค้ดที่สวยงามคือเมื่อคุณตั้งค่าฟอนต์ IDE เป็น Comic Sans ถอนหายใจ
Kirk Broadhurst

คำตอบ:


88

การเปรียบเทียบภาษา

คิดถึงเรื่องราวที่คุณโปรดปรานที่สุด มันอาจจะเขียนอย่างสวยงาม สำหรับผู้ที่ไม่ได้พูดภาษาอังกฤษเพียงเพราะพวกเขาไม่สามารถเข้าใจหรือเข้าใจว่าทำไมความสวยงามจึงไม่เบี่ยงเบนความงามของมัน

การเปรียบเทียบการก่อสร้าง

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

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

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


19
การเปรียบเทียบการก่อสร้างนั้นสมบูรณ์แบบ!
Daniel Vandersluis

1
+1 @ user21007: นานมาแล้วนานฉันเป็นสถาปนิกข้อมูลสำหรับไซต์ขนาดใหญ่ - ทุกคนได้รับโครงสร้างการก่อสร้างที่คล้ายคลึงกันและแนวคิดของระบบที่ทำงานและรู้สึกถูกต้อง
ความผิดพลาด

1
การเปรียบเทียบที่ดีสำหรับผลิตภัณฑ์ที่มี GUIs ไม่ดีสำหรับกรอบและไลบรารี
Den

1
ชนิดนี้ทำให้ฉันนึกถึงโฆษณานี้: youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
ฉันเคยใช้ภาษาที่คล้ายคลึงกันมากในอดีต: "ฉันกำลังทำงานกับรหัสที่น่าเกลียดนี้ ... " "เดี๋ยวก่อนคุณหมายถึงอะไรน่าเกลียด? "ดูสิมันเขียน
โกหก

28

คิดถึงรถ

พวกเราส่วนใหญ่มองไปที่รถและมองเห็นร่างกายได้เท่านั้น หากมีคนซ่อม dings บ้างและวางงานทาสีใหม่ลงบนรถมันจะดูสวยงามกว่านี้มาก มันเป็นรถคันเดียวกัน แต่นั่นคือทั้งหมดที่เราเห็น

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

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


11

จำเป็นต้องมีรหัสทั้งหมดและไม่จำเป็นต้องมีคำอธิบายใด ๆ


2
@zdan: ฉันจะตอบโต้ด้วยการบอกว่าคนที่พบว่ามันสวยงามมีความรู้ที่จำเป็น (ดังนั้นในสายตาของคนดู) นอกจากนี้ฉลาด! = IMO ที่สวยงาม
Steven Evers

2
@zdan: เมื่อต้องการคำอธิบายมากมายเช่นนั้นมันไม่ใช่ "รหัสที่สวยงาม" แต่ "แฮ็คที่ฉลาด"
Mason Wheeler

1
FFT เป็นแฮ็คที่ฉลาดมาก แต่ไม่มีทางที่คุณจะเรียกมันว่าสวยงาม
Kyte

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

1
ฉันคิดว่าความคิดของ "บางสิ่งบางอย่างลดลงถึงสิ่งจำเป็น แต่ไม่มีอีกต่อไป" อยู่ในเส้นทางที่ถูกต้อง อย่างไรก็ตามสิ่งที่ไม่สามารถทำได้และเขียนในภาษาที่ไม่ถูกต้องสำหรับงานก็จะเหมาะกับคำนิยามนี้ นอกจากนี้หากกำหนดให้ไม่ต้องมีคำอธิบายอาจเป็นไปได้ว่างานส่วนใหญ่ที่เหมาะกับคำนิยามของคุณจะต้องไม่สำคัญ ฉันไม่คิดว่า "Hello World" สามารถเรียกได้ว่าสวยงาม
user21007

5

ฉันจะอ้างถึงบทกวี:

บทกวีที่เขียนดีมีความรู้สึกที่แตกต่างไปจากสารสกัดจากคู่มือที่แปลไม่ดีเกี่ยวกับเรื่องเดียวกัน


นี่เป็นความคิดของฉันด้วย แต่ไม่ใช่ทุกคนที่ชอบหรือเข้าใจบทกวี ดนตรีก็มาพร้อมกับใจ: เพลงที่ดีกับเพลงที่ไม่ดี
PSU

... 25 อินเตอร์เฟส +25 คลาสทั้งหมดสืบทอดมาจากคลาสนามธรรม? ฉันแค่ต้องการรถเข็นล้อสีแดง และอาจมีไก่บ้าง
Erik Reppen

5

ปัญหาเกี่ยวกับการเขียนรหัสเกี่ยวกับการสร้างแนวคิดดังนั้นรหัสที่สวยงามจึงแสดงให้เห็นถึงแนวคิดที่โดดเด่นของปัญหา

ตัวอย่างเช่นเราชอบมันเมื่อปัญหาหนึ่งที่สามารถลดลงไปสู่การแก้ไขปัญหาที่มีอยู่ให้กู้ยืมข้อมูลเชิงลึกเข้ามาในลักษณะของปัญหาของตัวเอง

บางครั้งการกำหนดแนวคิดใหม่ของปัญหาอาจทำให้ดูง่าย เราพูดถึงการแก้ปัญหาที่สง่างามที่ต้องใช้เทคนิคง่าย ๆ ที่ทำให้งานยากขึ้น

สำหรับฉัน Quicksort เป็นตัวอย่างที่สวยงาม: เลือกองค์ประกอบแบบสุ่มจากอาร์เรย์แล้วเปรียบเทียบองค์ประกอบอื่น ๆ ในอาร์เรย์กับมัน ถ้าจำนวนนั้นน้อยกว่านี้ให้วางไว้ในกอง A ถ้าจำนวนนั้นมากกว่านั้นให้ใส่ในกอง B ทีนี้เมื่อความไม่เท่าเทียมกันของสามเหลี่ยมไม่มีองค์ประกอบใดในกอง A ที่จะต้องเปรียบเทียบกับองค์ประกอบใด ๆ ในกอง B เรียกเก็บจาก A และ B และคุณทำเสร็จแล้ว .


5

เตือนฉันถึงสิ่งนี้:

http://imgs.xkcd.com/comics/lisp.jpg

ที่มา: XKCD - LISP


5
ดีกว่าที่จะมีเป็นลิงค์โดยเฉพาะอย่างยิ่งเป็นข้อความโฮเวอร์หายไป
user151019

1
และ hovertext เป็นเรื่องตลกครึ่งหนึ่งในกรณีนี้

4

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

  • การอ่าน
  • ความรัดกุม
  • อย่างมีประสิทธิภาพ
  • มีความยืดหยุ่น
  • การชัดแจ้ง
  • ความแข็งแรง
  • ความปลอดภัย / คนบ้า proofness
  • ความสมบูรณ์
  • ความมั่นคง
  • ใช้งานง่าย (สำหรับ API)

2

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


อืม ... ฉันไม่รู้สึกเลย
ไดนามิก

การเขียนโปรแกรมเป็นงานฝีมือมากกว่าศิลปะ (หรือวิทยาศาสตร์สำหรับเรื่องนั้น) ไม่ใช่ว่าฉันจะเคาะ
Erik Reppen

1

หากบุคคลนั้นมีความรอบรู้ในวิชาคณิตศาสตร์ฉันชอบเปรียบเทียบโค้ดที่สวยงามกับโซลูชันที่สง่างามกับปัญหา


1

โค้ดที่ดีบางประการคือ:

  1. มันมีรายละเอียดเล็ก ๆ จำนวนมากที่ชี้ไปในทิศทางเดียวกัน
  2. มันมีความสอดคล้องในโครงสร้างทุกส่วนตามรูปแบบเดียวกัน
  3. แต่มันไม่ได้ทำซ้ำตัวเองแทนทุกส่วนจะแตกต่างกัน
  4. มันไม่อนุญาตให้มีพฤติกรรมที่ถือว่าไม่ถูกต้อง
  5. มันมีจำนวนสถานะต่างกันน้อยที่สุดเท่าที่จะเป็นไปได้
  6. คุณสามารถเข้าใจพฤติกรรมทั้งหมดของรหัสโดยการอ่านฟังก์ชั่นต้นแบบ
  7. มันไม่มีผลข้างเคียง
  8. การดำเนินการของมันรับประกันว่าจะหยุด
  9. มันไม่ได้ใช้คุณสมบัติขั้นสูงใด ๆที่มีอยู่ในการเขียนโปรแกรมภาษา
  10. มันไม่ซับซ้อนเกินไปเมื่อเทียบกับความซับซ้อนของปัญหาที่แก้
  11. มีข้อผิดพลาดหรือพฤติกรรมที่ไม่ได้กำหนดไว้ในนั้น
  12. มันสามารถรวบรวมกับคอมไพเลอร์จากผู้ขายที่แตกต่างกัน
  13. มันไม่มีการพึ่งพารหัสที่ไม่ได้ใช้

0

สำหรับฉันภาษาเป็นเครื่องมือของฉัน

และเช่นเดียวกับช่างฝีมือคนอื่น ๆ ฉันชอบเครื่องมือของฉันให้อยู่ในสภาพดี

เงื่อนไขของรหัสที่ดีขึ้นเกี่ยวกับความชัดเจนของแนวคิดการบำรุงรักษาและการอ่าน รหัสที่ดีกว่า

ดังนั้นสำหรับฉันการอ่านโค้ดที่ดีก็เหมือนกับการเปิดกล่องเครื่องมือด้วยเครื่องมือที่ออกแบบมาอย่างดี

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


0

ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่คุณหมายถึงโดยรหัสที่สวยงาม

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

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


0

ในความเห็นต่ำต้อยและส่วนตัวของฉันรหัสที่สวยงามก็เหมือนหนังสือนิยายที่ดี:

  • คุณสามารถอ่านได้ตั้งแต่ต้นจนจบ / คุณไม่จำเป็นต้องข้ามไปข้างหน้าหน้าอนาคตของหนังสือเล่มนี้เพื่อทำความเข้าใจกับหน้าปัจจุบัน
  • มันไม่มีการทำซ้ำที่ไม่จำเป็น / หนังสือเป็นเรื่องที่น่าเบื่อถ้ามันมักจะพูดในสิ่งเดียวกัน
  • เจตนาของแต่ละส่วนนั้นชัดเจนเกือบทุกครั้ง / คุณไม่จำเป็นต้องมีพจนานุกรมอยู่เคียงข้างคุณตลอดเวลาในการอ่านหนังสือ (เว้นแต่จะเป็นบทกวี / การตีกอล์ฟ xD)
  • มันถูกจัดระเบียบในโครงสร้างย่อยที่มีขนาดและความซับซ้อนที่เหมาะสม (โมดูลฟังก์ชั่นข้อความสั่ง ฯลฯ ) มันไม่มี 'ซ้อน' / บทวรรคและประโยคที่มากเกินไปมีความสมดุลอย่างเหมาะสม ไม่ใช้การอยู่ใต้ประโยคหลายระดับเกินไป
  • มันเป็นที่พอใจต่อสายตาในลักษณะสุนทรียศาสตร์ (เยื้องอย่างดีบล็อกคั่นอย่างถูกต้อง ฯลฯ ) / เหมือนหนังสือที่มีการเรียงพิมพ์ที่เหมาะสม

0

มันเหมือน บริษัท ที่มีความเอนเอียงซึ่งทุกคนรู้จักบทบาทของพวกเขามันง่ายที่จะเข้าใจว่าใครเก่งเรื่องอะไรและไม่มีความพยายามซ้ำซ้อน

เมื่อเทียบกับ

ผู้จัดการสำนักงานสามคนไม่มีอะไรดีไปกว่าการรายงานข้อผิดพลาดของ TPS คุณ! @ # $ ing FAX MACHINE ไม่เคยทำงาน !!! และพนักงานที่ได้รับอาจได้รับงานจริงประมาณ 15 นาทีต่อสัปดาห์ พนักงานอาจไม่ทำงานทางเทคนิคที่นั่นอีกต่อไปเพราะบางคนลืมที่จะยิงเขา (มันยากที่จะบอกจริง ๆ เพราะไม่มีใครทำงานได้อย่างมีประสิทธิภาพและเป็นการยากที่จะประเมินสิ่งที่พวกเขากำลังพยายามทำให้สำเร็จ) และเพื่อให้ได้สิ่งที่ทำได้จริงต้องใช้ระบบที่ซับซ้อนเกินกว่าที่ใครบางคนอ่านและคิดว่าจะดูเรียบร้อยในประวัติย่อของพวกเขาแม้ว่ามันจะไม่ได้แก้ปัญหาที่พวกเขามี


-1

ไม่มี "รหัสที่สวยงาม" มี "อัลกอริทึมที่สง่างาม" และ "การออกแบบที่หรูหรา" การออกแบบสามารถเข้าใจได้โดยโปรแกรมเมอร์ที่ไม่ใช่

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


-1

คุณอธิบายผู้คนว่าทำไมรูปภาพที่ดีถึงดี? ไม่คุณแสดงรูปภาพให้พวกเขา (เพราะคุณรู้ไหมรูปภาพนั้นมีความยาวมากกว่า 1,000 คำ) ดังนั้นสิ่งที่ดีที่สุดคือการแสดงรหัสชิ้นเล็กชิ้นน้อยที่สง่างามสวยงามสมบูรณ์แบบ (และอาจเป็นการเปรียบเทียบว่า Joe Average จะเขียนโค้ดอย่างไร)

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