Hi Hoàng

Blog chuyên về kỹ năng quản lý và lãnh đạo

Con đường sự nghiệp của một kỹ sư phần mềm (phần 3)

,

Thực ra quyết định chọn công ty nào cũng tương đối dễ dàng.

Công ty Mỹ có quy trình phỏng vấn khó hơn hẳn. Vòng nào mình cũng cảm thấy hồi hộp và phải vắt óc suy nghĩ tối đa. Cho nên khi vượt qua được, mình trân trọng cơ hội đó hơn. Người ta nói: “cái gì khó có được thì mới biết quý trọng”, đúng là như vậy thật.

Ngoài ra, công ty Mỹ còn có một quy trình làm việc Agile chuyên nghiệp với phong cách “lập trình đôi” (pair programming) độc nhất vô nhị ở Việt Nam, slogan cũng rất ấn tượng nữa. Mình nghĩ mình sẽ học được nhiều ở đây.

Do đó, mình đành từ chối công ty Úc mặc dù chỉ còn 2 tuần nữa là tới ngày đi làm đầu tiên bên đó. Mình nói lý do huỷ hợp đồng là vì “tìm được cơ hội khác tốt hơn”. Chị nhân sự cố gặn hỏi xem là công ty nào, thậm chí còn đề nghị tăng lương cho mình. Mình rất áy náy nhưng cũng đành từ chối một cách dứt khoát.

Rồi mình bắt đầu vào làm ở công ty mới.

Hành trình mới với rất nhiều điều để học hỏi

Vào đây mình thấy công ty toàn là người trẻ, đa số sinh năm 88 đến 95. Tuy trẻ nhưng ai cũng có điểm nổi trội đặc biệt: người thì là chủ tịch câu lạc bộ lập trình ở trường đại học, người làm trợ giảng, nhiều người tốt nghiệp thủ khoa, nhiều người đã đi du học nước ngoài, nhiều người sắp đi du học, nhiều người hay đi chia sẻ ở các meetup, v.v. Mình thấy hơi choáng ngợp vì mình không có thành tích gì nổi bật cả, bỗng dưng được gặp hàng loạt nhân tài tập trung hết vào một chỗ như thế này, mình cảm thấy thật may mắn.

Tuần đầu tiên, mình chủ yếu ngồi đọc tài liệu về quy trình làm việc Agile của công ty. Sau đó mình được cử đi Hà Nội công tác 3 tháng để làm một dự án mới, mình sẽ lập trình đôi với một chị ngoài đó.

Chuyến công tác xa đầu tiên

Trong dự án này, mình không những phải code thật nhanh để kịp giao hàng cho khách mỗi tuần mà còn phải học cách viết “test tự động” nữa. Quy trình làm việc của công ty không có khâu QA nên kỹ sư được yêu cầu phải viết “test” để tự kiểm tra xem phần mềm có làm đúng chức năng hay không. Cứ có code là phải có test, thậm chí có khi còn viết test trước cả khi viết code, cái này thuật ngữ chuyên môn gọi là “Test-driven development”, viết tắt là “TDD”.

Mình như được khai sáng khi lần đầu tiếp xúc với thế giới “test” này. Ở thời điểm đó, mình chưa nghe công ty phần mềm nào ở Việt Nam nghĩ tới việc viết test, chứ nói gì tới việc tập trung gần một nửa thời gian để viết test như công ty mình.

Khi có test rồi thì không cần QA nữa, chỉ cần cho máy tự chạy test qua tất cả các trường hợp, nếu test fail ở đâu thì mình biết phải sửa code ở chỗ tương ứng để làm test pass. Bởi vì là test tự động nên mình muốn chạy bao nhiêu lần cũng được, ngày chạy 5 lần, 10 lần, 20 lần, hay chạy mỗi khi push code lên. Nhờ có test mà mình code ít bị lỗi hơn và khi có lỗi thì cũng biết sửa chỗ nào. Test trở thành lĩnh vực mình đam mê và muốn master.

Sau 3 tháng ở Hà Nội, mình hoàn thành dự án đúng thời hạn, đồng thời cũng học được rất nhiều thứ:

  • Học cách viết UI test cho iOS.
  • Học cách cài đặt CI (Continuous Integration) để chạy test tự động cho iOS.
  • Học cách chat tiếng Anh với khách hàng nước ngoài sao cho chuyên nghiệp.
  • Học cách nói chuyện tiếng Anh với khách hàng của chị đồng nghiệp và cách chị xử lý tình huống (lúc đó chị là người giao tiếp chính, chị có IELTS 8.5!).
  • Học cách “yêu xa” 😂.

