Trang Chủ

Cảm thấy thế nào khi học Javascript trong năm 2016

Bức tranh lập trình là một bức tranh muôn màu muôn vẻ, với sự thay đổi sôi động không bao giờ có dấu hiệu dừng. Đoạn hội thoại dí dởm dưới đây hy vọng sẽ thể thiện phần nào sự sôi nổi trong bức tranh đó, và giúp cậu nắm bắt được những “mô đen” mới nhất dạo gần đây.

Hey, tôi vừa nhận một web project mới, nhưng thật sự thì mấy năm gần đây tôi chưa đụng vào web nhiều lắm, và có vẻ như thị trường web đã có nhiều sự thay đổi rồi. Anh là một trong những web dev nổi danh nhất dạo gần đây đúng không nhỉ?

Tuyệt. Tôi cần tạo một trang web hiển thị những hoạt động mới nhất từ người dùng, nên tôi chỉ cần lấy dữ liệu từ REST endpoint và hiển thị theo dạng table lọc được, và cập nhật nếu có thay đổi trên server. Nếu tôi dùng jQuery để truy xuất và hiển thị dữ liệu thì sao nhỉ?

Ồ, vậy hả. React là cái gì vậy?

Nghe hay đấy. Tôi dùng React để hiển thị dữ liệu từ server được không?

Khoan đã, đến hai thư viện luôn hả?

JSX? JSX là cái gì vậy?

HTML giờ sao rồi?

À. Mà đúng rồi, nếu tôi thêm hai thư viện này rồi thì sẽ dùng được React đúng không?

Một thư viện nữa à? Babel là cái gì?

ES5? ES2016+? Anh đang nói về cái gì vậy. ES5 với ES2016+ là sao?

ECMAScript?

Bảy phiên bản luôn à. Thật chứ. ES5 và ES2016+ là phiên bản thứ mấy vậy?

Khoan đã, còn phiên bản thứ sáu thì sao?

Ồ. Vậy thì ES2016+ có gì hơn ES6 nhỉ?

Tôi chả hiêu anh vừa nói cái mô tê gì cả, toàn những cái tên kỳ lạ thôi. Tôi vừa tải một đống dữ liệu từ server, hổi trước tôi chỉ việc thêm jQuery từ một CDN và chỉ lấy dữ liệu với AJAX call, giờ tôi làm vậy được không?

Được rồi. Vậy thay vào đó, tôi sẽ tải ba thư viện để truy xuất dữ liệu và hiển thị HTML table.

Tôi hiểu rồi. module manager là gì thế?

Àaaaa. Và AMD và CommonJS là…?

OK, nghe hợp lý đấy. Browserify là gì?

Npm registry?

Như CDN vậy hả?

Ồ, vậy là giống Bower rồi!

À, vậy… tôi phải download thư viện npm từ npm đúng không?

Ồ, giống Angular!

Thôi mình quay lại React đi, tôi cũng học nhiều quá rồi. Vậy, nếu tôi cần dùng React, tôi phải truy xuất từ npm này vè sau đó cùng cái Browerify đúng không?

Gói một đống dependencies lại với nhau, sao phức tạo quá vậy?

Grunt? Gulp? Broccoli? Mimosa? Anh đang nói cái giống gì vậy?

Makefiles? Tôi nhớ cái này dùng chủ yếu trong mấy project C với C++ mà?

*Thở dài*. Anh có nhắc tới Webpack đúng không?

Oh, Ok. Tốt hơn chỗ nào ý nhỉ?

Mớ CommonJS/ES6 này làm tôi chóng mặt quá.

Lạy chúa. Thêm một ông -js nữa. Được rồi, vậy thì SystemJS là gì?

Khoan đã, nhưng tôi tưởng ta đang muốn build thư viện trong một file lớn và load file đó!

Đợi nào, vậy thì ta không thể chỉ thêm ba thư viện trên để dùng được React đúng không??

*Thở dài*. Lại thêm một mớ công đoạn nữa đúng không?

Được rồi, được rồi. Nên nếu tôi muốn thêm thư viện trực tiếp trong CDN, tôi sẽ làm thế nào đây?

Typrescript? Tôi tưởng mình đang code bằng JavaScript cơ mà!

Tôi thưởng ES2016+ đã là superset của ES6 rồi mà! TẠI SAO giờ lại cần thêm cái Typescript này nữa?

Và hiển nhiên là Typescrip làm được điều đó rồi.

*Thở dài*… Còn Flow là?

OcCaml? Lập trình hàm?

