Showing posts with label Lập trình. Show all posts
Showing posts with label Lập trình. Show all posts

March 28, 2009

Bắt đầu với PHP

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à . 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ội 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.
Nguồn: Internet

August 31, 2008

Một phong cách lập trình

Sau đây là một phong cách lập trình tuy chưa hẳn là tối ưu nhưng cũng là một bài viết đáng chú ý.
I. Mục tiêu của tài liệu này:

Bạn đang học lập trình, vậy bạn nghĩ về một chương trình máy tính như thế nào?

Một chương trình máy tính có thể xem như một tác phẩm (như bài báo, một câu truyện, một cuốn tiểu thuyết, …) bởi vì nó được đọc bởi bạn (có thể bây giờ, mà cũng có thể là 10 năm sau!), và bởi những lập trình viên khác sau bạn (để phát triển, sửa chửa, cập nhật, …). Chính vì lẽ đó, một chương trình máy tính nên đáp ứng cả 3 yêu cầu sau: đúng, dễ đọc và dễ hiểu.

Mục tiêu của tài liệu này là cung cấp cho bạn:

1. Một tập hợp các chuẩn trình bày chương trình thông dụng.

2. Một thói quen để từ đó bạn có một phong cách lập trình tương đối chuyên nghiệp.

Tuy nhiên, tài liệu này không có tham vọng đề cập đến toàn bộ các khía cạnh của một phong cách lập trình. Nó chỉ nói đến những gì cần thiết để cho bạn, một sinh viên, khi chưa tìm được một phong cách phù hợp tạo được những thói quen tốt ngay từ đầu.



II. Một số nguyên tắc cần tuân thủ khi lập trình:

A. Trình bày tổng thể chương trình:

1. Môđun hóa chương trình của bạn

Chương trình của bạn nên được tách thành nhiều môđun, mỗi môđun thực hiện một công việc và càng độc lập với nhau càng tốt. Điều này sẽ giúp bạn dễ bảo dưỡng chương trình hơn và khi đọc chương trình, bạn không phải đọc nhiều, nhớ nhiều các đoạn lệnh nằm rải rác để hiểu được điều gì đang được thực hiện.

Khi muốn chuyển thông tin cho các chương trình con, bạn nên sử dụng các tham số. Tránh sử dụng các biến toàn cục để chuyển thông tin giữa các chương trình con. làm như vậy bạn sẽ triệt tiêu tính độc lập giữa các chương trình con và rất khó khăn khi kiểm soát giá trị của chúng khi chương trình thi hành. (Chú ý, bạn nên phân biệt giữa biến toàn cục và hằng số toàn cục)



2. Cách trình bày chương trình nên nhất quán

Chương trình của bạn càng nhất quán, thì nó sẽ càng dễ đọc và dễ hiểu. Hơn nữa, bạn sẽ càng mất ít thời gian nghĩ về cách viết chương trình, và như vậy bạn sẽ có nhiều thời gian hơn để nghĩ về các vấn đề cần giải quyết.



3. Chương trình nên giữ được tính đơn giản và rõ ràng trong hầu hết các tình huống.

Việc sử dụng các mẹo lập trình chỉ thể hiện sự khéo léo của lập trinh viên và làm tăng hiệu quả chương trình lên một chút, trong khi điều đó sẽ đánh mất đi tính đơn giản và rõ ràng của chương trình.

Ví dụ:

a[i++] = 1;

nên được viết là:

a[i] = 1;

i++;

Hoặc:

if (doSomeThing() == false) …

nên được viết là:

bool result = doSomeThing();

if (result == false) …



4. Mã lệnh mà bạn viết phải thể hiện đúng cấu trúc chương trình của bạn.

Ví dụ:

Dòng lệnh:

if (count == 0) printf(``No data.\n'');

nên được viết là:

if (count == 0)

printf(``No data.\n'');

Và như vậy, theo bạn, dòng lệnh sau có thể hiện đúng cấu trúc chương trình không?

if (count != 0)

printf(``%d\n'', count);

average = total/count;



5. Chương trình của bạn nên thực hiện như một dòng chảy từ trên xuống dưới, không nên có những thay đổi bất chợt. Để có được điều này, bạn không nên sử dụng goto hay continue.



B. Khai báo biến và hàm

1. Một câu lệnh nên được đặt riêng trên một dòng, điều này sẽ giúp bạn rất nhiều trong quá trình debug.

Ví dụ:

Nếu bạn viết:

while (i < 100) i++;

bạn sẽ không biết được vòng lặp trên được thực hiện bao nhiêu lần khi debug..

Cũng tương tự:

if (i < 100) i++;

bạn sẽ không biết được lệnh if có được thực hiện hay không trong quá trình debug (trừ khi bạn phải theo dõi giá trị của i).



2. Các dấu {} bao các khối lệnh phải được canh thẳng hàng.

Có 2 cách thường được chấp nhận để canh thẳng các dấu {}:

a. Cách 1:



if (...)

{

.

.

.

}

else

{

.

.

.

}
while (...)

{

.

.

.

}






b. Cách 2:



if (...) {

.

.

.

}

else {

.

.

.

}
while (...) {

.

.

.

}






Và như vậy, khi viết các khối lệnh nằm trong một cặp ngoặc {}, bạn nên viết cặp ngoặc trước rồi mới viết các lệnh vào giữa, làm như vậy bạn sẽ tránh trường hợp thiếu các dấu ngoặc này.



3. Biến nên được khai báo ở gần vị trí mà nó bắt đầu được sử dụng, như vậy bạn sẽ tránh được việc khai báo một loạt các biến dư thừa ở đầu hàm hay chương trình.



4. Mỗi biến nên khai báo trên một hàng nhằm dễ chú thích về ý nghĩa của mỗi biến.

Ví dụ:

int level = 0; // indentation level
int size = 0; // size of symbol table
int lines = 0; // lines read from input

5. Tên biến nên đặt sao cho đủ nghĩa, có thể là là các từ hoàn chỉnh hoặc viết tắt nhưng phải dễ đọc (dễ phát âm).

Ví dụ:

wages = hoursWorked * hourlyRate;
rõ ràng hơn là
w = h * r;
Ngoại lệ: Các biến sử dụng để chạy các vòng lặp nên đặt đơn giản là: i, j, k, …



6. Tên của một hàm nên phản ánh công việc hoặc giá trị trả về của nó.

Ví dụ:

CheckForErrors() thay vì ErrorCheck()

DumpDataToFile() thay vì DataFile().



7. Bạn nên sử dụng hợp lý các ký tự hoa và thường khi đặt tên biến, điều này sẽ giúp chương trình dễ đọc hơn, một số gợi ý như sau:

• Tên biến được viết bằng chữ thường, viết hoa chữ các đầu tiên của từ thứ hai trong tên biến (kiểu camelBack), ví dụ: totalHouseWorked.

• Tên hằng số được viết hoa toàn bộ, các từ viết cách nhau bằng dấu gạch dưới, ví dụ: TAX_RATE.

• Các kiểu dữ liệu do người dùng định nghĩa được viết hoa toàn bộ hoặc viết hoa các ký tự đầu, ví dụ: BIGINT hay BigInt.

• Tên các hàm được viết hoa chữ cái đầu từ, có thể bắt đầu từ từ thứ nhất hay thứ hai, ví dụ: DisplayInfo() hoặc displayInfo().



8. Các hằng số không nên viết trực tiếp vào chương trình.

Thay vì thế, người ta thường sử dụng lệnh #define hay const để đặt cho những hằng số này những tên có ý nghĩa. Điều này sẽ giúp lập trình viên dễ kiểm soát những chương trình lớn vì giá trị của hằng số khi cần thay đổi thì chỉ phải thay đổi một lần duy nhất ở giá trị định nghĩa (ở #define hay const).

Ví dụ:

popChange = (0.1758 - 0.1257) * population;
nên được viết là:
const double BIRTH_RATE = 0.1758,
DEATH_RATE = 0.1257;
...
popChange = (BIRTHRATE - DEATH_RATE) * population;
Ghi chú: bạn không nên dùng #define thường xuyên để định nghĩa các hằng số, bởi vì trong quá trình debug, bạn sẽ không thể xem được giá trị của một hằng số định nghĩa bằng #define.



9. Khi khai báo con trỏ, dấu con trỏ nên được đặt liền với tên, nhằm tránh trường hợp sau:

char* p, q, r; // ß q, r không là con trỏ

Trong trường hợp này nên viết là:

char *p, *q, *r;

(luật này cũng được dùng khi khai báo tham chiếu với dấu &)



C. Trình bày dòng lệnh:

1. Các biến không nên được sử dụng lại với nhiều nghĩa khác nhau trong cùng một hàm.

Ví dụ:

Không nên sử dụng biến như sau:

for (i = 0; i < n; i++) // ß n mang ý nghĩa là số lần lặp

. . .



for (i = 0; i < 10; i++)

for (n = 0; n < 10; n++) //ß n sử dụng như biến điều khiển lặp

. . .



2. Các toán tử và toán hạng trong một biểu thức nên được tách rời nhau nhằm làm biểu thức dễ đọc hơn.

Ví dụ:

mass = volume * density;

Thay vì:

mass=volume*density;

Ngoại lệ: không chèn khoảng trắng vào giữa toán hạng và toán tử ++ và –



3. Nên có khoảng trắng ngăn cách giữa dấu phẩy hay chấm phẩy với các tham số.



