2 điểm bởi GN⁺ 2024-08-13 | 1 bình luận | Chia sẻ qua WhatsApp

Go là chiếc búa của tôi, mọi thứ đều là đinh

Giới thiệu

  • Markus là một lập trình viên làm việc độc lập và là người tạo ra các sản phẩm số
  • Anh ấy làm việc một mình, không có đội nhóm, và theo đuổi cách làm việc linh hoạt
  • Tránh các tech stack phức tạp và tập trung vào việc mang lại giá trị cho khách hàng

Lý do chọn Go

Lý do 1: Go có thể làm gần như mọi thứ

  • Go đơn giản, dễ đọc và nhất quán
  • Có thể dùng cho nhiều mục đích như CLI, hạ tầng cloud, HTTP server, tác vụ mạng, v.v.
  • Ngay cả game Nintendo Switch, ứng dụng GUI, bộ tổng hợp chuỗi ký tự trong terminal cũng có thể được phát triển bằng Go

Lý do 2: Giảm chuyển đổi ngữ cảnh

  • Khi dùng nhiều ngôn ngữ lập trình, việc chuyển đổi cú pháp sẽ gây khó khăn
  • Nếu chỉ dùng một ngôn ngữ, có thể tránh được vấn đề này
  • Dễ quản lý nhiều yếu tố như ngôn ngữ, compiler, IDE, toolchain, cộng đồng, v.v.

Lý do 3: Kiến thức chuyên sâu

  • Tập trung vào một ngôn ngữ giúp tích lũy kiến thức chuyên sâu hơn
  • Tập trung vào một ngôn ngữ sẽ hiệu quả hơn so với xử lý nhiều ngôn ngữ
  • Giúp giảm bớt độ phức tạp của phát triển phần mềm

Kết luận

  • Markus đang thực hiện thành công nhiều dự án khác nhau bằng Go
  • Anh ấy nâng cao năng suất nhờ kiến thức chuyên sâu về Go
  • Có thể giải quyết nhiều thách thức khác nhau thông qua Go

Tóm tắt của GN⁺

  • Markus, với tư cách là một lập trình viên làm việc độc lập, đã chọn Go để giảm độ phức tạp và nâng cao năng suất
  • Go có thể được dùng cho nhiều mục đích khác nhau, đồng thời đơn giản và nhất quán nên dễ quản lý
  • Tập trung vào một ngôn ngữ giúp tích lũy kiến thức chuyên sâu và hiệu quả hơn so với xử lý nhiều ngôn ngữ
  • Có thể thực hiện thành công nhiều dự án khác nhau thông qua Go, và điều này cũng có thể hữu ích với các lập trình viên khác

1 bình luận

 
GN⁺ 2024-08-13
Ý kiến Hacker News
  • Từng làm việc tại một công ty xử lý dữ liệu tài chính bằng Go

    • Cảm thấy khó chịu khi đồng nghiệp dùng Go cho các tác vụ một lần như tổng hợp file CSV hoặc cập nhật cơ sở dữ liệu
    • Khó có thể tin tưởng khi thấy đồng nghiệp tự triển khai các thuật toán cơ bản thay vì dùng Pandas
    • Nghĩ đó là sự lãng phí thời gian của công ty và có vẻ là vấn đề sĩ diện nhằm chứng minh rằng chỉ Go là đủ
  • Nhiều người đánh giá thấp chi phí để thực sự học một ngôn ngữ cho ra hồn

    • Mất 2-4 năm để đạt đến mức có thể nói rằng mình "biết" ngôn ngữ đó
    • Mất 8-10 năm để hiểu ngôn ngữ, compiler, runtime, thư viện chuẩn và cách làm mang tính thành ngữ
    • Trong khoảng thời gian đó, có thể phát triển cách sử dụng ngôn ngữ và huấn luyện người mới nhanh hơn
  • Cho rằng Go phù hợp với gần như mọi công việc

    • Năng suất rất cao khi dùng Go
    • Nếu dự án vượt quá 100 dòng thì tốt hơn Python
    • Ưu điểm của Go:
      • Ngôn ngữ rất đơn giản
      • Thư viện cốt lõi được thiết kế tốt
      • Chỉ với toolchain và thư viện cốt lõi là có thể xử lý phần lớn công việc
  • Cho rằng Go không phù hợp với dự án cá nhân

    • Mã nguồn dài dòng và ngay cả việc đơn giản cũng phải viết nhiều code
    • Thiếu enum đúng nghĩa, union type, null safety, v.v.
    • Vì những lý do đó nên không thấy vui khi dùng cho dự án cá nhân
  • Ưa thích Typescript và Rust

    • Deno và Typescript là bộ công cụ đa dụng hơn Go
    • Typescript an toàn hơn và ergonomic hơn nhưng hơi chậm
    • Rust an toàn hơn và nhanh hơn nhưng khó học
    • Ưu điểm của Typescript:
      • Null safety
      • Generic được hỗ trợ rộng rãi
      • Discriminated union type
      • Đồng thời hóa an toàn
      • Các phương thức collection/iterator
    • Ưu điểm của Go:
      • Hiệu quả hơn về kích thước và mức dùng bộ nhớ
      • GC của Go tốt hơn V8
      • Nhanh hơn trong các tác vụ CPU-bound
      • Thư viện chuẩn lớn hơn
  • Đã dùng Go và Typescript nhưng thích Kotlin/JVM hơn

    • Dù có sự chia cắt giữa Gradle/Maven và cảm giác bất an với build system, vẫn rất hài lòng về tính năng ngôn ngữ và runtime
  • Cho rằng Go là công cụ vạn năng

    • Mọi thứ đều đơn giản và dễ dùng
    • Có thể compile và deploy bằng những lệnh đơn giản mà không cần dùng nhiều công cụ bên ngoài
    • Các ngôn ngữ khác cũng có ưu điểm, nhưng không đơn giản và ít phiền toái như Go
  • Thích Go nhưng không đến mức yêu

    • Cho rằng hệ thống công cụ còn lộn xộn
    • Go module tạo cảm giác chưa hoàn thiện
    • Generic vẫn còn khá sơ khai
    • Cảm thấy hệ sinh thái vẫn chưa hoàn chỉnh
  • Thích hầu hết các khía cạnh của Go, nhưng với người viết nhiều mã số trị thì việc không có operator overloading là một nhược điểm

    • Vẫn tiếp tục dùng Python và C++
    • Rust hấp dẫn như một lựa chọn thay thế C++, nhưng có quá nhiều quy tắc để thay thế Python
  • Cuộc đời quá ngắn để thành thạo được nhiều thứ, nên cần chọn lựa cẩn thận

    • Lý do chọn Go:
      • Thư viện chuẩn tuyệt vời
      • Dễ đọc và dễ viết
      • Build ra một static binary duy nhất
      • Không cần container
      • Dùng được ở mọi nơi (phát triển web, ứng dụng desktop, phát triển game, embedded, v.v.)