Lịch sử ra đời "kì lạ" của Javascript?

5 năm trước · 12 phút đọc

Bài viết được tham khảo từ nguồn khác (được nêu ở cuối bài).
Javascript được sinh ra như thế nào?
- Trước năm 1995, các trang web vẫn chỉ là các trang web tĩnh được tạo nên từ HTML, CSS. Ông lớn trong lĩnh vực công nghệ thời đó là Netscape đã sớm nhận ra được sự bất tiện này và bước đầu cho ra 1 “ngôn ngữ” đầu tiên chạy trên trình duyệt gọi là CGI script.
- Tuy nhiên, đây vẫn chưa phải là một cuộc cách mạng vì CGI script chỉ là 1 ngôn ngữ khá “củ chuối”. Nó đơn giản là bắt người dùng phải gửi 1 request đến server mỗi khi muốn thay đổi trang web và chờ response, điều này khá bất tiện và tốn thời gian.
- Chưa hài lòng với kết quả hiện tại, Netscape có 1 ý tưởng về 1 ngôn ngữ lập trình chuyên dụng trên browser và ngay lập tức bắn phát súng đầu tiên. Họ đã thuê 1 lập trình viên đầy tài năng là Brendan Eich để tạo ra 1 ngôn ngữ có tên là Mocha.
- Chỉ trong vòng 10 ngày ngắn ngủi, ông đã tạo ra 1 ngôn ngữ lập trình chuyên dụng trên browser có tên Livescript sau đó đổi tên thành Javascript !!!. Brendan đã chia sẻ trên 1 tờ báo rằng “Tôi không ngủ nhiều lắm”. Nhờ vào Javascript, lập trình viên bây giờ có thể thêm logic vào trong trang web của mình và biến nó từ “tĩnh” (static) sang “động” (dynamic), điều này có nghĩa là JS giúp lập trình viên tương tác trực tiếp với những thành phần quan trọng của trang web như DOM (Document Object Model) hay windown object (Global execution context của 1 trang web). Nếu như ngày xưa, với CGI script, bạn phải gửi cả 1 request chỉ để đổi màu 1 dòng chữ hay background của trang web thì bây giờ, bạn chỉ cần JS là có thể tương tác trực tiếp và manipulate các thuộc tính của 1 trang web.
Một sai lầm mà nhiều người đang mắc phải khi nghe đến cái tên JAVAscript đó là nghĩ rằng, giữa JS và Java có sự tương đồng nào đó. Thật sự thì, JS được lấy cảm hứng từ Java rất nhiều nhưng lại không liên quan gì đến Java cả. Có 1 sự thật thú vị là Netscape cũng là đơn vị sở hữu bản quyền của Java và họ đã từng có ý định đưa Java lên làm ngôn ngữ cho trình duyệt web. Tuy nhiên, điểm yếu cố hữu của Java từ cổ chí kim là Java quá nặng và cồng kềnh cho cấu trúc hạ tầng của internet thời đó và là 1 mảnh ghép không hoàn hảo nếu xét tới sự ổn định cũng như tốc độ kết nối internet của thời đại đó. Netscape đã đưa Java vào thử nghiệm và thật sự kết quả làm chúng ta bật cười - developer phải compile code java trước khi đưa lên web và chúc bạn may mắn nếu máy của người dùng chưa có Java hay yêu cầu 1 phiên bản Java khác, và trong trường hợp đó, người dùng phải tải JVM (Java virtual machine) có dụng lượng 10MB và điều này là kinh khủng trong thời kỳ mà các đĩa mềm chỉ có dung lượng vài trăm KB và tốc độ internet thời đó. Và vị cứu tính của chúng ta - Brendan đã có 1 ý tưởng rằng tại sao người dùng phải biết về compiler và web developer phải biết về public static void main (String[] args) ! Vì vậy, lấy cảm hứng từ Java, ông đã quyết định bỏ hết những yếu tố làm Java cồng kềnh và nặng nề, xây dựng JS runtime ngay trên browser tinh gọn, nhẹ và tạo ra JS. Bên cạnh đó, cái tên ban đầu của JS là LiveScript và nó không hề liên quan gì tới Java cả, tuy nhiên, Java là 1 ngôn ngữ quá hot thời đó nên đội ngũ marketting của Netscape đã quyết định “bú fame” Java và đổi tên thành JavaScript (Chắc mấy lập trình viên thời đó code Java hỗ trợ OOP mạnh mẽ, cấu trúc chặt chẽ các kiểu qua code JS chắc chửi Netscape ghê lắm 😃 ).
Tham khảo thêm video "The Weird History of JavaScript"
👉 Click vào đây: https://youtu.be/Sh6lK57Cuk4
Bản chất ngôn ngữ
Theo định nghỉa của MDN, ta có định nghĩa sau:
“JavaScript is a scripting or programming language that allows you to implement complex features on web pages — every time a web page does more than just sit there and display static information for you to look at — displaying timely content updates, interactive maps, animated 2D/3D graphics, scrolling video jukeboxes, etc. — you can bet that JavaScript is probably involved. It is the third layer of the layer cake of standard web technologies, two of which (HTML and CSS) we have covered in much more detail in other parts of the Learning Area.”
Dịch nôm na là: JS là 1 ngôn ngữ kịch bản (scripting) và là 1 ngôn ngữ giúp chúng ta hiện thực các tính năng phức tạp trên 1 trang web. Mỗi khi chúng ta muốn trang web đó không chỉ đứng yên và show các nội dụng 1 các tĩnh, mỗi khi chúng ta muốn làm các công việc như thay đổi nội dụng của trang web, tương tác với trang web và hiện thực các animation phức tạp,… - chúng ta có thể nói rằng chúng ta đang sử dụng JS. Và JS là 1 phần quan trọng trong bộ ba HTML, CSS, JS để có thể tạo ra 1 trang web. Đây là 1 định nghĩa dễ đọc và dễ hiểu, kể cả với những người chưa có kinh nghiệm về lập trình.
Tuy nhiên, 1 định nghĩa đầy đủ hơn về JS sẽ là: JavaScript (thường được viết tắt là JS) là 1 ngôn ngữ lập trình là 1 ngôn ngữ lập trình kịch bản phía client(client-side scripting programming language), được sử dụng phần lớn trong việc phát triển web cho bên client (ngày này có cả server-side, mobile, destop app), JS là 1 ngôn ngữ tuân theo đặc tả ECMAScript, high-level (bậc cao), just-in-time compiled, multi-paradigm, curly-bracket syntax (giống C và Java), dynamic typing (kiểu dữ liệu động), prototype-based object oriented và first-class function.
Các đặc tính
Đặc tả ECMAScript: (European Computer Manufacturers Association Script): ECMAScript là 1 tiêu chuẩn được phát hành bởi ECMA Internation. Nó chứa đựng đặc tả cũng như tiêu chuẩn của 1 ngôn ngữ kịch bản đa mục đích và JS là 1 ngôn ngữ nổi tiếng nhất tuân theo đặc tả này.
High-level: Để 1 chương trình có thể chạy được, nó cần tài nguyên máy tính. Đối với các ngôn ngữ bậc thấp như C hay Assembly, chúng ta phải làm 1 công việc rất khó và không mấy vui vẻ là quản lý các tài nguyên này như bộ nhớ,… và điều này làm việc lập trình “mất vui”. Bên cạnh đó với các ngôn ngữ như Assembly, phần code dễ đọc hơn cho phía máy tính còn chúng ta thì không, hơn nữa với cả C, việc ngôn ngữ này chạy như thế nào còn bị ảnh hưởng bởi việc máy tính của chúng ta thế nào, với các máy tính khác nhau có thể có những vấn đề khác nhau và điều này khá là bất tiện. JS là 1 ngôn ngữ bậc cao có nghĩa chúng ta không cần phải đụng tay đụng chân đến những vấn đề “không vui” như quản lý tài nguyên máy tính, quản lý vùng nhớ,.. bên cạnh đó, cú pháp cũng như ngữ nghĩa của những dòng code rất dễ đọc cho con người, từ đó dễ debug cũng như maintain hơn, hơn nữa, các ngôn ngữ bậc cao rất portable, có thể chạy trên rất nhiều platform. Tuy nhiên, ngôn ngữ bậc cao cũng có 1 khiếm khuyết là thường sẽ chậm hơn so với ngôn ngữ bậc thấp và lãng phí nhiều tài nguyên hơn.
Just-in-time compiled: Bây giờ chúng ta đã viết code xong rồi, vậy bây giờ chạy được chưa nhỉ ? Câu trả lời là chưa! Bởi vì những dòng code chúng ta vừa viết chỉ là human readable chứ máy tính nếu muốn execute chương trình này thì phải dịch cái “đống” đó ra computer language. Vậy để dịch ra computer language, chúng ta có những phương pháp nào ? Đầu tiên là compile, có nghĩa là khi dịch, toàn bộ chương trình của chúng ta sẽ được dịch qua 1 format khác thân thiện với máy tính hơn và lưu vào 1 file khác. Sau đó khi execute, chúng ta sẽ đưa file này vào trong 1 phần mềm để tiếp tục dịch ra mã máy (java) hay sẽ được đưa thẳng vào CPU để để chạy (C/C++). Đối với cách làm này, mặc dù chỉ cần compiled 1 lần và output đưa ra sẽ chạy rất nhanh tuy nhiên với mỗi lần sửa đổi code hay cập nhật code, chúng ta phải compiled lại 1 lần và thường thời gian compiled khá lâu, bên cạnh đó, nhiều ngôn ngữ compile thường phụ thuộc vào platform mà nó đang chạy. Cách thứ 2 chúng ta hay dùng là Interpreted, có nghĩa là khi muốn execute 1 chương trình, chúng ta sẽ đưa từng dòng của source và dịch ra mã máy, với cách này, chúng ta sẽ khắc phục được điểm yếu của việc compiled (chỉ cần sửa và không cần phải dịch lại tất cả từ đầu), tuy nhiên, tradeoff là thời gian thực thi của 1 ngôn ngữ interpreted thông thường chậm hơn rất nhiều so với 1 bản mã đã được compiled rồi và mỗi lần muốn thực thi, chúng ta phải chạy lại quá trình này từ đầu. Quay về với JS, nhiều người vẫn nghĩ rằng bây giờ JS là 1 ngôn ngữ interpreted. Sự thât thì, JS ĐÃ TỪNG là 1 ngôn ngữ interpreted, tuy nhiên trong quá trình phát triển, JS đã nâng cấp từ interpreted lên just-in-time compiled (JIT). JIT là 1 cách dịch mã code hiện đại nhất ở thời điểm hiện tại khi nó kết hợp được cả điểm mạnh của cả 2 compiled và interpreted. Đối với JIT, source vẫn được đưa từng dòng vào trong compiler tuy nhiên đối với những dòng code được chạy đi chạy lại nhiều lần nó sẽ được dịch ra 1 form thân thiện với máy tính hơn và lưu lại, điều này làm cho lần chạy sau của 1 đoạn code sẽ nhanh hơn rất nhiều so với lần chạy trước, điều này làm JS hiện nay chạy rất nhanh.
Multi-paradigm: Paradigm là cách mà bạn viết code và tổ chức code của mình. Hiện nay có 2 paradigm phổ biến nhất là OOP và functional thì JS đều hỗ trợ 2 paradign rất tốt. Curly-bracket syntax: Giống như C/C++ hay Java, để nhóm 1 groups các declations và statements thành 1 block, trong JS chúng ta dùng Curly-bracket - {}.
Dynamic typing: Trong các ngôn ngữ như C/C++ hay Java, variable nắm giữ type, nên khi khai báo biến, chúng ta phải gán chặt cho variable đó 1 type cụ thể, ví dụ biến a kiểu number thì luôn luôn phải là number, chúng ta không thể đổi a thành string hay 1 kiểu gi khác. Nhưng đối với JS thì ngược lại, variable không nắm giữ type của value, chỉ nằm giữ reference đi đến value đó, còn type là do value nắm giữ nên chúng ta có thể gán cho variable mọi kiểu chúng ta muốn. Ví dụ như biến a ban đầu được khai báo kiểu number, sau này chúng ta có thể đổi qua string, array, hay object nếu muốn.
Prototype-based object oriented: OOP là 1 chủ đề rất lớn và rất rộng, chúng ta cần hiểu OOP trước khi đi vào Prototype nên phần này mình xin để dành cho 1 bài khác nhé 😉 . First-class function: First-class function là 1 feature của JS, feature này đơn giản là JS đối xử với function cũng là 1 value giống như những number value hay string value khác. Đều này cho chúng ta 1 số những tính năng vượt trội và tạo nên thương hiệu của JS như call, apply, call, closure hay function expression, arrow function.
Dẫn nguồn
-
Bài viết được đăng bởi Bảo Kha Trần trên nhóm "Cộng đồng Front-end(HTML/CSS/JS) Việt Nam".
-
Link bài viết gốc: https://www.facebook.com/groups/1065116420221723/posts/4552313478168649/
