Phát triển theo hướng generalist hay specialist sẽ tốt hơn cho software engineer ?
Cả 2 hệ specialist và generalist đều có hướng phát triển lên cao.
Trong thời đại AI, cloud, machine learning, digital transformation phát triển như vũ bão, giữa một rừng ngách (niche) và các vị trí mới được hình thành trong ngành phần mềm. Việc chọn một hướng phát triển càng ngày càng không dễ dàng.
Điều đó càng khó khăn cho một sinh viên mới ra trường loay hoay trên con đường phát triển sự nghiệp và phát triển bản thân.
Cả 2 hệ specialist và generalist đều có hướng phát triển lên cao. Tuy cách làm việc, scope of work có phần khác nhau, nhưng cả 2 đều tạo ra những tác động nhất định cho tổ chức.
Specialist:
Specialist tạo ra ảnh hưởng từ kĩ năng và kiến thức về ngành (domain knowledge). Họ sẽ giải quyết những vấn đề mà chỉ một số ít người có khả năng làm được (tối ưu database, hệ thống phân tán, AI...). Specialist ảnh hưởng và đóng góp bằng các technical strategy trên thế mạnh của họ.
Pros:
Chuyên biệt hóa chuyên môn: nếu bạn là chuyên gia bảo mật hoặc Solution Architecture về Cloud thì chắc chắn sẽ không lo mất việc. Dù cho thậm chí bạn có bị lay off thì vẫn sẽ có công ty mời chào.
Lương cạnh tranh: chắc chắn cái này không cần bàn cãi nhiều.
Thích ứng tốt trong lĩnh vực của mình: vì là specialist nên những thay đổi mới nhất trong công nghệ, trong lĩnh vực domain đều được bạn dễ dàng thẩm thấu và đề ra các giải pháp phù hợp
Cons:
Giới hạn khả năng mở rộng cả kiến thức và kĩ năng. Ví dụ bạn là expert về .NET hoặc Java thì khả năng kiếm công việc mới cũng chỉ loanh quanh ở những cái là thế mạnh của bạn. Trừ khi bạn chấp nhận dành thời gian để học công nghệ mới.
Yêu cầu phải tự upgrade kiến thức, kĩ năng: vòng đời của công nghệ càng ngày càng ngắn. Nếu 20 năm trước nói đến lập trình web bắt buộc phải biết Flash, 10 năm trước phải biết PHP, thì giờ ưu tiên là Javascript.
Thị trường sẽ hẹp: specialist với expertise về ngành, kiến thức, kĩ năng về một công nghệ nhất định sẽ chỉ có thể làm việc loanh quanh với những nhóm ngành đó. Nếu nhóm ngành đó bị thay đổi đột phá (disrupted) của công nghệ thì ít nhiều họ sẽ bị ảnh hưởng.
Generalist
Generalist thường sẽ kết hợp với nhiều người, lead nhiều team khác nhau. Những đặc điểm này yêu cầu họ phải có khả năng giao tiếp tốt và kĩ năng lãnh đạo. Và vì họ biết cách giao việc nên khả năng mở rộng và tác động vào kết quả sẽ mang phạm vi lớn hơn. Ảnh hưởng của họ nằm ở việc tận dụng nguồn lực con người.
Pros:
Generalist thường sẽ đón nhận nhiều cơ hội vì kiến thức và kĩ năng rộng. Từ đó giúp họ có cái nhìn toàn cảnh do tích lũy nhiều góc nhìn từ nhiều phía.
Khả năng tư duy phản biện sẽ được hình thành thông qua làm việc với nhiều bộ phận, nhiều công nghệ khác nhau, những yêu cầu khó khăn của các bên bắt buộc generalist phải tư duy tìm ra giải pháp thích hợp.
Khi được cất nhắc lên vị trí lead, manager, thì là lúc họ cũng rèn luyện và mài dũa kĩ năng lãnh đạo.
Do được làm việc với nhiều bên, generalist sẽ phát triển kĩ năng và kiến thức liên quan. Điều này giúp họ có khả năng chuyển đổi giữa các bộ phận một cách nhanh chóng, có độ an toàn nghề nghiệp cao hơn.
Cons:
Cái gì cũng biết nhưng không cái gì thật sự biết sâu. Bạn biết cloud, biết devops, biết web development, nhưng khi gặp một vấn đề nghiêm trọng thì lại thiếu kinh nghiệm để tự tìm ra câu trả lời.
Vì là phải dàn trải sức để học cái mới, lead team, nhận thêm nhiều trách nhiệm. Khả năng cao sẽ dễ bị burn out, kiệt sức.
Lương không cao so với specialist, và dễ kiếm người thay thế nếu kĩ năng chỉ ở mức tầm trung, nhất là kĩ năng lập trình.
Những khác biệt
Mỗi role sẽ có những skill set khác nhau. Generalist cần biết về system design và kĩ năng giao tiếp để dẫn dắt đội nhóm. Specialist thì ít bị phụ thuộc vào người khác khi làm việc và cần duy trì domain expertise.
Trong các công ty phần mềm đã có những lộ trình rõ ràng cho việc phát triển và thăng tiến. Cơ bản là generalist sẽ đáp ứng được nhiều vị trí hơn specialist.
Ở các công ty công nghệ thì sẽ có chức danh Engineering Manager nếu đi theo hướng generalist. Còn specialist nếu thăng tiến sẽ có những vị trí như Senior, Principal Engineer hoặc Staff Engineer. Lúc này các specialist là người chịu trách nhiệm đặt nền móng cho cả một hệ thống phần mềm.
Làm sao để chọn?
Sẽ không có câu trả lời hoàn hảo cho từng người. Kinh nghiệm cá nhân là hãy làm việc thật tận tâm và hết mình kết hợp với quan sát bản thân để biết được thế mạnh của mình là gì.
Nếu bạn tận dụng được thế mạnh, bạn cảm thấy thoải mái và đạt kết quả trong công việc. Kết quả tốt sẽ khuyến khích bạn nỗ lực, dành thời gian công sức để học thêm những kĩ năng mới trong công việc. Vòng lặp cứ thế tiếp diễn.
Cứ cho phép mình thử và trải nghiệm các kĩ năng khác nhau trong giai đoạn đầu của sự nghiệp, thường là khoảng 5-10 năm. Sau khi đã trải qua nhiều vị trí trong ngành phần mềm, bạn sẽ hiểu mình sẽ giỏi chỗ nào, dở chỗ nào. Từ đó tiếp tục cải thiện và tự đánh giá con đường tiếp theo.
Như chính bản thân, khi mới ra trường mình làm vị trí technical support, gõ vài dòng code command line, hàn bo mạch máy POS. Sau đó công ty cần lập trình module trên iOS và mình tự học tự làm. Rồi dần chuyển sang Android, rồi hybrid mobile development (ionic, react native, flutter). Sau chuyển sang web development, sau đó làm coordinator, rồi làm business analyst, kiêm tester...
Dần dần mình xây dựng cho mình bộ kĩ năng và góc nhìn toàn cảnh hơn. Qua cả quá trình, mình nhận thấy mình có xu hướng nghiên về generalist. Đồng thời mình cũng nhận được feedback là khả năng giao tiếp mình đủ hiệu quả trong môi trường công việc. Kết hợp tất cả lại thì mình dần dần chuyển sang hướng generalist và đến giờ vẫn thấy ổn với lựa chọn này.
Điều cuối cùng bạn cần biết là cả generalist và specialist đều không thể phát triển độc lập.
Nếu cần mình vẫn sẵn sàng nhảy vào code, còn bình thường thì vẫn review để nắm được tình hình, và giữ cho cái sense của một lập trình viên không bị mai một. Và mình vẫn làm việc với các Solution Architect hàng ngày để trao đổi công việc.
Tóm lại, cho dù generalist hay specialist thì bạn vẫn phải nỗ lực để phát triển và thích nghi trong thời đại VUCA này.
Những ví dụ tiêu biểu cho cả specialist và generalist:
Generalist:
Elon Musk, CEO của Space X & Tesla, từng là programmer chủ chốt trong 2 công ty đầu tiên là Zip2 và X.com (về sau sát nhập với Paypal)
Mark Zuckerberg, CEO của Meta, người từng đặt những dòng code đầu tiên cho ứng dụng facebook
Phạm Minh Tuấn, CEO của FPT Software hiện tại, từng là lập trình viên khi mới bắt đầu sự nghiệp tại chính FSoft.
Specialist:
Linus Torvalds: người tạo ra và dẫn dắt các lập trình viên phát triển phần nhân Linux. Còn là người tạo ra Git (hệ thống quản lý phiên bản - version control system).
Tim Berners-Lee: người phát minh ra World Wide Web, đặt nền móng cho internet toàn cầu.
Nguyễn Hà Đông: người viết ra game Flappy Bird.