Hiện tại, mình đang làm tại SwatMobility. Team dev cũng nho nhỏ (tổng cộng tầm 8-10 người), nhưng anh em làm việc rất vui và chuyên nghiệp!
Kì này, mình sẽ đánh giá những công nghệ mà mình và team đang dùng, điểm mạnh/điểm yếu và những điều mình thích/ghét về chúng nhé.
Đây là series bài viết 4 phần:
- Phần 1 - Công nghệ mình dùng hồi còn ở VN
- Phần 2 - Đi du học UK và làm startup Algomerchant
- Phần 3 - Học quá trời công nghệ mới tại 90Seconds
- Phần 4 - Các công nghệ hiện tại mình đang dùng
Phần này là Phần 4 - Các công nghệ hiện tại mình đang dùng
Ở công ty hiện tại, code cũ là back-end viết bằng Golang, front-end viết bằng Angular 2 (gọi 2 chứ thật là Angular 7,8 gì đấy). Sau khi mình vào thì đang migrate dần sang React và Elixir.
Tái ngộ Angular – Nay đã là Angular 2
Angular 2 là một framework để viết front-end, người kế nhiệm của Angular 1. Như mình đã kể cho các bạn, thời Angular 2 mới ra, dân tình chửi bới thậm tệ: cấu trúc code hoàn toàn khác Angular 1, bắt buộc phải dùng TypeScript …
Hồi đó mình cũng thấy ghét, lại nghe nói code Angular rườm rà, build nặng nên cũng không thèm học.
Thế nhưng công ty dùng thì phải dùng thôi. Thế là mình lại phải lục tục lên Pluralsight tìm học Angular 2. May thay, dùng 1 thời gian mình cảm thấy Angular cũng … khá ổn, không tới nỗi tệ như mình nghĩ:
- Cấu trúc code khá tường minh, chia làm module, service, 1 component tách riêng logic, template, style ra file riêng
- Framework hỗ trợ tận răng từ routing, validation, format tới API call, không cần xài thêm thư viện ngoài
- Một component có Input/Output, cũng na ná props và callback bên trong React
- Dùng TypeScript nên tooling ngon, refactor dễ, đọc là biết input/output/typing của các hàm ra sao
- Có gắn kèm RxJS, làm được nhiều trò hay ho bá đạo
Các công ty lớn cũng thích lựa chọn Angular hơn
Nói chung, dùng xong mình thấy cũng ổn, không ghét Angular như xưa nữa. Nhược điểm thì chỉ có sơ sơ:
- Khó học vì … có quá nhiều khái niệm phải học (Dependency Injection, RxJS, code structure, …). Mình học cũng tầm 2 tuần mới nắm sơ sơ
- Số lượng job không nhiều, cộng đồng không đông bằng React
- App build ra thì dung lượng lớn hơn React chút ít, nhưng không nhiều.
Golang – Sức mạnh từ sự đơn giản
Golang là 1 ngôn ngữ lập trình được mấy ông trong Google design ra, có thể dùng để web, command line, system (docker, kubernetes).
Trái với Angular 2, việc học Golang của mình có vẻ khá dễ dàng. Chắc bởi vì Golang được thiết kế với tiêu chí đơn giản, dễ dùng, dễ học.
Mới đầu dùng Golang, mình cảm thấy … rất bực mình, vì nó thiếu rất nhiều thứ:
- Không có Generic Typing. Do vậy, ví dụ bạn viết hàm search/sort 1 array số, bạn sẽ phải viết hàm tương tự cho array chứa string/object. Bạn sẽ phải copy/paste hoặc tự generate code
- Không có enum, không có cả … ternary operator (toán tử ba ngôi ? :), tự viết if/else nha mày
- Hướng đối tượng theo kiểu … giả cầy, chỉ có public (viết hoa) và private (viết thường), syntax cũng khá kì khôi
- Phải quay lại làm việc với … con trỏ (lâu lâu code mình lại nhầm giữa 2 thằng)
Vì quá đơn giản nên Golang thiếu rất nhiều thứ hay gặp ở các ngôn ngữ khác (golang.sucks)
Đến bây giờ, mình vẫn rất bực mình mấy thứ này. Tuy vậy, mình cũng dần cảm nhận được cái hay ho của Golang:
- Ngôn ngữ lập trình đơn giản nên … code cũng đơn giản. Ví dụ trong JS, Ruby, 5 ông dev sẽ có 5 cách khác nhau để giải quyết 1 vấn đề. Trong Golang, 5 ông dev chắc … chỉ có 1, 2 cách, code đồng nhất hơn hẳn!
- Có sẵn golint và gofmt đi kèm, anh em dev đỡ phải cãi nhau là code theo chuẩn nào, format nào (JS phải cài ESLint)
- Quản lý concurrency bằng go-routine khá dễ hiểu, performance cao
- Code đơn giản, ít magic nên đọc là hiểu, dễ tìm hiểu luồng chạy của project
Vì lý do đó, rất nhiều các ứng dụng phổ biến như Docker, Kubernetes vẫn đang viết bằng Golang.
Bonus: NodeJS – Công nghệ chơi chơi, làm chơi chạy thật
Còn 1 công nghệ nữa mình không dùng khi đi làm, nhưng rất hay dùng khi code các dự án web chơi chơi. Đó là NodeJS. NodeJS là 1 công nghệ để viết JS ở phía back-end, dựa theo Chrome V8 Engine.
Cá nhân mình hay dùng nó để code dự án nhỏ lẻ, web chơi chơi vì nhiều lý do:
- Hệ sinh thái của JS khá lớn, có nhiều package, khi cần chỉ tải package về xài, tiết kiệm thời gian code
- NodeJS mặc định là asynchonous, nếu code kĩ thì có thể chịu tải ổn mà không tốn quá nhiều tài nguyên (mấy con web ghẻ của mình dùng server 5$/tháng, vẫn chịu tải 3-500k request/tháng ầm ầm)
- Cộng đồng người dùng đông và hung hãn, document nhiều, bị bug gì Google có ngay
- Code NodeJS trong VS Code thì debug rất dễ, đặt debugger là chạy, không cần setup gì nhiều
Rất nhiều công ty từ to tới nhỏ sử dụng NodeJS
Bên cạnh đó, khi dùng NodeJS, các bạn nên lưu ý 1 số nhược điểm:
- Các dự án lớn thì nên dùng thêm TypeScript, kẻo về sau đọc/sửa code sẽ rất mệt. Có mấy dự án viết đã lâu, đọc lại mình không biết hàm nào trả về gì luôn!
- Gần đây có nhiều vụ hacker tấn công bằng cách tạo package mạo danh, hoặc chiếm quyền và cài mã độc vào package hiện hành. Anh em dùng nhớ cẩn thận.
- Mấy thể loại module của JS (module.export, import/export) hơi lằng nhằng
Tạm kết
Phù, cuối cùng thì cái series dài kì này cũng đi tới hồi kết. Ban đầu mình chỉ định viết 1 bài mà chả hiểu sao nó lại kéo dài ra thế này!
Tính ra, trong quá trình làm việc, mình khá may mắn khi được tiếp xúc nhiều công nghệ hay, gặp nhiều người giỏi; không phải ru rú làm hoài làm mãi một thứ!
Túm cái quần lại, công nghệ nào cũng có cái hay cái dở riêng, tuỳ thuộc vào dự án, và vào team hiện tại quen dùng gì thôi. Dùng nhiều, mình cũng bớt chê ngôn ngữ này, chửi công nghệ nọ, mà biết chọn thứ phù hợp theo nhu cầu dự án.
À mà nói gì thì nói, PHP vẫn là ngôn ngữ lập trình trẻ trâu rẻ tiền nhé :))