FDE PulseViệc làm FDE đang mở 641Mới trong 7 ngày 41Công ty đang tuyển 97Nhận làm từ xa 25%Lương trung vị (Mỹ) $204kTuyển nhiều nhất Databricks 122
EN

Tờ báo của nghề Forward Deployed Engineer

Công cụ

marimo: notebook gửi khách không còn hỏng vì thứ tự cell

Mỗi notebook là một file Python thuần, tự chạy lại theo quan hệ phụ thuộc giữa các cell và đóng gói được thành web app chỉ hiện kết quả cho người không đọc code.

Ảnh một chiếc laptop hiển thị code Python trên bàn làm việc, hoặc một nhóm kỹ sư cùng xem biểu đồ phân tích dữ liệu trong văn phòng.
Ảnh: Emile Perron / Unsplash
Chia sẻLinkedInFacebookX

Tóm tắt nhanh

  • marimo lưu notebook thành file Python thuần, chạy lại theo quan hệ phụ thuộc giữa các cell nên không còn trạng thái ẩn như Jupyter.
  • `marimo run` biến notebook thành web app, mặc định giấu code và chỉ hiện kết quả, hợp với người xem không làm kỹ thuật.
  • Chế độ sandbox ghi phiên bản Python và danh sách package vào đầu file, nhưng muốn khóa đúng từng phiên bản thì vẫn cần lockfile.
Hai cột so sánh. Bên Jupyter: sửa ngưỡng ở cell 3, cell 5 vẽ biểu đồ chưa chạy lại nên biểu đồ vẫn vẽ từ ngưỡng cũ, được tô màu cam cảnh báo. Bên marimo: sửa cell 3, mũi tên dẫn xuống cell 5 tự chạy lại, biểu đồ khớp với code.
Ví dụ phân tích tỷ lệ khách rời bỏ của một công ty giao hàng: trong Jupyter, người dùng phải tự nhớ chạy lại cell vẽ biểu đồ. Còn marimo thì tự chạy lại mọi cell tham chiếu tới biến vừa đổi. Nguồn: README và hướng dẫn chuyển từ Jupyter của marimo.

Notebook Jupyter gửi cho khách thường hỏng ở một chỗ không ai nhìn thấy: thứ tự bạn đã chạy các cell. marimo, notebook mã nguồn mở của công ty Marimo (thành lập năm 2022), làm khác hẳn. Mỗi notebook là một file Python thuần, và khi bạn chạy một cell, các cell phụ thuộc vào nó sẽ tự chạy lại.

Với FDE, khác biệt này quyết định chất lượng của thứ bạn bàn giao. Bản phân tích bạn giao phải chạy lại được khi dữ liệu tháng sau về, khi người khác trong team tiếp quản, và khi khách hỏi một con số được tính từ đâu.

Trang chính thức mô tả marimo là notebook muốn giữ cảm giác làm việc của notebook nhưng có tính chất của một chương trình Python. Chạy lại được, người khác tiếp quản được, truy được nguồn gốc từng con số: đó là những thứ ta vẫn đòi hỏi ở một chương trình, chứ không phải ở một bản nháp.

Lỗi thật của Jupyter nằm ở trạng thái ẩn

Hướng dẫn chuyển từ Jupyter của marimo nói thẳng rằng notebook Jupyter dễ tích tụ “trạng thái ẩn”, kéo theo cả lỗi ẩn. Hướng dẫn đó cũng chỉ ra rủi ro cell bị chạy lệch thứ tự. Khi chuyện ấy xảy ra, kết quả trên màn hình rất dễ không còn khớp với code bạn đang nhìn.

Thử hình dung bạn phân tích tỷ lệ khách rời bỏ cho một công ty giao hàng. Cell 3 lọc theo vùng, cell 5 vẽ biểu đồ. Bạn sửa ngưỡng lọc ở cell 3 nhưng quên chạy lại cell 5, rồi xuất file gửi đi. Biểu đồ trong file đó lại được vẽ từ ngưỡng cũ.

marimo chặn tình huống này ngay từ cơ chế chạy. Khi một cell chạy, marimo tự chạy lại mọi cell tham chiếu tới biến của cell đó. README của dự án nói rõ ba cam kết: không có trạng thái ẩn, thực thi tất định, và có sẵn quản lý package.

Một vòng tối thiểu: từ notebook đến app cho khách

Vẫn với ví dụ công ty giao hàng, bạn mở notebook trong môi trường cô lập bằng uvx marimo edit --sandbox churn.py. uv là backend mặc định của sandbox và cài package từ PyPI. Phiên bản Python cùng danh sách package được ghi vào một khối comment ở đầu file theo chuẩn PEP 723, nên notebook mang theo môi trường của chính nó.