Tôi chả hiểu anh vừa nói cái quỷ gì cả.

Khoan đã, tôi từng học OOP ở trường, OOP dùng tốt lắm mà?

Cái gì đủ thứ tên tây tàu vậy? Còn Ramnda là gì nữa?

David nào cơ?

Và Erick Meijer là…?

Từ từ đã nào. Chỉ truy xuất và hiển thị dữ liệu thôi mà khó khăn vậy à. Tôi khá chắc là chỉ tạo table với dynamic data. Hãy quay lại React nào. Tồi lấy dữ liệu từ server với React thế nào đây?

Oh, chết tôi rồi. Vậy anh sẽ làm gì để truy xuất dữ liệu?

Fetch là gì nữa? Đặt tên gì kỳ quá vậy?

Ồ, vậy AJAX?

Địa ngục callback?

Oh, OK. Và thứ “promise” này giải quyết được vấn đề này đúng không?

Và Fetch làm được hết đúng không?

Lạy chúa, tôi phải biết bao nhiêu thứ thư viện đây chứ? Bao nhiêu đây?

Anh vừa mới nhắc Guy Fiery đúng không? Xử hết luôn đi. Mấy thứ viện Bluebird, Request, Axios gì đấy có thể làm được gì?

Không phải là phương thức AJAX của jQuert cũng bắt đầu trả promise rồi à?

Anh nhắc await chắc cũng ba lần rồi nhưng tôi chả biết nó là gì cả.

Chắc tôi điên mất rồi.

Ế? Trong Typescript không có sẵn hả?

Cạn lời.

Có vẻ nhưng hai người chúng ta có quan niệm về “dễ” rất khác nhau thì phải. Vậy thì, làm xong “nghi thức” trên thì tôi đã truy xuất được data và có thể hiển thị bằng React rồi đúng không?

Err, chắc không đâu. Tôi chỉ cần hiển thị dữ liệu là được rồi.

Tôi sẽ giả bộ chưa bao giờ nghe đến mấy cái tên đó. Quay lại vấn đề, Tôi chỉ cần hiển thị dữ liệu thôi.

Anh giỡn hay thiệt vậy? Bộ chọc tôi vui lắm hả? Đây là cách anh đổi xử với những người anh yêu thương ư?

Ngưng! Anh dừng lại cái đi!

Tôi cần hiển thị dữ liệu lên page, chứ phải hái trăng sao trên trời đâu. Anh chỉ cần cho tôi biết phải dùng templating engine nào thôi, còn lại tôi tự lo.

Ugh, tôi chả nhớ tên nữa, lâu lắm rồi chưa động đến.

Err, chịu, chả rõ. Có cái nào khác không?

Còn nữa không?

Chắc vậy. Có cái nào tương tự như cái cuối anh vừa nhắc không?

Err… hình như là mới hơn thì phải.

Không.

 

 

Không.

Không.

Không, anh vừa mới nhắc Jade đúng không?

*Thở dài* Chịu, chả nhớ được. Thế anh dùng cái nào?

Để tôi đoán xem. Cái đó có cần thêm ES6 nữa chứ gì.

Và dựa trên trình duyệt tôi đang dùng, phải cần thêm Babel chứ gì.

Và nếu tôi muốn tích hợp mà không phải thêm cả một thư viện lõi, tôi cần phải load dưới dạng module từ npm nữa ha.

Rồi phải cần thêm Browserify, hoặc Webpack, hay chắc là cái SystemJS gì gì đó phải không?

Nếu không dùng Webpack, thì phải quản lý bằng task runner mới lý tưởng?

Nhưng vì tôi nên dùng lập trình hàm và typed languages nên tôi trước hết cần phải pre-compile Typescript hoặc thêm thứ Flow này.

Và rồi gửi mớ đó đến Babel nếu tôi muốn dùng await.

Vậy sau đó tôi có thể dùng được Fetch, promise, và control flow và tất cả phép màu của chúng.

Hiểu rồi, chắc buổi nói chuyện đến đây là hết được rồi. Mà, anh biết gì không, tôi cũng chấm hết luôn, hết làm web, hết JavaScript gì gì đấy luôn.

Tôi quyết định chia tay backend luôn rồi. Thay đổi, rồi version mới, rồi phiên bản mới, rồi compiler với transpiler gì mà quá chừng nhiều. Cộng đồng JavaScript đều là mấy gã điên khùng nếu cứ quay mòng mòng liên tục thế này.

Sao vậy?

ITZone via Gramy

Chia sẻ bài viết ngay