Có lẽ đa số chúng ta đều đồng ý, là một ngôn ngữ lập trình, JavaScript vẫn còn nhiều thiếu sót. Và mỗi người đều có ý kiến riêng về những thiếu sót này.
Christoffer Petterson gần đây có viết “JavaScript còn một đoạn đường dài phải đi” – bài viết nói về các thiếu sót của JavaScript standard run-time, và sự hình thành văn hóa micro-packages và polyfills.
Trong phần này, tôi muốn phản biện lại ý kiến đó:
Thiếu sót của ngôn ngữ và run-time JavaScript không phải là lý do cơ bản dẫn đến micro-packages or polyfills.
Các thiếu sót của thư viện run-time chuẩn là lý do rõ ràng cho sự hình thành micro-packege. Tuy nhiên, tôi phải phản đối rằng quan đểm này chỉ che đi một vấn đề sâu xa hơn mà thôi.
Mỗi lập trình viên có bối cảnh riêng, kinh nghiệm riêng, nhu cầu riêng, tính tình riêng, giá trị riêng, và các mối quan tâm và động lực văn hóa khác nhau – Nhứng ý kến cá nhân (không bị yếu tố công nghệ chi phối) góp phần tạo nên những quan niệm khác nhau về thiết sót của một ngôn ngữ.
Đối với tôi, thiếu sót của ngôn ngữ này nằm ở Typrescript, nhưng có vẻ như không phải ai cũng đồng tình. Với anh này, đó là coffeeScript, với nàng kia, đó lại là Dart, hay Scala, Go, Rust,…
Ý kiến của tôi là thế này: vấn đề cơ bản chả phải là thiếu sót của thư viện run-time chuẩn, cũng chả phải thiếu sót kỹ thuật của bản thân ngôn ngữ.
Vấn đề thực sự chính là rào cản của định kiến về đa dạng văn hóa.
Một chìa không thể mở được tất cả các khóa
Mọi người vẫn hay ảo tưởng rằng JavaScript có thể trở thành một ngôn ngữ lý tưởng cho mọi người, mọi trường hợp.
Một số sáng kiến như ES6, có vẻ như đang cải thiện tình hình, nhưng thực tế lại đang đi sai hướng.
Một lần nữa, nên nhớ, đây chỉ là ý kiến cá nhân.
Ít là nhiều
Hiện nay, JavaScript đã nổi tiếng đến mức nó có thể ảnh hưởng gần như tất cả mọi khía cạnh của nền công nghiệp phần mềm — một nền công nghiệp phần mềm nổi danh không bao giờ nhất trí đồng tình về… bất cứ vấn đề gì.
Vấn đề, theo tôi thấy, không phải bắt nguồn từ chuyên môn, mà từ… văn hóa.
Thứ ta thật sự cần không phải là cứ lặp đi lặp lại ngôn ngữ hay run-time, mà là một sự thoát ly khỏi suy nghĩ áp đặt về một ngôn ngữ và run-time toàn cầu.
Nói cách khác, ta phải chuẩn hóa ở mức thấp hơn, loại bỏ các ý kiến cá nhân nhạy cảm về chi tiết ngôn ngữ và tính năng run-time.
Ta phải chuẩn hóa từng phần chứ không phải toàn bộ văn hóa.
Theo ý kiến của tôi, điều này mang hai ý nghĩa:
- Chuẩn hóa thành một ngôn ngữ phụ dựa theo JS (như asm) — tránh rắc rối với các thế hệ mới của ngôn ngữ JavaScript, phần nào cạnh tranh được với super-set (ngôn ngữ cha) và transpiler (ngôn ngữ chuyển đổi); hoặc
- Thay đổi quan điểm, đồng ý chấp nhận JavaScript đúng như vai trò của nó, chỉ là một loại VM cho các ngôn ngữ khác.
Lựa chọn thứ 2 vẫn đang được bàn đến gần đây – nhưng vẫn chưa đến mức để người ta bỏ đi quan niệm JavaScript là một ngôn ngữ phải học, cho dù có phù hợp với bạn hay không.
Dù đã có nhiều ngôn ngữ khác được xây dựng dựa theo JavaScript, nhưng bản thân ngôn ngữ này vẫn thống trị ngành phát triển web, ở cả hệ sinh thái client và server. Những ngôn ngữ mới cũng được chú ý đến, nhưng đáng tiếc thay, mọi người dường như vẫn chưa thoát khỏi cái bóng JavaScript khổng lồ.
Vì vậy, ta chỉ còn lại một lựa chọn: hạn chế quy mô của vấn đề.
Vậy mà trớ trêu thay, hiện nay dường như người ta lại đang làm điều ngược lại: thay vì thu nhỏ phạm vi vấn đề, ta lại mở rộng nó ra, đẻ ra thêm nhiều chi tiết (nói cách khác, vấn đề) nữa phải giải quyết.
Tiến hai bước, lùi ba bước
Dù đã có những sáng kiến như ES6 cuối cùng đưa tình hình “tiến lên” cho một số người (sau quá nhiều năm bình chân như vại) thì sự phát triển của ngôn ngữ và run-time lại là sự “thụt lùi” cho một số khác — đến cùng, mặc cho một số dấu hiệu “le lói” của sự thay đổi, ta lại phải ngậm ngùi thất vọng khi mọi thứ có vẻ như vẫn bế tắc như xưa.
Với sự xuất hiện của ES, một số lập trình viên thì thấy khởi sắc hơn một chút, trong khi số khác lại có ý phật lòng. Theo tôi, ngôn ngữ phụ từ JavaScript (các ngôn ngữ như asm) phải xuất hiện với quy mô lớn hơn, rộng rãi và dễ tiếp cận hơn.
Theo ý kiến cá nhân, trước khi điều này xảy ra, ngôn ngữ và run-time JavaScript phải bị “đào thải”.
Tất nhiên, tôi không nói là JavaScript phải hoàn toàn biến mất. Tôi không điên. Ý tôi nói là JS phải bị chia nhỏ ra, trên cả nền tảng client lẫn server.
JavaScript phải thoát ly khỏi cái kén an toàn của mình, và tự học cách sinh tồn như những ngôn ngữ và run-time khác. Nhóc con, đã đến lúc phải trưởng thành rồi.
Nếu JavaScript bị tách khỏi nền tảng client và server, có lẽ nó sẽ thoát được nguy cơ đơn điệu — thế hệ ngôn ngữ hoặc run-time JavaScript kế tiếp sẽ không cần phải thỏa mãn mọi lập trình viên trên thế giới nữa. Thay vào đó, có thể tập trung thỏa mãn chỉ một thành phần lập trình viên thật sự yêu quý và trung thành với JavaScript, đồng thời tạo điều kiến cho những lập trình viên khác chuyển sang ngôn ngữ hoặc run-time phù hợp với họ hơn. Một viễn cãnh tốt đẹp hơn, cho cả JavaScript, cũng như cả những ngôn ngữ khác nữa.
Một khi có thể loại bỏ được sự đơn điệu lớn nhất lịch sử phát triển phần mềm, đồng nghĩa với việc chúng ta, cộng đồng, cuối cùng có thể:
- Làm chủ được ngôn ngữ và run-time của mình.
- Và bắt đầu “tái chế” và phát triển các ngôn ngữ và run-time độc lập khỏi nền tảng, nhà cung cấp, tổ chức browser/server.
- Và (có lẽ là quan trọng nhất) giải phóng toàn bộ cộng đồng lập trình viên khỏi áp lức của “ông vua” ngôn ngữ.
Các ngôn ngữ và run-time của chúng ta sẽ được CDNs host và phân phối, chứ không còn dính cứng vào môi trường client và server của ta nữa (trong môi trường này, chúng sẽ rủi ro hơn và khó thay đổi hơn, mỗi thế hệ mới phải mất nhiều năm để thống nhất, và thêm nhiều năm nữa trước khi polyfills và fallbacks có thể đồng bộ với browsers).
Hãy tưởng tượng một thế giới mà bạn có thể nâng cấp ứng dụng lên phiên bản JavaScript mới, đúng ngày nó ra mắt.
Hãy tưởng tượng một JavaScript xoay quanh nhu cầu của các lập trình viên thực sự yêu ngôn ngữ này — chứ không phải chỉ là một tập hợp lựa chọn tạp nham cho cả những người chả muốn dùng đến nó.
Nỗ lực dùng một thứ để thõa mãn mọi người, đến cùng cũng thành một đống tạp nham chả thõa mãn bất cứ ai mà thôi.
Chuẩn mực: tốt, Đồng nhất: tệ
Đúng như trên, chuẩn mực thật tuyệt vời. Nhưng sự đồng nhất lại không.
Theo nhân chủng học, loài người hưng thịnh bởi vì ta không ngừng thay đổi bản thân, từ đó có khả năng thích nghi với nhiều điều kiện khác nhau. Bản tính tò mò và sự ham học hỏi sinh ra nhận thức, hình thành và làm giàu thứ ta gọi là “văn hóa”. Văn hóa lập trình, là một phần của kho tàng văn hóa này, và ta phải trân trọng nó.
Áp đặt một thứ cho tất cả mọi người là một phương pháp vô cùng tệ hại.
Cuối cùng, đây chỉ là một mẫu ý kiến thôi — và tất nhiên, tôi cũng trân trọng ý kến của các bạn. Hy vọng, từ ý kiến của tôi, có thể bén lên không phải là gạch đá, mà là ý kiến quan tâm sâu sắc nơi các bạn.
Techtalk via sitepoint