Cách viết ít mã [đã đóng]


12

Một chất lượng mà tôi muốn phát triển là viết mã ngắn gọn hơn. Với cách viết ngắn gọn hơn, ít nhất là theo ý kiến ​​của tôi, cơ hội để thêm lỗi vào mã là nhỏ hơn. Nó dễ dàng hơn để đọc mã cho người khác.

Câu hỏi của tôi là nếu đó là một cái gì đó chỉ đi kèm với kinh nghiệm hoặc nó là thứ bạn có thể làm rõ ràng để phát triển chất lượng đó?


6
Vẽ sơ đồ xu hướng và xem khi bạn vượt qua trục x ...

1
Con trỏ bắt buộc đối với macro, macro, macro: paulgraham.com/avg.html
vemv

Bạn có thể tạo mã rất ngắn gọn, dễ đọc bằng cách áp dụng kiểu lập trình vô nghĩa. Lập trình vô nghĩa là lập trình chỉ bằng cách áp dụng các chức năng. Bạn có thể nhận ra nó bằng cách sử dụng rộng rãi các chức năng bậc cao hơn như bản đồ, bộ lọc, concat, gập / giảm / tiêm / [chèn tên khác cho danh sách catamorphism], v.v.
dan_waterworth

2
-1: Điều này có vẻ như tự chúc mừng trong ngụy trang.
Jim G.

Tôi chưa thấy mã miễn phí có thể đọc được. không có trong bất kỳ thư viện quan trọng
Simon Bergot

Câu trả lời:


12

Tôi có thể nói rằng về tổng thể nó là thứ gì đó đi kèm với thời gian và kinh nghiệm, nhưng bạn có thể thấy rằng nếu bạn làm một số công việc với nhiều ngôn ngữ ngắn gọn hơn, bạn sẽ mang chất lượng đó trở lại với ngôn ngữ làm việc thông thường của bạn.

Chắc chắn sau một hoặc hai năm làm việc với Ruby, tôi thấy C # của mình có rất nhiều. Tôi nghĩ rằng nếu tôi hiểu chương trình chức năng tốt hơn (một tham vọng đang diễn ra) tôi có thể sẽ nhận được nhiều hơn từ đó.

Ngoài ra, có một số hướng dẫn có thể giúp - ví dụ nếu bạn viết hai dòng giống nhau nhiều hơn một lần tách chúng thành phương thức riêng của chúng. Đó là một hướng dẫn đơn giản nhưng nhanh chóng cắt giảm các dòng mã và cắt và dán chương trình, điều mà hầu hết chúng ta thỉnh thoảng có lỗi.

Nếu bạn hiểu sự kế thừa, bạn thường có thể tiết kiệm khi lặp lại cùng một mã ở những nơi khác nhau bằng cách cung cấp chức năng chung cho các lớp cha. Điều này là rõ ràng về nguyên tắc nhưng một cái gì đó mọi người thường bỏ lỡ trong thực tế.

Có thể có một sự khác biệt giữa việc viết ít mã hơn và có ít mã hơn trong ứng dụng của bạn - đôi khi bạn có thể sử dụng việc tạo mã để tránh phải lặp lại vì vậy bạn chỉ viết một vài dòng mã nhưng sau đó tạo ra rất nhiều mã khác cho bạn - điều đó có thể cung cấp cho bạn rất nhiều đòn bẩy. Nhìn vào những gì một công cụ như Rails hoặc Entity Framework làm về mặt này để nắm bắt mức độ hữu ích của nó. Hãy rõ ràng về sự cần thiết của nó và suy nghĩ hai lần, ba lần và sau đó bốn lần về việc tạo ra mã của riêng bạn - điều đó có thể đưa bạn vào địa ngục YAGNI.

Hiểu ngôn ngữ của bạn, API và các công cụ của bạn. Một lần nữa điều này có vẻ rõ ràng nhưng trong nhiều năm tôi đã viết rất nhiều mã mà sau đó tôi nhận ra là chức năng sao chép mà tôi có thể vừa được thừa hưởng từ API hoặc sử dụng một tính năng ngôn ngữ để đơn giản hóa rằng tôi đã nhận ra rằng vài giờ đọc lên tài liệu về API tôi đang làm việc sẽ giúp tôi tiết kiệm nhiều giờ mã hóa hoặc gỡ lỗi sau này. Tương tự, hầu hết các nền tảng bạn làm việc đều có hạt - học cách làm việc theo cách họ mong đợi và cuộc sống của bạn sẽ dễ dàng hơn rất nhiều. Dành thời gian để tìm hướng ít kháng cự nhất cho nền tảng bạn đang làm việc và bạn sẽ hoàn thành công việc tốt hơn rất nhiều.

Nếu bạn đang tự hỏi liệu có cách nào tốt hơn để làm một cái gì đó, có lẽ là có và nó luôn luôn đáng để tìm ra cách làm mọi thứ tốt hơn.


Có, theo tôi, lý do duy nhất cho các chức năng một dòng riêng tư là nguyên tắc DRY

Vì tôi đã có nhiều hơn các hàm đó, số dòng mã trong các lớp của tôi đã giảm xuống rõ rệt và nó trông gọn gàng và rõ ràng hơn rất nhiều.
glenatron

Nghe có vẻ hơi mâu thuẫn, nhiều chức năng hơn nhưng ít dòng hơn, nhưng có lẽ tôi cũng có thể thấy xu hướng tương tự trong mã của mình .. Tôi phải suy nghĩ về điều đó ....

Bạn có thêm bất kỳ hướng dẫn nào có thể được tuân theo không? Âm thanh như thể chúng có thể hữu ích cho một nhà phát triển trẻ như tôi.
stuartmclark

@stuartmclark - Tôi đã thêm một vài thứ nữa, mặc dù tôi nghi ngờ không có quá nhiều thứ mà bạn sẽ không nghe thấy ở nơi khác.
glenatron

16

Một cách tuyệt vời để viết ít mã hơn là cố gắng tránh phát minh lại bánh xe và sử dụng các thành phần phần mềm hiện có khi có sẵn.

Một câu trả lời phổ biến tôi nhận được khi tôi hỏi tại sao mọi người thực hiện ORM của riêng họ, hoặc công cụ ghi nhật ký của riêng họ, hoặc các thành phần UI của riêng họ hoặc mọi thứ của riêng họ:

Nhưng chúng ta tốt hơn

Tôi tin rằng tuyên bố này là chính xác trong hầu hết các trường hợp, nhưng tác động tiêu cực đến ROI là rất cao trong hầu hết các trường hợp. Bạn làm món nào ngon nhất phải không? Nhưng bạn không thể yêu cầu mẹ về nhà và chuẩn bị chúng hàng ngày.

Đó là lý do tại sao tôi nghĩ rằng các nhà phát triển nên quan tâm đến tác động tài chính của các lựa chọn của họ. Một số trong số họ là:

  • Cần thêm công việc để xây dựng thành phần
  • Làm thêm cho những người mới học nó
  • Làm thêm rất nhiều để duy trì nó

Tôi muốn nghĩ rằng các nhà cung cấp thành phần đó là nhóm mở rộng của bạn làm việc cho bạn trong một phần rất nhỏ của những gì bạn sẽ phải trả để xây dựng, duy trì và cải thiện nó.

Toàn bộ công ty nên tối đa ROI hơn là làm việc để tối đa hóa sự hài lòng về bản ngã của chúng tôi;) Công ty của bạn càng nhận được nhiều tiền, điều kiện làm việc và lương của bạn sẽ càng tăng.


1
Tôi cũng có tội về điều đó, vài năm trước tôi đã viết lớp filepath của riêng mình có thể chuyển đổi filepath giữa định dạng Win, Unix và Táo. Chúng tôi chỉ sử dụng cửa sổ. Có lẽ đó cũng là một quy tắc, đừng bao giờ biến mọi thứ thành tương lai

Đôi khi, do bạn thiếu kiến ​​thức về một khuôn khổ nhất định. Tôi cũng đã viết lớp đường dẫn của riêng mình khi tôi bắt đầu làm việc với .NET, sau đó tôi phát hiện ra lớp System.IO.Path vài ngày sau :-)

Tôi thích mì spaghetti của mẹ tôi, nhưng những thứ trong hũ là đủ tốt. Điều này thực sự sôi sục với những người phụ trách các yêu cầu. Nếu họ không giải quyết cho giải pháp 85%, bạn không có lựa chọn nào khác.
JeffO

Mẹ tôi làm mì spaghetti tốt hơn nhiều mà bạn.

1
+ các internets cho "tránh phát minh lại bánh xe". Một trong những kỹ năng quan trọng nhất mà tôi đã phát triển là có thể xác định các vấn đề mà ai đó có thể đã giải quyết. Nó không chỉ luôn mang đến cho tôi một giải pháp tốt hơn là tôi tự sản xuất bằng cách xử lý một loạt các trường hợp bên lề mà tôi có thể đã bỏ qua, nó giải phóng tôi để giải quyết các vấn đề tôi thực sự được trả tiền để giải quyết .
BlairHippo

5

Theo tôi, viết ít mã hơn có thể được thực hiện theo nhiều cách:

  • Bạn không cần Gonna . Đừng mã hóa thứ gì đó bạn chưa cần. Mã chỉ yêu cầu nhà nước vậy. Bằng cách này, chúng tôi sẽ giảm mã cần thiết để viết.

  • Đừng lặp lại chính mình . Tôi tin rằng sử dụng CMS, khung hoặc thư viện bên thứ ba là một cách để áp dụng nguyên tắc DRY.

  • Trừu tượng . Và cuối cùng nhưng không kém phần quan trọng, lập trình trừu tượng cũng có thể giảm mã rất nhiều. Bằng cách trừu tượng hóa mã, cơ hội sử dụng lại mã sẽ tăng cao hơn vì nó làm giảm tính trùng lặp.


3

Ngoài sự hiểu biết về ngôn ngữ lập trình, tôi nghĩ rằng sự hiểu biết của một người về một vấn đề và đưa ra một giải pháp tốt có rất nhiều điều phải làm với nó. Có nhiều giải pháp cho hầu hết các vấn đề, không phải tất cả chúng đều tối ưu. Bạn có thể lái xe từ thành phố A đến thành phố B qua những con đường khác nhau - một người có thể mất hai giờ, người kia có thể mất gấp đôi. Đó là ý tưởng tương tự trong lập trình. Bạn có thể biết một ngôn ngữ rất tốt, nhưng bạn có thể đưa ra một giải pháp, ví dụ như hai trang mã, trong khi người khác sẽ tìm ra một giải pháp có thể được thực hiện trong một phần tư kích thước mã. Tôi đã thấy điều này rất nhiều trong những năm qua.

Hãy chắc chắn rằng bạn có một sự hiểu biết tốt về vấn đề. Phân tích nó, đưa ra giải pháp, cân nhắc ưu và nhược điểm (tất nhiên "các giải pháp với 's'" sẽ thay đổi rất nhiều từ vấn đề này sang vấn đề khác - chỉ nói chung ở đây.) Sau đó, thực hiện giải pháp được chọn, trong đó là nơi bạn hiểu về ngôn ngữ (và khuôn khổ, nếu điều đó áp dụng) sẽ phát huy tác dụng.


Bạn dành bao nhiêu thời gian để chuẩn bị giải pháp so với lập trình giải pháp?

Nó thay đổi tùy thuộc vào vấn đề, tất nhiên. Tôi không nói chuyện ngày ở đây. Dành một chút thời gian suy nghĩ trước khi mã hóa thường được đền đáp. Đó thực sự không phải là thời gian dành cho việc thực hiện vì nó đang đưa ra một giải pháp tốt - và duy trì lý tưởng trong thời gian dài -. Tôi có thể tạo mã crappy cho các giải pháp crappy không sao - bất cứ ai cũng có thể làm điều đó.
MetalMikester

1

Toàn bộ nghệ thuật lập trình có thể nói là đi xuống này.

Bạn có thể nghiên cứu các ngôn ngữ có trọng tâm truyền thống về sự rõ ràng và ngắn gọn (ví dụ: Haskell, Scheme, Python) hoặc thậm chí các mô hình khó hiểu như Factor và các ngôn ngữ kết hợp khác, nhưng cuối cùng, mọi thứ bạn có thể chọn để nghiên cứu cuối cùng sẽ góp phần giúp bạn viết ngắn hơn , mã dự phòng ít hơn.


1

Giống như tất cả các vấn đề khác, nếu bạn không thừa nhận có vấn đề, bạn sẽ không tìm kiếm giải pháp. Kinh nghiệm bắt đầu là một yếu tố khi bạn học được ít mã hơn. Khi bạn xem lại mã của mình, đây là thời điểm tuyệt vời để xác định xem bạn có thể sử dụng lại mã hoặc tái cấu trúc thành ít mã hơn không. Microsoft đã có thể cải thiện tốc độ in bằng Windows 2000 bằng cách KHÔNG làm hỏng nó hai lần (trích dẫn từ nhân viên của Microsoft tại một trong những bản demo miễn phí của họ).


Vì vậy, tôi nên xem lại mã của mình và cấu trúc lại mã để có cách xử lý cách viết ít mã hơn hoặc như Piet nói, mã terser?

2
@Gorgen - bạn có thể nếu bạn có thời gian hoặc chỉ cần xem bất kỳ mã nào bạn đã viết một giờ trước. Đôi khi, việc phát hiện một ví dụ trên SO có thể khiến bạn quay lại và thực hiện một số thay đổi trong mã của riêng bạn.
JeffO

0
  1. Quay trở lại yo mã dài hơn cũ của bạn,
  2. đặt nó dưới sự kiểm soát phiên bản,
  3. viết một số thử nghiệm cho nó để có hy vọng hợp lý không giới thiệu các lỗi mới,
  4. viết lại.

Lặp lại tự do quảng cáo. Và chào mừng đến địa ngục.


-2

Kiểm tra hướng phát triển có thể giúp đỡ. Sử dụng điều này, bạn chỉ viết mã tối thiểu cần thiết để vượt qua bài kiểm tra đó.


Trong bối cảnh đó, tối thiểu có nghĩa là về các tính năng, không phải chiều dài.
vemv
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.