# It Works On My Machine
—
Lương developer 15 triệu nghe thì oai, nhưng trừ phòng trọ 3.5 triệu, điện nước 800k, ăn uống 4 triệu, trả góp laptop 2 triệu, AWS cá nhân 500k, Netflix + Spotify + ChatGPT Plus 700k – còn đúng 3.5 triệu. Chia cho 30 ngày = 116k/ngày. Ít hơn 2 bát phở.
Nên tôi chạy Grab.
Tôi tên Trung. 25 tuổi. Backend dev ban ngày, Grab bike ban đêm. Hà Nội. Cầu Giấy → đi khắp nơi. Chạy từ 7h tối đến 11h đêm, kiếm thêm 150-200k. Đủ thêm 2 bát phở. Cuộc sống developer Việt Nam – ngày code cho người ta, đêm chở người ta.
Xe tôi là con Wave cũ. Yên sau dán cái sticker “It works on my machine” mà tôi mua ở Shopee 15k. Không ai hiểu. Khách ngồi sau nhìn thấy cũng không quan tâm. Chỉ có mấy lần chở dân IT, thằng nào nhìn thấy thì vỗ vai tôi: “Ê, dev hả?” – “Ừ.” – “Tao cũng dev.” – rồi cả hai im lặng vì dev gặp dev thì đâu có gì để nói.
—
**CUỐC XE THỨ NHẤT**
Thứ Năm. 9h tối. Notification Grab: cuốc xe từ cổng ĐH Quốc Gia (Xuân Thuỷ) đến Cầu Giấy. 12k. Ngắn. Nhưng đêm rồi, gần nhà, chạy cho vui.
Tôi đến cổng trường. Đứng đợi.
1 phút. 2 phút. Khách chưa ra.
Gọi: “Em ơi, anh đến rồi nè.”
“Dạ, em ra ngay! Em đang ở thư viện, chạy ra 2 phút!”
Giọng thở hổn hển. Kiểu chạy bộ. 2 phút sau – một đứa con gái chạy ra cổng. Ba lô to. Tóc buộc cao. Áo hoodie oversized. Quần jeans. Giày thể thao.
“Anh Trung hả? Xin lỗi anh, em ra muộn!”
“Không sao. Lên đi em.”
Em leo lên xe. Tay bám thanh phía sau. Ngồi cách tôi 1 khoảng – đúng chuẩn khoảng cách khách-tài xế Grab. Lịch sự. Xa.
“Anh đi nha.”
“Dạ.”
Chạy. Gió đêm. Xuân Thuỷ hướng Cầu Giấy. 10 phút.
Em ngồi sau im. Tôi cũng im. Bình thường chạy Grab tôi không nói chuyện với khách. Nhưng đến đoạn qua Dịch Vọng, tôi phanh gấp vì xe máy cắt ngang – em chới với, tay buông thanh, VỖ vào lưng tôi một cái.
“Xin lỗi anh!”
“Không sao không sao.”
Chỉ vậy thôi. Nhưng tôi phanh gấp vì xe máy cắt ngang – Ngọc chới với, người lao về phía trước, ngực chạm vào lưng tôi. Nhanh. 1 giây. Rồi Ngọc lùi ra ngay.
“Xin lỗi anh!”
“Không… không sao.”
Không sao. KHÔNG SAO. nhưng cái lưng tôi thì nhớ. Nhớ rõ. Nhớ kiểu `cache` không có `expiry time`.
Đến nơi, em xuống xe, chỉnh lại ba lô, rồi bỗng nhìn xuống yên sau:
“Anh ơi, cái sticker sau yên xe anh…”
“Ừ?”
“‘It works on my machine’ – anh là dev hả?”
Tôi quay đầu lại 0.5 giây. Nhìn em. Em đang nhìn cái sticker. Mắt sáng. Kiểu mắt của người HIỂU câu đùa đó.
“Em… em biết câu đó?”
“Em học CNTT. Quốc gia. Năm 3. Em cũng hay nói câu đó khi nộp bài tập mà bạn bảo chạy không được.”
🙂
Dev gặp dev trên Grab. Nhưng lần này khác – vì dev kia là con gái. Và con gái này vừa ôm eo tôi 10 phút.
—
**CUỐC XE THỨ HAI**
Thứ Bảy tuần sau. 8h tối. Notification Grab: cổng Quốc Gia → Cầu Giấy. Lại 12k.
Tôi nhận. Đến nơi. Đợi.
Cùng đứa con gái tuần trước chạy ra.
“Ơ, anh Trung!”
“Ơ, em…?”
“Em Ngọc! Tuần trước em đi xe anh nè. Sticker ‘It works on my machine’!”
“À! Nhớ rồi!”
Ngọc leo lên. Lại ba lô to. Lần này – không biết vô tình hay cố ý – Ngọc ngồi GẦN hơn lần trước. Tay vẫn bám thanh sau. Nhưng đầu gối chạm lưng tôi. Nhẹ. Ngọc không lùi ra.
Tôi cũng không nói.
“Anh chạy Grab mỗi tối hả?”
“Ừ. Kiếm thêm.”
“Ban ngày anh code, tối chạy Grab? Vất vả ghê.”
“Quen rồi. Giống CI/CD – chạy tự động, không cần nghĩ.”
Ngọc cười. SAU LƯNG TÔI. Tôi không thấy. Nhưng tôi NGHE – tiếng cười nhỏ, bay theo gió, chạm gáy tôi.
Lần này Ngọc nói nhiều hơn. Kể đang học năm 3, chuyên ngành AI/ML. Đang làm đồ án về NLP – xử lý ngôn ngữ tự nhiên tiếng Việt. Mô hình transformer. Fine-tune BERT.
“Em fine-tune BERT cho tiếng Việt?”
“Dạ. PhoBERT. Anh biết không?”
“Biết. Nhưng anh là backend. Anh chỉ biết gọi API model, không biết train.”
“Vậy anh là người dùng, em là người làm. Hợp ghê.”
“Hợp”. em dùng chữ “hợp.” Não tôi lưu lại. Cache. Priority: HIGH.
Đến nơi. Ngọc xuống xe.
“Cảm ơn anh nha!”
“Không có gì. 12k.”
“Anh ơi…”
“Gì?”
“Cho em… xin số anh được không? Phòng khi em cần đi xe mà muốn chỉ định tài xế. Cho tiện.”
“Chỉ định tài xế”. Grab không có tính năng chỉ định tài xế. Cả hai đều biết. Nhưng cả hai đều GIẢ VỜ không biết.
“Được. 09…”
Tối đó tôi về phòng trọ. Nằm trên giường. Nhìn cái tên “Ngọc – SV Quốc Gia” trong danh bạ. Và lần đầu tiên sau 2 năm đi làm, tôi nghĩ: chạy Grab cũng có cái hay.
—
**CUỐC XE THỨ 3, 4, 5, 6…**
Ngọc không gọi qua Grab nữa. Ngọc nhắn Zalo trực tiếp: “Anh ơi, tối nay anh chạy không? Em cần về.”
Tôi: “Chạy. 15 phút anh đến.”
Cứ vậy. Thứ Ba, Thứ Năm, Thứ Bảy. Ngọc học muộn ở thư viện, nhắn tôi, tôi chạy đến đón. Không qua app. Không tính tiền. Ngọc dúi 20k, tôi không lấy: “Thôi, tiện đường.” Không tiện đường – nhà tôi ngược hướng. Nhưng kệ.
Mỗi cuốc xe 15-20 phút. Và mỗi cuốc, khoảng cách trên yên xe NGẮN đi một chút.
Cuốc thứ 3: Ngọc vẫn bám thanh sau. Nhưng ba lô để trước ngực thay vì sau lưng – “cho đỡ vướng anh.” Tức là ngồi gần hơn.
Cuốc thứ 5: trời lạnh. Ngọc ngồi sát hơn. Đầu gối chạm hông tôi. Tay vẫn bám thanh – nhưng thỉnh thoảng đoạn đường xóc, tay Ngọc buông thanh, VÍU vào áo tôi. Rồi lại bám thanh. Rồi lại víu áo.
Cuốc thứ 8: Ngọc không bám thanh nữa. Hai tay đặt nhẹ hai bên hông tôi. Không ôm. Chỉ ĐẶT. Nhưng tôi cảm nhận được 10 ngón tay qua lớp áo. Ấm.
Cuốc thứ 12 – một đêm mưa, gió rét – Ngọc ÔM. Ôm thiệt. Hai tay vòng qua eo. Mặt tựa vào lưng tôi. Tôi cảm nhận cả hơi thở Ngọc qua áo.
“Em lạnh.” – Ngọc nói.
“Anh chạy chậm lại nha.” – tôi nói. Không phải vì an toàn. Vì muốn cuốc xe DÀI HƠN.
Từ đêm đó, Ngọc ôm eo tôi mỗi cuốc. Không cần lý do “lạnh” nữa. Có hôm 28 độ Ngọc vẫn ôm. Tôi không hỏi. Ngọc không giải thích. Hai đứa đều giả vờ đó là chuyện bình thường.
Ngọc kể chuyện trường. Chuyện đồ án. Chuyện mô hình train 3 ngày mới xong. Chuyện thầy hướng dẫn khó tính. Chuyện sinh viên CNTT nữ bị mấy thằng con trai trong lớp coi thường – “con gái mà code gì” – rồi Ngọc nộp bài top 1 lớp cho tụi nó câm.
Tôi kể chuyện công ty. Chuyện PM đổi requirement. Chuyện deploy thứ Sáu. Chuyện anh Lead viết code không comment.
Hai đứa nói chuyện qua GIÓ. Gió Hà Nội tháng 10. Và có một hôm – cuốc thứ mấy tôi không nhớ – Ngọc tựa đầu vào lưng tôi. Không phải vì mệt. Không phải vì lạnh. Chỉ là… tựa. Tóc bay chạm cổ tôi. Mùi dầu gội – bưởi.
—
**THÁNG THỨ 2**
Một tối. Ngọc nhắn: “Anh ơi, tối nay em không về nhà. Em ở lại thư viện.”
“Muộn vậy?”
“Dạ. Deadline đồ án. Em phải train model xong trước thứ Hai.”
“Em ăn gì chưa?”
“Chưa. Quên.”
“…”
15 phút sau tôi đứng trước cổng thư viện ĐH Quốc Gia. Tay cầm 1 hộp cơm gà và 1 ly trà sữa.
Ngọc chạy ra. Nhìn hộp cơm. Nhìn tôi.
“Anh… anh mang cơm cho em?”
“Ừ. Em không ăn thì model train xong em cũng sập trước.”
“…”
Ngọc cầm hộp cơm. Mắt ướt. KHÔNG PHẢI KHÓC – chỉ là… xúc động kiểu sinh viên năm 3 ở trọ xa nhà, 10h đêm đói bụng, bỗng có người mang cơm đến.
“Cảm ơn anh.”
“Không có gì. Ăn đi. Anh đợi.”
“Đợi gì?”
“Đợi em ăn xong. Rồi anh chở em về. Khuya rồi, ở thư viện làm gì.”
“Nhưng em chưa train xong model-“
“Mang laptop về phòng train. Em có GPU phòng trọ không?”
“Không. Em dùng Google Colab.”
“Vậy ngồi đâu cũng train được. Về phòng train. Ít nhất có giường để ngủ khi model đang chạy.”
Ngọc nhìn tôi 3 giây.
“Anh nói cũng đúng.”
“Anh là backend. Anh giỏi optimize.”
“Optimize cái gì?”
“Optimize… cuộc sống em.”
“…”
“Lên xe đi.”
—
Tối đó tôi chở Ngọc về phòng trọ. Ngọc ôm eo tôi. Chặt hơn mọi khi. Không phải vì lạnh. Không phải vì xóc. Chỉ vì muốn ôm.
Đến nơi. Ngọc xuống xe. Đứng ở cửa.
“Anh Trung.”
“Gì?”
“Anh… muốn lên không? Em pha trà.”
CÂU HỎI ĐÓ.
“Lên… phòng em?”
“Dạ. Uống trà. Em có trà hoa cúc.”
“10h đêm. Phòng trọ em. Trà hoa cúc.”
“Ừ. Sao? Anh ngại?”
Tôi ngại. Không phải ngại lên phòng con gái. Ngại vì TÔI CHƯA BAO GIỜ Ở TRONG TÌNH HUỐNG NÀY. 25 năm cuộc đời, kịch bản này không có trong documentation nào tôi từng đọc.
“Anh… anh lên.”
—
Phòng trọ Ngọc. 12 mét vuông. Nhỏ. Sạch. Trên bàn: laptop, sách, mấy tờ giấy note dán chi chít chữ. Trên tường: cái bảng trắng vẽ sơ đồ kiến trúc model – transformer architecture, attention layers, input embeddings.
“Em vẽ cái này?”
“Dạ. Cho dễ nhìn khi code.”
Tôi nhìn cái sơ đồ. Đẹp. Rõ ràng. Kiểu vẽ có tư duy hệ thống. Năm 3 mà vẽ architecture sạch hơn mấy thằng senior 5 năm kinh nghiệm.
Ngọc pha trà. Hai đứa ngồi. Trà hoa cúc. 10h30 đêm. Phòng trọ sinh viên.
Ngọc mở laptop. Chạy model. Google Colab. Training bar chạy từ từ: 1%… 2%…
“Lâu không?”
“3-4 tiếng.”
“Vậy em ngủ đi. Model chạy tự động mà.”
“Em sợ nó crash.”
“Crash thì chạy lại. Quan trọng là em phải ngủ.”
Ngọc nhìn tôi. Mắt mệt. Quầng thâm. Sinh viên IT năm 3 mùa đồ án – trông như dev mùa crunch. Một giuộc.
“Anh ở lại được không? Canh model cho em. Nếu nó crash thì anh restart giúp em. Em ngủ 2 tiếng thôi.”
“…Được.”
Ngọc nằm xuống giường. Kéo chăn. Nhắm mắt.
Tôi ngồi bàn. Nhìn cái training bar: 7%… 8%…
Nhìn Ngọc ngủ.
10h30 đêm. Trong phòng trọ sinh viên. Tôi – thằng chạy Grab – ngồi canh model AI cho một đứa con gái đang ngủ.
Không có gì xảy ra. Chỉ có tiếng laptop quạt chạy. Và hơi thở Ngọc. Đều. Nhẹ.
3%… 12%… 25%…
—
**TWIST**
1h sáng. Model chạy được 67%. Tôi buồn ngủ. Nhưng cố.
Lướt điện thoại. Mở GitHub. Thói quen. Xem repo.
Rồi – vì buồn chán – tôi search “PhoBERT fine-tune Vietnamese NLP.”
Kết quả đầu tiên: một repo. Star: 2.400. Fork: 800.
Tên repo: `viet-nlp-transformer`
Tác giả: `ngoc-nvm`
Tôi nhìn cái username. Nhìn đứa con gái đang ngủ trên giường. Nhìn lại username.
`ngoc-nvm`. Ngọc. NVM – viết tắt National Vietnam… University? ĐẠI HỌC QUỐC GIA?
Mở profile. Avatar: hình mặt mèo (không phải ảnh thật). Bio:
*”CS student @ VNU. NLP researcher. Building Vietnamese language tools. 🇻🇳”*
Contributions: **1.247 commits trong năm nay**. Xanh lè. Đậm. Gần như commit MỖI NGÀY.
Tôi scroll xuống. Repo `viet-nlp-transformer` – published paper kèm theo. Paper trên arXiv. First author: **Nguyễn Vũ Minh Ngọc**. ĐH Quốc Gia Hà Nội.
Cited by: 47 papers khác.
Tôi – thằng dev lương 15 triệu chạy Grab kiếm thêm – đang ngồi trong phòng trọ của một đứa sinh viên năm 3 có PAPER TRÊN ARXIV, REPO 2.400 STARS, VÀ ĐƯỢC 47 PAPERS KHÁC TRÍCH DẪN.
Tôi nhìn Ngọc ngủ. Hoodie oversized. Tóc rối trên gối. Quầng thâm. Giống bất kỳ sinh viên IT nào.
Nhưng đứa sinh viên này – đứa mà tôi chở bằng con Wave cũ mỗi tối, đứa nhận hộp cơm gà 30k của tôi và mắt ướt, đứa ôm eo tôi 15 phút trên đường về – là một trong những người đóng góp nhiều nhất cho NLP tiếng Việt.
Model trên laptop Ngọc: 72%. Vẫn chạy. Cái model mà cả cộng đồng AI Việt Nam đang dùng. Đang train. Trên chiếc laptop sinh viên. Trong phòng trọ 12 mét vuông. Và tôi đang CANH CHO NÓ.
Tôi đóng GitHub. Không nói gì. Để Ngọc ngủ.
2h sáng. Model xong. 100%. Tôi save. Đóng laptop.
Viết 1 tờ giấy nhỏ để trên bàn:
> *”Model xong rồi. Anh save ở folder ‘trained_models’. Kết quả accuracy 94.2% – cao hơn paper trước của em 0.3%. Anh đọc paper em rồi. Anh không nói. Nhưng anh muốn em biết: em giỏi lắm. Giỏi hơn anh nhiều. Mà anh chở em trên con Wave dán sticker ‘It works on my machine’ – nên chắc mọi thứ sẽ work.”*
> *P/S: Em nợ anh 1 cuốc xe. Nhưng cuốc này free. Mọi cuốc sau cũng free.*
Tôi khép cửa. Nhẹ. Đi về. 2h sáng. Hà Nội. Đường vắng. Con Wave cũ.
—
Sáng hôm sau. 7h. Zalo:
**Ngọc:** “Anh đã đọc paper em?”
**Tôi:** “Ừ.”
**Ngọc:** “Sao anh không nói?”
**Tôi:** “Vì anh sợ nói ra thì em nghĩ anh chở em vì em giỏi. Không phải. Anh chở em vì em là em. Paper hay con Wave gì cũng vậy.”
**Ngọc:** “…”
**Ngọc:** “Anh.”
**Tôi:** “Gì?”
**Ngọc:** “Tối nay anh chạy không?”
**Tôi:** “Chạy.”
**Ngọc:** “Đón em lúc 8h. Nhưng tối nay em không về phòng trọ.”
**Tôi:** “Vậy đi đâu?”
**Ngọc:** “Đi đâu cũng được. Em chỉ muốn ngồi sau xe anh.”
**Tôi:** “…”
**Ngọc:** “Với tối nay anh chạy chậm lại nha. Hôm qua anh chạy nhanh quá em không kịp tựa đầu vào lưng anh.”
—
Tối đó tôi chạy xe quanh Hồ Tây. Chậm. Gió. Đèn vàng ven hồ. Ngọc ngồi sau. Hai tay ôm eo tôi – quen rồi, không cần lý do nữa. Tựa đầu. Không nói gì.
Chạy 1 vòng. 2 vòng. 3 vòng.
“Anh.”
“Gì?”
“Em muốn nói 1 chuyện.”
“Nói đi.”
“Cái hôm đầu tiên em đi xe anh. Em không phải TÌNH CỜ đâu.”
“…Hả?”
“Em thấy anh đậu xe ở cổng trường tuần trước đó. Em thấy cái sticker. Em nghĩ: ồ, dev chạy Grab. Rồi em nhìn mặt anh… cũng được. nên em save vị trí anh hay đậu. Tối đó em book Grab ĐÚNG CHỖ ĐÓ, đúng giờ đó, hy vọng match anh.”
“Em… book 3 lần mới match đúng anh?”
“7 lần.”
“7 LẦN?”
“Ừ. 6 lần đầu toàn ông chú 50 tuổi. Em huỷ. Lần thứ 7 mới ra anh. Em chạy từ thư viện ra cổng, thở hổn hển, sợ anh cancel vì đợi lâu.”
“…”
“Training model 3 ngày em chờ được. Nhưng đợi match Grab đúng anh – 7 lần, 4 ngày – DÀI HƠN TRAIN BERT.”
Tôi dừng xe. Ven Hồ Tây. Đèn vàng. Gió.
Quay lại nhìn Ngọc. Ngọc nhìn tôi. Tóc bay. Mắt sáng. Mùi dầu gội bưởi.
“Ngọc.”
“Gì?”
“Em fine-tune PhoBERT, publish paper arXiv, 2.400 stars GitHub, được 47 papers trích dẫn – mà book Grab 7 lần để gặp một thằng chạy Wave cũ lương 15 triệu?”
Ngọc cười. Cái cười mà tôi nghe qua lưng bao nhiêu đêm – giờ mới thấy tận mắt.
“Anh biết tại sao em nghiên cứu NLP không?”
“Tại sao?”
“Vì em muốn dạy máy hiểu ngôn ngữ con người. Nhưng có 1 thứ em train hoài mà máy không hiểu được.”
“Thứ gì?”
“Cảm giác ngồi sau xe một người lúc 10h đêm, gió lạnh, mà thấy ấm. Cái đó không có dataset nào chứa.”
🙂
Gió Hồ Tây. Đèn vàng. Con Wave cũ. Sticker “It works on my machine.”
It works.
💻🏍️🌙
—
*P/S: 6 tháng sau, Ngọc tốt nghiệp. Nhận offer từ VinAI. Lương gấp 4 tôi. Tôi vẫn chạy Grab buổi tối. Nhưng giờ chỉ chở 1 khách. Khách quen. Không qua app. Không tính tiền. Đón ở cổng VinAI, 7h tối, về phòng trọ. Mỗi ngày.*
*Ngọc bảo: “Anh nghỉ chạy Grab đi. Lương em đủ 2 đứa.”*
*Tôi bảo: “Không. Vì ngày anh nghỉ chạy Grab là ngày em không ngồi sau xe anh nữa. Anh không muốn.”*
*Ngọc im. Rồi ngồi sát hơn. Tựa đầu vào lưng tôi. Như cuốc xe đầu tiên – chỉ khác là giờ không cần lý do.*
*Cuốc xe về nhà. Miễn phí. Mãi mãi.*