Hỏi - đáp Nơi cung cấp thông tin nghề nghiệp và giải đáp những thắc mắc thường gặp của bạn

10 nguyên tắc lập trình cơ bản mà mọi lập trình viên phải biết

Lập trình cũng giống như kể một câu chuyện, trong đó các biến là các nhân vật với một số đóng vai trò xuyên suốt cho đến cuối và một số kết thúc ở một nơi nào đó. Các hàm khác nhau kể các phần khác nhau của câu chuyện và kết nối tất cả các lớp hoặc hàm trong một thứ tự cụ để tạo nên một câu chuyện có tính liên tục. Là một trong những tác giả, để có thể viết tiếp phần của mình, bạn cần mọi thứ theo một thứ tự, rõ ràng để có thể hiểu những phần đã viết một cách dễ dàng và tiếp tục câu chuyện bằng cách thêm nội dung của bạn ở những nơi cần thiết. Và những đồng tác giả của bạn, tức những người cùng chung dự án, hay những người phải đọc câu chuyện của bạn sau này, họ cũng cần mọi thứ như bạn đang mong muốn.

Bất kể bạn là một lập trình viên giỏi đến đâu, trong lập trình, công việc của bạn không chỉ là viết ra những dòng code hoạt động được, cho ra kết quả mong muốn mà còn phải viết code có thể bảo trì, mở rộng và dễ hiểu để những người tiếp tục dự án hoặc duy trì hệ thống sau này có thể hiểu được code của bạn và không phải trải qua một câu chuyện kinh dị đến độ phải gặp ác mộng.

Vậy làm thế nào để bạn viết code hiệu quả? Bằng cách lập trình có kỷ luật và có mục đích. Dưới đây là 10 nguyên tắc lập trình mà nếu tuân theo một cách chặc chẽ sẽ giúp bạn trở thành một lập trình viên vượt trội.

1. Keep It Simple, Stupid (KISS)

Đây là một trong những nguyên tắc lập trình quan trọng nhất đối với các lập trình viên. Vậy KISS nghĩa là gì?

KISS, viết tắt của Keep It Simple, Stupid, có nghĩa là bạn nên viết code càng đơn giản càng tốt. Một trong những quy tắc của lập trình cơ bản là không bao giờ bị cuốn vào việc cố gắng trở nên thông minh quá mức hoặc phô trương với một khối dày đặc code phức tạp. Nếu bạn có thể viết kịch bản trong một dòng, hãy viết nó trong một dòng.

Đây là một chức năng đơn giản:

function addNumbers(num1,num2){
 return num1 + num2;
}

Nhìn nó khá đơn giản phải không nào? Rất dễ đọc và bạn biết chính xác những gì đang diễn ra.

Một nguyên tắc lập trình theo tinh thần này là sử dụng tên biến rõ ràng. Tận dụng các thư viện và công cụ hiện có. Nó sẽ giúp bạn dễ dàng quay lại sau sáu tháng mà không phải loay hoay về những thứ chính mình đã tạo ra. Giữ mọi thứ đơn giản sẽ giúp bạn tiết kiệm rất nhiều thời gian và công sức về sau.

Đừng làm mọi thứ phức tạp quá lên

2. DRY Code

Nguyên tắc Don’t Repeat Yourself (DRY) có nghĩa là không lặp lại code. Đó là một lỗi lập trình khá phổ biến. Khi viết code, tránh trùng lặp dữ liệu hoặc logic. Nếu bạn đã từng sao chép và dán code trong chương trình của mình, thì đó không phải là DRY code.

Hãy xem kịch bản này:

function addNumberSequence(number){
 number = number + 1;
 number = number + 2;
 number = number + 3;
 number = number + 4;
 number = number + 5;
 return number;
}

Thay vì sao chép các dòng, hãy cố gắng tìm một thuật toán sử dụng một vòng lặp để thay thế.

DRY code dễ bảo trì. Việc gỡ lỗi một vòng lặp xử lý 50 lần lặp lại dễ dàng hơn so với 50 khối mã xử lý mỗi lần lặp lại một lần.

3. Open/Close

Nguyên tắc lập trình Mở/Đóng (Open/Close) này có nghĩa là bạn nên đặt mục tiêu làm cho code của mình ở chế độ mở rộng nhưng đóng đối với sửa đổi. Đây là một nguyên tắc quan trọng khi phát hành một thư viện hoặc framework mà những người khác sẽ sử dụng.

