Mã nguồn thuê
Số tiền người khách đọc qua loa thoại ống nghe lớn đến mức ngón tay tôi đông cứng lại trên thân máy nhựa cũ, hơi thở nghẹn ứ nơi lồng ngực. Tôi phải nuốt khan một ngụm khan đặc, ghì chặt ống nghe vào vành tai và cố nín thở trong vài giây đồng hồ, sợ rằng chỉ cần mình lỡ lời hỏi lại hay buột ra một tiếng thở phào hấp tấp, đối phương ở đầu dây bên kia sẽ kịp đổi ý.
Bảy triệu đồng.
Giữa căn phòng trọ ẩm thấp lợp ngói fibro xi măng nứt nẻ ở sâu trong một con ngõ cụt đường Bạch Mai, con số ấy dội vào màng nhĩ tôi không khác nào một tiếng nổ trầm đục. Nó không đơn thuần là tiền nong theo nghĩa chi tiêu thường nhật, mà đích thực là một chiếc phao cứu sinh bằng sắt đặc quăng thẳng xuống vũng lầy ngột ngạt mà tôi đang chới với suốt mấy tháng ròng. Đầu óc tôi tự động chia tách và hoán đổi con số ấy thành những đại lượng nhọc nhằn quen thuộc: bảy triệu đồng tương đương với gần sáu trăm giờ đứng chân trần phụ việc trên nền gạch hoa trơn trượt ở quán cà phê Mùa Gió, gấp mấy chục lần những đêm thức trắng cặm cụi hít khói chì độc hại để hàn chân tụ phồng, cạo sạch lớp rỉ đồng xỉn màu bám trên chân các thanh RAM đồng nát, hay nạp lại bảng phân vùng đĩa cứng cho các sạp tạp hóa khu Trại Găng, ngõ Mai Hương với thù lao vài chục nghìn lẻ lem nhem dầu mỡ. Số tiền ấy đủ sức giúp tôi thanh toán dứt điểm khoản nợ tạm ứng ba triệu hai trăm nghìn đồng đang đè nặng trong cuốn sổ ghi nợ của anh Tuấn, trả đứt tiền thuê gian phòng ẩm mốc này trọn vẹn ba tháng tới, và mua thêm mấy thùng mì tôm để những đêm dài sau hai giờ sáng, tôi không còn phải bẻ vụn từng vắt mì sống khô khốc rồi nuốt vội cùng ngụm nước lã lấy từ vòi nước chung ngoài sân.
Người gọi điện cho tôi là anh Thịnh, chủ một xưởng may gia công nằm sâu ở mạn cuối đường Trương Định, giáp mương nước thải nồng nặc mùi bùn hữu cơ.
Cách đó đúng hai tuần, giữa một đêm mưa phùn gió bấc, tôi từng được người quen giới thiệu đến xưởng của anh vào lúc gần một giờ sáng để xử lý sự cố khẩn cấp: chiếc máy tính văn phòng duy nhất lưu toàn bộ sổ sách của xưởng bị sốc điện do chập pha từ đường dây hạ thế kéo chung với dàn máy may công nghiệp. Nguồn điện trồi sụt đột ngột đã đánh sập bo mạch chủ, khiến ổ cứng cơ khí phát ra những tiếng lạch cạch ghê người và từ chối khởi động hệ điều hành. Khi cả xưởng may hỗn loạn vì nguy cơ mất trắng dữ liệu kiểm kê giao nhận đơn hàng cuối tháng, tôi đã ngồi xổm trên sàn xi măng suốt ba tiếng đồng hồ với hộp đồ nghề cá nhân, cẩn thận gỡ từng phân vùng hỏng bằng công cụ dòng lệnh cấp thấp, cách ly những cung từ bị thoái hóa nặng và trích xuất nguyên vẹn file kế toán Excel mà không làm suy hao hay xô lệch dù chỉ một dòng số liệu. Khi những cột số công nợ hiện trở lại trên màn hình lờ mờ, anh Thịnh đã vỗ mạnh vào bả vai gầy guộc của tôi, bàn tay dày dặn đầy dầu máy xiết chặt: “Thằng cu này tay nghề được, đồ đạc vào tay chú mày là đâu ra đấy, làm ăn rất gọn gàng.”
Sáng hôm sau cú điện thoại định mệnh, anh Thịnh đích thân hẹn gặp tôi ngay tại phòng trọ Bạch Mai. Anh bảo tiện đường ghé qua kho vải sợi gom hàng dệt kim gần chợ Mơ rồi tạt xe vào luôn cho tiện, khỏi mất công hai anh em kéo nhau ra quán nước chè đầu ngõ vừa ồn ào vừa mất thời gian.
Đúng mười giờ sáng, tiếng động cơ chiếc xe máy Honda Dream II nổ giòn giã ngoài ngõ hẹp gập ghềnh rồi tắt lịm bên bờ tường rào loang lổ rêu xanh. Cánh cửa gỗ ọp ẹp được đẩy vào, anh Thịnh bước qua ngưỡng cửa với thân hình đậm chắc, vững chãi như một khối gỗ nghiến. Anh mặc chiếc áo sơ mi cộc tay màu ghi xám đã sờn mép cổ, trên cánh tay và vạt áo còn vương vài vệt phấn may màu xanh da trời nhạt thếch cùng mùi hồ vải mới nồng nặc quyện với mùi dầu máy khâu đặc trưng của dân thợ may.
Căn phòng trọ của tôi vỏn vẹn chừng mười hai mét vuông, trần thấp lè tè phả xuống hơi nóng hầm hập tích tụ từ mái fibro xi măng cũ kỹ. Góc phòng kê một chiếc phản gỗ tạp đóng bằng ván cốp pha kênh kiệu, một chiếc bàn con bằng gỗ ép ép phồng rộp các góc dùng làm nơi đặt cỗ máy tính Pentium III bọc bao tải dứa mà tôi đã ôm khư khư suốt chuyến xe khách từ Nà Ban xuống Hà Nội dạo đầu năm học. Sát chân tường vôi bong tróc lở loét vì ẩm mốc là những chồng vỏ ổ cứng cũ, cuộn dây cáp mạng IDE xám ngoét và các bo mạch nguồn máy tính đã tháo rời linh kiện, được tôi sắp xếp ngăn nắp thành từng chồng theo thứ tự từ hỏng nặng đến có thể tái sử dụng.
Anh Thịnh đảo mắt nhìn quanh một lượt căn phòng tồi tàn. Đôi mắt sắc sảo của một gã thương nhân từng lăn lộn từ các chợ vải biên giới phía Bắc không hề lộ ra vẻ khinh khi hay ái ngại trước sự bần hàn trần trụi ấy. Anh bình thản kéo chiếc ghế nhựa màu xanh duy nhất mà tôi vừa lấy vạt áo lau sạch bụi, ngồi xuống cạnh chiếc bàn con ọp ẹp, rồi đặt lên mặt bàn một tập sổ tay bìa da màu nâu đã sờn gãy gáy, cài chiếc bút bi bấm đã mòn hết lớp mạ kim loại.
“Chú Nam này,” anh Thịnh mở đầu, chất giọng khàn đục nhưng dứt khoát theo thói quen của người đã quen điều hành hàng chục thợ thuyền ăn to nói lớn giữa tiếng rầm rì của máy móc. “Anh nói thẳng, nói ngắn gọn thôi để không mất thời gian của chú mày. Cái xưởng may của anh trước đây chỉ có mười lăm máy, quy mô nhỏ thì mấy đứa con gái cứ ghi sổ tay với gõ vài bảng Excel bập bõm còn kham được. Nhưng đợt này anh vừa ký nhận thêm hai chuyền may gia công áo khoác gió xuất khẩu, quân số xưởng vọt lên gần năm mươi thợ, đơn hàng rải rác đủ loại từ các cây vải gió, lớp lót nỉ, cuộn chỉ, dây khóa kéo cho tới từng chiếc cúc bấm kim loại. Rồi còn tiền công thợ khoán theo từng sản phẩm nữa. Con bé kế toán ở xưởng cứ mở cùng lúc ba file Excel là cái máy tính cà tàng lại treo cứng đơ, nhập nhầm mã hàng liên tục, tuần trước làm lệch sổ mất toi hơn mười triệu tiền vải tồn. Anh cần một cái phần mềm đàng hoàng cài thẳng lên máy, bấm vào là biết kho còn bao nhiêu mét vải sợi, tổ nào đang giữ bao nhiêu phụ liệu, thợ nào may xong bao nhiêu cái cổ áo, túi áo, rồi đến cuối tháng tự động nhảy ra bảng tính tiền công chia về từng người. Chú làm nổi không?”
Tôi với lấy chiếc phích Rạng Đông bọc sắt, cẩn thận rót một cốc nước lọc nguội vào chiếc cốc thủy tinh mắt trâu đưa cho anh. Lòng bàn tay tôi hơi rịn mồ hôi, ngón tay khẽ run lên vì xúc động nhưng ánh mắt tôi vẫn cố giữ vẻ điềm tĩnh, vững vàng nhất có thể. Trong đầu tôi lúc này, những bài giảng về lý thuyết cơ sở dữ liệu quan hệ, các thuật toán tìm kiếm trên bảng băm và mô hình cấu trúc thực thể - liên kết mà các thầy vừa giảng trên giảng đường Bách khoa lập tức xoay chuyển, liên kết lại với nhau như những bánh răng đồng bộ trong một cỗ máy tinh vi.
“Em làm được anh ạ,” tôi đáp, giọng nói đanh và chắc nịch hơn thường lệ. “Bài toán xưởng của anh về bản chất là hệ thống quản lý kho nguyên phụ liệu kết hợp với tính lương theo sản lượng công đoạn. Về phần kho, nó bao gồm bài toán cân bằng nhập - xuất - tồn theo từng lô hàng, màu sắc và định mức hao hụt. Về phần thợ may, ta cần phân rã một chiếc áo thành các công đoạn chi tiết: may thân, ráp vai, tra tay, thùa khuy, đính cúc, rồi gán đơn giá cụ thể cho từng công đoạn ấy theo bậc thợ. Vấn đề của anh không phải là máy yếu, mà là các file Excel bị phân mảnh, dữ liệu bị trùng lặp và không có cơ chế khóa dòng khi thao tác, dẫn đến xung đột dữ liệu. Chỉ cần chuẩn hóa toàn bộ dữ liệu vào một hệ thống thống nhất thì máy yếu đến mấy cũng chạy trơn tru.”
Anh Thịnh nghe tôi nói liền bật cười khà khà, bàn tay hộ pháp vỗ mạnh xuống mặt đùi đánh đét:
“Đấy, anh thích cái kiểu nói năng gãy gọn, đâu ra đấy của dân Bách khoa các chú mày. Mấy thằng bạn làm ăn rủ anh đi hỏi mấy công ty phần mềm ngoài phố lớn, chúng nó chém giá ba bốn chục triệu, lại còn vẽ vời máy chủ chuyên dụng rồi đường truyền cáp quang phức tạp nhức hết cả đầu. Anh thì anh chỉ cần một cái chạy mượt trên cái máy cùi bắp ở xưởng, không bao giờ bị đơ, số liệu chuẩn xác từng mét vải với từng cắc tiền công của thợ là được. Anh trả chú mày trọn gói bảy triệu đồng. Chú viết xong, mang đến xưởng cài đặt rồi cho chạy thử trong vòng một tuần, thợ thuyền với kế toán dùng thấy êm xuôi, anh thanh toán nốt phần còn lại. Giờ anh ứng trước cho chú một nửa, ba triệu rưỡi, để chú có tiền trang trải, mua thêm sách vở linh kiện hay nâng cấp cái máy này lên mà làm cho nhanh. Thấy thế nào, nhận được không?”
Ba triệu rưỡi tiền mặt trao tận tay. Lần đầu tiên kể từ buổi chiều mùa thu năm ngoái khi tôi xách chiếc túi vải bạc màu bước chân xuống sân ga Hà Nội với cái bụng đói cào cào và vài chục nghìn đồng lẻ giấu sâu dưới đáy túi quần rách, tôi mới được một người ngoài xã hội tin tưởng trao cho một món tiền lớn nhường ấy mà không phải thông qua sự thương hại hay ban ơn. Nó không phải là đồng tiền bố thí của lòng trắc ẩn, mà là sự thừa nhận sòng phẳng đối với năng lực trí tuệ và tay nghề kỹ thuật của tôi. Trong khoảnh khắc ấy, tôi cảm thấy một luồng nhiệt nóng ran chạy dọc từ thắt lưng lên đến đỉnh đầu, quét sạch đi tất cả những nỗi tự ti, nhục nhằn cay đắng mà tôi từng phải cắn răng nuốt vào trong, từ những lời dè bỉu nơi gian chái phụ tối tăm ở Nà Ban cho đến những đêm cúi mặt rửa từng chậu bát ngập ngụa cặn dầu mỡ dưới tầng hầm quán Mùa Gió.
Tâm trí tôi bất giác dội lại lời nói đầy kiêu bạc của Đỗ Hải Long trong buổi chung kết cuộc thi tin học hôm nọ: rằng sinh viên nghèo rất hay đem cái nghèo ra làm tấm bình phong đạo đức để thanh minh cho sự yếu kém, nhưng muốn thực sự ngẩng cao đầu đứng vững trong xã hội này thì phải dám nhúng tay vào thực tế thị trường, tạo ra những sản phẩm cụ thể mà người ta sẵn sàng rút ví trả tiền. Tôi cũng nhớ đến lời can ngăn gắt gao của Phong tối qua bên bậc thềm giảng đường, khi Phong cảnh báo tôi đang tự bẻ gãy lộ trình dài hạn của một kỹ sư tương lai để đổi lấy vài đồng bạc lẻ của một gã thợ sửa máy tính dạo. Nhưng đây đâu phải là việc chắp vá của một thợ sửa máy tính dạo? Đây là một hệ thống phần mềm thương mại thực thụ. Tôi đang lập trình, đang xây dựng một giải pháp kỹ thuật từ những dòng lệnh sơ khai nhất. Đây chính là con đường tôi đã vạch ra để tự cứu lấy bản thân và thoát khỏi gọng kìm siết nghẹt của sự thiếu thốn.
“Em nhận, anh Thịnh,” tôi nhìn thẳng vào đôi mắt hơi đỏ vì thiếu ngủ của người đàn ông đối diện, giọng dõng dạc. “Em sẽ xây dựng cho anh một phần mềm xử lý gọn nhẹ, tối ưu bộ nhớ tối đa và đảm bảo không bao giờ bị nghẽn dữ liệu dù xưởng có tăng lên một trăm thợ.”
Anh Thịnh gật gù hài lòng. Anh thò tay vào túi quần bò rút ra một chiếc ví da dày cộm, ngả màu đen bóng vì mồ hôi, rồi rút ra một xấp tiền polyme mệnh giá năm trăm nghìn đồng còn phẳng phiu, thơm nồng mùi mực in mới. Anh đếm đủ bảy tờ, đặt ngay ngắn lên mặt bàn gỗ xước sát cạnh bàn phím máy tính. Nhìn những tờ tiền màu xanh lơ sắc nét nằm im lìm trên nền gỗ thô mộc, tim tôi đập rộn rã từng nhịp mạnh mẽ.
Tôi với tay lấy cuốn sổ tay kỹ thuật bìa xanh học trò đã dùng hết một nửa, lật sang một trang giấy trắng tinh chưa vướng mực, rồi rút chiếc bút bi Kim Thành gài trên túi áo bắt đầu ghi chép lại toàn bộ các đầu mục mà anh Thịnh yêu cầu.
Anh Thịnh ngồi tựa lưng vào mép bàn, vừa phì phèo điếu thuốc lá Thăng Long vừa thao thao bất tuyệt kể về quy trình vận hành thực tế ở xưởng may của mình suốt gần một tiếng đồng hồ. Tôi cặm cụi ghi chép không bỏ sót một chi tiết nào: Thứ nhất, phân hệ quản lý danh mục nguyên phụ liệu: phân loại vải theo mã cây, màu sắc, khổ vải, số mét thực tế; theo dõi từng cuộn chỉ may, từng vỉ khóa kéo, cúc áo, nhãn mác dệt và túi nilon đóng gói xuất xưởng. Thứ hai, phân hệ quản lý kho: lập phiếu nhập kho khi xe hàng từ bến chuyển về, lập phiếu xuất kho vật tư chi tiết cho từng tổ trưởng chuyền may, tự động tính toán và kết xuất báo cáo tồn kho tức thời để người quản lý biết chính xác ngày nào cần nhập thêm vải lót hay khóa cúc. Thứ three, phân hệ quản lý công thợ: lưu trữ danh sách gần năm mươi công nhân chia theo hai tổ, thiết lập bảng đơn giá linh hoạt cho từng công đoạn nhỏ (từ may thân, tra tay, ráp nẹp cổ, thùa khuy cho đến là ủi thành phẩm), cho phép thư ký xưởng chấm sản lượng hàng ngày theo mã thẻ thợ và mã đơn hàng cụ thể. Thứ tư, phân hệ báo cáo tổng hợp: tự động kết xuất bảng tổng hợp sản lượng theo tuần, in phiếu lương công nhân chi tiết vào ngày cuối tháng, và hiển thị cảnh báo trực quan trên màn hình mỗi khi lượng vải tồn kho rơi xuống dưới định mức an toàn tối thiểu.
Mọi thứ hiện lên trong tâm trí tôi vô cùng sáng rõ và rành mạch. Dưới lăng kính của một sinh viên công nghệ thông tin luôn tôn sùng sự tối ưu hóa cấu trúc dữ liệu, tôi nhìn thấy những yêu cầu ấy chỉ là một tập hợp các bảng quan hệ đơn giản: tôi sẽ thiết kế chúng đạt chuẩn hóa đến dạng chuẩn 3NF để triệt tiêu hoàn toàn sự dư thừa dữ liệu, đánh các chỉ mục (B-Tree index) cẩn thận trên các trường khóa chính và mã vật tư để tăng tốc độ truy vấn, đồng thời viết các thủ tục xử lý giao dịch nội bộ có cơ chế khóa dòng ở mức độ nguyên tử nhằm ngăn chặn triệt để mọi xung đột khi hai người cùng truy xuất một bản ghi kho. Về mặt học thuật và kỹ thuật thuần túy, đây là một bài toán có quy mô cơ sở dữ liệu rất nhỏ, độ phức tạp thuật toán thấp hơn rất nhiều so với bài toán luồng cực đại trên đồ thị mà tôi từng thức trắng ba đêm để giải quyết đạt điểm mười tuyệt đối trong bài kiểm tra giữa kỳ của thầy Vinh trên giảng đường D9.
Tuy nhiên, chính trong sự tự tin tột cùng của một kẻ lần đầu tiên bước chân vào thương trường, tôi đã phạm phải một sai lầm sơ đẳng và chết người của những người làm kỹ thuật thiếu kinh nghiệm thực tế. Tôi chăm chú ghi chép tất cả những gì anh Thịnh nói, nhưng tôi không hề lập thành một bản tài liệu đặc tả yêu cầu kỹ thuật chi tiết để yêu cầu anh ký xác nhận. Tôi hoàn toàn bỏ qua việc thiết lập các ranh giới phạm vi công việc: thế nào là một tính năng được coi là hoàn tất theo nghiệm thu? Nếu sau này xưởng may phát sinh thêm cách tính lương lũy tiến theo tiến độ giao hàng hay thay đổi mẫu mã áo khoác thì chi phí phát sinh sẽ tính thế nào? Thời hạn bảo hành, hỗ trợ kỹ thuật sau khi bàn giao là bao lâu, và những yêu cầu sửa đổi ngoài dự kiến có bị tính thêm phụ phí hay không?
Khi tôi gấp cuốn sổ tay bìa xanh lại, anh Thịnh dập mẩu tàn thuốc lá vào chiếc gạt tàn làm bằng nắp hộp bánh quy cũ, đứng dậy bắt chặt tay tôi:
“Cứ thống nhất thế nhé chú Nam. Anh tin tưởng vào cái đầu của dân Bách khoa. Chú cố gắng cày cuốc trong vòng ba tuần cho anh một bản chạy thử để anh kịp đưa vào quản lý đợt hàng áo khoác mùa đông này. Cứ làm cho xưởng anh thật ngon lành, sau này anh em bạn bè trong hội may mặc của anh mở thêm xưởng hay đổi mới quản lý, anh sẽ giới thiệu cho chú mày tha hồ mà nhận việc, kiếm tiền không xuể đâu.”
“Vâng, anh cứ yên tâm,” tôi đáp lại bằng tất cả sự hồn nhiên và ngây thơ của tuổi trẻ. “Em sẽ tối ưu hóa toàn bộ phần lõi thuật toán và cấu trúc lưu trữ thật chuẩn xác. Khi cái khung dữ liệu cốt lõi đã chạy mượt mà, ổn định và không có lỗi logic thì sau này việc nhập liệu hay kết xuất thêm các dạng báo cáo chỉ là chuyện nhỏ.”
Tôi tiễn anh Thịnh ra tận đầu ngõ, đứng nhìn bóng lưng vạm vỡ của người đàn ông trên chiếc xe máy Dream khuất dần sau dòng người tấp nập nơi ngã ba Bạch Mai. Lồng ngực tôi phập phồng một niềm kiêu hãnh non nớt, tươi mới. Trở lại căn phòng trọ, tôi bước đến bên bàn học, nhặt bảy tờ tiền năm trăm nghìn đồng phẳng phiu lên tay, mân mê bề mặt nhẵn bóng của chất liệu polyme. Không một chút chần chừ, tôi trích ngay bốn tờ — chẵn hai triệu đồng — cẩn thận kẹp vào giữa những trang sách giáo trình dày cộp giấu sâu dưới đáy bao tải đựng quần áo, để dành tối nay mang sang quán cà phê Mùa Gió thanh toán bớt phần lớn khoản nợ cho anh Tuấn. Khoản nợ ba triệu hai trăm nghìn đồng từng đè nặng lên từng giấc ngủ của tôi suốt bao tuần qua, tựa như một tảng đá hộc chắn ngang lối mòn ở nương ngô Pha Luông, nay đã có thể vơi đi quá nửa. Tôi vững tin rằng mình đang đi đúng hướng: tôi không cần phải bán rẻ sức lao động thuần túy với giá mười hai nghìn đồng mỗi giờ, cũng không cần phải gượng cười nhận những cái nhìn thương hại của bất kỳ ai. Tôi hoàn toàn có thể tự nuôi sống bản thân một cách đàng hoàng, kiêu hãnh bằng chính những dòng mã lệnh mà khối óc mình tạo ra.
***
Kể từ ngày hôm đó, nhịp sinh hoạt của tôi bị kéo căng cực độ, tựa như một sợi dây cáp thép nối giữa hai vách đá cheo leo giữa gió ngàn.
Mỗi buổi sáng, tôi phải thức dậy từ sáu giờ để kịp có mặt trên giảng đường Bách khoa. Dù trong tâm trí tôi lúc nào cũng quay cuồng những bảng biểu dữ liệu, các quan hệ khóa ngoại và cách tổ chức luồng nhập xuất kho, tôi vẫn cắn răng không dám bỏ bất kỳ buổi học nào của thầy Vinh hay những môn lý thuyết đại cương then chốt. Đến giữa trưa, khi tiếng chuông tan học vừa dứt, tôi lập tức dắt chiếc xe đạp cọc cạch mượn của bác chủ trọ, đạp hối hả dưới cái nắng hanh khô của mùa đông sang khu Trương Định để dạy kèm môn Toán cho một cậu học sinh lớp chín đang chuẩn bị thi chuyển cấp, kiếm năm mươi nghìn đồng thù lao ít ỏi cho mỗi buổi học kéo dài hai tiếng đồng hồ. Và rồi, cứ đúng năm giờ ba mươi chiều, tôi lại có mặt ở tầng trệt quán cà phê Mùa Gió, khoác lên mình chiếc tạp dề đồng phục đen, bắt đầu ca làm việc kéo dài đến tận mười một giờ đêm. Tôi lại tất bật bưng bê từng khay đồ uống nặng trĩu, cúi gập người lau dọn từng mặt bàn dính đầy bã cà phê, và chôn chân hàng giờ liền bên bồn rửa bát ngập ngụa bọt xà phòng lạnh buốt để cọ rửa hàng chồng ly tách thủy tinh cáu bẩn.
Vào giờ giao ca lúc chín giờ tối, khi tranh thủ lúc quán vãn khách, tôi rút bốn tờ tiền năm trăm nghìn đồng phẳng phiu mang sang góc quầy thu ngân gửi trả anh Tuấn. Anh Tuấn nhìn xấp tiền màu xanh đặt ngay ngắn trên mặt kính quầy bar, rồi ngước đôi mắt mệt mỏi nhưng tinh tường nhìn thẳng vào gương mặt hốc hác, đôi quầng mắt thâm sì vì thiếu ngủ của tôi. Anh khẽ nhíu mày, hạ thấp giọng gặng hỏi:
“Mày lại nhận làm cái trò gì mờ ám, nguy hiểm ngoài đường ngoài chợ đúng không Nam? Anh đã dặn rồi, đừng có dại dột dính dáng vào mấy đường dây cào trộm dữ liệu thẻ cào hay tiếp tay cho mấy tụ điểm tín dụng đen như hồi trước đấy nhé. Đồng tiền kiếm kiểu đó không giữ được đâu.”
“Không có đâu anh Tuấn,” tôi ngẩng cao đầu, lần đầu tiên sau nhiều tháng tôi cảm thấy giọng nói của mình có được sự đĩnh đạc và tự tin tuyệt đối trước người quản lý vốn luôn đối đãi tử tế với mình. “Em nhận hợp đồng viết phần mềm quản lý kho với tính lương tự động cho một xưởng may công nghiệp ở mạn Trương Định. Em làm việc kỹ thuật đàng hoàng, người ta tin tưởng nên tạm ứng trước tiền công cho em đấy anh ạ.”
Anh Tuấn sững lại nhìn tôi một hồi lâu. Anh nhìn sâu vào mắt tôi như muốn tìm kiếm một dấu hiệu bất minh nào đó, rồi anh khẽ thở dài một tiếng nặng nhọc, cầm lấy bốn tờ tiền cất vào ngăn kéo két sắt, với tay lấy cuốn sổ chấm công gạch bớt một dòng nợ:
“Được như thế thì tốt cho mày. Nhưng anh bảo này, làm gì thì làm, mày cũng phải biết giữ lấy cái mạng chứ. Nhìn mày dạo này quắt queo, xơ xác chẳng khác gì cái xác ve sầu rụng cuống rồi đấy.”
Rời quán Mùa Gió lúc hơn mười một giờ đêm, khi đường phố Hà Nội đã thưa thớt người qua lại và gió lạnh đầu đông rít từng cơn qua các ngõ hẹp, ngày làm việc thực sự của tôi mới bắt đầu.
Trở về căn phòng trọ ẩm thấp nằm sâu trong con ngõ ngoằn ngoèo của phố Bạch Mai, tôi khép chặt cánh cửa gỗ ép đã cong vênh vì ngấm nước mưa. Căn phòng chưa đầy mười hai mét vuông đón tôi bằng một luồng không khí đặc quánh, lạnh buốt và nồng nặc mùi vôi vữa mốc thếch bốc lên từ chân tường loang lổ. Tôi với tay bật chiếc quạt cóc con con đặt dưới đất, để làn gió yếu ớt từ cánh nhựa màu xanh phe phẩy xua bớt thứ mùi ngột ngạt tích tụ cả ngày dài. Cắm ấm nước siêu tốc gỉ sét vào ổ điện chập chờn, tôi bóc vội gói mì tôm năm hào cho vào chiếc bát nhựa sứt mép, dội nước sôi sùng sục rồi úp tạm bằng một cuốn giáo trình Toán rời bìa. Vừa nhai trệu trạo những sợi mì nở phềnh cay xè để lót dạ, tôi vừa kéo ghế ngồi xuống trước chiếc màn hình lồi CRT mười lăm inch của cỗ máy Pentium III.
Chiếc máy tính cũ kỹ mà thầy Dũng chắp vá từ kho linh kiện thanh lý ở Mộc Châu khẽ rùng mình một cái sau tiếng bấm công tắc nguồn, rồi phát ra tiếng quạt gió kêu vo vo quen thuộc như tiếng thở dài của một người già mang bệnh phổi. Ánh sáng lân tinh xanh lét từ màn hình hắt lên mặt bàn gỗ mộc bám bụi, soi rõ những vết xước nham nhở và những đầu ngón tay khẳng khiu, chai sạn của tôi. Tiếng gõ phím lạch cạch bắt đầu vang lên đều đặn, đanh giòn giữa đêm khuya thanh vắng, hòa lẫn với tiếng nước nhỏ giọt tong tỏng nơi góc bể nước công cộng ngoài sân và tiếng chuột chạy sột soạt trên những tấm fibro xi măng mục nát trên mái nhà.
Để phần mềm có thể vận hành mượt mà trên dàn máy tính văn phòng cấu hình thấp, phần lớn là những cỗ máy Pentium II hoặc Celeron đời cũ chạy Windows 98 hoặc Windows 2000 cà giật ở xưởng may, tôi dứt khoát gạt bỏ mọi giải pháp nặng nề, cồng kềnh có sẵn trên thị trường. Tôi không dùng bất kỳ bộ thư viện hay nền tảng trung gian nào tiêu tốn tài nguyên. Tôi tự tay thiết kế toàn bộ cấu trúc dữ liệu từ tầng thấp nhất, gọt giũa từng khối nhớ để vắt kiệt từng chút hiệu năng phần cứng.
Tôi chọn C++ để viết toàn bộ phần lõi tính toán và xử lý logic nghiệp vụ, kết hợp với cơ sở dữ liệu nhúng SQLite được tối ưu hóa chỉ mục cực kỳ chặt chẽ đến từng trường dữ liệu. Nhận thức rõ điểm nghẽn chí mạng của các hệ thống quản trị dữ liệu trên máy tính đời cũ chính là tốc độ đọc ghi cơ học vô cùng chậm chạp của những ổ cứng IDE đã rệu rã, tôi tự mình xây dựng một cơ chế quản lý bộ nhớ đệm thông minh ngay trên RAM. Tôi viết các thuật toán tải trước toàn bộ danh mục mã vải, quy cách phụ liệu và bảng đơn giá định mức của từng công đoạn may vào một vùng nhớ liên tục, biến chúng thành các mảng tra cứu nội vi. Nhờ đó, mọi thao tác tìm kiếm, lọc dữ liệu và tính toán cân đối tồn kho đều được xử lý trực tiếp trên thanh ghi và bộ nhớ trong với tốc độ ánh sáng, gần như tức thì mà không cần phải thực hiện bất kỳ lệnh quét đĩa tốn kém nào.
Trong những đêm thức trắng kéo dài miết mải từ một giờ sáng đến tận năm giờ sáng, khi cả khu trọ Bạch Mai chìm sâu vào giấc ngủ li bì sau một ngày mưu sinh mệt nhọc, tôi hoàn toàn đắm chìm trong cảm giác hưng phấn tột cùng của sự sáng tạo kỹ thuật thuần túy. Thế giới bên ngoài cánh cửa gỗ mục nát kia dường như biến mất, chỉ còn lại tôi đối diện với những dòng mã nguồn đen trắng sắc lẹm. Mỗi hàm, mỗi con trỏ, mỗi khối cấu trúc tôi viết ra đều được căn chỉnh chính xác đến từng byte bộ nhớ. Tôi tỉ mẩn thiết kế các hàm băm để tra cứu hàng nghìn mã vải trong thời gian hằng số O(1), tự hào nhìn những thuật toán cân bằng luồng nhập - xuất vận hành nhịp nhàng, có khả năng phát hiện sai lệch số liệu hay cảnh báo âm kho ngay trong tích tắc khi người dùng vừa gõ xong ký tự cuối cùng của một phiếu xuất.
Cứ sau hai giờ sáng, những cơn đau dạ dày lại bắt đầu trỗi dậy, quặn thắt từng cơn nơi vùng thượng vị. Thói quen nuốt vội những bát mì tôm cay gắt nhiều muối, uống thứ nước giếng khoan đun vội và thức thâu đêm suốt sáng đã biến niêm mạc bao tử của tôi thành một chiến địa rỉ máu. Vị dịch vị chua chát, đắng ngắt trào ngược lên tận cuống họng, làm bỏng rát thực quản. Những lúc cơn đau nhói lên đến mức toát mồ hôi lạnh, tôi chỉ biết co gập người lại, tỳ thật chặt mép bàn gỗ sắc cạnh vào bụng để lấy sức ép áp chế cơn đau, với tay hớp một ngụm nước sôi để nguội đã đóng váng trắng, chớp chớp đôi mắt cay xè mờ đục vì ánh sáng xanh của màn hình CRT, rồi lại nghiến răng tiếp tục gõ phím. Cơn đau thể xác dữ dội ấy chẳng thấm tháp gì so với niềm tin mãnh liệt đang bốc cháy ngùn ngụt trong lồng ngực: tôi sắp hoàn thiện một sản phẩm hoàn hảo, một cỗ máy phần mềm tinh xảo và sắc bén. Nó sẽ là bằng chứng đanh thép nhất chứng minh rằng năng lực kỹ thuật của tôi không hề thua kém bất kỳ ai, và tôi hoàn toàn có thể tự mình đứng vững, tự nuôi sống bản thân bằng tri thức thuần khiết mà không cần đến bất kỳ sự thương hại hay nâng đỡ nào.
Sau hai tuần rưỡi làm việc cật lực không một đêm ngủ trọn giấc, tôi hoàn thành bản thử nghiệm đầu tiên mang mã hiệu 0.1.
Chiều thứ Bảy hôm ấy, tôi mượn chiếc máy tính xách tay ThinkPad cũ mèm của anh Tuấn ở quán Mùa Gió, cẩn thận sao chép toàn bộ bộ cài đặt vào một chiếc đĩa CD tự ghi rồi đạp xe mang thẳng sang xưởng may của anh Thịnh ở ngõ sâu phố Trương Định. Trái ngược với sự tĩnh lặng của khu trọ, xưởng may đón tôi bằng một cơn chấn động âm thanh đinh tai nhức óc. Tiếng mô-tơ của hàng chục chiếc máy may công nghiệp rầm rập nện xuống sàn bê tông, tiếng máy cắt vải xoay tít rít lên từng hồi chói gắt, và bụi vải nỉ màu xám tro bay lơ lửng trong không khí mù mịt như sương mù công nghiệp, bám dày lên tóc tai, lông mi và làm khô khốc cổ họng những người công nhân đang hối hả chuyền tay nhau từng tập bán thành phẩm.
Tôi lách qua những kiện hàng chất cao ngất ngưởng, đi vào góc phòng kế toán ngăn tạm bằng những tấm tôn ép ọp ẹp. Chiếc máy tính để bàn cũ kỹ của xưởng phủ một lớp bụi vải xám xịt. Tôi cắm đĩa, chạy lệnh cài đặt bộ phần mềm nhỏ gọn chưa đầy mười megabyte của mình. Chị Lan — kế toán trưởng của xưởng, một phụ nữ ngoài ba mươi tuổi có gương mặt hốc hác vì sổ sách và đôi mắt cận thị nặng giấu sau cặp kính dày cộp trễ nải trên sống mũi — ngồi xuống ghế, dè dặt rê chuột theo từng bước chỉ dẫn của tôi.
Để chứng minh sức mạnh của hệ thống, tôi bảo chị Lan cho phép tôi nhập thử nghiệm tệp dữ liệu lớn gồm năm trăm mã nguyên phụ liệu các loại và hơn ba nghìn bản ghi lịch sử xuất nhập kho mẫu mà tôi đã chuẩn bị sẵn từ nhà. Chị Lan hơi ngập ngừng, đưa ngón tay gầy guộc bấm vào nút “Tính toán tồn kho”.
Không có bất kỳ tiếng rít gầm rú nào của ổ cứng, không có con trỏ chuột quay tròn hình đồng hồ cát quen thuộc, và cũng chẳng có dấu hiệu đơ cứng hay treo máy như những lần chị thao tác trên tệp Excel khổng lồ cũ kỹ. Kết quả phân tích toàn bộ lượng vải tồn, chỉ may, khuy bấm và phụ liệu hao hụt lập tức nhảy ra trên màn hình chỉ trong chưa đầy một phần mười giây, gọn gàng, sắc nét và tĩnh lặng tuyệt đối. Chị Lan giật mình khẽ thốt lên một tiếng ngạc nhiên. Tôi bảo chị bấm tiếp vào nút “Tổng hợp sản lượng tuần”. Lập tức, một bảng thống kê đa chiều chi tiết đến từng tổ may, từng công đoạn tra khóa, ráp sườn, may cổ áo kèm theo tổng số tiền công khoán chính xác đến từng đồng lẻ hiện ra rành mạch trước mắt.
Anh Thịnh nãy giờ đứng khoanh tay ngay sau lưng tôi, đôi mắt ti hí chăm chú dán chặt vào từng con số đang hiển thị. Anh sững sờ mất vài giây, rồi bất ngờ đập tay thật mạnh xuống mặt bàn gỗ vang lên một tiếng “chát”:
“Tuyệt vời! Mẹ kiếp, nhanh thật đấy Nam ạ! Cái máy rác rưởi này của anh mà bấm một phát nó nhảy số đánh xoẹt thế này thì quá siêu rồi. Bình thường con bé Lan nó mở cái file Excel cũ lên bấm tính lương, khéo nó phải đi cắm xong ấm nước, pha xong ấm chè quay lại máy mới chạy xong mà nhiều khi còn đơ luôn phải bấm nút reset.”
Chị Lan cũng ngước lên nhìn tôi, đôi mắt sau tròng kính dày ánh lên sự thán phục không giấu giếm:
“Công nhận nhanh thật em ạ. Chị làm kế toán bao năm nay chưa thấy cái phần mềm nào bấm mượt mà nhẹ như thế này. Số liệu hiển thị rất khoa học, nhìn vào là thấy ngay tồn kho thực tế, không bị rối rắm như mấy cái mẫu biểu chị tự mò trên mạng.”
Đứng giữa xưởng may sực mùi dầu máy, bụi vải bám đầy trên vai áo bạc màu, nghe tiếng máy may rầm rập bên ngoài và đón nhận nụ cười thỏa mãn của anh Thịnh cùng lời khen chân thành của chị kế toán, lồng ngực tôi phập phồng một cảm giác kiêu hãnh đến nghẹt thở. Cảm giác ấy giống như một liều thuốc kích thích cực mạnh tiêm thẳng vào tim. Thành công rực rỡ của bản thử nghiệm như một đòn giáng đanh thép dập tắt mọi hoài nghi, lo lắng và những lời bàn lùi thái quá mà Phong đã từng nói với tôi. Tôi đã chứng minh được mình đúng. Con đường kỹ thuật thuần túy, sự khổ luyện thuật toán và tư duy tối ưu hóa chính là chiếc chìa khóa vạn năng có thể giải quyết mọi bài toán thực tế, đập tan mọi trở ngại và định hình lại trật tự cuộc đời tôi. Tôi đã làm được chính xác những gì khách hàng mong đợi, thậm chí còn nhanh hơn, chuẩn xác hơn cả trí tưởng tượng của họ.
“Tốt lắm chú em,” anh Thịnh rút từ túi áo ra bao thuốc Thăng Long, rút một điếu châm lửa, rít một hơi dài rồi nhả khói mù mịt lên trần nhà xưởng. “Nhưng mà thế này nhé Nam, bây giờ chú phải kết nối cái phần mềm này vào mạng nội bộ của xưởng cho anh. Chú làm thế nào để cái máy tính dưới kho vải của thằng Hùng với cái máy tính anh để trên gác xép văn phòng cũng phải xem và nhập được dữ liệu cùng một lúc. Với cả, chú đẩy luôn cái này lên mạng Internet cho anh, để tối về nhà anh nằm trên giường mở điện thoại hoặc bật cái laptop ở nhà ra là kiểm tra được ngay xem hôm nay xưởng may được bao nhiêu cái áo, thợ làm được bao nhiêu công. Chú làm xong cái đấy, vận hành thông suốt trên mạng là anh em mình ngồi lại tất toán nốt ba triệu rưỡi tiền công còn lại! Anh không bao giờ để chú thiệt.”
“Dạ được chứ anh, chuyện kết nối mạng là nghiệp vụ chuyên ngành của em,” tôi ngẩng cao đầu, trả lời một cách dứt khoát và tự tin tuyệt đối, không một thoáng đắn đo suy tính. “Em sẽ cấu hình hệ thống máy chủ mạng nội bộ và dịch vụ từ xa ngay trong tuần tới cho anh.”
Tôi rời khỏi xưởng may Trương Định khi bóng hoàng hôn mùa đông đã bảng lảng buông xuống những mái nhà lợp tôn xám ngắt. Gió bấc thổi thốc từng cơn lạnh buốt vào mặt, luồn qua lớp áo khoác mỏng manh làm da thịt tôi tê tái, nhưng bên trong lồng ngực, một ngọn lửa ấm áp và rạo rực đang bùng cháy. Tôi đạp chiếc xe cọc cạch xuôi theo đường Bạch Mai mà ngỡ như hai bánh xe không hề chạm đất. Tôi đã nhìn thấy rất rõ viễn cảnh tươi sáng phía trước: chỉ ít ngày nữa thôi, khi hệ thống mạng đi vào hoạt động, tôi sẽ cầm trọn ba triệu rưỡi tiền mặt còn lại trong tay. Tôi sẽ trả sạch món nợ ân nghĩa cho anh Tuấn, ngẩng cao đầu bước đi, và bắt đầu có một khoản tích lũy đàng hoàng để trang trải học phí, mua thêm sách vở chuẩn bị cho kỳ học mới.
Thế nhưng, tôi của năm tháng tuổi trẻ ngạo mạn ấy hoàn toàn không thể ngờ được rằng, chính sự tự tin mù quáng và sự thiếu hụt trầm trọng những trải nghiệm va đập thực tế đang dẫn tôi bước thẳng vào một cơn ác mộng tàn khốc nhất.
***
Để đưa toàn bộ hệ thống lên môi trường mạng Internet cho anh Thịnh theo dõi từ xa, trong khi vẫn phải bóp nghẹt mọi chi phí phát sinh để bảo toàn số tiền công bảy triệu đồng trọn gói như thỏa thuận ban đầu, tôi không có đủ tiền để mơ tới những dịch vụ lưu trữ đám mây hay thuê máy chủ riêng đắt đỏ. Lùng sục khắp các diễn đàn công nghệ trong nước với số tiền ít ỏi còn sót lại trong túi, tôi cắn răng bỏ ra tám mươi nghìn đồng để thuê một gói máy chủ ảo (VPS) rẻ tiền nhất của một nhà cung cấp mới mở. Đó là một cỗ máy chủ ảo với cấu hình thảm hại: một nhân CPU ảo bị bóp nghẽn công suất, dung lượng RAM vỏn vẹn 512 megabyte và đường truyền băng thông chia sẻ chung với hàng trăm trang web rác khác.
Tôi lao vào việc đập đi xây lại kiến trúc phần mềm, chuyển đổi từ một ứng dụng độc lập trên máy đơn sang mô hình khách - chủ (client-server). Tôi tự tay dùng C++ viết một dịch vụ mạng nhỏ gọn để lắng nghe các kết nối từ xa, phân tích các yêu cầu và trả về dữ liệu thô dưới định dạng JSON, đồng thời tự mày mò viết một giao diện web sơ sài bằng HTML và JavaScript thuần để anh Thịnh có thể đăng nhập qua trình duyệt web trên máy tính cá nhân.
Thế nhưng, ngay khoảnh khắc tôi vừa ghép nối thành công phần lõi xử lý tối ưu với giao diện mạng và triển khai chạy thử nghiệm thực tế cho toàn bộ nhân sự xưởng may cùng truy cập, một cơn bão táp của những đòi hỏi thay đổi quái gở, dồn dập và hỗn loạn bắt đầu trút xuống đầu tôi không một lời báo trước.
Phát súng đầu tiên nổ ra từ anh Hùng, gã thủ kho vải sợi thô lỗ của xưởng may. Chiều hôm ấy, chuông điện thoại của tôi réo liên hồi.
“Alo, Nam đấy à? Mày viết cái phần mềm kiểu gì mà dở hơi thế hả em?” Tiếng anh Hùng oang oang, gắt gỏng vang lên trong ống nghe, xen lẫn tiếng còi xe tải chở hàng bóp inh ỏi và tiếng công nhân bốc vác hò hét ngoài bãi. “Mày có biết thực tế ở cái kho này nó chạy thế nào không? Cây vải người ta chở từ cảng về nhập kho, có phải cây nào cũng tròn trĩnh đúng một trăm mét như trong sách của chúng mày đâu! Có cây một trăm lẻ hai mét rưỡi, có cây dệt lỗi chỉ được chín mươi bảy mét. Mày bắt tao nhập một mã vải rồi gõ tổng số mét chung, thế lúc tao cắt xuất cho chuyền hai cây rưỡi thì tao ghi vào đâu? Rồi còn vải vụn đầu tấm thu hồi lại sau khi cắt nữa, mày có cái ô nào để tao nhập số mét vải vụn trả về để trừ vào định mức hao hụt không?”
Tôi bực dọc bóp chặt chiếc điện thoại, giọng đanh lại:
“Anh Hùng ơi, hôm đầu tiên em làm việc thống nhất với anh Thịnh, anh Thịnh chỉ yêu cầu quản lý kho tổng theo số mét tồn và mã màu sắc, quy cách cơ bản. Anh Thịnh hoàn toàn không hề đề cập đến chuyện phải quản lý chi tiết tình trạng vật lý của từng đầu cây vải lẻ hay tỷ lệ hao hụt của vải vụn đầu tấm!”
“Ơ hay cái thằng này, mày buồn cười nhỉ!” Anh Hùng quát tướng lên qua điện thoại, giọng điệu đầy vẻ trịch thượng. “Thằng Thịnh là thằng chủ, nó ngồi trên phòng lạnh đếm tiền thì nó biết thế quái nào được cái việc bốc vác, đo đạc kiểm kho hàng ngày của cánh tao! Bây giờ tao hỏi mày, không quản lý chi tiết từng cây vải lẻ, không lưu lại số mét dở dang trong lõi cuộn, thì đến cuối tháng kiểm kê lệch cả nghìn mét vải sợi, cái số tiền chênh lệch đấy mày trừ vào lương của tao hay mày bỏ tiền túi ra đền cho thằng Thịnh? Mày phải sửa lại ngay lập tức! Thêm cho tao cái bảng danh sách quản lý từng cuộn vải, cuộn nào đã xé niêm phong, cuộn nào xuất dở thì phải hiển thị rõ số mét thực tế còn dính trên lõi nhựa!”
Ngực tôi nghẽn lại vì tức giận. Nhưng để bảo vệ dự án, tôi đành nén cơn thịnh nộ, ngồi xuống mở mã nguồn ra đập bỏ cấu trúc bảng dữ liệu `Kho_Vai` mà tôi từng nắn nót viết. Để quản lý trạng thái của từng cuộn vải độc lập, tôi buộc phải tạo thêm bảng quan hệ `Chi_Tiet_Cuon_Vai` với hàng loạt khóa ngoại chằng chịt, kéo theo việc phải viết lại toàn bộ các thủ tục tính toán xuất - nhập - tồn kho. Cấu trúc bảng băm O(1) thanh thoát mà tôi vô cùng tự hào bỗng chốc bị xé vụn thành trăm mảnh, nhường chỗ cho những câu lệnh truy vấn quan hệ lồng nhau nặng nề, quét đi quét lại trên cơ sở dữ liệu để tổng hợp số mét vải vụn và các lõi cuộn dở dang.
Chưa kịp thở phào sau hai đêm thức trắng ròng rã sửa xong phần kho bãi theo ý anh Hùng, điện thoại lại đổ chuông chói tai vào đúng mười hai giờ trưa hôm sau, ngay khi tôi vừa bước chân ra khỏi giảng đường D5 sau tiết học môn Mạng máy tính. Lần này, người gọi là chính anh Thịnh.
“Nam à? Chú mày lên hệ thống sửa lại ngay cái vụ tài khoản đăng nhập cho anh cái,” giọng anh Thịnh không còn vẻ hồ hởi như hôm trước, thay vào đó là sự lạnh lùng và khó chịu ra mặt. “Sáng nay anh mở máy tính trên gác xép ra xem, thấy con bé Lan kế toán nó nhìn thấy toàn bộ từ giá nhập vải thô tận gốc bên Trung Quốc cho đến tiền công khoán chênh lệch mà anh ăn chia với các tổ thợ may. Làm ăn thế là hỏng hết, lộ hết bí mật kinh doanh của anh rồi! Chú phải phân quyền lại ngay cho anh: con bé Lan chỉ được phép nhìn thấy số lượng sản lượng để bấm máy tính lương, thằng Hùng thủ kho chỉ được thấy số mét vải xuất nhập chứ tuyệt đối không được nhìn thấy giá tiền nhập vào, và chỉ có duy nhất một mình tài khoản của anh mới có quyền truy cập vào bảng tổng kết doanh thu, chi phí với lợi nhuận ròng. À, chưa hết đâu nhé, phân xưởng hai của anh có hai thằng tổ trưởng may, chú phải tạo cho chúng nó hai cái tài khoản con, để chúng nó chỉ được vào tự chấm công cho thợ trong tổ của nó thôi, cấm tiệt không được thò mũi sang xem tổ khác!”
Tôi đứng trơ trọi dưới bóng cây xà cừ cổ thụ trước sảnh tòa nhà D5, gió mùa đông rít từng hồi lạnh thấu xương nhưng mồ hôi sau lưng áo tôi lại túa ra ướt đẫm.
“Anh Thịnh, lúc đầu anh em mình thỏa thuận là xây dựng phần mềm nội bộ chạy trên máy tính kế toán của xưởng. Bây giờ anh yêu cầu phân quyền đa cấp, chia nhỏ vai trò quản trị theo từng bộ phận và ẩn giấu trường giá vốn, cái đó là cả một hệ thống quản trị người dùng phân quyền phức tạp (RBAC) hoàn toàn mới. Khối lượng công việc để xây dựng lại hệ thống bảo mật và cơ chế kiểm soát này tương đương với việc em phải viết thêm một nửa phần mềm nữa rồi anh ạ!”
Đầu dây bên kia im bặt trong vài giây. Tiếng rít thuốc lá qua điếu cày hay đầu lọc vang lên sàn sạt, rồi giọng anh Thịnh chùng xuống, mang theo cái uy lực sắc lạnh của một kẻ nắm đằng chuôi nắm tiền:
“Chú nói thế mà nghe được à? Đã gọi là phần mềm quản lý xưởng may thì đương nhiên chủ phải xem cái của chủ, thợ chỉ xem cái của thợ, cái đấy là lẽ thường tình của việc làm ăn quản lý, anh tưởng sinh viên Bách khoa thông minh như các chú thì phải tự hiểu lấy cái điều căn bản ấy chứ lại còn phải đợi anh cầm tay chỉ việc dạy từng li từng tí à? Bây giờ không phân quyền bảo mật được như thế thì anh dám cho cả cái xưởng này dùng phần mềm của chú thế nào được? Chú cứ lo mà làm cho xong đi, cái việc cỏn con ấy có gì ghê gớm đâu mà chú cứ phải kêu ca làm to chuyện lên thế!”
Việc cỏn con.
Ba chữ ấy giáng thẳng vào tai tôi như một cái tát nảy lửa. Lồng ngực tôi thắt lại trong một sự uất ức đến nghẹn đắng.
Đối với những người làm con buôn, làm chủ xưởng may như anh Thịnh, việc thêm một ô chọn lựa, ẩn một cột tiền hay phân chia ba bốn loại mật khẩu đăng nhập chỉ đơn giản là một cú phẩy tay trên màn hình máy tính. Nhưng đối với một người lập trình, đằng sau cái thứ mà anh ta gọi là “việc cỏn con” ấy là hàng nghìn dòng lệnh phải cày xới lại từ đầu. Tôi phải tái cấu trúc toàn bộ bảng xác thực người dùng, băm mật khẩu, gán quyền truy cập chi tiết đến từng thao tác đọc, ghi, sửa, xóa trên từng cột dữ liệu, và phải viết thêm hàng chục lớp xử lý trung gian để kiểm tra quyền hạn trước khi cho phép bất kỳ truy vấn nào chạm tới cơ sở dữ liệu.
Tôi cặm cụi ngồi gõ phím thâu đêm suốt sáng trong căn phòng trọ Bạch Mai giá buốt, vừa gõ vừa cảm thấy một ngọn lửa căm hờn, phẫn uất đang gặm nhấm tâm can. Tôi căm ghét những yêu cầu vụn vặt, thực dụng và đầy tính chắp vá ấy. Tại sao một hệ thống với cấu trúc dữ liệu thanh thoát, tối ưu tuyệt đối mà tôi đã dồn bao tâm huyết xây dựng lại bị băm nát, vấy bẩn bởi những thứ lắt nhắt như cách thức kiểm soát một cuộn vải rách hay việc giấu giếm vài con số tiền công giữa chủ và thợ? Tôi cay đắng coi những việc đó là thứ hạ đẳng, phi kỹ thuật, là sự phiền toái vô lý xuất phát từ những kẻ dốt nát không có chút hiểu biết nào về vẻ đẹp trang nhã của những dòng mã nguồn chuẩn mực.
Nhưng bi kịch vẫn chưa dừng lại ở đó. Sáng hôm sau, chị Lan kế toán lại gửi vào hòm thư điện tử của tôi một tệp văn bản dài dằng dặc liệt kê danh sách những điểm “bắt buộc phải bổ sung trong kỳ tính lương tới”: - Phải thêm cột tính tiền phụ cấp chuyên cần: nếu công nhân đi làm đủ hai mươi sáu ngày công trong tháng thì tự động cộng thêm ba trăm nghìn đồng, nghỉ một ngày không phép thì cắt toàn bộ. - Phải thêm cột trừ tiền phạt lỗi may hỏng do tổ trưởng ghi nhận, khấu trừ trực tiếp vào đơn giá sản phẩm của từng công đoạn may cụ thể. - Phải thêm chức năng theo dõi các khoản tiền tạm ứng giữa tháng của từng thợ để tự động đối trừ vào kỳ thanh toán lương cuối tháng. - Toàn bộ bảng lương tổng hợp khi xuất ra bắt buộc phải đúng y chang định dạng tệp Excel truyền thống mà xưởng may đã dùng suốt năm năm qua, có đủ các ô kẻ viền đôi, đúng vị trí phông chữ, và phải có sẵn các khung chữ ký của Giám đốc, Kế toán trưởng và Người lập biểu ở góc dưới bên phải.
Tôi ngồi chết trân trên chiếc ghế gỗ ọp ẹp, hai bàn tay buông thõng xuống đùi, nhìn chằm chằm vào màn hình máy tính đang nhấp nháy. Mọi thứ đã hoàn toàn trượt ra khỏi tầm kiểm soát của tôi. Bản thiết kế kỹ thuật ban đầu vốn chỉ gồm bốn chức năng cốt lõi rõ ràng, nay đã phình to ra thành một con quái vật quái thai, dị dạng với hàng chục nhánh rẽ logic rối rắm, mâu thuẫn lẫn nhau. Phần lõi xử lý C++ thanh thoát, kiêu hãnh ban đầu nay bị băm vằn vện bởi vô số những đoạn mã chắp vá vội vã, những câu lệnh điều kiện xử lý ngoại lệ cẩu thả nhằm đối phó cho kịp những đòi hỏi thay đổi thất thường diễn ra từng ngày từng giờ.
Và rồi, điều tồi tệ nhất cuối cùng cũng đổ ập xuống. Chiếc máy chủ ảo giá rẻ tám mươi nghìn đồng bắt đầu quỵ ngã.
Với dung lượng RAM vỏn vẹn 512 megabyte, nó không thể nào gánh nổi những câu truy vấn lồng nhau phức tạp vừa được thêm vào, cộng với việc phải xử lý đồng thời hàng loạt kết nối từ kho vải của anh Hùng, máy tính của chị Lan và chiếc máy tính của anh Thịnh truy cập vào cùng một lúc. Đỉnh điểm là vào một buổi chiều, khi chị Lan bấm nút kết xuất toàn bộ báo cáo lương tổng hợp có tích hợp bảng trừ tiền phạt lỗi và tạm ứng của toàn bộ hai trăm công nhân may, chiếc máy chủ ảo lập tức bị đẩy vào trạng thái quá tải nghiêm trọng. Dung lượng bộ nhớ RAM vọt thẳng lên mức một trăm phần trăm, CPU ảo bị bóp nghẽn hoàn toàn, hệ thống rơi vào trạng thái tê liệt toàn tập, và trình duyệt của chị Lan văng ra một thông báo lỗi kết nối máy chủ lạnh lùng.
Ngay chiều hôm đó, anh Thịnh gọi điện cho tôi, giọng dứt khoát không khoan nhượng. Anh bảo anh không phủ nhận việc tôi đã làm được những phần tính toán kỹ thuật hóc búa, nhưng thực tế là phần mềm vẫn chưa hề hoàn chỉnh theo đúng nhu cầu sử dụng thực tế của xưởng may. Nó liên tục bị treo, báo cáo thì chưa xuất được ra mẫu biểu chuẩn, số liệu kho vẫn chưa khớp với cách làm việc của thằng Hùng. Vì thế, anh tuyên bố sẽ tạm hoãn việc thanh toán số tiền ba triệu rưỡi còn lại cho đến khi nào hệ thống chạy thật sự ổn định và đáp ứng đầy đủ mọi ngóc ngách nghiệp vụ của xưởng.
Ngồi trơ trọi giữa căn phòng trọ Bạch Mai lạnh ngắt, tôi cay đắng nhận ra một sự thật nghiệt ngã: giữa tôi và anh Thịnh chưa bao giờ có chung một định nghĩa về hai chữ “hoàn chỉnh”. Với tôi, hoàn chỉnh là thuật toán chuẩn xác, tối ưu hóa bộ nhớ và tốc độ xử lý tính bằng mili-giây. Còn với anh Thịnh, hoàn chỉnh đơn giản là nó phải phục vụ trơn tru mọi thói quen vụn vặt, mọi toan tính quản lý và cả những sự luộm thuộm thực tế của cái xưởng may đầy bụi bặm kia.
Hoảng loạn và kiệt sức, lại hoàn toàn thiếu kinh nghiệm thực tế về quản trị hệ thống mạng và hạ tầng máy chủ Linux, tôi cắm đầu vào mày mò sửa chữa cấu hình máy chủ từ xa trong đêm tối. Mắt hoa đi vì thiếu ngủ, ngón tay run rẩy gõ những câu lệnh cấu hình tường lửa và định tuyến mạng mà tôi chỉ đọc lướt qua trên mạng. Trong một thoáng bất cẩn tột cùng, tôi gõ sai một dòng lệnh trong tệp cấu hình mạng cốt lõi của máy chủ.
Màn hình đen ngòm của giao diện dòng lệnh lập tức đứng im. Toàn bộ kết nối SSH từ xa bị cắt đứt hoàn toàn. Toàn bộ hệ thống máy chủ sập nguồn, khóa chặt mọi lối vào, đánh sập toàn bộ dịch vụ của xưởng may đang dùng dở dang.
Tôi ngồi chết lặng, mồ hôi lạnh toát ra đầm đìa khắp trán và lưng. Tôi đã hoàn toàn tự tay khóa chặt cánh cửa vào máy chủ, không còn cách nào để kết nối lại từ xa để cứu vãn dữ liệu. Bất lực, tuyệt vọng và nhục nhã, tôi nhìn chiếc điện thoại nokia cũ kỹ đặt trên bàn. Tôi đã từng hùng hồn tuyên bố với Phong rằng tôi tự lo liệu được tất cả, rằng tôi không cần ai can thiệp vào công việc của mình. Nhưng giờ đây, trước đống tro tàn đổ nát của sự kiêu ngạo kỹ thuật, tôi không còn con đường nào khác.
Tôi bấm số gọi cho Phong, lúc ấy đã gần một giờ sáng. Giọng tôi run lên bần bật, lạc đi vì xấu hổ:
“Phong à... mày sang phòng trọ giúp tao một lát được không? Tao... tao làm sập toàn bộ máy chủ rồi.”
Chưa đầy hai mươi phút sau, tiếng bước chân vội vã của Phong vang lên đầu ngõ. Cậu ấy bước vào phòng, áo khoác còn vương hơi lạnh buốt giá của đêm đông Hà Nội. Phong không hề buông một lời trách móc hay mỉa mai nào. Cậu ấy kéo ghế ngồi xuống bên cạnh tôi, cắm chiếc USB chứa các công cụ cứu hộ mạng vào máy tính, mở trình duyệt truy cập thẳng vào trang quản trị cấp thấp của nhà cung cấp dịch vụ VPS để can thiệp thông qua bảng điều khiển ảo VNC.
Phong bình tĩnh mở từng tệp nhật ký lỗi hệ thống ra đọc. Từng dòng chữ trắng chạy dài trên nền màn hình đen kịt. Khi tôi cuống cuồng chỉ tay vào màn hình, lắp bắp cố thanh minh và chỉ cho Phong thấy những đoạn mã báo lỗi, Phong khẽ gạt tay tôi ra, quay sang nhìn thẳng vào mắt tôi bằng một ánh nhìn điềm tĩnh nhưng nghiêm khắc lạ thường:
“Nam, mày bình tĩnh lại đi. Đừng có hoảng loạn rồi chỉ trỏ linh tinh vào mấy cái thông báo lỗi phần ngọn như thế nữa. Bây giờ mày ngồi thẳng lại, kể rõ ràng từ đầu đến cuối cho tao nghe: Mày đã cấu hình cái gì? Nghiệp vụ của xưởng may thực tế họ cần những luồng dữ liệu nào? Tại sao cấu trúc dữ liệu lại phình to ra thế này và tại sao máy chủ lại hết sạch RAM?”
Ngồi trước sự điềm đạm và phương pháp làm việc có trật tự của Phong, sự ngạo mạn cố hữu trong tôi hoàn toàn sụp đổ. Tôi nuốt khan, bắt đầu kể lại toàn bộ câu chuyện một cách thành thật nhất từ trước đến nay: từ những đòi hỏi phân quyền của anh Thịnh, chuyện cuộn vải lẻ của anh Hùng, các công thức lương phức tạp của chị Lan, cho đến những đoạn mã C++ chắp vá vội vã và sai lầm chết người khi cấu hình nhầm bảng định tuyến lúc nửa đêm.
Đêm hôm ấy, một sự phân chia công việc tự nhiên và nhịp nhàng diễn ra giữa hai chúng tôi. Phong ngồi xử lý toàn bộ phần hạ tầng: cậu ấy khôi phục lại tệp định tuyến mạng, cấu hình lại dịch vụ tường lửa, tạo một phân vùng nhớ ảo (swap space) một gigabyte trên ổ cứng để cứu nguy cho dung lượng RAM 512 megabyte còi cọc, thiết lập lại các giới hạn tiến trình và viết sẵn một kịch bản dòng lệnh tự động sao lưu toàn bộ dữ liệu vào bốn giờ sáng mỗi ngày. Còn tôi, dưới sự hướng dẫn phương pháp của Phong, ngồi rà soát lại toàn bộ mã nguồn ứng dụng, dọn dẹp các vùng nhớ bị rò rỉ (memory leak), tối ưu lại các câu lệnh truy vấn cơ sở dữ liệu để chúng không còn ngốn sạch tài nguyên khi xuất báo cáo lương.
Chúng tôi làm việc miệt mài bên nhau cho đến khi ánh bình minh mùa đông xám đục lọt qua khe cửa gỗ mục. Hệ thống sống lại, vận hành êm ả và ổn định trở lại.
Trễ hẹn tròn một tuần so với cam kết ban đầu, tôi mang bản phần mềm đã được hoàn thiện đầy đủ mọi tính năng, chạy ổn định trên hạ tầng mạng sang xưởng may Trương Định để tiến hành bàn giao nghiệm thu dứt điểm. Mọi yêu cầu của anh Hùng về kho vải, của anh Thịnh về phân quyền bảo mật, và của chị Lan về biểu mẫu lương Excel đều đã được đáp ứng trọn vẹn, không còn một lỗi nhỏ.
Nhưng trong buổi làm việc cuối cùng trên căn gác xép ngột ngạt mùi vải, anh Thịnh nhìn tôi với vẻ mặt lạnh tanh của một tay thương nhân từng trải. Anh vin vào cớ tôi đã bàn giao trễ hạn một tuần làm ảnh hưởng đến tiến độ tính lương của công nhân, vin vào cớ hệ thống từng bị sập mấy ngày khiến xưởng bị gián đoạn công việc, để ép giá. Anh tuyên bố dứt khoát trừ thẳng một triệu đồng vào số tiền công còn lại.
Tôi đứng chôn chân giữa căn phòng, nhìn xấp tiền hai triệu rưỡi mà anh Thịnh đặt cộc lốc lên mặt bàn thay vì ba triệu rưỡi như đã hứa. Cơn giận và sự nhục nhã bốc lên ngùn ngụt trong lồng ngực, hai bàn tay tôi siết chặt lại đến mức móng tay bấm sâu vào da thịt đau điếng. Tôi muốn gầm lên, muốn tranh cãi sòng phẳng về bao nhiêu đêm thức trắng, về việc khối lượng công việc thực tế đã tăng gấp đôi so với thỏa thuận miệng ban đầu. Nhưng nhìn vào ánh mắt sắc lạnh, dửng dưng của anh Thịnh, tôi hiểu rằng mọi lý lẽ kỹ thuật lúc này đều hoàn toàn vô nghĩa. Tôi không có hợp đồng pháp lý đóng dấu đỏ, tôi không có vị thế, tôi chỉ là một thằng sinh viên nghèo làm thuê chui rúc.
Để chấm dứt vĩnh viễn chuỗi ngày tranh cãi dai dẳng, mệt mỏi và cay đắng này, tôi cắn răng, cúi đầu cầm lấy hai triệu rưỡi nhét vào túi quần rồi quay lưng bước đi, không nói thêm một lời nào.
Cầm sản phẩm thương mại thực sự đầu đời trong tay, số tiền công còm cõi còn lại sau khi tôi mang sang trả nốt cho anh Tuấn ở quán Mùa Gió chẳng còn lại là bao. Nó bốc hơi nhanh chóng vào tiền thuê trọ, tiền trả nợ quán cơm và tiền thuốc men chữa cái dạ dày đang viêm loét. Nó hoàn toàn không mang lại cho tôi sự ổn định tài chính, sự tự do hay niềm kiêu hãnh rực rỡ như tôi đã từng ngây thơ vẽ ra trong những đêm ngồi gõ phím bên chiếc máy tính Pentium III.
Ngày hôm sau, tôi nén lòng gửi toàn bộ gói mã nguồn và tài liệu kiến trúc của phần mềm xưởng may cho Hà — người bạn cùng lớp với tư duy học thuật sắc sảo và nghiêm cẩn mà tôi luôn thầm nể phục — để xin cậu ấy một lời nhận xét kỹ thuật khách quan nhất.
Một ngày sau, trong hòm thư điện tử của tôi xuất hiện một bức thư phản hồi rất dài của Hà. Cậu ấy phân tích tỉ mỉ từng tầng kiến trúc, không tiếc lời khen ngợi sự tinh tế trong cách tôi viết thuật toán tối ưu bộ nhớ đệm và khả năng vắt kiệt hiệu năng phần cứng bằng C++. Nhưng ở cuối bức thư, sau những phân tích kỹ thuật lạnh lùng, Hà buông lại một câu hỏi ngắn ngủi, nhức nhối như một vết dao cứa thẳng vào tâm can tôi:
*“Nam này, thuật toán của cậu rất giỏi, nhưng tại sao cậu luôn làm ra những thứ khó dùng đến mức tàn nhẫn, rồi sau đó lại bắt tất cả những người xung quanh phải chịu đựng sự ngang ngạnh ấy cùng cậu?”*