Làm thế nào bạn có thể giải thích mã Code đẹp cho một người không lập trình? [đóng cửa]


44

Khi nói chuyện với một người bạn không phải lập trình viên, tôi tình cờ đề cập đến khái niệm "mã đẹp" và cô ấy muốn hiểu điều đó có nghĩa là gì, nhưng tôi có chút hụt hẫng khi giải thích nó với người không có Bối cảnh nào.

Khi tất cả các mã trông giống như vô nghĩa với ai đó, làm thế nào bạn có thể giải thích điều gì làm cho một đoạn mã đẹp hơn một đoạn mã khác? Tương tự cũng có thể hữu ích.


12
Bạn có thể giải thích mã đẹp cho một lập trình viên mà không hiển thị mã? Mô tả chính nó là một nghệ thuật.
kojiro

9
Nếu chúng ta có thể đưa ra một ý tưởng hay ở đây, có lẽ tôi có thể sử dụng nó để mô tả một bằng chứng đẹp cho một người không phải là nhà toán học.
David Thornley

Một mã đẹp có thể là một mã sử dụng các ý tưởng đơn giản hơn và ít hơn trong khi thực hiện công việc một cách chính xác. Trớ trêu thay, nhiệm vụ trước đây là tìm kiếm những ý tưởng đơn giản có thể là một công việc phức tạp và đó là điều chúng tôi ngưỡng mộ. - Xin lỗi tôi không thể tìm ngay bây giờ một cách để giải thích điều này theo cách tự nhiên hơn với ai đó.
LatinSuD

Mã đẹp là khi bạn đặt phông chữ IDE của bạn thành Comic Sans. thở dài
Kirk Broadhurst

Câu trả lời:


88

Tương tự ngôn ngữ

Hãy nghĩ về câu chuyện yêu thích nhất của bạn. Nó có lẽ được viết rất đẹp. Đối với một người không nói tiếng Anh, chỉ vì họ không thể hiểu nó hoặc hiểu lý do tại sao nó đẹp không làm mất đi vẻ đẹp của nó.

Tương tự xây dựng

Hãy xem xét một ngôi nhà tồi tàn được xây dựng. Nó có cửa ra vào và cửa sổ rõ ràng là gạch. Vữa bị nứt ở một góc nơi nền móng không đủ. Và không ai có thể hiểu tại sao có một cầu thang dẫn lên tầng 2 không tồn tại. Nhà vệ sinh được xây dựng bên cạnh nhà bếp không có quạt hút và nằm ở vị trí mà những cơn gió thịnh hành sẽ thổi bay mùi hôi khó chịu qua phần còn lại của ngôi nhà. Ống khói từ lò sưởi mở cách một số gỗ 5cm, sẵn sàng để bắt lửa.

Ngược lại với một ngôi nhà là nơi cần có, nó được bảo trì thấp, cách nhiệt hoàn hảo để một chút nhiệt mặt trời sẽ giữ ấm trong mùa đông, năng lượng được phục hồi từ thông gió, do đó bạn có cả không khí trong lành, nhiệt độ thoải mái và hóa đơn điện không đáng kể. Nó được chế tạo bằng vật liệu không cháy để không bị cháy. Nó sẽ chịu được trận động đất 9.0 và cơn lốc xoáy F5. Nó chỉ tốn hơn 30% để xây dựng so với ngôi nhà khác, nhưng sẽ trả phần chênh lệch trong 5 năm. Và nó là thẩm mỹ.

GUI giống như hình dáng bên ngoài của một ngôi nhà. Người dùng có thể nhận ra vẻ đẹp trong GUI, giống như họ có thể đánh giá cao một ngôi nhà đẹp. Nhưng có lẽ thậm chí quan trọng hơn, vẻ đẹp thực sự trong thiết kế trong cả nhà và chương trình là những thứ vô hình đối với người không quen biết, nhưng quan trọng hoặc tốt đẹp để có bất kể.


19
Sự tương tự xây dựng là hoàn hảo!
Daniel Vandersluis

1
+1 @ user21007: Từ lâu, tôi đã là một kiến ​​trúc sư thông tin cho các trang web lớn - mọi người đều có sự tương tự về xây dựng và khái niệm về các hệ thống chỉ hoạt động và cảm thấy đúng.
sai lầm ngớ ngẩn

1
Tương tự tốt cho các sản phẩm có GUI. Không tốt cho khung và thư viện.
Den

1
Loại nhắc nhở tôi về quảng cáo này: youtube.com/watch?v=p9tjs-6wbsI
JohnL

4
Trước đây tôi đã sử dụng ngôn ngữ tương tự rất nhiều: "Tôi đang làm việc với mã xấu xí này ..." "Đợi đã, ý của bạn là xấu xí gì?" "u thấy rồi, nó viết lời nói
dối

28

Hãy nghĩ về một chiếc xe hơi.

Hầu hết chúng ta nhìn vào chiếc xe, và chỉ có thể nhìn thấy cơ thể. Nếu ai đó sửa chữa một số dings và đặt một công việc sơn mới trên xe, nó sẽ trông đẹp hơn nhiều. Về cơ bản là cùng một chiếc xe, nhưng đó là tất cả những gì chúng ta thấy.

Một thợ máy mở xe, và nhìn vào động cơ. Họ thấy động cơ đó tốt như thế nào. Họ thấy rằng mọi thứ được sắp xếp để dễ dàng có được, duy trì và làm việc. Họ nhìn thấy các bộ phận và biết nó được thiết kế tốt như thế nào. Đối với một thợ cơ khí có kinh nghiệm, động cơ của một chiếc xe chất lượng cao được bảo trì tốt trở thành một điều tuyệt vời. Họ không thể giải thích cho bạn điều gì làm cho nó đẹp, nhưng quan niệm về cái đẹp của họ có khả năng chuyển thành chi phí bảo trì thấp hơn, tuổi thọ xe dài hơn và hiệu suất tốt hơn. Tất cả những điều này làm tăng giá trị của chiếc xe đó, mặc dù bạn không thể nhìn thấy nó.

Khi bạn nhìn vào một trang web, hoặc một ứng dụng, bạn đang nhìn vào nó giống như hầu hết chúng ta thấy ô tô. Khi tôi nhìn vào mã tôi đang nhìn nó giống như người thợ máy nhìn vào động cơ của chiếc xe. Bạn không bao giờ có thể trải nghiệm vẻ đẹp của mã đó như tôi, nó thực sự vô hình với bạn. Nhưng vẻ đẹp đó quan trọng giống như vẻ đẹp của thợ máy. Nó xác định phần mềm đó chạy tốt như thế nào, loại vấn đề nào sẽ có, phần mềm có thể được cải thiện dễ dàng như thế nào, v.v. Tất cả những điều này làm tăng giá trị của phần mềm đó, mặc dù bạn không thể thấy nó.


11

Tất cả các mã hiện tại, là bắt buộc, và không có mã nào yêu cầu giải thích.


2
@zdan: Tôi phản bác bằng cách nói rằng những người thấy nó đẹp, có kiến ​​thức cần thiết (do đó, trong mắt của kẻ si tình). Bên cạnh đó, thông minh! = IMO đẹp.
Steven Evers

2
@zdan: Khi nó đòi hỏi rất nhiều lời giải thích như vậy, đó không phải là "mã đẹp", mà là "một cách hack thông minh".
Mason Wheeler

1
FFT là một hack rất thông minh, nhưng không có cách nào bạn có thể gọi nó là đẹp.
Kyte

1
Tôi đồng ý với SnOrfus cho hầu hết các phần. Tuy nhiên, với tôi, mã đẹp không chỉ cần thiết, đủ và tự giải thích mà còn phải chủ quan tạo cảm giác hoàn hảo & nhẹ nhàng. Tôi tin rằng rất nhiều mã có thể đủ điều kiện các tiêu chí được SnOrfus đưa ra nhưng vẫn cảm thấy khá cồng kềnh hoặc không hoàn hảo theo một cách khác. Tôi sẽ gọi rất nhiều mã như vậy.
asoundmove

1
Tôi nghĩ rằng ý tưởng "một cái gì đó giảm xuống mức cần thiết, nhưng không còn nữa" đang đi đúng hướng. Tuy nhiên, một cái gì đó không thể nhầm lẫn và được viết bằng ngôn ngữ sai cho nhiệm vụ cũng sẽ phù hợp với định nghĩa này. Ngoài ra, bằng cách yêu cầu nó không yêu cầu giải thích, có khả năng hầu hết các nhiệm vụ phù hợp với định nghĩa của bạn cũng phải tầm thường. Tôi không nghĩ "Hello World" có thể được gọi là đẹp.
user21007

5

Tôi muốn nói đến thơ:

Một bài thơ được viết tốt có một cảm giác khác với nó so với một đoạn trích từ một hướng dẫn dịch sai về cùng một chủ đề.


Đây cũng là suy nghĩ của tôi, nhưng không phải ai cũng thích hay hiểu thơ. Âm nhạc cũng xuất hiện trong tâm trí: bài hát hay so với bài hát dở, nhưng điều đó cũng khá chủ quan.
PSU