4. Nên có khoảng trắng giữa từ khóa và dấu ‘(’, nhưng không nên có khoảng trắng giữa tên hàm và dấu ‘(‘.

Ví dụ:

// no space between 'strcmp' and '(',
// but space between 'if' and '('
if (strcmp(input_value, "done") == 0)
return 0;

5. Nên sử dụng các dấu ( ) khi muốn tránh các lỗi về độ ưu tiên toán tử.

Ví dụ:

// No!
int i = a >= b && c < d && e <= g + h;
// Better
int j = (a >= b) && (c < d) && (e <= (g + h));


6. Nên dùng các dòng trắng để phân chia các hàm trong một tập tin, các đoạn lệnh trong một hàm như: đoạn nhập xuất dữ liệu, các đoạn tương ứng với các bước xử lý khác nhau,



7. Mỗi dòng lệnh không nên dài quá 80 ký tự, điều này giúp việc đọc chương trình dễ dàng hơn khi không phải thực hiện các thao tác cuộn ngang mang hình.



8. Một dòng lệnh quá dài nên được tách thành nhiều dòng.

Ví dụ:

if (foo->next == NULL
&& totalcount < needed && needed <= MAX_ALLOT
&& server_active(current_input))
{
...
}
Hoặc:

for (curr = *listp, trail = listp;
curr != NULL;
trail = &(curr->next), curr = curr->next)
{
...
}

Hoặc:

int myComplexFunction( unsigned unsignedValue,
int intValue,
char *charPointerValue,
int *intPointerValue,
unsigned *unsignedPointerValue);


D. Chú thích chương trình:

1. Khi đặt các chú thích, bạn nên sử dụng dấu // vì dấu này sẽ không có ảnh hưởng khi bạn sử dụng cặp ký hiệu /* */ để vô hiệu hóa một đoạn lệnh trong quá trình sửa lỗi chương trình. Bạn nên nhớ rằng trong C/C++ không cho phép các cặp dấu /* */ lồng nhau.



2. Với các chú thích ngắn, bạn đặt nó trên cùng dòng lệnh cần chú thích. Với các chú thích dài hơn, hoặc chú thích cho cả một đoạn lệnh, bạn đặt câu chú thích trên một dòng riêng ngay phía trên câu lệnh cần chú thích.

Ví dụ:

Chú thích ngắn:

if (a == 2)
return(TRUE); // special case
else
return(isprime(a)); // works only for odd a
...
Chú thích dài:

if (argc > 1) {
// Get input file from command line.
if (freopen(argv[1], "r", stdin) == NULL)
error("can't open %s\n", argv[1]);
}

3. Không nên lạm dụng chú thích.

Ví dụ:

i++; // tăng i lên 1 đơn vị

Chú thích như trên là không cần thiết vì bản thân dòng lệnh đã nói lên mục tiêu của nó. Thay vì vậy, bạn nên cố gắng giữ cho chương trình của bạn dễ đọc, dễ hiểu qua việc trình bày chương trình rõ ràng, đơn giản và cách đặt tên hợp lý.



II. Ví dụ:
Code:

/***********************************************

* Program : Equation solving

* Written by : Nguyen Tan Dat

* Email : ntdat@fit.hcmuns.edu.vn

* Last update : 10/3/2002

************************************************/



#include

#include



#define NO_SOL 1 //no solution

#define ONE_SOL 2 //one solution

#define MULTI_SOL 3 //undefined solution





// Function name : Input

// Description : get coefficients

// Return type : void

// Argument : int *a

// Argument : int *b

void Input(int *a, int *b)

{

printf("a = ");

scanf("%d", a);

printf("b = ");

scanf("%d", b);

}



// Function name : Output

// Description : print result

// Return type : void

// Argument : int nSol -- solution type

// Argument : float x -- the solution

void Output(int nSol, float x = 0)

{

switch (nSol)

{

case NO_SOL:

printf("No solution!\n");

break;

case ONE_SOL:

printf("One solution: %f\n", x);

break;

case MULTI_SOL:

printf("Undefined solution!\n");

break;

}

}



void main()

{

int a, b; // coefficients

int nSol; // solution type

float x; // the solution



Input(&a, &b);



if (a == 0)

{

if (b == 0)

nSol = MULTI_SOL;

else

nSol = NO_SOL;

}

else

{

nSol = ONE_SOL;

x = -(float)b/a;

}



Output(nSol, x);

getch();

}
Bài viết được trích từ diễn đàn toán tin ĐHKHTN TPHCM toantin.org

August 20, 2008

Tư duy lập trình

Tư duy lập trình

Không bao giờ sợ phải bắt đầu.
Tôi sẽ không viết hai lần cùng một đoạn mã giống nhau.
Khi phát triển phần mềm, hãy nghĩ đến tương lai.
Viết mã càng ít bao nhiêu ,mắc lỗi càng ít bấy nhiêu.
Bạn sẽ không bao giờ trở thành một lập trình viên giỏi nếu chỉ tập luyện 2giờ mỗi ngày.
Tất cả các công việc đều có phần thú vị và phần buồn chán, không có ngoại lệ.
Kẻ thù số một của các lập trình viên là gì? Kiêu căng.
Lập trình viên sử dụng hầu hết thời gian của mình vào việc sửa lỗi. Chương trình càng dễ đọc bao nhiêu càng tiết kiệm thời gian bấy nhiêu.
Trường học khiến các bạn tin rằng chương trình của bạn chỉ cần thỏa mãn một mình bạn là đủ. Điều này hoàn toàn sai lầm. Chương trình phải thỏa mãn khách hàng và các lập trình viên khác.


Giới thiệu
Thế là bạn nghĩ rằng lập trình là một thế giới vô cùng thú vị, và bạn muốn tham gia vào thế giới ấy? Trước khi bạn bắt đầu, điều duy nhất mà tôi muốn khuyên là: nếu bạn thực sự yêu thích lập trình thì đó rõ ràng là công việc tốt nhất mà bạn có thể có được. Ngược lại, nếu bạn chỉ cảm thấy thích, hay không quan tâm lắm đến lập trình, thì đó rõ ràng là công việc tồi tệ nhất của bạn. Bởi vì bạn đang gia nhập vào một thế giới mà sự cạnh tranh luôn là nỗi ám ảnh không thể tránh khỏi. Phát triển phần mềm gần như là một cuộc đua tranh. Trong đó, cuộc sống của bạn là một con đường và bạn phải chạy càng nhanh càng tốt, không cần biết dưới chân có gì, cho đến khi gặp đồng bằng hoặc là đụng phải vách đá cheo leo. Nếu bạn sẩy chân, mọi thứ kết thúc, và đó hoàn toàn là lỗi của bạn. Nghe có vẻ hơi ghê gớm đúng không? Nhưng đừng để những điều đó làm bạn nản lòng. Tôi chỉ không muốn vẽ nên một viễn cảnh tươi đẹp, nơi có những cánh đồng xanh ngút ngàn và những đám mây lững lờ trôi trên nền trời xanh thẳm. Thực tế là có thể chỉ vài phút sau đó trời sẽ mưa và bạn thì chẳng mang theo dù. Thế nhưng, chính những điều không chắc chắn, những thách thức và áp lực sẽ làm cho cuộc sống trở nên đầy hứng thú.

Bạn vẫn còn đọc đến đây ư? Rất tốt, thế có nghĩa là bạn hoàn toàn nghiêm túc về điều này. Bây giờ điều tôi sẽ nói với bạn là một bản phác thảo về những gì đang chờ đợi bạn trong thế giới lập trình, chúng ta sẽ nói một ít về kỹ thuật và cả những niềm vui của thế giới ấy.


Bạn cần gì để trở thành một lập trình viên?
Tôi không nghĩ rằng có một vài yêu cầu khó khăn nào đó khiến bạn không thể trở thành lập trình viên, tôi chỉ đơn giản nghĩ rằng bất cứ ai có một ít (hay rất nhiều) mong muốn đều có thể trở thành lập trình viên. Vấn đề chỉ là bạn dành ra bao nhiêu thời gian. Điều đó có nghĩa là tôi nghĩ có nhiều quan niệm sai lầm về những kỹ năng cần có để trở thành lập trình viên. Trước tiên, bạn không cần phải thật xuất sắc trong môn Toán, bạn chỉ cần có khả năng hiểu được những điều cơ bản. Dĩ nhiên là có những ngoại lệ, nếu bạn có hứng thú trong lĩnh vực đồ họa hay lập trình game thì một kiến thức Toán vững vàng sẽ giúp bạn rất nhiều. Một quan niệm sai lầm khác là bạn cần phải là thiên tài logic. Nói chung, điều đó không phải là bắt buộc, dĩ nhiên tư duy logic càng tốt thì càng dễ dàng hơn khi tiếp cận thế giới lập trình. Vậy thì kỹ năng nào là cần thiết? Bị thúc đẩy bởi những thách thức là yếu tố quan trọng nhất. Đơn giản là vì bạn đang tham gia vào một trò chơi trong đó thách thức xuất hiện trong mọi ngõ ngách. Một điều quan trọng khác là phải không ngừng theo đuổi mục tiêu, nhưng vẫn phải luôn uyển chuyển để không đuổi theo một cách mù quáng những mục tiêu xa vời.


Còn trường học thì sao?
Trường học là nơi tuyệt vời để học mọi thứ ngoại trừ công nghệ. Đừng cho là tôi sai, tôi không nói rằng tôi nghĩ trường học là không quan trọng. Ngược lại, tôi nghĩ trường học là rất quan trọng, nhưng không phải để học lập trình. Những gì bạn nên tập trung thật sự ở trường là học cách để làm việc với những người khác trong một đề án. Cũng như học cách những người xung quanh giải quyết vấn đề và cách thức giải quyết của họ khác cách của bạn ở chỗ nào. Trường học thường bắt bạn phải làm những thứ có thể bạn không thích. Chẳng hạn, tôi nhớ lúc tôi học môn “Thiết kế trình biên dịch”, tôi tự nhủ: “Thật là mất thời gian một cách vô ích, tôi chẳng bao giờ cần phải thiết kế trình biên dịch làm gì”. Nhưng, điều tôi đã học được là làm thế nào để giải quyết những vấn đề hoàn toàn khác nhau, và kiến thức này giúp tôi làm được nhiều việc khác.


Một trong những thuận lợi bạn có được từ trường học là bạn có thể gặp gỡ bạn bè có cùng chí hướng và có thể sau này trở thành đồng nghiệp của bạn. Ngành công nghiệp phần mềm ở nhiều khía cạnh rất giống với ngành công nghiệp điện ảnh, khi có ai đó bị lôi cuốn vào một đề án đầy tham vọng, họ thường mời bạn bè cùng hợp tác. Nếu bạn không biết họ từ trước, bạn sẽ không thể mời (hay thuê), và trong nhiều trường hợp, trường học chính là nơi bạn có thể tìm được những người có cùng sở thích. Một khía cạnh khác không thể bỏ qua là trường học không chỉ dạy về kỹ thuật mà còn dạy về lịch sử, về tâm lý,… Và trong khi những thứ ấy có vẻ không liên quan trực tiếp đến lập trình, bạn có thể sẽ rất ngạc nhiên nếu biết rằng đó cũng là một trong những nguồn cảm hứng mà tôi từng có. Tôi nên bắt đầu từ đâu?


Trước tiên, tôi khuyên là bạn nên cân nhắc cẩn thận trước khi có một quyết định quan trọng. Như tôi đã nói, thế giới lập trình có thể rất lý thú, nhưng cũng đầy gian nan. Do đó, đừng bao giờ nhảy bổ vào mà không suy nghĩ kỹ. Việc đầu tiên cần làm dĩ nhiên là tìm mua một cuốn sách dạy lập trình. Nhưng có quá nhiều sách và quá nhiều ngôn ngữ. Tôi khuyên bạn nên chọn một trong các ngôn ngữ sau: C, C++, Visual Basic, Pascal (Delphi) hay Java. Khoan hãy nghĩ đến những ngôn ngữ khác, bởi vì chúng hoặc là quá phức tạp cho người mới bắt đầu hoặc là quá đơn giản để có thể đưa bạn vào thế giới lập trình. Nhưng dù thế nào thì bạn cũng nên chọn một ngôn ngữ vào thời điểm này. Những ngôn ngữ này rất giống nhau, và vô cùng mạnh mẽ. Hầu như mọi ứng dụng thương mại đều có thể được viết bởi một trong những ngôn ngữ trên. Phương pháp của tôi là chọn 2 quyển sách cho mỗi ngôn ngữ đã nêu ở trên. Đọc sơ qua trước, và chú ý các ví dụ, mã nguồn trong đó. Sau khi đã đọc sơ qua tất cả các quyển sách đã chọn, hãy chọn quyển sách gây cho bạn nhiều hứng thú nhất. Và ngôn ngữ mà quyển sách đó đề cập chính là ngôn ngữ bạn nên học đầu tiên. Bây giờ hãy chọn thêm vài quyển sách về ngôn ngữ đó, mỗi quyển, bạn hãy đọc một phần chương đầu tiên, bạn có cảm thấy quan tâm đến nó không? Nếu không, hãy bỏ quyển sách ấy và chọn một quyển khác; nếu có, hãy lật đến giữa quyển sách và một phần chương mà bạn bắt gặp, vẫn cảm thấy quan tâm đến quyển sách ấy đúng không? Tốt, đó là quyển sách có thể bạn sẽ chọn. Đừng cố hiểu nó viết cái gì, chỉ cần tìm hiểu xem nó có mang đến cho bạn sự quan tâm về ngôn ngữ đó hay không. Tiếp tục phương pháp này cho đến khi không còn quyển sách nào cả, bạn có thể tìm được quyển sách gây cho bạn nhiều hứng thú nhất để học ngôn ngữ đó.


Những công cụ cần thiết
Hãy nhìn thẳng vào vấn đề, chọn đúng công cụ sẽ làm cho công việc trở nên dễ dàng hơn. Điều này càng chính xác hơn trong lĩnh vực phát triển phần mềm. Có thể Microsoft đã tạo ra môi trường phát triển tốt nhất, Microsoft Developers Studio. Do đó, nếu bạn dùng C/C++, Visual Basic,… thì có lẽ đây sẽ là thứ bạn cần. Tuy nhiên, vẫn có nhiều công cụ thay thế miễn phí khác cho những ngôn ngữ này. Bạn có thể kiểm tra thử nếu thích.

Một công cụ khác cũng rất quan trọng, đó là trình soạn thảo mã lệnh (code editor). DevStudio có một trình soạn thảo mã lệnh tích hợp sẵn, và đó là một trong những lý do khiến nhiều người dùng nó. Cá nhân tôi không thích bị ràng buộc bởi một môi trường phát triển nào. Do đó, tôi thích dùng công cụ soạn thảo MultiEdit. Tôi đã sử dụng nó trong nhiều năm. Và tôi rất tự hào khuyên những ai muốn tìm một công cụ thay thế cho DevStudio hãy dùng nó.


Hãy là người lạc quan
Tôi từng nghe người ta nói rằng kẻ lạc quan nhất trên thế giới chính là nhà phát triển phần mềm. Trong suy nghĩ của họ, không có phần mềm nào là không thể viết được. Một ví dụ nhỏ, bạn hãy vào thử một site download phần mềm nào đó mà xem. Có hàng trăm hàng ngàn phần mềm bao gồm mọi lĩnh vực. Làm thế nào mà người ta có thể sáng tạo ra từng ấy phần mềm. Chúng nhiều và tốt đến nỗi bạn không thể nghĩ ra nên sáng tạo thêm phần mềm nào. Thế nhưng từng ngày từng giờ, các nhà phát triển phần mềm luôn sáng tạo và cho ra nhiều phần mềm mới hơn nữa, những phần mềm mà đã có thời người ta cho là không thể tạo ra được. Dù sao thì lạc quan mấy cũng phải có giới hạn. Mấu chốt của vấn đề là họ không nhìn mọi thứ một cách tổng thể, mà ở từng phần cụ thể. Ở một chừng mực nào đó, có thể xem đấy là đặc trưng của ngành thiết kế phần mềm, chia dự án ra thành những phần nhỏ và giải quyết từng phần. Nếu bạn không phân phối thời gian hợp lý, bạn sẽ không thể nào hoàn thành công việc. Khi bạn bắt đầu viết chương trình “thực sự” đầu tiên (nghĩa là chương trình có thể thực hiện được một công việc nào đó cần thiết cho mọi người, không phải cho riêng bạn), phải chắc chắn rằng bạn dành đủ thời gian để vạch ra kế hoạch về những việc bạn định làm, thứ tự thực hiện, và kết quả cuối cùng là gì. Nếu bạn làm điều này, bạn sẽ thấy mọi thứ trở nên dễ dàng hơn và có thể hoàn thành nhanh hơn là bạn nghĩ.


Hãy làm việc theo nhóm!
Nếu bạn dự định trở thành một lập trình viên đơn độc, hãy suy nghĩ lại. 99,9% các dự án đòi hỏi phải làm việc theo nhóm. Và do đó, bạn cần phải có kinh nghiệm làm việc theo nhóm, phối hợp với những người khác trong một dự án. Một khi bạn đã hoàn thành những dự án nhỏ của riêng mình, đó là lúc bắt đầu tìm cách tham dự vào một dự án có nhiều người tham gia. Đó có thể là một game, một bản demo, hay bất cứ thứ gì. Chỉ cần đó là dự án làm bạn quan tâm. Có nhiều các để tìm dự án, bạn có thể gia nhập vào những dự án đã có, tìm kiếm những nhóm vừa mới thành lập và xin gia nhập, hay thậm chí tự lập một dự án và mời người khác cùng cộng tác. Điều quan trọng nhất là bạn phải học cách làm việc cùng với những người khác để thực hiện mục tiêu chung.


Những thứ nên đọc!
Đọc sách là nguyên tắc cơ bản… Và điều này càng chính xác trong ngành phát triển phần mềm. Nếu bạn là người không thích đọc sách, có lẽ bạn nên chọn một công việc khác. Bởi vì đọc sách chính là chìa khóa để củng cố và hiện thực hóa những tiềm năng của bạn. Bạn có thể tự hỏi vì sao tôi có thể viết nhiều phần mềm trong thời gian ngắn như thế? Có 3 lý do chính: kinh nghiệm, những đồng nghiệp tài năng mà tôi luôn hài lòng khi được làm việc chung và cuối cùng là những quyển sách tôi đã đọc. Tôi không thể giúp bạn có được kinh nghiệm và những bạn đồng nghiệp giỏi, nhưng tôi có thể giới thiệu cho bạn những quyển sách hay:


Code Complete, ISBN: 1-55615-484-4.

Đây là quyển sách cần thiết cho mọi nhà phát triển phần mềm, bất kể họ đang dùng ngôn ngữ lập trình nào. Nó bao gồm nhiều bài thực hành và nhiều kỹ thuật liên quan đến phong cách viết mã.


Rapid Development, ISBN: 1-55615-900-5.

Quyển sách này hướng đến việc lập kế hoạch cho một dự án, tập trung vào những lỗi tiềm ẩn có thể mắc phải,… Đây là quyển sách cho bạn biết thế giới thực sự của ngành phát triển phần mềm.


Dynamics of Development, ISBN: 1-55615-823-8.Software

Quyển sách này có một hướng tiếp cận khác, tập trung vào việc làm việc theo nhóm và động lực của việc lập trình. Đây là điều thỉnh thoảng bị xem nhẹ, và hậu quả có thể được thấy trong nhiều dự án bị thất bại.


The Mythical Man-Month, ISBN: 0-201-83595-9.

Đây thực sự là một quyển sách nên đọc. Dù rằng nó đã được viết cách đây hơn 20 năm, thế nhưng vẫn có nhiều điều có thể áp dụng.


Programming Windows, ISBN: 1-57231-995-X.

Nếu bạn có ý định lập trình trên Windows (bằng C hay C++), bạn cần phải mua quyển sách này. Theo tôi đây là quyển sách dạy lập trình Windows tốt nhất.


The Art of Ware, ISBN: 1-55851-396-5.

Tôi là một người hâm mộ cuồng nhiệt Tôn Tử, do đó tôi rất thích thú khi đọc quyển sách này. Đây là một quyển sách có phong cách viết rất lôi cuốn, với những bài học trong binh pháp Tôn Tử được vận dụng vào ngành phát triển phần mềm.


Tổng kết
Hy vọng tôi đã nêu được một số điều cần thiết để trở thành một lập trình viên, không phải về mặt kỹ thuật mà là về mặt tư duy. Cá nhân tôi cho rằng lập trình là một công việc đầy hứng thú. Không có gì vui hơn khi nhìn thấy ai đó đang sử dụng phần mềm do bạn viết để làm cho cuộc sống của họ tốt hơn, dù chỉ là một phần nào đấy. Do đó, nếu bạn quyết định theo đuổi ngành phát triển phần mềm, tôi xin chúc bạn may mắn và hy vọng một ngày nào đó tôi sẽ có dịp download phần mềm do bạn viết để sử dụng.
Sưu Tầm!

Bắt đầu với PHP

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à . 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.