From newbie to professional web developer - The Roadmap

Với nhiều bạn mới hoặc đang tìm hiểu về PHP, mình xin chia sẻ một vài kinh nghiệm về cách học để làm web dev. chuyên nghiệp. Tôi viết bài này sau khi đọc 1 topic về kinh nghiệm bắt đầu với PHP và thấy cần đi sâu hơn để các bạn newbie thấy rõ phương hướng.

1. Kỹ năng lập trình
Kỹ năng lập trình hướng đối tượng (OOP) là ưu tiên số 1. Tới version 4.x, PHP vẫn không đánh giá cao lập trình OOP nhưng PHP5 đã hỗ trợ OOP rất tốt để dành được sự tin yêu của giới lập trình. Học OOP nên có bài bản. Lý thuyết OOP không nhiều nhưng cũng là rất nhiều và sâu xa. Khi học tới một mức độ nhất định thì có thể tiếp cận các design pattern là các mô hình thiết kế đối tượng chuẩn mực để giái quyết các vấn đề thiết kế ứng dụng khó.

Nắm vững OOP sẽ là cơ sở để tiếp cận mô hình xây dựng ứng dụng 3 tier. Hầu hết các ứng dụng PHP đều sử dụng mô hình 3 tier nổi tiếng là MVC. Ngay cả APS.NET 2.0 cũng có một framework cho người yêu MVC mới ra đời vào khoảng đầu 12/06.

2. Kiến thức về HTML và CSS
HTML không phải là ngôn ngữ gì quá phức tạp mà thực tế là chỉ có 1 quy luật duy nhất cần nắm bắt là tag. Tuy nhiên, HTML vẫn là nền tảng quan trọng của web, bạn nên dành từ 3 - 10 ngày để thật tập trung giải quyết dứt điểm nó.

CSS phức tạp hơn với một số cái niệm về selector và người làm designer thì cần nắm vững về CSS nhiều hơn coder. Tuy nhiên, nắm vững CSS là thế mạnh để giải quyết các bài toán về giao diện đôi khi tưởng như khó nhưng lại rất dễ dàng. Đơn cử là bài toán Menu đa cấp hiển thị horizontal hay vertical. Với CSS, chỉ cần thêm một chút kiến thức JS là bạn có thể giải quyết gọn gạng một menu động với các menu item lấy ra từ CSDL

Web 2.0 cũng là chuẩn mà CSS tham gia và đóng vai trò khá quan trọng.

HTML, CSS nên học một cách bài bản để tuân thủ nghiêm ngặt chuẩn XHTML và CSS của W3C. Rất nhiều bạn coder không chú ý điểm này nhưng thực tế công việc nếu phải làm việc cho cty nước ngoài hay khách hàng US, EU thì vấn đề theo đúng chuẩn W3C là rất quan trọng.

3. Mô hình Client/Server
Ứng dụng web là ứng dụng bản thân nó đã tuân thủ mô hình Client/Server và bạn cần nắm vững ngôn ngữ lập trình tại client side và server side. Cơ chế giao tiếp giữa Client và Server của ứng dụng web dựa trên giao thức HTTP và sử dụng Request/Response cũng cần phải được nắm rõ.

HTTP protocol không phải là giao thức phức tạp nhưng cũng nhiều chi tiết vặt và thông số. Bạn sẽ có nhiều cơ hội tiếp cận HTTP khi đi sâu vào PHP nên ngay từ đầu, không cần quá đặt nặng vào tìm hiểu HTTP.

Đối với Request/Response và các thành phần cơ bản của một ứng dụng web như Server, Session, các biến môi trường, Cookie,... thì bạn lại phải nắm rất vững. Điều này quan trọng vì nó là nền tảng của tất cả các ứng dụng web dù viết bằng ngôn ngữ gì gì đi nữa. Một khi đã nắm vững, chuyển đổi giữa các ngôn ngữ sẽ không gặp khó khăn gì.

Thực hành những khái niệm về Client/Server, bạn cần tiếp cận PHP và JavaScript song song. Ở mức độ beginner, sẽ gặp vô số lỗi PHP và JavaScript rất dễ nảng lòng vì PHP cũng như JavaScript không thực sự cung cấp các tool lập trình sành điệu như Visual Studio của M$ để các bạn debug.

Rất may là tại thời điểm này, PHP coder đã có thêm tool IDE như phpEdit (NuSphere) hay Eclipse, Zend Studio Neon. Bạn nên chọn dùng Eclipse hoặc Zend vì NuSphere là bản thương mại. Zend hiện đang có bản Neon Beta miễn phí (những IDE này đều có tool debug dùng DBG debuger của NuSphere có thể không dễ cài và cấu hình). Trên trình duyệt, bạn chọn FireFox thì sẽ có plug-in Web Developer tools để view code, CSS và debug JavaScript.

4. PHP, MySQL
Chỉ cần vài kiến thức JS cơ bản để bắt đầu với web, nếu đi sâu và JS trứơc bạn sẽ nản. Bạn nên tiếp tục với PHP và MySQL. Nếu chưa có kiến thức Database, bạn nên dành khoảng 7 ngày học về SQL. Thực hành trên MySQL, bạn có thể dùng MySQL console nhưng chắc sẽ ngán ngẩm, thay vào đó, bạn có thể download SqlYog hoặc Navicat hoặc dùng trực tiếp PhpMyAdmin (sau này sẽ dùng nhiều khi bạn quản lý các host đi thuê) để thực hành, tương tự Query Analyzer của SQL Server.

PHP phiên bản 5.x đã viết lại thư viện kết nối MySQL, bạn nên nắm sơ qua về nó qua 1 cuốn ebook dạy về PHP-MySQL (rất nhiều, đừng câu nệ, học cuốn nào cũng vậy cả).

Thời gian rèn luyện PHP và MySQL tùy vào từng người. Vì ở mức độ này, bạn cũng đã tương đối hoàn chỉnh 1 ứng dụng Web nên bạn sẽ tập trung vào việc xử lý dữ liệu nhập xuất và tính toán, hiển thị. Để nâng cao kỹ năng coding, đừng tìm cách sử dụng các thư viện vào lúc này mà hãy cố gắng viết code PHP phát sinh ra HTML code thật tốt. Một vài project làm thật hoàn thiện các chức năng trên giao diện sẽ giúp bạn nâng cao skill về PHP, HTML và JS.

Đừng quan trọng các vấn đề gửi mail, parsing RSS, upload file, phát sinh PDF,... bạn có cả đời coder để tìm hiểu những thứ lặt vặt này.

5. Begin professional
Nếu bạn theo lời tôi dụ dỗ tới bước này thì bạn đã khá là đau khổ với PHP và MySQL. Bước 5 này chia sẻ cho bạn nhiều súng đạn để vào đời giang hồ đi ... code dạo kiếm cơm . Đây là thời điểm bạn sẽ quay về rèn luyện thêm skill về OOP và MVC.

Đầu tiên là cải thiện ngay thói quen xử lý dữ liệu với MySQL thông thường bằng PHP. Có nhiều khả năng code của bạn sẽ bị tấn công SQL Inject nên cách tốt hơn là tìm một thư viện "xịn" cho việc này. Hai thư viện khá dễ cài và học là PDO của PEAR và ADODB. Đạt tới mức độ cao nhất về xử lý DB hiện nay kể đến viện hiểu rõ và sử dụng tốt ORM (Object - Relational Mapping). Vì bản chất thiết kế ứng dụng là các class mà object của nó cần được lưu trữ xuống Database để tái sử dụng lại, người lập trình tiếp cận theo hướng ngược lại là đọc DB lên và chuyển nó thành các object. ORM là khái niệm này và có nhiều tool làm chuyện này cho bạn trong đó có cả ADODB và PDO.

ORM là khái niệm rất hữu ích bạn cần nắm vững do nó liên quan tới thiết kế ứng dụng, các entity class và business object. ORM không chỉ dùng trong PHP/MySQL mà dùng trong hầu hết các ngôn ngữ khác.

(Tới đây, nếu bạn gặp khó khăn về xây dựng một project tương đối các chức năng. Các vấn đề như gửi nhận dữ liệu giữa các trang, quản lý user, xử lý form data,... thì hãy tìm xuống phần về MVC ở dưới nhé.)

Khi bạn có thể thoải mái với xử lý dữ liệu, bước tiếp theo là tìm đồ chơi hỗ trợ việc hiển thị dữ liệu đó cho user. PHP coder dùng các template engine khác nhau để hiển thị dữ liệu. 2 template khá hay là Smarty và Flexi. Ngoài ra, một số template còn cho bạn tạo control như ASP.NET nhưng sẽ bàn tới sau nhé.

Tiện thể làm việc với template, bước này bạn cũng cần một đồ chơi ngon lành về JS. Trước đây web developer rất sợ JS nhưng kể từ khi có AJAX thì JS cũng sống lên mạnh mẽ và nhiều library nổi tiếng ra đời, nhiều đến nỗi ngập ngụa mà sự lựa chọn hoàn toàn do bạn. Sau đây là một số ưu tiên mà bạn nên chọn: YUI của Yahoo, jQuery, jPrototype và Scriptaculous.

Bạn cũng sẽ quan tâm tới việc nâng cao kiến thức JS của mình nếu muốn đào sâu vào những thư viện này. Nếu vậy, hãy tìm hiểu và học JSON. Một lần nữa, bạn cần luyện công về OOP.

6. Rapid application development, let find an MVC framework
Phần này có 2 bước nhỏ độc lập nhau mà những người thực sự muốn đào sâu vào coding sẽ thích thú.

Ở bước 5, bạn sẽ gặp khó khăn nếu skill về giải quyết các vấn đề logic của bạn không đủ tốt để tạo nên một "cơ chế" làm việc chung cho ứng dụng của bạn. Nếu gặp vấn đề này mà đã cố gắng nhiều nhưng không thể giải quyết nổi, bạn cần một framework. Có nhiều MVC framework tốt như CakePHP, CodeIgniter, Zoop,... hay thậm chí bạn có thể chọn dùng ngay Symfony hay Zend Framework. Tất cả đều tốt và thử thách khả năng research của bạn.

Tận dụng framework này, đôi khi sẽ lại làm khó khăn và mất đi cơ hội cho bạn luyện tập những thư viện Smarty hày PDO mà tôi đã đề cập. Lý do là đa số framework đều có sẵn những cơ chế hỗ trợ những vấn đề này và thực tế bạn có thể bỏ hẵn bước 5 thú vị và đốt cháy giai đoạn sang bước 6.

Tôi không dám dánh giá các framework nào là tốt hơn để lựa chọn nhưng Zend có vẻ là một framework được nhiều người ưa chuộng, ít nhất cũng vì tên tuổi của Zend. Thực tế, Zend là một tập hợp nhiều library hơn một framework hoàn thiện, nó sẽ rất tốt cho ai có khả năng kết nối các library với nhau và không thích một cơ chế gò bó như các framework khác thường có. Tuy nhiên, nến xét về mức độ nhanh chóng, các framework khác sẽ dễ tiếp cận hơn hẳn.

Với nhiều người thì cách tiếp cận lại ngược lại, họ muốn có một framework MVC do chính mình xây dựng và làm được như vậy, người đó thực sự có nhiều cơ hội thành một developer hàng đầu. Lời khuyên là bạn nên có một framework cho mình và quen thuộc với nó. Khái niệm làm việc trên 1 framework cũng sẽ giúp đỡ nhiều khi bạn làm trong 1 công ty vì như vậy sẽ tạo ra 1 chuẩn mực chung cho các member làm trong cùng 1 nhóm.

7. More than an application
Cuối cùng thì nội lưc của bạn cũng kha khá thâm hâu để đục đẽo các open source của Joomla, Drupal, Wordpress, PhpBB,... hay gì gì đi nữa. Đây là công việc thú vị mà dân nghiền code chắc chắn không bỏ qua. Nghiên cứu các open source này cho bạn tìm hiểu những ứng dụng được thiết kế để có thể thay đổi cấu hình, liên tục phát triển thêm các module, component hỗ trợ và mở rộng gần như vô hạn.

Bạn cũng sẽ tìm được cơ hộp co-developing các ứng dụng, thử tìm cách làm việc nhóm, quản lý và chia sẻ code qua Internet,... và cùng nhiều người tạo dựng nên các ứng dụng hữu ích chắc chắn là điều thích thú nhất.

Bài này tạm dừng ở đây, khi có thời gian, hy vọng tôi có thể đóng góp các bước xây dựng một MVC core framework để mọi người cùng chia sẻ.
post-edit

1 nhận xét :

- Không bình luận các vấn đề to lớn như chính trị và tôn giáo
- Nội dung nên liên quan tới bài viết.
- Hãy đóng góp ý kiến của bạn để Blog hoàn thiện hơn.