Tự học một cách chủ động từ dự án và đồng nghiệp
Người viết: Pham Tuan Xin chào các bạn, đây là một bài dịch từ bài viết của anh Drew Colthorp, hiện đang là developer và team lead tại công ty Atomic. Trong bài viết này, anh ấy chia sẻ về những kinh nghiệm của mình từ khi là một thực tập sinh cho đến bây giờ là một team lead, về ...
Người viết: Pham Tuan
Xin chào các bạn, đây là một bài dịch từ bài viết của anh Drew Colthorp, hiện đang là developer và team lead tại công ty Atomic. Trong bài viết này, anh ấy chia sẻ về những kinh nghiệm của mình từ khi là một thực tập sinh cho đến bây giờ là một team lead, về cách đặt mục tiêu, kế hoạch tự học code chủ động để có thể học hỏi được nhiều điều từ các dự án và từ các đồng nghiệp của mình.
Bài dịch của mình chủ yếu theo ý hiểu của mình, có gì sai sót mong các bạn góp ý. Dưới đây là nội dung chính của bài viết.
Có thể bạn muốn xem thêm:
Project của bạn là một lớp học, hãy chủ động học hỏi
Nếu bạn giống tôi, bạn luôn học được một số điều gì đó mới từ một project, nhưng nó thường thường là xảy ra một cách tình cờ, sự tập trung chủ yếu của bạn chỉ là việc viết code.
Tôi sẽ nói cho bạn rằng bạn đang lãng phí những cơ hội tuyệt vời. Đồng nghiệp của bạn có rất nhiều điều để dạy cho bạn, và cũng có rất nhiều điều học từ bạn. Một project team là một môi trường hoàn hảo cho việc học tập, nhưng bạn sẽ chỉ đạt được đầy đủ giá trị nếu học tập có chủ tâm và có suy nghĩ về nó.
Câu chuyện của tôi – Từ bị động đến học chủ động
Với công việc là một người tư vấn tại Atomic nó mang lại cho tôi một thử thách tuyệt vời để phát triển. Chúng tôi làm việc trong các nhóm đa ngành, nơi mà trách nhiệm và vai trò của mỗi người được chia sẻ và không tách biệt rõ ràng. Điều này đẩy mỗi người ra khỏi vùng comfort zone của chính mình, làm cho mọi người mở rộng tầm nhìn về vai trò của mình và phát triển những kỹ năng mà mình đã bỏ qua trước đây.
Những dự án của chúng tôi thường khá ngắn, trong khoảng 4 đến 12 tháng. Nhịp độ này cung cấp cho chúng tôi một chu kỳ nhanh chóng trong việc tiếp xúc với các vấn đề khinh doanh, công nghệ và các liên kết mới. Chúng tôi hành trình qua các kênh tri thức lặp đi lặp lại, và mỗi lần lại có thể học được những điều mới mẻ về cái nghề của mình.
Tôi tốt nghiệp từ GVSU trong năm 2006 với một tấm bằng về KHMT và Toán học, nhưng tôi có hứng thú chủ yếu về các mảng technical của phần mềm. Tôi đã lo lắng khi nói chuyện với khách hàng và hầu như không biết gì về thiết kế. Tôi bắt đầu ở Atomic với vai trò là một thực tập sinh với các kế hoạch để trở lại trường và tốt nghiệp ở một thời điểm nào đó, nhưng tôi đã nhanh chóng nhận ra rằng:
- Tôi biết các thuật toán nhưng không có kinh nghiệm gì trong việc xây dựng các hệ thống thực tế
- Tôi có thể đặt các button lên màn hình, nhưng tôi không hề có một chút ý tưởng gì về cách những thứ đó nên được kết nối với những ý tưởng trong đầu của người dùng như thế nào.
- Thậm chí tôi có thể xây dựng một hệ thống nhưng làm sao tôi có thể xây dựng được một cấu trúc linh hoạt để dễ dàng thích ứng với sự thay đổi của các nghiệp vụ mới?
- Rồi một khi tôi đã có thể xây dựng nên một hệ thống linh hoạt như thế, liệu tôi có thể trở nên tốt hơn trong việc tìm ra cốt lõi của vấn đề và thiết kết chúng tốt hơn ngay từ đầu không?
Trải qua quá trình của rất nhiều dự án lớn và nhỏ, tôi đã học được những quan điểm mới, những kỹ năng được mài dũa và tiếp tục để từ từ hướng đến sự thành thạo về các vấn đề trong quá trình phát triển phần mềm và tư vấn.
Nhìn lại hành trình của tôi cho đến nay, tôi đã đến để xem xét về một dự án phần mềm, đơn vị nhỏ nhất về công việc của chúng tôi ở Atomic, hơn là tạo ra được một sản phẩm được phân phối và làm hài lòng khách hàng. Có một khía cạnh quan trọng nữa trong nội bộ, đó là: một dự án như là một trải nghiệm nhóm và một cơ hội học tập cho từng cá nhân.
Trong nhiều năm, tôi đã trải nghiệm điều này một cách bị động, vật lộn với các thử thách và cuối cùng cũng đến thành công. Nhưng theo thời gian, tôi đã tìm ra được một phương pháp tiếp cận chủ động hơn để dạy và học trong một software team.
Những mục tiêu học tập bạn nên có trong mỗi dự án
Không quan trọng bạn có ít hay nhiều kinh nghiệm, hay bạn có quen thuộc với tech stack của dự án hay không, tất cả các developer đều có thể chia sẻ những mục đích học tập này.
Với vai trò là người học
- Tôi nên tập trung để hiểu nơi mà mình đang đứng trong sự nghiệp và nơi mà tôi hy vọng đạt được tiếp theo. Mục đích học tập và phát triển tiếp theo mà tôi có thể đạt được trong dự án này là gì? Và những thử thách nào tôi có thể đảm nhận hoặc tình nguyện làm để thúc đẩy các mục tiêu đó?
- Tôi nên tìm kiếm sự đánh giá, phê bình về các chiến lược, kỹ thuật và kết quả làm việc của mình từ đồng nghiệp của mình và nhìn nhận một cách khách quan về những điều mình đã làm.
- Tôi phải liên tục nhắc nhở bản thân không đánh giá những lựa chọn của mình một cách cá nhân. Luôn có những cơ hội để cải thiện chiến lược hiện tại và các chiến lược thay thế với sự đảm bảo về một sự cân bằng hơn về lợi ích và chi phí. Một kết quả không tối ưu không phải là một thất bại, mà là một thử nghiệm thành công để tạo ra dữ liệu mới hướng tới sự tối ưu.
- Những đồng nghiệp của tôi là những người thông minh, năng động và giàu kinh nghiệm với những quan điểm và nền tảng đa đạng. Tôi nên xem cách họ giải quyết những thách thức mà họ phải đối mặt và tìm kiếm các chiến lược và quan điểm mới mà mình có thể áp dụng.
Với vai trò là một mentor
- Tôi nên cố gắng chủ động hiểu trước vị trí mà đồng nghiệp của tôi đang đứng trong sự nghiệp của họ và mục đích của họ trong dự án này. Khi team đối mặt với các thử thách mới, tôi nên nhắm đến việc tạo cơ hội cho các đồng nghiệp, những người có thể thu được nhiều kinh nghiệm nhất.
- Các chiến thuật về cách hợp tác giữa giáo viên và học viên là rất quan trọng: ví dụ, đây có phải là tình huống mà cả hai nên làm việc chặt chẽ với nhau trên một thử thách mà hoàn toàn không quen thuộc với người học hoặc là mới đối với cả hai? Hay đó sẽ là tốt hơn cho người học nếu để cho họ tự nhận trách nhiệm và giải quyết vấn đề, trong khi tôi sẽ ở phía sau và đưa ra những hướng dẫn và phê bình?
- Khi đưa ra phản hồi cho các đồng đội, truớc hết tôi nên tìm cách hiểu suy nghĩ và lý trí của họ. Tôi nên khuyến khích cũng như đưa ra phê bình. Tôi nên tập trung vào một lượng nhỏ các bài học quan trọng và không nên vùi dập họ với các than phiền. Mục tiêu của tôi là giúp họ phát triển sự nghiệp cũng nhưng tìm cách cung cấp cho khách hàng những dịch vụ tuyệt vời.
- Nếu tôi đang ở trong vị trí để lựa chọn công nghệ, kiến trúc hoặc workflow cho team, trước tiên tôi phải làm những gì tốt nhất cho khách hàng. Tuy nhiên, với một loạt các lựa chọn, tôi cũng nên đưa ra các chọn lựa giúp team phát triển được nhiều kinh nghiệm nhất để họ có thể chuẩn bị tốt hơn cho các dự án tiếp theo với các khách hàng khác.
Video: Trọn bộ các chủ đề nâng cao của DevOps
Mục tiêu học tập về kỹ thuật, dựa trên cấp độ kinh nghiệm
Ngoài các mục tiêu chung đó, còn có những mục tiêu khác tương ứng với cấp độ kinh nghiệm của bạn và sự quen thuộc với công nghệ của dự án của bạn.
- Newbie: ai đó đang học những xâu chuỗi trong một hoặc vài lĩnh vực của project, có thể là tech stack hoặc những quy trình phát triển của Atomic. Có thể là ai đó đang trong chương trình Accelerator của chúng tôi; một người mới được tuyển, chưa có kinh nghiệm; hoặc một kỹ sư senior của Atomic đang làm việc với một công nghệ, codebase hoặc lĩnh vực không quen thuộc.
- Crusher: một nhà phát triển với đủ kinh nghiệm với tech stack và quy trình phát triển phần mềm của chúng tôi để dẫn dắt quá trình phát triển ở tất cả các tính năng. Thường thường là một người với vài năm kinh nghiệm, nhưng không phải luôn luôn là vậy.
- Tech lead: một developer đang làm việc với vai trò tư vấn và lãnh đạo team. Tech leads làm việc chặt chẽ với Delivery Lead và Design Lead. Tech Lead phải đảm bảo việc implement phải gắn chặt với nghiệp vụ và yêu cầu của người dùng.
Mỗi developer hoạt động trong cái vai trò này ở các thời điểm khác nhau giữa các dự án. Những developer có kinh nghiệm thường là Teach Lead, nhưng cũng có thể là Crusher. Đôi khi những vai trò này có thể bị đảo ngược và họ sẽ là Newbie khi làm việc trong một tech stack mới.
The Newbie
Newbie nên hướng đến level của Crusher càng nhanh càng tốt. Mục tiêu của họ bao gồm:
- Trước tiên tôi phải cố gắng trở thành một thành viên năng suất của nhóm bằng cách dốc sức vào các công nghệ và luyện tập
- Tôi nên chủ động xác định điểm yếu trong kiến thức của mình và xây dựng một chiến lực để cải thiện những khu vực đó, có lẽ bằng cách đọc sách hoặc tài liệu hoặc tình nguyện giải quyết các task mà tôi cảm thấy mình đang yếu nhất.
- Tôi sẽ chia sẻ mục tiêu và những điểm yếu tự đánh giá của mình với Crusher hoặc Teach Lead mà tôi đang hợp tác, và tìm kiếm sự hỗ trợ của họ để tìm ra phương án giải quyết tốt nhất cho những thử thách này
- Tại những điểm xác định trong quá trình bắt đầu, giai đoạn giữa và giai đoạn kết thúc task, tôi sẽ dừng lại và đánh giá phương pháp của mình và tìm kiếm sự phê bình và lời khuyên từ những người khác
The Crusher
Một Crusher nên cam kết những sự luyện tập giống như một Newbie để tiếp tục quá trình phát triển kỹ thuật cho riêng mình. Tuy nhiên, một Crusher nên hướng đến việc hỗ trợ sự phát triển của Newbie và học những kỹ năng mới để trở thành Teach Lead trong tương lai.
- Tôi nên là một mentor tốt với Newbies, và tiếp tục luyện tập và phát triển các kỹ năng cốt lõi của bản thân
- Tôi nên xác định các khu vực phát triển cho bản thân mình với tư cách là một Crusher bằng cách tiếp tục cải thiện năng suất làm việc và hoàn thiện các kỹ thuật
- Khi tôi đạt đến trạng thái ổn định của một Crusher, tôi nên tìm hiểu từ Teach Lead về vai trò và các thách thức mới. Tôi nên cố gắng tìm cách khám phá và hiểu các mục tiêu có liên quan về nghiệp vụ nâng cao, thiết kế và kiến trúc
The Teach Lead
Trở thành một Teach Lead là một vai trò phức tạp yêu cầu rất nhiều kỹ năng mà không được thực hiện nhiều trong các vai trò khác (trừ khi họ tự tìm kiếm các cơ hội khi là một Crusher). Phải mất một thời gian dài để có thể thành thạo trong vai trò này, đặc biệt là khi mọi thứ có thể thay đổi rất nhiều qua các dự án khác nhau. Để trở thành một Teach Lead tốt yêu cầu bạn là một kiến trúc sư hệ thống tốt, một mentor tốt và một nhà tư vấn tốt. Những mục tiêu của Teach Lead bao gồm:
- Tôi nên hướng đến là một mentor tốt của Newbies và Crushers và tìm kiếm những task tạo ra cơ hội tốt cho từng thành viên trong team
- Tôi nên chọn công nghệ phù hợp với yêu cầu của khách hàng nhiều nhất có thể, cung cấp một môi trường học hỏi tốt nhất cho team để giúp họ trong những project tiếp theo: những ngôn ngữ chúng tôi hay sử dụng, những mẫu kiến trúc lặp đi lặp lại, những nguyên tắc cung cấp nền tảng vững chắc cho hầu hết mọi dự án
- Tôi phải xem các mẫu thiết kế và kiến trúc đã được lên kế hoạch của chúng tôi không chỉ là hiện vật, mà còn là thông điệp và quan điểm phải được củng cố và tăng cường liên tục trong đội ngũ
- Tôi nên chú ý đến những thách thức mà nhóm đang phải đối mặt và xử lý chúng như là tín hiệu liên quan đến hiệu quả của kiến trúc và công cụ dự án. Các điểm khó khăn và va chạm của đội là cơ hội học tập của tôi, để tìm ra những lĩnh vực cần cải tiến.
- Vì Tech Leads thường là những nhà phát triển và tư vấn có kinh nghiệm nhất trong một nhóm, tôi có thể cần phải tìm kiếm những người khác trong công ty, những người mà có thể cung cấp thêm quan điểm và phê bình mà tôi cần để phát triển.
- Tôi phải liên tục học hỏi từ khách hàng, trưởng nhóm các bộ phận khác và tiếp tục giúp nhóm hiểu rõ hơn về sứ mệnh và sự ưu tiên của chúng tôi.
Bắt đầu cho đi
Một khía cạnh cuối cùng tôi đã nhận thấy trong sự nghiệp của mình tại Atomic là một sự chuyển đổi dần từ việc có rất nhiều điều để học về những gì chúng tôi cần làm đến việc có nhiều thứ để dạy người khác. Vì điều này đã trở nên rõ ràng hơn đối với tôi, nó đã thúc đẩy tôi tập trung hơn vào việc trở thành một người cố vấn, một giáo viên giỏi và bớt đi một chút về việc học về công nghệ và các quy trình phát triển. Nói một cách khác, điều tôi muốn tìm hiểu thêm bây giờ là trở thành một người cố vấn tốt hơn cho mọi người và một giáo viên có kỹ năng phát triển và tư vấn hiệu quả hơn, để giúp đỡ mọi người và tạo ra một đội phát triển mạnh và hiệu quả hơn.
TopDev via Viblo