Bạn viết ba cell: đọc dữ liệu, lọc theo ngưỡng, vẽ biểu đồ. Khi đổi ngưỡng, biểu đồ tự cập nhật mà bạn không phải nhớ cell nào cần chạy lại. Vì file là Python thuần chứ không phải JSON, commit vào Git sẽ cho ra một diff đọc được như code bình thường, và người review sẽ thấy đúng dòng ngưỡng đã đổi.

Đến lúc giao cho khách, bạn chạy marimo run churn.py. Lệnh này trình bày notebook dưới dạng một app và khởi động web server để phục vụ app đó. Mặc định app chỉ ghép các output lại và giấu code, nên người quản lý vận hành phía khách chỉ thấy biểu đồ và bảng số.

Nếu báo cáo cần chạy hằng tháng, README cho biết notebook marimo cũng chạy được như script, nhận tham số từ dòng lệnh. Như vậy cùng một file vừa là bản nháp khám phá, vừa là job định kỳ, vừa là app trình bày.

Jupyter

  • Lưu dạng JSON .ipynb
  • Thứ tự chạy cell do người dùng nhớ
  • Dễ tích tụ trạng thái ẩn

marimo

  • Lưu dạng file .py thuần, diff được trên Git
  • Cell phụ thuộc tự chạy lại
  • Chạy được như script hoặc web app

Giới hạn nào cần nói với khách trước?

Giới hạn đầu tiên là phiên bản package. Tài liệu sandbox ghi rằng khối PEP 723 lưu yêu cầu package, nhưng muốn có đúng từng phiên bản thì phải dùng lockfile. Nếu khách chạy lại sau sáu tháng và cần ra đúng con số cũ, bạn nên tạo lockfile ngay từ đầu.

Giới hạn thứ hai là hạ tầng. marimo run khởi động web server, nhưng chạy server đó ở đâu, ai được truy cập và dữ liệu khách nằm trên máy nào là phần việc deployment của bạn. Hãy thống nhất những điểm này với đội IT phía khách trước khi hứa “gửi link là xem được”.

Giới hạn thứ ba là rủi ro nhà cung cấp, thứ khách doanh nghiệp hay hỏi. CoreWeave công bố mua lại Marimo ngày 30/10/2025 và cam kết notebook marimo vẫn miễn phí, vẫn mở mã nguồn với giấy phép thông thoáng. Dự án dùng giấy phép Apache-2.0, đủ để bạn trả lời câu hỏi của bộ phận pháp chế.

Cuối cùng, marimo có công cụ dòng lệnh để chuyển notebook .ipynb sang định dạng của nó. Tuy vậy, một notebook cũ từng chạy đúng nhờ trạng thái ẩn có thể lộ lỗi sau khi chuyển. Đó là điều tốt, nhưng bạn nên dành thời gian rà lại trước khi gửi bản mới cho khách.

Nên học gì trước, và thể hiện ra sao trong CV?

Thứ cần học trước là cách nghĩ theo quan hệ phụ thuộc: mỗi cell định nghĩa biến gì và dùng biến nào. Khi đã quen, sandbox và marimo run chỉ còn là hai lệnh. Học uv song song cũng đáng, vì đó là backend mặc định của sandbox.

Về hồ sơ, một repo công khai có notebook .py, khối dependency ở đầu file và lịch sử commit có diff rõ ràng là bằng chứng cụ thể hơn câu “thành thạo Python” trong CV.

Dòng mô tả trong CV nên kể thứ bạn bàn giao chứ không chỉ kể công cụ. Một mẫu bạn có thể phỏng theo: “Bàn giao phân tích tỷ lệ khách rời bỏ dưới dạng notebook marimo lưu trên Git, kèm môi trường ghi trong file và lockfile; khách xem kết quả qua app ẩn code và chạy lại hằng tháng bằng script nhận tham số.”

Khi phỏng vấn, hãy chuẩn bị kể lại đúng một lần bạn biến một bản phân tích thành thứ khách tự chạy lại được, kể cả lỗi trạng thái ẩn bạn tìm ra trên đường đi. Câu chuyện đó cho người phỏng vấn thấy bạn nghĩ đến người nhận chứ không chỉ đến cái máy của mình.

Khách ít khi nhớ bạn dùng notebook gì. Điều họ nhớ là con số tháng trước có khớp với tháng này hay không.

Bài này có hữu ích không?

Dùng cùng trợ lý AIHỏi Claude ↗Hỏi ChatGPT ↗
7 nguồn
Đọc tiếp trên lộ trình · Chặng 2: Kỹ thuật rộngWorkato Agent Studio cho FDE: dựng genie trên hệ thống sẵn có của khách hàngỞ khách hàng đã chạy Workato, agent đầu tiên bạn dựng không phải viết lại tích hợp nào. Nó gọi lại những workflow đang chạy, và tài liệu đã ghi sẵn vài giới hạn bạn phải tính trước.