Tác giả Nguyễn Mạnh Toàn là giảng viên khóa Lộ trình Flutter
Thông tin chi tiết khóa học tại : https://flutter.techmaster.vn/


Chuyện nghề lập trình

Nhớ những ngày đầu tiên bắt đầu lập trình, với niềm đam mê với điện thoại di động, từ 1 con buôn điện thoại, tôi đã chọn lập trình Mobile. Đặt những viên gạch đầu tiên từ 2013 với lập trình android và bắt đầu “cày cuốc” như 1 lập trình viên android từ những năm 2015.

Tôi đã từng nghĩ: “Mình đến với android vì niềm tin, vì tình yêu với nó, nếu sau này, niềm tin, tình yêu đó dần vơi đi, thì mình sẽ làm gì?”. Tôi tin nhiều lập trình viên android nói riêng và Mobile nói chung cũng đã từng có suy nghĩ như tôi. Ngày đó, tôi đã nghĩ, khi 1 đạt tới 1 trình độ nhất định về android, mình sẽ cố lên Leader, và học thêm về ios.

Nhưng vào năm 2019, suy nghĩ đó của tôi đã bị dập tắt, khi tôi được tham gia vào 1 dự án ios và tự build ứng dụng ios đầu tiên của mình trên con Macbook pro 2015, tôi đã mất hơn 1 ngày, và chưa build xong…

ios-gym-time

đây là cấu hình macbook của tôi:

my-macbook-device-info

…mãi tới sau này tôi mới biết, đây có thể là lỗi gym, hoặc 1 lỗi gì đó, nhưng nó thực sự đã đưa tôi tới với 1 framework hybrid mới mang tên Flutter.

Vào năm 2019, tôi làm ở SoftDreams. Ở SoftDreams, về nguồn lực Mobile, team chúng tôi có 4 lập trình viên ios, 5 android, 3 dự án Mobile được code bằng android và ios, và trong tương lai gần, chúng tôi sẽ có thêm 3 dự án lớn về Mobile nữa. Ngoài những vấn đề về nguồn lực, còn nhiều vấn đề có thể kể tới như: dev team phải OT thường xuyên khi phát triển các tính năng mới, chênh lệch level giữa các dev ios và android, mobile team không có tiếng nói chung…

Đây thực sự là 1 bài toán nan giải đối với tôi khi đó, chắc chắn phải có cách nào đó để giải quyết được vấn đề trên…Cuối cùng, mấy anh em ngồi lại với nhau và suy nghĩ tới phương án sử dụng hybrid platform: ReactNative hoặc Flutter để giải quyết toàn bộ các vấn đề về nguồn lực, nhân sự, tầm nhìn lâu dài cho Mobile Team…và sau 1 tháng ngâm cứu, cuối cùng chúng tôi đã chọn Flutter.

Vậy vì sao chúng tôi chọn Flutter vào 2019, những ngày Flutter mới xuất hiện tại Việt Nam, công việc về Flutter chỉ đếm trên đầu ngón tay?

  1. Về performance, Flutter mạnh ngang native ở hầu hết các trường hợp, chỉ kém native khi áp dụng nhiều animation
  2. Về cơ hội nghề nghiệp: chúng tôi đặt niềm tin cao rằng việc làm Flutter sẽ phổ biến như android, ios và React Native
  3. Về cộng đồng Flutter: vào năm 2019, có những ngày Flutter cho ra mắt 2-3 versions hotfix, nhìn theo hướng tích cực, tôi cho rằng đây là yếu tố cần cho 1 framework phát triển trong tương lai
  4. Về lợi ích mang lại: đứng ở phía developer và phía công ty đều có rất nhiều lợi ích có thể kể tới như:
  • 1 nền tảng lập trình cho toàn bộ anh em Mobile Developer: sẽ không còn vấn đề chênh lệch level quá nhiều giữa các anh em developer
  • Giảm thiểu thời gian build ứng dụng: trung bình mỗi lần chúng tôi mất ~~ 30p để build dự án ios native, 2p để rebuild (đã có cache trước đó)/ mỗi lần thay đổi code. Còn với Flutter, chúng tôi tốn duy nhất 1 phút để build, 3s để hot reload/restart (áp dụng các thay đổi của code mà không cần build lại ứng dụng)
  • Giảm thiểu chi phí phát triển ứng dụng: về nhân sự, chúng tôi đã từng có 4 ios, 5 android, và tất nhiên, với Flutter, số lượng nhân sự đã giảm xuống chỉ còn 6 người với 1 tiếng nói chung, 1 ngôn ngữ lập trình chung.

