Thứ Tư, 17 tháng 6, 2009

10 PHẨM CHẤT CẦN CÓ Ở MỘT LẬP TRÌNH VIÊN

Những lập trình viên có thể có kỹ năng chuyên môn khác nhau, họ có thể đến từ nhiều nơi với văn hóa và có hoàn cảnh gia đình, kinh nghiệm làm việc khác nhau. Tuy nhiên, có một số tố chất có thể tạo nên sự khác biệt giữa một lập trình viên giỏi và một anh chàng a-ma-tơ. Dưới đây là mười đức tính cần có của một lập trình viên mà công ty bạn nên tìm kiếm.


1. Tính tò mò:


Những lập trình viên giỏi không bao giờ chấp nhận những sự việc “như nó vốn có”, họ luôn đào sâu vào các vấn đề, thậm chí ngay cả khi nó có vẻ như hoàn toàn bình thường để tìm tòi, nghiên cứu thêm. Đây chính là cách họ giải quyết các vấn đề ngay trước khi nó có thể gây ra những rắc rối thực sự, và thường thì đó là phương án giải quyết sự cố nhanh nhất. Một lập trình viên mất đi phẩm chất này thường gặp phải tình huống không thể lý giải được họ đang làm gì và tại sao họ lại làm điều đó, cũng tương tự như kiều họ làm việc mà lại đeo một cái bịt mắt vậy. Trừ khi ứng viên đó thực sự là người nhút nhát, bằng không tính tò mò của anh ta sẽ thể hiện rõ ngay trong cuộc phỏng vấn.

2. Kỹ năng suy nghĩ mạch lạc


Rõ ràng là nghề lập trình giống như việc giải một bài toán logic. Việc thực hiện phép tính 2+2=4 là quá đơn giản và hầu như ai cũng có thể làm được. Tuy nhiên để làm bài toán “2+x=4” thì không phải ai cũng có thể suy ra được là x=2. Điều này lý giải tại sao tôi thường ưu tiên những lập trình viên giỏi các môn khoa học tự nhiên và toán. Việc giỏi các môn tự nhiên sẽ giúp họ làm việc tốt hơn, nhưng quan trọng hơn nó thể hiện đây là người có đầu óc tư duy logic tốt. Trong cuộ phỏng vấn, khi bàn luận về công việc, đôi khi tôi cố tình bỏ lửng câu nói của mình và để xem ứng viên có thể “điền” nốt vào chỗ trống hay không. Ngoài ra, nếu trong quá trình tuyển dụng có bao gồm cả những bài test thì đây là cơ hội tốt để kiểm tra kỹ năng này.

3. Kỹ năng đọc nhanh và đọc hiểu tốt


Một chút hiểu nhầm khi nói đến năng suất làm việc của lập trình viên đó là đa phần công việc của một người làm lập trình không phải là ngồi gõ code mà một phần đáng kể thời gian trong một ngày làm việc của họ dành cho việc đọc, từ đọc code do người khác viết, các website với ví dụ, tài liệu cho đến đọc các yêu cầu chi tiết của một project. Những lập trình viên mà khả năng đọc hiểu chậm, hoặc tệ hơn nữa là không hiểu họ đang đọc những gì thì nhẹ nhất là hiệu quả làm việc không cao, nặng nhất là gây ảnh hưởng nghiêm trọng đến dự án. Bạn có thể sẽ không muốn ai đó trong số những nhân viên của mình đọc nhầm yêu cầu chi tiết sau đó mất cả vài tuần để thực hiện yêu cầu nhầm lẫn đó và đẩy bạn vào tình huống khó xử khi phải giải trình sự chậm trễ của project với các nhà tài trợ. Tuy nhiên, cũng không dễ để có thể kiểm tra khả năng đọc của các ứng viên trừ khi bạn cho họ làm thử một bài test trong khi phỏng vấn.

4. Tính tỉ mỉ


Tính tỉ mỉ là bà con gần với tính tò mò. Một lập trình viên thường chú ý đến các chi tiết nhỏ sẽ làm việc hiệu quả hơn những người khác trong những điều kiện làm việc như nhau. Nhưng thật không may là việc đánh giá phẩm chất này thường là rất khó. Tuy nhiên đôi khi trong quá trình phỏng vấn ứng viên lại thể hiện được đức tính này, có thể là thông qua một lời nhận xét rất tự nhiên hoặc một chỉ qua một sự việc rất nhỏ vô tình xảy ra trong khi phỏng vấn.

Ví dụ có lần một ứng viên đã rất tự nhiên nhận xét về cái áo sơ-mi tôi đang mặc và nói rằng anh ta cũng là fan của nhà thiết kế đó. Điều này đã nói lên rất rõ rằng anh ta là một người hết sức tỉ mỉ (cũng như khiếu thời trang của anh ta nữa). Và tất nhiên là những người không có tính tỉ mỉ cẩn thận cũng sẽ thể hiện ngay trong khi phỏng vấn. Những ững viên đến phỏng vấn với cái quần chưa kéo khóa hay vẫn còn dính mẩu giấy vệ sinh dưới gót giày thì rõ ràng không thuộc tuýp người này.

5. Khả năng học hỏi nhanh nhạy


Trừ khi công ty của bạn phát triển những công cụ lập trình, như là trình biên dịch hoặc các IDE (môi trường lập trình tích hợp vào ứng dụng) còn lại các lập trình viên sẽ làm việc với các project bên ngoài phạm vi lập trình. Cũng giống như một nhà báo cần phải hiểu ít nhiều về chủ đề mà họ viết bài và như người giáo viên giỏi cần phải có kiến thức nền vững vàng ở chuyên ngành mà họ dạy, người lập trình viên giỏi cần phải nắm bắt được môi trường làm việc của phần mềm mà họ viết ra. Tất nhiên là bạn không cần phải có bằng kế toán cộng với bằng vi tính để làm việc với các phần mềm kế toán, tuy nhiên một lập trình viên mà không thể hiểu những vấn đề toán học cơ bản và các quy luật kinh doanh liên quan thì rõ ràng là một bất lợi lớn.

