Sunday, September 13, 2020

06 - Môn tin học lớp 11 nên dạy các em ngôn ngữ lập trình nào?

Mới đây, Bộ GD&ĐT đã ban hành Công văn hướng dẫn và điều chỉnh nội dung giảng dạy môn tin học cấp THCS, THPT [1]. Đáng chú ý là môn tin học lớp 11 sẽ loại bỏ, không đưa Pascal vào chương trình giảng dạy. Đặc biệt, từ năm học 2021-2022 các đơn vị chỉ lựa chọn một trong các Ngôn ngữ lập trình: Python, C hoặc C++ để dạy trong chương trình môn Tin học lớp 11. Nếu được lựa chọn một ngôn ngữ lập trình (NNLT) để dạy cho các em, tôi sẽ không chọn Pascal như quy định của Bộ GDĐT và tôi cũng không chọn cả C, C++ và Python mà sẽ lựa chọn Visual Basic for Application. 

Việc đầu tiên chúng ta cần thống nhất là đưa ra các tiêu chí để lựa chọn NNLT. Các tiêu chỉ để lựa chọn dường như cũng chưa được xác định rõ trong các văn bản của Bộ GDĐT. Theo cá nhân tôi thì bộ tiêu chí cho NNLT có thể là:

  • (A1) Là một NNLT đơn giản, trong sáng, không quá phức tạp để giảm tải thời gian học cho các em.
  • (A2) Minh họa và thể hiện được tư duy lập trình cơ bản, có thể giúp các em lập trình giải được các bài toán có trong chương trình phổ thông. Ví dụ như chương trình giải phương trình bậc 2.
  • (A3) Công cụ lập trình đơn giản, dễ cài đặt, trực quan dễ sử dụng.
  • (A4) Dễ dàng tạo ra các ứng dụng có giao diện thân thiện.
  • (A5) Có tính ứng dụng cao, có thể được áp dụng cho nhiều ngành, không chỉ riêng cho CNTT.
  • (A6) Có tính kế thừa, được sử dụng tiếp cho các bậc học cao hơn như lớp 12, đại học, và có thể vẫn được sử dụng trong công việc về sau.

Để đưa ra một lựa chọn, tôi cũng căn cứ vào kinh nghiệm đã có với các NNLT của bản thân, cụ thê tôi đã từng: 

  • Lập trình Turbo Pascal từ năm 1988 với phần mềm tính kết cấu bằng phương pháp phần tử hữu hạn (1988-1990), phần mềm in mã nguồn Pascal Listing (1989)...
  • Lập trình C, C++ từ năm 1990 với các sản phẩm: Bộ biên dịch ngược và xuôi cho Chip Z80, 8085, Vietkey2000, Vietkey Linux...
  • Lập trình Python từ năm 1999-2008, phát triển bộ cài đặt Anaconda cho Vietkey Linux...
  • Lập trình Basic từ năm 1986 với chương trình quy hoạc tuyến tính (Linear Programming), Phần tử hữu hạn (1988), Visual Basic for Application (VBA) cho nhiều sản phẩm Vietkey Office (kiểm tra chính tả tiếng Việt, sắp xếp tiếng việt, chuyển mã văn bản...) năm 1998-2003, chấm điểm khiêu vũ thể thao VKSkating từ năm 2007-2018 và nhiều phần mềm khác.
Trên đây là 4 ngôn ngữ được đề cập đến trong bài này, tôi sẽ không kể đến những kinh nghiệm của bản thân với các ngôn ngữ khác như: FORTRAN, Assembly, Prolog, C#, Java, Perl, PHP, Dart, Golang, Rust, HTML/CSS, LaTeX, Mapple... Nhưng những trải nghiệm từ các NNLT này cũng giúp cho quá trình đánh giá các tiêu chí lựa chọn.

Sau đây là một số phân tích về các NNLT được đề cập đến trong bài:

(Turbo) Pascal

