Let’s get 2023 started with a hot topic about #AI: Landscapes, Roadmaps, Collabs. We all have to agree that the impact of AI on software development changes how enterprises run business and make software smarter, with AI tools aim to make software development more reliable, faster and easier.
Join Technical event #15 to:
Understand about AI as well as tools, applications, trends of AI in the software industry
Get a big picture of the exciting research and application areas of AI
Get optimal learning paths for AI-powered career development
Capture resources, communities, and collaborative learning opportunities as well as AI product projects.
Chúng tôi đã đánh giá ChatGPT với Google và nhận thấy rằng ChatGPT đánh bại Google trong các truy vấn liên quan tới coding và suýt sao ở các truy vấn chung về thông tin — dù không được tối ưu hóa cho trải nghiệm tìm kiếm. Hãy cùng tìm hiểu về mối đe dọa hiện hữu của OpenAI đối với Google.
Trước thì ChatGPT cướp việc của tôi. Giờ thì tới của Google
ChatGPT vs. Google
Hãy tưởng tượng bạn muốn xóa sạch tất cả các tệp Python trong một thư mục. Bạn tìm tới Google.
Thật không may, công cụ tìm kiếm thống trị thế giới lại hiểu sai truy vấn của bạn!
Google hiểu sai truy vấn
Không ấn tượng với người đương nhiệm, bạn chuyển sang ChatGPT.
Phản hồi siêu tuỳ chỉnh của ChatGPT
Và phản hồi của ChatGPT là hoàn hảo, siêu tùy chỉnh chính xác theo nhu cầu về file .py của bạn.
Nó cũng kèm theo 1 tip rất hay mà bạn chưa bao giờ nghĩ rằng mình sẽ hỏi tới. Tôi luôn xóa các tệp và luôn tạo một thư mục sao lưu trước. Tôi thậm chí còn không biết tùy chọn “-print” có tồn tại.
Tôi thậm chí có thể theo dõi bằng cách yêu cầu ChatGPT tạo một folder mẫu.
Yêu cầu ChatGPT tạo thư mục mẫu có sẵn file và thư mục con để test
Nghe tiếng gì không? Đó là tiếng thút thít của 10.000 nhân viên Google đang mất đi dịch vụ mát-xa tại chỗ và các trận bóng chuyền giữa ngày khi Sundar vùi dập công ty của mình vào Code Red.
Các mô hình ngôn ngữ lớn (LLM) và Google-Killer
Theo nhiều cách, ChatGPT là định nghĩa về tương lai của Tìm kiếm. Trí tuệ nhân tạo siêu thông minh có ích lợi gì nếu nó không thể cho tôi biết tình hình thời tiết, gợi ý cho tôi một nhà hàng mới thú vị để thử và tóm tắt câu chuyện quá khứ của Lionel Messi?
Hiểu biết về sự rộng lớn của web từng là công nghệ sát thủ của Google và giờ đây, một công ty nhỏ mới nổi đang đe dọa điều đó.
Tất cả chúng ta đều thích đứng về phía kẻ yếu thế. Và Twitter đã chạy điên cuồng với các ví dụ mà ChatGPT đè bẹp Google.
Twitter đang điên cuồng cho thấy ChatGPT đè bẹp Google
Các mô hình ngôn ngữ lớn có thể là đòn sát thủ của Google. Microsoft đã dấn sâu vào OpenAI; hãy hình dung công nghệ này nằm trong tay những công ty khởi nghiệp táo bạo hơn như Neeva, You.com và cả Kagi nữa.
Nhưng có phải Twitter chỉ hiển thị 10 truy vấn tốt nhất trong số 10.000 truy vấn hay sự thống trị của ChatGPT đã lan rộng?
Đánh giá các mô hình ngôn ngữ và đo lường chất lượng tìm kiếm là công việc chính của chúng tôi tại Surge AI. Hãy cùng xem.
Google vs. OpenAI: Đánh giá của con người
Để phân tích hiệu suất của ChatGPT so với Google, chúng tôi đã thực hiện đánh giá sau:
Chúng tôi đã yêu cầu 100 Surger (nhân viên của Surge AI) xem lịch sử tìm kiếm của họ và trích xuất 5 truy vấn “thông tin” gần đây nhất của họ.
Các truy vấn này cũng phải có thể trả lời được trước năm 2022, vì ChatGPT không có quyền truy cập vào dữ liệu mới hơn (ít nhất là cho đến khi nó kết hợp WebGPT!).
Họ đã sử dụng lại cùng một truy vấn trên Google và cũng đặt truy vấn cho ChatGPT, có thể ở định dạng mang tính trò chuyện hơn.
Cuối cùng, họ đánh giá hiệu suất của Google và ChatGPT, đồng thời so sánh 2 trải nghiệm.
Kết quả?
Dù hoàn toàn không được tối ưu hóa cho trải nghiệm tìm kiếm, nhưng ChatGPT đã phù hợp hoặc đánh bại một chút hiệu suất của Google.
Những người đánh giá công cụ tìm kiếm Surge AI ưa thích ChatGPT trên 42% truy vấn và Google trên 40%.
ChatGPT suýt sao đánh bại Google
Nếu chúng ta đào sâu vào từng nền tảng riêng lẻ, chúng tôi thấy rằng ChatGPT thường xuyên được cho điểm cao nhất: rất thường xuyên được chấm Amazing (đỉnh của chóp), và cũng rất thường xuyên là Bad.
ChatGPT thường được đánh giá Amazing, nhưng cũng thường nhận đánh giá Bad
Sự thống trị của ChatGPT thậm chí còn trở nên rõ ràng hơn khi xem xét 1 bộ 100 truy vấn về coding — trong đó Google thua đến 70%!
Lần này, đã không còn là tiếng thút thít mà bạn nghe thấy nữa. Đó là mùi của 10.000 nhân viên Google đã thay quần mới.
Thắng và thua của ChatGPT
Vậy đâu là nơi ChatGPT cực kì uy tín và đâu là nơi nó vẫn phải hoàn thiện? Cùng xem một số ví dụ.
ChatGPT thắng #1
Truy vấn: Làm cách nào để làm món risotto?
Ý định: Tôi muốn có hướng dẫn từng bước để làm món cơm Ý cho ngày sinh nhật của vợ.
Đánh giá: ChatGPT tốt hơn.
Kết quả truy vấn ‘Cách làm món risotto’ trên Google
Kết quả truy vấn ‘Cách làm món risotto’ trên ChatGPT
Giải thích về đánh giá:
“Vấn đề với việc thu được bất kỳ thông tin nấu ăn nào từ Google là bạn chắc chắn sẽ được cung cấp một loạt các liên kết và video về công thức nấu ăn. Mặc dù chúng có thể hữu ích, nhưng không phải ai cũng viết công thức rõ ràng hoặc họ biến mọi chuyện thành một giai thoại lan man vì lợi ích thứ hạng trên công cụ tìm kiếm.
Chatbot không có vấn đề đó.
Tôi thích cách nó quyết định ném một chút tiếng Ý vào cuộc trò chuyện! Nó tạo cảm giác như nó có cá tính, trái ngược với kết quả của Google chỉ là các cột chữ và trang web.
Tôi chắc rằng Google phần lớn là chính xác. Tuy nhiên, có RẤT nhiều thông tin đa dạng trên trang đó đến nỗi tôi chắc chắn một số thông tin không thực tế, không sử dụng được hoặc nói cách khác là có sai sót.
Tôi cảm thấy Chatbot tốt hơn khi đưa ra câu trả lời ngắn gọn mà bất kỳ ai (bao gồm cả tôi) đều có thể hiểu rõ ràng. Chatbot đã tiêu diệt nó một cách tương đối, về mặt định dạng. Thậm chí còn không bằng.”
ChatGPT thắng #2
Truy vấn: Sự khác biệt giữa mưa đá (freezing rain) và mưa tuyết (sleet) là gì?
Ý định: Tôi đang cố nhớ xem sự khác biệt giữa mưa đá và mưa tuyết là gì. Sống ở Oklahoma, đặc biệt là vào mùa đông, tôi nghe những thuật ngữ đó rất nhiều và tôi biết một trong số chúng tồi tệ hơn nhiều so với những thuật ngữ kia vì nó có thể đóng băng trên đường dây điện.
Đánh giá: ChatGPT tốt hơn nhiều.
Trả lời trực tiếp từ ChatGPT, thay vì phải xem xét nhiều bài viết
Giải thích đánh giá:
“Google đã có kết quả tuyệt vời từ các trang web đáng tin cậy. Tôi đã có thể tìm thấy câu trả lời cho truy vấn của mình.
Tuy nhiên, AI đã đưa ra một câu trả lời ngắn gọn, súc tích trong vòng vài giây để giải thích sự khác biệt. AI nói rằng mưa đóng băng “đóng băng khi tiếp xúc với các bề mặt” nên tôi biết đó là thứ tôi muốn đề phòng. Tôi đã hỏi AI về cơn mưa đá làm đứt đường dây điện và AI xác nhận rằng điều đó có thể xảy ra.
Tôi thích phản hồi rất nhanh thay vì nhấp vào kết quả từ Google và đọc lướt các bài báo để biết thông tin.”
ChatGPT thắng #3
Truy vấn: Cách tạo nút đầu và nút tạm thời cho danh sách liên kết đôi trong C
Mục đích: Trong khóa học software engineering, tôi đã học về danh sách liên kết kép và cần biết cách tạo nút đầu và nút tạm thời cho danh sách liên kết kép.
Đánh giá: ChatGPT tốt hơn nhiều.
Kết quả truy vấn về Double linked list trên Google
Kết quả truy vấn về Double linked list trên ChatGPT
Giải thích về đánh giá:
“AI cung cấp các bước về toàn bộ chủ đề ở định dạng ngắn gọn, súc tích và đơn giản hóa. Google đã cung cấp một liên kết tương tự với các hình minh họa, nhưng lần này có một số quảng cáo gây phiền nhiễu.
Toàn bộ giao diện đàm thoại của OpenAI thực sự hấp dẫn và giúp việc học trở nên dễ dàng và thú vị hơn. Với AI, tôi có thể thu hẹp tìm kiếm của mình để có được kết quả cụ thể mà tôi cần, nhưng điều này không phải lúc nào cũng có thể thực hiện được với Google vì Google liên tục đưa ra các liên kết bên ngoài giống nhau chứa hầu hết các từ khóa phù hợp trong tìm kiếm của tôi.”
ChatGPT thắng #4
Truy vấn: Cách tính toán số lớp mà một dầm lvl cần cho ngôi nhà tải tuyết một tầng
Mục đích: Tôi đang có kế hoạch loại bỏ một bức tường chịu lực khỏi ngôi nhà và tôi cần biết loại dầm nào sẽ đủ để hỗ trợ kết cấu. Tôi đang tìm kiếm một câu trả lời đơn giản giúp tôi hiểu rõ hơn về các quy tắc xây dựng xung quanh dầm đỡ và cách tiếp tục dự án một cách an toàn.
Đánh giá: ChatGPT tốt hơn nhiều.
Truy vấn cách tính số lớp dầm lvl trên Google
Truy vấn cách tính số lớp dầm lvl trên ChatGPT
Giải thích về xếp hạng:
“Mặc dù Google cung cấp cho tôi lượng thông tin phong phú, điều này cuối cùng đã dẫn tôi đến câu trả lời hữu ích, ChatGPT đã đơn giản hóa kết quả mà tôi đang tìm kiếm.
Đối với truy vấn cụ thể này, Google có xu hướng phức tạp hóa quá mức ý tưởng tổng thể của câu hỏi đang được hỏi.
Mặt khác, ChatGPT đã làm rất tốt việc cung cấp cho tôi thông tin hữu ích tương tự theo cách dễ hiểu hơn; nó tóm tắt những điểm chính cần thiết để nghiên cứu sâu hơn và cho tôi một điểm xuất phát tốt để tiếp tục nghiên cứu.
Mặc dù về tổng thể, Google đã cung cấp thêm một chút thông tin xung quanh chủ đề này, nhưng tôi nghĩ ChatGPT hoạt động tốt hơn do cách nó quyết định định dạng câu trả lời.”
ChatGPT thua #1
Truy vấn: Cách tìm kiếm các tweet từ một ngày cụ thể trên twitter
Ý định: Tôi muốn tìm hiểu những bước tôi cần thực hiện để tìm kiếm các bài đăng trên Twitter được thực hiện vào một ngày dương lịch cụ thể (tức là 01-01-2022). Tôi muốn tìm hiểu cách sử dụng chức năng tìm kiếm nâng cao của Twitter để nó chỉ hiển thị cho tôi các tweet được thực hiện vào ngày cụ thể đó.
Đánh giá: Google tốt hơn nhiều.
Tìm tweet trên Twitter vào 1 ngày cụ thể trên Google
Tìm tweet trên Twitter vào 1 ngày cụ thể trên ChatGPT
Giải thích về đánh giá:
“Phản hồi của ChatGPT không chính xác khi nói rằng bạn phải “đi tới trang chủ Twitter và nhấp vào nút “Tùy chọn khác” ở góc trên cùng bên phải của trang.” Nút “tùy chọn khác” không thể truy cập được từ trang chủ của Twitter; bước đầu tiên là nhập truy vấn vào thanh tìm kiếm của Twitter, tại thời điểm đó, bạn có thể nhấp vào “Tùy chọn khác” hoặc “Tìm kiếm nâng cao”.
Phản hồi ChatGPT cũng nói rằng việc tìm kiếm các tweet chỉ bằng thanh tìm kiếm của Twitter “có thể không cho phép bạn tìm kiếm các tweet theo ngày.”
Trên thực tế, có thể tìm kiếm các tweet theo ngày bằng thanh tìm kiếm của Twitter sử dụng định dạng “since:yyyy-mm-dd / until:yyyy-mm-dd”.
Google cung cấp thông tin này và về tổng thể, sự trợ giúp của nó rộng rãi và chính xác hơn của AI.”
ChatGPT thua #2
Truy vấn: làm thế nào để trích dẫn một cuốn sách ở định dạng mla
Mục đích: Mục đích truy vấn của tôi là tìm hiểu cách trích dẫn một cuốn sách bằng cách sử dụng các nguyên tắc về định dạng và phong cách của Hiệp hội Ngôn ngữ Hiện đại. Tôi muốn biết tôi cần đưa thông tin gì vào trích dẫn MLA cho một cuốn sách và viết thông tin đó theo trình tự nào. Tôi cũng cần biết cách định dạng trích dẫn MLA.
Đánh giá: Google tốt hơn nhiều.
Giải thích về đánh giá:
“Phản hồi AI có một vài điểm không chính xác. Nó nói rằng một trong những thông tin cần thiết để viết trích dẫn MLA cho một cuốn sách là “(các) số trang bạn đang trích dẫn (nếu có).” Nếu một người đang viết trích dẫn MLA cho một cuốn sách mà họ cần chỉ định số trang mà họ đang trích dẫn (tức là nếu họ chỉ trích dẫn một chương, một tác phẩm từ tuyển tập các tác phẩm, v.v.), thì họ phải chỉ định tiêu đề của phần họ đang trích dẫn. Phản hồi của AI không đề cập đến điều này và trích dẫn ví dụ mà nó cung cấp là không chính xác vì lý do này.
Phản hồi của AI cũng đặt tiêu đề của cuốn sách trong dấu ngoặc kép, nhưng nó phải được in nghiêng.
Phản hồi của AI không đề cập đến nhu cầu chỉ định thành phố xuất bản của sách trong nhiều trường hợp. Phản hồi AI định dạng tên tác giả không chính xác; nó phải được định dạng là [Họ], [Tên].
Cuối cùng, phản hồi của AI đặt tên cuốn sách trước tên tác giả, nhưng tên tác giả phải đứng trước.
Phản hồi của Google chính xác hơn nhiều so với phản hồi của AI.
Tôi thích định dạng phản hồi của AI – cụ thể là thực tế là nó cung cấp một trích dẫn ví dụ ngay lập tức – nhưng nó quá thiếu chính xác để có giá trị.”
ChatGPT thua #3
Truy vấn: Brian Griffin là loại chó gì?
Mục đích: Cố gắng tìm ra giống chó mà nhân vật hư cấu Brian Griffin trong sê-ri Chàng trai gia đình được cho là giống chó nào
Đánh giá: Google tốt hơn nhiều.
Brian Griffin là giống chó nào, tìm trên Google
Brian Griffin la giống chó nào, tìm trên ChatGPT
Giải thích về đánh giá:
“Google thực sự đã truy xuất câu trả lời đúng. Brian đã được xác nhận là Labrador Retriever trong tập 1.
Còn chat AI tuyên bố rằng không có cách nào để biết Brian là giống gì vì anh ấy là hư cấu.
Giao diện đàm thoại ổn, nhưng tôi cảm thấy AI hơi thô lỗ, mặc dù tôi biết đó không phải là ý định.
Chat AI “Không rõ Brian là giống chó gì, vì nó là một nhân vật hư cấu chứ không phải chó thật.” khiến tôi cảm thấy câu hỏi của mình thật ngu ngốc và không đáng để AI dành thời gian trả lời.”
ChatGPT thua #4
Truy vấn: ETF nào trước đây mang lại ROI cao hơn?
Ý định: Mục đích tìm kiếm của tôi là xác định các quỹ ETF trước đây mang lại tỷ lệ hoàn vốn cao nhất. Điều đó sẽ cho phép tôi xác định chính xác một quỹ ETF mà tôi có thể đầu tư vào.
Đánh giá: Google tốt hơn nhiều.
ETF có ROI cao hơn, tìm trên Google
ETF có ROI cao hơn, tìm trên ChatGPT
Giải thích về xếp hạng:
“Google đã cung cấp cho tôi danh sách các quỹ ETF hàng đầu nhưng không chỉ định chính xác cho tôi danh sách nào có ROI cao nhất.
ChatGPT đã cho tôi một số lời khuyên tài chính rất hữu ích và khuyên tôi nên thận trọng.
Tuy nhiên, nó từ chối trả lời câu hỏi của tôi vì 2 lý do. Thứ nhất là vì nó không có quyền truy cập vào dữ liệu lịch sử và thứ hai là vì nó được lập trình để không đưa ra lời khuyên tài chính. Tuy nhiên, câu hỏi của tôi không phải là xin lời khuyên mà là để được tiếp cận dữ liệu được ghi chép đầy đủ.”
Các phát hiện về ChatGPT so với Google
Nói tóm lại, Surger thích những điều sau về ChatGPT:
Ưu điểm ChatGPT
Khả năng tổng hợp thông tin từ nhiều nguồn khác nhau thành một tổng thể duy nhất, mạch lạc – giống như trợ lý công cụ tìm kiếm, cá nhân của bạn!
Giao diện tối thiểu của nó – không còn phải cuộn qua 13 quảng cáo trước khi bạn đến công thức món risotto của mình.
Nó có khả năng hiểu các truy vấn phức tạp – chẳng hạn như nhận ra rằng “núi lửa đang hoạt động lớn nhất ở lục địa Hoa Kỳ” nên loại trừ các núi lửa ở Hawaii.
Tất nhiên, họ cũng bày tỏ sự tiêu cực:
Nhược điểm ChatGPT
Ảo giác và không chính xác – tất cả được thể hiện dưới hình thức rất tự tin, thuyết phục.
Tất nhiên, đôi khi, hình ảnh, video và tweet rất quan trọng – Internet có rất nhiều phương tiện là có lý do!
Chúng tôi cũng đã hỏi các Surger để biết thông tin chi tiết sau khi họ tương tác với ChatGPT trong vài ngày.
Surger #1
“ChatGPT rất hữu ích trong việc loại bỏ nhu cầu truy cập nhiều trang web để có câu trả lời hoàn chỉnh. Tôi đã hỏi bot những câu hỏi liên quan đến các chương trình như LaTeX (Làm cách nào để vẽ biểu đồ hàm theo từng phần trong LaTeX?) và Canva (Làm cách nào để thêm văn bản vào hình ảnh trong Canva?). Câu trả lời trong ChatGPT hay hơn và chi tiết hơn câu trả lời mà Google cung cấp!”
Surger #2
“Tôi đã hỏi ChatGPT một số câu trả lời liên quan đến cổ phiếu và kinh tế. Tôi thấy các câu trả lời đầy đủ hơn so với hộp kiến thức (Knowledge box) mà Google cung cấp cho cùng một câu hỏi. Nó có cùng một lượng thông tin mà tôi sẽ tìm thấy sau khi nhấp vào kết quả hàng đầu của Google.”
Surger #3
“Tôi rất thích Google cho mọi thứ. AI phải vật lộn với bất cứ thứ gì không phải là kiến thức phổ biến. Tôi hỏi nó biết gì về Seven Stones Reef và nó nói rằng nó không biết về một nơi như vậy. Tôi không thể nói cho tôi biết Tracy Chapman đã giành giải Grammy bao nhiêu lần. Tôi đã hỏi nó về những tòa nhà khác có cùng phong cách với The Barbican và nó cho tôi biết tên của những tòa nhà có phong cách hoàn toàn khác như Nhà hát Opera Sydney và một tòa nhà bằng kính và gỗ ở Cardiff, xứ Wales. Khi tôi hỏi thêm thông tin về Nhà hát Opera Sydney, nó đã cho tôi một phong cách hoàn toàn khác vẫn còn sai và sau đó từ chối sửa chữa nó. Nó có thể cho tôi biết thác Iguazu cũng như Tracy Chapman đến từ đâu nhưng khi tìm kiếm thêm thông tin về cả hai điều đó, nó không có nhiều thông tin. Do thiếu câu trả lời chính xác, tôi không ấn tượng và sẽ không sử dụng nó trên một công cụ tìm kiếm ở trạng thái hiện tại.”
Surger #4
“Khía cạnh của ChatGPT mà tôi thích là chức năng trả lời câu hỏi đơn giản. Vâng, nó có thể bị hạn chế, nhưng đôi khi khi bạn đang tìm kiếm câu trả lời cho một câu hỏi, bạn không cần hàng trăm loại câu trả lời giống nhau. Một là đủ để có hiểu biết cơ bản. Tôi nghĩ rằng các từ và định nghĩa hoạt động tốt trong ChatGPT. Tôi cũng tìm thấy câu trả lời đơn giản cho “Căn bậc hai của 9 là gì” một câu trả lời đơn giản hay và giải thích đơn giản. Trường hợp Google khi được hỏi cùng một câu hỏi, đã hiển thị máy tính và trả lời “3”, nhưng sau đó là một số liên kết giải thích căn bậc hai. Tôi thấy chúng phức tạp hơn nhiều so với câu trả lời đơn giản từ Chat.”
Mối đe dọa hiện hữu của Google
Tất nhiên, có hàng triệu chi tiết trong việc xây dựng một công cụ tìm kiếm cần thiết để thu hút người dùng Google. Là một nền tảng AI nói chung, bản thân OpenAI có lẽ không quan tâm!
Nhưng công nghệ bây giờ đã ra khỏi đó. 24 năm chuyên môn về tìm kiếm của Google đã bị lật đổ bởi một công nghệ mới mà ngay cả những công ty khởi nghiệp nhỏ cũng sẽ sớm có thể sử dụng.
Các công cụ tìm kiếm mới hơn như Neeva, You.com, Kagi và Bing đã di chuyển nhanh hơn, với quyền tự do khám phá các sản phẩm và giao diện người dùng mới mà Google không thể. Trong một số lĩnh vực, trải nghiệm tìm kiếm được mô phỏng lại mà họ đang xây dựng đã đánh bại hiệu suất của Google!
Hãy tưởng tượng các mô hình AI thông minh như của Google – hoặc thông minh hơn! – trong những đôi tay đói khát hơn, tập trung vào sản phẩm hơn của họ.
Google được cho là công ty trí tuệ nhân tạo sát thủ; trong một thời gian, nó đúng là vậy. Nhưng với các mô hình ngôn ngữ biến đổi đang chạy đua về phía trước, liệu triều đại của nó – và sự thống trị với tư cách là công cụ tìm kiếm thông minh nhất thế giới – sắp bị soán ngôi?
Kỷ lục tải dữ liệu mới, phá vỡ kỷ lục cách đây 6 tháng
Bằng khoảng 230.000 GB được chuyển đi trong một giây, với một con chip.
6 Tháng sau khi các nhà nghiên cứu từ Viện Công nghệ Thông tin và Truyền thông Quốc gia Nhật Bản (NICT) lập kỷ lục truyền dữ liệu mới là 1,02 petabit/giây, một nhóm các nhà nghiên cứu từ Đại học Kỹ thuật Đan Mạch và Đại học Công nghệ Chalmers ở Thụy Điển đã phá vỡ kỷ lục đó, đạt tốc độ 1,84 Pbit/s bằng một con chip mới chỉ sử dụng một tia laser duy nhất.
Con số này tương đương với việc chuyển đi “gấp đôi tổng lưu lượng truy cập Internet toàn cầu”, chỉ trong một giây.
Mặc dù chúng ta hiện có kết nối internet tại nhà đủ nhanh để truyền phát nội dung video chất lượng như phim chiếu rạp ở độ phân giải cao hơn 4K, nhưng vẫn còn rất nhiều điều cần cải thiện khi nói đến tốc độ internet nói chung, vì bất kỳ ai cũng phải đợi vài giờ để tải một tựa game xuống thiết bị chơi game tân tiến. Internet vẫn không thể cung cấp mọi thứ chúng ta cần trong nháy mắt, nhưng vẫn có tia sáng cuối đường hầm: cụ thể là tia laser hồng ngoại chiếu xuống một bó cáp quang.
Giống như việc mở rộng dung lượng của đường cao tốc bằng cách thêm nhiều làn đường hơn (nhân tiện, việc này không làm giảm lưu lượng truy cập), tốc độ internet có thể tăng lên bằng cách thêm nhiều cáp hơn để truyền dữ liệu. Nhưng việc nâng cấp liên tục dung lượng của internet theo cách đó là không khả thi.
Các nhà nghiên cứu đang nghiên cứu các cách để cải thiện cách thức cơ sở hạ tầng hiện có chuyển dữ liệu hiệu quả hơn, đó là điều làm cho nghiên cứu phá kỷ lục này thậm chí còn ấn tượng hơn.
Theo chi tiết trong một bài báo được xuất bản gần đây trên tạp chí Nature Photonics, nhóm nghiên cứu đã phát triển một chip quang học mới có chức năng như một thứ gọi là lược tần số (frequency comb).
Ánh sáng từ một nguồn laze hồng ngoại duy nhất đi vào chip, nơi nó được phân tách thành phổ cầu vồng gồm hàng trăm màu khác nhau. Mỗi màu có thể được mã hóa bằng dữ liệu bằng cách điều chỉnh ba thuộc tính cụ thể của từng tần số: biên độ, pha và độ phân cực. Hàng trăm tần số được điều chế đặc biệt đó sau đó được kết hợp lại thành một chùm tia duy nhất, được truyền xuống một sợi cáp quang, rồi được giải mã ở đầu bên kia.
Trong các thử nghiệm, nhóm đã truyền thành công dữ liệu bằng kỹ thuật này với tốc độ 1,84 petabit/giây thông qua một sợi cáp quang gồm 37 lõi trên khoảng cách 7,9 km.
Nói một cách dễ hiểu, nếu bạn đủ may mắn để có kết nối cáp quang đến nhà của mình cung cấp tốc độ internet 1 gigabit hoặc thậm chí 10 gigabit, thì kỷ lục này tương đương với việc có kết nối 1.840.000 gigabit đến nhà bạn. Hẳn là bạn không muốn ISP của mình tính phí quá cước.
Tuy nhiên, kỷ lục thế giới mới này có vẻ như vẫn còn ‘rùa bò’ so với những gì mà các nhà nghiên cứu tin tưởng về mặt lý thuyết về tiềm năng của phương pháp chip đơn mới này, vì nó cũng có khả năng mở rộng cao. Tốc độ truyền dữ liệu có thể lên tới 100 Pbit/s, tương đương với 12.500 TB hoặc 12.500.000 GB dữ liệu được truyền mỗi giây.
Có chăng đang có một danh sách chờ chúng ta ghi tên mình vào đó?
Vì sao người ta không dùng software framework của bạn?
Hiệu ứng ban đầu rất tuyệt: Bạn nhận được hàng trăm sao bầu chọn trên GitHub và 50 lượt ủng hộ trên Reddit. Nhưng sau đó tăng trưởng bắt đầu bão hoà và rồi giảm xuống. Tại sao họ không xài software framework của bạn?
– Ba tháng trước –
“… và AI ngày nay hoàn toàn là về engineering. Bây giờ, chúng ta hãy kết thúc bài học tại đây. Nếu bạn thích kênh của chúng tôi, đừng quên…”
Bạn thở hổn hển, nhấn nút ‘tạm dừng’ trên Airpods của mình và dừng lại. Một khái niệm tuyệt vời vừa nảy nở trong tâm trí bạn:
“Mình cần xây dựng một AI framework!”, bạn thốt lên với chính mình, tràn đầy hứng thú và năng lượng đột ngột bùng nổ. Bạn tự hỏi sao mình chưa từng nghĩ về nó trước đây!
Tâm trí của bạn đang chạy đua, đặt ra các bước và chuyển các bộ phận cần thiết để đưa sản phẩm này thành hiện thực. Với đôi tay run rẩy, bạn vội vàng cởi giày chạy bộ, phớt lờ những giọt mồ hôi nhỏ đọng lại sau tai.
Thế giới xung quanh bạn đột ngột dừng lại: những chú chim ngừng hót líu lo; các xe ngừng bóp còi; những người chạy bộ khác biến mất. Nó giống như bạn đã được đưa ra khỏi sự hối hả và nhộn nhịp của thành phố, và bước vào một thế giới của khả năng và thành công.
Các ngón tay của bạn di chuyển dữ dội, vuốt và gõ vào điện thoại khi bạn gõ các ghi chú, ý tưởng và suy nghĩ ngẫu nhiên. Bạn mơ về các nhà đầu tư tiềm năng, các ứng dụng mới và tường thuật về lần ra mắt đầu tiên của bạn trên Hacker News và Product Hunt. Tim bạn đập thình thịch khi bạn viết, gần giống như bạn có thể thể hiện thành công với mỗi lần nhấn phím. Tâm trí bạn quay cuồng vì phấn khích, và không có gì, KHÔNG CÓ GÌ, có thể ngăn cản bạn lúc này. Airpods của bạn rơi xuống đất khi bạn cất cánh, hướng tới tương lai tươi sáng và thành công mới đạt được của bạn.
– Đây không phải là ngày của bạn –
Hiệu ứng ban đầu là tuyệt vời. Trong vài ngày đầu tiên kể từ khi ra mắt, hàng nghìn người dùng đã dùng thử framework của bạn và chia sẻ trải nghiệm của họ. Bạn đã nhận được hàng trăm sao GitHub và 50 lượt upvote trên r/machinelearning. Không tệ. Không tệ chút nào.
Nhưng rồi… cái gì đó xảy ra. Điều gì đó không mong đợi – tốc độ tăng trưởng người dùng bắt đầu chững lại và sau đó giảm xuống. Nhiều tuần qua đi nhưng bạn không thấy bất kỳ sự tăng trưởng nào nữa. Bạn bắt đầu lo lắng rằng phần mềm mà bạn đã dồn hết tâm huyết vào không bền vững.
Điều này không thể như vậy được. Phải có vấn đề với Google Analytics hoặc phương thức đo lường mà bạn thiết lập. Có thể giờ đang là thời điểm vui vẻ trong năm – nhiều người đang trong kỳ nghỉ và không sử dụng phần mềm của bạn khi làm việc. Bạn đã làm mọi thứ theo cuốn sách. Không có cách nào mà điều này có thể đi ra khỏi cuộc chơi sớm như vậy.
Nhưng trong sâu thẳm, trái tim bạn thắt lại. Bạn biết đây chỉ là những cái cớ mỏng manh.
Bây giờ bạn đi lang thang trên phố, đầu cúi xuống và hai tay đút túi, tâm trạng của bạn xám xịt như bầu trời nhiều mây. Bạn nghĩ lại ngày ra mắt phần mềm của mình và cảm giác phấn khích, mong đợi vào ngày hôm đó, giống như bạn sẽ ra đời một cậu bé bụ bẫm. Bạn đã tạo ra thứ gì đó mà bạn đam mê, thứ gì đó mà bạn tin tưởng, nhưng bất chấp tiếng vang và sự hiệu ứng ban đầu, nó đã thất bại. Nhưng bạn vẫn tiếp tục, quyết tâm tìm hiểu tận cùng những gì đã sai.
“Tại sao họ không sử dụng nó?” Bạn nhìn lên bầu trời và cầu xin, cố gắng hiểu chuyện gì đã xảy ra. Chúa biết bạn đã nỗ lực – có thể (chắc chắn là vậy) rất nhiều. Bạn chỉ ước mình có thể làm điều gì đó, bất cứ điều gì khác đi, để làm cho phần mềm của bạn thành công.
Cuối cùng, bạn thấy mình đang ngồi trên một chiếc ghế dài trong công viên. Mặt trời bắt đầu ló dạng sau những đám mây, gần như thể nó biết được tâm trạng của bạn và đang cố gắng thắp sáng một ngày của bạn. Bạn thở dài thườn thượt mà bạn không biết là mình đã nín thở, và nhắm mắt lại, cảm nhận ánh nắng ấm áp trên khuôn mặt và làn gió mát trên da.
Bạn ngồi trong im lặng, cân nhắc hành động tiếp theo của mình.
Biến mất.
– Kết thúc? –
3 Sai lầm phổ biến
Những câu chuyện thành công thường giống nhau; còn thất bại, ngược lại, thường là duy nhất.
Khi nói đến phần mềm như AI framework ít được phổ biến, có 3 lỗi thường thấy trong giai đoạn đầu: tập trung kém, onboarding kém và thiếu tính năng. Trong bài viết này, tôi sẽ giải thích chúng từng bước bằng hình ảnh minh họa và quan trọng nhất là chỉ cho bạn cách khắc phục chúng.
Không gian giải pháp AI
Mọi vấn đề thực đều cần một giải pháp.
Có rất nhiều vấn đề về AI, dù lớn hay nhỏ, dễ hay phức tạp; miễn là chúng có thật, tất cả chúng đều cần giải pháp.
Hãy dùng dấu chấm để đại diện cho một giải pháp. Bạn có thể hình dung không gian giải pháp AI như bên dưới:
Không gian giải pháp AI
Trên thực tế, các giải pháp không được phân bổ đồng đều. Chúng được nhóm lại. Điều này là do các vấn đề khác nhau có thể dẫn đến các giải pháp tương tự.
Ví dụ: cả phân tích tình cảm và phân loại văn bản đều có thể được giải quyết bằng một mô hình ngôn ngữ với các nhãn đào tạo khác nhau. Phân đoạn hình ảnh và phát hiện đối tượng có thể được giải quyết bằng cách đào tạo ResNet. Do đó, không gian giải pháp AI thực sự trông như thế này:
Không gian giải pháp AI thực sự
Bản chất nhóm của không gian giải pháp AI chứng minh sự tồn tại của các framework phần mềm, phần trừu tượng cung cấp chức năng chung được chia sẻ bởi một nhóm giải pháp và có thể được thay đổi có chọn lọc bằng mã bổ sung do người dùng viết, cung cấp cách thức tiêu chuẩn để xây dựng và triển khai các giải pháp.
Nếu các giải pháp được phân bổ đồng đều trong không gian giải pháp AI, thì không có mô hình chung nào có thể được trừu tượng hóa, không cần đến các framework.
Tổng thể của LF AI & Data Foundation, bao gồm 332 AI framework với tổng số 2.765.397 sao, vốn hóa thị trường là 13,3 nghìn tỷ đô la và kinh phí là 19,6 tỷ đô la.
Hãy tóm tắt mối quan hệ giữa vấn đề, giải pháp và khuôn khổ trong hình minh họa dưới đây:
Kết nối giữa Vấn đề – Giải pháp – Framework
Việc có những khái niệm minh họa rõ ràng đó giúp chúng ta nhận ra sai lầm đầu tiên khi xây framework phần mềm.
Sai lầm 1: Không tập trung vào một ngách nhỏ
Trong hình bên dưới, các bong bóng A, B, C và D đại diện cho bốn framework.
Về mật độ, dễ dàng nhận thấy rằng A > B > C > D, vì A cho phép nhiều giải pháp nhất và đáp ứng nhu cầu của hầu hết các vấn đề trong thế giới thực. D là tồi tệ nhất vì nó có những yêu cầu hư cấu không phù hợp với vấn đề thực tế.
Do đó, A sẽ có tỷ lệ chấp nhận cao nhất trong thời gian dài, trong khi D sẽ có tỷ lệ chấp nhận thấp/không có bất kể bạn gửi bao nhiêu bài đăng cho Hacker News và bạn nhận được bao nhiêu sao trên GitHub.
Focus tốt rất là quan trọng
“Ai lại khờ đến mức chọn C hay D?” bạn có thể hỏi.
Sự thật đáng lo ngại là nếu bạn nảy ra một ý tưởng lung linh trong lúc chạy bộ, hoặc nếu bạn đang xây dựng một framework mới khi đọc bài viết này, thì rất có thể bạn đang ở C hoặc D. Đây là lý do:
Bạn không thể nhìn thấy bức tranh toàn cảnh về không gian giải pháp AI. Không gian quan sát của bạn bị giới hạn bởi kiến thức và chuyên môn của bạn về AI và ngành.
Các thị trường đằng sau A và B là những đại dương đầy cá lớn (và đói khát). Bạn không có tài nguyên để bơi nhanh như vậy hoặc cắn mạnh như vậy.
Kinh nghiệm và kiến thức của bạn khiến bạn đánh giá quá cao số lượng giải pháp và yêu cầu trong C và D.
Là một kỹ sư, bạn dễ dàng bị ám ảnh bởi chính ý tưởng về framework, quên rằng nó không có bất kỳ ứng dụng thực tế nào trong thế giới thực.
Trong bất kỳ trường hợp nào, đừng ở D. Đừng buồn nếu bạn ở C. Không gian giải pháp rất lớn và năng động; nó liên tục thay đổi theo thời gian. Các vấn đề và yêu cầu mới xuất hiện; yêu cầu cũ sẽ không cần thiết.
Một ví dụ điển hình là thị trường AI sáng tạo vào năm 2021 so với năm 2022.
Chúng tôi hiếm khi thấy bất kỳ tìm kiếm nào về AI sáng tạo/sáng tạo trở lại vào năm 2021 và hiện tại nó đang bùng nổ.
Giả sử bạn có một focus tốt và framework của bạn về mặt khái niệm đáp ứng một số nhu cầu thực tế. Xin chúc mừng! Hãy tiếp tục với 2 cái bẫy phổ biến khác mà bạn có thể rơi vào.
Sai lầm 2: Trải nghiệm onboarding và tài nguyên giáo dục nghèo nàn
Hãy phóng to một “bong bóng” framework:
Có thể quan sát và không thể quan sát đối với user
Điều đầu tiên cần nhấn mạnh là khoảng cách kiến thức giữa bạn và người dùng của bạn. Framework của bạn có thể bao gồm tất cả các chức năng mà người dùng cần. Tuy nhiên, do thiếu tài liệu và trải nghiệm onboarding kém, người dùng không biết framework của bạn có thể giải quyết vấn đề của họ. Hậu quả? Khả năng đón nhận thấp.
Không giống như bạn (với tư cách là người biết tất cả về framework của mình), người dùng quan sát framework từ một góc độ hoàn toàn khác: họ chỉ có thể tìm hiểu nó từ các tài liệu, hướng dẫn, tài liệu tham khảo, video và code mà bạn cho họ xem. Trên thực tế, những người dùng thiếu kiên nhẫn chỉ học được từ các tài nguyên được viết tốt. Nếu họ cảm thấy việc onboarding khó khăn, họ sẽ ngay lập tức từ bỏ và tìm kiếm các giải pháp thay thế. Họ không quyết tâm và đam mê như bạn đâu.
Một sai lầm phổ biến mà các nhà phát triển mắc phải là bỏ qua tầm quan trọng của tài nguyên giáo dục và DocOps khi xây dựng framework. Họ ngây thơ tin rằng miễn là họ commit một function cho nhánh chính, thì người dùng sẽ sử dụng nó; miễn là bạn viết một vài từ khóa mơ hồ về một tính năng trong tin commit, người dùng sẽ hiểu tính năng đó; miễn là bạn thực hiện các thay đổi đột phá, người dùng sẽ điều chỉnh mã của họ cho phù hợp.
Họ không vậy đâu.
Họ sẽ không mất thời gian đào sâu vào các bài kiểm thử đơn vị để hiểu cách thức hoạt động của một chức năng.
Họ sẽ không đọc câu đố về tin commit của bạn và tiêu đề của pull request để đoán tính năng mới.
Người dùng sẽ không kiểm tra các bộ lọc thư rác để đọc bản tin mà bạn thông báo về các thay đổi.
Người dùng sẽ không đọc các tài liệu được viết kém với các đoạn mã không thể thực thi được và báo cáo lỗi cho bạn.
Người dùng sẽ không lãng phí thời gian của họ vào phần mềm của bạn nếu bạn không “lãng phí” thời gian của mình vào việc giáo dục họ.
Vì vậy, bạn đã tìm mọi cách để thu nhỏ lỗ hổng kiến thức: tài liệu hay, hướng dẫn chi tiết, video hướng dẫn, gặp gỡ offline/online, thuyết trình hội nghị, tweet hàng ngày và bản tin hàng tuần.
Đó là điều xử lý. Và bạn đã sửa focus của mình (từ sai lầm thứ nhất). Nhưng bạn vẫn thấy việc khả năng đón nhận thấp. Bây giờ là mấy giờ?
Sai lầm 3: Các tính năng lỗi thời và thiếu sót
Không thể giải quyết hầu hết vấn đề
AI đang phát triển nhanh chóng và thị trường có tính cạnh tranh cao. Mặt khác, bạn đã lỗi thời. Bị đào thải. Một di vật.
Mỗi ngày, hàng trăm bài báo mới được xuất bản trên ArXiv; bảng xếp hạng điểm chuẩn được làm mới; xu hướng kho lưu trữ mới trên GitHub. Nếu bạn không thể cập nhật kiến thức của mình, framework của bạn sẽ nhanh chóng trở nên lỗi thời. Nó sẽ không thu hút sự chú ý của người dùng nữa.
So với sai lầm thứ hai, nơi người dùng không biết họ có thể làm điều đó với framework của bạn, thì trong trường hợp này, người dùng biết họ không thể làm gì với framework của bạn. Game over.
Mệt mỏi vì phải cạnh tranh? Vâng, nhưng bạn đã chọn nó, phải không? Đó là thị trường nóng hổi tràn ngập cơ hội và tiền. Bạn sẽ đối phó với sức nóng đó hay bị cóng và bỏ chạy? Còn giấc mơ insert_country_name của bạn thì sao?
Cách khắc phục những sai lầm đó
Lịch sử đầy sai lầm; đó là cách chúng ta học.
Đừng sợ những sai lầm đó. Đối đầu với chúng chỉ là một phần trong cuộc sống của bạn.
Bạn không nên e sợ những sai lầm đó, nhưng nếu quản lý nói thế này với bạn, có lẽ bạn nên xem xét lại sự nghiệp của mình.
Bạn không nên e sợ những sai lầm đó, nhưng nếu quản lý nói thế này với bạn, có lẽ bạn nên xem xét lại sự nghiệp của mình.
Bước đầu tiên là nhận ra bạn đã phạm sai lầm nào. Nghe có vẻ dễ dàng, nhưng dưới áp lực rất lớn của khả năng đón nhận thấp, rất có thể bạn sẽ đi đến kết luận rằng mình đã phạm phải tất cả sai lầm.
Việc thú nhận rằng bạn đã mắc phải tất cả những sai lầm cũng dễ như việc bảo rằng “nó không hiệu quả”. Không phá vỡ nó, lời thú nhận này dẫn đến không có điểm hành động. Tùy thuộc vào bạn để ưu tiên và giải quyết từng vấn đề một, với nguồn lực hạn chế của bạn.
Nhắm mục tiêu vì nhu cầu lớn hơn
Nếu bạn tập trung không tốt, bạn cần phải nhắm lại mục tiêu. Tìm hiểu về những gì mọi người cần và từ bỏ nỗi ám ảnh về việc tạo ra một framework. Xây dựng thêm các giải pháp đặc biệt và nhận ra các kết nối của chúng trước khi động đến framework. Làm thêm nghiên cứu người dùng và phân tích thị trường, tìm ra miếng bánh đủ lớn và thú vị.
Cũng có thể sự tập trung có chủ ý của bạn là đủ tốt, nhưng cách kể chuyện và thương hiệu của bạn quá tệ, điều này khiến người dùng nghĩ rằng framework không phù hợp với nhu cầu của họ. Trong trường hợp này, hãy xem xét lại câu chuyện, quảng cáo các tính năng thực sự quan trọng và che giấu những điểm phức tạp mà không ai (ngoài bạn) quan tâm.
Sửa đổi tài liệu để cải thiện trải nghiệm onboarding
Nếu trải nghiệm onboarding của bạn kém, bạn phải sửa đổi tài liệu và tổ chức các tài nguyên giáo dục. Một framework phần mềm cần tài nguyên giáo dục ở nhiều cấp độ – tham chiếu API, hướng dẫn, đoạn mã, các ứng dụng cấp cao và các đối sánh ngành. Nếu chỉ có một tham chiếu API được tạo tự động từ các chuỗi tài liệu là không đủ.
Hãy nghĩ lại cách bạn học ngôn ngữ thứ hai: Bạn sử dụng từ điển để tra cứu từ vựng (tức là tham chiếu API). Cuốn sách dành cho năm đầu tiên của bạn chứa đầy những cuộc trò chuyện cơ bản hàng ngày (tức là các đoạn mã) để dạy bạn cách chào hỏi và mua đồ. Cuốn sách năm thứ hai của bạn có những câu chuyện dài hơn (tức là các ứng dụng cấp cao) để giúp bạn nắm vững ngữ pháp và viết mô tả. Để nâng cao kỹ năng của mình, bạn xem phim hoặc đọc sách của các nhà văn nổi tiếng (tức là tiêu chuẩn ngành).
Người dùng của bạn cũng vậy. Vào ngày đầu tiên, họ chỉ là người mới. Nhưng theo thời gian, họ tiến bộ bằng cách sử dụng kiến thức bạn cung cấp. Nhiệm vụ của bạn là giúp người dùng phát triển nhanh nhất có thể bằng cách cung cấp tất cả các cấp tài nguyên mà họ cần. Khi họ đạt đến trình độ bậc thầy, bạn có thể thư giãn một chút, vì lúc này họ có thể bênh vực người khác; họ có thể sản xuất nội dung giáo dục chất lượng cao mà không cần bạn.
Đừng chỉ dính vào văn bản; đi đa phương thức! Hãy thử podcast, video, buổi gặp mặt và thuyết trình tại hội nghị nếu bạn có tài nguyên.
Tiến nhanh với học tập suốt đời
Nếu các tính năng của bạn đã lỗi thời, bạn cần tìm hiểu thêm về tính năng hiện đại nhất và cập nhật framework của mình. Tìm hiểu API, mẫu thiết kế và thuật toán từ các framework mã nguồn mở phổ biến. Theo dõi các pull request mới của họ và các tính năng mới trong ghi chú phát hành và suy nghĩ xem có hợp lý không khi thêm chúng vào framework. Luôn cập nhật kiến thức và cơ sở mã của bạn. Thỉnh thoảng, hãy thực hiện một số hồi tưởng về lộ trình tính năng: bạn có đang đi đúng hướng không? Bạn có thêm tính năng này vì mọi người thực sự cần nó không?
Trong thế giới mã nguồn mở, không có lợi thế tuyệt đối. Bạn luôn có thể học hỏi từ các phần mềm khác và tất cả nằm ở tốc độ. Nếu bạn tụt lại phía sau nhưng di chuyển nhanh hơn cả, cuối cùng bạn có thể đuổi kịp. Nếu bạn đang dẫn đầu nhưng lại ngừng cập nhật, một kẻ săn mồi sẽ biến bạn thành bữa trưa. Tốc độ là huyết mạch của phần mềm mã nguồn mở.
“Thách thức kỹ thuật trong thế giới thực’ là loạt bài trong đó tôi diễn giải các case study thú vị trong lĩnh vực kỹ thuật phần mềm (software engineering) hoặc quản lý kỹ thuật (engineering management) từ các công ty công nghệ. Rất mong bạn sẽ học được nhiều điều mới mẻ trong các bài viết này khi chúng ta đi sâu vào các khái niệm mà chúng chứa đựng.
Trong bài này, tôi đã thực hiện một cách tiếp cận hơi khác so với các bài trước, bằng việc đặt câu hỏi cho tác giả các bài blog về kỹ thuật, để chia sẻ các chi tiết chưa được công bố trước đây cũng như bài học từ họ.
4 Tình huống lựa chọn công nghệ
Hôm nay, chúng ta sẽ tìm hiểu:
Trello chọn Kafka thay vì RabbitMQ để nhắn tin. Trello đã sử dụng RabbitMQ để chạy websocket trong nhiều năm. Tuy nhiên, sau khi nhận thấy các vấn đề về độ tin cậy và mức sử dụng tài nguyên cao, họ đã quyết định giải quyết vấn đề này – và đánh giá 5 giải pháp thay thế.
Tại sao Birdie chuyển sang Micro Frontends. Birdie là một ứng dụng web phức tạp dành cho các nhà cung cấp dịch vụ chăm sóc sức khỏe. Họ đã thất vọng vì các bài kiểm thử chạy chậm mỗi khi có sự thay đổi, vì vậy họ đã nghiên cứu cách mô đun hóa cơ sở mã và giảm sự liên kết chặt chẽ giữa các phần của nó.
Tại sao MetalBear chọn Rust. Là một công ty mới thành lập được 6 tháng, MetalBear đã chọn khá nhiều ngôn ngữ lập trình cho các stack của mình và đã chọn Rust. Ngoài hiệu suất, các cân nhắc về mặt tuyển dụng cũng là một phần của quyết định.
Tại sao Motive chuyển sang Kotlin Multiplatform Mobile (KMM). Nhóm đã xây dựng ứng dụng Motive Fleet cho các doanh nghiệp vận tải, trên iOS và Android. Tuy nhiên, iOS luôn chậm hơn 1-2 tháng và logic nghiệp vụ hơi khác so với Android. Họ đã khám phá các phương án thay thế để chia sẻ logic nghiệp vụ giữa iOS và Android.
1. Trello chọn Kafka thay vì RabbitMQ
Để chạy chức năng websocket, Trello đã sử dụng phương thức Redis Pub/Sub cho đến năm 2015, sau đó là RabbitMQ từ năm 2015-2018. Vào năm 2018, đã xảy ra sự cố phân vùng mạng với RabbitMQ buộc họ phải đánh giá lại lựa chọn công nghệ.
Tổng quan ngắn về RabbitMQ. Để hiểu vấn đề mà nhóm Trello gặp phải với RabbitMQ, trước tiên chúng ta cần hiểu một số điều cơ bản về RabbitMQ:
Exchange (sàn): đây là entry point mà tin nhắn được xuất bản.
Queue (hàng đợi): Exchange được liên kết với một hoặc nhiều message queue (hàng đợi tin nhắn). Một hàng đợi tin nhắn theo nghĩa đen.
Binding (liên kết): kết nối giữa Exchange và Queue. Các binding có thể có các khóa binding (binding key).
Routing policy (chính sách định tuyến): chiến lược về cách exchange xử lý định tuyến.
Cách các exchange, binding, queue và routing policy được kết nối trong RabbitMQ
Có bốn chính sách định tuyến phổ biến mà RabbitMQ hỗ trợ:
Fanout: gửi tất cả các tin nhắn đến Exchange và tất cả các Queue liên kết với nó, mà không quan tâm các khóa định tuyến (routing keys). Cách tiếp cận này bỏ qua các khóa định tuyến.
Direct: tin nhắn được gửi đến hàng đợi mà khóa định tuyến khớp với khóa liên kết (binding keys).
Topic: cho phép kết hợp ký tự đại diện giữa khóa định tuyến và khóa liên kết. Ví dụ: bạn có thể thiết lập chủ đề về “tác vụ” và điều này sẽ định tuyến đến cả liên kết “task.important” và “task.unimportant”.
Header: sử dụng tiêu đề của yêu cầu để quyết định định tuyến.
Các Queue có thể tạm thời trong RabbitMQ, nghĩa là chúng có thể bị hủy ngay khi kết nối TCP tạo ra chúng đóng lại.
Việc triển khai websocket của Trello hỗ trợ đăng ký và hủy đăng ký và từ một kênh thông báo, có thể dành cho ban quản lý, thành viên, tổ chức, thẻ của Trello hoặc các mô hình dữ liệu Trello khác. Model_id được sử dụng làm mã định danh.
Kiến trúc ban đầu. Trello đã sử dụng RabbitMQ để phân đoạn các tin nhắn gửi đến vào một trong 16 queue. Ở hậu trường, họ đã chạy 3 phiên bản (instance) để xử lý các tin nhắn inbound phân phối đến một trong 16 queue. Sau đó, họ sử dụng plugin Shovel của RabbitMQ để ánh xạ 16 queue này thành 4 cụm outbound. Mỗi cụm tin nhắn gửi đi chạy trên 3 phiên bản và xử lý 4 hàng đợi outbound.
Kiến trúc websocket của Trello, được xây dựng trên RabbitMQ giai đoạn 2015-2018.
Vấn đề: gián đoạn cụm và hiệu suất. Team Trello nhận thấy các sự cố lớn xảy ra khi một cụm gặp sự cố do gián đoạn mạng hoặc khi một thành viên của cụm gặp sự cố. Khi điều này xảy ra, họ phải thiết lập lại toàn bộ; loại bỏ tất cả các socket và buộc các máy khách web kết nối lại. Tệ hơn nữa, các tin nhắn biến mất trong quá trình thiết lập lại này.
Các vấn đề với hạ tầng này là cách dữ liệu biến mất trong các trường hợp lỗi đơn lẻ hoặc lỗi mạng.
Một vấn đề khác là việc tạo queue và binding trong RabbitMQ chậm và tốn nhiều tài nguyên. Trong quá trình thiết lập lại hoàn toàn, phải mất khoảng thời gian đáng kể để tạo các queue và binding này.
Lựa chọn thay thế. Vì vậy, team Trello đã tìm kiếm các giải pháp thay thế cho RabbitMQ và đánh giá từng giải pháp dựa trên yêu cầu của họ, chẳng hạn như:
Khả năng chuyển đổi dự phòng
Gửi tin nhắn theo thứ tự trên mỗi phân đoạn
Hỗ trợ phân phối tin nhắn fanout
Độ trễ thấp
Hỗ trợ thông lượng yêu cầu 2.000 tin nhắn/giây
Nhóm đã khám phá 5 lựa chọn thay thế nhắn tin sau:
Kafka
Amazon SNS (Dịch vụ thông báo đơn giản) + SQS (Dịch vụ hàng đợi đơn giản)
Amazon SNS + FIFO (vào trước ra trước) SQS
Amazon Kinesis: dịch vụ truyền dữ liệu không cần máy chủ
Redis Streams
Sau khi đánh giá các tùy chọn, nhóm nhận thấy Kafka và Redis Streams phù hợp với yêu cầu của họ và chọn Kafka vì Redis Streams vẫn ở trạng thái không ổn định: chức năng Streams chỉ được cam kết trong một nhánh được đánh dấu là ‘không ổn định’. Nhóm Trello đã xây dựng lại kiến trúc websocket trên Kafka và hiện sử dụng kiến trúc chủ-khách.
Thật thú vị khi thấy rằng điểm yếu của công nghệ có thể không bộc lộ trong nhiều tháng hoặc thậm chí nhiều năm. Nhóm Trello đã chuyển sang RabbitMQ sau nhiều năm sử dụng giải pháp Redis Pub/Sub. Vì vậy, tại sao họ chuyển ra khỏi nó? Tôi đã hỏi kỹ sư phần mềm Sebastian Mayr – người viết bài – và anh ấy chia sẻ rằng vấn đề lớn nhất mà họ gặp phải là Redis phân cụm không đảm bảo phân phối trong trường hợp xảy ra sự cố mạng hoặc chuyển đổi dự phòng.
Khi Trello phát triển, vấn đề các node bị lỗi trở nên rõ ràng hơn, cũng như chi phí phần cứng để vận hành hạ tầng Websocket. Sau ba năm, Trello quyết định khám phá xem liệu họ có thể giải quyết cả hai vấn đề bằng một dịch vụ nhắn tin khác hay không.
Tôi thích cách nhóm kỹ sư đánh giá kỹ lưỡng nhiều tùy chọn nhắn tin. Họ liệt kê một loạt các lựa chọn thay thế và xem xét kỹ lưỡng từng lựa chọn, dựa trên các yêu cầu và vấn đề của riêng họ.
Điều tôi còn thiếu trong bài báo của Sebastian là thông tin chi tiết về chính quá trình chuyển đổi đó; Tôi chỉ có thể cho rằng công việc này không hề tầm thường. Một điều làm cho việc chuyển đổi như vậy trở nên dễ dàng hơn là ít nhất nó không phải là di chuyển dữ liệu. Vì vậy, tôi cho rằng nhóm có thể thử nghiệm kiến trúc mới trong thực tế bằng cách ẩn chức năng hoặc bằng cách triển khai cho số lượng người dùng ngày càng tăng.
2. Tại sao Birdie chuyển sang Micro Frontends
Birdie là một nền tảng công nghệ chăm sóc sức khỏe tại nhà, có trụ sở tại London. Công ty đã gọi vốn thành công vòng Series B trị giá 30 triệu đô la vào tháng 6 năm nay. Họ đã chia sẻ hành trình chuyển sang Micro Frontends trong bài blog gần đây. Tôi đã nói chuyện với tác giả của bài đăng này, Steve Heyes, một kỹ sư phần mềm tại Birdie.
Micro Frontends là một mẫu kiến trúc hơi giống với microservice. Thay vì giữ tất cả cơ sở mã của Ứng dụng một trang (SPA – Single Page Appplication) trong một cơ sở mã nguyên khối duy nhất, Micro Frontends chia cơ sở mã thành các thành phần riêng biệt được giữ với nhau bằng một trình bao (shell):
Micro Frontends là một cách tiếp cận kiến trúc để cấu trúc các ứng dụng web.
Birdie team có Ứng dụng một trang được tích hợp sẵn trong React, nói chuyện với một API ở backend. Đây là một ảnh chụp màn hình giao diện của ứng dụng:
Ứng dụng Birdie React. Một ứng dụng được xây dựng cho chăm sóc sức khỏe tại nhà.
Khi ứng dụng phát triển, nhóm kỹ sư nhận thấy một vấn đề ngày càng rõ ràng hơn: các bài kiểm thử mất nhiều thời gian để chạy. Đối với mỗi và mọi thay đổi, tất cả các kiểm thử trong cơ sở mã đều phải chạy, bao gồm một số ít bài kiểm thử đơn vị, nhiều bài kiểm thử tích hợp và một loạt kiểm thử từ đầu đến cuối bằng Cypress. Số lượng lớn các kiểm thử tự động này bắt đầu làm chậm quá trình phát triển, đó là lúc nhóm nảy ra ý tưởng chia ứng dụng thành các phần độc lập bằng cách sử dụng Micro Frontends, mà có thể được kiểm thử độc lập.
Steve rất tử tế khi chia sẻ thêm chi tiết về quá trình này. Anh nói:
‘Vào tháng 7 năm 2021, team đã chạy “sprint cải tiến kỹ thuật.” Mục tiêu là để giải quyết các vấn đề nền tảng đã tích tụ trong nhiều năm.
‘Trong tuần này, ba kỹ sư frontend đã xây dựng thành phần shell và biến đổi thành công một tình huống khá riêng biệt để trở thành Micro Frontend đầu tiên. Team đã chọn thành phần điều hướng nằm trên cùng của tất cả các trang trên ứng dụng web và code đã đủ tách biệt. Cũng trong tuần đó, team cũng trích xuất một tính năng khác, nhỏ hơn là Micro Frontend thứ hai. Trong cả hai trường hợp, rất ít khi cần tới refactoring, vì hầu hết công việc là chuyển mã hiện có sang cấu trúc mới.
‘Sau đó là hướng dẫn những người còn lại trong team về Micro Frontends. Thay vì chuyển sang một công cụ tái cấu trúc lớn, các kỹ sư đã thực hiện công việc tái cấu trúc ban đầu đã hướng dẫn đồng nghiệp về lý do tại sao Micro Frontends lại hữu ích và cách sử dụng chúng. Nhóm đã chia sẻ tài liệu, gửi các video hướng dẫn và tổ chức một số buổi “lunch and learn”. Khoảng một tháng sau, tất cả các kỹ sư frontend đã bắt kịp các khái niệm.
‘Trong tương lai, ý tưởng là xây dựng các tính năng mới cho ứng dụng trong Micro Frontend của riêng họ. Làm điều này ngay từ đầu sẽ dễ dàng hơn rất nhiều so với việc quay lại và cấu trúc lại mã hiện có. Trong năm qua, một số Micro Frontend mới đã được thêm vào khi sản phẩm phát triển.
Cấu trúc của ứng dụng web Birdie, sau khi giới thiệu Micro Frontends. Theo thời gian, mỗi tính năng có thể trở thành Micro Frontend của riêng nó và Điều hướng chính và Điều hướng phụ cũng là các thành phần riêng của chúng.
‘Quá trình chia nhỏ ứng dụng’ cũ’ thành Micro Frontends chậm hơn chúng tôi mong đợi. CÓ 2 lý do cho điều này là:
Khái niệm ‘trách nhiệm duy nhất’ là điều không phải tất cả các phần của ứng dụng đều tuân theo. Là một công ty khởi nghiệp, chúng tôi cần giao hàng nhanh, điều này khiến chúng tôi phải đánh đổi trong ứng dụng. Khi chúng tôi xây dựng SPA đầu tiên, chúng tôi chưa bao giờ tưởng tượng rằng mình sẽ cần chia nhỏ nó thành các ứng dụng nhỏ hơn. Chính vì điều này mà việc bỏ chọn các tính năng phức tạp hơn, nhưng không có nghĩa là không thể; nó chỉ làm việc nhiều hơn là sao chép mã hiện có từ tệp này sang tệp khác.
Chúng tôi phụ thuộc vào Redux để quản lý trạng thái chung. Khi SPA đầu tiên được xây dựng lần đầu tiên, chúng tôi đã sử dụng Redux và Redux-Saga – trình quản lý tác dụng phụ của Redux – để phát huy hết lợi thế của chúng. Tuy nhiên, vào thời điểm đó, đây là một quyết định đúng đắn, điều đó có nghĩa là rất nhiều logic kinh doanh của chúng tôi đan xen với nhau và việc bỏ chọn một tính năng cho thành phần của chính nó thường phải tái cấu trúc và viết lại rất nhiều.
‘Trong tương lai, chúng tôi sẽ loại bỏ các tính năng phụ thuộc vào Redux, trong đó một ví dụ điển hình là mã phân tích của chúng tôi, được sử dụng để ghi lại các tương tác của người dùng dựa trên các hành động của Redux.
‘Tuy nhiên, chúng tôi vẫn ghi nhớ mục tiêu chính của ứng dụng của chúng tôi là gì. Người dùng sẽ có thể hoàn thành các công việc họ cần. Đây là thước đo thành công đầu tiên của chúng tôi và mọi thứ, bao gồm cả kiến trúc ứng dụng, sẽ xuất hiện sau đó.”
Quyền tự chủ cho các nhóm là một lý do khác khiến Birdie chuyển sang Micro Frontends – và tôi không ngạc nhiên khi họ làm như vậy. Tôi thấy có sự tương đồng thú vị giữa microservice dành cho team backend và Micro Frontend cho team frontend, về cách những phương pháp này giúp các nhóm tự chủ hơn.
Các vấn đề với các ứng dụng backend hoặc frontend nguyên khối là mã được liên kết chặt chẽ, các bài kiểm thử có thể mất nhiều thời gian để chạy và việc thực hiện một thay đổi duy nhất trong ứng dụng có thể làm hỏng thứ gì đó, ở đâu đó không mong muốn.
Cả Micro Frontends và microservice đều giới thiệu nhiều giao diện giữa các phần của ứng dụng. Và miễn là các nhóm tôn trọng các giao diện này, họ có thể di chuyển nhanh hơn trong các phần mã của mình và ít lo lắng hơn về các Micro Frontends. Nhưng một nhược điểm rõ ràng có thể là nhiều nhóm “phát minh lại bánh xe” hoặc sử dụng các cách tiếp cận khác nhau để xây dựng Micro Frontends tương ứng của họ. Mặt khác, thật khó để vừa có quyền tự chủ vừa có cách làm việc chung.
Steve đã lưu ý một điều thú vị trong cuộc trò chuyện, đó là monorepos có thể giảm tải nhận thức khi chuyển ngữ cảnh, không chỉ với microservice mà còn với Micro Frontends. Bằng việc có tất cả mã của các thành phần khác nhau trong cùng một cơ sở mã – điều này giúp bất kỳ kỹ sư nào cũng dễ dàng duyệt qua chúng và thực hiện các thay đổi – tự nhiên có thể dẫn đến các thực hành tương tự giữa các nhóm, đặc biệt nếu có quá trình đánh giá mã diễn ra giữa các nhóm đang làm việc trên các Micro Frontend khác nhau.
Như với bất kỳ sự lựa chọn kiến trúc nào, có sự đánh đổi trong mỗi cách tiếp cận. Tôi thấy use-case của Birdie rất thú vị, đặc biệt là vì số lượng kiểm thử được chạy trong các thay đổi đã kích hoạt việc tìm kiếm các tùy chọn để chia nhỏ cơ sở mã.
3. Tại sao MetalBear quyết định sử dụng Rust
Metalbear là công ty khởi nghiệp xây dựng các công cụ nguồn mở dành cho backend developer. Công ty chỉ mới được thành lập vào tháng 4 năm nay và là một nhóm gồm 6 kỹ sư phần mềm rải rác trên toàn cầu, ở Brazil, Canada, Đức và Israel. Họ đã huy động được khoảng 1 triệu đô vòng tiền hạt giống (pre-seed).
Sản phẩm đầu tiên của họ là Mirrord. Phần mềm cho phép các kỹ sư phần mềm chạy các quy trình cục bộ, chẳng hạn như môi trường staging, trong môi trường đám mây mà không gặp rắc rối khi triển khai lên staging. Tôi biết về công ty sau khi vị đồng sáng lập, Aviram Hassan, viết một bài blog về lý do họ chọn Rust. Tôi thấy kinh nghiệm của một công ty khởi nghiệp nhỏ là một tình huống nghiên cứu thú vị.
Khi bắt đầu phát triển mirrord, nhóm không chọn ngôn ngữ nào trước. Thay vào đó, ba trong số bốn thành phần chính của nó – Agent,Layer, CLI và VS Code extension – mỗi cái đều sử dụng Rust vì những lý do khác nhau.
Bốn thành phần của mirrord. Nguồn ảnh gốc: MetalBear blog.
Dưới đây là những cân nhắc cho từng thành phần:
1. Agent: thành phần đóng vai trò đại diện cho người dùng
Chuyển đổi namespace. Namespace bao gồm Linux namespace và networking namespace. Mirrored kết nối các quy trình cục bộ với một pod từ xa (Kubernetes), hoạt động này thực hiện bằng cách sinh ra một agent trên cùng một node với nhóm hiện có. Sau đó, agent sinh ra các luồng cụ thể trong cùng một namespace của pod hiện tại. Bằng cách sử dụng cùng một namespace, agent được sinh ra có thể truy cập cùng tài nguyên mạng, tài nguyên tệp và tài nguyên quy trình. Làm việc với các Linux namespace dễ dàng hơn ở một số ngôn ngữ so với các ngôn ngữ khác. Nó dễ dàng hơn với Rust.
Mức chiếm dụng bộ nhớ nhỏ. Nhiều nhà phát triển phải làm việc trong cùng một môi trường bằng cách giảm thiểu tác động đến hiệu suất. Để làm như vậy, cần có một dung lượng bộ nhớ nhỏ, nghĩa là sử dụng một ngôn ngữ mà không cần bộ thu gom rác bộ nhớ. Rust là một trong những ngôn ngữ như vậy.
Phân luồng an toàn. Dữ liệu cần được di chuyển an toàn giữa các luồng, vì vậy nhóm cần một ngôn ngữ với các nguyên mẫu xung quanh việc quản lý tác vụ và đồng thời an toàn. Rust hỗ trợ Gửi để chuyển loại an toàn cho luồng và Đồng bộ hóa cho các loại để chia sẻ tham chiếu giữa các luồng.
2. Layer: thư viện dùng chung chạy trong local service. Kết nối các hoạt động đầu vào/đầu ra và ủy quyền chúng cho agent.
Yêu cầu cấp thấp. Do nhu cầu thao tác với socket và mọi thứ ở cấp hệ thống tệp, một ngôn ngữ cấp thấp có vẻ là lựa chọn phù hợp cho nhóm.
Mức chiếm dụng bộ nhớ nhỏ. Tương tự như Agent, mục tiêu là giảm thiểu việc sử dụng bộ nhớ.
3. CLI: đưa lớp vào quy trình mục tiêu.
Nhị phân độc lập (standalone binaries). Nhóm đã tìm kiếm một ngôn ngữ trong đó CLI sẽ được tạo dưới dạng tệp thực thi độc lập, lý tưởng nhất là không có phần phụ thuộc.
Bằng chứng trong tương lai. Ngay bây giờ, việc triển khai CLI sẽ trở nên tầm thường khi sử dụng hầu hết mọi ngôn ngữ. Tuy nhiên, nhìn về tiêm tinh vi hơn như sử dụng ptrace, lệnh gọi hệ thống Unix, một ngôn ngữ cấp thấp hơn như Rust cảm thấy phù hợp hơn trong tương lai.
4. Tiện ích VS Code: CLI cho Visual Studio Code
JavaScript. VS Code chỉ hỗ trợ JavaScript, vì vậy việc lựa chọn rất dễ dàng.
Làm cho việc tuyển dụng trở nên dễ dàng hơn bằng cách “Rust-only”. Là một startup, công nghệ có thể giúp cho việc tuyển kỹ sư phần mềm dễ hoặc khó hơn nhiều. Như Aviram đã nói:
“Tôi có cảm giác rằng việc cơ sở mã của chúng tôi chủ yếu ở Rust sẽ giúp việc tuyển dụng kỹ sư dễ dàng hơn rất nhiều. Là một người đam mê Rust, tôi rất thích làm việc ở một nơi mà tôi có thể làm việc với Rust thường xuyên và tôi nghi ngờ rằng nhiều người khác cũng cảm thấy như vậy.”
Câu chuyện của MetalBear là một lời nhắc nhở rằng những lựa chọn công nghệ ban đầu sẽ định hình văn hóa kỹ thuật của công ty – và tuyển dụng những khách hàng tiềm năng! Thực tế là, MetalBear có thể đã chọn viết phần lớn phần mềm của mình bằng C++, Go, hoặc C#, Java hoặc gần như bất kỳ ngôn ngữ nào khác mà mã có thể được tối ưu hóa để hoạt động hiệu quả. Tôi không nghi ngờ gì về việc họ có thể tạo ra mirrord chạy được bằng bất kỳ ngôn ngữ nào, ngay cả khi một số ngôn ngữ sẽ cần nhiều cách giải quyết hơn – bao gồm cả việc có thể chuyển sang kết nối chức năng ở cấp độ Hợp ngữ và sau đó điều chỉnh hiệu suất.
Tuy nhiên, bằng cách chọn ngôn ngữ một cách có mục đích, công ty đã đưa ra lựa chọn có tác động lâu dài đến văn hóa kỹ thuật, tuyển dụng và các lựa chọn trong tương lai.
Có vẻ như Rust đang trở nên phổ biến nhờ đạt được sự cân bằng tốt giữa việc cung cấp các tính năng cấp thấp theo cách thân thiện hơn, chẳng hạn như C hoặc C++. Nó cũng là ngôn ngữ mà nhiều kỹ sư backend muốn học và cân nhắc điều này là một bước đi thông minh; nghĩ xa hơn việc thuê những kỹ sư phần mềm đầu tiên.
4. Tại sao Motive chuyển sang Kotlin Multiplatform Mobile
Motive – trước đây là KeepTruckin – là một nền tảng hoạt động tự động cho lĩnh vực hậu cần. Họ xây dựng nhiều sản phẩm phần mềm hỗ trợ hoạt động vận tải đường bộ, quản lý đội xe và các use case khác mà phần cứng và phần mềm có thể giúp cải thiện cách thức hoạt động của các doanh nghiệp vận chuyển. Công ty đã huy động được khoản tài trợ Series F trị giá 150 triệu đô la vào tháng 5 năm nay.
Sunil Kumar, nhân viên kỹ sư phần mềm của công ty, đã viết một bài blog vào tháng 7 này về lý do tại sao nhóm kỹ sư quyết định chuyển sang Kotlin Multiplatform Mobile (KMM) như một cách tiếp cận để chia sẻ nhiều mã hơn giữa Android và iOS. Anh cũng nêu chi tiết kinh nghiệm của họ với sự thay đổi.
Nhóm kỹ sư xây dựng ứng dụng Motive Fleet muốn đảm bảo tính nhất quán trong logic kinh doanh trên các ứng dụng dành cho thiết bị di động và để thực hiện phát triển nhanh hơn. Họ đã đánh giá ba phương pháp phát triển đa nền tảng:
Flutter: một khung đa nền tảng do Google xây dựng bằng ngôn ngữ lập trình Dart, ngôn ngữ này cũng được Google phát triển.
React Native: một framework đa nền tảng do Facebook xây dựng ban đầu. Nó sử dụng ngôn ngữ lập trình JavaScript và có một số điểm tương đồng với khung web React.
KMM: Một khung được xây dựng bởi Jetbrains. Nó sử dụng ngôn ngữ lập trình Kotlin.
Nhóm đã so sánh thêm, xem xét các khía cạnh hỗ trợ giao diện người dùng và mức độ dễ dàng để xây dựng giao diện người dùng gốc, tích hợp với các ứng dụng hiện có và ý nghĩa hiệu suất. Đây là những gì nhóm đã đánh giá:
So sánh KMM, Flutter và React Native về các thứ nguyên quan trọng đối với nhóm kỹ sư Motive. Nguồn: Blog kỹ thuật động lực.
Nhóm đã quyết định sử dụng KMM, chủ yếu là vì đây là cách dễ dàng nhất để làm việc với mã hiện có của họ và họ cảm thấy mình có thể giữ quyền kiểm soát (gốc) nhiều nhất đối với ứng dụng.
Tôi đã liên hệ với Sunil để hỏi về cách họ đưa ra quyết định. Đây là những gì anh ấy chia sẻ:
Những lý do khác dẫn đến KMM?
‘Nhóm ứng dụng Motive Fleet được xây dựng chỉ vài ngày trước khi Covid-19 bắt đầu. Tuy nhiên, chúng tôi thiếu băng thông iOS, dẫn đến việc iOS luôn bị tụt hậu so với Android 1-2 tháng. Độ trễ này có nghĩa là một số tính năng có sự khác biệt về logic nghiệp vụ giữa các ứng dụng.
‘Để loại bỏ những khác biệt này và tăng tốc độ phát triển do thiếu tài nguyên, chúng tôi bắt đầu xem xét các giải pháp đa nền tảng. Tôi đã có kinh nghiệm trước đây với React Native. Khi tôi làm việc với React Native, hiệu suất của ứng dụng mà tôi xây dựng không được tốt. Trong trường hợp của chúng tôi, hiệu suất là một điểm quan trọng khi chúng tôi tương tác với bản đồ rất nhiều. Với Flutter, không ai trong nhóm của chúng tôi có bất kỳ kinh nghiệm nào với nó và sau khi đọc nhiều bài đăng trên blog, chúng tôi quyết định rằng việc học một công nghệ mới và một ngôn ngữ mới là không đáng.’
Bạn đã điều phối việc chuyển sang KMM như thế nào?
‘Chúng tôi đã không di chuyển tất cả mã của ứng dụng hiện có sang KMM. Thay vào đó, chúng tôi bắt đầu nhỏ. Chúng tôi đã viết mã mới cho lớp mạng bằng KMM và chuyển qua quản lý phiên sang KMM bằng cách loại bỏ các phụ thuộc JVM (Máy ảo Java) hiện có. Sau khi hoàn thành công việc này, chúng tôi chỉ sử dụng KMM cho các tính năng mới do chúng tôi xây dựng.
‘Cho đến nay, các tính năng trong ứng dụng sử dụng KMM là:
Trung tâm Thông báo. Đây là nơi người dùng có thể xem tổng quan về tất cả các cảnh báo về đội xe của họ. Thành phần này sử dụng cơ sở dữ liệu SQL được chia sẻ.
Lịch sử chuyến đi. Người dùng có thể xem lịch sử chuyến đi của phương tiện, tài xế và tài sản.
Cài đặt Push notification. Người dùng có thể kiểm soát những cảnh báo mà họ muốn nhận Thông báo đẩy trên thiết bị của họ.
Các nhóm. Người dùng có thể lọc dữ liệu nhóm của họ, dựa trên các nhóm khác nhau do người dùng tạo.’
Dưới đây là ảnh chụp màn hình về giao diện của các tính năng này trên iOS và Android:
Nhóm và Trung tâm thông báo: cả hai tính năng được viết bằng Kotlin Multiplatform Mobile.
Cài đặt thông báo đẩy và Lịch sử chuyến đi trong ứng dụng Motive Fleets. Giao diện người dùng gần như giống hệt nhau trên iOS và Android.
Việc xây dựng các ứng dụng iOS và Android riêng biệt dẫn đến câu hỏi: ‘chúng ta có thể không chỉ sử dụng mã dùng chung không?’ Đây là điều mà nhiều CEO, chuyên gia sản phẩm và thậm chí nhiều kỹ sư di động sẽ hỏi. Đối với khách hàng, họ thường không quan tâm ứng dụng dành cho thiết bị di động sử dụng công nghệ nào và mong đợi chức năng gần như giống nhau trên iOS, Android và thường là trên web.
Một tháng trước, chúng tôi đã khám phá liệu có sự sụt giảm tuyển dụng iOS và Android bản địa tại các startup hay không. Câu trả lời là sắc thái, nhưng tôi đã lưu ý rằng:
‘Ngày nay, Flutter và React Native cuối cùng cũng “đủ tốt” cho các ứng dụng không yêu cầu hiệu năng cao.’
Trong trường hợp của Motive, hiệu suất đủ quan trọng để không chuyển sang React Native hoặc Flutter, họ cũng không sẵn sàng vứt bỏ mã hiện có mà họ đã viết và chuyển sang một tech stack khác.
Tuy nhiên, việc giới thiệu KMM không phải là vấn đề nhỏ, vì hiện tại, một phần tốt của quá trình phát triển đã được thực hiện với Kotlin, đây là ngôn ngữ mà các kỹ sư iOS và Android đều phải làm quen. Và trong trường hợp ứng dụng dành cho thiết bị di động, lợi ích của việc không phải kiểm thử hai triển khai logic nghiệp vụ riêng biệt trên OS và Android là giúp tiết kiệm thời gian thử nghiệm và giảm khả năng xảy ra mâu thuẫn logic nghiệp vụ.
Tôi đã hỏi Sunil rằng anh ấy cảm thấy thế nào về việc di chuyển và thực hiện tất cả công việc để cấu trúc lại mã nhằm tận dụng KMM stack. Anh ấy nói rằng anh ấy hài lòng với quyết định này và ước tính chu kỳ phát triển của họ hiện nhanh hơn khoảng một phần ba so với trước đây, nhờ vào logic kinh doanh thống nhất của Android/iOS. Quan trọng nhất, họ không còn phải đợi trên iOS nữa, ngay cả khi họ có ít băng thông iOS hơn.
Tổng kết
Vấn đề Kỹ thuật trong thế giới thực số này tập trung vào các nghiên cứu điển hình trong đó các nhóm đã chọn công nghệ mới để giải quyết các vấn đề khó khăn hiện có. Với nhiều ví dụ khác nhau, tôi hy vọng nó làm nổi bật quá trình lựa chọn công nghệ mới và cách các nhóm xử lý việc thay đổi.
Chúng ta đã đề cập đến các nghiên cứu điển hình bao gồm việc chọn hàng đợi nhắn tin mới, tái cấu trúc ứng dụng web thành mô hình kiến trúc mới, chọn ngôn ngữ sẽ được sử dụng ở 1 startup và chuyển sang logic kinh doanh iOS và Android được chia sẻ. Đối với tôi, các yếu tố nổi bật là phương pháp đáng để xem xét, bao gồm:
Khi thay đổi công nghệ, hãy đảm bảo rằng bạn giải quyết được một điểm yếu đủ lớn. Thay đổi công nghệ – chẳng hạn như thay thế framework hoặc chọn cách tiếp cận kiến trúc mới – là những thay đổi tốn kém về thời gianài nguyên quá cao đã khiến nó trở nên đáng giá. Điều này có đúng trong trường hợp sử dụng của bạn không?
Khi xây dựng một dự án mới, hãy nghĩ về những điểm khó khăn trong tương lai. Khi bạn bắt đầu xây dựng một thứ gì đó mới, bạn cần ít lý do hơn để lựa chọn bất kỳ công nghệ nào vì bạn không phải trả bất kỳ chi phí nào cho việc chuyển đổi. Tuy nhiên, hãy cố gắng chọn một công nghệ giúp bạn tránh – hoặc giải quyết – các vấn đề nhức nhối trong tương lai. Đây là những gì MetalBear đã làm bằng cách dự đoán rằng Rust sẽ làm cho nhiều trường hợp sử dụng trong tương lai của họ trở nên dễ dàng hơn để giải quyết, trên hết là phù hợp ngay bây giờ.
Khi thay đổi công nghệ, hãy thực hiện từng bước một nếu có thể. Khi chuyển sang Micro Frontends và khi giới thiệu KMM, trước tiên, nhóm đã tạo nguyên mẫu cho phương pháp này, sau đó cung cấp một tính năng sử dụng nó, rồi bắt đầu xây dựng các tính năng mới với phương pháp mới.
Trở lại việc cấu trúc lại mọi thứ không nhất thiết là một cách tiếp cận thực dụng. Khi thay đổi hoàn toàn công nghệ – chẳng hạn như chọn phương thức nhắn tin mới – bạn có thể không có lựa chọn nào khác ngoài việc thay thế công nghệ hiện tại của mình. Tuy nhiên, khi thay đổi cách tiếp cận kiến trúc hoặc thực hiện những thay đổi lớn, cách tiếp cận “mọi thứ phải diễn ra” có thể có ý nghĩa hơn. Cả Birdie với Micro Frontends và Motive với KMM, đều chưa chuyển tất cả mã hiện có của họ sang phương pháp hoặc khung mới, ít nhất là chưa.
Tuy nhiên, bài học lớn nhất của tôi là:
Đừng quên ưu tiên số 1 của bạn, với tư cách là một nhóm kỹ sư. Thước đo thành công lớn nhất cho nhóm của bạn là gì? Đối với Birdie, Steve Heyes nói rằng “người dùng sẽ có thể hoàn thành công việc họ cần.” Hãy tự trả lời câu hỏi và đảm bảo rằng bạn ghi nhớ ưu tiên đó: nó chắc chắn đến trước công nghệ bạn chọn để làm việc.
The very last days of the year are a time for us to look back on the journey we have gone through and the achievements we have achieved during the past year.
👨💻Who will you become in the next 5, or 10 years? Will you be an expert Front-end Developer or Project Manager?
👨💻Have you chosen the goal you want to pursue or are still confused about your own journey, do not know where you will go in the future?
Understanding the struggle of most young new programmers, Technical Event: “Career Path for Front-end Developer” spoken by Mr. Hau Nguyen – Founder of Easy Frontend. Through his practical experience, you will better understand:
📌Learning path to become a Front-end Developer from scratch
📌Skills required for a Front-end Developer
📌Development roadmap and career opportunities in the market
📌Chatting with speakers and participating in Quiz Game activities