Thêm vào đó, tôi sẽ đưa những ứng viên có khả năng nhất đi thăm một vòng quanh công ty và giới thiệu sơ qua với họ về cách thức làm việc của công ty. Những ứng viên đặt ra những câu hỏi thể hiện rằng họ hiều những gì tôi đang nói hoặc những ứng viên tỏ ra nắm bắt được vấn đề sẽ nhận được điểm cộng trong quyết định tuyển dụng cuối cùng.

6. Kỹ năng tự học


Không trường lớp nào có thể đào tạo cho bạn tất cả những thứ bạn cần cho công việc lập trình sau này. Chính vì thế, khả năng tự học qua sách báo, tài liệu, Internet và qua cả mọi người là không thể thiếu. Kết hợp với những dự án làm việc trong thực tế, bạn sẽ dần dần thành thạo những gì mình đã tự học được.

7. Đam mê


Một số lập trình viên được gọi là những tay chuyên làm việc ban ngày, họ có thể ngồi gõ code từ 9AM đến 5PM, từ thứ Hai đến thứ Sáu và sau đó không nghĩ ngợi 1 chút nào về lập trình ngoài khoảng thời gian đó. Điều này cũng tốt thôi bởi lẽ không phải ai cũng có thể là một gã nghiền lập trình đến mức ăn lập trình, ngủ lập trình, thậm chí thở cũng lập trình nữa. Trước đây tôi đã từng thuê những người như vậy để lấp chỗ trống hoặc thực hiện những dự án đã được đinh hướng trước. Nhưng khi tôi cần một lập trình viên hàng đầu (bất kể mức độ kỹ năng và kinh nghiệm) thì tôi cần tuyển ai đó có niềm đam mê với công việc.

Niềm đam mê là một liều thuốc có tính chất quyết định thành công hay thất bại của một project có yêu cầu rất cao kỹ năng và và phương pháp. Suy cho cùng thì những tay chuyên chăm chỉ ban ngày này sẽ không có động lực để học được cách tốt nhất để hoàn thành công việc, thay vì vậy họ vẫn sẽ làm như cách mà họ vẫn đang làm mà thường đó không phải là cách tốt nhất. Những người này cũng khó có thể duy trì được phong độ làm việc của mình mà không được tăng lương và thưởng một cách đều đặn, bởi vì họ làm việc vì tiền, chứ không phải vì công việc. Những ứng viên có niềm đam mê với công việc rõ ràng sẽ thể hiện rất rõ trong buổi phỏng vấn, đó là những người luôn cảm thấy rất hứng khởi mỗi khi bạn nói về các dự án hoặc là những người rất hào hứng khi nói về các dự án mà họ đã thực hiện trong quá khứ.

8. Khả năng thích nghi:


Bạn đã bao giờ hoành thành một project với những thông số kỹ thuật chi tiết giống như khi nó bắt đầu? Tôi cũng chưa từng làm vậy, kể cả với những project nhỏ được hoàn thành trong không đến một ngày. Những lập trình viên không thể kiểm soát thay đổi tốt có lẽ sẽ không thành công lắm trong sự nghiệp, ngoại trừ với những project lê thê mà có thể kéo dài cả năm và thường là các dự án có sự góp mặt của chính phủ. Tất nhiên là tôi không có ý chế nhạo những project như thế này hay các lập trình viên tham gia vào đó. Nhưng đa số các project này đơn giản là không phù hợp do thiếu đi khả năng thích nghi.

Việc các ứng viên có phải là người dế thích nghi hay không hay cũng được thể hiện rất rõ trong cuộc phỏng vấn, nhất là khi bạn hỏi những câu hỏi như “Những yêu cầu có thường xuyên thay đổi không?”. Những ứng viên có câu trả lời là “Chắc chắn rồi, đó là điều thường xảy ra với tất cả các project và đó là một phần của cuộc sống” là người chiến thắng. Còn những người liên tục đảo mắt và nói “Vâng, điều đó giải thích tại sao tôi không thể hoàn thành bất cứ việc gì” có lẽ sẽ không phải là một người phù hợp với đa số môi trường làm việc hiện nay.

9. Kỹ năng giao tiếp tốt


“Kỹ năng giao tiếp” không đồng nghĩa với việc bạn “nói tiếng anh hoàn hảo” mà nó có nghĩa là “bạn có thể truyền đạt được một ý tưởng chính xác và đầy đủ”. Việc sử dụng hình ảnh, âm thanh, động tác của tay cũng là một trong những kỹ năng giao tiếp. Những lập trình viên gặp khó khăn trong việc hiều những gì người khác đang cố gắng nói cho họ biết sẽ không làm việc hiệu quả trong thời gian lâu dài. Khả năng này rất khó có thể được đánh giá chính xác qua cuộc phỏng vấn qua điện thoại, nhưng khi các ứng viên gặp khó khăn trong giao tiếp thậm chí ngay cả trong cuộc phỏng vấn trực tiếp thì bạn có thể chắc chắn rằng anh ta cũng sẽ gặp khó khăn trong công việc.


10. Kiên nhẫn:


Các vấn đề mà các lập trình viên phải giải quyết thường là các vấn đề khó có thể giải quyết ngay lập tức. Nó mất nhiều giờ, nhiều ngày, thậm chí nhiều tháng làm việc một cách cẩn thận để giải quyết, tìm hướng đi. Nhiều khi bạn đi sai hướng lại phải quay lại giải quyết từ phần đã giải quyết đúng và bắt đầu lại.


Thứ Ba, 9 tháng 6, 2009

"Tự tin & Nỗ lực sẽ đạt ước mơ"


Tôi kể lại những hồi ức đã xảy ra cách đây gần 10 năm vì tôi muốn nói với các bạn một điều: nếu các bạn đang muốn gia nhập vào ngành CNTT, hãy tự tin và nỗ lực, bạn sẽ đạt được ước mơ.

