NỘI DUNG BÀI VIẾT
Với tình hình các bạn trẻ tiếp cận bộ môn lập trình ngày càng tăng, số lượng bài viết về lập trình càng lúc càng nhiều. Tuy nhiên, có lẽ chúng ta đã quá tập trung vào những thứ cao siêu mà quên rằng một chương trình máy tính xuất hiện cũng không đến nỗi quá phức tạp.
Bài viết này được hiện thực sau một buổi lang thang trên facebook và vô tình ghé vào lớp học online của thầy mình đang dạy cho các em khóa dưới. Bỗng dưng mình nhận ra nhiều điều trước giờ có lẽ mình quên đi mất, và mình muốn chia sẻ nó với các bạn. Đối tượng chính của bài viết này là các bạn mới tự thân bước vào môn lập trình và chưa biết phải bắt đầu từ chỗ nào.
Lời đầu tiên mình xin được cảm ơn thầy rất nhiều. Tiếp đó mình sẽ giới thiệu với các bạn cách viết một chương trình một cách ngắn gọn, vắn tắt nhất có thể theo các bước sau đây:
0. Đọc hiểu văn bản
Nghe tiêu đề như phần chép bài môn ngữ văn nhể? Chính xác là nó luôn đấy.
Mình xin phép được đánh số 0 cho bước này không phải làm màu mà bởi vì sự quan trọng của nó cũng như nhiều bạn mới bước vào lập trình bằng cách nào đó đã bỏ qua bước này. Và điều đầu tiên các bạn làm đó chính là mở facebook, messenger lên gõ “các bạn ơi, giúp mình bài này với” …. thật là buồn làm sao. Điều các bạn thực sự cần làm đó chính là dành ra nhiều phút để đọc thật kỹ yêu cầu. Chương trình này sẽ làm gì? Chương trình này để làm gì? Từ đó bạn vạch ra được một ý tưởng chung nhất, thay vì ngồi nhìn mãi vào IDE mà không biết phải xuống tay vào nút nào trước cho đúng. Và các bạn cũng cần hiểu một điều rằng “máy tính chỉ làm những gì mình dạy nó, nó chỉ chạy điện thay vì chạy cơm nên cũng không thể tự giải quyết vấn đề được”.
Để mọi thứ trực quan hơn, mình cùng nhau đi qua các bước xoay quanh một đề bài đơn giản: “Viết một chương trình tìm diện tích của hình chữ nhật khi biết được chiều dài, chiều rộng.”
1. Xác định đầu vào, đầu ra
Hiểu được đề bài, chúng ta “chốt đơn” với đầu vào là những gì đề cho và đầu ra là thứ gì đề cần. Từ đó tinh gọn vấn đề.
Sau khi giành thời gian đọc hiểu yêu cầu với đề bài nhẹ nhàng bên trên, rất dễ để chúng ta có thể hình dung rằng trong trường hợp này, người dùng đã có 2 thứ đó là chiều dài và chiều rộng, cái họ cần chính là diện tích của hình tam giác.
2. Xác định các biến, tham số tham gia vào chương trình
Biến, tham số nôm na là nơi để lưu các giá trị xuất hiện trong chương trình. Việc xác định được đầu vào, đầu ra sẽ giúp ta xác định các biến dễ dàng hơn. Bên cạnh đó bài toán sẽ trở nên rõ ràng và sáng sủa hơn cho việc tìm thấy lối ra.
Khi đã xác định được input, output của đề bài trên, ta có thể đặt tên cho các input, output đó để làm tên biến rồi. Ta có thể đặt đại nó là a,b,c
gì gì đó cũng được nếu muốn, chả sao cả nhưng nếu sau này đưa code cho một người khác xem, họ chẳng thể hiểu nổi mình đang làm cái gì. Vậy thì đặt là dai, rong, dientich
thì sao nhỉ? Nghe cũng hợp lý nhưng thử hình dung giữa một rừng code tiếng anh ta lại chèn vào những tên tiếng Việt cũng gây hoang mang một tý nếu ta chơi với bạn bè quốc tế phải không nào. Thế thì width, length, square
chắc chắn sẽ là sự lựa chọn hoàn hảo. Và đừng quên nghĩ luôn kiểu dữ liệu cho chúng nếu có nhé.
Ngoài ra đối với những đề bài khác, chúng ta có thể tìm thêm những biến, hằng nào sẽ tham gia vào chương trình với vai trò trung gian, chẳng hạn như tính diện tích hình tròn, chả thể nào ta lại để số Pi là input mà bắt người khác nhập vào được. Hoặc bài toán nào đó phức tạp mà ta cần một biến để lưu tạm kết quả cho phần xử lý kế tiếp chẳng hạn.
3. Áp dụng thuật toán
“Lập trình viên không thể làm cho máy tính xử lí vấn đề nếu như chính anh ta cũng chả thể tự mình giải quyết nó”.
Thuật toán là những thủ thuật, biện pháp nào đó để giải quyết bài toán, vấn đề thôi. Nên chúng ta không cần phải vẽ ra những gì quá cao siêu, code chạy trước đi rồi mình tối ưu nó sau vẫn được mà.
Thuật toán cho việc tìm diện tích của một hình chữ nhật có chiều dài chiều rộng có vẻ đơn giản, ta chỉ cần lấy tích của chúng là ra. Nhưng nếu phải xử lý những bài toán phức tạp (cũng là tìm diện tích nhưng trên mặt phẳng tọa độ) thì sao nhỉ? Lúc đấy ta có thể lấy giấy bút ra và giải tay trước như một bài toán bình thường rồi phân tích hướng đi, quay lại bước 2 xem xét những biến, tham số nào phát sinh thêm trong quá trình. Và hãy nhớ, chỉ cần chúng ta giải được thì chúng ta sẽ code được.
4. Lập trình
Bước này ai cũng biết rồi đúng không nào, mở IDE, notepad,… và khai phím thôi nào.
5. Xây dựng bộ kiểm thử
Để biết được chương trình có chạy đúng mục đích hay không, người ta có khâu kiểm thử, điều này cũng giống như việc làm của các KCS trong nhà máy, xí nghiệp vậy.
Bộ kiểm thử được xây dựng dựa trên kết quả mong muốn (expected) của mình đối với chương trình (có thể là từng hàm trong đấy hoặc toàn bộ) và kết quả thực tế (actual) thay vì chúng ta phải log từng dòng ra để kiểm tra sẽ rất mất thời gian. Hiện nay có rất nhiều thư viện hỗ trợ cho việc kiểm thử (JUnit, Pytest, Jest,….)
Xây dựng bộ kiểm thử cho bài toán này thì sao nhỉ? Chúng ta có 2 input và 1 output đúng không. Thế thì bộ kiểm thử căn bản sẽ là
width | length | expected |
3 | 3 | 9 |
5 | 2 | 10 |
1 | 1 | 1 |
Thế này thì hơi đơn giản đúng không nào? Thế nhỡ đâu có một input cà trớn là số âm thì sao? Chúng ta đâu thể cấm người khác nhập được. Nếu như họ cố tình nhập như thế thì phải có gì đó thông báo lỗi chứ. Vậy thì:
width | length | expected |
-3 | 2 | error |
6 | -1 | error |
-5 | -5 | error |
Vậy là chúng ta đã có một bộ kiểm thử căn bản rồi. Việc xây dựng bộ kiểm thử này cũng có thể được thực hiện ngay sau bước số 0 để ta có thể hình dung rõ hơn chương trình của mình sẽ phải làm gì.
6. Kiểm thử và sửa lỗi
Có code rồi, có cả test rồi, chúng ta có thể chạy bộ test (kiểm thử) để xem chương trình đã chạy đúng hay chưa, có lỗi gì không. Nếu mọi thứ ổn định rồi thì mình có thể build ra một phiên bản hoàn chỉnh hoặc nộp bài cho giáo viên hay optimize cho code chạy nhanh hơn,… Còn trong trường hợp có lỗi xảy ra, chúng ta bắt đầu phân tích xem trong code đã có những vấn đề gì, lỗi ấy do đâu. Có thể quay về bước số 0 để tiến hành lại.
Lời kết
Bài viết này dựa trên những gì mình trải nghiệm và học hỏi, có thể đúng cũng có thể sai. Các bạn có thể góp ý dưới comment để cùng hoàn thiện nhé.
Tham khảo khóa học lập trình web 6 tháng, đảm bảo 100% công việc đầu ra!
Nguồn: https://codelearn.io/sharing/mot-chuong-trinh-duoc-sinh-ra-nhu-the-nao