Đừng tin vào cái đồng hồ của ông: Tại sao xử lý thời gian trong code là một 'cú lừa' cực nặng?
Nghĩ xử lý thời gian trong code là dễ? Đọc ngay bài này để thấy cảnh Senior 'sang chấn tâm lý' vì múi giờ và những cú vả đau đớn từ thực tế.

Ông nào mới vào nghề mà bảo: "Xử lý ngày tháng có gì đâu, cứ lấy system time cộng trừ là xong" thì tôi khuyên thật: Đi thắp nhang cầu khấn cho server nó không sập đi là vừa. Thời gian trong lập trình nó không hề màu hồng như cái cách ông nhìn đồng hồ đeo tay đâu, nó là một mớ hỗn độn, ảo ma và sẵn sàng "vả" vỡ mặt bất cứ ai dám coi thường nó.
Toàn cảnh những cú lừa "đi vào lòng đất" mang tên Thời gian
Mới đây trên Reddit, anh em dev lại đào lại bài viết kinh điển "Falsehoods Programmers Believe About Time" (Những điều dối trá lập trình viên tin về thời gian). Đây như một bản án tử cho những ai còn giữ tư duy ngây thơ. Tóm tắt nhanh cho anh em mấy cái "lầm tưởng" phổ biến nhất khiến bao hệ thống đi tong:
- Một ngày luôn có 24 giờ: Sai bét! Khi có Daylight Saving Time (Giờ mùa hè - DST), một ngày có thể có 23 hoặc 25 giờ. Code mà cứ hardcode 86400 giây/ngày là ăn hành ngay.
- Đồng hồ các máy luôn đồng bộ: Quên đi! Clock drift là chuyện cơm bữa. Server A và Server B lệch nhau vài giây là đủ để logic hệ thống phân tán của các ông thành một đống rác.
- Timestamp là duy nhất: Haha, mơ đi diễm. Cứ thử có nhu cầu ghi log hàng triệu bản ghi mỗi giây xem, ông sẽ thấy cái gọi là "trùng timestamp" nó thốn thế nào.
- Múi giờ không bao giờ đổi: Chính phủ các nước hứng lên là đổi múi giờ, đổi quy tắc DST. Code các ông mà không cập nhật library thường xuyên thì xác định là "quay xe" không kịp.
- Format 05/07/11 là dễ hiểu: Với dân Mỹ nó là tháng 5 ngày 7, với dân Việt nó là ngày 5 tháng 7, còn với dân dev đang quáng gà nó có thể là năm 2011. Một format "hủy diệt" mọi sự logic.
Khi các Senior cũng phải "sang chấn tâm lý"
Dân tình trên Reddit phen này được dịp xả stress, kể lại những kỷ niệm đau thương mà không thư viện hotfix nào chữa nổi.
Một ông Senior (More-Station-6365) thú nhận: "Cái bài báo này đã làm nhục không biết bao nhiêu kỹ sư lão làng hơn bất kỳ buổi code review nào". Cay đắng nhất là vụ Daylight Saving, nó thường xuyên âm thầm phá nát các task schedule vào lúc 2 giờ sáng Chủ Nhật, khi mà anh em đang say giấc nồng.
Đỉnh điểm là câu chuyện của một ông khác kể về sếp mình. Sếp viết code xử lý thời gian vào tháng 12, mặc kệ lời cảnh báo về DST vào tháng 3 với câu nói xanh rờn: "Đến lúc đó là code này bỏ rồi". Kết quả? Sáng thứ Hai tháng 3 năm sau, build báo đỏ lòm, server toang hoác và sếp chỉ biết thốt lên: "Tôi biết rồi, tôi biết rồi!". Đúng là không cái dại nào giống cái dại nào.
Thậm chí, có người còn dẫn lại lời của Tom Scott (Computerphile) - một huyền thoại trong việc giải thích độ phức tạp của timezone: "Khi đụng đến múi giờ, tốt nhất là cất cái tôi của ông đi. Đừng tự viết gì cả. Hãy tìm đến những người đi trước, những người đã xây dựng nên cái đống code nhì nhằng (spaghetti code) đó, cảm ơn họ vì đã Open Source nó, và dùng luôn cái thư viện đó đi. Đừng bao giờ nhìn vào bên trong làm gì, vì trong đó chỉ có sự điên rồ mà thôi!"
Bài học xương máu: Đừng cố làm siêu nhân
Từ chuyện cái đồng hồ, tôi rút ra được một triết lý thực dụng cho anh em: Cái gì khó quá, hoặc không phải chuyên môn của mình thì đừng có cố đấm ăn xôi.
Là một dev từng trải qua cảnh lương bèo bọt mà phải gánh những cái bug "trên trời rơi xuống" như timezone, tôi hiểu cảm giác đó. Với các doanh nghiệp SME cũng vậy, các ông không cần phải bỏ hàng đống tiền để thuê một đội ngũ ngồi fix những thứ vận hành căn bản như quản lý công việc, chấm công (vốn dĩ cũng dính chặt lấy cái bài toán thời gian chết tiệt kia).
Thay vì ngồi hì hục code lại một hệ thống quản lý từ đầu rồi lại vấp phải những cái bug sơ đẳng về múi giờ hay đồng bộ dữ liệu, sao không dùng luôn những nền tảng như WorkCloud?
Bọn tôi ở WorkCloud đã lo hết mấy cái chuyện "vận hành đau đầu" đó rồi. Từ chấm công, quản lý dự án cho đến tự động hóa quy trình, mọi thứ được tối ưu để các ông chỉ việc dùng, không cần quan tâm xem server có đang bị clock drift hay không. Chi phí thì rẻ như bát phở, cực kỳ hợp cho SME muốn "go digital" mà không muốn bị sập hầm công nghệ.
Chốt hạ: Thời gian là thứ không thể lấy lại, và bug thời gian là thứ không ai muốn gặp lại. Đừng cố làm siêu nhân, hãy làm người dùng thông thái.
Nguồn: Reddit