4 kỹ năng quan trọng nhất đối với một chuyên viên phát triển phần mềm

Thứ hai - 23/03/2015 00:46
 
 
ky nang giai quyet van de ky nang giai quyet van de

Gần đây tôi đã dành nhiều thơi gian suy nghĩ về vấn đề này và tôi đã đưa ra những điều mà tôi nghĩ là quan trọng nhất, những kỹ năng mà nếu một lập trình viên có thể đạt được nó sẽ mang lại cho họ cơ hội nghề nghiệp tốt nhất và làm cho họ đạt hiệu quả nhất.

Ngày nay, với hằng hà sa số các lựa chọn về công nghệ, ngôn ngữ và nền tảng (platform), việc xác định đầu tư thời gian để đào tạo kỹ năng nào cho một nhân viên phát triển phần mềm có thể trở nên rất khó khăn.

 

Tôi thường được hỏi xin lời khuyên về việc làm thế nào để trở thành một lập trình viên tốt hơn.

 

Thông thường câu hỏi một ai đó đặt ra là họ có nên đầu tư thời gian cho ngôn ngữ lập trình, công nghệ này hay ngôn ngữ, công nghệ khác.

 

Gần đây tôi đã dành nhiều thơi gian suy nghĩ về vấn đề này và tôi đã đưa ra những điều mà tôi nghĩ là quan trọng nhất, những kỹ năng mà nếu một lập trình viên có thể đạt được nó sẽ mang lại cho họ cơ hội nghề nghiệp tốt nhất và làm cho họ đạt hiệu quả nhất.

 

Kỹ năng 1: Giải quyết vấn đề

 

 

Tôi nói về sự cần thiết phải học cách giải quyết các vấn đề trước khi tôi đưa ra những bước làm thế nào để học chúng vì tôi tin tưởng rằng kỹ năng này là tối quan trọng đối với bất kỳ một lập trình viên nào.

 

Phát triển phần mềm 100% là giải quyết các vấn đề.

 

Nếu không có các vấn đề sẽ không cần phải có một phần mềm.

 

Tất cả các phần mềm đều được thiết kế để giải quyết vấn đề của người dùng và trong vấn đề chung đó được cấu thành từ một chuỗi rộng lớn các vấn để nhỏ hơn.

 

Ngôn ngữ lập trình hay công nghệ mà bạn sử dụng không quan trọng, nếu bạn không thể giải quyết các vấn đề bạn không thể trở thành một lập trình viên phần mềm thực sự giỏi.

.

Thật đáng kinh ngạc về khả năng yếu kém trong việc giải quyết vấn đề của hầu hết các lập trình viên.

 

Lúc nào tôi cũng nghe được những lời phàn nàn về các cuộc phỏng vấn xin việc, rằng chúng quá khó vì họ luôn yêu cầu các ứng viên lập trình phải giải quyết những vấn đề khó.

 

Tôi liên tục nghe những lời than phiền về việc phỏng vấn xin việc là quá cực nhọc bởi vì họ bắt các lập trình viên phải giải quyết những vấn đề khó.

 

Tôi biết là rất nhiều lập trình viên vẫn không đồng ý với tôi về điểm này và vẫn không hiểu tại sao một site như là TopCoder lại có thể cải thiện kỹ năng lập trình của họ rất nhiều, nhưng tôi biết từ kinh nghiệm bản thân đó là do luyện tập giải quyết vấn đề trên TopCoder, nó là một bước ngoặt trong sự nghiệp của tôi.

 

Hãy suy nghĩ về những người thợ mộc, nếu bạn muốn trở thành một người thợ mộc thành công, bạn nên tạm thời làm một người xẻ gỗ tốt. Bạn nên tạm thời luyện tập tất cả mọi cách cắt xẻ và sử dụng nhiều công cụ khác nhau để xẻ gỗ.

 

Dù có bao nhiêu năm kinh nghiệm làm thợ mộc hay dù bạn có thiết kế đồ đạc, tủ có tốt thế nào đi chăng nữa thì cũng không có nghĩa lý gì nếu mỗi lần bạn cố gắng xẻ gỗ bạn lại phải vật lộn với chúng.

 

Xẻ gỗ là một kỹ năng cơ bản của thợ mộc, cũng giống như là giải quyết vấn đề là kỹ năng cơ bản của lập trình viên.

 

