Vấn đề không nằm ở thể chế, vấn đề nằm ở con người.

Cảnh báo: Tiêu đề chỉ mang tính câu view. Đây không phải là bài viết về chính trị. Nội dung bài chỉ đề cập đến việc phát triển phần mềm, cụ thể là phát triển web. Bài gốc, bằng tiếng Anh Frameworks and libraries are not the problem, people are viết bởi Chen Hui Jing. Tiêu đề do người dịch đặt.

Đầu tiên phải thừa nhận rằng tôi không phải là nhà phát triển tốt nhất, thậm chí còn kém xa cả mức tốt. Nhưng làm web là công việc mơ ước đối với tôi. Tôi thực sự thích làm điều này, vả lại còn được trả tiền để làm việc đó? Thế lại càng tuyệt. Nhiều người bạn ngoài ngành đến cạnh tôi sau nhiều giờ và hỏi, mày vẫn còn làm cơ à? Tôi nhún vai, thực ra đây không phải công việc, mà là sản phẩm của chính tôi. Và trong phần lớn trường hợp, họ sẽ nói, “Trông màn hình y hệt như lúc mày làm việc mà”, kèm một ánh mắt khó hiểu.

Tôi bắt đầu lập trình khá muộn. Tôi không học lập trình trên các máy 486 chạy DOS từ hồi còn bé tí. Tôi chỉ mới thực sự dùng HTML và CSS trong khoảng 3 năm trở lại đây. Trước đó, tôi chỉ là một thằng ranh vọc mã, xây dựng website bằng cách sao chép và dán code cứ như khâu vá Frankenstein. Khi nhận ra việc phát triển web là một công việc có thu nhập tốt, tôi thấy mình cần phải làm tốt hơn nữa. Và đó là lúc tôi hạn chế các kiểu thiết kế và phát triển web. Bài viết, podcast, sách, video đã dạy tôi vô số thứ trong suốt hai năm qua. Nhưng không gì có thể so sánh được với việc được viết code và phát triển website cùng một đội. Kinh nghiệm là tất cả.

Những framework tôi muốn nói tới là gì?

Hồi mời bắt đầu, tôi đơn giản chả có tí khái niệm gì về framework. Bằng cách nào đó bộ não nhỏ xíu của tôi không hiểu nổi khái niệm đó. Nghe có vẻ lạ, nhưng thực tế đúng là như vậy. Bây giờ tôi đã có chút mường tượng rằng frameworks giống như một số thành phần được dựng sẵn. Tất cả chúng được xây dựng dựa trên một ngôn ngữ tương ứng. Là một nhà phát triển front-end, tôi sẽ chỉ đề cập đến framework Javascript và CSS. Bởi vậy, frameworks, như Bootstrap và Foundation, đối với tôi, là một bộ thư viện các thành phần dựng sẵn mà bạn có thể dùng để xây dựng website. Cốt lõi của chúng, đều là HTML, Js và CSS. Thư viện và plugins hoạt động theo cùng một cách. Chúng chứa các mã viết sẵn trong đó cung cấp nhiều tính năng khác nhau mà các nhà phát triển khác chỉ cần thêm vào dự án của mình mà không cần phải dành thời gian viết hàm của riêng họ.

Đây là điều tôi thực sự thích về web. Hầu hết mã nguồn đều mở, được chia sẻ với tất cả nhà phát triển. Muốn có một menu điều hướng đáp ứng? Tôi chắc rằng có ít nhất hai mươi plugin khác nhau (thực ra là tôi cũng chưa kiểm tra) sẵn sàng cho bạn sử dụng. Muốn có một hộp xem ảnh lightbox? Tôi cá là số plugin còn nhiều hơn. Nhưng đôi khi, sự quá ư dễ dàng này lại mang đến nhiều thiệt hại.

Học cơ bản trước khi đụng đến framework

Tôi có ý kiến ​​rằng trước khi chúng ta sử dụng các thư viện và khung làm việc, chúng ta nên biết làm thế nào để tự viết những hàm này. Chúng ta cần phải thực sự hiểu về ngôn ngữ chúng ta đang sử dụng trước khi làm việc với đống framework. Khung làm việc và các thư viện đang có để giúp giảm thời gian phát triển chứ không phải giảm các chi phí về hiệu suất và chất lượng code. Giống như tiêu đề nói, mặc dù khuôn khổ và các thư viện không phải là vấn đề, vấn đề nằm ở những người sử dụng chúng.

Nếu bạn là một người chỉ mới bắt đầu xây dựng web, tôi khuyên bạn không sử dụng framework. Hãy viết HTML, CSS và Javascript thuần. Nếu bạn thấy lập trình khó khăn (giống tôi), bạn có thể làm như tôi, tránh Javascript. Phải thừa nhận rằng, đó có lẽ không phải là lời khuyên tốt nhất, nhưng trong ít nhất một năm, tôi chỉ không sử dụng tí Javascript nào trong trang web của tôi. Vào thời điểm đó, tôi đơn giản là không thể hiểu được nó. Nhưng tôi có thể hiểu CSS, vả lại lúc đó CSS3 đã trở nên chính thống rồi. Tôi hoàn toàn không dùng Javascript vì chỉ với CSS tôi đã làm được đủ mọi thứ mà trước đây không thể. Điều đó thực sự đã giúp tôi đạt được một sự hiểu biết thực sự sâu sắc về CSS, vì tôi ngoan cố từ chối động đến Javascript. Nhiều thứ có thể dễ dàng làm được với Js, tôi chọn dành nhiều thời gian để cố làm nó chỉ bằng CSS.