Từ một cô gái tỉnh lẻ chẳng biết chút kiến thức nào về CNTT, cũng chẳng phải nộp đơn vào ngành này, tôi đến với CNTT hoàn toàn tình cờ và tự nhiên.

Tôi còn nhớ rõ hôm ấy là ngày nộp đơn chọn chuyên ngành của ĐH Kinh Tế TP.HCM. Bị thuyết phục bởi bài giới thiệu về khoa toán-tin học, chuyên ngành xử lý thông tin của trường, khi biết số điểm mình đạt yêu cầu tôi đã không do dự nộp đơn vì lý do đơn giản đây là ngành ít người học, mới và được trường đầu tư khá cao. Tâm trạng của tôi lúc đó vừa lo lắng vì mình chưa có kiến thức gì về máy tính, vừa vui mừng vì mình sẽ được thử sức trong lĩnh vực mới phát triển.

Bốn năm ngồi trên giảng đường, lọc cọc đạp xe mỗi ngày vào phòng máy của trường để thực hành, những nỗi lo lắng lúc ban đầu trong tôi dần biến mất và thay thế vào là niềm say mê gắn bó với máy tính và tự tin dần với chuyên ngành mà tôi đã chọn.

Khi ra trường, tôi trúng tuyển vào công ty G.O.L, làm việc tại bộ phận tin học với nhiệm vụ ban đầu là tham gia xây dựng chương trình phần mềm quản lý các hoạt động của công ty. Với những kiến thức trang bị ở trường, tôi hơi bối rối và lo lắng vì giữa kiến thức học ở trường và yêu cầu thực tế của công việc có khoảng cách. Nhiệm vụ đầu tiên của tôi là phải làm mất dần khoảng cách đó bằng cách học hỏi kinh nghiệm của đồng nghiệp, của những đàn anh ở các công ty khác và trong sách vở, Internet.

Thời gian đó khá khó khăn đối với tôi, tất cả mọi thứ đều mới cả. Nhưng sau này, khi vượt qua, tôi mới nhận thấy một điều khá "hiển nhiên" là những kiến thức nền tảng tôi được các thầy cô trang bị ở trường vô cùng quý giá. Bạn không thể phát triển tiếp nếu không có những kiến thức đó. Ngẫm lại, từ nhà trường ra xã hội, kiến thức là một chuỗi liên hoàn, bổ sung và hỗ trợ nhau phát triển. Bạn sẽ không xây dựng được "toà nhà" kiến thức kiên cố nếu không có cái nền cơ bản, và kiến thức học được ở trường chính là cái nền đó. Do đó, hãy thu nhận thật tốt những gì được trang bị ở trường, và quan tâm tìm hiểu thêm về những đề tài, gợi ý mở rộng mà thầy cô cung cấp.

Với nghề lập trình, tôi cũng đã từng làm việc "overtime" để kịp giao hàng cho khách, có thể nói, đầu tư thời gian và trí lực cho công việc khá nhiều. Không ít lần tôi phải thức qua đêm làm việc với nhóm, do đó, bạn cần có sự thông cảm và động viên của gia đình, hãy tận dụng chìa khoá ấy. Nghề lập trình tuy vất vả nhưng bù lại, tôi luôn được sự động viên của ban giám đốc và sự quan tâm của đồng nghiệp, hạnh phúc khi sản phẩm hoàn chỉnh... Những điều này đã kích thích, duy trì niềm say nghề, thổi đi nỗi nhọc nhằn trong tôi. Đó là niềm vui mà không nhiều nghề khác được: Phần mềm của chúng tôi được áp dụng, khách hàng hài lòng... Nhưng đôi lúc ngồi nhớ lại, tôi cũng giật mình vì sức chịu đựng áp lực cao của bản thân. Điều đó chỉ có một lý giải duy nhất là niềm say mê và trách nhiệm trong công việc.

Thiết nghĩ nghề nào cũng có những khó khăn và thuận lợi. Nghề lập trình cũng vậy, hoàn toàn không ngoại lệ. Nghề này cần có những tố chất: chịu khó, cần cù và khả năng sáng tạo. Phụ nữ dĩ nhiên cần cù, chịu khó hơn nam. Tố chất còn lại, theo tôi, trong xã hội hiện đại, thực tế công việc đã chứng minh khoảng cách giữa nam và nữ không còn. Thành công hay thất bại phụ thuộc ở lòng say mê, tìm tòi và học hỏi cái mới từ bản thân người lập trình.

Có quan điểm cho rằng nghề lập trình phải đầu tư nhiều sức lực, thời gian, thì không còn thời gian cho riêng mình và gia đình. Theo tôi, vấn đề là cách sắp xếp phân bổ thời gian cho hợp lý. Dĩ nhiên NLT có vất vả hơn nam, nhưng đây là cơ hội để bạn rèn tính "chịu thương, chịu khó", tôi tin bạn sẽ được bù đáp tương xứng.

Khi nào còn yêu nghề, tôi còn gắn bó với CNTT, và dĩ nhiên khi bạn làm tốt công việc lập trình, có tố chất quản lý, phát triển và định hướng trong công việc, bạn còn có những bước tiến xa trong nghề, không chỉ dừng lại ở LTV. Kiến thức luôn luôn mở rộng và cập nhật, công việc của bạn cũng vậy.

Minh Trí (Theo PC World VN)

Thắp Lửa Say Nghề


Phái yếu làm nghề lập trình không nhiều, những người trụ lại được và theo nghề chỉ đếm trên đầu ngón tay. Dân trong nghề truyền nhau rằng "tuổi thọ của nghề lập trình với nữ giới chỉ được tính đến khi lập gia đình". Tuy nhiên, rất may mắn chúng tôi đã gặp được một trong số ít những "ngoại lệ" – Ngô Thị Giao Quỳnh, lập trình viên công ty Vietsoftware.

Hai đảm đang

Theo học 2 chuyên ngành khác nhau: ngoại thương và toán-tin, nhưng Quỳnh đã chọn theo nghề lập trình. Cũng bởi đam mê mà chị luôn cố gắng vượt qua những khó khăn để được sống với nghề. Sau khi tham gia vào nhóm phát triển sản phẩm phần mềm (PM) thương mại của công ty một thời gian, Quỳnh được chuyển sang nhóm làm PM gia công. Khách hàng mà Quỳnh cùng mọi người trong nhóm đang phục vụ đến từ nước ngoài, khá khó tính, khắt khe về công nghệ, thời gian cũng như chất lượng. Chính vì vậy, những người được lựa chọn phải vừa giỏi công nghệ lại vừa giỏi ngoại ngữ, nhanh nhẹn, đáp ứng được yêu cầu của khách hàng về tiến độ, chất lượng và luôn luôn đổi mới. Cuốn theo công việc, yêu cầu của khách hàng ngày càng cao và sâu hơn lại càng gây nhiều áp lực cho LTV. "Vào những ngày sắp chuyển giao sản phẩm, chúng tôi phải tập trung cao độ cho công việc, rất mệt và căng thẳng", Quỳnh thổ lộ


Nỗ lực theo nghề

Những ngày đầu chập chững vào nghề, chị cũng phân vân trước định kiến con gái khó theo được nghề lập trình. Nhưng niềm say mê với nghề đã giúp chị vượt qua. Sau khi lập gia đình, rồi có con (em bé của chị hiện đã hơn 1 tuổi), nhiều người tưởng chị sẽ chuyển sang công việc khác như rất nhiều nữ đồng nghiệp. Nhưng vốn bướng bỉnh, càng khó khăn chị càng cố gắng để chứng tỏ mình.

Quỳnh cho biết: "Khi có gia đình thì không thể vùi đầu cả ngày với máy tính, phải cân bằng, thu xếp thời gian sao cho việc gia đình và cơ quan đều phải vẹn toàn. Không thể để ông chồng ngày này qua ngày khác nấu cơm, chăm con". Để duy trì sức làm việc như trước, chị phải lên kế hoạch làm việc thật sít sao, gạt ra ngoài những sở thích của bản thân. Hai năm rồi chị chưa có thời gian đi du lịch dù đó là một sở thích của chị. Rồi nữa, đi mua sắm quần áo, làm đẹp cho bản thân cũng bị hạn chế tối đa để dành trọn hai ngày nghỉ trong tuần cho gia đình.

Liệu chị có cảm thấy mình thiệt thòi hơn so với những người phụ nữ khác không? "Tôi không nghĩ là mình thiệt thòi. Không quá cầu toàn được nhưng xây dựng gia đình hạnh phúc cũng như vẫn đảm bảo hoàn thành công việc thì đó là giải pháp tối ưu. Chồng tôi và mọi người luôn tạo điều kiện để tôi được làm và hoàn thành công việc mà mình yêu thích, đó là hạnh phúc và may mắn với tôi".

"Có khi nào chị cảm thấy quá sức và muốn dừng?" Chị lắc đầu trả lời: "Tôi không cảm thấy quá sức bởi khi ngồi vào bàn làm việc, giải quyết được vấn đề nào đó tôi lại cảm thấy sung sướng và hứng khởi để tiếp tục khám phá, chinh phục. Và đây cũng là lý do tại sao tôi quyết định theo nghề lập trình. Ngoại thương không mang lại cho tôi cảm giác đó”. Tuy nhiên, chị Quỳnh cũng không thể phủ nhận thực tế là khi có gia đình, NLT không thể triền miên với công việc. Song điều này cũng không có nghĩa là các NLT thường bỏ bê, không hoàn thành nhiệm vụ. Theo chị Quỳnh quan trọng là phải chuyên nghiệp, không nên để những việc khác xen vào, ảnh hưởng đến tiến độ và chất lượng của công việc. "Tôi trụ được với nghề và đến bây giờ chưa nghĩ đến chuyện giải nghệ cũng nhờ sự thông cảm và chia sẻ của gia đình. Cố gắng không mang việc về nhà, những ngày cuối tuần dành trọn cho gia đình. Ngược lại tôi cũng nhận được sự trợ giúp rất quý báu từ ông xã như đưa đón em bé đi nhà trẻ, hỗ trợ một số công việc gia đình. Nhờ vậy mà đến nay tôi vẫn duy trì được lịch làm việc đều đặn" - chị chia sẻ.

Hạnh Linh (Theo PC World VN)

Để trở thành một lập trình viên giỏi

Đây là những yếu tố cần để bạn trở thành một lập trình viên giỏi:

1. Đam mê - đây là yếu tố hàng đầu và quan trọng nhất để thành công. Bạn cần có nó để có thể vượt lên số đông. Tất cả lập trình viên giỏi đều có niềm đam mê mãnh liệt, họ không phải là "siêu nhân", họ không biết hết mọi thứ nhưng bởi vì có đam mê nên họ khao khát học hỏi cái mới và có thể tạo ra các sản phẩm nổi bật giúp ích cho mọi người.

2. Thông minh - không cần là thủ khoa hoặc đạt điểm 10 thì mới gọi là thông minh. Yếu tố này có vẻ chủ quan nhưng ý của tôi ở đây là khi một cá nhân có khả năng hoàn thành một công việc trong một khoảng thời gian nào đó, hoặc có khả năng nảy sinh ra ý tưởng, giải pháp để giải quyết vấn đề. Tất cả chúng ta đều thông minh, không ai ngu ngốc cả, quan trọng là cách bạn hiểu chính mình, hiểu thế mạnh của mình và dựa trên nó. Tất cả lập trình viên đều có điểm mạnh và điểm yếu. Ví dụ: bạn có thể thiết kế giao diện rất tệ, nhưng bạn có thể kiểm tra giao diện của người khác và biết cách cải tiến nó.

