Tôi không mong đợi điều này, nhưng một trong những phần bị bỏ qua nhiều nhất của Sign không phải là về dữ liệu mà là về cách dữ liệu đó có thể linh hoạt tại thời điểm nó được tạo ra.
Bởi vì hầu hết các hệ thống buộc bạn vào một cấu trúc quá sớm.
Bạn xác định những trường nào tồn tại, ý nghĩa của chúng và cách chúng nên được sử dụng, và đó là tất cả. Nếu có điều gì thay đổi sau đó, bạn sẽ phải phá vỡ tính tương thích hoặc bắt đầu xây dựng những giải pháp tạm thời không được thuận tiện. Theo thời gian, các hệ thống trở nên cứng nhắc. Khó thích nghi. Còn khó mở rộng hơn.
Sign tiếp cận điều này theo cách khác bằng cách cho phép các nhà phát triển định nghĩa các trường và điều kiện động tại thời điểm tạo.
Vì vậy, thay vì buộc mỗi mẩu dữ liệu vào một định dạng cố định, bạn có thể định hình nó dựa trên ngữ cảnh. Cùng một loại chứng minh có thể mang theo thông tin hơi khác nhau tùy thuộc vào tình huống, mà không làm hỏng cách mà nó được hiểu.
Điều đó có thể nghe có vẻ tinh tế, nhưng nó giải quyết một vấn đề thực sự.
Bởi vì dữ liệu thế giới thực không nhất quán.
Yêu cầu thay đổi. Các trường hợp sử dụng tiến hóa. Các điều kiện mới xuất hiện mà bạn không lên kế hoạch từ đầu. Và khi mô hình dữ liệu của bạn quá nghiêm ngặt, mọi thay đổi trở thành một vấn đề di cư.
Ở đây, áp lực đó giảm xuống.
Bạn có thể giới thiệu các trường mới khi cần, điều chỉnh những gì được bao gồm, hoặc điều chỉnh cấu trúc để phù hợp với một trường hợp sử dụng cụ thể—tất cả mà không làm mất hiệu lực những gì đã tồn tại.
Điều tôi thấy thú vị là cách này tương tác với khả năng sử dụng lâu dài.
Những chứng minh cũ không đột nhiên trở nên lỗi thời chỉ vì cấu trúc tiến hóa. Chúng vẫn tuân theo các quy tắc mà tại thời điểm chúng được tạo ra là hợp lệ. Trong khi đó, những cái mới có thể mang theo thông tin bổ sung hoặc định dạng cập nhật.
Vì vậy, thay vì một sơ đồ cứng nhắc, bạn có một cái gì đó gần giống với một định dạng sống.
Điều đó gần giống hơn với cách mà phần mềm tiến hóa trong thực tế.
Một chi tiết khác nổi bật với tôi là cách này ảnh hưởng đến việc tích hợp.
Khi các hệ thống quá cứng nhắc, việc kết nối chúng trở nên đau đớn. Mỗi sự không khớp trong cấu trúc cần được xử lý thủ công. Bạn kết thúc với việc viết các bộ chuyển đổi, bộ điều hợp và logic cho các trường hợp biên chỉ để làm cho mọi thứ tương thích.
Với một mô hình dữ liệu linh hoạt hơn, sự cản trở đó giảm đi.
Các ứng dụng có thể tập trung vào những trường mà họ quan tâm và bỏ qua phần còn lại. Họ không cần phải hiểu hoàn toàn mọi biến thể—chỉ những phần quan trọng đối với họ.
Điều đó làm cho việc tích hợp trở nên nhẹ nhàng hơn.
Và nó cũng làm cho các hệ thống trở nên linh hoạt hơn với sự thay đổi.
Bởi vì nếu một trường mới xuất hiện vào ngày mai, nó không làm hỏng mọi thứ. Nó chỉ trở thành ngữ cảnh bổ sung cho những ai cần nó.
Điều tôi cũng bắt đầu nhận thấy là cách này thay đổi tư duy của lập trình viên.
Thay vì cố gắng dự đoán mọi yêu cầu trong tương lai ngay từ đầu, bạn thiết kế để thích ứng. Bạn chấp nhận rằng mô hình dữ liệu của bạn sẽ phát triển—và bạn xây dựng khả năng xử lý sự tiến hóa đó một cách dễ dàng.
Đó là một cách tiếp cận hoàn toàn khác so với các hệ thống truyền thống, nơi mọi thứ cần được định nghĩa hoàn hảo từ ngày đầu.
Và thực sự, điều đó hiếm khi hiệu quả.
Điều này cho phép một cách xây dựng dần dần hơn.
Bạn bắt đầu với những gì bạn cần ngay bây giờ. Sau đó, bạn mở rộng khi các yêu cầu mới xuất hiện. Mà không cần viết lại mọi thứ. Mà không làm hỏng dữ liệu hiện có.
Điều đó không chỉ thuận tiện—mà còn thực tiễn.
Đặc biệt trong các môi trường mà quy tắc, chính sách và trường hợp sử dụng thay đổi thường xuyên.
Và khi tôi lùi lại, cảm giác này giống như một trong những cải tiến yên tĩnh khác.
Không phô trương. Không rõ ràng ngay từ cái nhìn đầu tiên.
Nhưng nó giải quyết một ràng buộc thực sự làm chậm rất nhiều hệ thống.
Bởi vì vấn đề không chỉ là lưu trữ dữ liệu.
Điều đó đang xử lý thực tế rằng dữ liệu—và cách chúng ta sử dụng nó—không bao giờ giữ nguyên.
Và Sign dường như được xây dựng với giả định đó ngay từ đầu.