Bạn có thực sự viết 'mã sạch' không? [đóng cửa]


54

Tôi đã thấy một số lập trình viên tinh chỉnh mã của họ nhiều lần không chỉ để làm cho nó 'hoạt động tốt', mà còn để làm cho nó 'trông ổn'.

IMO, "mã sạch" thực sự là một lời khen cho thấy mã của bạn thanh lịch, hoàn toàn dễ hiểu và có thể duy trì được. Và sự khác biệt xuất hiện khi bạn phải lựa chọn giữa một mã hấp dẫn về mặt thẩm mỹ so với mã gây căng thẳng khi xem xét.

Vì vậy, có bao nhiêu bạn thực sự viết 'mã sạch'? Đó có phải là một thực hành tốt? Những lợi ích hoặc nhược điểm khác của việc này là gì?


Trong tất cả các nỗ lực của tôi để viết mã "sạch" theo các nguyên tắc đã được thiết lập tốt, tôi chưa bao giờ thực sự thấy việc duy trì quá một quy mô nhất định chỉ dựa trên tiền đề như vậy. Liên quan nhiều hơn là độ tin cậy của nó và mức độ thử nghiệm của nó và mức độ phù hợp của nó với mục đích của nó (có thể liên quan nhiều đến việc thực hiện như thiết kế). Tất cả sự sạch sẽ trên thế giới không thể bù đắp cho việc thiếu bất kỳ thứ nào trong số này, và đôi khi mã đáng tin cậy nhất mà tôi tiếp tục sử dụng không phải là sạch nhất, trong khi sạch nhất của tôi luôn không đáng tin cậy nhất.

Vì vậy, trên tất cả mọi thứ - trên mức dễ đọc, vẻ đẹp, RẮN, bất cứ điều gì khác - tôi thấy hữu ích khi ưu tiên độ tin cậy và "ổn định" (chất lượng không thay đổi trong cuốn sách của tôi và hơn nữa, thiếu nhu cầu hoặc mong muốn thay đổi thêm nữa). Những thứ đáng tin cậy và ổn định là những thứ đã vượt qua thử thách của thời gian đối với tôi và đôi khi chúng không sạch lắm bởi nhiều cuốn sách của mọi người (một số mã được sử dụng nhiều nhất của tôi là mã C có từ cuối thập niên 80 và đầu thập niên 90 trong đó áp dụng những thứ như hack đột ngột mà hầu như không ai hiểu nữa - vẫn hoạt động rất đáng tin cậy).

Câu trả lời:


52

Tôi sẽ tranh luận rằng nhiều người trong chúng ta không viết mã sạch . Và nói chung, đó không phải là công việc của chúng tôi . Công việc của chúng tôi là nhà phát triển phần mềm là cung cấp một sản phẩm hoạt động đúng thời gian.

Tôi nhớ về bài đăng trên blog của Joel Spolsky: Lập trình viên băng keo .

Ông trích dẫn từ Coders tại nơi làm việc :

Vào cuối ngày, vận chuyển thứ f ***** g! Thật tuyệt khi viết lại mã của bạn và làm cho nó sạch hơn và đến lần thứ ba, nó sẽ thực sự đẹp. Nhưng đó không phải là điểm mà bạn không ở đây để viết mã; Bạn đang ở đây để vận chuyển sản phẩm. - Jamie Zawinsky

Tôi cũng được nhắc nhở về phản ứng trên blog của Robert Martin :

Vì thế. Hãy thông minh. Làm sạch. Hãy đơn giản. Tàu! Và giữ một cuộn băng keo nhỏ sẵn sàng, và đừng ngại sử dụng nó. - Chú Bob

Nếu mã, một nhà phát triển viết tình cờ sạch sẽ và làm việc (có thể phân phối được), do đó, nó là tốt cho tất cả mọi người. Nhưng nếu một nhà phát triển đang mày mò tìm cách tạo ra mã sạch và dễ đọc với chi phí có thể cung cấp kịp thời, thì điều đó thật tệ. Làm cho nó hoạt động, sử dụng băng keo, và vận chuyển nó. Bạn có thể tái cấu trúc nó sau và làm cho nó siêu tuyệt đẹp và hiệu quả.

Vâng, đó là cách thực hành tốt để viết mã sạch, nhưng không bao giờ phải trả giá. Lợi ích của việc cung cấp một sản phẩm được dán vào ống đúng thời gian vượt xa lợi ích của mã sạch chưa bao giờ được hoàn thành và giao.

