Skip to content

Tản mạn về làm web

Ngày nay, phải chấp nhận một sự thật là ngành IT nói chung đang downtrend, dư thừa dev, sinh viên không tìm được chỗ intern, laid off khắp nơi. AI thì ngày càng phát triển nên nhiều công ty không có ý định tuyển thêm nhân sự, nhìn đâu cũng thấy được những khó khăn của ngành IT trong thời điểm hiện tại. Khó khăn là vậy nhưng chúng ta phải dần chấp nhận và cố gắng thích nghi với thị trường này.

Về bản thân mình, cũng như đa số mọi người mình cũng bắt đầu học IT và theo nghiệp làm web vì nghĩ nó dễ kiếm việc làm. Lúc chọn chuyên ngành mình cũng không thật sự nghĩ sau này mình sẽ làm gì, để cho cuộc đời đưa đẩy. Mình không nghĩ mình có nhiều kiến thức về web hoặc có kinh nghiệm gì ở những công ty lớn, mình chỉ nghĩ rằng đây là một hành trình thú vị mà mình muốn viết ra để ghi lại những kỉ niệm này.

Lần đầu tiên mình bắt đầu làm web nghiêm túc là một cái web demo cho hackathon ở S4V, thời đó bên S4V làm hackathon do đối tượng học sinh cấp 3 và chủ yếu đối tượng của họ biết Python nên mình cần phải làm web với Python sau đó viết docs hướng dẫn lại tụi nhỏ. Sau khi tìm hiểu thì có 2 sự lựa chọn lúc đó là Django và Flask, cuối cùng thì tụi mình chọn Flask. Flask điểm mạnh là gọn nhẹ, nếu ai quen thuộc với kiến trúc MVC sẽ thấy thân quen, điểm mình không thích ở Flask là có template engine (Jinja) quá chuối, cách binding dữ liệu cũng rất mệt. Hiện tại mình nghĩ Flask phù hợp khi có một model AI mà muốn build nhanh giao diện, hoặc có thể dùng Flask như một BE tạo ra các API. Sau khi cố gắng được vài hôm thì mình quyết định sẽ dùng Flask làm API, còn FE mình sẽ làm React. Lúc đó thứ mình có là một design figma hoàn chỉnh về quiz app của một chị designer, sau đó mình xem 1 cái video youtube dạy làm React với CSS và mình code theo từng dòng trong đó. May sao thì cuối cùng app cũng hoàn thiện và tụi nhỏ dựa trên những tài liệu của mình và team chuẩn bị cũng hoàn thành tốt bài thi hôm đó.

Sau đó là khoảng thời gian mình học web ở trường, do là môn bắt đầu nên cô dạy HTML, CSS, JS cơ bản và làm project với EJS hoặc Handlebars với kiến trúc MVC. Trong khoảng thời gian đó mình cũng làm project về React nhưng chỉ để ra sản phẩm chứ cũng không tìm hiểu những cái lý thuyết liên quan. Nếu như được làm lại đồ án trong khoảng thời gian này thì mình sẽ chú trọng vào chất lượng hơn là số lượng, nghĩa là mình muốn làm tính năng nào chắc tính năng đó và tìm hiểu kĩ các công nghệ liên quan.

Khoảng học kỳ 2 năm 3 là lúc mình đi tìm việc làm, mình apply rất nhiều chỗ, cũng trải qua rất nhiều vòng phỏng vấn nhưng thất bại gần như là tất cả. Đó là khoảnh khắc mình cảm thấy việc mình code web và interview là 2 thứ hoàn toàn khác biệt, mình không thật sự hiểu cái mình đang làm, ví dụ như hỏi về React life cycle, mình thật sự chưa nghe đến chứ chưa nói đến việc hiểu nó. May mắn là ở lần thử cuối cùng, mình đã pass và bắt đầu hành trình intern.

Hành trình intern của mình là 6 tháng căng thẳng mà mình không thể nào quên được, mình đã trải qua rất nhiều chuyện ở đây. Vui có, buồn cũng có rất nhiều, nhiều lúc áp lực chỉ muốn bỏ cuộc, cảm thấy lạc lõng giữa cuộc đời cũng như là thấy được nhiều góc khuất của một người được gọi là "thành công". Nhưng chính trong hành trình này đã giúp mình nhận ra nhiều thứ, mình bắt đầu biết trân trọng hiện tại, biết ơn những người đã giúp đỡ mình những lúc khó khăn nhất và từ đó cố gắng để rèn luyện bản thân tốt hơn mỗi ngày. Có hơi lạc đề một xíu ở đây nhưng mình muốn chia sẻ câu chuyện của mình vì mình biết ngoài kia cũng có những câu chuyện tương tự, mỗi chúng ta đều có những áp lực riêng nhưng hãy nhớ một điều là đừng bỏ cuộc vì đâu đó sẽ có những người đến giúp đỡ chúng ta ở những khoảnh khắc không ngờ tới.

Lan man nhiêu đó đủ rồi giờ thì trở về chuyện chính. Hiện tại, mình chủ yếu làm về Angular và PHP ở công ty, tối về nhà thì code đồ án bằng React. Trong lúc đó mình cũng nhận ra được sự khác nhau giữa các framework ngôn ngữ và tại sao người ta lại dùng nó. Lúc trước mình nghĩ có nhiều nguyên nhân sâu xa về performance và đủ các lý do khác khi các công ty chọn stack cho các dự án, nhưng khi mình tiếp xúc với các dự án, gặp gỡ hỏi nhiều người thì mình đã nhận ra vấn đề chính nằm ở resource. Nghĩa là khi chọn một stack cho project, công ty sẽ cân nhắc đến số lượng dev hiện tại và stack chính của họ, điều này dễ thấy ở các công ty outsourcing vì họ cần chia người vào các dự án để đảm bảo một dự án chạy tốt. Một lý do khác là dựa theo khu vực nếu Châu Âu thì sẽ thích dùng Angular, nếu Mỹ sẽ thích React, Nhật sẽ dùng VueJS. Đến đây có thể bạn sẽ có câu hỏi như: "Ủa vậy rồi sao giờ người ta vẫn còn code PHP?", câu trả lời đơn giản là vì tính legacy, 70-80% web hồi xưa người ta dùng PHP và đến bây giờ vẫn chạy ổn, thì câu chuyện bây giờ chỉ là maintain lại dự án đó vì để migrate dự án sang một stack khác gần như là không thể, nếu có thể thì cũng sẽ tốn rất nhiều effort và làm sao đảm bảo các core logic đều được giữ lại.

Giờ mình sẽ nói kĩ hơn về các stack FE. Bắt đầu với React thì đây là một thư viện dễ học cho người mới bắt đầu, chỉ học vài ngày 1 tuần là có thể làm app nhưng để hiểu sâu và làm advanced thì cũng rất khó. Cá nhân mình cũng rất thích dùng React để làm các dự án ở trường và cá nhân vì đơn giản là library support nhiều và cộng đồng lớn mạnh, muốn gì có đó, chẳng hạn như UI libs thì có MUI, Ant hỗ trợ tận răng, project set up cũng rất dễ dàng. Chỉ có một điểm là khi app scale to lên, bởi vì cái tính tự do của React khiến cho project trở nên hỗn loạn, khó để maintain nếu như không code chặt chẽ. Về Angular thì performance chắc chắn dở hơn React, ít người học và làm hơn vì số lượng kiến thức quá nhiều để làm được web, ví dụ như trong khi React chỉ cần biết và state, props, effects cũng đã đủ để làm một ứng dụng đơn giản thì Angular phải học two-way binding, component, module, directive, quá nhiều kiến thức nhưng cũng làm ra giống như React. Nhưng Angular thì lại là một framework hoàn chỉnh, routing, form, validation này kia sẽ được support hết trong chính Angular, trong khi React phải phụ thuộc vào nhiều lib khác như react-router-dom, yup, ... Structure của Angular cũng sẽ rất giống nhau giữa các project tạo nên sự ổn định và unit test cũng là một yếu tố quan trọng và cũng là điểm mạnh của Angular. Nếu bạn biết về NestJS, bạn cũng sẽ thấy rất nhiều sự tương đồng khi code Angular vì vậy người ta hay nói Angular rất phù hợp cho các BE dev. Các bank ở Việt Nam cũng rất thích dùng Angular, mình có xem qua job description của các bank thì hầu như đều dùng Angular kết hợp với NgRx để state management, có lẽ lý do vì họ muốn một framework có structure tốt. Các ứng dụng Angular theo mình thấy thường là các ứng dụng internal, maintain lâu dài, còn React thì sẽ thường được sử dụng cho các dự án start up đòi hỏi performance cao. Để đi sâu vào từng framework các bạn có thể xem thêm phần Blog của mình.

Gần đây thì vì một vài lý do mình bắt đầu làm PHP và tìm hiểu nhiều hơn về ngôn ngữ mà nhiều người đánh giá thấp và cho là dead language này. Tuy nhiên mình nghĩ phải nhìn nhận tất cả các công nghệ một cách công tâm, đối với PHP Laravel, nó giúp build app từ FE đến BE một cách đầy đủ với ít effort, nghĩa là authentication, authorization được support tận răng, kiến trúc MVC quen thuộc sẽ giúp bạn build một cái web với đầy đủ tính năng rất nhanh. Rất nhiều web hiện tại chạy bằng PHP mà quen thuộc nhất là Wordpress, support rất tốt cho các app CMS. Chỉ là vấn đề của PHP là thường các app chạy PHP là legacy code, chục tuổi hoặc hơn cũng rất nhiều, với dạng project này code base rất to và mỗi chỗ lại viết một kiểu nên rất khó trong việc maintain và dễ side effect khi maintain. Mình nghĩ rằng PHP là một lựa chọn tốt cho các dự án freelance, kiểu nó centralize mọi thứ trong một source giúp rất tốt khi một mình làm tất cả các khâu trong dự án.