Là một NNLT dạng biên dịch (trước khi chạy chương trình thì cần phải dịch từ NNLT ra mã máy), do Niklaus Wirth thiết kế vào năm 1970, đã có một thời gian Pascal rất phổ biến với phiên bản Turbo Pascal của hãng Borland. Pascal là một ngôn ngữ rõ ràng và trong sáng, ít dùng các ký hiệu tắt như C mà chủ yếu dùng các từ khóa (keyword) bằng tiếng Anh. Pascal có con trỏ (truy tiếp trực tiếp vào ô nhớ vật lý) nhưng hầu như không phải sử dụng đến nên nó ít bị lỗi hơn C. Pascal thành công bởi hãng Borland đã làm ra bộ công cụ soạn thảo và biên dịch Pascal và cả C một cách rất tuyệt vời. Turbo Pascal được phát triển bởi Anders Hejlsberg, một siêu thủ về trình biên dịch mà sau này Microsoft cũng phải mua lại ông về để phát triển nền tảng .NET. Đã một thời tôi từng rất ngưỡng mộ và yêu thích Delphi một nền tảng phát triển ứng dụng cho MS Windows, .NET và cả Linux, ngôn ngữ sử dụng chính của Delphi chính là Pascal. Các app viết bởi Delphi chạy rất nhay và gọn gàng, tất cả các thư viện liên quan đến chương trình đều được gói vào 1 file EXE duy nhất, không cần phải cài đặt, chỉ copy là chạy và nó không bị phụ thuộc vào các phiên bản của các thư viện DLL (Dynamic Link Library) giống như các app được phát triển bởi Visual Studio, và tránh được các lỗi version giống hệt tình trạng trên Linux, mà trong giới lập trình vẫn gọi là "Địa ngục DLL". Đáng tiếc là đến năm 2009, Borland đã bị mua bởi Micro Focus International plc. và không còn xuất hiện trên thị trường, các công cụ phát triển cho Pascal cũng vì thế mà tàn lụi.

Cho đến trước tháng 8 năm nay, Turbo Pascal 7.0 (TPascal) vẫn được dạy ở các trường phổ thông trung học ở Việt Nam trong môi trường DOS hay Command Prompt của Windows. Microsoft càng ngày càng hạn chế chế độ DOS do đó cài đặt và sử dụng TPascal càng ngày càng khó khăn, các ứng dụng được phát triển bởi TPascal cũng là các chương trình chạy trên DOS nên cũng không được hỗ trợ do đó các yêu cầu A3, A4, A5, A6 đều không đáp ứng.

Tóm lại TPascal chỉ có thể được dùng để minh họa cho thuật toán (A1, A2) mà thôi, tính ứng dụng của nó rất thấp và nó cũng không có tính kế thừa, sau này ra đời gần như không có ai sử dụng nó trong thực tế.

C, C++

C là ngôn ngữ được phát triển bởi Dennis Ritchie (Bell Labs) từ năm 1972, là một ngôn ngữ khá súc tích và rất mạnh, nó có thể can thiệp sâu vào kiến trúc phần cứng, cụ thể là có con trỏ có thể truy cập trực tiếp vào các vùng nhớ, cấp phát động và giải phóng động các vùng nhớ rất linh hoạt nhưng cũng vì đây là con dao sắc nên cũng rất dễ gây lỗi, các lỗi tràn bộ đệm chủ yếu đến từ ngôn ngữ C. Cũng có nhiều năm tôi sử dụng ngôn ngữ C để phát triển hàng chục ứng dụng khác nhau, lần gần nhất là năm 2010 với dự án 10 triệu dòng lệnh C sửa nhân Linux Kernel để biến đổi Linux thành hệ điều hành thời gian thực. C, C++ rất mạnh và được sử dụng hầu hết trong các hệ thống lớn như hệ điều hành, các thiết bị nhúng IoT và cho đến tháng 9/2020, ngôn ngữ C vẫn được được xếp thứ 1 với chiếm gần 16% trong tổng các NNLT (Hình 1).

Hình 1: Xếp hạng các NNLT tháng 9/2020 trên https://www.tiobe.com/tiobe-index/
 
Ngôn ngữ C nói chung là khó hơn Pascal nhiều và vì nó cũng súc tích nên không được sáng sủa và mạch lạc như Pascal, nếu dạy trong môi trường DOS thì C cũng gặp phải đa số các nhược điểm như đã kể trên với TPascal, tức tính ứng dụng không cao và tính kế thừa cũng không cao. Để có tính ứng dụng và độ thân thiện tốt hơn thì nên học C# của Microsoft, nhưng có nhược điểm là bộ biên dịch Visual Studio rất nặng, cài bản miễn phí community cũng mất đến hơn 15G dung lượng đĩa cứng, bản thương mại còn có giá thành rất cao nữa.

Tóm lại C, C++ khó hơn TPascal do đó học nó có khi còn thêm tải cho các em học sinh, cài đặt khó với máy cấu hình thấp nếu dùng C#, tính kế thừa cũng không cao và chủ yếu thích hợp với các em sau này có định hướng theo ngành Công nghệ thông tin.

