Với rất nhiều công nghệ, ngôn ngữ lập trình và các nền tảng phát triển như hiện nay, thì rất khó để nhận ra đâu là thứ tốt nhất để bạn đầu tư thời gian và công sức học những kỹ năng quan trọng trong nghề phát triển phần mềm.
Tôi thường được nhiều người hỏi về việc làm thế nào để trở thành một lập trình viên giỏi hơn, và rằng liệu họ có nên đầu tư thời gian vào một ngôn ngữ lập trình hoặc công nghệ xác định nào đó hay không. Nhưng hôm nay, tôi sẽ liệt kê ra đây một số kỹ năng tôi nghĩ rằng đó là những kỹ năng quan trọng nhất và không bị lỗi thời mà một lập trình viên nên có, chúng sẽ mang lại cho bạn những cơ hội tốt nhất trong nghề nghiệp và giúp bạn làm việc hiệu quả hơn.
1. Kỹ năng giải quyết vấn đề
Trước đây, tôi đã từng nói về sự cần thiết về việc học cách giải quyết vấn đề, bởi vì tôi nghĩ rằng đây là một kỹ năng vô cùng quan trọng đối với bất kỳ một lập trình viên nào. Công việc phát triển phần mềm thì thực ra 100% là để giải quyết các vấn đề. Nếu không có những vấn đề thì chúng ta cũng chẳng cần có những phần mềm làm chi phải không bạn?
Tất cả phần mềm đều được thiết kế để giải quyết một số vấn đề của người sử dụng và trong cái giải pháp chung đó lại có một mảng rất lớn những vấn đề nhỏ hơn nảy sinh. Không quan trọng về việc bạn đang sử dụng ngôn ngữ lập trình hoặc công nghệ nào, nếu bạn không thể giải quyết những vấn đề thì bạn không phải là một người phát triển phần mềm giỏi.
Một điều đáng ngạc nhiên là hầu hết các lập trình viên lại rất yếu trong kỹ năng giải quyết vấn đề. Tôi thường xuyên nghe được những lời than phiền về các buổi phỏng vấn tuyển dụng rằng nó thì quá khó, bởi vì họ đã hỏi lập trình viên về cách giải quyết một vài vấn đề phức tạp. Tôi đã nói về việc tại sao những buổi phỏng vấn khó lại là một điều tốt và một phần của lý do là bởi vì họ muốn kiểm tra khả năng giải quyết vấn đề của các lập trình viên mà thôi. Tôi biết rằng có rất nhiều lập trình viên vẫn không đồng ý với tôi về quan điểm này và họ không hiểu tại sao một trang web giống như TopCoder sẽ làm tăng khả năng phát triển phần mềm của họ lên rất nhiều, nhưng từ kinh nghiệm cá nhân thì tôi biết rằng chính việc thực hành cách giải quyết vấn đề trên TopCoder là bước ngoặt trong nghề nghiệp của tôi.
Bạn hãy nghĩ về một người thợ mộc làm ví dụ. Nếu muốn trở thành một người thợ mộc thành công, thì bạn nên giỏi trong việc cắt gỗ. Bạn cũng phải có khả năng thực hiện được tất cả các dạng cắt và sử dụng nhiều công cụ khác nhau. Không quan trọng là bạn có bao nhiêu năm kinh nghiệm trong nghề thợ mộc hay bạn có khả năng thiết kế đồ mỹ nghệ tốt đến đâu, nếu mỗi lần bạn thử cắt gỗ mà bạn phải khó nhọc lắm mới hoàn thành được nhát cắt đó thì bạn không phải là một người thợ mộc giỏi.
Cắt gỗ là một kỹ năng cơ bản của nghề thợ mộc, cũng giống như giải quyết vấn đề là kỹ năng cơ bản của nghề phát triển phần mềm.
2. Kỹ năng tự học
Có thể nói rằng không có một kỹ năng nào trong cuộc sống lại quan trong bằng kỹ năng học cách để học. Kỹ năng này đặc biệt quan trọng trong ngành phát triển phần mềm, bởi vì không lĩnh vực nào mà tôi biết lại có tốc độ thay đổi nhanh hơn là lĩnh vực phát triển phần mềm.
Bạn không thể biết tất cả về mọi thứ. Thậm chí bạn cũng không thể đầu tư thời gian để trở nên tinh thông dù chỉ một công nghệ hoặc framework xác định nào đó — bởi vì mọi thứ thay đổi quá nhanh! Thay vì đó bạn cần có khả năng nhanh chóng thu được kiến thức mà bạn cần cho công việc đang làm. Nếu bạn thực sự muốn có một kỹ năng mà sẽ giúp bạn luôn thuận lợi trong nghề phát triển phần mềm, thì hãy học cách làm thế nào để dạy chính mình.
Chỉ có một cách duy nhất để phát triển kỹ năng này là hãy thực hành nó. Hãy học một ngôn ngữ lập trình hoặc công nghệ mới, thậm chí nếu bạn nghĩ rằng mình sẽ chẳng bao giờ sử dụng nó. Bạn sẽ rất ngạc nhiên vì khả năng tiếp thu rất nhanh của mình, bởi vì bạn đã có kiến thức nền tảng trước đó rồi. Nếu bạn có thể nhanh chóng thích nghi với sự thay đổi chóng mặt trong ngành phát triển phần mềm và các công nghệ cũng như những nền tảng kết hợp cùng với nó, thì bạn sẽ có những kỹ năng mà sẽ luôn luôn đáp ứng được yêu cầu công việc.
Mặc dù tôi có đôi chút hoài nghi về một tuyên bố của tác giả Tim Ferris, anh ta đã viết một cuốn sách tuyệt vời tên là “Trở thành đầu bếp chuyên nghiệp trong vòng 4 giờ”, nó chứa một số kỹ thuật rất hay về cách làm thế nào để học mọi thứ một cách nhanh nhất. (Tôi cũng đang muốn viết một cuốn sách như vậy về mọi chủ đề).
3. Kỹ năng đặt tên
Khi mọi người hỏi tôi rằng công việc mà tôi làm hàng ngày là gì, tôi thường nói nghề của tôi là “đọc những thứ do người khác đặt tên và đặt tên cho một số thứ.” Vâng, thực ra không một ai hỏi tôi câu hỏi đó và tôi cũng không thực sự trả lời theo cách này, nhưng tôi chắc là mình có thể làm như vậy. Phát triển phần mềm thì tất cả là về mô tả những thứ trừu tượng. Hầu hết những thứ mà chúng ta đang xây dựng thì không thể nhìn thấy được.
Mỗi lần mà bạn viết code nghĩa là bạn đang đặt tên cho một số thứ. Khi bạn đọc code của chính mình hoặc của một ai khác viết ra, thì bạn đang cố gắng hiểu đoạn code đó thông qua tên của các thứ trong nó. Hầu như tôi có thể đoán chính xác trình độ của một lập trình viên bằng cách xem qua cách họ đặt tên các phương thức, biến và các lớp trong code mà họ viết.
Một lập trình viên mà thiếu hụt khả năng đưa ra những tên tốt tới những khái niệm và dữ liệu trong code của họ thì giống như một nhà phiên dịch mà bị câm vậy. Không quan trọng liệu bạn có hiểu một điều gì đó hay không, nếu bạn không thể giải thích điều đó một cách rõ ràng thì trong chốc lát nó sẽ rời khỏi đầu của bạn.
Cách tốt nhất để nâng cao kỹ năng này là luôn luôn thực hành nó. Tôi thường đổi tên một số thứ trong code ngay khi tôi vừa đọc và hiểu nó. Ngay khi tôi bắt đầu hiểu được phương thức đó thực thi điều gì, thì tôi sẽ thay đổi tên của nó cho phù hợp với điều tôi hiểu. Tôi sẽ làm điều này cả trong khi tôi đang đọc code, thậm chí việc này không tạo ra một thay đổi logic nào trong đó. Bạn càng tập trung nhiều vào việc đưa ra những cái tên thích hợp cho các thứ, thì bạn ngày càng trở nên tốt hơn. Điều này cũng là thứ dễ nhận thấy nhất về đoạn code của bạn. Rất khó để biết liệu code của bạn thì có đúng hoặc hiệu quả hay không chỉ bằng cách xem qua chúng, nhưng nếu tôi đọc nó và có thể hiểu được thì tôi sẽ cho rằng bạn biết bạn đang làm gì.
4. Kỹ năng hợp tác với mọi người
Trong danh sách này thì kỹ năng hợp tác với mọi người được liệt kê cuối cùng, nhưng trong nhiều trường hợp thì có thể nói rằng nó là kỹ năng đầu tiên và quan trọng nhất. Ở mọi nơi bạn đến đều có con người. Trừ khi bạn làm việc một mình hoặc phát triển phần mềm cho chính bạn xài, còn không thì người khác sẽ ảnh hưởng đến nghề nghiệp phát triển phần mềm của bạn.
Trước đây tôi đã nói về tại sao bạn lại không muốn chỉ trích người khác, nhưng thực ra có nhiều cách để hợp tác với mọi người hơn là chỉ trích. Tôi luôn đọc lại cuốn sách nổi tiếng của tác giả Dale Carnegie, là cuốn “Đắc Nhân Tâm”, bởi vì cuốn sách này rất quan trọng trong việc học cách làm thế nào để thành công trong cuộc sống. Nếu bạn muốn phát triển những kỹ năng của con người thì hãy đọc cuốn sách này!
Vấn đề cơ bản là loài người không phải là một sinh vật có logic, chúng ta thường hành xử theo cảm xúc. Chắc chắn là chúng ta luôn tự hào về khả năng lý trí của mình, nhưng trong thực tế thì hầu hết các quyết định mà chúng ta tạo ra thì thường bị ảnh hưởng bởi cảm xúc hơn là lý trí. Điều đó có nghĩa là trong nghề phát triển phần mềm thì trừ khi bạn có thể hợp tác hiệu quả với những lập trình viên khác, những người quản lý và thậm chí là cả khách hàng; nếu không thì bạn sẽ luôn luôn gặp phải những vấn đề rắc rối, cho dù bạn có những ý tưởng tốt đến mấy hay kỹ năng của bạn có tuyệt vời ra sao đi nữa.
Tích cực tham gia vào cộng đồng phát triển phần mềm nói chung có thể giúp bạn rất nhiều trong nghề nghiệp. Nó không chỉ là về tạo mối quan hệ, nhưng việc đưa tên của bạn ra ngoài cũng là cách hay để xây dựng một “nghiệp” tốt. Thực hiện điều này thành công là bản lề dẫn tới khả năng bạn có thể hợp tác hiệu quả với mọi người. (Bạn có muốn tạo ra một con đường tắt trong việc học cách làm thế nào để hợp tác với mọi người không? Nó thì rất đơn giản. Hãy tốt bụng!)
Thế còn những kỹ năng về thực hành thì sao?
Bạn có thấy rằng tôi vẫn không đưa vào trong danh sách trên một công nghệ xác định hoặc thậm chí một vài kỹ năng đang thịnh hành hiện nay là phát triển web và di động không? Có một nền tảng vững chắc trong một vài lĩnh vực công nghệ nào đó là điều khá quan trọng, nhưng thực ra những kỹ năng đó lại không quan trọng bằng 4 kỹ năng mà tôi đã đề cập ở trên.
Nếu bạn có thể giải quyết vấn đề, học mọi thứ nhanh chóng, đặt tên mọi thứ hợp lý, và hợp tác hiệu quả với mọi người, thì bạn sẽ có được mức thành công lớn hơn nhiều trên con đường sự nghiệp và sẽ thành chuyên gia trong bất kỳ lĩnh vực công nghệ nào.
Dĩ nhiên điều quan trọng là bạn nên học một đến hai ngôn ngữ lập trình một cách sâu sắc và có một kiến thức chuyên môn đủ rộng ở trong lĩnh vực này, nhưng miễn là đừng đi quá xa với chúng và bạn nên tập trung vào 4 kỹ năng quan trọng nêu trên để luôn phát triển trong nghề.