Ví dụ: giả sử bạn đang duy trì một GUI framework. Bạn có thể phát hành một phiên bản để người viết code trực tiếp sửa đổi và tích hợp code đã phát hành của bạn. Tuy nhiên, điều gì sẽ xảy ra khi bạn phát hành một bản cập nhật lớn sau đó bốn tháng? Code của họ sẽ bị phá vỡ. Điều này có thể sẽ làm cho nhóm của bạn rất thất vọng. Họ sẽ không muốn sử dụng thư viện của bạn lâu hơn nữa, bất kể nó hữu ích như thế nào.

Thay vào đó, hãy phát hành code ngăn sửa đổi trực tiếp và khuyến khích mở rộng. Đơn giản là đưa đoạn code đó vào một phương thức riêng sau đó gọi phương thức này từ những chỗ chúng ta cần gọi.

Các nguyên tắc lập trình cơ bản như thế này tách biệt hành vi cốt lõi khỏi hành vi đã sửa đổi. Code ổn định hơn và dễ bảo trì hơn.

4. Composition Over Inheritance

Nếu bạn viết code bằng lập trình hướng đối tượng, bạn sẽ thấy nguyên tắc lập trình này rất hữu ích. Nguyên tắc composition over inheritance ưu tiên hợp đối tượng (object compostion) thay vì thừa kế lớp (class inheritance). Nguyên tắc này nêu rõ: các đối tượng có các hành vi phức tạp nên chứa các thể hiện của các đối tượng có các hành vi riêng lẻ. Chúng không nên kế thừa một lớp và thêm các hành vi mới.

Dựa vào quyền thừa kế gây ra hai vấn đề lớn. Thứ nhất, hệ thống phân cấp thừa kế có thể trở nên lộn xộn khi vội vàng. Bạn cũng có ít tính linh hoạt hơn trong việc xác định các hành vi trong trường hợp đặc biệt. Giả sử bạn muốn thực hiện các hành vi để chia sẻ:

Composition programming dễ viết hơn, dễ bảo trì hơn và cho phép xác định các hành vi linh hoạt. Mỗi hành vi riêng lẽ là là lớp riêng. Bạn có thể tạo ra các hành vi phức tạp bằng cách kết hợp các hành vi riêng lẻ.

5. Single Responsibility

Nguyên tắc Single Responsibility (SRP), tức Đơn nhiệm hay  Trách nhiệm duy nhất nói rằng mọi class hoặc mô-đun trong một chương trình chỉ nên cung cấp một chức năng cụ thể. Như Robert C. Martin đã nói, “Một class chỉ nên có một lý do để thay đổi.”

Các class và mô-đun thường bắt đầu theo cách này. Hãy cẩn thận để không thêm quá nhiều trách nhiệm vì các class trở nên phức tạp hơn. Refactor và chia nhỏ chúng thành các class và mô-đun nhỏ hơn.

Hệ quả của việc quá tải các class là gấp đôi. Đầu tiên, nó làm phức tạp việc gỡ lỗi khi bạn đang cố gắng cô lập một mô-đun nhất định để khắc phục sự cố. Thứ hai, việc tạo chức năng bổ sung cho một mô-đun cụ thể trở nên khó khăn hơn. Các nguyên tắc lập trình tốt sẽ ngăn chặn những vấn đề này trước khi chúng trở thành vấn đề  phức tạp.

6. Separation of Concerns

Nguyên lý Separation of Concerns là một phiên bản trừu tượng của nguyên tắc Đơn nhiệm bên trên. Ý tưởng của nguyên tắc này nói rằng một chương trình nên được thiết kế với các vùng chứa khác nhau và các vùng chứa này không được có quyền truy cập vào nhau.

Một ví dụ nổi tiếng về điều này là thiết kế model-view-controller (MVC). MVC tách một chương trình thành ba khu vực riêng biệt: dữ liệu (mô hình), logic (bộ điều khiển) và những gì trang hiển thị (view). Các biến thể của MVC là phổ biến trong các framework web phổ biến nhất hiện nay.

Ví dụ, code xử lý cơ sở dữ liệu không cần biết cách hiển thị dữ liệu trong trình duyệt. Rendering code nhận đầu vào từ người dùng, nhưng code logic xử lý quá trình. Mỗi đoạn code là hoàn toàn độc lập.

Kết quả là code dễ gỡ lỗi. Nếu bạn cần viết lại rendering code, bạn có thể làm như vậy mà không cần lo lắng về cách dữ liệu được lưu hoặc logic được xử lý.

Ví dụ vầ mô hình MVC. Image credit: mozilla.org

7. You Aren’t Going to Need It (YAGNI)

You aren’t going to need it có nghĩa là bạn sẽ không cần nó. Nguyên tắc nói rằng bạn không nên viết code cho những chức năng mà mà bạn chỉ cần trong tương lai.  Một trong những nguyên tắc quan trọng nhất của lập trình là bạn không nên cố gắng giải quyết một vấn đề không tồn tại.

Trong nỗ lực viết DRY code, các lập trình viên có thể vi phạm nguyên tắc này. Thông thường, các lập trình viên thiếu kinh nghiệm cố gắng viết mã trừu tượng và chung chung nhất mà họ có thể. Tuy nhiên, quá nhiều abstract gây ra mã cồng kềnh không thể duy trì.

Chỉ áp dụng các nguyên tắc lập trình DRY khi bạn cần; nếu bạn nhận thấy các đoạn code được lặp đi lặp lại, hãy triển khai một lớp trừu tượng. Đừng nghĩ quá xa với code hiện tại của bạn.

8. Document Your Code

Bất kỳ nhà phát triển kinh nghiệm nào cũng sẽ nhấn mạnh tầm quan trọng của việc có những ghi chú (comment) thích hợp. Bạn nên tạo thói quen viết chúng. Để lại ghi chú để giải thích các đối tượng, nâng cao định nghĩa biến và làm cho các hàm dễ hiểu hơn.

Đây là một hàm JavaScript với các ghi chú hướng dẫn bạn qua mã:


//This function will add 5 to the input if odd, or return the number if even
function evenOrOdd(number){
 //Determine if the number is even
 if(number % 2 == 0){
 return number;
 }
 //If the number is odd, this will add 5 and return 
 else {
 return number + 5;
 }
}

Để lại ghi chú là một công việc làm mất thời gian của bạn hơn khi lập  trình. Tuy vậy bạn nhớ rằng không có gì là dùng một lần. Bạn cần phải nghĩ cho người dùng sau đó.

Bạn nên đi xa hơn và để lại chú thích ở bất cứ đâu mà bạn lo lắng rằng mọi thứ không rõ ràng, đặc biệt là khi cộng tác với những người khác. Đừng làm các đồng nghiệp của bạn thất vọng bằng cách buộc họ giải mã cú pháp của bạn.

Hãy thử viết một chương trình, để nó yên trong sáu tháng và quay lại sửa đổi nó. Bạn sẽ rất vui vì đã ghi lại chương trình của mình thay vì phải ghi lại mọi chức năng để ghi nhớ nó hoạt động như thế nào.

9. Refactor

Dù bạn đã là một lập trình viên kinh nghiệm hay mới vào nghề, code của bạn khó mà hoàn hảo ngay từ lần đầu tiên. Cấu trúc lại code có nghĩa là xem lại code của bạn và tìm cách tối ưu hóa nó, làm cho nó hiệu quả hơn trong khi vẫn giữ nguyên kết quả.

Codebases liên tục phát triển. Một trong những nguyên tắc lập trình là ghi nhớ rằng việc xem lại, viết lại hoặc thậm chí thiết kế lại toàn bộ các đoạn code là điều hoàn toàn bình thường. Nó không có nghĩa là bạn đã không thành công trong lần đầu tiên bạn viết chương trình mà là bạn sẽ làm tốt hơn theo thời gian.

Red-Green Refactoring technique

10. Clean Code

Hãy để cái tôi của bạn ở cửa và quên đi việc viết mã thông minh. Khi chúng ta nói điều này, chúng ta muốn nói đến loại code trông giống một câu đố hơn là một giải pháp. Bạn không lập trình để gây ấn tượng với người lạ. Bạn làm nghề này để giải quyết vấn đề.

Đừng cố gắng đóng gói hàng tấn logic vào một dòng. Để lại hướng dẫn rõ ràng trong ghi chú và tài liệu của bạn. Nếu mã của bạn dễ đọc, nó cũng thường sẽ dễ bảo trì.

Lập trình viên giỏi và code có thể đọc được đi đôi với nhau. Để lại ghi chú khi cần thiết, tuân thủ các hướng dẫn về phong cách và đặt mình vào vị trí của người tiếp theo bất cứ khi nào bạn có thể làm.

Các Nguyên Tắc Lập Trình: lộ trình tạo nên một lập trình viên giỏi.

Để trở thành một lập trình viên giỏi tốn khá nhiều thời gian và công sức. 10 quy tắc lập trình cơ bản có thể giúp trở thành một lập trình viên chuyên nghiệp.

Một lập trình viên giỏi hiểu cách làm cho ứng dụng của họ dễ sử dụng, là người hợp tác tốt trong nhóm làm việc của mình và hoàn thành các dự án theo đặc điểm kỹ thuật và đúng thời hạn. Bằng cách tuân theo các nguyên tắc lập trình này, bạn sẽ mang lại thành công trong sự nghiệp của chính mình.

Nguồn: itguru.vn