Một cuộc thảo luận gần đây về các công cụ phát triển từ thập niên 1990 đã khơi dậy cuộc tranh luận mới về tình trạng hiện tại của việc phát triển ứng dụng Mac và iOS. Cuộc trò chuyện tập trung xung quanh UserLand Frontier, một hệ thống scripting từ thập niên 90 cho phép các nhà phát triển xây dựng và chỉnh sửa ứng dụng mà không cần chu trình build-and-run liên tục đang gây khó khăn cho việc phát triển hiện đại.
Mô hình Phát triển UserLand Frontier (thập niên 1990)
- Kiến trúc: Nhân C + ngôn ngữ kịch bản cho logic ứng dụng
- Tốc độ Lặp lại: Thay đổi mã nguồn tức thì mà không cần khởi động lại ứng dụng
- Lưu trữ Dữ liệu: Cơ sở dữ liệu bảng băm với khả năng truy cập ký hiệu chấm
- Chỉnh sửa Giao diện: Chỉnh sửa menu và thanh công cụ động
- Cập nhật: Cập nhật gia tăng qua web mà không cần khởi động lại ứng dụng
Nền tảng kiến trúc còn thiếu
Một trong những mối quan ngại cấp bách nhất được các nhà phát triển nêu ra là việc thiếu hướng dẫn kiến trúc tích hợp sẵn cho các dự án mới. Các nhà phát triển iOS và macOS có kinh nghiệm thấy mình phải dành thời gian đáng kể để thiết lập nền tảng dự án phù hợp trước khi họ có thể bắt đầu làm việc với các tính năng. Chi phí kiến trúc này tạo ra ma sát không cần thiết ngay từ đầu mỗi dự án.
Cộng đồng đề xuất rằng các nền tảng phát triển nên cung cấp các template kiến trúc vững chắc theo mặc định, mà sau đó các nhà phát triển có thể tùy chỉnh nếu cần. Hiện tại, các dự án mới bắt đầu với cấu trúc tối thiểu, buộc các nhà phát triển phải tái tạo lại các pattern cơ bản một cách lặp đi lặp lại.
Sức hấp dẫn của kiến trúc Engine Plus Scripting
Cuộc thảo luận đã làm nổi bật sự quan tâm ngày càng tăng đối với các mô hình phát triển kết hợp engine cốt lõi ổn định với các ngôn ngữ scripting được thông dịch. Cách tiếp cận này mang lại nhiều lợi thế so với quy trình compile-and-run truyền thống, bao gồm phản hồi tức thì và khả năng chỉnh sửa hành vi ứng dụng mà không cần rebuild hoàn toàn.
Một số nhà phát triển đã chỉ ra các công nghệ như Tcl/Tk làm ví dụ cho kiến trúc này, mặc dù họ cũng lưu ý về những hạn chế trong việc tích hợp nền tảng gốc. Thách thức nằm ở việc tạo ra các hệ thống cung cấp tính linh hoạt của scripting trong khi vẫn duy trì giao diện và cảm giác gốc trên các nền tảng khác nhau.
Các giải pháp thay thế hiện đại và những hạn chế của chúng
Trong khi các công cụ hiện tại như Swift Playgrounds và SwiftUI Previews cố gắng giải quyết một số vấn đề về tốc độ lặp lại, các nhà phát triển thấy chúng không đủ cho việc phát triển ứng dụng thực tế. Cuộc thảo luận cộng đồng cho thấy sự thất vọng với những giải pháp từng phần này không mang lại trải nghiệm phát triển liền mạch có thể có được với các công nghệ cũ hơn.
Với tư cách là người đã làm rất nhiều công việc phát triển VB5-6 ngày xưa, điều tương tự cũng áp dụng cho tất cả các nền tảng.
Một số nhà phát triển đã chuyển sang các giải pháp đa nền tảng như Electron cho việc phát triển JavaScript, cung cấp chu trình lặp nhanh hơn nhưng đi kèm với những đánh đổi riêng về hiệu suất và tích hợp nền tảng.
Thách thức phát triển hiện đại
- Chu kỳ Build: Yêu cầu lặp đi lặp lại liên tục quá trình build và chạy
- Thiết lập kiến trúc: Công việc thủ công mở rộng để xây dựng nền tảng dự án
- Độ phức tạp ngôn ngữ: Độ phức tạp ngày càng tăng trong Swift và các công cụ phát triển
- Công cụ xem trước: Hiệu quả hạn chế của Swift Playgrounds và SwiftUI Previews
- Tích hợp nền tảng: Khó khăn trong việc đạt được giao diện và cảm giác native với các công cụ đa nền tảng
Con đường phía trước
Cuộc trò chuyện cho thấy rằng các nền tảng phát triển trong tương lai có thể cần chấp nhận các cách tiếp cận lai ghép kết hợp lợi ích hiệu suất của mã được biên dịch với tính linh hoạt của các ngôn ngữ được thông dịch. Điều này có thể bao gồm các ngôn ngữ chuyên biệt được thiết kế đặc biệt cho việc phát triển ứng dụng, thay vì các ngôn ngữ lập trình đa mục đích được điều chỉnh cho nhiệm vụ này.
Cuộc thảo luận cũng đề cập đến thách thức rộng lớn hơn mà các nhà cung cấp nền tảng phải đối mặt: thu hút các nhà phát triển mới có thể chọn môi trường phát triển dễ dàng hơn thay vì các toolchain gốc phức tạp hơn nhưng có khả năng mạnh mẽ hơn. Khi độ phức tạp của việc phát triển tiếp tục tăng lên, áp lực cho các công cụ trải nghiệm nhà phát triển tốt hơn có thể sẽ gia tăng.
Tham khảo: Writing Mac and iOS Apps Shouldn't Be So Difficult