Photo by Ladd Greene on Unsplash

#19 — MỖI NGÀY 1 BÀI VIẾT

Công việc đầu tiên và một chú ếch được mang lên miệng giếng

Giành chiến thắng ở các cuộc thi thuộc các thể loại khác nhau, xây dựng khoá học và giảng dạy cho hơn 100 bạn sinh viên, tôi đã nghĩ mình đã biết rất nhiều về thế giới lập trình. “Hoá ra thế giới đó chỉ là cái giếng mà giờ tôi chỉ mới lên được tới miệng giếng” — Tôi tự nói với mình sau những ngày làm việc đầu tiên.

Ở phần này, tôi sẽ chia sẻ quá trình tôi đã làm việc ở công ty đầu tiên, những trải nghiệm và những kiến thức vô giá mà tôi đã học được ở đây. Những kiến thức đó đã tạo tiền đề để tôi đặt ra định hướng và mục tiêu học tập và phát triển cho bản thân trong những năm tiếp theo.

Photo by Marten Bjork on Unsplash

Cắm mặt code machine learning, độ chính xác cao nhưng không dùng được

Photo by Mika Baumeister on Unsplash

Trong 2 tháng đầu tiên, với kiến thức về xử lý và phân tích dữ liệu tôi có được ở cuộc thi trước đó, tôi được sắp xếp một mình tự phát triển một engine phân loại các bài viết bằng tiếng Việt. Yêu cầu cơ bản là engine nhận vào một bài viết tiếng Việt, và trả về cho biết bài viết nói về chủ đề gì.

Tôi nhận yêu cầu trực tiếp từ CEO của công ty, được anh ấy hỗ trợ một số ý tưởng nhất định, sau đó tự phát triển một mình. Lúc đó, tôi đang thích làm về phân tích dữ liệu nên đã cắm mặt code, mà chẳng quan tâm mấy nó dùng làm gì.

Sau 2 tháng, toàn hoàn thiện engine với độ chính xác ~95%. Tôi demo cho các thành viên trong công ty xem, ai cũng khá ấn tượng, kể cả anh CEO. Nhưng đến hôm sau, tôi gặp một anh khác, là CEO của một sản phẩm social listening mà trước đó anh ấy và CEO hiện tại của tôi cùng sáng lập. Engine của tôi sẽ được dùng để hoàn thiện thêm social listening tool này. Tuy nhiên, sau khi xem xong tôi demo, anh ấy bảo: “Anh không hiểu, cái của em anh không biết dùng vào gì được nữa. Anh cần một cái giống vậy mà cho video kìa, em làm thêm phần đó đi!”. Lúc đó, tôi nghe qua, à okay, làm cho video sẽ khó hơn nhưng tôi cũng có sơ sơ ý tưởng trong đầu, và cũng muốn làm. Nhưng CEO của tôi bảo không làm được đâu, khó lắm, không đủ dữ liệu và hạ tầng để phân tích. Thế là cái engine của tôi rơi vào lãng quên.

Sau ngày hôm đó, tôi thay đổi hẳn suy nghĩ của bản thân trước đó về Machine Learning/AI và Data Science nói chung. Trước đó, tôi cực thích những thứ này, vì đơn giản là những thứ mà nó làm được thật “vi diệu”, bạn tạo ra được những thứ như trong phim khoa học viễn tưởng vậy. Nhưng mà, chúng cũng viễn tưởng thật! Sản phẩm MC/AI của tôi dù độ chính xác có cao, có “cool”, nhưng nó không thật sự mang lại giá trị nghiệp vụ nào cho sản phẩm đích (social listening tool) thì cũng là đồ bỏ. Nhìn kỹ hơn, sản phẩm MC/AI mà tôi phát triển, cũng chỉ là một dịch vụ nhỏ phục vụ cho một sản phẩm hoàn thiện được xây dựng và phát triển một thời gian dài trước đó.

Tóm lại:

  • Trước đó, tôi nghĩ chỉ cần làm một sản phẩm MC/AI thật là “xịn”, thật là “thông minh”, rồi xây dựng sản phẩm dựa trên sự “thông minh” đó, rồi bán và kiếm tiền.
  • Sau đó, tôi nhận ra, cái cần làm trước là một ý tưởng, một sản phẩm thật sự giá trị cho người dùng, và thật sự kiếm tiền được. Sau đó xây dựng một sản phẩm đơn giản thử nghiệm, vận hành và phục vụ người dùng thực tế trước. Sau đó bạn mới biết được cần làm gì tiếp theo để nâng cao trải nghiệm người dùng, lúc đó MC/AI may ra có thể phát huy tác dụng. Còn cái mà bạn tự bảo là “thông minh”, nó chỉ “thông minh” với bạn thôi, còn với người dùng thật sự, thì không đơn giản như thế!

Từ đó, tôi quyết định lùi lại một bước, thay vì đầu tư nghiên cứu sâu hơn về AI, tôi nghiên cứu nhiều hơn về các công nghệ cơ bản phục vụ người dùng hiện tại như Web, di động,…

Xây dựng một sản phẩm mới hoàn toàn, gặp trực tiếp khách hàng, gặp yêu cầu và xây dựng giải pháp

Photo by John Schnobrich on Unsplash

May mắn thế nào, sau đó công ty nhận được một hợp đồng outsource một sản phẩm mới hoàn toàn (khởi nghiệp), yêu cầu cần phải xây dựng một hệ thống, hai ứng dụng di động và một trang web quản trị.

Tôi lúc đó may mắn được anh CEO tin tưởng, định hướng lead dự án sau này, nên cho tôi đi cùng trong tất cả các buổi gặp mặt khách hàng, ngay từ những buổi đầu tiên. May mắn hơn khách hàng này còn là một anh người nước ngoài có nhiều kinh nghiệm khởi nghiệp trên công nghệ. Thời gian đó, dù không tham gia trực tiếp nhiều vào các cuộc hội thoại, tôi có được những cơ hội vô giá để thấy được:

  • Cách anh khách hàng mô tả nghiệp vụ.
  • Cách anh CEO của tôi ghi chú là những nghiệp vụ và phân tích rõ hơn.
  • Cách anh khách hàng hỏi về giải pháp và công nghệ công ty tôi định chọn để xây dựng và lý do tại sao.
  • Cách anh CEO và CTO của tôi trả lời về các giải pháp công nghệ.

Tôi thời điểm đó, chưa bao giờ xây dựng một hệ thống backend server, chưa bao giờ code một ứng dụng di động và web, tất cả chỉ mới tìm hiểu sơ qua. May mắn thay, lúc đó tôi được làm việc trực tiếp với anh CTO của công ty. Anh này cực kỳ giỏi về phần mềm, anh ấy đã khai sáng cho tôi rất nhiều kiến thức, dựa trên đó, tôi biết mình cần phải tìm hiểu nhiều hơn về:

  • HTTP/HTTPS, RESTful server.
  • Xác thực và phân quyền người dùng.
  • Các vấn đề về bảo mật.
  • Vận hành, truy xuất và quản lý các CSDL.
  • Kiến trúc phần mềm, các mẫu thiết kế và vai trò của chúng.
  • Xây dựng ứng dụng di động.

Những kiến thức mà tôi hoàn toàn chưa hề có kinh nghiệm gì, nhưng chúng là những kiến thức cơ bản và quan trọng nhất trong xây dựng và phát triển phần mềm. Tôi lúc đó, thật sự như một chú ếch được mang lên miệng giếng và bị mặt trời chói mờ cả mắt.

Thời điểm đó, tôi thật sự đã cày ngày cày đêm, công ty không yêu cầu như vậy, nhưng tôi thật sự thấy đó là những kiến thức bắt buộc mà tôi phải có để phát triển tiếp sự nghiệp sau này (như ở phần trên có giải thích). Đồng thời, tôi cũng muốn khẳng định bản thân để sớm có thể lead dự án và có những trải nghiệm mới.

Những ý tưởng đầu tiên về quy trình làm việc và quy trình phát triển phần mềm

Photo by You X Ventures on Unsplash

Dự án này cũng là lần đầu tiên, tôi không chỉ làm việc một mình, tôi phải làm việc với team, với khách hàng. Thời điểm này, công ty của tôi cũng chưa có một quy trình phát triển và làm việc rõ ràng. Thế là, một lần nữa, tôi và mọi người lại phải cùng nhau lên giải pháp, thử nghiệm và tối ưu dần dần quy trình làm việc và phát triển phần mềm.

Về quy trình làm việc, tôi lần đầu được trải nghiệm Agile và Scrum. Lúc đầu, chúng rất trừu tượng và tôi cũng chẳng mấy giá trị của chúng. Sau đó dần dần, tôi hiểu ra hơn, là đó là giải pháp cho những vấn đề mà chắc chắn bạn sẽ gặp khi làm việc nhiều người và với khách hàng:

  • Làm sao để khách hàng biết là chúng tôi đang phát triển sản phẩm được đến đâu? Đã hoàn thành được gì? Và có kịp tiến độ không?
  • Làm sao để chúng tôi chắc là sản phẩm chúng tôi làm đúng với yêu cầu của khách hàng?
  • Làm sao để khách hàng dùng được sản phẩm thời điểm hiện tại của chúng tôi?
  • Khi khách hàng thay đổi yêu cầu, giải quyết thế nào?
  • Làm sao để một thành viên trong team biết được mình nên và cần tập trung vào làm gì mỗi ngày?
  • Làm sao để biết một thành viên trong team đang làm việc hiểu quả hay không?
  • Một thành viên trong team gặp vấn đề, không biết giải pháp thế nào? Làm sao để phát hiện và giúp anh ấy sớm nhất?
  • … và rất nhiều câu hỏi khác.

Lúc đó, tôi thật sự lần đầu thấy được xây dựng một sản phẩm công nghệ là như thế nào? Sẽ có những vấn đề gì cần giải quyết? Cần phải chuẩn bị những gì để cả team có thể làm việc hiệu quả, duy trì đúng tiến độ, và làm hài lòng khách hàng?

Tôi sau đó bắt đầu lại cày ngày cày đêm để tự nghiên cứu về các quy trình phát triển phần mềm, giá trị của chúng, cũng như các công cụ hỗ trợ cho chúng như JIRA, Redmine, Trello hay Git, CI/CD,…

Công ty kiếm tiền như thế nào từ khách hàng?

Photo by Pepi Stojanovski on Unsplash

Sau một thời gian phát triển dự án, nắm được tương đối các công nghệ và quy trình, tôi bắt đầu thắc mắc về cách hay mô hình mà công ty kiếm tiền từ khách hàng. Làm thế nào để công ty sống với hàng chục nhân viên, phải trả hàng tỉ tiền chi phí mỗi tháng? Làm thế nào để công ty kiếm tiền từ khách hàng để trang trải những chi phí đó và kiếm lợi nhuận? Công ty hợp đồng với khách hàng như thế nào? Làm sao biết và chứng minh với khách hàng là công ty xứng đáng được trả mỗi tháng hay cả dự án?

Và rất nhiều những câu hỏi khác nữa, những câu hỏi mà tôi sẽ không thể nào nghĩ đến nếu không có công việc đầu tiên.

Tôi sau đó dựa trên những câu hỏi, bắt đầu tự quan sát, tìm hiểu đọc sách hay hỏi trực tiếp anh CEO và CTO của công ty. Nhưng sự thật lúc đó là có quá nhiều câu hỏi đến cùng lúc, tôi không thể nào cùng lúc trả lời hết được chúng, tôi cần phải có kế hoạch và mục tiêu để làm việc đó. Mà bài viết này đã quá dài rồi, nên hẹn gặp lại bạn trong bài tiếp theo nhé!

Tóm

Ở phần này, có một số bài học tôi rút ra được:

  • Machine Learning/AI hay Data Science là thú vị và tiềm năng nhưng cũng rất mơ hồ. Nên nếu bạn đang thích nó và nghĩ bạn giỏi và phù hợp với nó, hãy đi tìm hiểu kỹ hơn về những công ty thực sự đang dùng chúng, đang phát triển chúng và nghĩ xem cái bạn làm được là bao nhiêu % của các thật sự áp dụng được vào thực tế? Nghề làm về Data Science là thú vị, thu nhập cũng cao, nên định hướng trở thành một Data Scientist là tốt nhưng phải nắm rõ nó đã. Còn nếu bạn muốn phát triển sản phẩm, mang giá trị đến cho xã hội và kiếm tiền từ đó, tôi khẳng định Data Science không phải là thứ bạn cần học đầu tiên đâu!
  • Nếu bạn đang học dev, đã học xong căn bản, hãy học bằng cách tự đi xây dựng lại một ứng dụng giống như Grab hay Facebook. Việc đó sẽ giúp bạn biết được bạn cần học những công nghệ gì.
  • Bạn không thể làm việc một mình? Hãy bắt đầu đặt câu hỏi và suy nghĩ về việc làm việc với người khác. Làm thế nào để phân chia công việc để các thành viên không chờ đợi nhau? Làm thế nào để “gáp” công việc của các thành viên lại? Làm thế nào để khách hàng hiểu và thấy được cái mình đang làm?
  • Hãy quan sát thật nhiều và đặt cho bản thân thật nhiều câu hỏi khi bạn làm công việc đầu tiên!

Software Engineer. Documenting my journey at 𝐩𝐡𝐮𝐜𝐭𝐦𝟗𝟕.𝐜𝐨𝐦