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.
- 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 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++.
- 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.
- 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.
[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