Còn đây là lý do mà chúng tôi đã chọn Flutter, thay vì React Native

Vào năm 2019, tôi đã đọc nhiều bài so sánh giữa 2 framework này, nhưng điểm khác biệt lớn nhất là nằm ở phần compiler.

Khi build ứng dụng:

  • Với React Native: React Native sử dụng js bridge, khi compile, js bridge sẽ chuyển đổi toàn bộ code js qua native tương ứng. Đấy là nguyên nhân gây ra việc UI không đồng nhất trên các thiết bị: UI trên android sẽ khác so với ios, UI trên android 8 sẽ khác so với UI trên android 10…
  • Với Flutter: Flutter tự xây dựng cho mình 1 hệ thống widget riêng, 1 engine riêng mang tên Flutter Engine, và UI sẽ được đồng nhất trên toàn bộ các thiết bị: android giống 100% so với ios, android 8 giống 100% so với android 10…

Compiler

  • Với React Native chỉ hỗ trợ JIT
  • Với Flutter hỗ trợ cả JIT và AOT: JIT trong Flutter tôi đánh giá cao hơn React Native, tôi có thể hot reload cả những dependencies (3rd party) mà không cần compile lại. Tôi khá thích điều này trong Flutter.

flutter-devtool
Flutter devtool giúp tôi tìm widget chỉ với 1 click. Với android, tôi đã từng mất hàng chục phút debug để tìm 1 view (android view tương ứng với Flutter widget)

Nghề nghiệp

salary-dev
Báo cáo về lương trung bình của 1 lập viên năm 2021 (Báo cáo của TopDev)

Đây chắc chắn là yếu tố quan trọng nhất, lương Flutter chênh lệch không quá nhiều so với React Native, đây cũng là niềm tin cho tôi, và anh em trong công cuộc chinh phục Flutter.

Có công ty nào dùng Flutter vào năm 2019 chưa?

  • Alibaba, gã khổng lồ eCommerce lớn nhất thế giới, đã sử dụng Flutter để tạo ra trải nghiệm tuyệt vời trên app Xianyu của họ, thậm chí họ viết hẳn flutter boost giúp cho việc tích hợp Flutter dễ dàng hơn.
  • Google Greentea, app quản lý khách hàng nội bộ sử dụng
  • JD Finance, một công ty FinTech hàng đầu

Những điều này càng giúp tôi củng cố niềm tin của mình vào Flutter.

Tầm nhìn dài hạn về Flutter

Về Hybrid platform nói chung, trong tương lai, các nền tảng công nghệ chắc chắn sẽ phát triển mạnh hơn nữa, sẽ không còn phải mất hàng tuần, thậm chí hàng tháng để tạo ra 1 ứng dụng trên Mobile, web, hay desktop nữa.

Cá nhân tôi vẫn nghĩ Flutter là 1 nền tảng hữu ích cho Mobile, và thậm chí là web/desktop app sau này.

Kể từ version 2.8, Flutter đã support nhiều hơn cho web, lastest version của Flutter là 3.1.0, tôi tin những version tiếp theo sẽ hỗ trợ nhiều hơn nữa cho việc lập trình web và desktop.

Tổng kết

Trên đây là câu chuyện lựa chọn Flutter của tôi và anh em developers trong team tại SoftDreams, còn câu chuyện của bạn là gì? Đâu là lý do bạn lựa chọn Flutter? Cùng thảo luận nhé.


ToanNM - Cựu Mobile Leader tại SoftDreams
toannm.jsc@gmail.com