Cái gì ... 25 giao diện +25 lớp đều kế thừa từ các lớp trừu tượng? Tôi chỉ muốn một cái bánh xe màu đỏ. Và có thể một số gà.
Erik Reppen

5

Các vấn đề mã hóa là về khái niệm hóa, vì vậy mã đẹp đại diện cho một khái niệm đáng chú ý của vấn đề.

Ví dụ, chúng tôi thích nó khi một vấn đề có thể được giảm xuống còn một vấn đề giải quyết tồn tại, cho vay cái nhìn sâu sắc vào bản chất của vấn đề riêng của mình .

Đôi khi việc tái khái niệm hóa vấn đề có thể làm cho nó có vẻ dễ dàng; chúng tôi nói về các giải pháp tao nhã đòi hỏi các thủ thuật đơn giản giúp đơn giản hóa một nhiệm vụ khó khăn.

Đối với tôi, Quicksort là một ví dụ đẹp: chọn một phần tử ngẫu nhiên từ một mảng, sau đó so sánh mọi phần tử khác trong mảng với nó; nếu số lượng nhỏ hơn nó, đặt nó vào đống A; nếu số lớn hơn số đó, hãy đặt nó vào đống B. Bây giờ, bằng bất đẳng thức tam giác, không có phần tử nào trong cọc A sẽ không cần phải so sánh với bất kỳ phần tử nào trong cọc B. Tái diễn trên A và B, và bạn đã hoàn thành .


5

Nhắc nhở tôi về điều này:

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

Nguồn: XKCD - LISP


5
Tốt hơn là có một liên kết đặc biệt là văn bản di chuột bị thiếu.
user151019

1
Và hovertext là một nửa trò đùa trong trường hợp này.

4

Không có mã không tầm thường nào có thể hoàn hảo bởi vì mã hoàn hảo đòi hỏi đồng thời thỏa mãn các mục tiêu thường xung đột. Do đó, mã đẹp sẽ cân bằng tất cả các thuộc tính quan trọng một cách hoàn hảo cho nhiệm vụ trong tay và tiến gần hơn đến việc thỏa mãn tất cả các thuộc tính này đồng thời nhiều nhất có thể nghĩ. Không theo thứ tự đặc biệt:

  • Dễ đọc
  • Sự đồng tình
  • Hiệu quả
  • Uyển chuyển
  • Nhân chứng
  • Mạnh mẽ
  • An toàn / chứng minh ngu ngốc
  • Hoàn thành
  • Tính nhất quán
  • Dễ sử dụng (đối với API)

2

Những bức tranh của Jackson Pollock là một ví dụ về một cái gì đó đẹp đối với một số người và vô nghĩa với những người khác.


Hmmmm ... tôi không cảm thấy nó.
Năng động

Lập trình là thủ công hơn nghệ thuật (hoặc khoa học cho vấn đề đó). Không phải là tôi cũng gõ.
Erik Reppen

1

Nếu người đó thành thạo toán học, tôi thích so sánh mã đẹp với một giải pháp tao nhã cho một vấn đề.


1

Một số khía cạnh của mã tốt là:

  1. Nó có số lượng lớn các chi tiết nhỏ mà tất cả đều cùng hướng
  2. phù hợp trong cấu trúc , mọi phần theo cùng một mẫu
  3. nhưng nó không lặp lại , thay vào đó mỗi phần là khác nhau
  4. nó cũng không cho phép hành vi được coi là không hợp lệ
  5. nó có số lượng nhỏ nhất có thể của các trạng thái khác nhau
  6. bạn có thể hiểu toàn bộ hành vi của mã bằng cách đọc các nguyên mẫu hàm
  7. không có tác dụng phụ
  8. việc thực hiện nó được đảm bảo dừng lại
  9. không sử dụng bất kỳ tính năng nâng cao nào có sẵn trong các ngôn ngữ lập trình
  10. không quá phức tạp so với sự phức tạp của vấn đề mà nó giải quyết
  11. không có lỗi hoặc hành vi undefined trong nó
  12. có thể được biên dịch với trình biên dịch từ một số nhà cung cấp khác nhau
  13. không phụ thuộc vào mã không được sử dụng

0

Đối với tôi, ngôn ngữ là công cụ của tôi.

Và giống như bất kỳ thợ thủ công nào, tôi thích các công cụ của mình ở trong điều kiện đúc.

Các điều kiện của mã càng tốt, liên quan đến sự rõ ràng của khái niệm, khả năng bảo trì và khả năng đọc. mã càng tốt.

Vì vậy, đối với tôi, đọc mã được viết tốt cũng giống như mở hộp công cụ với các công cụ được chế tạo tốt.

Tôi đã sử dụng sự tương tự này một vài lần với thành công. Đặc biệt là những người có nền tảng thực tế hoặc nghệ thuật hơn dường như hiểu khái niệm mã sạch / đẹp theo cách này.


0

Tôi nghĩ rằng nó phụ thuộc vào những gì bạn có nghĩa là mã đẹp.

Đối với tôi, mã là đẹp khi nó có thể đọc được. Ngoài các vấn đề có thể xảy ra với các khái niệm lập trình, một giáo dân có thể đọc và, ít nhất là ở mức độ cao, hiểu được mã đang làm gì.

Như một số câu trả lời khác đã thảo luận, mã cũng có thể đẹp theo nghĩa là nó đạt được chức năng phức tạp bằng cách kết hợp một vài khái niệm đơn giản. Không chắc loại tương tự nào là tốt nhất để giải thích điều đó với một người không lập trình, nó phụ thuộc vào giáo dân. Đồ chơi xếp hình xuất hiện trong tâm trí, giống như NeoCube .


0

Theo ý kiến ​​cá nhân và khiêm tốn của tôi, mã đẹp giống như một cuốn tiểu thuyết hay:

  • bạn có thể đọc nó từ đầu đến cuối / bạn không cần phải bỏ qua các trang tương lai của cuốn sách để hiểu trang hiện tại.
  • nó không có sự lặp lại không cần thiết / một cuốn sách thật buồn tẻ nếu nó luôn luôn nói những điều tương tự.
  • mục đích của mỗi phần là rõ ràng mọi lúc / bạn không cần phải có một cuốn từ điển bên cạnh để đọc một cuốn sách (trừ khi đó là thơ / mã golf xD).
  • nó được tổ chức trong các cấu trúc có kích thước và độ phức tạp phải chăng (mô-đun, chức năng, câu lệnh, v.v.), nó không có quá nhiều 'lồng' / chương, đoạn và câu được cân bằng chính xác; nó không sử dụng quá nhiều cấp độ câu phụ, v.v.
  • nó dễ chịu cho mắt theo cách thức thẩm mỹ (thụt vào độc đáo, các khối được phân định chính xác, v.v.) / giống như một cuốn sách với cách sắp chữ phù hợp.

0

Nó giống như một công ty trung bình, nơi mọi người đều biết vai trò của họ, thật dễ dàng để tìm ra ai giỏi về điều gì và không có sự trùng lặp về nỗ lực

Vs

Không gian văn phòng nơi vô địch tầm thường, ba người quản lý không có gì để làm tốt hơn là bạn gặp lỗi về các báo cáo TPS,! @ # $ Ing FAX MÁY KHÔNG BAO GIỜ LÀM VIỆC !!! và bất kỳ nhân viên nào cũng có thể chỉ nhận được khoảng 15 phút làm việc thực tế một tuần. Một nhân viên thậm chí có thể không làm việc kỹ thuật ở đó nữa vì ai đó quên sa thải anh ta (thật khó để nói thực sự vì không ai làm việc hiệu quả và thật khó để đánh giá những gì họ đang cố gắng thực hiện). Và để có được bất cứ điều gì thực tế đòi hỏi phải điều hướng một hệ thống phức tạp quá mức vô lý mà ai đó đọc và nghĩ rằng sẽ trông gọn gàng trong hồ sơ của họ mặc dù nó không thực sự giải quyết vấn đề họ gặp phải.


-1

Không có "mã đẹp", có "thuật toán thanh lịch" và "thiết kế thanh lịch". Thiết kế có thể được hiểu bởi những người không lập trình.

Tôi ghét các lập trình viên tranh luận về "mã đẹp", bởi vì bằng cách này hay cách khác, họ sẽ không thực sự biết người phiên dịch hoặc trình biên dịch sẽ tiêu hóa nó như thế nào và máy sẽ làm gì, vì vậy nó giống như một đứa trẻ chỉ cho mẹ anh ta biết câu chuyện tuyệt vời của anh ấy là, nhưng thực sự, nó không phải.


-1

Bạn có giải thích cho mọi người tại sao một bức tranh đẹp lại đẹp không? Không. Bạn cho họ xem ảnh (bởi vì, bạn biết đấy, một bức tranh nói hơn 1000 từ). Vì vậy, điều tốt nhất là, cho họ thấy một đoạn mã nhỏ thực sự thanh lịch, đẹp đẽ, hoàn hảo (và có thể là so sánh với cách Joe Average đã mã hóa nó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.