Giới thiệu series học lập trình Golang

Một ngôn ngữ lập trình dành cho những hệ thống khổng lồ

Tổng quan về Go (Golang)

Go là ngôn ngữ gì vậy?

Go, thường hay được biết đến với nickname là Golang, là một ngôn ngữ lập trình mã nguồn mở hiện đại được Google phát triển từ năm 2007 và được phát hành công khai vào năm 2009. Nó được tạo ra bởi các nhà khoa học máy tính Rober Griesemer, Rob Pike, và Ken Thompson. Go được thiết kế để giải quyết các thách thức trong việc phát triển các hệ thống đồ sộ trong khi vẫn phải đảm bảo tính đơn giản, hiệu quả và dễ đọc.

Những người tạo ra Golang

Bối cảnh lịch sử hình thành

Go được hình thành từ nhu cầu giải quyết các vấn đề thực tế tại Google, cụ thể trong việc phát triển các hệ thống có thể chạy đồng thời (concurrent) và mở rộng được (scalable). Ngôn ngữ này được sinh ra từ sự thất vọng với các ngôn ngữ sẵn có thời bấy giờ, vốn đang vật lộn với các vấn đề sau:

  • Quy trình dựng (build) ứng dụng phức tạp

  • Tốc độ biên dịch chậm chạp

  • Mô hình concurrency thiếu hiệu quả

  • Cú pháp rườm rà

  • Thách thức trong quản lý phần phụ thuộc (dependency management)

Cốt lõi trong nguyên lý thiết kế của Go

Go được thiết kế dựa trên một số nguyên lý cơ bản sau:

  1. Tính đơn giản

    • Cú pháp tường minh và tối giản

    • Tinh giảm độ phức tạp so với các ngôn ngữ như C++ hay Java

    • Ít tính năng làm lú mấy anh coder

    • Dễ đọc và bảo trì code

  2. Tính hiệu quả

    • Biên dịch với hiệu năng gần ngang bằng ngôn ngữ C

    • Kiểu dữ liệu tĩnh (static typing) với khả năng nội suy kiểu dữ liệu (type inference)

    • Tích hợp sẵn khả năng dọn rác bộ nhớ (garbage collection)

    • Tốc độ biên dịch nhanh

    • Kiểm soát bậc thấp (low-level control) trong khi giữ mức độ trừu tượng ở bậc cao (high-level abstraction)

  3. Tính xử đồng thời (concurrency)

    • Hỗ trợ hạng nhất cho lập trình ứng dụng concurrency

    • Goroutines: tạo ra các luồng xử lý (thread) nhẹ được quản lý bởi Go runtime

    • Các Channels cho việc giao tiếp an toàn giữa các tiến trình chạy đồng thời

    • Được thiết kế để tận dụng đa lõi xử lý (multi-core) và các hệ thống mạng hiệu quả

  4. Bộ công cụ thực dụng

    • Tích hợp công cụ quản lý dependency

    • Tích hợp sẵn công cụ định dạng (gofmt)

    • Thư viên chuẩn dễ nắm bắt

    • Các công cụ kiểm thử và profiling mạnh mẽ

    • Phân tích mã tĩnh (static code analysis)

Mục tiêu của series

Kết quả đạt được

Sau khi đọc xong series này, các bác sẽ:

  • Hiểu cú pháp của Golang, các kiểu dữ liệu và mô hình lập trình của ngôn ngữ này

  • Viết được các đoạn code hiệu quả và thành thạo

  • Phát triển các ứng dụng chạy song song (parallel) và đồng thời (concurrent)

  • Tạo ra các chiến thuật xử lý lỗi một cách nuột nà nhất

  • Xây dựng các microservices có thể mở rộng được và các ứng dụng mạng

  • Triển khai các best practices trong ngôn ngữ này

Mục tiêu kĩ năng

Code nhiều thì sẽ quen, nhưng quen rồi thì cần có kĩ năng tốt thì mới xử lý được các tình huống một cách hiệu quả nhất. Dưới đây là các mục tiêu liên quan đến kĩ năng mà các bác sẽ có được sau khi đọc series này:

  • Kỹ năng giải quyết vấn đề sử dụng các đặc tính độc đáo của riêng ngôn ngữ Go

  • Viết ra các đoạn code sạch và dễ bảo trì

  • Thấu hiểu các khái niệm lập trình ở cấp độ hệ thống

  • Phát triển các ứng dụng với hiệu năng tối ưu

  • Triển khai các mô hình kiến trúc phần mềm hiện đại

Series này dành cho những đối tượng nào?

Series này được thiết kế cho các bác:

  • Chuyển qua ngôn ngữ Go từ một ngôn ngữ khác

  • Sinh viên ngành khoa học máy tính (CS), công nghệ thông tin (IT), hệ thống thông tin (IS)

  • Các nhà phát triển backend

  • Các lập trình viên hệ thống

  • Các kỹ sư DevOps

  • Các chuyên gia đang tìm kiếm cách cải tiển kỹ năng lập trình các ứng dụng chạy đồng thời

Tại sao lại cứ phải là Go?

Go đã đạt được sức hút đáng kể trong nhiều lĩnh vực khác nhau như:

  • Cơ sở vật chất đám mây (Cloud infrastructure) ví dụ như Kubernetes, Docker,…

  • Các hệ thống phân phối (Distributed systems)

  • Kiến trúc microservices

  • Lập trình mạng

  • Các công cụ và tiện ích hệ thống

  • Backend cho các dịch vụ web

Học Go thì có cơ hội việc làm ở đâu?

Thực ra thì ở Việt Nam lập trình viên Golang chưa phát triển được nhiều cơ hội việc làm lắm đâu các bác ạ. Cá nhân tôi thấy phần lớn lập trình viên Golang thường được tuyển dụng cho các công ty nước ngoài hay startup. Làm startup thì hên xui không chắc chắn sẽ thành công và cũng vất vả. Còn làm cho các công ty nước ngoài thì kỹ năng đầu tiên các bác cần có là tiếng Anh đủ tốt để giao tiếp và hiểu các vấn đề kỹ thuật.

Tuy vậy, các bác cũng đừng sợ vì các cơ hội cho lập trình viên Go sẽ ngày càng được cải thiện. Vì là một ngôn ngữ hiếm có người làm, mặt bằng lương chung cho lập trình viên Golang là cao so với trung bình. Đối với các dự án cloud-native thì vai trò của các lập trình viên Golang càng trở nên rõ rệt. Vì đây là sản phẩm cây nhà lá vườn của Google nên chắc chắn các công ty công nghệ lớn sẽ có nhu cầu nếu các bác đủ bản lĩnh.

Cách tiếp cận Golang

Muốn tiếp cận Golang hiệu quả, các bác cần:

  • Tạo thói quen code theo hướng project base, dù là project rất nhỏ ở mức PoC cũng được

  • Đọc và hiểu các đoạn code mẫu trong thực tế

  • Đặt mục tiêu nâng cao độ phức tạp trong việc code một cách đều đặn

  • Nhấn mạnh vào các ứng dụng thực tế

  • Học đi đôi với hành, không thực hành các bác đừng mong thành công!

Chúc các bác học thành công ngôn ngữ thú vị này.