Do đó, tôi buộc phải học rất nhiều về các ưu và nhược điểm của CSS, chưa kể tôi thực sự đọc các Đặc tả CSS (tất nhiên tôi không thể đọc toàn bộ), và nhận ra rằng nó thực sự rất dễ đọc. Nó không phải toàn thuật ngữ kỹ thuật nhập nhằng mà chỉ là tiếng Anh giản đơn. Đặc tả HTML cũng khá là dễ đọc, nếu bạn quan tâm.

##Có một cách đúng và một cách sai để sử dụng framework

Trong suốt sự nghiệp của tôi, tôi đã phải làm việc với các dự án đã được xây dựng trên Bootstrap. Tôi muốn một lần nữa nhấn mạnh rằng Bootstrap không phải là vấn đề, cách mọi người sử dụng Bootstrap mới là vấn đề. Tôi đã từng được thừa kế một dự án sử dụng Bootstrap và jQuery, rồi cả jQueryUI, và lạ thay, một loạt các plugins khác cung cấp chức năng đã có sẵn trong hai thư viện ấy. Suy nghĩ đầu tiên của tôi là chuyện quái gì đang xảy ra trên Trái đất vậy? Chỉ riêng CSS đã lớn hơn toàn bộ trang chủ của tôi tới năm lần. HTML đang lồng sâu sáu đến bảy cấp, với một đống hổ lốn class, cả của bootstrap và class tự đặt. CSS cũng toàn là selector lặp đi lặp lại, góp phần làm tăng thêm kích thước. Tất cả những gì web site cần là hệ thống grid và thanh navigation của bootstrap. Tất cả những thứ khác đều không được sử dụng.

Giờ đây tôi đã đọc rất nhiều bài viết dủng hộ và chống lại việc sử dụng các framework và tôi thấy mình đồng tình với cả hai bên chiến tuyến. Trong thực tế, đó là cách tôi đi đến kết luận rằng bản thân các framework và thư viện không có lỗi, mà lỗi nằm ở cách chúng đang được sử dụng. Có quá nhiều người “phát triển” là những người chỉ đơn giản xây dựng các trang web bằng cách sử dụng Bootstrap hoặc Foundation mà không thực sự hiểu CSS và Javascript cơ bản. Hãy tưởng tượng bạn đang xây dựng một ngôi nhà. Bootstrap cung cấp cho bạn với các thành phần như cửa ra vào, cửa sổ và sàn nhà gạch mà đã được sơn và sẵn sàng để sử dụng. Những người không hiểu Bootstrap và CSS nhận cánh cửa đã được sơn, sơn màu của mình đè lên màu gốc. Thành thật mà nói, tôi thà tự làm cánh cửa của minh còn hơn.

Có điều là, các framework đầy đủ như Bootstrap và Foundation sẽ rất cồng kềnh vì chúng bao gồm cơ man nào là thanh điều hướng đáp dứng, đến hộp thoại và bảng thông báo, đối tượng media và các thứ. Trớ trêu thay, trang web của bạn không sử dụng 80% các thành phần ấy. Đó không phải là lỗi của Bootstrap. Các framework đều cho phép bạn chọn những thứ bạn cần. Những người không bận tâm đến việc làm quen với ý tưởng cơ bản đằng sau Bootstrap sẽ thấy rất khó khăn để làm điều này. Có rất nhiều sự phụ thuộc lẫn nhau giữa các thành phần, nhưng đó là điều các tài liệu hướng dẫn. Để công bằng với những người viết và chia sẻ tài liệu, tôi khẩn thiết yêu cầu TẤT CẢ các nhà phát triển đọc tài liệu của bất cứ ngôn ngữ, framework hoặc thư viện mà họ sử dụng. Tất cả các tài liệu đều là công sức làm việc chăm chỉ của nhiều nhà phát triển. Hãy tưởng thưởng và ghi nhớ công lao của họ.

##Nếu bạn không thể viết mã thuần, bạn không thể sử dụng framework

Nên có (mặc dù tôi biết nó sẽ không bao giờ có) một quy tắc rằng, nếu bạn không thể tự viết các hàm bằng các ngôn ngữ bạn đang sử dụng, bạn sẽ không được dùng framework. Framework chỉ nên được sử dụng bởi những người đã biết code, nhưng chỉ muốn tiết kiệm thời gian. Sử dụng các khung làm việc giống như lái xe. Bất cứ ai cũng có thể lái xe, nhưng bạn có thể lái xe một cách có trách nhiệm? Đừng trở thành những thằng nhãi vừa phóng xe ầm ầm vừa nhắn tin. Đó không chỉ là tự sát mà còn là giết người vô tội.

Thách thức cá nhân của tôi là viết tất cả các hàm jQuery mà tôi hiện đang sử dụng bằng Javascript thuần. You don’t need jQuery! của Ray Nicholus là nguồn tham khảo chính của tôi. Tôi cũng đọc Javascript: The Good Parts của Douglas Crockford. Tại sao phải chịu đựng tất cả những rắc rối khi hầu hết các hàm chúng ta sử dụng đã được viết bởi một người nào khác? Bởi vì nếu bạn không thể tự viết chúng, hiểu biết của bạn về ngôn ngữ có lẽ chưa đủ. Và khi mà bạn gặp những xung đột và lỗi không thể giải thích được, nhất là khi bạn sử dụng cả rừng plugin viết bởi nhiều người khác, dự án của bạn tất nhiên đã rơi vào cái vòng vá nọ lại lủng chỗ kia, thực sự là một cơn ác mộng. Thời gian bạn tiết kiệm được từ việc không viết code sẽ không đủ để bù lại thời gian tìm cách để con quái vật code spaghetti của bạn làm việc.

##Tổng kết

Một vài điều tôi muốn nói từ sâu thẳm trái tim mình. Tôi thực sự ghét việc viết code xấu. Code tôi viết không phải là tốt nhất, nhưng to hoàn toàn tin tưởng rằng sự hoàn hảo là điều xứng đáng được theo đuổi. Chúng ta sẽ không bao giờ trở nên hoàn hảo. Đó là sự thật. Lý do duy nhất để ta theo đuổi sự hoàn hảo bất chấp thực tế đó, là tận hưởng quá trình theo đuổi sự hoàn hảo. Tôi chắc rằng đối với nhiều người, phát triển web chỉ là một cách kiếm sống, với tôi, điều đó thật đáng buồn. Tôi đoán tôi là một người đủ may mắn để yêu thích những việc mình làm. Có lẽ điều đó nghe giống một kiểu tự động viên, nhưng tôi thực sự tin rằng chúng ta nên tự hào về công việc chúng ta làm và không nên làm qua loa đại khái. Tiếp tục bận rộn nhé, mọi người.


Đôi lời bàn

Tôi chọn dịch và chia sẻ bài viết này bởi tôi có cùng một quan điểm với tác giả. Nếu bạn là một người làm việc trong thế giới làm web, bạn cũng đồng tình với tôi về sự phong phú và dễ dàng tiếp cận của các thư viện, plugins, các đoạn code mẫu. Mọi thứ cứ như thể bạn bước vào một bãi những linh kiện, nhặt chỗ này một tí, nhặt chỗ kia một tí, rồi ghép lại. Đôi khi chúng ta có thể tạo ra những thứ rất tuyệt vời, nhưng đôi khi chỉ thu lại một đống lộn xộn. Trường hợp 2 có vẻ nhiều hơn. Đối với tôi, framework mà tôi không hiểu rõ cơ cấu bên trong, giống như ma thuật hắc ám, và tốt nhất ta nên tránh xa ma thuật hắc ám. Thành thật mà nói, đến giờ tôi cũng không dám chắc là tôi biết rõ framework nào, dường như chúng tiến hóa quá nhanh so với tốc độ nắm bắt của tôi, thành ra hầu như tôi thường xuyên build from scratch. Có thể có người cho là một nỗ lực đáng nể, có người (gồm cả tôi) cho là ngu. Nhưng cách này lại khá phù hợp với tôi, tôi mất khá nhiều thời gian để có thể diễn đạt đúng được vấn đề. Ý tôi là, nhờ xây dựng từ đầu, tôi hiểu được một vài khúc mắc và biết tại sao framework hay thư viện nào đó ra đời để giải quyết khúc mắc đó. Đó là một cách học khá tốt vì được va chạm với thực tiễn nhiều hơn.

Quay trở lại với web, chúng ta có thứ ngôn ngữ được sử dụng nhiều nhất và gây tranh cãi nhất, Javascript. Thật khó nắm được một sợi chỉ xuyên suốt trong quan điểm của tất cả người sử dụng JS. Ngay từ buổi đầu học JS (nếu các bạn có học từ đầu), các bạn đã phải vất vả phân biệt đâu là hàm gốc của JS, đâu là hàm của browser API. Ngày từ đầu đã có sự nhập nhằng như vậy, nên sau một thời gian sử dụng, hầu như là cắt dán, bạn vẫn chẳng thể nào nắm được cơ bản về JS mà vẫn ngỡ như mình biết hết rồi. May thay, hiện nay đã có nodeJS, đưa Js của bạn ra khỏi ngữ cảnh trình duyệt, để bạn có thể sử dụng javascript một cách thuần túy. Cuối cùng, lời khuyên của tôi cho việc bắt đầu học JS, là hãy dùng NodeJS và đọc A Javascript Refresh, một cuốn sách tốt và dễ chịu cho người mới bắt đầu. Chúc các bạn học tốt.