Các bước lập trình và thiết kế một chương trình VBA và tinh thần tự học

giaiphapvba

Administrator
Thành viên BQT
Bàn về thiết kế chương trình VBA

Một số người có thói quen bắt tay vào code ngay, khi mà trong đầu mới chỉ hình thành ý tưởng. Và vì vậy, khi code thường bị rối. Vì là các ý tưởng chưa được sắp xếp cẩn thận từ ban đầu. Những điều này thường xuất hiện ở những người mới code. Hoặc thậm chí là những người đã code nhiều nhưng họ chỉ quen code với một thủ tục hay một hàm. Khi một chương trình cần kết hợp khéo léo giữa các khâu thì thiết kế là cần thiết.
Vì vậy, xây dựng kiến trúc tổng thể một chương trình VBA là cần thiết.
Đầu tiên, khái quát chương trình định làm những gì, input và output trông như thế nào, phân tích thao tác của người dùng gồm những gì.
1- Chờ người dùng nhập input.
Đây là Standby. Chương trình sẽ chờ người dùng ấn nút để thực thi.
2- Người dùng ấn nút.
Chương trình kiểm tra các thông tin input đã được nhập vào đầy đủ hay chưa? Ví dụ như đường link file input chưa nhập, Option chưa chọn... Nếu đưa vào đầy đủ rồi, thì tiến hành bước tiếp theo là xác nhận data input.
Ví dụ: File input có dòng 1 cột 1 luôn là số. Nếu phát hiện không phải là số, thì ra thông báo lỗi. Dừng chương trình.
Tùy vào loại data input, mà yêu cầu kiểm tra data input có được tiến hành hay không, hoặc là vừa tiến hành vừa tạo ra output.
3. Chia việc
Tuy nhiên, trong công việc theo nhóm, chia việc cho từng đội hay từng người thì thường tách bạch nhóm chức năng. Vì vậy nhóm code kiểm tra cứ tiến hành kiểm tra. Nhóm code tạo output cứ code tạo output (mặc định data đúng).
Nhóm hợp code, là lắp ghép các đoạn chương trình với nhau, sẽ lấy kết quả trả về, để xem có tiến hành gọi code tạo output hay không?
4. Lợi ích của việc chia khối chức năng, chia việc.
Khi chia theo khối chức năng, người code chỉ tập trung vào công việc của mình mà không bận tâm về vấn đề khác.
Sẽ rối loạn nếu vừa code output, vừa code kiểm tra input. Người code sẽ khó tập trung vào công việc của mình.
Ngoài ra, khi phân chia theo khối chức năng, thì chương trình cũng dễ bảo trì, nâng cấp.
Mặt khác, chúng ta biết rằng, khi làm như vậy sẽ có một loạt các chương trình con được tạo ra ứng với mỗi khối chức năng, trong mỗi khối chức năng, người ta lại chia lượng việc ra nhỏ hơn nữa, và vì vậy có rất nhiều chương trình con được tạo ra. Có rất nhiều bạn code cả một chương trình dài lê thê. Điều này vừa khó bảo trì, sửa chữa, vừa tạo nên tốc độ chậm.
Một chương trình con kết thúc sẽ giải phóng hoàn toàn bộ nhớ các biến cục bộ ở bên trong nó. Vì vậy việc gọi nhiều lần chương trình con chính là giải phóng bộ nhớ liên tục, thay vì một chương trình dài, khi chương trình đó kết thúc thì biến cục bộ của nó mới được giải phóng, do đó càng chia nhỏ ra làm nhiều chương trình con thì càng tốt. Tôi nhớ là trong một video nào đó trong , các bạn nếu xem hẳn đã thấy các biến được giải phóng bộ nhớ ra sao khi chúng ta cho dừng chương trình giữa chừng để xem giá trị các biến, và khi chương trình kết thúc hoàn toàn, ta không còn đọc được biến cục bộ nữa, nó đã được giải phóng hoàn toàn.

Các chương trình các bạn viết hầu hết là các chương trình nhỏ, cho nên các bạn không bận tâm mấy điều trên. Tuy nhiên rèn được thói quen thiết kế trước khi làm, thì trình độ của các bạn sẽ được nâng cao hơn. Người thiết kế không hẳn là người code, họ chỉ ra chương trình phải làm những gì, khối chức năng ra sao, kiểm tra những gì, ra cảnh báo ra sao, đưa ra output như thế nào, ai tiến hành làm công việc gì...

Bàn về tinh thần tự học

Những người hỗ trợ code
đương nhiên chúng ta rất hoan nghênh. Có những người có cả chục năm hỗ trợ code với hàng chục ngàn bài viết, tôi cảm thấy xót xa quãng thời gian cuộc đời mà họ bỏ phí. Trước hết, những người nhận hỗ trợ code nếu không có tinh thần tự học, thì họ nhận code rồi cũng chỉ ấn nút cho chạy, xong nhiệm vụ đó, có chắc là họ sẽ hiểu code ấy để áp dụng được cho các tình huống tương tự? Mà bản thân những người hỗ trợ code cũng chẳng comment gì vào code. Vậy hỗ trợ ở đây có đúng nghĩa là hỗ trợ, hay chỉ đơn giản là làm giúp với giá 0 đồng? Vậy cả cuộc đời làm giúp với giá 0 đồng ấy, mục đích là gì?
Thứ nhất, giá trị tham khảo không có. Không comment vào code. Bài viết cũng không có tính chuyên sâu, chuyên đề. Để nói thế hệ mai sau tham khảo, tôi nghĩ đó là điều khó.
Thứ hai, người nhận hỗ trợ không có tinh thần tự học, thì giúp đỡ chỉ như là thương hại, mà không giúp họ trưởng thành. Không nghiêm khắc với họ trong trình bày, không bảo ban họ cách tiếp cận kiến thức, nên tham khảo cái gì, ở đâu? Nếu họ đọc rồi mà không hiểu, thì bước hỗ trợ mới đi tới code.
Thứ ba, trở thành người bị lợi dụng. Website mà có nhiều người làm giúp với giá 0 đồng, chẳng cần biết đối phương hiểu hay không, đây code đây, hãy dùng đi. Như thế thành viên cần nhờ vả sẽ thích lắm, lượng truy cập đông. Người được lợi chỉ có hai đối tượng, người đi nhờ vả với giá 0 đồng, công việc được tiến hành thuận lợi bằng VBA dù chả hiểu gì code, nhận code xong cũng không đọc xem cái đó là gì, ý nghĩa ra sao, tại sao lại như vậy, logic của người code là gì... Và những người tạo nên website có lượng người truy cập đông, đặt quảng cáo, bán sách, quảng cáo khóa học...

Nếu chỉ đơn giản, lệnh này là gì, muốn làm cái này thì hướng đi như nào, dùng sự kiện gì? Sự giúp đỡ như thế không tốn nhiều thời gian, họ có kiến thức, họ giải đáp rất nhanh so với việc chúng ta tự tìm kiếm. Việc này thì tôi không phê phán.
Tuy nhiên chẳng phải là tinh thần tự học, đầu tiên phải là, chúng ta đã nỗ lực hết sức chưa hay sao? Nếu chúng ta chưa nỗ lực hết sức, mà nhờ vả sự giúp đỡ từ người khác, đó chẳng phải là lợi dụng hay sao?
Nếu đã nỗ lực hết sức rồi mà không được, khi ấy sự giúp đỡ hẳn là cần thiết, ai cũng hiểu điều ấy.

Tôi rất tâm đắc với một bài viết của @huutinh85 . Trước hết, anh ta cố gắng tìm code trên mạng. Đây là nỗ lực. Và vì không hiểu, nên anh ta mới phải đi hỏi. Trong trường hợp này, tôi nghĩ hỗ trợ là cần thiết. (Tất nhiên cũng còn tùy vào khả năng của chúng ta, có hỗ trợ được hay không).