Kỹ năng 2: Tự học

 

Có lẽ không có kỹ năng nào quan trọng bằng kỹ năng học cách học.

 

Kỹ năng này đặc biệt quan trọng trong phát triển phần mềm vì không có lĩnh vực nào mà tôi biết lại có sự thay đổi nhanh hơn ngành phát triển phần mềm.

 

Bạn không thể biết tất cả về mọi thứ. Bạn thậm chí không thể thực sự đầu tư thời gian để nắm hết một framework hoặc công nghệ - mọi thứ thay đổi quá nhanh.

 

Thay vào đó bạn cần phải có khả năng đạt được nhanh chóng những kiến thức mà bạn cần cho một công việc nào đó mà bạn đang thực hiện.

 

Nếu bạn thực sự muốn có một kỹ năng mà sẽ thúc đẩy bạn thẳng tiến trên sự nghiệp phát triển phần mềm, hãy học cách tự học.

 

Cách duy nhất để phát triển kỹ năng này là đưa vào thực nghiệm. Hãy học một ngôn ngữ lập trình hoặc công nghệ mới ngay cả khi bạn nghĩ là sẽ không bao giờ sử dụng chúng. Bạn sẽ thấy ngạc nhiên về khả năng học hỏi nhanh chóng của mình bởi vì bạn đã có nền tảng về lĩnh vực mà bạn biết.

 

Nếu bạn có thể thích ứng nhanh nhạy với sự thay đổi chóng mặt của thị trường phát triển phần mềm, các công nghệ và những nền tảng liên quan với chúng, bạn sẽ có những kỹ năng luôn luôn được cần đến.

 

Mặc dù tôi có chút nghi ngờ về một số tuyên bố của Tim Ferris, tuy nhiên ông ta có một quyển sách tuyệt vời được gọi là 4-Hour Chef (đầu bếp 4 giờ) trong đó có một vài phương pháp làm thế nào để học mọi thứ một cách nhanh chóng. (Tôi đã muốn viết một quyển sách về chủ đề này.)

 

Kỹ năng 3: Định danh

 

Khi mọi người hỏi tôi cả ngày tôi làm gì, tôi thương trả lời “đọc những thứ mà người khác đặt tên và đặt tên mọi thứ”

 

Ok, không ai thực sự hỏi tôi câu đó và tôi cũng không thực sự trả lời như vậy, nhưng chắc chắn là tôi có thể trả lời vậy.

 

Phát triển phần mềm là mô tả những thứ siêu hình. Hầu hết những thứ chúng ta đang xây dựng là không thể nhìn thấy được. 

 

Chúng ta phải dựng lên trong đầu toàn bộ thế giới với các nhà quản lý cấp phép đang lấy yêu cầu cấp quyền và phun ra các phản hồi bên cạnh kho dữ liệu người dùng sử dụng nhà máy người dùng để lắp ráp các người dùng mới.

 

Mỗi lần bạn viết code bạn đang đặt tên cho các thành phần. Khi bạn đọc code của mình hoặc của người khác, hầu hết sự thấu hiểu của bạn về những dòng code là đến từ tên của các thành phần trong những dòng code đó.

 

Hầu như tôi có thể dự đoán chính xác kỹ năng của một lập trình viên bằng việc nhìn vào cách họ đặt tên cho các phương thức, biến và các lớp trong các dòng code họ viết.

 

Một lập trình viên thiếu khả năng đặt tên tốt cho các khái niệm và dữ liệu trong code của họ thì giống như là một người phiên dịch bị câm. Dù bạn có hiểu gì thì cũng không quan trọng, nếu bạn không thể giải thích điều đó một cách đầy đủ, ngay khi nó rời khỏi suy nghĩ của bạn, nó sẽ biến mất.

 

Cách tốt nhất để nâng cao kỹ năng này là luôn luôn luyện tập. Tôi thường đặt tên lại cho những thành phần trong các dòng code mà tôi vừa đọc để hiểu nó. Khi tôi bắt đầu hiểu một phương thức làm gì, tôi sẽ thay đổi tên phù hợp với những gì mình hiểu. Tôi làm việc này khi tôi đọc code, do đó nó không ảnh hưởng gì đến việc thay đổi logic.

 

Bạn càng tập trung vào việc đặt những cái tên tốt cho các thành phần, bạn sẽ càng trở nên tốt hơn.

 

Điều này cũng cũng là thứ dễ thấy nhất trong code của bạn. Thật khó để biết code của bạn đúng hay hiệu quả bằng cách nhìn vào nó, nhưng nếu tôi đọc nó và tôi có thể hiểu được nó, tôi sẽ cho là bạn biết bạn đang làm gì.

 

Kỹ năng 4: Xử lý các mối quan hệ

 

 

Tôi liệt kê điều này ở cuối, nhưng trong nhiều trường hợp bạn có thể nói nó là kỹ năng đầu tiên hay là kỹ năng quan trọng nhất.

 

Mọi nơi bạn đi đều có con người.

 

Là một chuyên viên lập trình, mọi người luôn tác động đến công việc của bạn trừ khi bạn làm việc một mình hoặc xây dựng những sản phẩm cho chính mình mà thôi. 

 

Trừ khi bạn làm việc một mình và phát triển phần mềm cho bản thân, nếu không những người khác sẽ ảnh hưởng đến sự nghiệp của bạn khi là một nhân viên phát triển phần mềm.

 

Trước đây tôi đã nói về việc vì sao bạn có thể không muốn chỉ trích ai đó, nên tạo các mối quan hệ tốt với mọi người hơn là cứ chọc giận họ.

 

Tôi luôn luôn quay trở lại với quyển sách nổi tiếng của Dale Carnegie “Đắc nhân tâm”, vì quyển sách này rất quan trọng trong việc học cách làm người.

 

Trước đây tôi đã nói về điều này, nếu bạn muốn phát triển kỹ năng con người, hãy đọc quyển sách này!

 

Về cơ bản thì con người không phải là những sinh vật duy lý, chúng ta là những sinh vật duy tình. Chắc chắn, chúng ta tự hào về khả năng suy luận của chúng ta, nhưng thực tế thì hầu hết mọi quyết định chúng ta đưa ra đều bị ảnh hưởng bởi tình cảm hơn.

 

Điều này có ý nghĩa với một lập trình viên như bạn là trừ khi bạn có thể xử lý hiệu quả các mối quan hệ với các lập trình viên khác, với những người quản lý, ngay cả với khách hàng, nếu không bạn sẽ liên tục đối mặt với khó khăn dù cho bạn có ý tưởng tốt hay kỹ năng quý báu thế nào đi chăng nữa.

 

Thường thì việc chủ động và tham gia vào các cộng đồng phát triển phần mềm cũng có thể giúp bạn rất nhiều trong sự nghiệp của mình. Nó không chỉ là mạng lưới của bạn, mà còn xây dựng cho bạn một hình tượng tốt.

 

Làm việc này một cách thành công sẽ đặt nền tảng trực tiếp cho khả năng xử lý các mối quan hệ của bạn. (Nếu bạn muốn một đường tắt để học cách xử lý các mối quan hệ. Nó rất đơn giản. Hãy tốt với mọi người!)

 

Còn kỹ năng thực hành thì sao?

 

Để ý rằng tôi không hề đưa vào danh sách ở trên bất kỳ thứ gì về một công nghệ riêng biệt hoặc ngày cả một lĩnh vực rộng lớn như phát triển web hay phát triển di động?

 

Để có một nền tảng vững chắc trong một vài công nghệ nào đó chắc chắn rất quan trọng, tuy nhiên những thứ đó không quan trọng bằng 4 kỹ năng tôi đã đề cập ở trên.

 

Nếu bạn có thể giải quyết các vấn đề, học mọi thứ một cách nhanh chóng, định danh tốt và xử lý tốt các mối quan hệ, bạn sẽ có được những thành công lâu dài hơn là chúi mũi vào một công nghệ nào đó.

 

Điều này có nghĩa, tất nhiên học một hoặc hai ngôn ngữ lập trình và có một lĩnh vực chuyên môn chuyên biệt là rất quan trọng, nhưng miễn là bạn không vùi đầu vào những sự lựa chọn đó và tập trung vào 4 kỹ năng quan trọng này, bạn sẽ rất ổn. (Bạn có thể học C++)


 

Những tin mới hơn

 

Những tin cũ hơn