Cháu Đinh Hải hỏi câu về javascript cũng hay, em post câu trả lời vào đây.
Vấn đề bắt đầu từ topic này:
⇒ Câu hỏi: "Cháu thắc mắc là theo ý chú thì tại sao js lại quá phò để làm backend tử tế?"

_____
⇒ Trả lời:
Chú nói "backend tử tế" nghĩa là làm các hệ thống enterprise software phức tạp.
Còn làm một vài hệ thống quản lý thông tin không cần scientific accuracy, không cần quá nhiều CPU-bound processing, không có quá nhiều parallel processing, không cần heavy duty security, codebase không quá lớn thì ok.
Lý do là:
- javascript language spec và implementation rất mù mờ trong tính toán số, cụ thể là number và floating point number trong javascript chỉ implement cho nó có, độ chính xác không cao cho các tính toán phức tạp.
- javascript là single-threaded language, vì thế nó phải dùng async để làm I/O và nhiều tác vụ khác, dẫn đến viết code rất khó chịu. Và nó chỉ là giả lập để tạo ra ảo tưởng responsive thôi, chứ bản thân nó không thể so với các ngôn ngữ cho phép chạy multi-thread, multi-process. Do đó đối với những hệ thống đòi hỏi parallel processing nhiều, javascript không đáp ứng được.
- Security kém, vì javascript application phụ thuộc quá nhiều vào các third party package. Hiện nay cộng đồng javascript viết các npm package có kiến thức về security rất kém, nên account của họ dễ bị hack, dễ bị inject javascript malicious code vào. Ngay cách đây một vài tuần, có vụ hơn 1000 npm package dính malware, làm cho mấy chục triệu application bị ảnh hưởng.
Tất nhiên đây không phải là lỗi của ngôn ngữ javascript. Nhưng một ngôn ngữ không chỉ là một ngôn ngữ đơn thuần, mà còn phụ thuộc vào eco-system của nó. Và eco-system của javascript rất không an toàn.
- Third party và Dependency của javascript thường có phụ thuộc rất lớn, nhiều khi tốn hàng GB và hàng đống package chỉ để làm mấy việc vớ vẩn. Đồng thời mấy cái package này được maintain rời rạc, nên nhiều khi chỉ vài ba tuần là có conflict giữa các package lung tung, làm cho các javascript project lớn rất unstable.
Trong khi đó, khi làm software tử tế thì các thư viện phải có base line tử tế, có Long Term Support để bảo đảm compability, thì mới implement, maintain và extend lâu dài được.
Còn một số thứ khác có thể khắc phục được, ví dụ như javascript cho phép lập trình viên viết code dài dòng, vô tổ chức, khó bảo trì ...etc..., nhưng đây chỉ là vấn đề kỹ năng, có thể khắc phục được.
Tuy nhiên, những điểm chú nói ở trên kia thì rất khó - thậm chí không có khả năng - khắc phục.
=====
* Trong ảnh là danh sách các npm package của một javascript application vô cùng nhỏ, chỉ dùng để hiện món ăn trên menu của một nhà hàng Hy Lạp tại một thị trấn nhỏ của Mỹ theo ngày trong tuần, quản lý món ăn, menu ...etc...
App này không hề dùng bất kỳ một frontend framework nào như React, Angular hay Vue ...etc..., mà sau khi chạy "npm install" đã có 826 package. Chưa hề có một dòng code nào của chương trình trong đấy, nhá.
* Còn đây là một số vấn đề về javascript security liên quan đến npm (chỉ là ít ví dụ trong vô số vấn đề về security mà js application mắc phải):