• Thứ Sáu, 29/08/2014 05:15 (GMT+7)

    Học gì để trở thành nhà phát triển web

    Bùi Lê Duy
    Bạn muốn trở thành nhà phát triển web? Bài viết dưới đây cho bạn vài mẹo hữu ích khi mới bắt tay vào nghề.

    Web hơn 20 năm tuổi và hiện có rất nhiều nhà phát triển đang làm việc với nó. Danh xưng "Webmaster" có mọi hàm nghĩa, từ nhà phát triển, nhà thiết kế, nhà quản trị cơ sở dữ liệu và nhà quản trị hệ thống web. Ngày nay, chúng ta thấy ngày càng có nhiều khía cạnh chuyên sâu hơn trong lĩnh vực phát triển web như nhà phát triển front-end, nhà phát triển back-end, chuyên gia DevOps và kiểu nhà phát triển "fullstack", nghĩa là làm từ A-Z.

    Tính chuyên môn hóa từng lĩnh vực riêng biệt cho web nói lên rằng web đang trở thành một nền tảng thiết yếu và vô cùng rộng lớn. Các trang web là một phần rất quan trọng trong nền kinh tế thế giới và tự bản thân web cũng đóng vai trò không hề nhỏ trong các thành phần cấu thành nên nó như thiết kế, phát triển, bảo trì. 

    Nhưng với việc chuyên môn hóa như vậy, và mức tăng trưởng chóng mặt của web thì nó cũng mở ra cơ hội cho nhiều người. Trong vài tháng qua, nhiều người đang muốn chuyển hướng từ ngành nghề khác sang làm nhà phát triển web, còn những ai đang phát triển web tiếp tục muốn đào sâu hơn nữa và rộng hơn nữa qua những mảng khác của web. Phát triển web rõ ràng mở ra cơ hội kiếm việc cho nhiều người khi càng ngày càng có nhiều công ty cần những kỹ năng riêng biệt cho web. Thậm chí, nếu bạn thành thục một kỹ năng chuyên sâu phát triển web nào đó, bạn cũng có thể tự mở một công ty khởi nghiệp trực tuyến cho riêng mình.

    Nhưng có một thực tế là những người phát triển web không hẳn đã biết chính xác những nền tảng hoặc thậm chí nơi nào nên bắt đầu cho công việc. Do vậy, bài viết mô tả sơ lược những yếu tố cơ bản nếu bạn quan tâm và muốn dấn thân vào lĩnh vực này.

    Nếu bạn là nhà phát triển web dạng fullstack, từ A-Z thì ít nhất cần biết những công nghệ web như: Linux, cơ sở dữ liệu, ngôn ngữ máy chủ và framework, các công nghệ máy khách như HTML, CSS và JavaScript.

    Nếu các thứ trên, mỗi thứ bạn biết chút ít thì bạn có thể tạo được ứng dụng web cho riêng mình rồi. Tuy nhiên, bạn cần phải tìm hiểu rộng hơn nữa, thêm vài phần nữa về các công nghệ web, để cho bạn cái nhìn khái quát, từ đó hướng bạn đi đến một lĩnh vực phát triển chuyên sâu cho web.  Hoặc nếu bạn vẫn thích thú với mọi lĩnh vực của web thì vẫn tốt, miễn là bạn nắm được hết mọi "ngóc ngách" để có thể phát triển được một ứng dụng web tốt.

    Linux và máy chủ

    Ai cũng quen thuộc với hệ điều hành Windows, nhưng nắm biết được Linux là phần rất quan trọng vì Linux liên quan rất nhiều đến web. Không phải vì nhiều máy chủ truyền thống chạy Linux nhưng công nghệ ảo hóa đang ngày càng ổn định và phổ biến, sử dụng những hệ thống như Vagrant, là hệ thống nguồn mở cho bạn phát triển một máy ảo rồi sử dụng chính máy ảo để chạy ứng dụng.

    Nhưng thực chất, không nhất thiết bạn phải hiểu tường tận nền tảng Linux thì mới có thể phát triển web tốt. Nhưng bạn cần hiểu vài thứ cơ bản của Linux, như thự mục, tài khoản và quyền người dùng cũng như làm thế nào để cài đặt chương trình. Bạn cũng cần biết file log của hệ thống được lưu ở đâu, cả file log chung và file log do máy chủ HTTP phát sinh.

    Nếu bạn còn lạ lẫm với quyền quản trị hệ thống trên Linux thì việc tìm hiểu những hệ thống như DNS, SMTP và SSL sẽ chẳng giúp ích gì nhiều, mà còn làm cho bạn thêm rối nữa; lúc này hãng cố gắng dựa nhiều vào các công cụ của bên thứ 3 nhiều nhất có thể.

    Biết được cách sử dụng những công cụ xử lý văn bản cổ điển nền UNIX như Emacs hay Vim sẽ giúp ích rất nhiều, thạm chí nếu bạn là người chuộng giao diện đồ họa GUI hơn dòng lệnh. Và dĩ nhiên, nếu biết thêm về các công cụ vào/ra của UNIX như grep và find thì sẽ giúp bạn rất nhiều.

    Bạn cũng không nên để tâm quá nhiều vào các hệ thống ảo hóa và bộ chứa, không phải vì chúng không liên quan, mà vì chúng sẽ làm bạn thêm rối, làm cho quá trình học hỏi của bạn phức tạp hơn. Những thứ ấy về sau bạn có thể từ từ nắm bắt. Còn nếu khi bạn quyết định sử dụng Vargant, Docker hay Amazon Web Services thì bạn có thể chuyên tâm học riêng những công nghệ của các dịch vụ này.

    Linux là hệ thống rất chuyên sâu và phức tạp. Một người có thể mất nhiều năm mới mong hiểu và nắm bắt được toàn bộ hệ thống Linux. Đầu tiên, có thể Linux rất lạ lẫm và khó nhưng dần dần, bạn sẽ tùy biến được môi trường, học được cách nó vận hành và rồi sẽ cảm thấy thoải mái hơn với nó.

    Cơ sở dữ liệu

    Chẳng có ràng buộc nào bắt buộc một ứng dụng web phải có cơ sở dữ liệu cả. Tuy vậy, trên thực tế, rất hiếm ứng dụng web hiện đại mà không sử dụng cơ sở dữ liệu. Những nhà phát triển mang hướng "hoài cổ" vẫn thích sử dụng loại cơ sở dữ liệu truyền thống, liên kết chặt chẽ với nhau như SQL và nhiều ứng dụng web hiện nay vẫn sử dụng. Tuy vậy, cần công nhận rằng một chuẩn nào đó cũng có lúc thăng, lúc trầm, và cơ sở dữ liệu SQL cũng có thể đang đi xuống.

    Vì lí do này mà nhiều người bắt đầu lĩnh vực phát triển web với các loại cơ sở dữ liệu tạm gọi là NoSQL như MongoDB, cho phép bạn lưu các tài liệu phức tạp theo một định dạng hướng đối tượng và ngôn ngữ lập trình hiện đại mà không phải tạo các overhead để truy vấn SQL. Nếu bạn cảm thấy SQL quá rắc rối thì tại sao lại không nghĩ theo hướng NoSQL?

    Tuy vậy, có một lý do mà dạng cơ sở dữ liệu có liên kết chặt chẽ như SQL vẫn phổ biến, bởi vì nó đã có hơn 40 năm nghiên cứu, áp dụng và nhất là mang lại nhiều lợi ích. Vẫn rất đáng bỏ công nếu bạn dành thời gian nghiên cứu sâu hơn về một cơ sở dữ liệu liên kết chặt chẽ như vậy, nhất là khi bạn sử dụng các ngôn ngữ cấp cao và trình quản lý đối tượng liên kết ORM (object-relational manager) để xử lý phần lớn truy vấn. Lợi ích lâu dài khi bạn nắm được SQL và các hệ cơ sở dữ liệu liên kết, tính linh động của cơ sở dữ liệu liên kết vẫn "vô đối".

    Tất nhiên, điều này không có nghĩa là NoSQL không là gì cả. MongoDB, mới hơn là PostgreSQL giúp nhà phát triển web rất dễ lưu trữ và trích xuất các đối tượng JSON, và chúng vận hành rất hiệu quả.

    Nếu bạn đam mê công nghệ về cơ sở dữ liệu thì có thể tìm đọc cuốn Seven Databases in Seven Weeks của Eric Redmond và Jim Wilson, do nhà xuất bản Pragmatic Programers phát hành.

    Ngôn ngữ lập trình

    Tiếp theo là chọn lựa quan trọng nhất nhưng cũng gây nhiều tranh cãi nhất trong cộng đồng các nhà phát triển, đó là ngôn ngữ lập trình phía máy chủ. Bài viết không nêu ra đâu là ngôn ngữ tốt nhất, nhưng có 2 ngôn ngữ lập trình bạn cần quan tâm: Python và Ruby, không phải hoàn toàn vì bản thân chúng hay, mà còn vì framework Flash và Sinatra đơn giản, mạnh mẽ, có hướng dẫn sử dụng cụ thể và có cộng đồng đông đảo. Bạn có thể tạo các ứng dụng web rất tuyệt vời với 2 framework này, hoặc bạn có thể kết hợp nhiều gói khác nhau để hướng lên framework Django và Rails, mở ra cho bạn nhiều khả năng mới để phát triển ứng dụng. 

    Thế mạnh của Ruby và Python không chỉ ở khả năng mà chúng làm được, mà còn đây là ngôn ngữ dễ nắm bắt đối với người mới học.

    Một tùy chọn khác đang ngày một phổ biến là JavaScript, thường sử dụng node.js, và được cho là ngôn ngữ lý tưởng cho cả 2 đầu: máy khách (trình duyệt) và máy chủ. Node.js không phải là một framwork tuyệt vời nhưng ngày nay lại có rất nhiều người sử dụng nó. Do vậy, JavaScript càng ngày càng phổ biến trong lập trình web cho các ứng dụng đại trà và cho những người nhập môn.

    Cũng có vài chọn lựa khác, như PHP dễ học và có cộng đồng đông đảo. Tuy nhiên, PHP không ấn tượng và không "ra dáng" là một ngôn ngữ. Sự thật là WordPress hiện đang chiếm đến 10% nền tảng web trên internet hiện nay, do vậy mà PHP còn tồn tại lâu nữa. Ngoài ra, có nhiều cơ hội để khai phá thêm các mảng mới bên trong hệ sinh thái WordPress.

    Tùy vào nền tảng phát triển, kinh nghiệm và sở thích của bạn mà bạn có thể muốn thử một số ngôn ngữ khác như Go, Scala hoặc Clojure, tất cả ngôn ngữ này đều được dùng phát triển ứng dụng web và có cộng đồng hỗ trợ rộng rãi.

    Tóm lại, nếu bạn đã biết một ngôn ngữ lập trình nào đó rồi thì bạn nên thử tận dụng nó cho phát triển web. Còn nếu bạn không thấy thoải mái với ngôn ngữ mình đã học thì hãy thử với Python hoặc Ruby. Chúng dễ học, nhiều người dùng và có hệ sinh thái lớn, nhiều framework đáp ứng được đủ mức quy mô ứng dụng. Dĩ nhiên, quyết định là do bạn, có thể bạn không thích 2 ngôn ngữ trên mà muốn theo một ngôn ngữ "độc, lạ" nào đó thì cũng OK. Học để trở thành nhà phát triển web thực thụ nhìn chung khó hơn nhiều so với học chỉ để phát triển ứng dụng web bằng một ngôn ngữ mới hay với một framework mới.

    Front-end

    Thập kỷ qua, front-end trong phát triển web càng ngày càng trở thành yếu tố tối quan trọng. HTML, rồi CSS, và kết hợp HTML5, CSS, JavaScript và nhiều API để tạo một giao diện front-end trở thành khâu sống còn trong quy trình phát triển ứng dụng web.

    Bạn không phải nắm hết mọi thứ trên thì mới có thể phát triển front-end được. Nhưng bạn cần biết đôi chút về HTML cũng như CSS cơ bản. Giỏi hơn chút nữa, bạn cần học thêm JavaScript, mặc dù học được bao nhiêu còn tùy vào ứng dụng web phức tạp đến mức độ nào.

    Có lẽ cú hích lớn nhất trong mảng phát triển front-end trong vài năm vừa qua là sự ra đời của các framework front-end như Zurb Foundation và Twitter Bootstrap. Những framework này giúp bạn tập trung vào thiết kế mà mình muốn, khắc phục được những vấn đề mà người khác từng gặp phải trước đây khi chưa có chúng. Như Bootstrap có thể tiết kiệm được cho bạn nhiều thời gian, giúp bạn chuyên tâm hơn về mặt thiết kế hơn là ngồi chỉnh sửa code. Tuy nhiên, Bootstrap và Foundation không có nghĩa là bạn không học CSS, nhưng chúng chỉ giảm số lượng CSS bạn cần để giúp trang web chạy được.

    JavaScript cũng hưởng được lợi một phần vì các ứng dụng web càng ngày càng phức tạp hơn và vì mọi người đều có môi trường phát triển JavaScript, đó là trình duyệt web. Lượng module và pakage cho JavaScript cực kỳ nhiều và không có dấu hiệu ngưng lại. Ember.js và Angular.js phát triển mạnh càng khuyến khích nhà phát triển sử dụng. Cùng lúc đso, những framework front-end thường quá phức tạp đối với nhà lập trình mới vào nghề. Mặc dù jQuery khá cũ nhưng vẫn có một thư viện JavaScript tuyệt vời, giúp nó dễ dàng sinh DOM cho đa nền tảng. 

    JavaScript vẫn là kỹ năng rất quan trọng cho bất kỳ nhà phát triển web nào.

    Vậy nên bắt đầu từ đâu?

    Tin tốt là phát triển web rất rộng, khó có thể chọn sai vì không "bổ đầu này cũng bổ đầu kia". Vì bất kể bạn chọn thứ gì thì cũng luôn có một cộng đồng rất lớn sử dụng cùng công nghệ sẵn sàng hỗ trợ bạn.

    Nếu bạn chưa biết gì, hãy thử Python với framework Flask, cơ sở dữ liệu PostgreSQL, framework Bootstrap với jQuery.

    Nếu bạn cảm thấy thích lập trình hướng đối tượng hay muốn thêm một chút tính linh động trong viết code, có thể tìm hiểu Ruby với framework Sinatra, kèm cả PostgreSQL, Bootstrap và jQuery.

    Cuối cùng, phát triển WordPress là cách thức rất tốt để bạn bước chân vào chính hệ sinh thái của nó.

    Kết luận

    Đôi khi, có vẻ như là phát triển phần mềm đang biến dần thành phát triển web. Có vẻ nói thái quá nhưng rõ ràng thị trường có một nhu cầu rất lớn về nhà phát triển web. Bất kể bạn học ngôn ngữ lập trình, công nghệ lập trình gì đi nữa thì điều quan trọng là học được tư duy web và cố gắng hình dung điều gì giúp ngành công nghiệp này đi lên, để từ đó bạn mới có thể "gãi đúng chỗ ngứa".

    Các nguồn thông tin tham khảo: