07/09/2018, 14:13

JavaScript! Tại sao ngôn ngữ cần học thật sâu?

JavaScript phổ biến như thế nào? JavaScript có mặt ở khắp mọi nơi, từ máy chủ, máy tính để bàn cho tới các thiết bị di động, thậm chí các thiết bị Internet of Thing như hệ thống tưới cây, thời tiết. Hầu như JavaScript có mặt ở tất cả mọi nơi. Hãy cùng điểm qua một số nền tảng phổ biến mà ...

JavaScript phổ biến như thế nào?

JavaScript có mặt ở khắp mọi nơi, từ máy chủ, máy tính để bàn cho tới các thiết bị di động, thậm chí các thiết bị Internet of Thing như hệ thống tưới cây, thời tiết. Hầu như JavaScript có mặt ở tất cả mọi nơi. Hãy cùng điểm qua một số nền tảng phổ biến mà JavaScript đang làm mưa làm gió nhé.

JavaScript trên Browsers

Câu trả lời là hầu như trên tất cả các trình duyệt (Browser) phổ biến, ngôn ngữ JavaScript đều có mặt. Với một đoạn mã JavaScript được viết ra, các trình duyệt đều có thể hiểu và xử lý chúng.

Chính vì thế, nếu bạn biết lập trình với JavaScript thì mặc nhiên là bạn có thể xây dựng các chương trình chạy trên trình duyệt.

Và có một điểm cực kỳ quan trọng, đó là các trình duyệt (Browsers) cũng xuất hiện trên các hệ điều hành di động như iOS, Android, thậm chí là Smart Tivi, Smart Watch…rất nhiều các thiết bị cá nhân. Như vậy, khi biết JavaScript, bạn đã sẵn sàng viết phần mềm cho các thiết bị này rồi. Một điều gần như là không khả thi đối với các ngôn ngữ khác.

JavaScript trên Desktop

Vậy nếu chúng ta muốn viết phần mềm cho các hệ điều hành Window, MacOS mà không cần họ mở trình duyệt thì chúng ta có làm được không?

Câu trả lời là được. Bạn có biết các phần mềm soạn thảo như Atom, Bracket, hoặc là phần mềm chat như Slack..v..v đó đều là những phần mềm rất nổi tiếng được xây dựng bằng ngôn ngữ JavaScript.

JavaScript trên Server

JavaScript có thể chạy được trên Server? Thật khó tin, nhưng câu trả lời là có các bạn ạ. Chúng ta có thể sử dụng JavaScript để viết các chương trình chạy trên các hệ điều hành server như Window Server, CentOS, Ubuntu Server, Mac Server v..v dựa trên nền tảng Node.js.

Thậm chí một số công việc quản trị hệ thống trước đây được viết bằng Bash Script, Python thì bây giờ có thể viết bằng JavaScript để tự động hoá các tác vụ rồi. Quá tuyệt vời cho công việc quản trị hệ thống.

Ngoài ra, bằng việc sử dụng JavaScript, chúng ta có thể xây dựng các ứng dụng trên máy chủ, ví dụ CiOne.Vn sử dụng Node.js trên server mà không dùng ngôn ngữ nào khác. Với một cấu hình máy chủ khá khiêm tốn, CiOne.Vn vẫn có thể đáp ứng cả trăm học viên cùng vào học, bao gồm cả dịch vụ chat trực tuyến để giúp học viên hỏi các mentors ngay và luôn khi có thắc mắc.

Vậy bạn có tin không? JavaScript hầu như có mặt ở tất cả mọi nơi, từ trình duyệt, thiết bị di động cho đến máy chủ. Ở đâu cũng có thể gặp JavaScript cả. Và nếu bạn biết viết JavaScript, ồ, bạn có thể lập trình trên tất cả các môi trường ở trên.

“JavaScript is the most commonly used programming language on earth. Even Back-End developers are more likely to use it than any other language,” Stack Overflow said.

JavaScript có dễ viết mã?

JavaScript học rất nhanh, viết rất nhanh. Tại sao vậy? hãy xem những đặc tính ưu điểm và cũng chính là khuyết điểm của ngôn ngữ này

Dynamic Language

Ngôn ngữ JavaScript không có ràng buộc kiểu dữ liệu chặt chẽ (loosely typed), hay có thể gọi bằng một cái tên khác là dynamic language. Có nghĩa là khi khai báo một biến thì bạn không cần phải chỉ định kiểu dữ liệu cho nó. Ví dụ như đoạn code khai báo biến kiểu số trong C như sau:

float exchangeRate=22.5;

Nhưng trong JavaScript, bạn chỉ cần khái báo như thế này là đủ:

 var exchangeRate = 22.5;

Rõ là chúng ta chỉ cần khai báo biến và gán giá trị, còn khi thực thi thì trình thông dịch sẽ tự động xác định kiểu của nó dựa vào giá trị nó đang được gán.