3. Chia sẻ - trong lĩnh vực này, chúng ta học bằng cách chia sẻ. Bạn sẽ không thể học hết mọi thứ mà không cần chia sẻ. Càng chia sẻ, chúng ta càng biết nhiều hơn, càng thông minh hơn và càng giỏi hơn. Ta có thể chia sẻ mọi thứ, từ các tài nguyên, thủ thuật, đến cách viết code hoặc viết tài liệu. Cách dễ nhất để cùng lúc chia sẻ và học là tham gia vào các nhóm thảo luận, tham gia các nhóm ngoài sở trường của bạn, ví dụ như nếu bạn là một lập trình viên Java, hãy thử tham gia nhóm thảo luận về CSDL (vd: Oracle, MySQL) ở đó bạn có thể học kỹ hơn về kiến trúc dữ liệu, hiệu suất thực thi, ...

4. Thực hành - nói đến thế giới phát triển phần mềm là nói đến thực hành và kinh nghiệm, bạn càng thử nghiệm nhiều thì bạn càng gặt hái được nhiều kinh nghiệm. Hãy tiếp tục thử nghiệm để thấy bạn có thể sử dụng chúng giúp ích cho dự án công ty hay dự án cá nhân.

5. Thời gian - sử dụng thời gian của bạn một cách thông minh và lên kế hoạch một cách phù hợp. Thời gian là thứ mà bạn không thể mua. Tôi từng thấy một số lập trình viên tiêu phí thời gian của họ vào những việc vô bổ thay vì học những cái mới cho công việc/sự nghiệp của họ, và cũng chính các lập trình viên đó nói với tôi là họ muốn trở thành một kiến trục sư phần mềm trong vòng 3 năm, tôi chỉ biết nói là "Chúc bạn may mắn!".

Các yếu tố trên là các điểm cốt yếu giúp bạn định hướng trở thành một lập trình viên giỏi. Cũng giống như những điều khác trong cuộc sống, nếu bạn muốn đạt được một cái gì đó thì bạn cần phải đầu tư. Trong trường hợp này thì bạn cần phải đầu tư vào chính mình và nhận được kết quả càng sớm càng tốt bởi vì thời gian đang trôi qua và bạn sẽ không bao giờ trẻ lại.

Lời khuyên cho các lập trình viên trẻ



Đây là lời khuyên của tôi dành cho các bạn lập trình viên trẻ, đang đứng trước ngưỡng cửa học vấn và yêu thích lập trình.

Giỏi tiếng Anh


Điều kiện tiên quyết. Bạn không thể tư duy lập trình tốt nếu không có tư duy về ngôn ngữ. Hơn nữa, tiếng Anh là ngôn ngữ chính trong giới lập trình.

Hãy chọn một ngôn ngữ và nền tảng nào mang lại kết quả nhanh nhất

Đừng bắt đầu với những ngôn ngữ cấp thấp. Hãy chọn ngôn ngữ mang lại cho bạn kết quả nhanh nhất cũng như mang lại hứng thú cho bạn. Bạn có thể chọn Python.


Tham gia các diễn đàn và cộng đồng trực tuyến

Bạn sẽ học hỏi được nhiều. Hãy chủ động và thông minh khi thảo luận.


Đừng dây dưa vào các cuộc tranh cãi chính kiến trong lập trình

Phí thời gian vô ích trong khi bạn có thể dùng nó để viết nên những phần mềm có ích.


Biết kiên nhẫn, tự ý thức và khiêm tốn

Biết những gì bạn biết. Biết những gì bạn chưa biết. Đừng thất vọng về những gì mình chưa biết, bạn sẽ tiến bộ nếu tiếp tục học.


Học thêm các công nghệ cùng với học lập trình

Học thêm về cơ sở dữ liệu, XML, các giao thức mạng, các API,... Hãy biết thêm nhiều thứ khác bổ trợ cho việc viết code.


Đừng bỏ qua lý thuyết

Không thể đi lên khi không có nền tảng.


Đừng mua các cuốn sách "For Dummies", "21 ngày"

Bởi vì khi đó bạn đã thừa nhận mình là "dummy". Những cuốn sách "mì ăn liền" thế này sẽ không giúp được gì nhiều cho tư duy của bạn.


Mua sách về các ngôn ngữ lập trình khác

Để biết thêm về xu hướng cũng như điểm khác nhau, điểm hay, dở của các ngôn ngữ lập trình.

Mua các cuốn sách về công nghệ và lập trình tổng quát

Nó sẽ dạy cho bạn cách tư duy để hiểu rõ hơn về những gì mình đang làm.

Nếu có thể, tìm một người cố vấn giàu kinh nghiệm

Điều này sẽ rất có ích. Tuy nhiên hãy trân trọng thời gian của họ và của mình, đừng hỏi những câu mà bạn có thể tự tìm ra.

Các giai đoạn của 1 lập trình viên


Để học bất cứ một ngôn ngữ lập trình nào những người mới bao giờ cũng phải trải qua 6 giai đoạn.

1. Quan niệm
2. Thử nghiệm
3. Trải nghiệm
4. Kiểm nghiệm
5. Chiêm nghiệm
6. Sáng tạo

Quan niệm

Hãy xác định nhiệm vụ học cho các bạn. Không có định hướng, không còn tầm nhìn bao quát về thế giới phần mềm và không có cá tính, bạn chắc rồi cũng rời bỏ sớm ngành phần mềm nếu không thì cũng chỉ là một coder hay tester ba phải, người mà lúc nào cũng chỉ được coi là một nhân vật bình thường về mọi mặt, không có sự nổi bật và luôn đứng đầu trong đề cử danh sách về hưu non.

Tiêu chuẩn số 1 của một nhà phát triển phần mềm giỏi là sự đề cao tự học. Trường lớp hay trung tâm không phải là nơi đáng tin cậy để học vì người giỏi ko bao giờ chịu mài đũng quần trên ghế bục giảng để giảng đi giảng lại một thứ kiến thức liên tục cũ đi sau vài tháng. Nếu người giỏi thích nói chuyện thì conference là chỗ của họ vì họ thích trao đổi với các industry expert chứ không phải là dọa dẫm học viên.

Diễn đàn này cũng có thể là nơi để học hỏi nhưng đừng nghĩ là người có hiểu biết sẽ trả lời bạn một cách tường tận và chi tiết như thể họ là ông nội của bạn vậy. Muốn họ trả lời hãy học cách hỏi, trước khi hỏi hãy search. Sau khi nhận được câu trả lời hãy search.

Thử nghiệm

PHP là một công nghệ bao gồm có 6 bộ phận:
+ Bộ thông dịch
+ Ngôn ngữ
+ Cấu trúc dữ liệu
+ Các thuật toán trên dữ liệu hay còn gọi là các API
+ Các công nghệ đi kèm hoặc có thể giao tiếp được với PHP.
+ Các best practice đặc thù của riêng công nghệ đó.

Hãy tập cài đặt bộ thông dịch PHP, Apache, MySQL và chạy triển khai các ứng dụng PHP có sẵn.
Hãy thử nghiệm ngôn ngữ PHP với các vòng lặp, điều kiện, in, nhúng HTML, làm quen function, method, class
Cấu trúc dữ liệu là một phần khác của PHP. Ở công nghệ này Hash, Array và Map đều được gộp vào kiểu array. Rất dễ chịu cho bạn khi bạn đã từng làm quen với các cấu trúc dữ liệu của C# hay Java.
Cấu trúc dữ liệu không phải là một cấu trúc chết. PHP cung cấp khoảng hơn 1000 function (API) xử lý nó. Array là một kiểu như vậy. DOM là một kiểu khác. Làm bài tập trên các API dạng này là một cách tốt để làm quen với ngôn ngữ và bộ thông dịch. Các bài tập có thể chỉ là in ra một cái resume, tạo một cái layout đơn giản nhất từ việc sử dụng include, tạo một form nhập liệu đơn giản, tạo một form upload đơn giản...

Tài liệu sách vở thì có rất nhiều. Bạn nên đọc các chương trong PHP Manual. Đọc các tutorial trên mạng và luyện tiếng Anh. Các ebook đáng chú ý:

++ Apress Beginning PHP and MySQL 5 From Novice to Professional 2nd Edition (2006)
++ Apress Beginning PHP and PostgreSQL E.Commerce (2006)
++ Prentice Hall PHP 5 Power Programming (2004)
++ O'reilly Programming PHP 2nd Edition (2006)


Các công nghệ đi kèm với PHP là một thế giới cực kì phức tạp. Bạn có thể sẽ làm quen với các công nghệ opcode hay biên dịch mã PHP ra mã nhị phân để chạy thay vì nhìn nó dưới dạng text. Nó là một extension nguồn mở của công nghệ PHP. Bạn cũng có thể quan tâm đến việc sử dụng PHP để giao tiếp với các hệ thống con trong Linux như shared memory, gettext, socket, stream... Socket và stream là các công cụ vạn năng để PHP giao tiếp với các hệ thống phần cứng và phần mềm. Bạn cũng có thể quan tâm đến sử dụng PHP và C trên cùng một file PHP thông thường hay nhúng mã dll của các thư viện trên Windows vào PHP và sử dụng lại. PHP làm việc này thông qua việc sử dụng một ext. mã nguồn mở do Wez viết có thể tải về PECL. Bạn cũng có thể quan tâm đến việc sử dụng PHP để viết các ứng dụng desktop mà bạn có lẽ vẫn dùng VB để viết bằng cách sử dụng thư viện GTK.

Tuy nhiên điều bạn có thể sẽ quan tâm hơn cả là liệu PHP được hỗ trợ như thế nào để giao tiếp với các hệ thống khác. PHP có thư viện để giao tiếp với Active Directory, LDAP, các hệ thống hỗ trợ SMTP/POP3/IMAP/FTP/SSL, SMS Gateway, GIS server, Router... PHP được Java hỗ trợ tốt để trở thành một công nghệ trên Java platform và nhờ đó bạn có thể gọi các gói Java để sử dụng lại hay sử dụng các application server của Java như Sun One Webserver, Glassfish application server thay cho Apache server hoặc sử dụng các dịch vụ Java khác như OpenSSO. JSON và XML được hỗ trợ buit-in trong PHP cũng là phần rất đáng tìm hiểu vì các nhà công nghiệp phần mềm ở các tổ chức chuẩn công nghiệp như OASIS, ECMA hay W3C sử dụng các gọi này để giúp PHP hỗ trợ kiến trúc Webservice/SOA, SDA, MDA (phần này do IBM đóng góp cho cộng đồng PHP).....

Phần PHP giao tốt tốt nhất có lẽ là database. OCI do Oracle đóng góp, DB2 do IBM đóng góp, libmysql do MySQL AB đóng góp và pgsql do cộng đồng PostgreSQL đóng góp và luôn hỗ trợ các bản database mới nhất. Ngoài ra PHP có sẵn một database server SQLite nhúng đi kèm với mọi bản PHP 5.0+ có thể giúp bạn tiện trong việc xử lý các nhóm data nhỏ nhưng đủ mạnh mẽ như Access.

PHP là một công nghệ đặc biệt và nó có các đặc trưng riêng như share nothing. Điều này làm cho PHP có tính scalability rất tốt và được các mạng xã hội rất chuộng. Không phải ngẫu nhiên mà Tim Bray, giám đốc các công nghệ Web của Sun lại cho là PHP có tính scalable hơn Java trên tầng presentation (www.tbray.org/talks/php.de.pdf) trong khi từ trước đến nay họ vẫn tự hào là công nghệ Java cho họ thống trị thế giới web doanh nghiệp, các phần mềm ngân hàng và thị trường viễn thông, vượt trội cho với công nghệ .NET của Microsoft. Đặc điểm này của PHP cũng là tâm điểm tạo ra các best practice mà bạn cần khai thác khi lập trình với PHP.