Tiếp cận với lập trình web và kỹ thuật lập trình đôi

Quay lại tp Hồ Chí Minh, mình thấy tự tin hơn với khả năng viết test tự động cũng như khả năng tiếng Anh của mình. Tuy nhiên, do không có dự án iOS nào mới nên mình được chuyển sang học làm web sử dụng “Ruby on Rails”. Mình chẳng biết tí gì về làm web hay “Ruby” hay “Rails” cả, nhưng thấy mọi người ai cũng giỏi cái này nên mình cũng phấn đấu học.

Sau đó, mình được phân công lập trình đôi với một bạn senior có nhiều năm kinh nghiệm làm “Rails” để bạn kèm cặp. Lúc này, mình mới thấy được lợi thế của việc lập trình đôi:

  • Lập trình đôi nghĩa là hai người cùng ngồi vào một máy tính, một người code, một người nói. Cả hai cùng thảo luận để giải quyết vấn đề.
  • Khi tiếp nhận vấn đề, mình có thể xem được cách một người senior suy nghĩ và giải quyết như nào, rồi xem cách họ code luôn.
  • Thường sau vài tiếng thì hai người sẽ đổi vai. Khi mình code thì người senior có thể review và góp ý ngay cho mình, đây chính là đỉnh cao của code review.
  • Tương tự, khi giao tiếp tiếng Anh với khách hàng, mình xem được cách người senior nói chuyện và trả lời các câu hỏi. Khi mình chat thì họ cũng review được cách mình dùng từ và xem thử câu trả lời của mình có hợp lý không.
  • Nói chung mình thấy “lập trình đôi” là cách hiệu quả nhất để trao đổi kiến thức giữa hai kỹ sư, đặc biệt là để huấn luyện nhân viên junior. Mình may mắn được làm chung với một bạn rất nhiệt tình, cái gì bạn đó cũng chỉ, thấy mình sai là bạn nhắc, bởi vậy chỉ sau vài tháng mà mình đã nhanh chóng nắm được các kỹ thuật làm web và backend cơ bản với “Ruby on Rails”.

Ngoài ra, nhờ học “Ruby on Rails” mà mình cũng học được luôn cách viết “unit test” theo phong cách Behaviour-driven development (hay BDD), cách viết “integration test” bằng Cucumber, cách sử dụng terminal/console hiệu quả, cách hoạt động của “git”, cách viết giao diện cho website bằng HTML và Javascript, cách debug & inspect website, cách gõ bằng “vim”, vân vân và vân vân.

Mình cảm thấy những điều mình học được ở công ty này trong vòng một năm có khi còn hơn cả 10 năm đi làm ở các công ty khác, thậm chí còn chưa chắc học hết được những điều đó.

Đây là công ty đã đưa mình lên một tầm cao mới trong sự nghiệp phát triển phần mềm.

Phát triển vượt bậc

Sau gần 2 năm làm việc cho công ty, mình đã có những bước tiến vượt bậc.

Từ một thanh niên “code lộn xộn, miễn sao phần mềm chạy là được”, mình trở thành kỹ sư làm việc có quy trình hơn, biết cách kiến trúc code sao cho đẹp, dễ bảo trì và dễ test, kiến thức của mình cũng được mở rộng ra rất nhiều chứ không còn bó buộc ở iOS nữa. Mình biết phân tích và trình bày một vấn đề kỹ thuật (cả nói và viết) sao cho người khác hiểu để mà thảo luận. Mình còn là một trong top những người review code nhiều nhất trong công ty. Nói chung mình đã gần giống một “senior” thực sự.

Từ một người mới ngày đầu còn ú a ú ớ không biết trả lời khách hàng bằng tiếng Anh như nào, mình đã học cách trở thành một tư vấn viên kỹ thuật (consultant) tương đối chuyên nghiệp, mình biết cách đặt câu hỏi để lấy được yêu cầu khách hàng một cách chính xác nhất, biết trả lời thắc mắc của khách hàng, biết nói chuyện như một người bạn và đôi khi còn biết pha trò nữa. Kỹ năng giao tiếp bằng tiếng Anh của mình đã tiến bộ đáng kể.

Mình đã gặp được rất nhiều bạn trẻ tài năng ở đây, những người mà mình luôn ngưỡng mộ. Có nhiều bạn nhỏ tuổi hơn mình nhưng đã đạt được những thành tựu đáng nể, có những anh chị senior dày dặn kinh nghiệm, dù cho mình có “luyện” thêm vài năm nữa cũng chưa chắc làm bằng một nửa của họ. Ai cũng có điểm thú vị đáng để học hỏi.

