Nội dung chính
“Một Senior Developer sẽ hiểu rằng nghề này tìm ra giải pháp cho các vấn đề, chứ không chỉ là viết code.”
Sự khác nhau giữa Junior và Senior là gì? Có phải chỉ cần vài năm kinh nghiệm là một Developer có thể có chức danh Senior Developer?
ITviec xin giới thiệu bài viết thể hiện quan điểm về vị trí Senior Developer, cũng như sự khác nhau giữa Senior và Junior Developer của Matt Briggs, CTO của trang thương mại điện tử Nuvango.com tại Canada và đã có hơn 14 năm trong ngành IT.
Tham khảo mức lương lập trình viên theo khoảng năm kinh nghiệm
Chúng ta đang làm việc trong một ngành công nghiệp lạ kỳ. Nhu cầu Developer thì tăng cao mà cung thì lại thấp. Vấn đề này đã tồn tại nhiều năm liền và qua mỗi năm thì lại càng tệ hại hơn.
Chúng ta có một thời gian khát tài năng nhằm lấp đầy nhu cầu, nhưng ngành công nghiệp của chúng ta lại hơi non trẻ.
Hầu hết những dự án phần mềm đều thất bại. Gần như tất cả chúng đều vượt ngân sách.
Lời khuyên phù hợp nhất mà chúng ta có từ những leader là: “Có nhiều cách để giải quyết vấn đề này, nhưng các giải pháp của chúng ta đôi khi không khả thi, vì thế chuyện duy nhất bạn có thể làm là cứ thử và xem xem nó có khả thi với mình không.”
Sự thật chúng ta đang ở trong thời đại mà cụm từ “Senior Developer” có nghĩa là một người đã code hơn 3 năm. Những người này được đưa vào vị trí Leader và thường những gì bạn mong đợi thì sự thật hơi tệ đấy!
Đó là chức danh mà chúng ta hay sử dụng trong ngành công nghiệp này.
Thật sự, giới hạn một người trong 3 năm là một cách đơn giản hóa quá mức về hành vi, kiến thức và kinh nghiệm phát triển nghề nghiệp, nhưng bản chất của Developer thì vẫn vậy.
Nếu chúng ta cứ phân loại Developer theo cách này thì không cần tốn thời gian bàn cãi gì nữa về ngành hết. Một người có 10 năm kinh nghiệm thì rất khác người mà đã trải qua thời gian giống vậy tới 10 lần.
Junior Developer là làm gì?
Là một Developer, chúng ta đang sống trong một thế giới với các hệ thống và biến số phức tạp. Sẽ là một thử thách cực lớn cho bạn chỉ để làm tốt các nhiệm vụ đã được mô tả rõ ràng khi bạn không có quá nhiều kinh nghiệm với công cụ hoặc codebase bạn đang làm.
Đây là cuộc sống của một Junior Developer. Bạn vừa mới ra trường và bạn đang nghĩ bạn biết mọi thứ. Đột nhiên, bạn phải đối mặt với sự thật rằng những thứ bạn học ở trường đều là sự chuẩn bị cực kỳ ít ỏi cho những vấn đề bạn đang gặp phải. Mọi thứ trở nên hỗn độn hơn. Lý thuyết thuần túy chẳng là gì hết. Bạn đang tồn tại trong một mớ thỏa hiệp, và không bao giờ có thể đoán trước được điều gì.
Việc mà thật sự bạn phải tập trung lúc này là đối mặt với những thử thách trên, và đây cũng là những cái mà bạn nên cố gắng để học và phát triển.
Những Junior Developer cần rất nhiều định hướng, giám sát và một người hướng dẫn để có những kỹ năng này. Nếu không họ sẽ “bơi” mãi ở một nơi trong thời gian rất , rất dài (Gần đây tôi phải chăm sóc một bạn Developer đã code gần một thập kỷ rồi mà tôi vẫn thấy bạn đó là một Junior).
Bạn có thể thấy rằng thời kỳ này đúng nghĩa là áp dụng ngay những kỹ thuật có chiến lược trong công việc hằng ngày.
Một bạn Developer mới ra trường có thể được đào tạo về Ruby on Rails hoặc iOS trong 1-2 tháng và làm được việc ngay, nhưng một người kênh kiệu và tự cao thì rất khó để thay đổi họ.
– Anh Bùi Hải An, Co-founder của Silicon Straits Saigon, trích trong bài “Hãy là Full-stack Developer để thành công“.
Một Junior Developer thì phải tập trung code, không phải là tập trung “phát triển phần mềm”, và họ cũng không cần hiểu gì về sự khác nhau này.
Khi một lập trình viên nói rằng họ “thích code chứ không thích quan tâm đến người dùng”, tôi cho rằng tôi đang nói chuyện với một Junior Developer.
Một Junior Developer giỏi sẽ được đưa cho một nhiệm vụ nhất định và được mong đợi làm xong nó nhanh, tốt.
Developer đúng nghĩa là gì?
Sau cấp Junior Developer là cấp Developer. Đây là người bắt đầu thấy những kiểu sai lầm (thường là sai lầm của họ) và nhận ra rằng chuyện bỏ những nhiệm vụ thông thường để xây dựng một tính năng có thể hoạt động được đòi hỏi nhiều nỗ lực hơn nữa. Với họ, không có gì là bất ngờ khi nghe ai đó bảo rằng cần phải thay đổi một số thứ ngay lần đầu tiên.
Họ cũng đã có những trải nghiệm về việc nhìn lại những gì mà họ tự hào khi viết cách đây 1 năm, và nhận ra rằng chúng thật sự là…rác cả thôi.
Một Developer sẽ đi tìm kiếm câu trả lời làm sao để xây dựng mọi thứ “Theo Đúng Hướng”, và tìm kiếm qua việc thử nghiệm, qua sách vở hoặc thảo luận với những lập trình viên khác.
Ở cấp độ này thì người này đã phải học về thuyết xây dựng phần mềm hơn là thuyết viết code (mà bạn đã học ở trường rồi!)
Ngôn ngữ lập trình không phải là yếu tố quan trọng nhất. Ngôn ngữ lập trình chỉ là công cụ mình phát triển sản phẩm. Cái quan trọng là tư duy để xây dựng sản phẩm.
– Anh Nguyễn Xuân Huy – Tech Architect của Cybozu Vietnam, trích trong bài “Developer giỏi không nhất thiết phải biết nhiều Ngôn Ngữ“
Hệ thống được xây dựng bởi những Developer chưa có kinh nghiệm nhiều thì thường hỏng hết cả nhưng lại với lý do khác hoàn toàn với những Junior.
Một Junior sẽ xây dựng một đống thuật toán bự với hàng đống việc đi theo. Một Developer giỏi sẽ học theo cách các cuốn sách “Design Patterns” và “Domain Driven Design” dạy.
Dù đây là những cuốn sách rất hay để học cách xây dựng những hệ thống OO lớn nhưng khi áp dụng vào thực tế thì chỉ có tác dụng trong trong những hệ thống linh hoạt, còn ở những hệ thống không linh hoạt thì sẽ có vấn đề.
Bạn có thể tin tưởng vào một Developer có khả năng xây dựng những hệ thống bền bỉ hơn một Junior, nhưng sẽ dẫn tới một loạt thảm họa khác.
Sự thật đáng buồn là phần lớn không chỉ là Senior Developer mà còn cả Team Leader cũng vậy, đều là những Developer như thế.
Hầu hết mọi người đều không nhận ra điều này, và đều có những kế hoạch tốt nhất, nhưng đơn giản là nó không bao giờ khả thi với những người ở cấp độ cao hơn.
Những Developer này cũng sẽ hơi chú ý đến vai trò của họ trong team, và giá trị họ mang tới.
Một Developer giỏi sẽ hiểu cách sử dụng code để giải quyết vấn đề là phương tiện đi đến một kết quả cuối cùng, chứ không phải code vì yêu thích nữa.
Tuy nhiên, họ vẫn yêu thích những thiết kế trong “lâu đài” của riêng mình, và vẫn còn tìm kiếm “Con đường đúng đắn” để xây dựng phần mềm.
Lập trình viên là nghề đưa ra giải pháp, chứ không phải là xây dựng sản phẩm.
– Khang Nguyễn – Chief Representative của Cogini tại Việt Nam
Một Developer giỏi không cần phải bị giám sát quá nhiều. Họ được tin tưởng khi đưa ra những vấn về code design, và đóng vai trò quan trọng trong những cuộc thảo luận về thiết kế. Họ cũng là những “con trâu việc” của Developement team. Tuy nhiên, họ cũng cần được các cấp cao hơn giám sát và hướng dẫn nữa.
Senior Developer là ai?
Một Senior Developer thì luôn quen thuộc với thất bại của riêng mình. Họ viết code có lúc theo và không theo các design, và thường cả hai đều thất bại.
Họ luôn nghĩ về những thứ họ làm, đánh giá sự thành công và thất bại khi tiếp cận vấn đề với sự chân thành và có suy nghĩ thấu đáo.
Một Senior Developer thì đã không còn rơi vào sự phức tạp mà những Developer hay mắc phải, họ thường thích cái gì đó đơn giản hơn.
Một Senior Developer không bao giờ phân loại Developer dựa trên kiến thức của họ, thay vào đó thì hiểu rằng nên dựa vào điểm mạnh và điểm yếu.
Họ cũng thường chú ý đến điểm mạnh và điểm yếu của mình hơn bất cứ ai khác, và phấn đấu tận dụng mọi điểm mạnh của mình mỗi khi có thể.
Một Senior Developer nghĩ về “ngữ cảnh” hơn là áp dụng lý thuyết. Họ hiểu rằng không có con đường “đúng” nào để xây dựng phần mềm và cách duy nhất để xây dựng một phần mềm tuyệt vời là ứng dụng lý thuyết vào phù hợp với nhu cầu của khách hàng, codebase, team, công cụ và tổ chức.
Những mobile developer hàng đầu không chỉ biết code, mà còn phải biết chương trình của mình sẽ giải quyết những vấn đề của người dùng như thế nào. Những engineer hàng đầu của chúng tôi biết cách viết code đúng và chặt chẽ. Họ còn hiểu VÌ SAO họ cần làm việc đang làm.
– Anthony Tan, Founder & CEO của Grab, trích trong bài “3 Lời khuyên dành cho Mobile Developer“
Một Senior Developer hiểu rằng mọi thứ trong ngành này đều phải đánh đổi, và sẽ tìm ra điều gì cần có trong design pattern, thư viện, framework và quy trình.
Một Senior Developer nghĩ về nhiều người khác hơn là bản thân họ. Họ chú ý đến cách team và khách hàng mình làm việc như thế nào, và giá trị của họ là gì, và điều gì quan trọng hoặc không quan trọng để thành công.
Khi một trái banh rơi xuống, một Senior Developer sẽ làm cách nào để nhặt đó lên. Cụm từ “không phải việc của tôi” là không bao giờ, dù trong bất cứ tình huống nào.
Một Senior Developer sẽ hiểu công việc này cần có giải pháp cho vấn đề chứ không chỉ là viết code. Vì vậy, một Senior Developer sẽ luôn nghĩ về những công việc họ làm mang lại giá trị bao nhiêu cho team và khách hàng so với những nỗ lực họ đặt vào.
Xem thêm những mong đợi của các nhà tuyển dụng với Senior Developer tại ITviec
Trong khi một Developer sẽ cày mãi qua những công việc buồn tẻ, thì một Senior Developer sẽ dừng lại và đặt câu hỏi cái gì đang có vấn đề để khiến những công việc buồn tẻ đó hết buồn tẻ. Họ sẽ đánh giá chi phí của việc sửa những vấn đề cốt lõi, sẽ sửa chúng trực tiếp hay sửa cuối cùng.
Một Senior Developer hiểu rằng bạn không thể tự làm bất cứ điều gì, và nhiệm vụ đầu tiên của họ là giúp đỡ team trở nên tốt hơn, và họ cũng luôn phấn đấu để cải thiện chính bản thân mình.
Một Senior Developer sẽ hiểu rằng leadership không phải là thâu tóm quyền lực mà là học cách “trao quyền”. Không phải là hướng dẫn, mà là phục vụ.
Anh muốn trao cho các bạn 1 quyền hạn đủ lớn để tự ra quyết định và tự chịu trách nhiệm cho công việc của mình. Cái đó không chỉ giúp các bạn trong công việc hiện tại, mà còn giúp các bạn rèn luyện kỹ năng ra quyết định tốt hơn.
– Anh Đào Minh Khánh – Lead Programmer, trích trong bài viết “Manager không phải là con đường thăng tiến duy nhất của Developer“
Nếu bạn không có ít nhất một Senior Developer với vai trò lãnh đạo trong team mình thì dự án của bạn sẽ thất bại.
Một team có những Developer giỏi sẽ giúp bạn đi rất xa. Nhưng vào ngày nộp kết quả phần mềm, có 2 khả năng xảy ra: một là thất bại, hai là phải viết lại rất mất công và tốn thời gian.
Một Senior Developer là người duy nhất có khả năng chọn công nghệ và platform đúng cho dự án, nên nếu không có một người như vậy từ ngày đầu thì bạn sẽ gặp khó khăn đấy.
Và cuối cùng, số năm kinh nghiệm chẳng là gì
Sự thật là không ai có thể phù hợp hoàn toàn với công việc của mình. Tôi đã quá nản về việc phân loại Developer dựa trên “số năm kinh nghiệm”.
Số năm kinh nghiệm có thể cho bạn biết điều gì đó, nhưng nếu không đặt trong ngữ cảnh thích hợp thì đều là những thông tin vô giá trị.
Hơn thế nữa, giá trị của ngành công nghiệp chúng ta đang làm hại với những anh chàng trẻ, thông minh vừa ra trường.
Những người này rất có giá trị, rất cần thiết, nhưng những người có 15-20 năm kinh nghiệm trong ngành cũng vậy.
Chúng ta cần phải dừng thuê người theo kiểu mẫu, và bắt đầu thật sự nghĩ về team của mình và những nhóm tài năng được tổ chức tốt. Nếu ai đó trong team của bạn nghĩ như vậy, bạn đang làm hại sản phẩm và team của mình đấy!
Lời kết
- Phân loại Developer theo năm kinh nghiệm là một sai lầm nếu không xét đến kinh nghiệm thực sự của người đó.
- Nếu bạn là Junior Developer, bạn nên tập trung code,hoàn thành các nhiệm vụ được giao nhanh chóng và hoàn hảo hơn là tập trung “phát triển phần mềm”.
- Để tiến lên cấp Developer, đừng chỉ biết code, hãy tìm cách xây dựng phần mềm “Theo Đúng Hướng”, qua sách vở, thảo luận với đồng nghiệp và bài học rút ra từ những thất bại.
- Một Developer “chất” không còn code vì bản năng, mà sẽ suy nghĩ theo hướng dùng code để giải quyết vấn đề, nhưng bạn vẫn phải được hướng dẫn nhiều hơn bởi các Senior.
- Một Developer chỉ được xem là Senior Developer khi biết cách ứng dụng lý thuyết vào xây dựng sản phẩm phù hợp với nhu cầu của khách hàng, codebase, team, công cụ và tổ chức, quản lý tốt team của mình bằng cách “trao quyền” tự quản lý cho thành viên, cũng như hướng dẫn, giám sát các cấp dưới.
Nếu bạn nghĩ những chia sẻ này có thể giúp ích cho bạn bè hoặc đồng nghiệp thì đừng ngại nhấn nút Share bên dưới nhé!
Tham khảo thêm các yêu cầu cho công việc Senior Developer tại ITviec: