Web Analytics Made Easy - Statcounter

Tại sao software engineer, developer nên có "phòng lab" của riêng mình?

Sharing Nov 19, 2022

Bài viết này mình chia sẻ quan điểm của mình về việc nên hay không nên build "phòng lab" riêng của mình để build-up năng lực (competency) cá nhân, mình viết bài này vì mình nhận ra được một pattern khá giống nhau của các bạn fresher, hoặc junor mới vào nghề  ( cũng là target user của bài viết này) các bạn guru, expert, seninor,  middle enginer thì quá nhiều kinh nghiệm chiến trường rồi, mỗi bạn sẽ có một cách học khác nhau để sống tốt được trong nghề, và chỉ nên xem bài viết của mình như một góc nhìn thôi.

Vậy "phòng lab" mình muốn nói đến ở đây là gì và giải quyết vấn đề gì?

Việc học và phát triển năng lực của bản thân: đây là 1 việc mà hầu hết ai cũng muốn và cũng đều đưa vào carrer path hoặc mong muốn khi nói chuyện với bộ phận nhân sự (HR) của một công ty khi đi tuyển dụng cả, và cũng chính là mong muốn các nhân của từng người, vậy chúng ta (software engineer) học từ đâu?

  • Kiến thức trường lớp ( đại học, sách giáo khoa, các khóa học chuyên môn)
  • Từ dự án, kiến thức trong project, product mà đang delivery hằng ngày
  • Tự học từ các nguồn trên internet: medium, dev.to, reddit, ...
  • Các course online, bạn bè, đồng nghiệp
  • ...

Các nguồn kiến thức này có ưu điểm và nhược điểm khác nhau, tạm thời mình không bàn luận sâu về vấn đề này, nhưng mình thấy có 1 điểm hay gặp của những bạn vừa mới đi làm:

  • Học đại học, ... ( có kiến thức nền tảng cơ bản vững chắc, nhưng lại thiếu kiến thức practice trong thực tế)
  • Ra trường ( hoặc học trong trường thấy nhàn rỗi quá) tìm việc làm để vừa có tiền, vừa có có hội học hỏi những thứ thực tế cần trong công việc
  • Tham gia vào công ty, vào dự án, delivery thực tế, tiếp cận công nghệ mới mà trước đó chưa bao giờ được xài ( lấy vd đơn giản như Docker, K8S, CI/CD, Microservice, Application performance montoring, opentelemetry ....) cảm thấy wow, honeymoon time, delivery say mê, vừa làm vừa thấy vui vì học được quá nhiều thức mới
  • Một hai năm sau: cảm thấy chán, công việc hiện tại không có gì challenge cả, tehnical cũ, maintain hoài, thấy bạn bè, dev bên dự án bên cạnh nói có tool này tool kia ok lắm mà sao dự án mình không apply gì cả, sao công ty không training cho mình mấy cái này? ....,  càng lúc càng chán, ức chế, quyết định đổi job, ... ( mà thôi không nói nữa tổn hại tinh thần mấy chiến binh trẻ :D )
  • và vòng lặp mới lại bắt đầu :D
  • ...

Vậy vấn đề trên xuất phát từ đâu? theo mình, đến từ việc tự học và bổ sung cho mình kiến thức mới cho mình, nếu 1 bạn có tính tò mò, tinh thần tự học cao, định hướng rõ ràng, có đàn anh cao thủ chỉ dạy, thì thường sẽ không gặp trường hợp trên,  nhưng nếu không thì:

  • Các bạn chỉ học được những thứ ở trường đã dạy mình ( không có gì sai cả, nhưng là thứ tốt nhất trường lớp có thể dạy bạn rồi)
  • Những thứ được chọn để delivery trong dự án, và đủ để đảm bảo mục tiêu của bunisess cho product đó
  • Vậy những thứ khác thì sao? ai dạy cho mình? công ty có đầu tư không? và tại sao công ty phải đầu tư?  nếu không thì mình phải tự đầu tư cho mình rồi, đây là phòng lab mà mình nói đến.

"Phòng lab" có gì và làm cách nào để có nó?

  1. "Phòng lab" mình muốn nhắc đến ở đây đơn giản chỉ là 1 một zone/environment, bộ sides project mà nó phát sinh từ nhu cầu của mình để mình có thể tự do kiểm thử, học tập, test những thứ mình muốn:
  • ví dụ: anh senior trong team Frontend bảo: "Nextjs performance kinh lắm, mà version 13 mới ra còn có đống thứ hay ho nè", mà dự án mình đang làm thì cũng chỉ đang mantain và dev trên khung của React, Reduct ( chán không buồn nói, trend mới mà méo được apply vào dự án) , vậy làm sao để biết? solution mình khuyến khích dành time ra setup thử  1 dự án nhỏ dựa trên nextjs, setup, kiểm thử, so sánh, dựng thử layout ( giống với web thật trong dự án của mình), compare, so sánh, ...
  • ví dụ khác: thấy dự án khác dùng prometheus để monitor production evironment ngon quá, mình cũng muốn biết làm: solution cũng tương tự: mang về lab của mình kiểm thử thôi
  • tương tự với các trend mới: vd 2022 vừa rồi nhà nhà cùng dev blockchain, mà công ty mình không làm, thế thì mang ETH Testnest về setup thử 1 smart contract, kiểm thử, tự học, kế hợp coursera, .... hoặc như AWS dùng ok quá, mà dự án khách hàng khóa hết permission ( mà đúng rồi, họ không khóa mới sợ cứ khóa hết thì càng tốt đó mọi người) nên muốn học AWS mà không biết sao, mang về lab vọc thôi chứ chờ đợi gì nữa :D

2. Tính chất cần có của phòng lab:

  • Môi trường kiểm thử độc lập của từng cá nhân, để đảm bảo nhu cầu học, tìm hiểu, của mình. Độc lập, chơi được, phá được, phá nát cũng không sao, không được liên quan đến các dự án mình đang làm việc, vì đã dính tới dự án rồi thì có 1 loạt các constrain đi kèm.
  • Tính Ngắn hạn và dài hạn: một số bài test (kiểm thử 1 framework mới) thì chỉ cần môi trường ngắn hạn để học tập, kiểm thử, case này đơn giản, nhưng một số bài test, tool, cần phải có môi trường dài hạn để phát huy ( vd prometheus, grafana) và đủ đi xa để nhìn các góc cạnh tối ưu hóa, kiểm thử dữ liệu đủ lâu và đủ lớn để nhìn được các case phát sinh, nên môi trương lab tốt nhất vẫn có một số side project, pet project chạy dài hạn ( nhưng không có mục tiêu lợi nhuận quá nhiều hoặc quá nhiều contraint) thì mới đủ điều kiện, hào hứng để kiểm thử các tool dài hạn, vì một số dự án thực tế, tool hay, xịn, nhưng vì tính chất của product hoặc điều kiện bussiness mà ngay cả 1 công ty cũng không thể duy trì được nó đủ lâu để mình có có thể nghiệm ra các vấn đề liên quan đến nó.

3. Vậy cần gì để setup phòng lab cho mình?

  • theo mình cũng không có gì to tát, chủ yếu là mind set và tinh thần tự setup là chính, nhưng có rất nhiều bạn thấy là để biết được một tool mới, công nghệ mới thì công ty nên training hoặc tạo điều kiện cho mình biết. ( vd cho em làm dự án R&D về xyz với), đối với mình quan điểm đòi hỏi 1 công ty cần phải mình là không hoàn toàn đúng, vì 1 tổ chức sinh ra để phục vụ cho nhu cầu của nó, resource ( nhân viên, chuyên môn) nếu có năng lực sẵn để handle tốt thì là một lợi thế ( tất nhiên là nếu bạn được  nhiều role hơn thì benifit nhận lại của bạn sẽ cao hơn, và công ty cũng không phải vất vả đi tìm nguồn lực thích hợp), nếu không thì có rất nhiều cách để có được resource phù hợp, R&D và training là 1 lựa chọn nhưng chi phí lớn và nhiều lúc trong timeline ngắn hạn cũng khó cách đáp ứng được nhu cầu, mà nếu có training đi nữa, thì cũng chỉ là để đủ cho nhu cầu delivery theo mục tiêu của công ty, chứ không phải để phát triển năng lực cá nhân của từng người, theo mình thì công ty cũng không thể làm chuyện đó được, vì nhu cầu mỗi người mỗi khác, nên hiểu đúng vấn đề này thì đã gần như solve được mọi thứ về carrer path.
  • Công cụ cần gì: đơn giản nhất thì bạn đã có sẵn, lap top, máy tính cá nhân của các bạn, đăng kí thêm 1 vài account gitlab, github, heroku, docker, fleek, vercel, là gần như đủ đồ chơi để các bạn setup vọc phá rồi
  • Hơn nữa thì trang bị gì? nhiều thứ: vd muốn học cloud, thì đăng kí account Aws, GCP, Azure Cloud ( hầu hết đều có credit free cho các bạn tạo resource dư test trong khoảng 6 tháng đến 1 năm tùy cloud), nếu có thêm tinh thần hiểu phần cứng thì có thể trang bị cho mình thêm PC, workstation ( giá cũng không đắt gì cho lắm, 4-6tr cũng đủ có 1 PC đồng bộ cũ (vd Dell Optiplex) dư sức các bạn chạy ubunu server 24/7 để setup kiểm thử rồi, mình thì khuyến khích các bạn có cả 2, cloud server, local server. để kiểm thử nhiều thứ khác nhau, học hành Linux, docker, network, cũng cần rất nhiều môi trường để kiểm nghiệm, ...
  • Chi phí & Thời gian: nó cũng rất hiển nhiên, nhưng một số bạn cũng không quen được việc mình muốn học cái gì mới thì nên tự trả chi phí cho việc đó (Vd tiền server hàng tháng, tiền điện, tiền đầu tư phần cứng, tiền ngu vì lỡ setup xong quên tắt cuối tháng bị charge tiền sml, nhưng bạn sẽ học được 1 lession learn to bự về quản lý chi phí và resource, ...) và thời gian, nên có 1 quỹ thời gian nhất định: vd 10h/tuần để setup và kiểm thử những thứ cho riêng mình

Kết:

  • Mình chia sẻ với các bạn cách mà mình đang sử dụng để học những kiến thức mới và những lầm tưởng cơ bản mà một số bạn mới vào nghề có thể mắc phải  khi so sánh giữa develop năng lực cá nhân và delivery trong 1 dự án. hi vọng sẽ có ích với mọi người.

Tags

Vĩ Nguyễn

Software Engineer, Infatuated with Product Development, DevOps, OS, Blockchain, Software Engineering, Hardware