Kỷ niệm 14 năm ra mắt dự án mã nguồn mở của ngôn ngữ Go
- Một trong các đồng sáng lập ngôn ngữ Go đã có bài thuyết trình cuối cùng tại hội nghị GopherConAU tổ chức ở Sydney vào ngày 10 tháng 11 năm 2023.
- Bài nói chuyện kỷ niệm 14 năm kể từ khi Go được phát hành như một dự án mã nguồn mở, đồng thời bàn về những thành công đạt được và những điểm cần nhìn lại trong suốt chặng đường đó.
- Diễn giả nhấn mạnh rằng đây là quan điểm cá nhân, không đại diện cho nhóm Go hay Google, và bày tỏ lời cảm ơn tới cộng đồng đã góp phần vào thành công của Go.
Các yếu tố thành công và điểm cần cải thiện của ngôn ngữ Go
- Mục tiêu ban đầu của Go không phải là tạo ra một ngôn ngữ lập trình mới, mà là cải thiện cách người ta viết phần mềm.
- Go hướng tới việc giải quyết sự phức tạp trong xây dựng phần mềm máy chủ hiện đại như quản lý phụ thuộc, cộng tác với các nhóm lớn, dễ bảo trì, kiểm thử hiệu quả, cũng như tận dụng hiệu quả CPU đa lõi và mạng.
- Go không chỉ đơn thuần là một ngôn ngữ lập trình, mà là một dự án giúp việc xây dựng phần mềm thực tế trở nên dễ dàng và năng suất hơn.
Linh vật của Go, Gopher
- Gopher, linh vật của ngôn ngữ Go, đã đóng vai trò quan trọng trong thành công của Go.
- Gopher là biểu tượng của các lập trình viên Go và là lá cờ của cộng đồng, điều thiết yếu cho sự phát triển của dự án.
- Việc công bố thiết kế Gopher theo giấy phép Creative Commons Attribution đã giúp thúc đẩy tinh thần cộng đồng, nhưng cũng gây ra những khó khăn do các vấn đề bản quyền.
Các yếu tố thành công về mặt kỹ thuật của ngôn ngữ Go
- Việc viết đặc tả chính thức, sự tồn tại của nhiều implementation, tính di động, bảo đảm khả năng tương thích, thư viện phong phú, sự thuận tiện trong phát triển công cụ và công cụ định dạng mã tự động
gofmt đều đã góp phần vào thành công của Go.
gofmt đã ảnh hưởng tới toàn bộ cộng đồng lập trình, tạo tiền đề để phần lớn các ngôn ngữ đều có formatter tiêu chuẩn.
Đồng thời (Concurrency) và interface
- Go lấy concurrency làm thành phần cốt lõi của ngôn ngữ, góp phần đơn giản hóa cấu trúc phần mềm máy chủ.
- Interface là một ý tưởng mang tính đặc trưng của Go, là câu trả lời của Go cho thiết kế hướng đối tượng, đồng thời đóng vai trò quan trọng trong thư viện chuẩn và quản lý phụ thuộc.
Generics và compiler
- Sự hiện diện của interface là một trong những nguyên nhân khiến việc bổ sung generics vào Go mất nhiều thời gian.
- Việc compiler Go ban đầu được viết bằng C từng là chủ đề gây tranh cãi trong cộng đồng ngôn ngữ lập trình, nhưng lại là lựa chọn phù hợp cho sự phát triển của Go.
Quản lý dự án và quản lý package
- Là một dự án mã nguồn mở, Go trong giai đoạn đầu được phát triển kín, nhưng sau khi chuyển sang công khai thì đóng góp từ cộng đồng đã tăng bùng nổ.
- Quá trình phát triển quản lý package không diễn ra suôn sẻ, và khi đó còn thiếu sự hiểu biết về cách hợp tác với cộng đồng.
Tài liệu hóa và ví dụ
- Tài liệu của Go trong giai đoạn đầu chưa đáp ứng được kỳ vọng của cộng đồng, nhưng sau đó đã được cải thiện, chẳng hạn bằng việc cung cấp các ví dụ có thể chạy trực tiếp trên web.
Ý kiến của GN⁺
- Thành công của Go đến từ các yếu tố như thư viện chuẩn mạnh mẽ, hỗ trợ concurrency, thiết kế dựa trên interface, quản lý package rõ ràng, công cụ build và testing nhanh, định dạng mã nhất quán, ưu tiên tính dễ đọc và bảo đảm khả năng tương thích.
- Go không chỉ đổi mới ở cấp độ tính năng của một ngôn ngữ lập trình, mà còn mang lại đổi mới trong cách phát triển phần mềm, và điều đó có được nhờ sự đa dạng và hỗ trợ của cộng đồng.
- Quá trình phát triển Go và những suy ngẫm về nó mang lại các bài học quan trọng cho việc vận hành các dự án mã nguồn mở.
1 bình luận
Ý kiến Hacker News
Biết ơn những nhân vật chủ chốt đã dành thời gian cho việc tổng kết dự án
Tình cảm dành cho ngôn ngữ Go và cộng đồng của nó
Chia sẻ trải nghiệm mang tính phê phán về hệ thống quản lý package của Go
Góc nhìn phê phán về ngôn ngữ Go
Điểm thú vị về quyết định dùng trình biên dịch C của Ken Thompson
Nhấn mạnh việc triển khai thành công
gofmtgofmthoặc tạo ra các công cụ tương tựVới tư cách là người tổ chức GopherConAU, chia sẻ toàn bộ playlist
Ưu điểm của việc dùng Go để dễ dàng xây dựng monorepo và build ứng dụng nhanh chóng
Thiếu đề cập đến lựa chọn về khả năng tương tác của Go và C FFI
Ý kiến về việc viết trình biên dịch bằng chính ngôn ngữ đó