Bạn NÊN học Javascript thuần trước khi học các framework JS

Bài viết được dịch từ bài gốc: Yes, You Should Learn Vanilla JavaScript Before Fancy JS Frameworks của tác giả Francois-Xavier P. Darveau.

Đó là vào năm 2013. Nhóm phát triển nhỏ chúng tôi đang chuyển giao một dự án ấn tượng ở phía client. Tôi ở chỗ chiếc bàn đứng của mình, đọc lướt qua các email lúc sáng sớm. Đồng nghiệp của tôi đẩy toang cánh cửa văn phòng:

"Có gì đó với ứng dụng Angular của chúng ta, anh bạn ạ. Tôi thấy lỗi digest đang được xử lý xổ ra khắp nơi, và tôi không thể xác định được điều gì đang diễn ra cả.", anh ta nói, lo lắng thấy rõ.

Nhưng tôi không lo lắng hay căng thẳng gì cả. Tôi biết chính xác nơi bắt đầu để xem xét, vì tôi biết code Javascript của mình.

Tôi biết tất cả những điều này vì một con bot nhỏ. Đúng, ban đọc đúng rồi đấy: một con bot.


Nhìn lại năm 2011.

Tôi vẫn còn là một sinh viên kỹ thuật phần mềm đầy mộng mơ, không bị ảnh hưởng bởi các nghiệp vụ trong thế giới thực. Tôi say mê với việc phát triển phía backend, và không ham thích học Javascript thuần, hay bất cứ thứ gì liên quan.

Nhưng bạn tôi và tôi phải xây dựng một con bot hướng tác vụ, thời gian thực cho một trong các lớp học của chúng tôi.

Chúng tôi đặt tên con bot là Optimus Prime, và thậm chí còn bán nó cho Michael Bay vì các bộ phim Transformers của ông ấy.

Chúng tôi nhanh chóng vấp vào một thứ mới mẻ tuyệt vời gọi là Node.js (đọc qua tài liệu của nó). Không có phụ thuộc, dễ dàng sinh các tiến trình con, bất đồng bộ và hướng sự kiện ... và nhiều người trên mạng nói rằng nó rất tuyệt vời. Chúng tôi không hề có khái niệm gì về Javascript hay V8, nhưng vẫn thấy nó tốt cho dự án của mình.

Nhiều người bạn bảo tôi chỉ cần tìm một thư viện thích hợp với trường hợp của mình rồi copy/paste để việc kết nối socket hoàn tất. Và tôi đã có thể làm điều đó.

Nhưng tôi đã không làm thế. Dù lúc đó tôi không biết, nhưng đó là một quyết định đúng đắn nhất của tôi trong sự nghiệp của mình.

Tôi bắt đầu hăng hái đọc. Về lập trình bất đồng bộ, lịch sử của Javascript, ưu và nhược điểm của nó, mọi thứ. Vì tôi muốn làm chủ các khái niệm cơ bản của ngôn ngữ đang hỗ trợ cho dự án của mình. Và nó tốn khá nhiều thời gian, cà phê, bia và code thử để làm điều đó.

Giữa việc chế ngự sự mất kiên nhẫn của các đồng đội và tạo đống code cơ bản không-được-sạch-đẹp-cho-lắm cho con bot, tôi đã học được rất nhiều.


Vậy vấn đề ở đây là gì? Đó là việc tôi dành đủ thời gian để hiểu các khái niệm cốt lõi của Javascript trước khi sự dụng các tiện ích cung cấp bởi các framework và thư viện Javascript. Và tại sao điều đó lại quan trọng? Chà, đây là điều mà bài viết này muốn nói: đừng giả vờ.

Nguồn: @iamdevloper

Đầu tiên, ý tôi là gì khi nói về "các framework" Javascript ở đây?

Khi tôi dùng framework, tôi xếp tất cả Angular, React, Backbone, Ember, Knockout, Vue, Ext, jQuery, Meteor, Express, Koa, Total, Socket.io, v..v.., cùng một loại, Phải, tôi biết một số cái khá là khác biệt. Phải, tôi biết một số cái "không thực sự là framework, mà giống như một thư viện hơn và nhân tiện, bạn đã từng thấy thread này trên HN (có thể là Hacker News - ND) chưa"?

Nhưng làm ơn, vì ý nghĩa của bài viết này, hay coi chúng tương đương nhau bởi chức năng chính của chúng.

Và dành cho những người hỏi "Javascript thuần (vanilla Javascript) là gì?"

Cho phép tôi chôm một câu trả lời từ koenpeters trên Stack Overflow:

"VanillaJS là một cái tên để chỉ việc sử dụng Javascript thông thường mà không dùng bất cứ thư viện phụ trợ nào như jQuery. Mọi người dùng tên này như một lời đùa cợt để nhắc các lập trình viên khác rằng ngày nay nhiều thứ có thể làm được mà không cần đến các thư viện Javascript phụ trợ."

Hay, như trong trường hợp của chúng ta, là không dùng các framework phụ trợ.

Lý do vì sao tôi nghĩ các framework Javascript rất tuyệt vời

"Các framework JS giúp bạn gói gọn các đoạn code khó và phúc tạp."

"Các framework JS giúp bạn chuyển code nhanh hơn và tăng tốc độ phát triển."

"Các framework JS buộc bạn tập trung vào giá trị của ứng dụng thay vì cách triển khai nó."

Những lý do trên nhanh chóng gợi lên khi chúng ta thảo luận về sự phổ biến của các framework JS. Nhưng với tôi, chúng là các lý do để tiếp thị thì đúng hơn. Nhưng tôi không hề khinh thường các framework. Thực tế tôi đã sử dụng một vài framework trong sự nghiệp của mình (xem danh sách ở phần dưới).

Và tôi tin rằng giá trị tuyệt vời nhất có thể tìm thấy ở các framework JS là sự cộng tác. Giao diện thống nhất và các phương thức của chúng cho phép các lập trình viên từ, ví dụ như, Canada, Mỹ và Brazil hiểu và làm việc cùng nhau.

Nếu bạn xây dựng một ứng dụng với [viết tên framework ưa thích của bạn vào đây], đến lúc nào đó bạn sẽ có thể tìm một lập trình viên kinh nghiệm để dấn sâu vào codebase của dự án với một sự tự tin. Anh/cô ấy sẽ có thể bắt đầu triển khai các tính năng mà không cần bạn giải thích tất cả các phần kiến trúc trong dự án của bạn.

Một lý do quan trọng khác cho việc sử dụng framework là thực hành. Chúng khiến bạn thực hành, lặp đi lặp lại. Và điều đó tốt, thật đấy! Thực hành luôn dẫn đến nắm vững, dù bạn cố gắng làm thứ gì đi nữa.

Lý do vì sao tôi tin các framework JS không tuyệt vời ĐẾN VẬY

Những người triển khai các framework đều tài năng - ít nhất là hầu hết trong số họ. Họ thực hiện những công việc to lớn để biến những thứ phúc tạp trở thành những thứ đơn giản (ví dụ cung cấp router vô cùng đơn giản phía client trên IE6). Nhưng tất cả những mức gói gọn này có thể nhanh chóng trở nên không tốt.

Trong mọi quá trình phát triển ứng dụng, sẽ có một ngày mà có thứ gì đó không hoạt động như mong muốn, và bạn không thực sự biết tại sao. Đó là lúc bạn phải bắt đầu đào bới. Và khi bạn bắt đầu tìm kiếm qua những đoạn code JS tổng quát, phức tạp, ít tài liệu, bạn phải có một sự hiểu biết sâu về Javascript để hiểu được. Nếu không, tôi đảm bảo là bạn sẽ mất toàn bộ thời gian quý báu của mình mà bạn giữ được khi sử dụng framework. Bạn có thể phải mua một máy pha espresso mới để hoàn thành dealine của mình.

Như tôi đã đọc ở đâu đó: "Bạn không phải là một nhà phát triển Angular hay Express. Bạn là một lập trình viên."

Chắc chắn các framework hữu ích cho các nhóm nhỏ làm việc trên một ứng dụng duy nhất. Phải, chúng sẽ tiết kiệm chút thời gian cho bạn (trừ khi bạn là một kẻ nghiện tái cấu trúc code). Nhưng nếu bạn làm việc với nhiều nhóm trên nhiều hơn một ứng dụng? Bạn có thực sự nghĩ tất cả các trưởng nhóm sẽ đồng ý sử dụng cùng một framework cho toàn bộ các ứng dụng? Và nếu có một framework hay ho mới xuất hiện trong năm 2017?

Vấn đề là: khi bạn chọn một framework, bạn tác động đến từng quyết định kỹ thuật sắp tới. Thêm vào đó, bạn dẫn nhóm của mình đến một công nghệ có thể sớm bị phản đối. Điều đó làm tâm trí tôi rối bời.

Làm thế nào mà học Javascript thuần trước khi học các framework JS có thể - và sẽ - giúp bạn.

Javascript giờ đây đã trở thành ngôn ngữ lập trình của web. Hiểu các khái niệm cốt lõi của nó là vấn đề tối quan trọng nếu bạn muốn dựng lên cho mình một sự nghiệp làm web thanh nhã. Đặc biệt nếu như bạn nhắm tới phía frontend.

Trong 5 năm qua, hơn 10 framework JS mới đã ra đời. Đoán xem sẽ có bao nhiêu framework mới trong 5-10 năm tới? Nếu bạn chỉ đơn giản giả vờ biết Javascript, thứ hỗ trợ cho cuộc cách mạng của web, bạn sẽ bắt kịp như thế nào?

Cứ nghĩ về việc mà "các lập trình viên jQuery" đang làm hôm nay: cố gắng bắt kịp Angular. Ngày mai, họ sẽ phải cố gắng bắt kịp React. Và vòng lặp buồn bã cứ thế tiếp tục.

.

Biết Javascript thuần sẽ khiến bạn thực sự hiểu - hay thậm chí đóng góp cho - các framework JS, và giúp bạn chọn đúng framework khi bạn cần.

Với tôi, việc đó đem lại rất nhiều thứ tích cực:

  • Nó giúp tôi chuyển giao các tính năng rất khó trong một khoảng thời gian cực ngắn ở một ứng dụng Ember mà không cần biết gì về Ember.
  • Nó giúp tôi có một việc làm ở một công ty công nghệ lớn từ một thư viện vô cùng đơn giản mà tôi viết lúc rảnh rỗi.
  • Nó giúp tôi xác định lỗi trong triển khai của các thư viện và gợi ý những giải pháp đơn giản rất nhanh chóng.

Kết luận: Học Javascript thuần trước khi học các framework JS

Và đây là đoạn TL;DR cho mọi người:

  • Nếu bạn không biết các khái niệm cơ bản của web, bạn sẽ đi vào ngõ cụt vì sự tiến hóa của bản thân ngôn ngữ và sự xuất hiện đều đặn của các framework mới.
  • Biết JS thuần sẽ khiến bạn trở thành một kỹ sư chính có thể giải quyết các vấn đề phức tạp (biết được lý do trước khi tìm kiếm một cách điên cuồng).
  • Nó sẽ giúp bạn linh hoạt và năng suất, trên cả frontend và backend.
  • Nó sẽ cho bạn một công cụ để đổi mới, không chỉ để thực thi.
  • Nó sẽ hướng dẫn bạn biết khi nào nên dùng framework, khi nào không.
  • Nó cho bạn hiểu biết chung về cách hoạt động của trình duyệt và máy tính.

Sử dụng một framework JS chắc chắn sẽ giúp bạn đi nhanh ở một chỗ nào đó. Nhưng nó sẽ không đưa bạn đi xa nếu bạn không hiểu các khái niệm cốt lõi đằng sau nó. Cũng như việc học cách chơi Wonderwall trên ghi ta không dạy cho bạn cách soạn nhạc, nhưng nó sẽ giúp bạn có lý do để thực hành.

Và tôi cực kỳ tin rằng nguyên tắc "học cơ bản/gốc rễ trước tiên" này áp dụng cho rất nhiều thứ trong cuộc sống. Từ việc học một ngôn ngữ lập trình mới đến việc học một môn thể thao mới. Việc đó yêu cầu thực hành rất nhiều, nhưng một khi bạn làm chủ nó, việc còn lại duy nhất là sáng tạo với nó. Và đó là nơi mà niềm vui thực sự bắt đầu.

Một vài lời với việc bắt đầu với JS thuần

Tôi hy vọng đã thuyết phục bạn làm bẩn đôi tay mình với Javascript thuần. Vậy nếu bạn muốn bắt đầu phát triển web và chỉ làm việc đó, đây là lời khuyên ở trình độ cao của tôi:

Luôn luôn tò mò, luôn luôn đọc mã nguồn, và luôn luôn tự mình làm thử

Và một vài lời khuyên cụ thể khác:

  • Khi một thư viện hay framework JS mới đang trở thành xu hướng trên Echo JS, Hacker News hay Github, hãy đọc mã nguồn của nó.
  • Mỗi khi bạn viết một đoạn code, thử nghĩ về giải pháp sử dụng JS thuần có thể thỏa mãn yêu cầu của bạn thay vì tìm kiếm một thư viện.
  • Lên Stack Overflow và thử thách mình bằng cách tự mình trả lời một câu hỏi JS thuần.

Dĩ nhiên, bạn nên đăng ký theo dõi các kênh thông tin hữu ích như Echo JS, JS newsECMAScript Dayly.

Cuối cùng nhưng tuyệt nhiên không kém phần quan trọng, bạn cũng nên đọc về bản thân ngôn ngữ. Các sách cổ điển như Javascript: The Good Parts và sê ri You Don't Know JS có hàng đống thứ giá trị và hiểu biết sâu sắc.