Python

Ngôn ngữ này được tạo bởi  Guido van Rossum năm 1991, Python được thiết kế với triết lý là ngôn ngữ dễ đọc nhất, đơn giản nhất có thể, hạn chế các ký hiệu "{};...", tối giản các quy ước một cách tối đa do đó mã nguồn thường ít dòng lệnh hơn so với C, C++ và các ngôn ngữ khác. Python khác với C,C++ là ngôn ngữ thông dịch dạng script, không được dịch trước ra mã máy, nên nó chậm hơn C++ từ 200-600 lần [2], thậm chí cũng chậm hơn cả VBA 3-6 lần [3]. bộ nhớ cũng tốn hơn do dùng kiểu biến động (dynamic typed). 

Python được thiết kế như là một NNLT phổ quát, có thể được sử dụng cho nhiều lĩnh vực khác nhau, tuy nhiên nó đa phần được sử dụng cho:
  • AI (Machine Learning);
  • Phân tích (data-analysts), xử lý và hiển thị dữ liệu;
  • Được sử dụng với một số framework để làm Back-end web development.
Python do có hiệu năng tính toán khá chậm so với C++ và một số NNLT biên dịch khác như Rust, Golang nên các bộ thư viện và framework đòi hỏi tính toán nhiều thì thường được viết bằng C++ và được wrap lại để sử dụng trong môi trường Python mà ít khi được viết hoàn toàn bằng Python. Đa phần các framework cho AI như Tensorflow, Pytorch, Caffe2 đều được viết bằng C++. Lợi thế lớn nhất của Python chính là cộng động người sử dụng Python rất lớn nên có nhiều người tham gia phát triển các thư viện Python vì thế các bộ thư viện nguồn mở của Python rất phong phú và gần như tìm gì cũng có sẵn và cũng vì thế có sự support kỹ thuật tốt cho những người mới học.

Cũng vì có cộng động Python rộng lớn mà đa phần các chuyên IT và các thầy dạy IT đều thiên về xu thế sẽ thay Pascal bằng Python. Tuy nhiên tôi thì lại có ý kiến khác: Dạy Python có khá nhiều bất cập đối với học sinh lớp 11:
  • Python là ngôn ngữ đa năng, tính ứng dụng khá cao, tuy nhiên điều này chỉ đúng với các em sau này định hướng theo ngành IT, Computer Science, hay Data Science. Các ngành khác rất ít có điều kiện dùng và nhất là các em sau này chỉ dùng ở mức văn phòng, soạn thảo văn bản MS Word và quản lý dữ liệu trên Excel là chủ yếu.
  • Python dễ đọc nhưng không dễ hơn nhiều so với Pascal. Pascal rất trong sáng, so với Python thì chỉ rườm ra hơn, nhưng Python lại dòi hỏi phải học nhiều thứ hơn. Đối với kiểu tổ chức dữ liệu, Pascal chủ yếu chỉ có mảng, bảng, câu trúc thôi thì Python đưa ra nhiều khái niệm của NNLT hiện đại như List, Tuble, Set, Dictionary, nhiều kiểu na ná cách sử dụng nên cũng dễ gây nhầm lẫn. Python còn có thêm các khái niệm lập trình hướng đối tượng, lập trình hàm, và cả những khái niệm hiện đại như lambda khá là trừu tượng với các em học sinh, đó là chưa kể nếu chỉ nói đến các thư viện chuẩn (Standard Libs) thì Python có cả một rừng luôn. Như vậy so với Pascal thì Python đọc cũng không dễ hơn là bao nhưng khối lượng kiến thức để làm chủ nó lại vô cùng nhiều, dễ gây hoang mang cho học sinh. Học mãi không biết đến bao giờ mới biết được hết cơ bản. Vô hình chung Bộ đang muốn giảm tải thì có khi lại chất thêm nhiều tải hơn. Tránh vỏ dưa lại gặp vỏ dửa.
  • Điểm A3: cài đặt và sử dụng có dễ dàng không? Python cài đặt cũng không đơn giản hơn TPascal, cài đặt ở chế độ Terminal, nguyên bản khi chạy cũng ở chế độ Terminal. Tuy rằng người dùng có thể lựa chọn các công cụ phát triển (IDE) như Visual Code, Visual Studio, Pycharm...Nhiều lựa chọn công cụ phát triển và cả các thư viện thì cũng tốt nhưng đôi khi lại gây rối, phân mảnh, không được thống nhất từ triêt lý đến công cụ, điều này sẽ khó cho việc biên soạn giáo trình thống nhất, và các chuyên gia để hô trợ cũng đòi hỏi phải biết nhiều công cụ cho một ngôn ngữ hơn.
  • Do Python không phải là NNLT cho Front-End nên xây dựng các app có giao diện người dùng UI/UX sẽ gặp khó khăn, hầu như không có các công cụ trực quan kéo thả. Mặc dù có gói tkinter để làm giao diện nhưng khá là thô sơ và khó sử dụng. Cao cấp hơn thì cần các framework như PyQt, WxPython, PyGtk...thì lại phải học thêm rất nhiều về các triết lý và nền tảng Qt, WxWork, Gtk.. Để có một report đẹp như các report như Excel có thể làm được thì lại cần biểu diễn dữ liệu trên Web khi đó lại cần học một loạt các công cụ: web framework, basic Python, Pandas, SQL, command line, git, và code deployment. Nói chung là nhiêu khê và cần phải học cũng khá nhiều.
  • Nếu gói gọn chương trình chỉ có input và output từ bàn phím và bắn kết quả ra màn hình như ở chế độ DOS thôi thì chẳng khác gì TPascal. Học sinh học Python sẽ chẳng thấy hứng thú gì, vì không tạo ra được các app có giao diện đẹp, cute, thân thiện và tính ứng dụng cao.
  • Về tính kế thừa (A6), Python không có liên quan gì đến các chương trình của năm trước cũng như năm học sau của các em, tương tự như vậy đối với C, C++.