Trải nghiệm

Là giai đoạn bạn bắt đầu quan tâm đến việc dùng PHP để code các ứng dụng sản xuất bằng việc tự tin sử dụng các API. Giai đoạn này hoàn toàn phù hợp với việc lấy một chứng chỉ Zend nếu bạn muốn. Tuy nhiên Zend chỉ chứng nhận bạn là có kĩ năng để nhớ API, một điều khá cần để code API với notepad Đặc trưng của giai đoạn này là thực hành để có các cảm nhận chung về kĩ năng code. Giai đoạn này sẽ đem lại cho bạn một niềm tự hào trẻ con nhưng rất cần thiết. Giai đoạn này bạn sẽ phải kết hợp PHP với CSS/XHTML, graphic design, SQL, web authoring, Javascript, web hosting, system scripting... Là một lập trình PHP, bạn tự biết mình phải đa tài hơn các lập trình viên ASP.NET, nơi tooling thống trị kĩ năng handcode, hơn Java, nơi mà kĩ năng viết business logic được chú trọng hơn

Kiểm nghiệm

Nếu như giai đoạn trải nghiệm là giai doạn code bung bét, bug tùm lum, bảo mật bằng không thì đây chính là lúc bạn quan tâm đến việc refactor lại code. Bạn có thể tạo ra nhiều function và class hơn trong một nỗ lực cố gắng làm cho chúng modular hơn. Bạn sẽ cố áp dụng các thư viện như PEAR hay Smarty, PHPSavant vào ứng dụng của bạn để làm cho cách code của bạn đi vào chiều hướng ổn định. Lúc này bạn đã thấy được sự cần thiết phải có một coding convention nhất quán ([url=http://pcdinh.googlepages.com/phpvietnamcodingstandards]Reference[/url). Bạn sẽ quan tâm đến bảo mật hơn. Giai đoạn này sẽ giúp bạn có một lối tư duy chín chắn hơn nhưng nhiều lo ngại hơn vì bạn cho rằng bạn vẫn chưa thực sự hiểu PHP.

Chiêm nghiệm

Đây là giai đoạn bạn đã tiến đến mức cao. Bạn đã nắm được bản chất của PHP. Bạn quan tâm đến cơ chế PHP vận hành ở mức compiler hơn. Bạn bắt đầu học UML, design pattern, tìm hiểu về các hệ thống lớn. Bạn đã vững vàng trong việc tạo ra các lớp và muốn tổ chức các lớp đó cho khoa học hơn. Bạn quan tâm đến các software engineering processes và tự hỏi làm sao để áp dụng XP, Scrum hay các agile methodology khác. Bạn sẽ quan tâm đến performance, object oriented engineering, database design, system architect, code review. Bạn sẽ bắt đầu chán Pear và ghét Smarty. Việc tương tác giữa PHP và các hệ thống khác như Python, Ruby, Jaav, Erlang .. trở nên quan trọng hơn với bạn lúc này vì cuối cùng thì bạn đã nhận ra PHP có nhiều điểm yếu nhưng không tới mức phải thay thế PHP bằng 1 giải pháp khác. Các công nghệ mã nguồn mở và tự do sử dụng phân phối như Java, Perl, Python, Ruby, JRuby, Groovy, Erlang, Lua... cho phép chúng tận dụng các thư viện của nhau cũng như các điểm mạnh riêng của nhau. Đó là thời gian bạn thấy sung sướng vì đã chọn 1 công nghệ nguồn mở như Java hay PHP hay Python.

Sáng tạo

Là giai đoạn cao nhất và cũng phức tạp nhất vì lúc này bạn đã hiểu công nghệ đến mức có thể triển khai các hệ thống lớn, customize và migrate các ứng dụng phức tạp. Có đủ tư duy và kiến trúc cũng như độ trải nghiệm thực tế để thiết kế hệ thống . Lúc này bạn đã có thể tự đặt cho mình mục tiêu làm các ứng dụng lớn với PHP kiểu như

+ Flickr: 60 000 LOC
+ Digg: 200 000 LOC

Bạn cũng có thể hoàn toàn tự tin dùng PHP để tạo ra các ứng dụng ERP, CRM, Forecast System vốn thường được code bằng Java, ASP.NET hay Delphi có truyền thống đắt đỏ, kén server, đòi hỏi nhiều tài nguyên. Lúc đó, PHP trong tay bạn đã vượt ra khỏi phạm vi của một công nghệ web vì bạn đã biết đủ PHP và mối quan hệ với các công nghệ bổ sung cũng như kinh nghiệm triển khai các công nghệ đó.

Bạn đột nhiên quan tâm nhiều đến các cuộc hội thảo. Bạn thấy kinh nghiệm của các industry expert thật cần thiết và gần gũi với khả năng của bạn. Có thể một lúc nào đó, bạn thấy mình gần như là một thought leader. Một lúc khác, bạn lại muốn nhập vai một C hacker.

Lúc này bạn đã lớn rồi. Ai dám khuyên bạn nữa chứ Cẩn thận, bạn có thể là một PHP Dictator đấy.

Nghề Lập Trình: Không Khô Khan Như Bạn Nghĩ


(HieuHoc):
Có đôi lúc bạn thật sự mệt mỏi, nhàm chán vì cứ phải ngồi một chỗ, nhìn chăm chăm vào màn hình máy tính để gõ những đoạn code (mã) hay tìm để sửa từng lỗi nhỏ như dấu chấm dấu phẩy chưa? Có khi nào bạn cảm thấy đó thực ra là công việc của một người nhập số liệu cấp cao? Không như bạn nghĩ, nghề lập trình có rất nhiều cơ hội, nhiều thử thách, và quan trọng là không khô khan.

Vậy, lập trình là gì?

Để làm nghề lập trình, trước hết các bạn phải hiểu thế nào là lập trình viên. Lập trình viên là người thiết kế, xây dựng và bảo trì các chương trình máy tính (phần mềm). Bằng cách thao tác các đoạn mã (các ngôn ngữ) trên các công cụ lập trình, họ có thể tạo ra các chương trình mới, sửa lỗi hay nâng cấp chương trình đó để tăng tính hiệu quả của việc sử dụng máy tính.
Các lập trình viên thường có thể làm việc trên nhiều ngôn ngữ lập trình, trong đó chủ yếu là Java, C++, php, Asp, ASP.Net, Visual Basic.Net và C#.

Công việc của các nhà Lập trình viên

Công việc của người lập trình được gọi là software engineering. Để làm ra một phần mềm, trước hết người ta phải tạo ra một “bản thiết kế” (framework), mỗi lập trình viên đảm nhiệm một phần việc, sau đó các phần được kết nối lại tạo thành một sản phẩm hoàn chỉnh. Lập trình viên được ví là những thợ “coding” (người ngồi gõ những dòng lệnh (code) trên máy tính), làm ra các phần mềm hoặc chỉnh sửa, phát triển nó dựa trên các công cụ lập trình.
Hiện tại, thu nhập của một Lập trình viên mới vào nghề khoảng 200 USD/tháng. Có 3-4 năm kinh nghiệm hoặc làm ở vị trí quản lý sẽ có thu nhập khoảng 700 - 1.000USD/tháng. Nếu làm ở nước ngoài thu nhập sẽ cao hơn nhiều, tại Hàn Quốc hoặc Nhật từ 2.000 - 3.000 USD/tháng, tại Mỹ từ 3.500 - 6.000USD/tháng...

Những yếu tố để trở thành Lập trình viên?

Nghề lập trình đòi hỏi sự sáng tạo cũng như các kỹ năng đánh giá, phân tích yêu cầu của dự án, đưa ra các giải pháp thiết kế hoặc cách tiếp cận công nghệ mới khi gặp những framework thiết kế chưa kỹ hoặc công nghệ thay đổi.

Suy nghĩ một cách logic

Logic là điều quan trọng nhất trong lập trình. Bạn phải có đủ nhạy bén, linh hoạt và khả năng phán xét cao để giải quyết một vấn đề triệt để bằng phương pháp logic. Vì thế, nếu không có khả năng suy luận logic thì chắc chắn một điều nghề lập trình không thích hợp với bạn. Bạn sẽ cảm thấy nhàm chán và nhức đầu khi theo đuổi các đoạn code của chương trình, các vấn đề về debug (gỡ rối), về lỗi, về dấu chấm, dấu phẩy…

Tiếp cận vấn đề có thứ tự và luôn chú ý tới chi tiết

Các lập trình viên nên tập cho mình thói quen cẩn thận và luôn chú ý đến từng chi tiết. Đôi khi những chi tiết rất nhỏ, bạn vô tình bỏ qua, thì bạn phải ân hận khi mất hàng ngàn giờ chỉ để tìm những lỗi nhỏ đó. Bạn cần có kỹ năng truyền đạt thông tin tốt cũng như viết chương trình của mình một cách mạch lạc, có cấu trúc để đồng nghiệp của bạn có thể biết được tại sao bạn lại viết đoạn mã như vậy và cái gì tiếp theo sẽ xảy ra trong chương trình của bạn.

Làm việc nhóm

Đa số, công việc lập trình đều làm việc theo nhóm. Khả năng để bạn thích ứng, và chia sẻ những ý kiến của bạn tại công ty chiếm vị trí rất quan trọng. Bạn phải biết cách phối hợp công việc với cộng sự, khả năng thuyết trình, giao tiếp, ứng xử của bạn sẽ được sử dụng tối đa trong môi trường làm việc này.

Làm việc một mình trong thời gian dài


Thời hạn của dự án luôn làm bạn đau đầu. Có đôi lúc, bạn phải ngồi làm việc một mình, do đó, bạn cần phải có tính độc lập cao hơn, biết tổ chức và sắp xếp thời gian để hoàn thành dự án đúng lúc. Để được như vậy, bạn cần phải ghi danh sách những việc bạn phải làm và có ý chí quyết tâm cao khi làm việc một mình.

Kỹ năng thiết kế

Công việc phân tích và thiết kế luôn là công việc rất quan trọng của lập trình. Bạn có thể phải thiết kế toàn bộ một hệ thống cho kinh doanh, bao gồm các bảng lưu trữ thông tin, các giao diện để nhập xuất thông tin hay các tài liệu kỹ thuật liên quan đến chương trình... Bạn phải giỏi trong việc lắng nghe và chuyển đổi các yêu cầu của các khách hàng đơn lẻ, các nhóm khách hàng và thậm chí cả việc kinh doanh thành các ứng dụng. Các chương trình của bạn phải dễ dùng và có hiệu quả cao. Do vậy, bất kỳ kỹ năng thiết kế nào của bạn cũng sẽ rất hữu ích trong lĩnh vực này.

Kiên nhẫn

Các vấn đề mà các lập trình viên phải giải quyết thường là các vấn đề khó có thể giải quyết ngay lập tức. Nó mất nhiều giờ, nhiều ngày, thậm chí nhiều tháng làm việc một cách cẩn thận để giải quyết, tìm hướng đi. Nhiều khi bạn đi sai hướng lại phải quay lại giải quyết từ phần đã giải quyết đúng và bắt đầu lại.

Tự học

Không trường lớp nào có thể đào tạo cho bạn tất cả những thứ bạn cần cho công việc lập trình sau này. Chính vì thế, khả năng tự học qua sách vở, tài liệu, internet và qua cả bạn bè nữa là không thể thiếu. Kết hợp với những dự án làm việc trong thực tế, bạn sẽ dần dần thành thạo những gì mình đã tự học được.


--Ngọc Phượng--