Làm sao để giảm tối đa thời gian học, sự vất vả cho một lập trình viên khi chuyển đổi từ web framework này sang web framework khác, ngôn ngữ lập trình này sang ngôn ngữ lập trình khác?

Làm sao start up với nhân sự mỏng, tài chính hạn chế chọn đúng web framework theo các tiêu chí: dễ lập trình, dễ bảo trì, hỗ trợ cộng đồng tốt, tốc độ cao, mở rộng dễ dàng, tính năng phong phú?


Hiện nay các web framework ngày càng phong phú về số lượng và tính năng. Trong mỗi ngôn ngữ lập trình có tới chục web framework:

  • PHP: Laravel, Phalcon, Slim, Code Igniter, YII, Cake PHP, Zend Frameworks còn rất nhiều nữa
  • Ruby: Rails, Sinatra, Hanami
  • Python: Django, CherryPy, Tornado, Flask, TuboGear,  Bottle, Web2Py, còn rất nhiều
  • JavaScript - Node.js: Express, Meteor, Hapi.js, Sail.js, Mean.js, Ghost, Arrowjs.io
  • Java: Spring, Spark, Play, Ninja, Vaadin ...
  • Golang: Iris, Martini, GoGin, Beego, Tango, Vulcan...
  • C#: ASP.net Web Form, ASP.net MVC, Nancy,  SignalR
  • Scala: Play Framework, Finatra, Scalatra, Lift, ....
  • Elixir: Phoenix Framework,

Vấn đề đặt ra: Hiện nay một lập trình web để làm chủ web framework thường mất 6 tháng hoặc 12 tháng. Công nghệ liên tục thay đổi, khách hàng, dự án thay đổi nhanh. Nếu chỉ bảo thủ biết duy nhất một web framework khiến đội phát triển, lập trình viên mất đi nhiều cơ hội, thu nhập.

Ngôn ngữ lập trình khác nhau, cơ chế hoạt động (io blocking vs no blocking io), ... khác nhau nhiều nhưng tất cả các web framework đều hội tụ, đáp ứng các yêu cầu chung và căn bản của ứng dụng web hiện đại

  1. Hỗ trợ các http verbs: GET / POST / PUT / DELETE.
  2. Cơ chế phân luồng xử lý request URL: router
  3. Kiến trúc MVC (Model-View-Controller) hoặc MVVM (Model-View - ViewModel)
  4. Trả về dữ liệu định dạng XML, JSON. Hỗ trợ yêu cầu AJAX
  5. Hỗ trợ 1 hoặc nhiều templating engine: cơ chế điền dữ liệu vào trang web mẫu
  6. Kết nối các cơ sở dữ liệu quan hệ (MySQL, Postgresql, Oracle, MS SQLServer) và phi quan hệ (Mongodb, Redis, CouchDB, FireBase..)
  7. Server side validation : kiểm tra hợp lệ dữ liệu trên server
  8. Phần lớn hỗ trợ web socket, server sent event
  9. Hỗ trợ đa ngôn ngữ
  10. Tạo RESTful web service
  11. Hỗ trợ các kiểu xác thực khác nhau Basic Authentication, OAuthen, JWT
  12. Upload file binary
  13. Trả về file binary - streaming
  14. Đọc ghi Cookie - Session
  15. Flash message
  16. Tối ưu khả năng phục vụ nhiều kết nối nhờ bộ đệm: caching
  17. Reverse proxy: phân tải ra nhiều máy chủ web

Đề xuất giải pháp đào tạo lập trình viên web có khả năng chuyển đổi nhanh giữa các framework

Dựa vào kinh nghiệm bản thân sau khi tham gia nhiều loại dự án web: framework, ngôn ngữ, cơ chế khác nhau, tôi xin đề xuất cách xây dựng khung giáo trình thống nhất và độc lập với web framework. Giảng viên dạy chuyên framework nào sẽ bắt đầu khung giáo trình lập trình nên các ví dụ mẫu, dự án mẫu. Giảng viên cần tái sự dụng tối đa các tài nguyên chuẩn như HTML, CSS, JavaScript, kịch bản demo ứng dụng, cấu trúc cơ sở dữ liệu, dữ liệu mẫu....

Đề xuất này tương tự như TodoMVC, sử dụng các framework JavaScript khác nhau để tạo ra ứng dụng có giao diện giống hệt nhau

Khoảng 5 buổi đầu tiên, giảng viên demo, cùng học viên thực hành các ví dụ ngắn, dễ hiểu minh họa các tính năng thường xuyên dùng của một ứng dụng web.

Khoảng 4 buổi tiếp theo: xây dựng ứng dụng lưu trữ, truy vấn đọc ghi dữ liệu xuống cơ sở dữ liệu back end. Trong dự án DB: học viên sẽ làm quen cơ sở dữ liệu quan hệ MySQL hoặc Postgresql, pattern ORM ánh xạ bảng vào đối tượng dữ liệu trong ứng dụng web, cách viết câu lệnh truy vấn thô, raw query để truy xuất dữ liệu. Học viên cũng sẽ học thêm kỹ thuật: kiểm tra hợp lệ dữ liệu tại trình duyệt sử dụng javascript và trên máy chủ. Nếu còn thời gian có thể ví dụ ứng dụng tương đương sử dụng NoSQL: MongoDB.

Không nên dạy cú pháp ngôn ngữ lập trình. Việc này là thừa hoặc học viên tự tìm hiểu qua sách Ebook hoặc học trực tuyến. Giảng viên nên tập trung demo, giải thích 


Sau những buổi căn bản, học viên sẽ thực hành với những dự án kết hợp nhiều công nghệ. Có thể phân thành một khóa học mới, nâng cao, tách biệt để phục vụ đối tượng lập trình viên kinh nghiệm

Dự án REST là dự án phục vụ thiết bị di động. Kết hợp xác thực bảo mật dịch vụ REST

Dự án web socket demo ứng dụng chat, kết hợp thư viện React, Angular hay VUE

Dự án Unit Test demo Unit Test kiểm thử phương thức của controller, và quy trình CI, tích hợp liên tục

Dự án Microservice: demo ứng dụng phức tạp kết nối 2-3 dịch vụ : Auth0 dịch vụ quản lý tài khoản người dùng, message queue

Như vậy khung giáo trình không phụ thuộc vào web framework cụ thể nào. Giảng viên dạy chuyên web framework nào sẽ lập trình ví dụ, dự án theo khung giáo trình.

Lợi ích của khung giáo trình độc lập với web framework

  1. Học viên học web framework này, nhanh chóng chuyển qua làm quen web framework khác
  2. Giảm tối đa thời gian xây dựng lại khung giáo trình
  3. Giáo trình khung chuẩn hóa định hướng tốt cho cả giảng viên, học viên xác định mình đang thiếu kỹ năng nào, cần phải bổ xung.
  4. Tái sử dụng các tài nguyên ví dụ HTML, CSS, JavaScript theme, cấu trúc cơ sở dữ liệu back end, ứng dụng di động kết nối
  5. Giảng viên có thể tham khảo, porting dự án mẫu từ framework này sang framework khác dễ dàng
  6. Công bằng benchmark tốc độ web framework, đánh giá theo từng chức năng của các framework ngang ngửa nhau khi các dự án mẫu chung thiết kế, front end và cơ sở dữ liệu back end. Tham khảo phương pháp đo của Techempower

Tiếp theo sẽ làm gì?

Trên đây là ý kiến đề xuất của tôi để cải tiến giáo trình đào tạo của Techmaster giúp học viên chuyển đổi kỹ năng nhanh hơn. Nội dung giáo trình được xây dựng theo chuẩn để các giảng viên có thể trao đổi, học hỏi, thi đua với nhau. Trong thời gian tới, đội ngũ giảng viên sẽ từng bước thực hiện thí điểm đối với framework Arrowjs.io trên Node.js và Rails 5. Tiếp đến là Iris GolangJava Spring.

Anh em lập trình kinh nghiệm nhiều dự án khó, công nghệ hay nếu muốn tham gia dạy tại Techmaster liên hệ với mình nhé. cuong@techmaster.vn


Hẹn gặp lại !
Trịnh Minh Cường - 28/07/2016