Tóm lại Python sẽ phù hợp với các em học sinh sau này có định hướng học theo ngành IT cũng giống như với C, C++, và nếu để nắm bắt được cơ bản Python thì dù dễ đọc nhưng học sinh sẽ phải học nhiều khái niệm mới của NNLT hiện đại, như thế thì lại thành tăng tải chứ không hề giảm tải. Ngoài ra Python cơ bản không có hoặc gần như không có các tính năng trực quan, kéo thả, và thường phải làm việc với chế độ dòng lệnh tối tăm không khác gì Pascal.

VBA (Visual Basic for Application)

VBA được phát triển dựa trên ngôn ngữ BASIC (Beginners' All-purpose Symbolic Instruction Code), do John G. Kemeny và Thomas E. Kurtz phát triển từ năm 1964. Ngôn ngữ này ban đầu được thiết danh cho những người mới học, do đó nó cũng trong sáng và dễ hiểu, không có những ký hiệu và dấu ngoặc nhọn '{}' như của C, C++. So với Python nó cũng dễ đọc và không khó hơn bao nhiêu, Python chỉ là tối giản hơn so với BASIC. 

VBA được đưa vào bộ MS Office từ năm 1993, đến năm 1998, nó có cú pháp giống hệt và tương thích với Visual Basic 6.0 trong bộ Visual Studio 6.0 và cũng giống với người em út là VB Script. Sau năm 1998, Microsoft chuyển sang phát triển nền tảng .NET Framework, vì thế VB6 được thay da đổi thịt thành VB.NET và gia nhập gia đình họ biên dịch tương tự như C# và cũng từ đó VBA khác dần so với VB.NET.

Từ năm 1995 tôi cũng đã bắt đầu có một số nghiên cứu về VBA, nhưng đến năm 1998 mới thực sự lập trình trên ngôn ngữ này, ban đầu cũng chỉ sử dụng như là Macro để tự động hóa các thao tác trong bộ MS Office, sau đó chúng tôi phát triển bộ Vietkey Office viết bằng VBA và tích hợp vào MS Word, MS Excel, MS PowerPoint từ năm 1999 đến nay và bộ công cụ sau hơn 20 năm vẫn hoạt động với bộ MS Office 2019, bộ sản phẩm này bao gồm các chức năng: Kiểm tra chính tả tiếng Việt, Chuyển mã font tiếng Việt, Sắp xếp tiếng Việt...(Hình 2, Hình 3).

Hình 2: Giao diện Vietkey Office (VBA Addin) cài trên MS Word 2019
 
Hình 3: Giao diện Kiểm tra chính tả tiếng Việt (VBA Addin) cài trên MS Word 2019

Kể từ đó cho đến tận bây giờ tôi đã viết nhiều phần mềm để phục vụ cho bản thân như: Phần mềm quản lý tài liệu tham khảo, phần mềm quản lý File, phần mềm sửa đổi thông tin cho các file MP3, và một số phần mềm nghiệp vụ quản trị chấm điểm cho một số môn thi đấu thể thao như Dancesport, Aerobic cũng được viết hoàn toàn bằng VBA trong Excel (cập nhật lần cuối năm 2019), hình 4.

Hình 4: Giao diện VKSkating - chấm điểm cho dancesport được viết bằng VBA trên MS Excel 2019.

Sau đây là một số lý do tại sao tôi khuyến cáo nên dạy các em học sinh lớp 11 ngôn ngữ VBA thay vì Pascal. Tôi đã xem tất cả các sách giáo khoa môn tin học tất cả các lớp 6, 7, 8, 9, 10, 11, 12, thì thấy rằng xuyên suốt chương trình đào tạo tin học ở bậc phổ thông từ cơ sở đến trung học, ngoài việc cung cấp các khái niệm cơ bản như máy tính, hệ điều hành, mạng, an toàn thông tin thì từ lớp 6, lớp 7 các em đã được làm quen với bộ soạn thảo văn phòng: MS Word, MS Excel, đến năm lớp 12 thì được giới thiệu tiếp MS Access cũng là một ứng dụng trong bộ MS Office. Về ngôn ngữ lập trình thì năm 11 các em được học sâu về ngôn ngữ Pascal. Thực ra xem kỹ SGK tin học lớp 11 do thầy Hồ sỹ Đàm chủ biên, tái bản lần thứ 4 năm 2014, thì nội dung cũng không phải quá nặng như ý kiến của một số chuyên gia, vấn đề lớn nhất là ngôn ngữ này đã lạc hậu, công cụ phát triển đã chết, không còn được hỗ trợ và phát triển, nên tính ứng dụng, tính kế thừa đều kém. Nếu chỉ để minh họa tư duy thuật toán thì quá lãng phí thời gian và công sức để các em phải lập trình trên công cụ đã chết này. Xây dựng kỹ năng lập trình ngôn ngữ này, nhưng từ đó về sau không bao giờ còn được sử dụng nữa thì quả thực lãng phí.

VBA so với các NNLT đã phân tích ở trên thì thỏa mãn đầy đủ các yêu cầu đã liệt kê ở trên từ A1-A6, và hơn nữa nó có những ưu điểm rất đáng giá và rất đáng lưu tâm sau:
  • VBA là ngôn ngữ dễ đọc, dễ học, số lượng lệnh và thư viện của nó không nhiều và đồ sộ như C, hay Python. Không có quá nhiều các khái niệm của NNLT hiện đại như list, tuble, set, lamda, hướng đối tượng đầy đủ (VBA cũng có hướng đối tượng nhưng là phiên bản tối giản). 
  • Cài đặt và sử dụng VBA khá đơn giản và dễ dàng. VBA được tích hợp sẵn trong các ứng dụng của bộ MS Office (Word, Excel, Access, Outlook, Visio, Publisher...), vì thế không cần phài cài đặt thêm bất kỳ phần mềm nào, chỉ cần nhấn tổ hợp phím ALT+F11 là công cụ soạn thảo và biên dịch VBA được mở ra và có thể bắt tay vào lập trình được luôn. Mọi công việc lập trình có thể chỉ cần xoay quanh công cụ VBA này, tra cứu các thư viện, các object từ menu, không phải thoát ra ngoài cài thêm hay vào Internet để download thêm thành phần nào.
  • Lập trình VBA rất nhanh và hiệu quả, có thể bắt đầu bằng cách ghi lại các thao tác của người dùng muốn thực hiện (Record Macro) và ứng dụng trong bộ Office sẽ sinh ra cho chúng ta một đoạn mã VBA rồi, chỉ cần tùy biến một chút (như thêm vòng lặp) là đã có thể tạo ra công cụ tự động hóa các công việc văn phòng nhằm nâng cao năng suất lao động. Cũng vì điều này mà tính ứng dụng của VBA rất cao.
  • Có thể sử dụng công cụ của VBA dạng kéo thả để tạo ra giao diện rất trực quan và nhanh chóng (Hình 4), trải nghiệm như kiểu kéo thả của Scratch mà các em đã từng học, do đó dễ dàng tạo ra được các ứng dụng giao diện thân thiện và gây được hứng khởi cho các em (khác xa với giao diện Terminal hay DOS Prompt tối đen của Pascal hay Python).
  • Có tính ứng dụng (A5) và kế thừa A6) cao, VBA có trong các công cụ văn phòng của Microsoft như Word, Excel, Access, Outlook, Visio, Publisher, những ứng dụng văn phòng này thì không chỉ các em học CNTT mà gần như các em học các ngành khác đều cần đến. Thực tế VBA được sử dụng nhiều bởi các chuyên viên không phải ngành IT như Finance, HR, Marketing, Project Management professionals, kể cả người học khối C, khối D thì vẫn cần phải có kỹ năng văn phòng và do đó cũng cần có công cụ để tối ưu và nâng cao năng suất các công việc văn phòng. Bên cạnh đó thông qua VBA có thể lập trình để gắn kết và điều khiển các ứng dụng một cách liên hoàn tạo thành một work flow hoàn hảo, ví dụ dữ liệu được nhập vào từ Access qua Excel rồi xuất qua Word và gửi email qua Outlook, một quy trình như vậy có thể được tự động hóa bằng VBA mà không cần phải thao tác của người dùng, VBA như một script để điều khiển cả hệ sinh thái của các ứng dụng văn phòng. Và không chỉ dừng ở công việc văn phòng VBA còn được tích hợp với các ứng dụng của nhiều hãng ông lớn ngành phần mềm khác như đối với các phần mềm thiết kế 2D, 3D: AutoCAD, CorelDraw, LibreOffice, SolidWorks. VBA cũng được tích hợp để lập trình trong  các dứng dụng trong hệ thông tin địa lý GIS rất nổi tiếng và thịnh hành như MicroStation, ArcGIS...
  • VBA đã tồn tại 27 năm và vẫn còn tiếp tục tồn tại đến chừng nào bộ MS Office còn tồn tại, phiên bản mới nhất là VBA 7.1 mới được cập nhật năm 2019. MS đã có nhiều lần định ngừng phát triển VBA và đã có ý định phát triển Javascript để thay thế nhằm tăng khả năng tương thích với các trình duyệt và để tích hợp sâu các ứng dụng MS Office lên Cloud nhưng tiến trình Javascript diễn ra rất chậm và dù có bản Javascript thì MS cũng không thể bỏ được VBA vì suốt 27 năm qua hàng trăm ngàn doanh nghiệp đã xây dựng hệ sinh thái và work flow của họ dựa trên VBA.
  • VBA là một công cụ tuyệt vời cho trải nghiệm lập trình, ngoài khả năng sinh mã nguồn nhanh qua cơ chế ghi lại thao tác user thì, lập trình viên có thể thao tác với dữ liệu text (trong Word), bảng biểu, dữ liệu (trong Excel) vô cùng trực quan, và kế thừa các công cụ phân tích dữ liệu, tạo các report chuyên nghiệp (còn dễ dàng và thân thiện hơn cả Crystal Report). Trong Excel chúng ta có hơn 400 hàm Built-In có thể thao tác trực tiêp với dữ liệu mà không cần phải sử dụng các lệnh lập trình. Một trong những tính năng cũng rất mạnh mẽ mà ít có ngôn ngữ nào hỗ trợ đó là khả năng debug in desgin mode. Mặc dù C# cũng được quảng cáo có tính năng này nhưng thực tế vẫn phải compile toàn bộ mã nguồn mới debug được hoặc chỉ áp dụng tính năng này 1 cách rất hạn chế. Với cửa sổ immediate window thần thánh chúng ta có thể gớ rối hay chạy từng lệnh (debug) với từng function hay sub một cách dễ dành và vô cùng thuận tiện. Ví dụ minh họa tính năng này: bình thường muốn debug chúng ta phải biên dịch và chạy chương trình ở chế độ run-time, giống như muốn uốn nắn chỉnh sửa 1 tác phẩm kim hoàn, chúng ta phải nung nóng để kim loại mềm ra thì mới uốn nắn được, thì riêng với VBA, chúng ta có thể vẫn uốn nắn được kim loại ở nhiệt độ bình thường không phải nung nóng nhiêu khê nữa. Cộng với khả năng lập trình dạng kéo-thả và theo sự kiện và tương tác sống với dữ liệu trên Excel, mà nhiều người thường chọn VBA trong Excel để lập trình Prototype. Bản thân tôi cũng thường dùng Excel VBA để xây dựng và thử nghiệm các thuật toán, ví dụ như chương trình tính tọa độ vĩ độ mặt trời, phần tử bắn cho pháo binh, phần tử phóng cho tên lửa, hay hệ thống chấm điểm, tôi vẫn dùng VBA để xây dựng thuật toán và chạy thử với dữ liệu Uni test là các dữ liệu trong Excel, sau khi thuật toán chạy đúng thì mới chuyển qua Java để viết app cho Android, hay đơn giản có thể chuyển sang VB.NET vì có cú pháp tưởng tự của Visual Basic để phát triển các app có độ chuyên nghiệp cao hơn.
Một tấm huy chương bao giờ cũng có 2 mặt, và mặt trái của VBA là:
  • Dữ liệu không quá 1.000.000 bản ghi.
  • Khó làm việc nhóm, dùlLàm việc cá nhân thì rất tốt.
  • Xử lý đa nhiệm đa luồng kém.
Tuy nhiên với các ứng dụng không quá lớn và đặc biệt đối với lứa tuổi học sinh thì các nhược điểm này hoàn toàn không đáng kể. Tôi đã từng dạy một lớp VBA cho các bạn văn phòng của một nhà hàng, gồm kế toán, thủ kho, nhân sự, chỉ sau 1 buổi họ đã biết lập trình tạo ra các hàm mới, và sau 4 buổi họ đã hoàn toàn tự động hóa được khâu chấm công, tính lương, bóc bill để làm chứng từ thuế, mà trước đây mỗi lần khai báo thuế cả đội văn phòng phải thức thâu đêm nhiều ngày để làm bằng tay, và giờ đây thời gian rút gọn xuống chỉ còn 1 vài giờ.

Kết luận

Không nên dạy Pascal cho học sinh lớp 11, vì NNLT này quá lạc hậu và tính ứng dụng kém, nhưng cũng không nên chọn C, C++ hay Python vì đó là những NNLT dành riêng cho các lập trình viên chuyên nghiệp ngành CNTT, do đó ít có tính ứng dụng và kế thừa cho các em tương lại sẽ làm việc ở nghành khác. Thay vào đó nên chọn VBA vì nó dễ đọc, dễ học, không phải học quá nhiều nhưng lại có thể tạo ra được các ứng dụng rất hữu dụng ngay cho bản thân các em khi đã học Word, Excel từ năm trước và đặc biệt đến năm lớp 12 học Access thì VBA sẽ hõ trợ rất đắc lực (Access mà không dùng VBA thì thà dùng luôn Excel cho rồi). Và ngay cả sau này ra trường dẫu các em không theo ngành CNTT thì các kỹ năng văn phòng, tối ưu tự động hóa văn phòng vẫn luôn là hữu ích, các ngành khác như thiết kế, GIS và nhiều lĩnh vực khác đều có thể ứng dụng VBA vô cùng hiệu quả và hữu dụng.
 
