Tại sao nên học ngôn ngữ lập trình Go/Golang
Cũng không biết lý do gì mà tự nhiên đi nghiên cứu thử Golang, sau khi nghiên cứu một thời gian, cũng khá ngắn với chỉ cỡ 2 tuần, mình cảm thấy thích Go. Nhưng để xác định xem có nên nghiên cứu chuyên sâu hơn về Go không, thì mình viết bài giải thích tại sao mình thích Go/Golang, trước là để bản thân mình xác định về tương lai, tính cách bản thân có tương thích với Go hay không, sau là để các bạn chưa biết về Go có cái nhìn khái quát, để trả lời được tại sao nên học ngôn ngữ lập trình go/golang. Ít nhất là dành cho các bạn đang sử dụng ngôn ngữ động (như PHP, JS, Python, Ruby) như mình.
Bài viết đơn giản liệt kê một số ưu điểm “mới nhìn thấy”, mình không đủ thời gian chuyên sâu trong ngôn ngữ lập trình mới này, nên những gì viết ra sau đây đa phần dựa trên nhiều phát biểu của người khác, và thử nghiệm vọc vạch và thực sự thích – ngay tại thời điểm này:
Nội dung chính
Biên dịch ra nhiều nền tảng
Mình thích C từ thời sinh viên, nhưng có lẽ do thời đại web cùng lúc – dễ kiếm tiền, nên mình chuyển sang sử dụng PHP để kiếm cơm. Tuy nhiên, ưu điểm biên dịch ra mã máy của C giúp tốc độ thực thi nhanh và vấn đề triển khai cũng rất gọn gàng với chỉ 1 file duy nhất, chương trình có tính ổn định cao (chất lượng code tương đương nhé :D) là những ưu điểm của biên dịch so với thông dịch.
Ngôn ngữ lập trình Go cũng biên dịch như Java, nhưng không như Java phải cần Java Virtual Machine để thực thi vì Java biên dịch ra Byte code, Go biên dịch ra mã máy (Machine code) nên có thể chạy ngay với hệ điều hành nó biên dịch ra mà không cần cài đặt gì thêm. Có nghĩa là từ máy tính của mình, có thể biên dịch ra các chương trình chạy trên Mac, Window, Linux, sau khi biên dịch, chỉ cần 1 file duy nhất, copy đến hệ điều hành đích là chạy, rất đơn giản. Đây là tính năng ấn tượng nhất, bao gồm cả việc build rất nhanh!
Dễ học
Đúng là Go khá dễ học, mặc dù nó tương đối khó xơi ở phần kiểu dữ liệu Slice, khái niệm Goroutine, Channel và Pointer. Tuy nhiên, có thể khẳng định là nếu đã từng học ít nhất 1 ngôn ngữ lập trình, bạn không hề gặp khó khăn khi học Go. Mặc dù ban đầu, nhìn cấu trúc của Go có vẻ hơi xấu – có vẻ làm khủng hoảng tinh thần, tuy nhiên dần dần cũng thấy thoải mái, và tiện lợi.
Để master thì chưa biết là bao lâu, nhưng so với cùng khoảng thời gian (ở đây là 2 tuần) khi mình học Python và Ruby thì Go dễ hiểu, dễ học hơn. Có thể tự xây dựng một client cho một API đơn giản một cách nhanh chóng, hoặc có thể viết web crawler có sử dụng goroutine/channel để xử lý concurrency.
Concurrency
Cocurrency là tính năng chủ lực của ngôn ngữ lập trình Go để tận dụng năng lực xử lý của CPU. Thông thường các ngôn ngữ lâp trình khác phải phụ thuộc sự cấp phát tài nguyên của hệ điều hành để có thể chạy Concurrency, trong khi đó Go có thể chạy concurrency mà không phụ thuộc hệ điều hành. Concurrency gần giống với thread, trong Go thì việc giao tiếp giữa các goroutine khá đơn giản với channel, có thể truyền dữ liệu giữa các goroutine với nhau bằng bất cứ loại dữ liệu nào.
Còn tiếp …
Điểm mạnh về microservice, realtime web, cloud computing, built-in web server (http/2) 🙂
Tạm kết
Ngôn ngữ lập trình Go chỉ mới có 6 năm tuổi đời nên sẽ còn có nhiều điều để phát triển so với các bậc tiền bối C, C++, Java. Nếu bạn cũng là người đang sử dụng chính ngôn ngữ động như PHP, JS, Ruby hay Python, thì cũng nên bước ra khỏi cái vỏ ốc an toàn đó, tìm hiểu thêm anh chàng Go này xem sao. Docker cũng đã được viết bằng ngôn ngữ lập trình Go, cũng như một phần trong Google.
Mình thích C, chưa bao giờ thích Java, và giờ là lúc để chọn ngôn ngữ lập trình Go: biên dịch và dành cho con người 😀
Cập nhật
Cập nhật 10/2018: sau 2 năm học hỏi và áp dụng Golang, mình vẫn thấy đây là ngôn ngữ đáng học, ngoại trừ các bạn có đam mê trong lĩnh vực AI thì nên học thêm Python vì Go không phù hợp bằng.
Cập nhật 11/2019: trả lời cho câu hỏi bạn Uyên bên dưới, và hi vọng cũng giúp nhiều bạn có chung thắc mắc. Trước tiên mình xác nhận là hiện tại mình vẫn sử dụng Golang cho các tác vụ cần tốc độ xử lý, xử lý đồng thời, tận dụng tối đa CPU, cần triển khai (deploy) đơn giản và đa nền tảng. Việc học cái nào trước không quan trọng bằng định hướng tương lai ra sao, và yêu thích lĩnh vực gì, muốn làm cái gì.
Vì mỗi ngôn ngữ đều có thế mạnh riêng, được áp dụng vào mỗi phần khác nhau trong tổng thể dự án. Ví dụ Golang về cơ bản mạnh hơn Python về các mảng system, network. Nhưng điều đó chỉ đúng tương đối, chứ nếu bạn giỏi về Python thì vẫn tạo ra được sản phẩm lớn về system & network; Dropbox là một ví dụ về Python ( bác Guido van Rossum làm cho Dropbox ~7 năm).
Nếu bạn chưa có kinh nghiệm với một ngôn ngữ lập trình nào, hãy học Python!
Python là ngôn ngữ đã dần được đưa vào trường dạy như ngôn ngữ lập trình đầu tiên cho trẻ em. Hiệu quả đã được chứng minh rồi, nên không có gì phải lo lắng. Python dễ học và trực quan, cứ học xong Python rồi tính tiếp nhé!