Lựa chọn ngôn ngữ nào để phát triển dự án?
Bạn đã bao giờ băn khoăn về điều này? Nếu không thì tôi dám chắc bạn chỉ thuộc vào một trong ba đối tượng sau:
- Chuyên gia: đã am hiểu những gì tôi sắp viết dưới đây.
- Fanboy: bạn chỉ yêu thích một ngôn ngữ nào đó và chống đối hết cả đám còn lại.
- Mới nhập môn: có thể chưa đến lúc để bạn cần quan tâm tới chủ đề này. Tuy vậy, vẫn mong bạn đọc qua một chút. Biết đâu sau này lại hữu ích.
Dù bạn thuộc đối tượng nào, thì sự trao đổi kiến thức không bao giờ là thừa cả. Đúng không?
Okay, cùng bắt đầu!
Tôi sẽ chỉ viết về những ngôn ngữ web và liên quan, vì đây là lĩnh vực tôi yêu thích và am hiểu.
API Web Services
- Python: Cặp bài trùng cực kỳ xuất sắc Django/Django-Rest-Framework là một trong những lý do chính cho lựa chọn này. Ổn định, dễ kiểm thử, dễ bảo trì, dễ mở rộng là điểm nổi bật. Nếu team của bạn vốn đã quen thuộc Python, thì quá lý tưởng rồi còn gì. Làm tới thôi!
- NodeJS: Lợi thế lớn nhất của JS là rất nhiều lập trình viên biết nó, vậy nên không tốn nhiều thời gian đào tạo. Có rất nhiều cái tên đáng chú ý như: Express.js, Hapi.js. Hệ sinh thái JS phát triển quá nhanh và hỗn loạn. Vì vậy nó thiếu tính ổn định cần có cho những dự án quan trọng. Chưa kể đến những phàn nàn về mặt syntax, debugging, callback của chính ngôn ngữ JS cũng gây nhiều phiên toái về lâu dài.
- Ruby:
Error 404 [Not Found]. - PHP: Thập kỷ 00s, PHP rất phổ biến ở Việt Nam. Đây cũng là một trong các ngôn ngữ tôi học đầu tiên khi tiếp xúc với thế giới lập trình. Những năm gần đây, nhóm phát triển PHP đã nỗ lực cải thiện ngôn ngữ này. Nhưng tôi vẫn cho rằng nó không có thiết kế tốt. Phần đề xuất này chỉ dành cho người đã có căn bản PHP, người mới thì hãy bỏ qua đi ạ. Framework giúp làm API nổi bật: Phalcon, Slim.
- Golang: Có thể với nhiều người ngôn ngữ này khá mới mẻ. Nhưng hãy thử đi, rất có triển vọng và đáng để đầu tư thời gian. Điểm mạnh của Go là tốc độ (performance), cú pháp hiện đại, dễ triển khai và hỗ trợ đa nền tảng. Nghe đồn, sắp tới Google sẽ đưa ngôn ngữ này vào Android thay thế Java trong việc phát triển mobile apps.
Tại sao tôi thường đề cập tới các framework? Rất đơn giản, framework giúp cho bạn tiết kiệm thời gian, công sức nhưng vẫn đảm bảo tính linh hoạt và hơn hết là an toàn. Từ đó, bạn có thể đưa ra một sản phẩm có chất lượng hơn trong một khoảng thời gian ngắn hơn.
API web services ngày càng phổ biến kèm theo sự phát triển của mobile apps và các frontend framework như Angular, React, Vue...
CRUD Website
CRUD: Create/Read/Update/Delete
- Python: Thực ra Python chỉ có 3 frameworks đáng chú ý: Django, Flask và Pyramid. Django đa năng, Flask cho one-page sites, Pyramid có tốc độ tốt và ít ràng buộc hơn Django.
- Ruby: Rails là cuộc cách mạng và kiểu mẫu cho các nền tảng web hiện đại.
- Golang, NodeJS: Chỉ tốt khi viết one-page sites.
- Scala: Play Framework rất mạnh nhưng sẽ khá khó học đối với những bạn ít tiếp xúc với thế giới JVM. Các ứng dụng viết bằng Scala/Java thường khá cồng cềnh và chạy rất tốn bộ nhớ. Bù lại, nó lại có hiệu suất đáng nể.
- PHP: Symfony, CakePHP, Laravel...
Có rất nhiều sự lựa chọn, nhưng những sự lựa chọn đó của bạn phải đảm bảo 5 điều:
- Thời gian phát triển nhanh.
- Dễ triển khai.
- Dễ bảo trì, bảo dưỡng.
- Dễ mở rộng.
- Dễ tìm người làm.
Đôi khi chúng ta cũng lo lắng về sự ăn khớp của ngôn ngữ lập trình với các hệ quản trị cơ sở dữ liệu. Các ngôn ngữ quá trẻ hoặc ít nổi tiếng sẽ có các database drivers chất lượng thấp và ngược lại.
Real-time Services
- NodeJS: I/O của V8 engine rất nhanh, không có gì phải phàn nàn về điều này. Socket.io cũng đã có thâm niên, đáng tin cậy và được sử dụng rộng rãi.
- Scala: rất nhiều hãng lớn sử dụng Scala/Java để làm messaging transmission server: Twitter, Slack.
- Golang: là một ngôn ngữ hiện đại, Go đáp ứng đầy đủ tính năng khiến chúng ta hài lòng. Tôi rất thích
Goroutines
trong Go. Tôi có thể linh hoạt chuyển đổi qua lại giữa các đoạn code blocking và non-blocking dễ dàng. Website lớn sử dụng có thể kể đến như: Disqus, Netflix. - Python: hãy xem qua Tonardo, rất thích hợp cho những website vừa và nhỏ.
Để có một ứng dụng real-time tốt, ngôn ngữ nền tảng phải đảm bảo:
- Hiệu suất làm việc cao (high performance): thường là các ngôn ngữ có thiên hướng bất đồng bộ (async).
- Hỗ trợ I/O nhanh.
- CPU bounding, caching tốt.
- Dễ mở rộng quy mô (scalability).
- Fault-tolerance: thuật ngữ này nôm na nghĩa là dịch vụ của tao sẽ không bao giờ chết dù nó có dính bất cứ lỗi nào.
Server Tools
Phần mềm được viết để chạy trên máy chủ có chức năng đặc thù, hỗ trợ website vận hành hoặc hỗ trợ người quản trị máy chủ
- Golang: Bạn đã bao giờ nghe đến Docker? Phần mềm này giúp bạn triển khai rất nhanh và dễ dàng thông qua các gói ảo hóa cấu hình sẵn. Đây là ví dụ điển hình cho việc có thể phát triển các ứng dụng máy chủ mạnh mẽ bằng Go.
- Rust: là đứa con của Mozilla. Điểm mạnh của Rust là tính an toàn khi thao tác với bộ nhớ. Rust không dễ học và còn khá non trẻ (2011), nhưng hứa hẹn là ngôn ngữ đáng mong đợi. Nghe đồn, Mozilla đang định viết lại Firefox bằng Rust.
- Python: tôi không biết con số chính xác song tôi tin rằng, có ít nhất 1/3 các ứng dụng máy chủ trên Linux viết bằng Python.
- C/C++: hiệu năng làm việc là điểm làm hấp dẫn không thể chối cãi. Ngôn ngữ này đồng thời cũng là tiêu chuẩn về mặt tốc độ đối với các ngôn ngữ khác.
- Java: không phải ngẫu nhiên mà các phần mềm lớn như ElasticSearch, Hadoop, Cassandra vẫn dùng Java như là ngôn ngữ chủ đạo. JVM có hiệu suất gần nhất với C/C++ nhưng lại linh hoạt hơn, dễ viết hơn.
Ngoài ra BASH Script cũng là một ngôn ngữ cực kỳ phổ biến mà người hầu như ai cũng sử dụng khi làm việc trên máy chủ.
Đối với những website phức tạp, thường sẽ không sử dụng một ngôn ngữ lập trình. Theo đó, team phát triển sẽ tùy theo mục đích của từng dịch vụ mà lựa chọn công nghệ thích hợp nhất. Một đội ngũ có khả năng học tập tốt và linh hoạt thì mới đưa ra được một sản phẩm có chất lượng, hoạt động trơn tru.
Công nghệ luôn thay đổi hằng ngày. Những điều tôi nói ngày hôm nay chưa chắc đã còn đúng vào ngày mai. Vì vậy, hãy cứ thả lỏng không nên cứng nhắc vì bất cứ điều gì :). Mục đích tối thượng của chúng ta chính là sản phẩm ra lò thật ngon lành và sớm đưa ra thị trường.