3 điểm bởi GN⁺ 2024-01-05 | 1 bình luận | Chia sẻ qua WhatsApp

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

 
GN⁺ 2024-01-05
Ý 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

    • Giới hạn ngôn ngữ tập trung vào lập trình hệ thống
    • Xác định rõ ràng ngôn ngữ và các nguyên tắc để tránh mơ hồ và lãng phí thiết kế do mục tiêu khác nhau
    • Ưu tiên chất lượng để giải quyết vấn đề trước khi phát hành sẽ tiết kiệm chi phí hơn cho mọi bên liên quan
    • Duy trì sự cân bằng giữa chia sẻ với cộng đồng và quản lý chặt chẽ ngôn ngữ cùng các bản phát hành
    • Việc Google không can thiệp đã góp phần vào thành công của Go, đồng thời đặt câu hỏi liệu điều này có thể xảy ra ở các dự án khác hay không
    • Go là công nghệ cốt lõi giúp phần mềm phía máy chủ chuyển từ Java sang container native, và đã hỗ trợ phần lớn hạ tầng ứng dụng web trong 10 năm qua
  • Tình cảm dành cho ngôn ngữ Go và cộng đồng của nó

    • Năm 2012, khi là một lập trình viên Python, đã tiếp xúc với Go và ngạc nhiên trước sự dễ dàng của thao tác bit
    • Sau 10 năm vẫn ngạc nhiên vì phần lớn các tính năng của Go vẫn hoạt động tốt
    • Biết ơn những gì Rob, Ian, Russ và những người khác đã làm cho Go, cũng như sự thẳng thắn của họ về những "đoạn đường gồ ghề" với cộng đồng
    • Dù cũng có góc nhìn phê phán về các vấn đề quản lý package, vẫn đánh giá rằng hiện nay đã đạt được một giải pháp tốt
  • Chia sẻ trải nghiệm mang tính phê phán về hệ thống quản lý package của Go

    • Cách đây 10 năm trên go-nuts, khi đưa ra ý kiến phê phán về cách Go xử lý quản lý package, đã có trải nghiệm bị Rob Pike phớt lờ
  • Góc nhìn phê phán về ngôn ngữ Go

    • Thiếu sự thừa nhận đối với những vấn đề sâu xa của ngôn ngữ
    • Không khuyến nghị Go vì hệ thống kiểu, xử lý lỗi, tính đồng thời không an toàn và cú pháp quá đơn giản
    • Dùng Rust làm ngôn ngữ chính và tìm thấy ở Rust một tầm nhìn mà Go không có
  • Điểm thú vị về quyết định dùng trình biên dịch C của Ken Thompson

    • Đề cập đến sự không hài lòng với quyết định dùng trình biên dịch C của Ken Thompson thay vì LLVM, cùng việc các phiên bản đầu tạo ra mã chưa được tối ưu
    • Nhờ quyết định này mà có thể triển khai segmented stack nhanh chóng
  • Nhấn mạnh việc triển khai thành công gofmt

    • Mang lại giá trị lớn khi loại bỏ hoàn toàn tranh cãi về định dạng mã ngay từ giai đoạn đầu của dự án
    • Có thể thấy nhiều ngôn ngữ mới đã bắt chước gofmt hoặ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

    • Không hiểu vì sao playlist lại không thể được công khai
  • Ư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

    • Dễ tạo công cụ CLI bằng Go và dùng chúng như một phần của pipeline Unix
    • Go hữu ích cho các tác vụ như phân tích log dung lượng lớn
  • Thiếu đề cập đến lựa chọn về khả năng tương tác của Go và C FFI

    • Câu trả lời "viết lại bằng Go" đã loại trừ các lựa chọn khác
  • Ý kiến về việc viết trình biên dịch bằng chính ngôn ngữ đó

    • Đặt câu hỏi liệu một ngôn ngữ không thể tự biên dịch có phải là không phù hợp để viết trình biên dịch hay không
    • Không hiểu hàm ý rằng ngôn ngữ phù hợp cho trình biên dịch lại sẽ không phù hợp cho các ứng dụng khác, và muốn có thêm ngữ cảnh