Đối với những người khác, tất nhiên họ cũng cần hỗ trợ vì bản thân họ không làm được. Tuy nhiên để đánh giá sự nỗ lực của một người, đó chẳng phải là nhìn vào bài viết xem anh/chị đã trình bày cẩn thận hay chưa đó hay sao? Anh/Chị có thể nói là không biết code, nhưng không thể nói là tôi không thể trình bày cặn kẽ, tội không thể sử dụng hình ảnh trực quan cho dễ hiểu.

Giúp ai, phải nhìn xem họ đã nỗ lực hay chưa. Vì vậy tôi đánh giá cao hướng đi của tuhocvba.net khi luôn một mực yêu cầu thành viên:
1. Hãy trình bày để bất cứ ai cũng hiểu được.
2. Hỗ trợ trình bày-bài viết vẫn có thể cải thiện để cho dễ hiểu hơn.
3. Cố gắng đừng làm phiền hà người khác bằng việc trình bày để người khác muốn hiểu sai cũng không được. Đừng để người khác phải hỏi lại, xác nhận lại nhiều lần.

Chính là khi nhìn thấy thái độ như thế, người đi giúp đỡ mới đánh giá được việc này là cần thiết giúp đỡ hay không, họ đã nỗ lực hết sức hay chưa? Hay là mình đang bị lợi dụng để làm công việc với giá 0 đồng?
Chẳng có sự nỗ lực hết sức nào lại thể hiện bằng một bài viết hời hợt, qua loa đại khái, thông tin thiếu thốn, hình ảnh trực quan không có, file dữ liệu demo cũng không...

Chính là như thế, các bạn mới có thể trưởng thành. Chính là phải như thế, các bạn mới thay đổi thái độ tiếp cận tri thức. Chính là như thế, các bạn mới hiểu giá trị của mồ hôi, công sức và ý nghĩa của tự lực. Chính là như thế, bài viết mới có giá trị, mới trở thành nguồn tư liệu tham khảo cho thế hệ mai sau. Và chỉ khi bạn đã nỗ lực trình bày, thì vấn đề mới trở nên sáng sủa-dễ hiểu.

Hành xử tuy có phần nghiêm khắc, nhưng có sự trưởng thành nào mà không cần nghiêm khắc?

Chỉ có những người buôn bán mới có thể nở nụ cười miễn phí, miễn làm sao anh mang lại lợi nhuận cho tôi. Hãy truy cập web và hỏi đi. chúng tôi có những người làm việc với giá 0 đồng, luôn sẵn sàng trả lời bất cứ cái gì trong khả năng, bạn đưa thông tin hời hợt cũng không sao, chúng tôi chỉ cần bạn truy cập web, bạn trưởng thành hay không là việc của bạn, đời bạn xuống dốc là việc của riêng bạn-đó hẳn là điều họ nghĩ. Ngoài ra để tăng lượng bài viết, họ đưa ra những danh hiệu ảo tưởng dựa vào số bài viết. Bài càng nhiều, danh hiệu càng "cao quý", như là Huyền Thoại chả hạn. Và đương nhiên, cơ chế chặn spam, chặn đả kích khích bác không có. Họ cứ để mặc vậy thôi. Cứ viết bài đi, cứ truy cập đi. Ngoại trừ việc nếu bạn code giúp đỡ ai đó, và ghi tên bạn vào code, hay website của bạn vào code, thì sẽ có một lượng người "lưu manh giả danh trí thức" tới chọc ngoáy, cà khịa.

Tiền bối giúp hậu bối, không phải là đưa lên đoạn code chạy đáp ứng người dùng. Mà là giúp họ hiểu được, tự làm được. Ít nhất nếu không tự làm được, anh hãy trình bày ý tưởng của anh đi kèm với code cho họ hiểu hoặc cố gắng comment vào trong code.
Code không có comment nào, đối với tôi, nó như rác, vô giá trị với những người có tinh thần tự học như tôi.
 
Sửa lần cuối:
Top