Tài liệu tham khảo

[1] Công văn số 3280/BGDĐT-GDTrH ngày 27 tháng 8 năm 2020 của Bộ trưởng Bộ GDĐT, "Hướng dẫn điều chỉnh nội dung dạy học cấp trung học cơ sở môn tin học", link.

[2] https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/spectralnorm.html

[3] Python loop slower than Excel VBA?

Share:

7 nhận xét:

  1. Về việc này có 2 khía cạnh cần được xem xét:
    1. Chương trình Tin học sắp tới được chia thành 3 mảng kiến thức lớn là ICT,LD (học vấn số học phổ thông) và CS. Việc sử dụng VBA nằm ở nhánh ICT chứ không thuộc CS.
    2. Dưới góc độ giảng dạy, kiến thức về lập trình cho HS phổ thông có thể đc trình bày bằng C++ một cách trong sáng như Pascal mà không gặp khó khăn gì. Có lẽ tác giả quá nặng nề khi cho rằng đã dạy cho 1 đứa trẻ thì phải dạy hết tất cả các vấn đề kĩ thuật rối rắm của ngôn ngữ.

    ReplyDelete
    Replies
    1. Nói như anh thì ngôn ngữ nào cũng dạy trong sáng được hết, kể cả Assembly, quan trọng là nó tính ứng dụng cho các em về sau này không, có mang lại hứng khởi thích thú cho các em không.

      Delete
  2. Với thời lượng ít, có 1.5 tiết/1 tuần thì dạy ngôn ngữ nào đơn giản, dễ học là tốt nhất, cốt yếu dạy để các em có tư duy lập trình. Tôi đồng ý là pascal đã quá lạc hậu, mất công học nhưng sau bỏ thì phí công sức quá.còn c, c++, c# thì phải bỏ nhiều công sức, thời gian hơn mới học được. Và lại với cá nhân tôi thấy cuốn sgk tin 11 hiện giờ viết quá dở, thua xa cuốn của tác giả Quách Tuấn Ngọc viết cho sinh viên. Còn chương trình tin phổ thông sắp tới, tôi nghĩ nên theo 2 hướng thôi, 1 là hướng ứng dụng văn phòng cho các em nhóm xã hội/kinh tế, 2 là hướng lập trình cho các em học tự nhiên, bỏ cái csdl đi. Lớp 10 học kiến thức chung về máy tính và văn phòng cơ bản, lớp 11 và 12 thì đi theo 2 định hướng riêng kia. Mục đích chính của môn tin làm sao để hs học xong làm ra được sản phẩm nhất định, đó là lợi thế rất lớn của môn học này, nếu chương trình tin học phổ thông không giúp hs làm được điều này thì lại coi như thất bại như phiên bản hiện hành. Còn nếu thích thì tôi thích dạy cho hs phổ thông ngôn ngữ c# hoặc VBA như đề xuất của tác giả, các câu lệnh của 2 nn này rất dễ hiểu và có tính ứng dụng cao.

    ReplyDelete
    Replies
    1. Mình cũng đồng tình với quan điểm của bạn, cái hay nhất của môn Tin là tính ứng dụng. Môn tin chia theo 2 hướng để phục vụ 2 nhóm đối tượng học sinh như bạn nói là rất hợp lý, chỉ sợ các nhà xây dựng chương trình lại nghĩ kiểu "chắp vá" như chương trình cũ, mỗi thứ biết một tí nhưng không thứ nào ra hồn cả, lập trình thì cũng chỉ biết nửa vời, CSDL thì cũng lờ mờ. Chất lượng nguồn nhân lực CNTT của Việt Nam còn thấp, đã dạy cái gì thì cố gắng dạy ra hồn luôn 1 thứ, các cháu theo hướng ứng dụng thì dạy sử dụng thành thạo một số ứng dụng cơ bản như: Word, Excel, PowerPoint, vẽ đồ họa, cắt ghép video. Còn các cháu theo hướng lập trình thì cho học tử tế về 1 ngôn ngữ lập trình hiện đại nào đó, dạy xuyên suốt từ lớp 11 đến hết lớp 12, đó sẽ là nền tảng tốt để các cháu lên đại học phát huy thêm. Nhiều công ty IT hiện giờ chỉ cần tuyển SV mới ra trường biết lập trình thành thạo 1 ngôn ngữ mà cũng khó tìm. Lập trình mà còn chưa thạo thì đừng nói đến chuyện trở thành chuyên gia CSDL, vậy nên tôi nghĩ những người xây dựng chương trình tin học phổ thông cần nghĩ thực tế hơn. Cái nội dung CSDL là cái mà tôi thấy thừa thãi và gây lãng phí thời gian của học sinh nhất trong chương trình tin học phổ thông hiện hành.

      Delete
  3. 06 - Môn Tin Học Lớp 11 Nên Dạy Các Em Ngôn Ngữ Lập Trình Nào? ~ Tuanvietkey >>>>> Download Now

    >>>>> Download Full

    06 - Môn Tin Học Lớp 11 Nên Dạy Các Em Ngôn Ngữ Lập Trình Nào? ~ Tuanvietkey >>>>> Download LINK

    >>>>> Download Now

    06 - Môn Tin Học Lớp 11 Nên Dạy Các Em Ngôn Ngữ Lập Trình Nào? ~ Tuanvietkey >>>>> Download Full

    >>>>> Download LINK

    ReplyDelete
  4. 06 - Môn Tin Học Lớp 11 Nên Dạy Các Em Ngôn Ngữ Lập Trình Nào? ~ Tuanvietkey >>>>> Download Now

    >>>>> Download Full

    06 - Môn Tin Học Lớp 11 Nên Dạy Các Em Ngôn Ngữ Lập Trình Nào? ~ Tuanvietkey >>>>> Download LINK

    >>>>> Download Now

    06 - Môn Tin Học Lớp 11 Nên Dạy Các Em Ngôn Ngữ Lập Trình Nào? ~ Tuanvietkey >>>>> Download Full

    >>>>> Download LINK NT

    ReplyDelete

Recent Posts

Definition List