Một đoạn mã tốt mà tôi đi qua không sạch. Một số là hết sức xấu xí. Nhưng tất cả chúng đều được phát hành và sử dụng trong sản xuất. Một số người có thể nói rằng việc viết mã lộn xộn là không chuyên nghiệp. Tôi không đồng ý. Điều chuyên nghiệp là cung cấp mã hoạt động, cho dù đó là sạch sẽ hay lộn xộn. Nhà phát triển phải làm tốt nhất có thể, trong bất kỳ thời gian nào được phân bổ trước khi giao hàng. Sau đó, quay trở lại để dọn dẹp-- đó là chuyên nghiệp. Hy vọng rằng, mã được phân phối không phải là băng keo thuần túy và 'đủ sạch'.


45
Miễn là khoản nợ kỹ thuật của bạn ( en.wikipedia.org/wiki/Technical_debt ) không dẫn bạn đến "phá sản kỹ thuật" (Không thể cung cấp các tính năng mới, sửa một phần phá vỡ phần khác, v.v ...) và bạn phải để mắt về nó, tôi đồng ý.
Matthieu

3
@HeathLilley Đồng ý. Tôi chỉ không tin các nhà phát triển nói rằng chỉ nên viết mã sạch. Đó là không có thật. Mã lộn xộn xảy ra. Ý tưởng rằng các nhà phát triển chỉ nên viết mã sạch và chính xác ngay từ đầu là một ảo ảnh. Tôi thúc đẩy ý tưởng rằng chúng tôi luôn xem xét lại và tái cấu trúc một khi sự hiểu biết của chúng tôi về tên miền được cải thiện.
bọt biển

40
Vấn đề với "chỉ giao hàng ngay bây giờ" là ban quản lý sẽ không mua lý do của bạn để tái cấu trúc sau này, nhưng nếu bạn vô hình làm điều đó NGAY BÂY GIỜ, mọi chuyện sẽ tốt thôi.
Công việc

5
Một ảo tưởng khác là nghĩ rằng bạn sẽ có thời gian để làm sạch nó sau này. Điều đó sẽ không xảy ra. Bạn sẽ có những thứ khác để vận chuyển. Bạn không nên cung cấp mã lộn xộn. Và nhân tiện, bạn cũng nên làm việc theo thời hạn, bạn là người kỹ thuật biết sẽ mất bao nhiêu thời gian để viết mã sạch. Điều đó không có nghĩa là làm sạch và sửa chữa trong một khoảng thời gian điên rồ, điều đó có nghĩa là thời gian để cấu trúc lại trước khi bạn gửi mã nên được tính đến.
Steve Chamaillard

3
"Bạn có thể cấu trúc lại nó sau" [cần dẫn nguồn]
Carl Leth

39

Bạn phải đảm bảo rằng mã của bạn rất dễ đọc, sạch sẽ và có thể bảo trì. Đó là điều mà tất cả các lập trình viên phải làm.

Nhưng bạn đang nói về over styling(như thuật ngữ đó tốt hơn mã cô gái đó) không phục vụ gì ngoài cái tôi của tác giả.

Tôi đã thấy nhiều nhà phát triển trong quá khứ rất tự hào về sự sáng tạo của họ (bạn biết đấy, như trong phòng vệ sinh;)), họ đã dành hàng giờ để làm sạch và đánh bóng mã của họ. Một số người trong số họ tỉ mỉ đến mức họ đảm bảo rằng khoảng trắng chính xác giữa các thành viên được tôn trọng.

Nó quá nhiều.

Tôi thấy kiểu hành vi đó phản tác dụng. Trong một bối cảnh chuyên nghiệp , bạn phải chuyên nghiệp . Bạn có thể có được sự hài lòng của mình bằng cách viết mã sạch, rất dễ đọc và có thể duy trì và nói chuyện với người dùng hoặc đồng nghiệp hạnh phúc.


13
Vâng, tôi đánh bóng cho đến khi mã được đọc rõ ràng bởi tôi. Nếu tôi trở lại hai tuần sau đó và tôi phải tìm ra những gì tôi đã làm, có lẽ nó không đủ rõ ràng để người khác dễ hiểu.
Robert Harvey

14
Mã thanh lịch vốn đã dễ bảo trì hơn và tôi dễ đọc hơn.
Craige

6
+1, tôi đã thấy một số MÃ SPAGHETTI được tạo kiểu hoàn hảo trong quá khứ.
Jas

23
Tôi đồng ý với tình cảm, nhưng tôi viết mã của mình với số khoảng cách chính xác giữa các thành viên và bị kích thích bởi những người không. Đó là một điều dễ dàng để làm (thậm chí còn dễ dàng hơn bằng các công cụ tự động như StyleCop) và tính nhất quán mà nó mang lại là xứng đáng với số lượng nhỏ nỗ lực cần có.
Robert Harvey

3
@sunpech: Viết nó sạch sẽ, và việc giữ sạch sẽ dễ dàng hơn nhiều.
David Thornley

24

Tôi sẽ không đồng ý với câu trả lời được chấp nhận cho câu hỏi này.

Trách nhiệm của bạn rõ ràng là vận chuyển, nhưng thông thường bạn cũng có trách nhiệm vận chuyển thứ gì đó có thể duy trì với chi phí hiệu quả nhất có thể bởi chính bạn và các nhà phát triển trong tương lai.

Tôi đã dành thời gian làm lập trình viên hoặc nhà tư vấn bảo trì kém trên trang web, người phải hiểu và gỡ lỗi một số hệ thống không có giấy tờ lớn và tôi có thể nói với bạn rằng các thiết kế kém và mã lộn xộn lộn xộn có thể dẫn đến hàng giờ hoặc thậm chí nhiều ngày lãng phí. Tôi có thể nghĩ ra rất nhiều tình huống trong đó thêm N giờ nỗ lực của nhà phát triển ban đầu có thể dẫn đến tiết kiệm chi phí 5N về thời gian của tôi.

Tôi biết có một thống kê nổi xung quanh vấn đề này, nhưng theo kinh nghiệm của tôi trên nhiều dự án, mỗi dòng mã được viết được đọc 5-20 lần trong quá trình gia hạn và bảo trì.

Vì vậy, tôi sẽ nói để làm sạch mã trong vòng một inch của cuộc sống của nó . Mất nhiều thời gian, nhưng có khả năng tiết kiệm chi phí ròng trong suốt vòng đời của dự án.


2
Không, bạn dọn sạch mã của mình khi và nếu có thời gian và ngân sách, VÀ rủi ro khi làm như vậy nhỏ hơn rủi ro không làm như vậy. Trong môi trường sản xuất, điều đó có nghĩa là khá thường xuyên bạn sẽ không đánh bóng mã hiện có để làm cho nó đẹp hơn, nó chỉ không hiệu quả về chi phí nhưng gây ra rủi ro khi đưa ra các lỗi mới.
jwenting

Điều này cũng phụ thuộc vào góc phát triển phần mềm mà bạn làm việc. Tôi từng làm việc cho một công ty Tiếp thị Kỹ thuật số rất vui khi chuyển các khoản phí cho khách hàng của họ nếu giai đoạn tiếp theo mất nhiều thời gian hơn do các vấn đề cơ sở mã. Việc chúng tôi cố gắng nhiều thời gian hơn trong quá trình phát triển để khắc phục các sự cố hiện có đã bị bắn hạ vì thời gian phát triển kéo dài tương đương với nhiều tiền hơn cho doanh nghiệp.
Simon Whitehead

1
Tôi đồng ý với điều đó, Bạn nên gửi mã, nhưng nếu bạn không thể sửa / cập nhật / nâng cấp, thứ bạn giao không phải là mã, mà là một lỗ tiền. Tôi thấy rằng những người chống lại ý tưởng đó được sử dụng để làm việc trong môi trường xấu và tranh luận một hệ thống mà họ chưa bao giờ trải nghiệm. Tôi đã duy trì cả mã sạch và không sạch, và sẽ cho bạn biết rằng mã sạch rẻ hơn rất nhiều và nhanh hơn để duy trì và phát triển.
Jdaotta 30/03/2016

21

Bất cứ ai trong chúng ta sẽ mua một chiếc xe hơi nếu chúng ta biết rằng dưới mui xe, tất cả đều lộn xộn và khó khắc phục, bảo trì hoặc sửa chữa và cần nhiều tài nguyên để chạy hơn mức cần thiết?

Tại sao nó phải là bất kỳ khác nhau cho một phần mềm?

Chỉ vì người dùng cuối không thể nhìn dưới mui xe không có nghĩa là họ sẽ không bao giờ biết điều đó. Sớm muộn gì nó cũng sẽ xuất hiện.

Trả lời câu hỏi "Bạn có thực sự viết 'mã sạch' không?" - Ồ, vâng.!


Tôi sẽ không đồng ý - phần mềm không bị rỉ sét (như Joel nói), không giống như bên trong xe hơi. Bạn có thể lập luận rằng khi một hệ điều hành được nâng cấp, phần mềm cũng phải nâng cấp, nhưng đó là một điều khác biệt. Ngoài ra, tôi làm viết mã sạch, nhưng tôi không nghĩ rằng đó là đặc trưng quan trọng nhất của những đóng góp của tôi.
K.Steff

18

Nếu bằng 'mã sạch', ý bạn là tôi có nên tránh đường để đảm bảo mã càng rõ ràng càng tốt không?

Heck vâng.

Mã càng sạch, mã càng rõ ràng thì càng dễ bảo trì và do đó giúp bạn tiết kiệm thời gian trong thời gian dài. Đừng xem mã sạch là phù phiếm; xem nó như một khoản đầu tư để tiết kiệm công sức và thời gian trong tương lai.


15

Thành thật mà nói nó phụ thuộc. Tôi thích cách mọi người nói về bữa tiệc về việc "bất cứ thứ gì dưới mã sạch tài liệu tốt đều là một trò hề tuyệt vời!", Nhưng tôi làm việc trong một doanh nghiệp với chu kỳ triển khai lố bịch và không giám sát: Tôi làm tốt nhất có thể, nhưng tôi viết như vậy nhiều mã rất khó để viết mã hoàn hảo sạch mà mọi người khác tuyên bố họ viết.

Tôi cố gắng viết mã có thể dễ dàng duy trì bởi một người có khả năng của tôi. Tôi nhận xét các phần khó khăn, tôi đặt tên cho các chương trình, biến và các tên thân thiện với lớp, tôi triển khai và tôi tiếp tục. Tôi không có thời gian để làm bất cứ điều gì khác.

Đôi khi tôi cảm thấy một chút tội lỗi về nó, nhưng không phải là rất. Bạn sẽ thấy một số điều kinh khủng mà tôi phải đối phó hàng ngày. Hàng thập kỷ mã tùy chỉnh trong các ngôn ngữ tối nghĩa với tài liệu không. Một trong những đồng nghiệp của tôi phát triển độc quyền trong Visual Basic 6.0 và triển khai các mã nhị phân có tên mã hóa ở khắp mọi nơi. Người phụ nữ mà tôi đã thay thế được lập trình độc quyền trong game nhập vai .

Điều đó cực kỳ khó đối với tôi để tin, nhiều chuyện kinh khủng như tôi từng thấy trong những năm làm lập trình viên, rằng mọi người chỉ tạo ra mã sạch.


Đã đồng ý. Hầu hết mọi người sẽ không viết mã sạch để gửi / phát hành lần đầu tiên. Có băng keo liên quan để hoàn thành công việc.
bọt biển

2
Đủ với băng keo! Spolsky không phải là chúa. Anh ấy đặt quần lên một chân vào thời điểm đó giống như chúng ta!
Công việc

5
Một phần lý do bạn viết mã sạch là vì viết mã sạch nhanh hơn mã bẩn trên bất kỳ dòng thời gian nào ngắn nhất (ví dụ vài giờ). Nếu suy nghĩ trong vài giây về tên biến và tên phương thức sẽ khiến bạn bỏ lỡ thời hạn, thì thời gian quý báu bạn sẽ mất khi bạn và / hoặc đồng nghiệp của bạn bị nhầm lẫn bởi mã của bạn. Bạn tạo ra âm thanh mã gần như chỉ dùng một lần, giống như bạn sẽ viết nó, nó sẽ được sử dụng trong một thời gian mà không cần bảo trì, và sau đó nghỉ hưu. Có thể trong mã tình huống đặc biệt của bạn là dùng một lần. Tôi chưa bao giờ thấy điều đó xảy ra trong một thập kỷ kinh nghiệm thực tế.
Peter ALLenWebb

1
@peter: Và trong hai thập kỷ, tôi chưa bao giờ thấy một nơi nào mà mọi đoạn mã đều sạch sẽ. Tôi thậm chí hiếm khi nhìn thấy một nơi mà một nửa là. Bạn làm ở đâu? NASA?
Satanicpuppy

2
@Satanicpuppy Tôi đã thấy rất nhiều mã bẩn trong thời gian của mình và tôi đã viết chia sẻ của mình, nhưng hầu như tất cả đều lãng phí thời gian của tôi hoặc của người khác. Tôi khẳng định rằng mã sạch thực sự có thể được viết NHANH hơn mã bẩn trên bất kỳ thang thời gian nào dài hơn một vài giờ.
Peter ALLenWebb

7

Tôi không nghĩ rằng tôi thích thuật ngữ "mã cô gái" nhưng mã sạch = mã duy trì. Bất cứ điều gì ít hơn là không chuyên nghiệp.

Theo nguyên tắc chung, tôi xem xét nhà phát triển tiếp theo phải xem xét mớ hỗn độn của mình.

Rất nhiều thời gian là tôi ... vài tháng sau ... khi tôi không nhớ nó hoạt động như thế nào ... và tôi thậm chí còn có ít thời gian hơn để thay đổi.


5

Tôi cố gắng viết "mã sạch" theo nghĩa Bob Martin (ví dụ thiết kế OO). Có giá trị lớn trong việc viết mã sạch. Nó dễ bảo trì hơn nhiều.

Sau đó, tôi để ReSharper biến nó thành "mã đẹp" cho tôi (ví dụ: căn chỉnh, ngắt dòng, v.v.). Có giá trị tốt trong việc viết mã đẹp. Nhưng có lợi nhuận giảm dần. Một số tính năng làm cho nó dễ bảo trì hơn một chút do dễ đọc.

Nếu bạn cảm thấy rằng việc sắp xếp gọn gàng các khối mã lớn là cần thiết để làm cho nó dễ đọc hơn, thì vấn đề là khối mã khổng lồ quái dị của bạn! Nó quá to. Tôi thấy nhiều ví dụ về những người đang chịu khó để làm đẹp một số mã được thiết kế rất kém.

Nếu tôi không có ReSharper, tôi vẫn sẽ có mã sạch, nhưng nó sẽ không đẹp bằng.

Tôi không nghĩ rằng tôi nên dành hơn ~ 5% thời gian mã hóa của mình để hoàn thiện. Điều đó có nghĩa là biên tập viên của tôi càng mạnh mẽ và tôi càng thành thạo với nó, tôi càng có thể làm đẹp hơn.


4

Dường như không ai nêu lên quan điểm về lợi ích tốt nhất của công ty bạn là gì?

Thông thường, nếu không phải luôn luôn, các lập trình viên chỉ là nhân viên và trong khi các quyết định quản lý có thể làm chúng tôi thất vọng, chúng tôi thường không có tất cả dữ liệu họ làm.

Ví dụ: giả sử công ty được ký hợp đồng với một điều khoản rằng nếu phần mềm không sẵn sàng kịp thời, bạn sẽ không được trả tiền (điều đó chỉ xảy ra với chúng tôi, mặc dù tôi nghĩ rằng chúng tôi đã nhận được khoản thanh toán). Vâng, mã sạch rất quan trọng, nhưng quan trọng hơn là để mã hoạt động vào ngày thanh toán!

Một ví dụ khác - công ty đang ở trong tình trạng tài chính tồi tệ và cần phải tăng một số tiền. Đoán xem ai quan tâm đến chất lượng? Bạn có thể sửa nó sau, nếu bạn phải, chỉ cần gửi nó!

Một đối số có thể là "Tại sao tôi nên bán hết và viết mã crappy?". Chà, tại sao công ty của bạn phải trả cho bạn một tấm séc đẹp mỗi tháng? Lựa chọn, bạn của tôi. Nếu bạn theo chủ nghĩa duy tâm, hãy thử Quỹ phần mềm miễn phí ; Tôi nghe nói họ đang làm một số thứ khá tuyệt (ý tôi là cái này và tôi tôn trọng FSF và OSS).

Mặt khác, nếu bạn làm việc trong một dự án nơi dự kiến ​​sẽ có sự tăng trưởng bùng nổ trong sử dụng (mặc dù các dự đoán đó gần như không bao giờ chính xác), tốt hơn hết bạn nên đặt nền tảng vững chắc với chất lượng mã tốt nhất cần thiết, vì gần như chắc chắn sẽ bảo trì là chi phí lớn hơn cho dự án.

Các lập trình viên thích mã 'sạch', bất kể điều đó có nghĩa là gì. Chúng tôi thậm chí không thể đồng ý về những gì sạch sẽ, nhưng chúng tôi yêu nó. Tuy nhiên, đôi khi điều đó không quan trọng bằng khả năng sử dụng và tính chính xác. Chúng có vẻ đồng nghĩa, nhưng chúng không - nếu bạn đã thấy mã được viết bởi một hacker Perl thực sự trong 4 giờ với ý định được sử dụng hai lần và vứt đi, bạn sẽ thừa nhận nó không sạch, nhưng nó hoạt động.

Vì vậy, đôi khi, cái tôi sang một bên, chúng ta nên làm cho nó hoạt động. Lưu ý rằng tôi không khuyên bạn nên viết mã xấu như một thói quen; Tôi chỉ chỉ ra rằng nó có thể là cần thiết. Sự hoàn hảo cần thời gian công ty của bạn có thể không có. Vì vậy, nếu chủ nhân của bạn không bận tâm, phần mềm thủ công, nhưng nếu bạn cần, chỉ cần viết mã làm việc, đừng bao giờ bận tâm đến 'sự sạch sẽ'. Đó không chỉ là câu trả lời 'Một kích thước phù hợp với tất cả' - bạn nên ưu tiên.


3

Tôi không chắc chắn "nhìn tốt" và "thanh lịch, hoàn toàn dễ hiểu và có thể duy trì" là tương đương.

Tôi cố gắng viết mã, đó là "thanh lịch, hoàn toàn dễ hiểu và có thể duy trì". Tôi thực hiện cấu trúc lại mã của riêng mình để phù hợp hơn với các tiêu chí đó.

Tôi không thấy bất kỳ nhược điểm nào, ngoại trừ chi phí kết quả trong thời gian.

Để mã "trông ổn", có rất nhiều công cụ tự động, sẽ thụt lề đúng cách và không gian mọi thứ bạn muốn.


2
Điều đó khiến tôi khó chịu hơn nữa khi tôi thấy mã được định dạng sai. Người viết nó có thể đã sử dụng một trong những công cụ đó để làm điều đó cho họ. Nó cũng xảy ra thường xuyên nhất khi trộn các tab và khoảng trắng với nhau để tạo ra một mớ hỗn độn không đẹp.
jsternberg

3

Quá nhiều bất cứ điều gì không bao giờ là tốt.

Tuy nhiên, một điều quan trọng cần lưu ý với mã "ô uế" là nó có thể dễ dàng dẫn đến "các cửa sổ bị hỏng ". Nếu mã được định dạng rất kém, tôi nghĩ rằng nhiều người mới sử dụng cơ sở mã có thể cảm thấy ít có khuynh hướng làm tốt công việc bảo trì và tiến hóa gây ra một vòng xoáy đi xuống cuối cùng có thể ảnh hưởng đến điều kiện làm việc của phần mềm.

Do đó, việc duy trì một mức độ sạch nhất định trong mã có lợi cho nhiều hơn là chỉ các nhà phát triển đồng nghiệp của bạn. Đừng dành quá nhiều thời gian cho nó (~ 5% đã được đề cập). Tìm hiểu cách sử dụng các công cụ của thủ công của bạn để tự động hóa các tác vụ thủ công (định dạng mã trong trường hợp này). Chịu trách nhiệm về những gì bạn làm và luôn làm những gì bạn cảm thấy có lợi nhất cho công ty / khách hàng / người dùng của bạn.


3

Đây là một trích dẫn từ Clean Code, bởi Bob Martin:

Để lái xe về điểm này, điều gì sẽ xảy ra nếu bạn là bác sĩ và có một bệnh nhân yêu cầu bạn dừng tất cả việc rửa tay ngớ ngẩn để chuẩn bị cho phẫu thuật vì mất quá nhiều thời gian? Rõ ràng bệnh nhân là ông chủ; nhưng bác sĩ tuyệt đối nên từ chối tuân thủ Tại sao? Bởi vì bác sĩ biết nhiều hơn bệnh nhân về nguy cơ mắc bệnh và nhiễm trùng. Sẽ là không chuyên nghiệp (không bao giờ tâm trí tội phạm) để bác sĩ tuân thủ bệnh nhân.

Vì vậy, thật không chuyên nghiệp khi các lập trình viên uốn éo theo ý muốn của các nhà quản lý, những người không hiểu những rủi ro của việc tạo ra các mớ hỗn độn.


2

Tôi nghĩ rằng "mã sạch" nên sạch sẽ hoặc sạch hơn so với cách bạn đã từng viết trong các bài kiểm tra vật lý / kỹ thuật / toán học. Nếu nó quá lộn xộn, học sinh sẽ không hiểu công việc của bạn và có thể sẽ đánh dấu nó sai ngay cả khi nó đúng.


2

Tôi thích mã để có thể đọc được, nhưng điều quan trọng nhất là tính nhất quán. Đối với tôi điều đó có nghĩa là sự nhất quán với các quy ước đặt tên khoảng cách giữa các hàm, dấu ngoặc đơn trên cùng một dòng hoặc dòng tiếp theo của câu lệnh if, v.v.

Tất nhiên, có những lúc ai đó lập trình một cái gì đó với một kiểu mã nhất quán và nó vẫn khiến tôi phát điên. Đặc biệt là mã không "thở". Ví dụ:

void function1(){
    //whatever code
}
int fooBar(){
    //whatever else
}
Foo* someOtherFooBar(int value){
    if(value){
        //do something
    }
    return ...;
}

Chà ... Có vẻ tệ hơn với các phương thức Objective-C, và với rất nhiều và rất nhiều câu lệnh if lồng nhau và các dòng dài hơn 80 ký tự. Nhưng nó vẫn làm tôi khó chịu :)


2

Tôi đi rất lâu để làm sạch mã. Tôi nghĩ rằng nó rất nhiều giúp các con bọ nổi bật.

Tôi không đồng ý với khái niệm "vận chuyển thứ chết tiệt ngay bây giờ", bởi vì mã sạch là một khoản đầu tư cho tương lai. Cũng có quá nhiều phần mềm được vận chuyển với quá nhiều lỗi. Theo tôi, giải quyết một lỗi tốt hơn là thực hiện một tính năng mới.

Ngoài ra nếu bạn nhìn vào các ước tính về năng suất lập trình viên , tôi không nghĩ rằng tôi đạt điểm rất tệ. Viết mã sạch là một thói quen và càng có nhiều kinh nghiệm làm lập trình viên, người ta càng làm việc hiệu quả hơn. Nếu một người không bao giờ thử nó, rõ ràng, người ta sẽ không bao giờ có được kinh nghiệm với nó.

Một điểm khác cần tính đến, đó là phần lớn thời gian của nhà phát triển dành cho việc đọc mã, vì vậy mã có thể đọc được giúp giảm đáng kể thời gian đọc. Hiểu các thuật toán không có giấy tờ chẳng hạn có thể tốn kém và mời các lỗi mới.

Một điều tôi chắc chắn bỏ lỡ và muốn có một ngày là một trình định dạng mã tự động mà tôi có thể thích nghi với phong cách của mình, điều đó thực sự sẽ giúp tôi tiết kiệm thời gian, đặc biệt là khi đọc mã của người khác.

Mã hóa sạch có liên kết đến chủ nghĩa hoàn hảo, có nguy cơ không bao giờ thành hiện thực, nhưng tôi nghĩ đó chủ yếu là vấn đề khi bạn bắt đầu, bởi vì bạn đầu tư vào sau và khi sử dụng lại các đoạn mã thanh lịch của riêng bạn, kết hợp với kinh nghiệm của bạn , già đi, bạn sẽ rất năng suất và ít bị ám ảnh bởi các lỗi hơn các lập trình viên lộn xộn.

Đây là một đoạn mã thể hiện phong cách mã hóa của tôi.


1

Chỉ cần tránh "mã vanity". Có rất nhiều nhà phát triển ngoài kia làm những việc hoàn toàn không phù hợp (hoặc do OCD) và không có gì khác. Quần lót của tôi thực sự bị xoắn với những người đó.


Giống như bình luận cánh hoặc (tệ hơn), nói gì?
David Thornley

1

Tôi viết mã cố gắng giải quyết vấn đề đã cho theo cách 'thanh lịch' hiệu quả và lý thuyết nhất. Theo nghĩa đó chỉ có nó là sạch sẽ. Nếu nó xảy ra là 'đẹp' khi tôi hoàn thành, thì cũng vậy.

Những gì tôi đã tìm thấy trong những trải nghiệm hạn chế của mình là khi mọi người phàn nàn về 'mã sạch', sự xấu xí thường là kết quả của một giải pháp khủng khiếp thay vì quy ước mã hóa.


1

Tôi sẽ nói rằng tôi đã nỗ lực để viết mã sạch hơn, nhưng điều đó có thể thay đổi do hạn chế về thời gian hoặc nếu tôi đang làm việc gì đó khó khăn. Nó có xu hướng trở nên lộn xộn khi tập trung vào làm cho nó hoạt động. Sau đó tôi sẽ quay lại và dọn dẹp khi tôi xem lại nó. Nếu bạn quay lại mã và phải dành quá nhiều thời gian để làm mới bộ nhớ của mình, bạn đã không nhận xét đủ.

Mã sạch là tốt nhưng giống như mọi thứ khác, nó chỉ cần đủ sạch. Việc thụt 5 dòng mã 4 khoảng trắng và một dòng 5 khoảng trắng không làm tăng khó đọc.


1

Tôi nghĩ rằng nó phụ thuộc vào những gì bạn đang làm. Nếu tôi đang viết một ứng dụng bằng chứng về khái niệm thì về cơ bản, tôi đang cao bồi mã hóa mông của mình và không nhìn lại. Nếu tôi đang làm việc trên một ứng dụng mà tôi thực sự sẽ làm việc trong một thời gian, thì tôi chắc chắn rằng tôi đã viết mã đủ tốt cũng như làm cho nó dễ hiểu trong một tháng kể từ bây giờ.

Tôi nghĩ rằng phong cách mã của bạn là một chút iffy. Như một số người đã nói ở trên, công việc của bạn là tạo ra một sản phẩm, không phải là mã được định dạng nhưng tôi sẽ nói ít nhất một người nên gắn bó với một phong cách xác định về nhận xét và mã hóa mọi thứ. Tôi ghét nhìn thấy một nửa các biến lạc đà vỏ và nửa còn lại Hungary.

