4 Kỹ năng quan trọng nhất đối với một lập trình viên

Bài viết được dịch từ Simple Programmer

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.

Kỹ năng nào là quan trọng nhất đối với một lập trình viên?Kỹ năng nào là quan trọng nhất đối với một lập trình viê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.

Kỹ năng giải quyết vấn đề là rất quan trọngMộ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

Kỹ năng tự họcCó 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

Kỹ năng đặt tênKhi 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

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

Các bài viết liên quan:

Về tác giả bài viết:

johnJohn Sonmez là một lập trình viên, người lập ra trang web Simple Programmer, đồng thời anh là tác giả của giáo trình học trực tuyến Pluralsight. Anh đã xuất bản hơn 50 khóa học trực tuyến về các chủ đề như iOS, Android, .NET, Java và phát triển Games. Bạn có thể liên hệ với anh qua Twitter.

8 comments on “4 Kỹ năng quan trọng nhất đối với một lập trình viên

    • tuananhcode, nếu mình ko chịu khó nghĩ tên biến và hàm sao cho người đọc dễ hiểu thì người đọc code của mình sẽ bị “hại não”; hoặc có thể vài tháng sau mình quay lại đọc code của chính mình cũng bị “hại não” lần nữa! 😀

  1. Liệu các anh có nên dịch hay viết 1 bài để motivate các kỹ sư lập trình không? Theo mọi người nhân lực cốt lõi của ngành phần mềm và IT là gì có phải là những người viết lên các đoạn mã không? Tại sao có nhiều ngành nghề đến vậy trong lĩnh vực của chúng ta? Tại sao “cuder” đôi khi lại bị rẻ rúng mặc dù nhiều con người đang ăn bám trên các đoạn mã mà chúng ta viết ra. Tôi rất mong chờ các bài viết như thế :). Many thanks to Vinacode 🙂

    • tuananhcode, những câu hỏi của bạn đặt ra rất hay và thiết thực, và blog sẽ hướng tới những bài viết để giải đáp những câu hỏi như vậy. Cảm ơn bạn đã gợi ý những chủ đề này cho blog Vinacode nhé! 🙂

    • Nguyen Lam, đặt tên biến, function… không rõ ràng thì chỉ làm hại người tiếp nhận code, hoặc chính bản thân mình khi đọc lại code đó.

      Cảm ơn bạn đã để lại ý kiến nhé! 🙂

  2. Em đang là nhân viên ngân hàng nhưng định hướng dài hạn muốn theo ngành kế toán, tài chính cho công ty ( vì chuyên ngành của em là tài chính doanh nghiệp). Em cũng có đam mê lập trình bên cạnh những kiến thức và khía cạnh về tài chính ( em đã học vài khóa lập trình web HTML,CSS và Javascript chỉ để thỏa đam mê lập trình trong thời gian rảnh). Nhưng nhận thấy nhu cầu cần hài hòa công việc và đam mê nên em muốn học thêm hướng tới lập trình viên phần mềm về quản lí, ứng dụng và phát triển hệ thống kế toán, tài chính của công ty. Anh có thể cho em 1 vài lời khuyên về lộ trình học lập trinh phần mềm từ căn bản không( vd như học ngôn ngư lập trình nào trước – sau, bên cạnh đó cần bổ sung những kiến thức nền tảng nào, có nên học thêm 1 văn bằng CNTT nữa ko??…). Mong sớm nhận được những lời khuyên chân thành của anh. Cám ơn anh và chúc anh giữ mãi được lửa đam mê nhé.

    • chelsea,

      – Mình nghĩ việc đi học văn bằng 2 tại một trường đại học CNTT nào đó thì có cái điểm lợi là có cái bằng cấp, ví dụ sau này có xét thăng bậc thăng chức gì đó thì cũng có lợi thế :). Nhưng việc học như vậy đa phần toàn kiến thức lý thuyết nhiều, để áp dụng được vào thực tế công việc thì bạn lại phải tự học thêm (và tốn thời gian cũng khá lâu)

      – Nếu bạn ko quan trọng chuyện bằng cấp mà chỉ quan trọng kiến thức lập trình để áp dụng vào lĩnh vực kế toán tài chính của mình thì cũng có thể tham gia học ở một trung tâm nào đó, bây giờ các trung tâm cũng đã có dạy online (chấm bài và hỗ trợ qua TeamViewer, Skype…) nên nếu eo hẹp về thời gian thì đăng ký kiểu này, ngày đi làm tối về học online, ko hiểu thì chat qua hỏi thầy cũng được 🙂

      – Về phần mềm quản lý thì mình thấy người ta vẫn hay dùng C# hoặc Java để viết, ví dụ như bên công ty MISA (chuyên về phần mềm kế toán nổi tiếng của VN cũng dùng C# là chính), bạn có thể liên hệ với anh Nguyễn Thanh Tùng để tìm hiểu thêm nhé!

      – Bạn nên tham gia diễn đàn Dạy Nhau Học, và đặt câu hỏi tại đây để nhận được nhứng tư vấn chuẩn hơn từ những người đã có kinh nghiệm từ vấn đề này nhé: http://daynhauhoc.com/

      Chúc bạn sớm trở thành một lập trình viên giỏi trong lĩnh vực kế toán tài chính 🙂

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s