Một ví dụ khác, đối với JavaScript bạn hoàn toàn có thể viết code như sau:

function processSomeThing(someThing){
  if(!someThing) { return; }
  if(someThing.charAt){
    console.log('someThing might be a string');
  }
  if(someThing.call){
    someThing.call(someThing);
  }
}

Có một số ưu điểm của các dynamic languages như là:

  • Dễ viết, chỉ cần khai báo và sử dụng.
  • Mã nguồn có thể gọn hơn trong một số trường hợp
  • Có thể truyền các loại dữ liệu khác nhau giữa các hàm mà không cần quan tâm đến kiểu
  • Tận dụng ưu điểm của kỹ thuật Duck Typing và Monkey Patching

Chính vì là dynamic language, nên đây cũng chính là mặt hạn chế của loại ngôn ngữ này. JavaScript rất dễ bị lỗi kiểu dữ liệu, và những lỗi như thế này rất khó bị phát hiện ra. Ví dụ so sánh giữa:

2 == "2" // Kết quả là true.

Nhưng đúng ra, một chuỗi chứa số 2 (“2”) thì sẽ khác với số 2 đúng không nào?, nhưng trong JavaScript thì kết quả của phép so sánh == thì không phân biệt kiểu.

Thế là để việc so sánh cần phải xác định kiểu nữa, JavaScript được tăng cường, cung cấp thêm phép so sánh ===, là phép so sánh bao gồm cả kiểu và giá trị. Như thế, kết quả của phép so sánh:

2 ==="2" // Kết quả là false.

Bạn thấy cũng không hẳn là đơn giản đúng không nào?

Single Thread

Bởi vì JavaScript chỉ có một thread, có nghĩa là bạn sẽ không phải lo về các cơ chế lock/unlock, concurrent, đoạn mã nguồn của bạn cứ thế thực thi từ trên xuống dưới, bình thường như cân đường hộp sữa.

Thế nhưng vấn đề cũng chính là nằm ở đây, nếu bạn dùng không đúng, chương trình của bạn phải xử lý một việc quá lâu, làm cho giao diện đơ ra. Các ngôn ngữ khác có thể viết các thread để xử lý riêng, còn JavaScript thì cơ bản là không làm được.

Dĩ nhiên là có nhiều cách để giải quyết một bài toán, Single Thread không phải là ý tưởng tồi. Cơ bản là chúng ta chọn đúng công cụ cho đúng việc.

Using the Right Tool for the Right Job

Thế giới JavaScript phát triển “quá chóng mặt”

Nếu bạn làm đủ lâu các công việc liên quan đến JavaScript, thì trong 4 năm trở lại đây, cộng đồng JavaScript phát triển rất chóng mặt, nghe thì có vẻ như rất thú vị, công nghệ cập nhật liên tục nên đỡ “vã” hơn rất nhiều.

Thế nhưng, cũng chính điều này là mặt trái, JavaScript phát triển quá nhanh, công nghệ/công cụ lỗi thời liên tục, buộc các lập trình viên phải luôn luôn cập nhật kiến thức/kỹ năng.

Bên cạnh đó, các thư viện, framework phát triển liên tục, ngủ qua một đêm là đã có bạn tạo ra bộ công cụ mới, mà cái nào cũng “Coool” hết, thành ra quá nhiều thứ để lựa chọn đôi khi cũng không hẳn là tốt.

Tại sao cần phải học JavaScript và hiểu sâu về nó?

Hẳn là nếu kiên trì đọc tới đây, thì bạn cũng biết là JavaScript dễ học, nhưng rất khó để làm “trùm” về nó. Vì điểm mạnh của một thứ đôi khi lại chính là điểm yếu của thứ đó.

Nếu bạn không học và hiểu rõ về JavaScript bạn sẽ:

  • Viết mã chạy ngon lành nhưng một ngày đẹp trời chương trình cứng đơ ra. (Có thể do long-running job)
  • Mã chạy cực tốt trên Chrome nhưng lặng thinh trên Internet Explore (cross-browsers)
  • Hôm nay gọi hàm doSomeThing(), in ra là “Thành công”, hôm sau gọi lại chính hàm này, kết quả in ra là “Thất bại”, ồ, WTF…(Có thể tên đồng nghiệp ngồi kế bên đã Monkey Patch cái gì đó, hoặc do bạn dùng duck typing blah…blah)
  • Mã nguồn chạy nhanh, hoàn hảo, xếp khen và tặng huân chương, nhưng bạn “buồn” vì không hiểu tại sao nó lại ngon như vậy. (@!@)

Tham khảo

  1. What is the supposed productivity gain of dynamic typing.
  2. Why is JavaScript so popular?
  3. Duck Typing
  4. Monkey Patch

Kỹ thuật Monkey Patching là gì nhỉ?

0