Nhưng ngoài ra, nó phụ thuộc vào ý của bạn về 'mã sạch'.


0

Tôi thừa nhận làm điều đó; và lợi ích không bị làm phiền mỗi khi tôi nhìn thấy nó. Tôi đoán nó cũng dễ đọc hơn và do đó lỗi trở nên rõ ràng hơn; nhưng lý do thực sự là tôi không thể chịu được mã xấu.


0

Tái cấu trúc mã của bạn để làm cho nó thanh lịch giúp dễ đọc hơn và dễ bảo trì hơn. Ngay cả những điều nhỏ như sắp xếp các bài tập biến của bạn:

int foo    = 1;
int bar    = 2;
int foobar = 3;

dễ đọc hơn

int foo = 1;
int bar = 2;
int foobar = 3;

điều đó có nghĩa là việc lướt qua dễ dàng hơn khi bạn gỡ lỗi sau này.

Ngoài ra, trong PHP bạn cho phép bất kỳ số khối mã ngẫu nhiên nào. Tôi sử dụng chúng để nhóm các nhiệm vụ logic:

// do x
{
    // ...
}

// do y
{
    // ...
}

Điều này thêm định nghĩa rõ ràng cho mã có liên quan.

Chỉnh sửa : Là một phần thưởng bổ sung, thật dễ dàng để tạo ra một trong những khối mã hợp lý đó if (false)nếu bạn muốn bỏ qua nó tạm thời.


11
Tôi nghĩ rằng họ đã phát minh ra thứ gì đó làm điều đó - nó được gọi là một chức năng. Bất cứ khi nào bạn thấy mình tạo một trong những khối đó, bạn nên tạo một hàm thay thế. Từ đó, nếu bạn không muốn chạy nó, hãy nhận xét cuộc gọi chức năng (thay vì đưa ra một nhận xét trái tay)
riwalk

1
@ stargazer712: Tôi ghét các chức năng của php vì thiếu các không gian tên được xác định. Không thể tránh khỏi, đọc mã của ai đó, họ có một "bao gồm" ở trên cùng, bao gồm 5 thứ khác, mỗi thứ bao gồm 4 thứ nữa, và sau đó tôi phải tìm kiếm trên toàn bộ cơ sở mã để tìm định nghĩa hàm. Rất bực bội.
Satanicpuppy

Thường thì đây là mã không đảm bảo khai báo hàm. ví dụ. không có khả năng tái sử dụng, tính toán / thiết lập các biến có phạm vi cục bộ liên quan, v.v.
Craige

mặt khác, mã không có khả năng sử dụng lại là rất hiếm. Nếu bạn thấy mình viết rất nhiều mã không thể sử dụng lại, có khả năng tốt là nó có thể được cải thiện ... rất nhiều.
riwalk

-2

Tôi chỉ viết mã của tôi, theo tiêu chuẩn của công ty. Nếu tôi muốn nó "được nâng cấp", tôi có thể chạy nó thông qua một trình làm đẹp mã.


2
Ngoại trừ những gì thường xảy ra là người khác cuối cùng sẽ điều hành nó thông qua một người làm đẹp đang cố gắng dọn dẹp những gì bạn không có xung quanh để làm sạch.
riwalk

@ Stargazer712, đó chính xác là lý do tại sao tôi không bận tâm nhiều đến việc tuân theo các tiêu chuẩn của công ty
Muad'Dib

@ Maud'Dib, vấn đề là kết quả chỉ tốt khi làm đẹp. Trong khi khoảng trắng ngang hoàn toàn về phạm vi (và do đó làm sạch rất tốt), khoảng trắng dọc thường là về ý định (nhóm những gì có liên quan) và làm sạch rất kém. Điểm mấu chốt - xin thương xót các nhà phát triển đồng nghiệp của bạn.
riwalk

@ Stargazer712 Vấn đề là, ngoại trừ "tiêu chuẩn công ty", mọi thứ khác hoàn toàn là vấn đề sở thích, đó là chủ quan. ví dụ, tôi thích đặt không gian ở những nơi mà đồng nghiệp của tôi cực kỳ ghét họ. Tôi làm cho nó trông tốt đẹp đối với tôi, và đó là xa như tôi đi.
Muad'Dib

1
Hãy cẩn thận với "người làm đẹp", vì họ có thể gây rối khi hợp nhất cam kết thời gian lớn (tôi đã có kinh nghiệm đầu tay :)).
Juha Untinen
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.