Lại thấy bị “chững” lại

Nhưng rồi điều gì đến cũng sẽ đến, mình bắt đầu cảm thấy bị “chững” lại.

Mình không còn học nhanh như trước nữa. Công việc cũng trở nên dễ hơn khi mình đã nắm được hết cách làm.

Mình cố thử thách bản thân nhiều hơn ở công ty, như là: code review nhiều hơn, xung phong làm dự án mã nguồn mở cho công ty, tập code nhanh hơn mà vẫn đảm bảo chất lượng, học gõ “vim”, v.v. Nhưng không có việc nào mang lại hứng thú lâu dài cả.

Tập tành viết blog

Sau đó, mình thử viết blog để chia sẻ các kỹ thuật “test tự động” trên iOS. Mình quyết định chọn chủ đề này vì lúc đó mình không thấy ai viết về nó một cách chi tiết, có thể là do mọi người chưa thấy được tầm quan trọng của test.

Thế là mình mò mẫm tạo một trang blog, mua một tên miền và bắt đầu đăng những bài viết đầu tiên. Mình đăng mỗi tuần một bài và có chia sẻ ở các Facebook group về iOS và cả trên Linkedin.

Phản hồi của mọi người cũng tương đối tốt, nhiều người like bài, một số người bình luận hỏi thêm về kỹ thuật, một vài người khen. Mỗi ngày có hơn chục người xem profile của mình trên Linkedin, có 3-5 người muốn kết nối.

Mình không ngờ là những bài viết của mình lại có tầm ảnh hưởng như vậy. Con số tuy nhỏ nhưng mình thấy được giá trị của việc viết blog. Mình đi làm 3-4 năm kinh nghiệm nhưng chưa bao giờ thấy rõ được tầm ảnh hưởng trong công ty cũng như ở ngoài cộng đồng. Chỉ khi viết blog thì mình mới cảm nhận được ngay giá trị mà mình tạo ra và nhận được nguồn động lực lớn lao khi có người like và cám ơn.

Và cứ như thế, mình tiếp tục ra bài đều đặn và càng ngày càng viết chi tiết hơn.

Được công nhận

Một hôm ngủ dậy, mình nhìn điện thoại thấy có hàng loạt thông báo mới từ Twitter. Mình khá bất ngờ, lật đật mở ra kiểm tra. Mình không thể tin nổi nữa.

Bài viết của mình được chia sẻ (retweet) bởi RayWender Lich (website nổi tiếng nhất chuyên viết các bài hướng dẫn lập trình cơ bản). Sau đó cứ cách vài phút là có thêm một người chia sẻ, cứ thế cho đến hơn 60 lượt chia sẻ và 135 lượt like, một con số kỷ lục trên Twitter mà mình chưa bao giờ dám nghĩ tới.

Sau đó, AppCoda (một trang chuyên viết bài hướng dẫn lập trình iOS cũng khá nổi tiếng) nhắn tin mời mình về viết bài cho họ. Lúc này, mình vẫn chưa tin nổi là bài viết của mình lại hot như vậy. Nhưng nhận được lời mời từ một trang web danh tiếng, mình biết đây là cơ hội có một không hai. Đây là cơ hội để mình “toả sáng”.

Mở ra nhiều cơ hội lớn

Rồi mình bắt đầu viết bài cho AppCoda. Phải mất gần một tháng mới viết xong một bài (hơn 6000 từ). Anh biên tập bên AppCoda rất thích bài viết đó, ảnh cứ khuyến khích mình viết thêm mãi, do hiện tại website của ảnh chưa có ai viết về chủ đề này. Tuy nhiên, mình đã từ chối vì mình nhận thấy rằng viết bài cho người khác cũng vui, nhưng không thú vị bằng việc xây dựng blog riêng của mình.

Song song thời gian đó, mình cũng nhận được nhiều lời mời phỏng vấn từ nhiều công ty lớn nhỏ ở Việt Nam lẫn nước ngoài. Mình cũng không ngờ là có ngày mình được săn đón đến như vậy. Trước đó, mình không nộp đơn vào công ty nào cả, họ chỉ đọc blog rồi tự tìm đến mình. “Viết blog thật là lợi hại”.

Trong số những lời mời thì có 3 công ty của Singapore:

  • Công ty A: cung cấp nền tảng kết nối game thủ chơi online, làm phần mềm quản lý phòng net, và có kinh doanh thương mại điện tử.
  • Công ty B: là trang web tìm nhà trọ nổi tiếng ở Singapore.
  • Công ty C: là dịch vụ đặt xe hơi/taxi nổi tiếng ở khu vực Đông Nam Á.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *