Theo các tiểu thuyết võ hiệp hoặc các sử thi thì tình yêu và thời loạn luôn là một cặp đôi khá phổ biến. Thì chặng đường của mình với javascript hôm nay cũng thế. Đúng nghĩa một mối tình đầu sinh ra trong thời loạn thế.
Miếu hoang cho kẻ lang bạt
Ở phần trước mình có nói về việc tìm được một cái miếu hoang trú mưa. Hôm nay mình sẽ nói rõ hơn về chuyện đó và "mối tình đầu" của mình bên trong cái miếu đó. Như lần trước mình đã kể việc anh em bọn mình cùng chia tay nhau sau một chầu nhậu bét nhè ở Phạm Văn Đồng, mỗi người đi một hướng. Mình sau khi nghỉ việc được gần một tháng thì cũng đi làm lại. Mình đầu quân cho một công ty sản xuất smartphone và làm việc với PHP. Rất ít dính đến frontend. Đó cũng chính là cái miếu hoang mà mình nói. 
Giữa một cơn mưa toàn những HTML, CSS, Javascript thì một cái mái lá PHP cũng là quá ấm áp cho một thằng PHP dev như mình rồi. Ở đó mình được làm khá nhiều PHP, theo đúng chuyên môn của mình và không phải nặng nhẹ về phần giao diện quá mức như làm với anh em ngày xưa. Thời gian đầu khá thảnh thơi và thoải mái. Mình không còn phải thức khuya, dậy sớm và OT liên tục nửa. Cho đến khoảng gần hết hai tháng thử việc thì mình được leader hỏi một câu làm mình cũng khá giật mình "Sao em thấy mọi người đi du lịch về mà em không hỏi han gì hết vậy?". WTF? Luật ngầm à? Rồi sao đó là một mớ các lô lốc triết lý mà mình lần đầu được truyền đạt. Đương nhiên là mình không đủ trình để lĩnh ngộ các triết lý sâu xa đó.
Tại sao lại là miếu hoang mà không phải biệt thự hay là phòng trọ?
Lần trước mình có từng nói là "miếu hoang vẫn không phải là nhà". Lý do mình gọi nó là miếu hoang là bởi vì sự lộn xộn và không có kỷ luật của project. Phần frontend phải nói là tôn trọng chủ nghĩa tự do và cá nhân hết cỡ. Mình tin là các nhà hoạt động đòi quyền dân chủ sẽ chẳng có lấy một việc để làm nếu họ phải công tác trong đó. Nếu ngày xưa mình phải làm theo các yêu cầu khá nghiêm nghặt về việc chia file Javascipt, CSS và cấu trúc HTML. Ví dụ như là code CSS, JS nên đặt để ở đâu. Cấu trúc của một form ra sau (chia cột, khoảng cách, cấu trúc label và input)... Khi làm những animation thì dùng thư viện thống nhất. Ví dụ như Lightbox, Select2, jQuery UI... Thì ở đây cái tôi của mình được tôn trọng đến đáng kinh ngạc. Mà không chỉ riêng với mình mà với tất cả mọi người luôn. Thứ mà mình cần làm đúng trong một feature là input và output. Còn lại tất cả điều là tiểu tiết. Do đó, nếu thích thì cái form sẽ có một dòng chứa hai input, không thì ba hoặc bốn hay thậm chí chỉ có một. Tùy. Còn về thư viện thì có khi dùng các thư viện con của Bootstrap, không thì jQuery UI hoặc một thư viện gì đó cũng được. Không quan trọng lắm. Chỉ cần xài được là được. Cái đó là giao diện bên ngoài thôi. Còn bên trong thì mình lấy một ví dụ là làm việc với thời gian. Nếu thích thì dùng momment.js không thì dùng thuần. CSS thì không cần chia module, cứ chèn một thẻ style trong file view (project dùng Zend 1) rồi nhét code CSS vào là xong. Nếu sau này cần dùng lại thừ cứ copy + paste là xong (nếu mà lỡ cái đoạn code đó cần update gì mà lỡ nó chèn ở nhiều chổ thì đừng hỏi tại sao bug lại đẻ một mớ). Thêm một phần là công việc không cần thiết phải UI + UX khắc khe như trước (user nội bộ) nên mình càng lúc càng bị tha hóa dần.
Javascipt giờ ghê vậy à?
Javascript trong đầu mình lúc đó chỉ có Nodejs ở tầng server (khá mơ hồ, thậm chí mình còn không biết đến framework phổ biến như Express) và tầng frontend thì mình nghĩ là luôn phải đi chung với một công nghệ backend nào đó (PHP, Ruby, .Net...). Cho đến một ngày kia, trời mưa, mình lười về nên đi lòng vòng team thì thấy ông anh frontend đang làm cái landing page. Điểm lạ là lúc trước mình luôn nghĩ là code frontend kiểu cắt HTML đó thì trên đường dẫn web là đường dẫn trực tiếp đến file. Mỗi lần code xong là phải refresh trang lại để xem kết quả. Nhưng của ổng thì lại chạy trên một cái đường dẫn là localhost:3000 và mỗi khi ổng save file thì trang tự động refesh luôn. Mình thấy hay quá nên hỏi ổng xài tool gì để làm cái đó (do lúc trước mình có xài một cái IDE cũng hỗ trợ vụ đó). Ổng nói dùng cái gì đó mình quên rồi, đại khái là dùng Javascipt. Sau cuộc nói chuyện đó mình gom thêm được một lô lốc từ khóa Webpack, Babel, ES6, Phonegap, Gulp... 
Ổng nói đang học Reactjs nhưng mà config cái đó để chạy phức tạp quá (thời mà chưa có cli thì config React đúng là ác mộng với lính mới). Sau hôm đó, mình mới giật mình biết rằng Javascript giờ nó ghê vãi chưởng ra. Đương nhiên mình vẫn khá cóng và gần như là không muốn chạm vào các thứ như NPM, Bower chứ đừng nói là Webpack. Đơn giản vì mình lúc đó vẫn thấy hiện tại (dùng jQuery) là ổn rồi, dù sao mình cũng là PHP dev. Nhưng quả thật sau ngày hôm đó mình đã có một cái nhìn rất khác về Javascript.
Tình đầu
Ngày đó, trong cái thế giới Javascript ở frontend thì có hai cường giả là Angular và React được hai bang hội là Goolge và Facebook đứng phía sau nên thanh thế khá lớn. Mình lúc đó cũng muốn học một cái gì đó hay hay của Javascript. Không hiểu sau mình không thích Angularjs lắm (lúc đó mình không hề biết sự tồn tại của Angular IO). Còn React thì sau một lần bỏ 200k để tham gia một khóa cấp tốc thì mình thấy cũng không yêu được nó lắm, thêm việc như mình nói ở trên là thời đó config nó với mình đúng là việc bất khả thi. 
Bỗng đến một ngày mình đọc trên mạng đâu có thấy một cái tên là Vuejs. Lúc đầu mình đọc nó là "vu-di-ét". Sau một hồi tìm hiểu mình được biết nó đang phát triển khá nhanh vào thời điểm đó vì dễ học + performance tốt. Vừa đọc, vừa ngẫm đủ thứ "Ồ, Laravel xài mày luôn à", "code có vẻ dễ đọc hơn Angular nè", "người tạo ra gốc Hoa cơ à (lúc đó mình đang học tiếng Hoa)", "có người Việt trong team core luôn", "team nhiều người Á Châu nhỉ". Rồi mình nhanh chóng ra quyết định là học thử nó. Ngoài lý do là nó nhìn "có vẻ dễ học" ra thì các lý do còn lại khá buồn cười như Nhiều người Á Châu trong team core, có cả một thanh niên Việt Nam nửa (tự tôn Á Châu bùng cháy), Evan You là một lập trình viên độc lập không hề có công ty đứng sau (Nghe có vẻ Underdog nhỉ? Like mạnh). Cuối cùng là phải cảm ơn anh Phan An về phần dịch tài liệu cực kì tuyệt vời của anh (Đồng thời mình cũng rất thích những cuốn sách của anh). 
Cứ thế là sau hôm đó, mỗi khi về nhà sau giờ làm mà hứng hứng thì mình lại lôi Vue ra học. Học đúng kiểu cho vui thôi. Nhưng rõ ràng là mình đã không giống như các lần trước (học Angularjs hay học Backbone). Mình cảm thấy hứng thú với cái thứ gọi là Vue này và có gì đó chú tâm hơn và cũng cảm thấy bớt dần đi những rào cản tâm lý với Javascipt. Nên sẽ không nói quá nếu gọi Vue là First love của mình với Javascipt "mới" (một Javascipt rất khác so với những gì mình biết trước đây). Đánh dấu cho câu chuyện của mình và Vue thời điểm đó là một project freelance về quản lý kho bãi (project nhỏ thôi và khá bình thường). Mình dùng Phalcon ở backend và ở frontend mình dùng Vue. Lần đầu đưa nó ra chiến trường luôn. Đương nhiên cũng gặp khá nhiều vấn đề, đôi lúc mình giải quyết bằng một số cách khá tà đạo như tương tác dữ liệu hẳn bằng jQuery luôn thay vì làm việc với data (lúc này mình vẫn khá mơ hồ về Vue component nên đương nhiên là mình cũng mù tịt cái khái niệm prop). Nhưng kết quả thì vẫn khá tuyệt vời. Các tương tác data ở frontend tương đối mượt mà và logic hơn khi xưa mình là với jQuery nhiều. Ví dụ nhưng để in ra màn hình mình không còn phải append HTML vào DOM từ các chuỗi string như trước. Đương nhiên là cuộc tình đầu nào cũng mong manh dù rất đẹp (như câu chuyện của mình với một bạn nữ cùng trường cấp ba năm xưa). Nếu hồi xưa rào cản là tương lai, học hành thì với Vue thì theo suy nghĩ của mình lúc đó là suy cho cùng nó vẫn là Javascript. Trong khi trong CV của mình đến tận bây giờ vẫn là chử PHP developer to đùng. Thêm công việc và môi trương ở công ty hiện tại của mình không quá hứng thú với mình. Nên mình nghỉ việc một tháng sau khi xong cái freelance để tìm một môi trường khác có thể giúp mình cải thiện kỹ năng PHP hơn. Buồn cười là nơi đến tiếp theo mình không được làm PHP luôn (mất cả Vue). Giống hệt như mình hồi xưa, vừa không đi tới đâu với cô gái năm ấy vừa trượt luôn đại học.
Tiếp tục bước đi (giống hệt phần trước)
Mình lại từ giã nơi che mưa hiện tại, mặt áo tơi và lao đầu vào cơn mưa giống hệt phần trước (không rõ mình có chèn nhầm cái loop nào vào cuộc đời mình không nhỉ -_-). Lần tới thì không còn là "cho vui" với Javascipt nửa mà là một cuộc chiến thật sự. Căng chả thua gì trận Trấn Ninh năm Nhâm Tuất (1802). Nhưng đó lại là câu chuyện của phần sau rồi.
Các bạn có thể follow trang cá nhân của mình ở địa chỉ https://tasynguyen3894.github.io hoặc Twitter của mình @tasyit để theo dõi các bài viết linh tinh của mình.