Home Blog Page 18

Angular là gì? Vì sao nên chọn Angular thay vì các framework khác?

Angular là gì?

Trong thế giới phát triển ứng dụng web ngày càng phức tạp, Angular đã trở thành một trong những framework JavaScript phổ biến và mạnh mẽ nhất. Với khả năng xây dựng ứng dụng web đa nền tảng, mạnh mẽ và linh hoạt, Angular đã thu hút được sự quan tâm của các Developers và các doanh nghiệp trên khắp thế giới. Trong bài viết này, chúng ta sẽ tìm hiểu về Angular là gì và tại sao công cụ này lại trở thành một công nghệ quan trọng trong việc phát triển ứng dụng web.

Angular là gì?

Angular là gì?

Angular là một framework JavaScript mã nguồn mở, được phát triển và duy trì bởi Google, giúp cung cấp một bộ công cụ đầy đủ các tính năng như two-way data binding, dependency injection, routing, forms để xây dựng ứng dụng web hiện đại, đáp ứng các yêu cầu về tính năng, khả năng mở rộng và hiệu suất cao. Angular sử dụng ngôn ngữ TypeScript, giúp phát hiện lỗi sớm và nâng cao khả năng bảo trì.

Ưu điểm và nhược điểm của Angular

Ưu điểm và nhược điểm của Angular

Tương tự như các framework khác, Angular cũng có những điểm nổi bật và hạn chế riêng. Cùng TopDev điểm qua một số ưu điểm và nhược điểm của framework này!

Ưu điểm

Angular được sử dụng rộng rãi vì có nhiều ưu điểm so với các framework khác, bao gồm:

  • TypeScript: 

Angular sử dụng TypeScript, một phiên bản mở rộng của JavaScript với kiểu dữ liệu tĩnh, giúp phát triển ứng dụng web một cách có cấu trúc, dễ quản lý và bảo trì.

  • Two-way data binding: 

Angular cung cấp khả năng two-way data binding giữa mô hình (model) và giao diện người dùng (view). Điều này đồng bộ dữ liệu tự động giữa các thành phần, giúp tiết kiệm thời gian và công sức cho các developers.

  • Dependency Injection: 

Angular sử dụng Dependency Injection (DI) để quản lý và cung cấp các đối tượng cho các thành phần của ứng dụng một cách linh hoạt. Điều này giúp tạo ra mã nguồn dễ bảo trì và dễ tái sử dụng.

  • Routing: 

Angular cung cấp hệ thống routing mạnh mẽ, cho phép chuyển đổi giữa các trang dễ dàng và linh hoạt, cải thiện trải nghiệm người dùng.

  • Forms: 

Angular cung cấp các tính năng mạnh mẽ để xử lý và kiểm tra dữ liệu đầu vào từ người dùng, giúp quản lý biểu mẫu dễ dàng và hiệu quả.

  • Cộng đồng và hệ sinh thái: 

Angular có một cộng đồng lớn và mạnh mẽ, đi kèm với hệ sinh thái phong phú của các thư viện và công cụ hỗ trợ. Điều này giúp các developers dễ dàng tìm kiếm giải pháp và nhận sự hỗ trợ khi cần.

Nhược điểm

Mặc dù có nhiều ưu điểm, song Angular vẫn còn tồn tại một số điểm yếu như sau:

  • Kích thước: 

Ứng dụng Angular có thể có kích thước tải xuống lớn do việc bao gồm và tải xuống các thư viện và framework lớn như Angular core và các thư viện liên quan. Điều này có thể làm tăng thời gian tải trang và tiêu thụ bộ nhớ.

  • Quản lý phiên bản: 

Vì Angular liên tục phát triển và cập nhật, việc duy trì và nâng cấp phiên bản cho các dự án lớn có thể gặp khó khăn.

  • Hiệu suất: 

Mặc dù đã có nhiều cải tiến, hiệu suất của ứng dụng Angular có thể bị ảnh hưởng khi ứng dụng trở nên lớn và phức tạp.

  So sánh Angular và ReactJS: 8 đặc điểm nổi bật

  Nên học Angular hay React? So sánh 2 framework

Sự khác biệt giữa Angular và AngularJS

Sự khác biệt giữa Angular và AngularJS

AngularJS là phiên bản đầu tiên của Angular, ra đời vào năm 2010. Angular (hay Angular 2+) là phiên bản hoàn toàn mới, được viết lại từ đầu với nhiều cải tiến. Từ đó, cả hai phiên bản có những sự khác nhau, gồm:

  • Về ngôn ngữ lập trình:

Angular sử dụng TypeScript, AngularJS sử dụng JavaScript.

  • Về kiến trúc:

Angular sử dụng kiến trúc dựa trên các thành phần (component-based), AngularJS sử dụng kiến trúc controller-based.

  • Về Dependency Injection:

Angular cung cấp hệ thống dependency injection mạnh mẽ và linh hoạt, AngularJS sử dụng tính năng này thông module và service

  • Về hiệu suất:

Angular có hiệu suất và khả năng mở rộng tốt hơn AngularJS.

Tính ứng dụng của Angular là gì?

Tính ứng dụng của Angular là gì?

Angular được sử dụng rộng rãi trong phát triển ứng dụng web hiện đại, đặc biệt là các ứng dụng doanh nghiệp quy mô lớn. Framework này phù hợp với các ứng dụng cần tính năng phức tạp, khả năng mở rộng cao và bảo trì dễ dàng. Dưới đây là một số cách mà Angular đóng góp vào việc phát triển web:

Hỗ trợ tăng năng suất

Angular cung cấp nhiều tính năng và công cụ hỗ trợ hiệu quả để nâng cao năng suất cho lập trình viên, bao gồm:

  • Sử dụng TypeScript với kiểu dữ liệu tĩnh, giúp giảm lỗi, tăng tính dự đoán và tái sử dụng mã nguồn.
  • Two-way data binding tiện lợi, đồng bộ dữ liệu giữa mô hình và giao diện, tiết kiệm thời gian.
  • Angular CLI mạnh mẽ để tạo nhanh thành phần, module, service và ứng dụng, giảm lỗi sai.
  • Hệ thống Dependency Injection linh hoạt, quản lý đối tượng hiệu quả, giảm lặp lại mã.
  • Hệ sinh thái phong phú với nhiều thư viện, module và công cụ hỗ trợ.

Tham khảo việc làm Angular lương cao trên TopDev!

Cấu trúc phát triển rõ ràng

Angular cung cấp cấu trúc phát triển rõ ràng với các thành phần, module, service và hệ thống routing, giúp tạo ra ứng dụng có cấu trúc và dễ bảo trì. Điều này bao gồm kiến trúc component-based, mô-đun hóa, chia sẻ logic và dữ liệu, cùng hệ thống điều hướng hiệu quả.

Hỗ trợ đầy đủ tính năng điều hướng

Angular Router cung cấp hệ thống điều hướng mạnh mẽ với tính năng đầy đủ như lazy loading, quản lý trạng thái ứng dụng, guards và resolvers, child routes, và quản lý lịch sử điều hướng.

Tối ưu kích thước và hiệu suất ứng dụng

Angular bao gồm các tính năng như tree shaking, Ahead-of-Time (AOT) compilation, lazy loading, hỗ trợ xây dựng Progressive Web Apps (PWA) và service worker, giúp giảm kích thước ứng dụng, tối ưu hóa tải trang và cải thiện hiệu suất chung của ứng dụng.

Các câu hỏi thường gặp về Angular

Câu 1. Angular có hỗ trợ các ứng dụng di động không?

Angular được thiết kế chủ yếu cho ứng dụng web, nhưng có thể sử dụng để xây dựng ứng dụng di động bằng cách kết hợp với Ionic hoặc NativeScript.

Câu 2. Angular có khó học không?

Angular được coi là khó hơn so với một số JavaScript khác, đặc biệt là đối với những người mới bắt đầu trong lĩnh vực phát triển web. Một số lý do khiến Angular khó học hơn là do: có nhiều khái niệm mới, cấu trúc và tài liệu học tập phức tạp, khó hiểu và phải cập nhật kiến thức liên tục.

Câu 3. Angular và React, framework nào tốt hơn?

Cả Angular và React đều là các framework mạnh mẽ, lựa chọn nào tốt hơn phụ thuộc vào nhu cầu dự án và sở thích của nhà phát triển.

Kết luận

Angular là một framework phát triển web mạnh mẽ và linh hoạt, được phát triển bởi Google. Với kiến trúc module, thư viện công cụ và tiện ích đa dạng, Angular đã trở thành một công nghệ quan trọng và được sử dụng rộng rãi. Nếu bạn đang tìm kiếm một framework để xây dựng các ứng dụng web mạnh mẽ và dễ bảo trì, có thể nói Angular là một sự lựa chọn tuyệt vời.

Hy vọng rằng bài viết của TopDev đã cung cấp cho bạn được nhiều thông tin về framework Angular. Hãy tiếp tục theo dõi Blog TopDev để cập nhật thêm nhiều kiến thức hữu ích về lập trình và các tips tuyển dụng hiệu quả.

Xem thêm:

Xem thêm các tin tuyển dụng IT mới nhất trên TopDev

So sánh Angular và ReactJS: 8 đặc điểm nổi bật

So sánh Angular và ReactJS

Angular và React là hai công nghệ phổ biến được sử dụng để xây dựng ứng dụng Web phía Frontend, cả hai đều có những tính năng tương đồng cung cấp cho các nhà phát triển một sự lựa chọn đáng giá để xây dựng dự án Web của mình. Bài viết hôm nay chúng ta cùng nhau so sánh giữa Angular và ReactJS xem bạn sẽ quyết định lựa chọn công nghệ nào cho dự án tiếp theo của mình nhé.

Tổng quan về Angular và ReactJS

Angular được phát triển bởi Google từ năm 2016, nó là bản thiết kế lại hoàn toàn khác với AngularJS (còn được gọi là Angular 1.0 ra mắt từ năm 2010). ReactJS được Facebook (hiện nay là Meta) phát hành và sử dụng từ năm 2013. Cả 2 nền tảng này ngay từ khi ra mắt đã cho thấy nhiều ưu điểm vượt trội cho việc xây dựng ứng dụng đơn trang (Single Page Application) và được đông đảo lập trình viên Frontend lựa chọn làm công nghệ cho dự án của mình.

So sánh Angular và ReactJS

Ưu điểm đặc biệt của cả 2 là việc nó cung cấp mã nguồn mở, hoàn toàn miễn phí cho cộng đồng. Cách tiếp cận Component-based (hướng thành phần) giúp cả Angular và React có khả năng xây dựng từng thành phần nhỏ, cơ bản nhất của một UI, từ đó tái sử dụng trong nhiều trang khác nhau mang lại tính nhất quán trong trải nghiệm người dùng. Sự hỗ trợ phát triển và cập nhật phiên bản, công nghệ thường xuyên của cả hai nền tảng giúp nó luôn giữ vững vị thế của mình trong cộng đồng lập trình viên Web.

Phiên bản mới nhất hiện nay của ReactJS là version React 18 phát hành từ năm 2022; trong khi đó với Angular, ver 17 ra mắt cuối năm 2023 vừa rồi cũng mang đến nhiều cập nhật đáng giá cho người dùng.

So sánh Angular và ReactJS

Tính phổ biến

Về độ phổ biến thì ReactJS tỏ ra vượt trội so với Angular. ReactJS tỏ ra thân thiện và dễ tiếp cận sử dụng hơn so với Angular, vì vậy nó thường được lựa chọn dành cho các dự án vừa và nhỏ với thời gian phát triển nhanh.

So sánh Angular và ReactJS

Ngoài ra, sự thành công của mạng xã hội Facebook – một sản phẩm được tạo ra bởi React cũng giúp tính phổ biến của thư viện này lớn hơn đáng kể so với Angular.

Framework vs Library

Angular là một framework, trong khi ReactJS là một thư viện. Điều này có nghĩa là khi làm việc với React, bạn cần phải sử dụng thêm các thư viện khác bổ trợ cho việc quản lý trạng thái dữ liệu trong ứng dụng. Facebook cũng đã phát triển Flux – một kiến trúc hỗ trợ xử lý luồng dữ liệu một chiều dành cho React.

Với Angular, bạn có thể không cần thêm bất cứ thư viện xử lý dữ liệu nào, bản thân nó đã là một framework hoàn chỉnh được xây dựng vững chắc trên mô hình MVC (trong khi với React có thể xem chỉ đang có phần V – View)

Ngôn ngữ sử dụng

Angular sử dụng TypeScript cho việc viết code, điều này giúp tận dụng được thế mạnh về khả năng lập trình hướng đối tượng và mang lại tính nhất quán cho source code của dự án. TypeScript cũng được đánh giá cao hơn trong các dự án quy mô lớn mà vẫn đảm bảo việc sử dụng đầy đủ các kỹ thuật mới nhất của JavaScript. Trong khi đó ReactJS sử dụng JavaScript với cú pháp mở rộng JSX, điều này cũng giúp các lập trình viên mới bắt đầu học React có khả năng tiếp cận dễ dàng hơn.

Xem ngay các tin tuyển dụng ReactJS mới nhất trên TopDev

Ràng buộc dữ liệu

Data Binding là khái niệm chỉ việc đồng bộ dữ liệu giữa trạng thái của ứng dụng và các component view hiển thị lên với người dùng React sử dụng liên kết dữ liệu một chiều với việc thay đổi trạng thái dữ liệu sẽ cập nhật lên các thành phần UI. Angular cho phép ràng buộc dữ liệu hai chiều, nghĩa là khi thành phần UI thay đổi thì model state cũng sẽ được cập nhật. Mặc dù vậy, cách tiếp cận của React giúp quản lý dữ liệu tổng quan và hợp lý hơn trong nhiều trường hợp, nhất là với các ứng dụng phức tạp. 

Ràng buộc dữ liệu

Tốc độ phát triển

Sử dụng Angular framework giúp dự án của bạn thống nhất ngay từ đầu với quy trình rõ ràng cùng với sự nhất quán của source code đến từ ngôn ngữ lập trình TypeScript. Điều này giúp tốc độ phát triển dự án viết bằng Angular sẽ nhanh hơn nếu như các thành viên có chung một level lập trình và hiểu biết nhất định về framework này.

React đòi hỏi việc tích hợp thêm nhiều thư viện khác nhau, điều này có thể gây mất thời gian cho việc xác định hướng giải quyết vấn đề hay quy trình áp dụng trong việc phát triển dự án; nó cũng khiến tốc độ triển khai bị ảnh hưởng.

  AngularJS Là Gì? AngularJS và Angular có khác nhau?

  Top 10 plugin tốt nhất cho ReactJS cho lập trình viên

Hiệu năng ứng dụng

Khó có thể nói được nền tảng nào tốt hơn trong 2 nền tảng trên về mặt hiệu năng. React tỏ ra tốt hơn trong việc nạp (loading) các tài nguyên và thực thi mã (scripting). Ngược lại thì Angular lại cho thấy ưu điểm trong khả năng render và hiển thị lên trình duyệt (painting) của mình.

Hiệu năng ứng dụng

Cả 2 nền tảng này cũng đang từng ngày cập nhật phiên bản mới với sự tối ưu về hiệu năng, hiệu suất cùng việc giảm kích thước ứng dụng. Ở thời điểm hiện tại thì lựa chọn nào cũng đều tốt cho việc trải nghiệm của người dùng.

Hỗ trợ từ cộng đồng

Với sự hậu thuẫn từ 2 ông lớn Google và Facebook; cả Angular và React đều có bộ tài liệu đầy đủ, chi tiết cùng sự hỗ trợ đông đảo đến từ cộng đồng lập trình viên; bạn sẽ dễ dàng tìm kiếm và giải quyết được hầu hết các vấn đề gặp phải trong quá trình triển khai dự án. Phần nào đó thì nếu trên GitHub, cộng đồng React có quy mô lớn hơn Angular, nhưng ngược lại thì số lượng lập trình viên Angular theo khảo sát đến từ StackOverflow có phần cao hơn so với thư viện của Facebook.

Tương lai của 2 nền tảng

React đã có những thay đổi lớn nhằm hỗ trợ các nhà phát triển dễ dàng cung cấp phản hồi về tính năng mới và cải thiện cú pháp JavaScript trong những cập nhật gần đây. Với Angular, sự tăng trưởng về tốc độ sử dụng giúp nền tảng này đang gia tăng thị phần phát triển ứng dụng Web. Rõ ràng trong tương lai gần, cả 2 nền tảng này vẫn sẽ là những công nghệ phổ biến được lựa chọn bởi đông đảo nhà phát triển Web, vì vậy nhu cầu tuyển dụng React và Angular cũng sẽ đều cao.

Kết bài

Thật khó để kết luận đâu là nền tảng tốt hơn giữa Angular và ReactJS vì cả 2 đều là những lựa chọn tốt dành cho dự án Web giúp xây dựng ứng dụng Frontend. Hy vọng những so sánh trong bài sẽ giúp bạn có cái nhìn cụ thể, chi tiết hơn về 2 công nghệ này và đưa được ra quyết định lựa chọn cho dự án sắp tới của mình. Cảm ơn các bạn đã đọc bài và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Check list những thứ cần phải học để trở thành Software Architect

Software Architect

Bài viết được sự cho phép bởi tác giả Vũ Thành Nam

Đây là bài viết tiếp tục chặng đường trở thành SA của mình mà mình có đề cập đến trong bài viết “Software Architect – Con đường chẳng hề dễ dàng“. Đúng là một con đường chẳng hề dễ dàng. Bài viết này mình đã tổng hợp được những kỹ năng cụ thể cần phải đạt được khi dấn thân vào con đường đầy chông gai này, có thể sau này mình có vững tâm rẽ theo con đường này hay không thì bài viết này mình cũng xin chia sẻ những kỹ năng này tại đây để các bạn cũng có thể nắm được như mình tại thời điểm hiện tại.

Software Architect

Cùng đi tiếp nghiệp Architect sẽ gồm 3 level cơ bản sau:

  • Application Level: Đây là level thấp nhất, nó tập trung vào một ứng dụng riêng lẻ, thiết kế kiến trúc chi tiết nhưng ở mức thấp, sẽ phải làm việc chủ yếu với team dev của bạn.
  • Solution Level: Đây là tầng ở giữa của Architecture, nó sẽ phải tập trung vào ứng dụng cùng với những nghiệp vụ xung quanh, cao hơn Application level nhưng chỉ xoay quanh các giải pháp để xử lý nghiệp vụ. Ở mức độ này bạn sẽ phải làm việc với BA và các team dev lớn khác nữa mà không chỉ riêng team dev của bạn.
  • Enterprise Level: Đây là mức độ cao nhất của Architecture. Nó tập trung vào các giải pháp tối ưu nhất, các thiết kế hệ thống ở mức cao và trừu tượng hóa mà không nhất thiết phải chi tiết đến từng bước làm triển khai. Ở đây bạn sẽ làm trực tiếp với khách hàng và tổ chức dự án ở cấp cao.

Khi trải qua từng level bạn sẽ phải là cầu nối của các bên như: Business – Development, Development – Development,  Development – Management, Client – Team, 3rd Team – Internal Team.

Những công việc mà một SA cần phải làm như:

– Xác định và ra quyết định những công nghệ và nền tảng phát triển ứng dụng
– Đưa ra những quy định, tiêu chuẩn code, công cụ, quy trình review code hay các cách tiếp cận kiểm thử…
– Hỗ trợ làm yêu cầu khách hàng với BA
– Thiết kế hệ thống và đưa ra những giải pháp dựa trên yêu cầu khách hàng
– Viết tài liệu thiết kế hệ thống và tích hợp kiến trúc với các bên
– Review và kiểm tra lại kiến trúc thiết kế cũng như code base bên cạnh những patterns và coding standards trước khi thực hiện hóa
– Trao đổi với những SA khác về giải pháp cũng như các công nghệ xử lý
– Hướng dẫn và training cho các lập trình viên khác
– Khác thảo thiết kế từ high level tới detail design
– …

1. Design

Một bản vẽ thiết kế tốt sẽ là tiền đề quan trọng của cả một hệ thống sản phẩm. Nó cần sự tổng hợp của rất nhiều kỹ năng mới có thể có được kinh nghiệm thiết kế.

– Hiểu biết về design patterns. Các mẫu mô hình thiết kế phải nắm chắc được cùng với những ưu và nhược điểm từng mẫu thiết kế là tiền đề quyết định cho sự lựa chọn.

– Nắm được những best practice hay những anti pattern nhằm lường trước được những vấn đề phía sau trong quá trình thực hiện hóa

– Biết được cách đo lường chất lượng sản phẩm. SA không phải chỉ thiết kế xong kiến trúc là hết trách nhiệm họ còn phải đưa ra những hướng dẫn hay quy chuẩn để được áp dụng vào dự án, những cách thức đo lường thế nào là đạt chất lượng code hay những tính chất nằm ngoài yêu cầu như khả năng bảo trì, thay thế, thích ứng, bảo mật, hiệu năng, kiểm thử, mở rộng… Còn vô vàn thứ xung quanh một sản phẩm mà bạn cần phải có những tiêu chuẩn đo lường thế nào là đạt

– Cố gắng hiểu được thật kỹ càng những công nghệ nền tảng mà mình áp dụng cho dự án, điểm mạnh điểm yếu, những giải pháp khắc phục và bù đắp lại những khuyết điểm của công nghệ. Nó sẽ ảnh hưởng đến quá trình thiết kế và thi công của một sản phẩm nếu đã được triển khai

– Phân tích và hiểu rõ những patterns cho từng nền tảng được áp dụng, trả lời những câu hỏi tại sao dùng nó và một vài mẫu thiết kế dự phòng khi trường hợp xấu xảy ra.

– Phân tích được yêu cầu người dùng để có thể lựa chọn và phác thảo bản thiết kế một cách phù hợp nhất cho người dùng.

2. Quyết định

Một điều kiện kiên quyết là SA là người ra quyết định, người chốt kèo và cũng là người chịu trách nhiệm cho quyết định của mình trong một sản phẩm. Level càng cao thì trách nhiệm càng cao.

– Khả năng đánh giá được cái gì là quan trọng. Có thể tại thời điểm ngày sẽ có những giải pháp phù hợp trong ngắn hạn, trung hạn, dài hạn. Nhưng phải đánh giá được thời điểm cũng như cái gì là quan trọng nhất trong thời điểm đó để xử lý

– Ngoài khả năng đánh giá thì còn phải sắp xếp thứ tự quan trọng, mức độ ưu tiên để thực hiện. Có thể tại thời điểm đó team sẽ không thể xử lý được nhưng phải biết được sự ưu tiên của từng công việc cho team.

– Đánh giá năng lực của team cũng như bản thân. Đôi khi phải nắm được khả năng của đội ngũ phát triển còn định hướng và thay đổi chiến lược, có thể là đổi người hay là tuyển dụng sao cho phù hợp với công nghệ và dự án đang xây dựng

– Khả năng phân tích nhiều phương án khác nhau. Đối với một vấn đề phải luôn đặt ra những giải pháp hay những sự dự phòng, có những phân tích chặt chẽ những sự lựa chọn tốt xấu, phù hợp hay không thì mới có thể đưa ra quyết định chính xác.

3. Sự đơn giản hóa

Thực sự thì những vấn đề phức tạp sẽ thường được xử lý bởi những thứ đơn giản. Cố gắng làm sao biến những thứ phức tạp trở nên đơn giản hơn để có thể dễ dàng xử lý.

– Dung hòa những giải pháp. Khó có thể tìm được một giải pháp nào là hoàn hảo cả, đôi khi còn phải kết hợp nhiều phương án khác nhau để có thể giải quyết được vấn đề. Cần phải có sự cân bằng và chắt lọc những thế mạnh của từng phương án để có được một giải pháp tốt nhất có thể.

– Ném đá dò đường. Có thể nói đây là một kỹ thuật sử dụng khá nhiều khi chính những SA đó không thật sự chắc chắn về giải pháp của họ, họ sẽ phải thử từng bước một. mò mẫm và dò ra được phương án để giải quyết vấn đề trước mắt mà không làm ảnh hưởng đến tiến độ hay quá trình vận hành dự án

– Chia để trị. Đây cũng là một phương pháp hay dùng, khi một vấn đề quá phức tạp không thể xử lý. Khi này SA sẽ thường chia nhỏ chúng ra và đưa ra những giải pháp cho từng vấn đề một. Đơn giản hóa sự phức tạp thông qua một cách thức vô cùng truyền thống.

– Tái kiến trúc một cách dứt khoát. Một sản phẩm về mặt tổng thể có thể ổn nhưng khi bắt đầu một giải pháp phức tạp và cồng kềnh nếu không có giải pháp nào tốt hơn nó. Khi gặp vấn đề sau một quá trình kiển khai để đáp ứng những yêu cầu mới phát sinh thì bạn phải đưa ra một sự tái kiến trúc và đưa ra một giải pháp mới hoàn toàn. Khi này thì giải pháp mới phải được tiến hành một cách triệt để tuy nhiên vẫn phải cân nhắc về chi phí, thời gian, kiểm thử tính năng cũ… rồi mới thay thế dần cho đến khi thay thế hoàn toàn.

4. Code

Một người thiết kế hệ thống, SA cấp cao đi chăng nữa thì vẫn phải nắm được những anh em lập trình viên bên dưới đang và sẽ phải làm gì, triển khai nó như thế nào. Đừng vẽ một bản thiết kế mà không thể thực hiện hóa nó được. Có 2 trường hợp có thể xảy ra với những anh em cấp dưới: Họ không chấp nhận và không tin những giải pháp bạn đưa ra và họ không hiểu những gì bạn đưa ra. Vấn đề nảy sinh lúc này là bạn phải làm sao để họ phục và tin tưởng vào giải pháp của bạn. Những người sếp đi lên từng những nhân viên quèn sẽ hiểu được điều này. Họ trải qua và biết được những gì cần phải làm thì mới có được những kinh nghiệm mà thiết kế.

– POC mà mình có nhắc tới trong bài viết “POC là gì? Câu chuyện không chỉ riêng phát triển phần mềm” là một cách để bạn chứng minh giải pháp của mình.

– Đưa ra những nguồn dẫn hay những case study thuyết phục, có thể nó không đúng cho mọi trường hợp nhưng nó sẽ giải quyết được những vấn đề trước mắt. Code mẫu, tiếp cận trước và tham khảo những anh em dự án đã từng triển khai sẽ làm tiền đề cho những quyết định của sếp.

  Đâu là điểm khác biệt giữa Solution Architect và Software Architect?

  Top 5 câu hỏi phỏng vấn Software Architect hàng đầu

5. Document

Kiến trúc thiết kế luôn đi liền với tài liệu, nó thật sự rất quan trọng để quyết định xem giải pháp đó có khả thi và được triển khai hay không. Khi sản phẩm chưa được hình thành thì tài kiệu kiến trúc sẽ là những thái nghén quyết định thành bại của dự án. Sự lựa chọn các giải pháp cũng phải được đề cập trong các tài liệu liên quan.

– Clean code. Có thể bạn đã nghe ở đâu đó chính những dòng mã nguồn là những tài liệu đúng đắn nhất. Code tốt là phải dành cho người hiểu máy móc chỉ thực thi mà thôi.  Kiến trúc sao để tự bản thân những thứ mình vẽ ra ai cũng hiểu được là một điều hoàn hào nhất.

– Tự động hóa sinh những tài liệu nếu có thể. Một số công nghệ hay công cụ Apis có thể giúp bạn tự động tạo ra cho bạn những tài liệu Apis của hệ thống. Việc bạn tổng hợp và chỉnh sửa chúng sẽ giúp bạn tiết kiệm nhiều thời gian.

– Viết những gì cần thiết và đủ để có thể hiểu một cách cô đọng trước mắt và cập nhật dần dần. Thật sự khó khăn khi mới bắt đầu mà phải tổ chức tất cả mọi thứ. Để có thể triển khai nhanh và tối ưu thì bạn sẽ phải làm những gì cần thiết để thi công trước sau đó bổ sung dần sau.

– Học thêm những nền tảng công nghệ. Việc nắm được những thứ trong công nghệ bạn sử dụng để phát triển phác thảo những công nghệ đó cần một lượng kiến thức rất sâu. Để làm được vậy thì bạn phải học và tìm hiểu mỗi ngày.

Tham khảo việc làm Solution Architect hấp dẫn trên TopDev

6. Giao tiếp

Phần đầu mình có đề cập là SA là cầu nối của rất nhiều bên nên giao tiếp với họ là một kỹ năng cần thiết.

– Học cách làm sao để diễn đạt ý tưởng của mình cho người khác. Ý tưởng chỉ mãi là ý tưởng nếu chỉ nằm trong đầu bạn và không thể thoát ra ngoài và triển khai thực tế.

– Trao đổi với các nhóm lớn. Dừng biến mình thành ếch ngồi đáy giếng, và không ai có thể nắm chắc được tất cả mọi thứ. Trao đổi với các nhóm lớn hơn có thể giúp bạn có giải pháp và nhiều góc nhìn khác nhau cho một vấn đề.

– Xác định đúng đối tượng và level khi nói chuyện. Cách giao tiếp với mỗi role hay mỗi vị trí là khác nhau. Không phải vị trí nào cũng hiểu cùng một cách diễn đạt của bạn. Nên bạn phải xác định đúng đối tượng trước khi trao đổi vấn đề

– Giao tiếp thường xuyên. Có khi nào là khi thiết kế sau một thời gian thì sản phẩm đi một hướng hoàn toàn khác. Nên theo sát dự án và trao đổi gỡ bỏ những vấn đề trong quá trình thực thi một cách kịp thời.

– Linh hoạt khi đưa ra quyết định, có thể tại thời điểm nói chưa có giải pháp nhưng bạn sẽ suy nghĩ và đưa ra cách giải quyết sau. Điều này có những khi phải trao đổi với mọi người. Có những khi phải tìm cách trì hoãn thêm thời gian. Linh hoạt trong từng hoàn cảnh.

7. Estimate

Định lượng ước tính những vấn đề trong dự án, về tiến độ, chi phí, khả năng thực hiện, đội ngũ,…

– SA đôi khi phải biết những nguyên tắc hay cách thức vận hành của một quản lý dự án mặc dù không hẳn phải quản lý. Dù sao đi chăng nữa thì cũng là sếp, là cán bộ cấp cao, là người nắm quyền sinh quyền sát trong tay. Kỹ năng quản lý con người cũng cần phải biết

– Xác định đánh giá thời gian và chi phí kiến trúc mình đưa ra. Điều này không phải là dễ dàng gì, nó phụ thuộc vào rất nhiều yếu tố, nhưng SA vẫn phải hoạch định được sát nhất có thể cho team.

8. Balance

Cân bằng về mọi mặt.

– Chất lượng và giá cả, chi phí, ngân sách. Không thể nào ôm hết mọi thứ chỉnh chu mọi mặt trong khi giá hữu nghị và thời gian quá ngắn được. Ai cũng vẫn biết không 1 bà bầu sinh con trong vòng 9 tháng nhưng khó có thể bắt 9 người làm sinh trong vòng 1 tháng được. Cân nhắc.

– Giải quyết mâu thuẫn trong mục tiêu. Mục tiên ngăn hạn, dài hạn sẽ có thể bị thay đổi và đôi khi SA phải đánh đổi, và trả một chi phí không hề nhỏ khi đưa ra một giải pháp cái nhìn dài hạn cho khách hàng. Có những giải pháp biết là tốt hơn trong dài hạn nhưng trước mắt thì khó có thể thực thi. Sự đánh đổi và quyết định là ở SA lúc này.

– Xung đột trong quản lý. Việc là cầu nối giữa nhiều bên khiến nhiều khi SA bị kẹt ở giữa nhiều bên. Họ hay phải cân bằng lợi ích giữa các bên và có những giải pháp hợp tình hợp lý, đối nội, đối ngoại tốt nữa.

9. Phát triển team

SA đâu chỉ là đưa ra giải pháp dự án đâu. Họ còn có những sứ mệnh riêng để build up lên một đội ngũ phát triển lớn mạnh hơn mỗi ngày.

– Hướng dẫn và định hướng cho đội ngũ bên dưới hiểu được những bước đi trong tương lai. Có thể thời gian đầu họ sẽ phải là người chỉ dẫn chi li tiểu tiết từng chút một nhưng dần dần khi đội ngũ cứng cáp thì họ có thể nhẹ nhàng hơn.

– Tạo ra những buổi chia sẻ kiến thức cho nhau, brainstorming, để có những giải pháp cho dự án. Mở rộng tư duy và hạ thấp cái tôi xuống để có thể phát triển hơn.

10. Quảng bá thương hiệu

Ngoài việc truyền động lực cho anh em trong team ra đôi khi SA phải có những niềm tin từ các bên khiến họ phục và tin tưởng giải pháp của mình.

– Trong một thời giai ngắn có thể thuyết phục được khách hàng hay team về giải pháp mình đưa ra khá khó khăn. Nhưng nếu đã có niềm tin và uy tín trước đó thì sẽ dễ dàng hơn với những lời nói của bản thân.

Trên đây là những ý kiến cá nhân đúc kết của bản thân sau khi đọc cuốn sách “Become A Better Software Architect“.  Do là ý hiểu của bản thân dựa trên những quan sát thực tế trong ngành công nghệ thông tin ở Việt Nam. Có thể nó sẽ khác so với nước ngoài hay mình hiểu sai ý tác giả. Bạn nào đã đọc rồi thì có thể bổ sung và đính chính giúp mình nếu mình hiểu sai nhé.

Bài viết gốc được đăng tải tại ntechdevelopers.com

Xem thêm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Test Report là gì? Hướng dẫn cách viết Test Report chuẩn cho Tester

Test Report là gì?

Trong quá trình triển khai phát triển một dự án phần mềm, kiểm thử là một công đoạn không thể thiếu giúp đảm bảo chất lượng của dự án. Với việc thực hiện rất nhiều test case với rất nhiều kết quả khác nhau thì việc đòi hỏi có một báo cáo kiểm thử thể hiện được toàn bộ kết quả liên quan là điều vô cùng cần thiết. Vậy Test Report là gì? và cách để một Tester có thể viết được một Test Report chuẩn; bài viết này chúng ta cùng nhau tìm hiểu nhé.

Test Report là gì?

Test Report hay báo cáo kiểm thử là một bản tóm tắt chứa các thông tin về mục đích, hoạt động và kết quả của quá trình kiểm thử diễn ra trong dự án. Mục đích của test report là giúp toàn bộ các thành viên trong team phát triển cùng các bộ phận liên quan đến dự án có thể nắm được tình trạng hiện tại và đánh giá được chất lượng sản phẩm phần mềm; từ đó có quyết định xem phần mềm, sản phẩm có thể được nghiệm thu, thực hiện bước triển khai tiếp theo hay chưa.

Test Report là gì

Test report cũng là một tài liệu để xác nhận về quy trình triển khai kiểm thử đã thực hiện trong dự án; nó đóng vai trò như một Evidence (bằng chứng) xác thực rằng sản phẩm đã được đánh giá bởi team kiểm thử; từ đó xem xét liệu hướng kiểm thử đã đúng và phù hợp chưa, còn thiếu trường hợp nào hay không.

Lợi ích của Test report bao gồm:

  • Là cơ sở giúp người quản lý đánh giá lại sản phẩm tại thời điểm hiện tại, tiến độ thực hiện nhanh hay chậm và quyết định xem có đủ điều kiện để đưa ra vận hành
  • Chứa thông tin tổng hợp thống kê về số lượng testcase đã thực hiện, số lượng manual test/ automation test thực tế đã triển khai cũng như chi phí cụ thể dành cho kiểm thử
  • Giúp team dự án và các bên liên quan nắm được tình hình phát triển của hệ thống; đồng thời là tài liệu hỗ trợ các bộ phận liên quan thực hiện các bước tiếp theo
  • Là tài liệu kiểm chứng về hiệu suất hoạt động thực tế của phần mềm, đóng vai trò là bằng chứng khi bàn giao sản phẩm dự án đến cho khách hàng

Thành phần cần có trong Test Report

Test report là một tài liệu ở dạng tóm tắt kết quả, vì vậy đòi hỏi nội dung cần thể hiện đầy đủ và chính xác các thông tin, trình bày số liệu dưới dạng các biểu đồ với thời gian cụ thể, ngoài ra tài liệu còn được thường xuyên cập nhật. Tùy vào tổ chức, dự án mà sẽ có những biểu mẫu (template) cho việc viết Test report khác nhau, nhưng các thành phần chính dưới đây vẫn cần đảm bảo có trong một báo cáo kiểm thử.

Thành phần cần có trong Test Report

1. Thông tin về dự án

Thông tin cơ bản về dự án, tên sản phẩm, cùng mô tả các thông tin liên quan cần thiết khác như thời gian dự án, thời gian kiểm thử, … 

2. Mục tiêu của kiểm thử (Test Objectives)

Mô tả mục tiêu hướng tới của lần kiểm thử này và sẽ cần thực hiện những loại test nào. Trong đó mỗi phần báo cáo sẽ chứa thông tin cho từng giai đoạn kiểm thử như kiểm thử hiệu năng (performance test), kiểm thử hệ thống (system test) hay kiểm thử đơn vị (unit test). 

3. Tóm tắt kết quả (Overall Summary)

Bao gồm thông tin tổng hợp toàn bộ kết quả các bài test đã thực hiện cùng với thông tin về sản phẩm vận hành trong bài test. Cụ thể phần kết quả cần thể hiện được:

  • Số lượng test case đã thực thi, loại test là manual hay automation
  • Tỷ lệ test case Pass/ Fail
  • Tỷ lệ kiểm thử hoàn thành theo kế hoạch
  • Tỷ lệ thất bại của sản phẩm sau kiểm thử
  • Các ghi chú, phản hồi được đưa ra từ các bộ phận có liên quan

3. Báo cáo về những thiếu sót (Defect Report)

Đây là phần quan trọng nhất của một Test report, cần nêu lên rõ những vấn đề, thiếu sót, lỗi mà phần mềm hiện tại đang gặp phải hay chính là những công việc cần ưu tiên làm để hoàn thiện sản phẩm ở giai đoạn tiếp theo. Việc đánh giá mức độ nghiêm trọng đi kèm với những đề xuất và phương án ưu tiên giải quyết cũng sẽ được báo cáo tổng hợp lại trong phần này.

  Test case là gì? Cách viết Test case hiệu quả

  Test plan là gì? 4 bước cần thiết để thực hiện test plan?

Hướng dẫn cách viết Test Report

Test Report là tài liệu được nhiều phòng ban, đội nhóm sử dụng bao gồm cả quản lý, team phát triển và cả khách hàng, vì vậy việc viết báo cáo kiểm thử cần đảm bảo sự rõ ràng, dễ hiểu; các thông tin được trình bày ngắn gọn nhưng đủ để các bộ phận liên quan dễ dàng nắm được công việc tiếp theo cần làm.

Có nhiều template (mẫu) dùng cho việc viết Test Report; team dự án sẽ lựa chọn một mẫu thống nhất từ trước, có thể theo tổ chức hoặc theo yêu cầu của khách hàng để giúp việc theo dõi trở nên thuận tiện.

Hướng dẫn cách viết Test Report

Hiện nay có nhiều công cụ tích hợp được sử dụng để lấy số liệu, xuất các báo cáo mẫu dành cho Test Report, thông thường các công cụ quản lý tasks của dự án cũng được trang bị tính năng này. Ví dụ nếu sử dụng Jira làm công cụ quản lý dự án, bạn có thể lựa chọn một số loại báo cáo dưới đây cho mục đích viết Test Report:

  • Requirements Coverage Reports: Báo cáo phạm vi bao phủ
  • Traceability Report: Báo cáo truy xuất nguồn gốc
  • Test Execution Progress Report: Báo cáo tiến độ thực hiện kiểm thử
  • Test Progress Reports: Báo cáo tiến độ thực hiện

Khám phá việc làm Tester lương cao trên TopDev

Sử dụng các báo cáo xuất ra từ công cụ với hình ảnh trực quan từ các biểu đồ số liệu sẽ giúp Test Report của bạn trở nên rõ ràng, ngắn gọn và mang tính thuyết phục cao hơn. Ngoài ra có một số kinh nghiệm được chia sẻ khi viết báo cáo mà bạn nên tham khảo như sau:

  • Hiểu rõ yêu cầu của dự án và phạm vi kiểm thử trước khi viết báo cáo
  • Sử dụng ngôn ngữ chuyên môn, thuật ngữ kỹ thuật một cách thống nhất và rõ ràng, đảm bảo người đọc có thể hiểu được
  • Tổ chức bố cục báo cáo một cách hợp lý, mang đến sự thuận tiện cho người đọc khi cần tìm kiếm thông tin
  • Tập trung vào kết quả và đánh giá, không cần trình bày chi tiết các nội dung đã được thể hiện trong test case
  • Luôn nhớ kiểm tra lại cẩn thận trước khi gửi; đánh phiên bản đi cùng ngày tháng cụ thể cho báo cáo

Kết bài

Test Report là một tài liệu quan trọng trong dự án và việc viết báo cáo kiểm thử cũng là một kỹ năng quan trọng của mọi Tester. Qua bài viết này, chắc hẳn các bạn đã có câu trả lời cho câu hỏi Test Report là gì cũng như tầm quan trọng của nó trong dự án phát triển phần mềm. Hy vọng với những hướng dẫn và kinh nghiệm được chia sẻ trong bài sẽ giúp các bạn Tester mới vào nghề có thể viết được Test Report một cách chuyên nghiệp và hiệu quả hơn. Cảm ơn các bạn đã đọc bài và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Xem ngay tin đăng tuyển lập trình viên đãi ngộ tốt trên TopDev

Một số phương pháp bảo mật hiệu quả dành cho webhook

Một số phương pháp bảo mật hiệu quả dành cho webhook

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Mấy hôm vừa rồi tôi có công việc nghiên cứu tích hợp App Store Server Notifications là một dạng webhook để nhận thông báo từ Apple về máy chủ của mình. Trong quá trình tích hợp có một vài chi tiết thú vị mà tôi nghĩ nếu kể ra ở đây hẳn sẽ giúp ích được cho bạn đọc. Nếu chưa biết webhook là gì, bạn đọc có thể tham khảo bài viết Webhook là gì? Tổng hợp các kiến thức cơ bản về Webhook.

Chắc hẳn chúng ta ai cũng biết việc mua hàng trong ứng dụng. Khi mua thành công một đơn hàng, Apple sẽ gửi thông báo về máy chủ của chúng ta, trong thông báo có chứa nhiều thông tin về đơn hàng như tên, ngày mua, trạng thái… từ đó làm căn cứ để tiếp tục xử lý đơn hàng của khách. Bởi vì hành động mua hàng trong ứng dụng thành công chỉ khi người dùng mua thành công, mà để biết mua thành công hay không thì chỉ có Apple mới biết vì họ xử lý quá trình cộng trừ tiền cho chúng ta. Sau đó là một thông báo gửi đến một API (webhook) mà chúng ta thiết lập từ trước, cho biết kết quả của quá trình thanh toán thành công hay thất bại.

Trong quá trình làm, tôi phát hiện ra Apple có cách để bảo vệ dữ liệu mà họ gửi sang máy chủ của mình một cách rất “uy tín”, nó tiêu tốn một “chút” thời gian tìm hiểu của tôi và do đó khơi mào cho tôi tổng hợp lại một số phương pháp bảo mật của webhook lâu nay tích lũy được.

Lưu ý rằng vẫn có rất nhiều phương pháp khác không xuất hiện ở đây. Tôi chỉ đơn giản là thống kê lại một số cách thường gặp hoặc đã biết. Vì thế nếu bạn đọc còn biết cách nào nữa thì vui lòng để lại thông tin trong phần bình luận dưới bài viết nhé.

Một số phương pháp bảo mật webhook

Khi cung cấp một đầu API (endpoint) để nhận dữ liệu, nếu chẳng may kẻ tấn công hoặc những người tò mò biết được, kẻ gian sẽ cố tình khai thác bằng cách gửi nhiều thông tin sai lệch đến máy chủ, từ đó khiến cho nhiều rủi ro có thể xảy ra. Thế nên cách hữu hiệu nhất vẫn là giữ bí mật API, đồng thời luôn luôn xác thực dữ liệu nhận được có phải xuất phát từ bên dịch vụ mà chúng ta tích hợp.

Lấy ví dụ bạn cung cấp một endpoint /webhook/serviceA để nhận dữ liệu từ serviceA thì bằng cách nào đó phải chắc chắn dữ liệu vừa nhận được là từ chính serviceA gửi.

HTTPs

Điều kiện tiên quyết đầu tiên là phải yêu cầu https, tức là serviceA sẽ từ chối gửi dữ liệu nếu endpoint không hỗ trợ https.

Ngày nay https đang dần thay thế http truyền thống vì độ tin cậy và khả năng bảo mật cao hơn. Dữ liệu được mã hóa trên đường truyền và hạn chế các cuộc tấn công Man-in-the-middle.

Vì lẽ đó cho nên https trở thành yêu cầu bắt buộc để truyền dữ liệu thông qua các cuộc gọi API – vốn là cơ chế gửi/nhận dữ liệu của webhook.

Trust IPs

Cách tốt nhất để biết được serviceA gửi thì chắc chắn phải gửi từ đúng địa chỉ IP của nó. serviceA có thể phải cung cấp một danh sách các địa chỉ IP thuộc sở hữu của nó, những địa chỉ đó sẽ được dùng để thực hiện truy vấn đến endpoint của chúng ta. Việc cần làm là xác thực xem địa chỉ IP nhận được có nằm trong danh sách mà chúng ta tin tưởng, nếu không thì khả năng rất cao chúng ta đang bị tấn công.

Phương pháp này nhanh mà hiệu quả, nhưng phải được chính serviceA hỗ trợ bởi vì họ phải cung cấp tất cả địa chỉ IP. Tuy nhiên, trong thời đại công nghệ phân tán và hệ thống thông tin chằng chịt như hiện nay, địa chỉ IP có thể được sửa đổi liên tục cho nên việc triển khai có phần phức tạp và mang lại rủi ro trong quá trình vận hành.

Hãy tưởng tượng một ngày đẹp trời, họ (serviceA) thêm một địa chỉ IP mới vào danh sách mà hệ thống của chúng ta chưa kịp cập nhật thì điều gì sẽ xảy ra?

Mã bí mật

“Hãy tự chọn một mã bí mật, nhập vào trang quản lý của chúng tôi và chúng tôi sẽ gửi nó kèm theo dữ liệu về endpoint của bạn” – đây chính là châm ngôn của phương pháp này.

Vì mã bí mật chỉ có hai bên biết cho nên việc không cung cấp đúng mã bí mật có thể coi là một cuộc tấn công từ bên khác nhằm vào. Mã bí mật thường sẽ được gửi lại thông qua tiêu hề (headers) http. Việc của chúng ta là cần lấy ra và so sánh nó xem có khớp với nhau.

Phương pháp này dễ triển khai và có độ tin cậy nhất định, tuy nhiên nếu chẳng may bị lộ mã bí mật thì…ba chấm. Vì mã này thường nằm dưới dạng văn bản, không mã hóa và phải được ghi lại ở đâu đó cho nên độ tin cậy cũng vì thế mà giảm xuống.

Nằm trong mục này thì Basic Auth cũng là một dạng mã bí mật. Cung cấp username và password cho serviceA biết để xác thực trước khi thực hiện cuộc gọi đến endpoint.

  Tấn công các cụm Kubernetes qua lỗi API Kubelet misconfigure

  DevSecOps – Tương lai của an ninh bảo mật phần mềm

Chữ ký số

Các phương phát trên vẫn có một điểm yếu đó là dữ liệu chưa được mã hóa đúng cách, hay nói cách khác là chưa có cách nào để biết liệu dữ liệu được gửi đến máy chủ của chúng ta có đảm bảo tính toàn vẹn? Vì quá trình truyền dữ liệu không chỉ đơn giản là giữa serviceA và endpint, mà nó còn đi qua rất nhiều điểm khác trước khi đến đích. Giả sử dữ liệu bị sửa đổi ở đâu đó thì phải làm như thế nào để phát hiện?

Nếu đã làm việc với JSON Web Tokens (jwt), bạn đọc sẽ biết cơ chế bảo vệ dữ tính toàn vẹn của dữ liệu bằng cách mã hóa bất đối xứng. Với cấu trúc 3 phần được mã hóa bằng base64 của jwt, phần đầu chứa các chỉ dẫn về thuật toán sử dụng mã hóa, phần thân chứa dữ liệu và phần cuối cùng là một chuỗi được tạo ra bằng cách mã hóa bất đối xứng dữ liệu với khóa bí mật. Để xác thực, chúng ta chỉ cần sử dụng khóa công khai để xem dữ liệu có bị sửa đổi sau khi ký (sign) hay không, vì bất cứ thay đổi nào dù là nhỏ nhất trong phần thân cũng khiến cho chuỗi ký bị sai lệch.

Phương pháp này có phần phức tạp hơn nhưng lại cho độ tin cậy cao hơn hẳn. Khóa bí mật cần được giữ an toàn tuyệt đối để ký dữ liệu trước khi gửi đi, khóa bí mật cũng được mã hóa do đó nguy cơ tấn công thấp hơn so với văn bản thông thường.

Bảo mật webhook của Apple

Về cơ bản Apple cũng lựa chọn cách thức mã hóa bất đối xứng để bảo vệ tính toàn vẹn của dữ liệu mà họ gửi đến, nhưng với độ phức tạp cao hơn một chút.

Đầu tiên dữ liệu được mã hóa hết dưới dạng base64 để tăng độ “nguy hiểm”, mã hóa này góp một phần nào đó cho quá trình nhìn trộm nhanh và yêu cầu giải mã để biết được nội dung thật là gì.

Apple ký trên một số đối tượng dữ liệu, theo dạng JWS vì thế trước khi sử dụng cần xác định tính toàn vẹn của dữ liệu. Cách làm có thể tóm lại trong 2 bước:

  • Lấy public key trong headers của chuỗi mã hóa
  • Sử dụng public key đó để xác thực chữ ký

Vì vậy, khi giải mã headers, bạn sẽ thấy thuật toán chữ ký, kèm theo một đối tượng x5c giống như:

{
  "alg": "ES256",  
  "x5c": [
    "MIIEMDCCA...",  
    "MIIDFjCCA...",  
    "MIICQzCCA..."
  ]
}

Khi đó khóa công khai để xác nhận dữ liệu là x5c[0]. Nhưng vậy thì x5c[1] và x5c[2] có ý nghĩa gì? Chúng ta biết thuật toán mã hóa bất đối xứng dựa trên ES256 rất khó để bẻ khóa, vì thế chỉ cần sử dụng khóa công khai để xác nhận tính toàn voẹn của dữ liệu gần như là tuyệt đối, bởi vì chỉ có Apple mới biết được khóa bí mật.

Sau một lúc tìm hiểu, thì ra hai khóa còn lại dùng để xác thực khóa công khai. Đúng vậy, tức là x5c[1] và x5c[2] được dùng để xác thực x5c[0] có đúng là của Apple hay không.

Như vậy, x5c[2] là chứng chỉ dịch vụ gốc của Apple (Certificate Authority (CA)) đã được tin cậy, trong khi x5c[1] là chứng chỉ trung gian và x5c[0] là chứng chỉ dùng để xác minh chữ ký mà Apple đã ký cho dữ liệu.

CA tin cậy được phân phối thông qua hệ điều hành, nghĩa là máy tính khi xuất xưởng đã được cài đặt sẵn một số chứng chỉ CA đáng tin cậy trên thế giới, trong đó có CA của Apple. Một số công cụ như openssl có thể xác định được liệu một CA có đáng tin hay là không. Vì thế luồng xác thực dữ liệu lúc này là sử dụng công cụ để xác minh CA (x5c[2]) -> xác minh chứng chỉ trung gian (x5c[1]) -> xác minh khóa công khai (x5c[0]). Nếu tất cả đều hợp lệ thì chúng ta có thể tin chắc rằng dữ liệu được gửi từ Apple.

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

Phương pháp đọc sách kỹ thuật cho lập trình viên

Phương pháp đọc sách kỹ thuật cho lập trình viên

Bài viết được sự cho phép bởi tác giả Vũ Thành Nam

Sau bài viết “5 cách để phát triển tư duy logic trong lập trình“, có bạn hỏi mình về vấn đề đọc sách kỹ thuật thế nào sao cho hiệu quả.

Ở bài viết này mình xin phép chia sẻ ít những kinh nghiệm cá nhân về phương pháp đọc sách mà mình thấy khá hiệu quả. Hy vọng bài viết có thể giúp ích cho anh em lập trình viên.

Bắt đầu nhé!

Phương pháp đọc sách kỹ thuật cho lập trình viên

Lựa chọn kỹ sách trước khi đọc

Hãy dành thời gian để đọc review, lắng nghe trải nghiệm của những người đã viết ra cuốn sách đó, nếu không có liên hệ gì được với tác giả của cuốn sách bạn hãy lên các diễn đàn, hội nhóm review sách về công nghệ cùng có nhiều gợi ý dành cho bạn đó. Việc làm này sẽ giúp bạn nắm được nội dung khái quát của sách và phần nào xác định được nó có phù hợp với mình hay không.

Một cách khác cũng hay được sử dụng đó là đọc mục lục của sách hoặc đọc tóm tắt nội dung. Việc làm này sẽ giúp bạn biết qua được cấu trúc của sách và đồng thời phát triển tư duy cho bạn với những từ khóa, lý giải cho từng chương mục. Việc suy nghĩ và đặt ra một số câu hỏi cho một số chương trong mục lục sẽ khiến mình cảm thấy thích thú hơn và mong chờ đến lúc đọc chương đó.

Mình cũng đã đề cập đến vấn đề đọc mục lục trước để phát triển cách học ở trong bài viết “Cách mà tôi học một công nghệ mới“, bạn có thể đọc lại nhé!

Sau khi đã có một khái niệm chung về nội dung chính của sách, bạn hãy tự trả lời 3 câu hỏi sau:

– Vì sao bạn lại muốn đọc cuốn sách này?
– Bạn muốn phát triển kỹ năng gì được gì từ cuốn sách này?
– Đọc xong cuốn sách này thì bạn sẽ làm gì tiếp theo với những kiến thức bạn đã học?

Đọc chủ động

Hãy bắt đầu tập thói quen đọc chủ động. Luôn cầm sẵn một chiếc bút để có thể vừa đọc, vừa highlight. Đọc sách kỹ thuật mục đích là nghiên cứu và tìm hiểu kiến thức mới. Mức độ học thuật trong sách rất cao. Vậy nên hãy cố gắng ghi chú lại những gì bạn đã đọc, đã học được ở bước tiếp theo. Và để ghi chú được hiệu quả thì đọc đến đâu hãy cố gắng đánh dấu lại hoặc ghi nó luôn ngay tức thì nhé!

Bạn cũng có thể sử dụng một số kí hiệu riêng biệt cho những đoạn có nội dung khác nhau. Ví dụ, bạn có thể ký hiệu hình ngôi sao cho đoạn có nội dung đặc biệt cần ghi nhớ, ký hiệu dấu hỏi cho đoạn nào bạn cảm thấy khó hiểu hoặc muốn phản biện lại tác giả.

Gạch chân, ghi chú trên sách sẽ giúp bạn theo dõi cuốn sách một cách tập trung hơn. Hơn nữa, việc đọc chủ động còn giúp bạn kết nối với cuốn sách, đồng thời giao tiếp với tác giả thông qua những bình luận, những suy nghĩ được note lại trên trang sách.

Lựa chọn môi trường và thời gian đọc

Bạn có thể đọc sách ở đâu cũng được, nhưng với mình do đây được coi là như mà tính chất nghiên cứu, học tập thì nên để việc nào ra việc đó. Để tập trung đọc sách kỹ thuật theo hình thức nghiên cứu thì nên dành thời gian cho nó như thời gian làm việc, ngồi vào bàn làm việc như khi bạn đang đi làm hay đi học trên trường vậy.

Có thể có những thể loại sách bạn đọc mang tính chất giải trí thư giãn như tiểu thuyết, truyện, tản văn,… bạn sẽ thường đọc nó vào thời gian rảnh, trước khi đi ngủ hay thường ghé các quán cafe sách để đắm chìm vào trong việc đọc.

Nhưng đối với những cuốn sách khô khan như sách kỹ thuật lập trình này thì dường như những thời điểm đó sẽ không phù hợp. Nó khiến bạn mau chán và nhanh bỏ cuộc nếu cứ đọc theo cách thông thường.

Bên cạnh đó, môi trường đọc sách không cần phải yên tĩnh tuyệt đối, nhưng càng ít vật chuyển động thì càng tốt. Một thức uống yêu thích hay không gian với nhiệt độ phù hợp cũng sẽ mang đến cho bạn sự hứng thú đối với việc đọc sách hơn.

Thời gian lý tưởng cho một phiên đọc là 45 đến 60 phút. Sau khoảng thời gian này, bạn nên đứng dậy đi lại một vòng hoặc vận động một cách nhẹ nhàng để thư thả đầu óc.

Lựa chọn môi trường và thời gian đọc

  Dân IT đọc sách như thế nào đây?

  32 cuốn sách học lập trình bạn nhất định phải đọc

Dành thời gian suy nghĩ và tìm hiểu những vấn đề xung quanh

Sách kỹ thuật không đơn thuần là để cũng cấp thông tin, nó chứa một hàm lượng kiến thức rất cao. Vậy nên hãy dành thời gian suy nghĩ về những vấn đề đã đọc được. Mình thường đọc sách cùng với việc tra cứu thông tin đang đọc trên mạng để tiện ghi chú lại luôn. Việc kết hợp này cho mình nhiều góc nhìn khác nữa dựa trên cấu trúc của một cuốn sách mình đang đọc.

Bên cạnh đó, một số cuốn sách thường bắt bạn phải thực hành ngay cuối chương. Đối với lập trình thì cấu trúc đoạn code thực hành là rất phổ biến trong sách nên việc đọc không là chưa đủ, hãy thử suy nghĩ và làm các bài tập thực hành cuối chương ngay khi bạn đọc nhé, điều này sẽ giúp bạn hiểu và nhớ lâu hơn.

Ngoài ra ý nghĩa của một cuốn sách không chỉ nằm trên những con chữ trên trang sách, mà nó còn là những ẩn ý mà tác giả muốn gửi gắm đằng sau những trang sách đó. Ví dụ có những vấn đề được sách ghi lại những phương pháp giải quyết vấn đề mà tác giả đã từng gặp phải, đôi khi nó sẽ giúp bạn tiết kiệm được rất nhiều thời gian khi gặp vấn đề tương tự.

Vậy nên hãy dành thời gian để ngẫm nghĩ về những gì bạn đã đọc. Suy cho cùng thì đọc sách để học hỏi, để khám phá thì phải hiểu và khám phá ra được cả những bài học sâu xa, chứ không đơn thuần là những trang sách nhìn được, sờ được.

Phương pháp đọc sách kỹ thuật cho lập trình viên

Chia sẻ trong và sau khi đọc

Việc viết review và chia sẻ cuốn sách với người khác chính là cách ghi nhớ hiệu quả nhất. Nếu bạn là một người yêu thích mạng xã hội, việc share cảm nghĩ của mình lên Facebook hay trang blog cá nhân sẽ giúp bạn giải tỏa cảm xúc, cung cấp thông tin về cảm nhận cá nhân cho những người đọc khác.

Mình thường viết review sách kỹ thuật trên fanpage của mình sau khi mình đọc. Đôi khi nó chỉ là những đoạn review ngắn thể hiện quan điểm tại thời điểm đọc đó. Rồi lần thứ 2 bạn đọc, hãy đọc lại cả review, nhiều khi bạn tự mình nhận ra rằng cách hiểu trước đó của mình có phần chưa chính xác hoàn toàn thì sao.

Phương pháp đọc sách kỹ thuật cho lập trình viên

Đây cũng là phương pháp vô cùng hiệu quả để bạn lưu trữ nội dung cuốn sách một cách tóm tắt nhất theo ý hiểu của bạn. Qua đó, bạn sẽ thấy dễ dàng hơn trong việc tìm đọc lại.

Trên đây là những phương pháp đọc sách kỹ thuật cho dân lập trình mà mình nhận thấy nó hiệu quả. Anh em có thêm ý kiến gì thì để lại dưới phần bình luận nhé.

Chúc anh em đọc sách vui vẻ và lượm được nhiều thứ hay ho!

Bài viết gốc được đăng tải tại ntechdevelopers.com

Có thể bạn quan tâm:

Xem thêm các việc làm ngành CNTT hấp dẫn trên TopDev

Bí quyết làm chủ một ngôn ngữ lập trình mới dễ dàng

học ngôn ngữ lập trình mới

Bài viết được sự cho phép bởi tác giả Sơn Dương

Có nhiều người hỏi mình rằng “Để làm chủ một ngôn ngữ lập trình thì làm thế nào? Làm sao để học tất cả nhanh nhất?”

Trong quá trình học tập và làm việc, mình đã tìm ra một kinh nghiệm để học các ngôn ngữ mới. Mô hình này sẽ xuyên suốt từ khi bắt đầu cho đến khi trở nên thành thạo ngôn ngữ đó.

Điểm mấu chốt ở đây chính là: cách bạn khái niệm hóa (conceptualization) một vấn đề.

Mình hy vọng qua bài viết này sẽ giúp các bạn thay đổi tư duy và áp dụng hiệu quả vào học một ngôn ngữ lập trình mới.

Khái niệm hóa là cách chúng ta định nghĩa, tổng quát hóa một vấn đề hoặc nhiều vấn đề. Từ đó, chúng ta có thể hình dung và có cái nhìn toàn diện hơn”.

Trong bài viết này, mình sẽ chỉ đề cập các khái niệm tổng quan của ngôn ngữ lập trình. Còn chi tiết hơn về kỹ thuật của từng ngôn ngữ, các bạn có thể tham khảo các bài viết hướng dẫn học lập trình của mình nhé.

ngôn ngữ lập trình

Ngôn ngữ lập trình là gì?

Trước khi bàn tới các khái niệm to tát và xa xôi, mình sẽ quay lại khái niệm cơ bản nhất.

Vậy ngôn ngữ lập trình là gì?

Đúng như tên gọi của nó, ngôn ngữ là phương tiện để giao tiếp giữa hai thực thể. Nếu là giao tiếp giữa con người với con người thì gọi là ngôn ngữ giao tiếp con người. Còn ngôn ngữ để giao tiếp giữa con người và máy tính. Hay nói chính xác hơn là phương tiện để con người có thể truyền tải ý muốn cho máy tính hiểu và thực hiện.

Nó cũng trải qua quá trình phát triển từ rất lâu rồi. Từ ngôn ngữ máy đơn giản, đến ngôn ngữ bậc cao (Java, C#, PHP…).

Các ngôn ngữ lập trình

các ngôn ngữ lập trình

Ngày nay, có rất nhiều ngôn ngữ lập trình ra đời. Mỗi ngôn ngữ lập trình lại có thế mạnh riêng của nó.

Chắc hẳn bạn đã nghe đến Java, PHP, Javascript, C#… Nhưng cũng có những ngôn ngữ mà mình tin chắc bạn chưa bao giờ nghe tới: lolcode, Glass, Brainfuck…

Tuy nhiên, để các bạn đỡ lạc lối trên con đường học lập trình và lựa chọn cho sự nghiệp coder sau này. Mình sẽ liệt kê 5 ngôn ngữ lập trình phổ biến và nên học nhất:

Để bắt đầu một ngôn ngữ lập trình mới? Hãy bắt đầu với Java

Giống như hầu hết những người phát triển phần mềm đã học lập trình tại các trường học vào những năm 2000.

Phương pháp lập trình đầu tiên mà bạn được tiếp xúc là lập trình hướng đối tượng (OOP). Với ngôn ngữ lập trình đầu tiên thường sử dụng là Java. (Tham khảo ngay bài viết lập trình hướng đối tượng Java)

Việc học ngôn ngữ Java là khá nực cười. Bây giờ nghĩ lại, mình vẫn thấy thực sự khâm phục bản thân vì đã cố gắng và không bỏ cuộc vào thời điểm đó.

Mình đã mất khoảng ba tháng để học Java từ sơ cấp đến nâng cao, và cuốn sách mình học là “Deitel: Java how to program“.

Với cuốn sách này, tác giả Deitel đã viết một cách khá chi tiết, với chủ đề chính là các đối tượng (Object) hoặc sự kế thừa (Inheritance).

Tác giả xây dựng sơ đồ chi tiết để giải thích về đối tượng, về nguyên lý lập trình hướng đối tượng. Mình rất thích những ví dụ của tác giả như dùng hình tượng sư tử để giải thích về tính thừa kế (inherited class).

#Mình đã thu được điều gì từ việc học Java

học lập trình java cơ bản

Qua cuốn sách, Deitel muốn truyền đạt một điều rằng: Để học nhanh một ngôn ngữ, đừng có tìm hiểu chi tiết mọi thứ của ngôn ngữ đó. Thay vào đó, bạn cần phải biết cách khái quát những chi tiết.

Chẳng hạn, mình sử dụng chồng đĩa để giải thích cấu trúc dữ liệu ngăn xếp (stack).

Khái niệm tương tự như vậy được sử dụng để triển khai các stack-frame khi thực thi chương trình. Và tất nhiên back-stack trong Android cũng tương tự.

Ý tưởng chung là như nhau, cứ back-stack thì là vào sau ra trước (Last in – First out). Do đó nên hiểu khái niệm trước khi tìm hiểu chi tiết về cách thực hiện.

  Lập trình Web nên học ngôn ngữ nào là phù hợp?

  Người mới bắt đầu nên học ngôn ngữ lập trình nào?

Để làm chủ một ngôn ngữ lập trình, hãy thử áp dụng “khái niệm hóa”

Sau khi khái niệm hóa các thứ trong suy nghĩ, điều tiếp theo bạn làm là áp dụng khái niệm này vào việc học.

Bài viết này của mình chính là khái niệm hóa các ngôn ngữ.

Đầu tiên, chúng ta chia ngôn ngữ thành các thành phần cơ bản nhỏ hơn. Thành phần đầu tiên là câu (sentence). “Câu” được khái niệm hóa là khối xây dựng của tất cả các ngôn ngữ, cả ngôn ngữ nói/viết và ngôn ngữ lập trình.

Nếu bạn có thể xâu chuỗi vài câu lại với nhau thành một đoạn văn có nghĩa. Điều đó có nghĩa bạn đã thành thạo trong ngôn ngữ nói/viết.

Quy tắc này cũng được áp dụng cho các ngôn ngữ lập trình. Nếu bạn có thể xâu chuỗi vài dòng mã lệnh với nhau để giải quyết một bài toán nào đó, thì bạn được coi là thông thạo, giỏi ngôn ngữ lập trình đó(đây là chỉ quan điểm của cá nhân mình thôi)

# Sử dụng 5 thành phần chính của câu

Với ngôn ngữ nói/viết, một câu nói thường gồm các thành phần như:

  1. Danh từ (Noun) / Đại từ (Pronoun): Có thể là chủ thể hoặc đối tượng của câu.
  2. Động từ (Verb) – đóng vai trò là hành động đang được thực hiện.
  3. Cụm từ (Phrases) / Biểu thức (Expression): Đóng vai trò như các phần của một câu (cũng là các phần của một dòng mã lệnh).
  4. Cú pháp (Syntax) / Ngữ nghĩa (Semantics): Đóng vai trò như cấu trúc và quy ước để diễn đạt các câu (cũng như các cấu trúc để viết các dòng mã lệnh).
  5. Đặc tả ngôn ngữ (Language Specifics): Các đặc trưng đối với ngôn ngữ đó.

Đây là 5 thành phần của một câu trong ngôn ngữ nói/viết thông thường nhưng nếu hiểu kĩ và áp dụng nó vào lập trình thì bạn sẽ thấy có nhiều nét tương đồng.

Dưới đây là 5 rào cản mà mình đã vượt qua để đi từ cơ bản đến nâng cao khi bắt đầu học một ngôn ngữ lập trình mới: (Trước đó bạn có thể tham khảo top 5 ngôn ngữ lập trình Android mình đã viết ở bài trước)

1. Các danh từ / đại từ

Các danh từ và đại từ được sử dụng trong tiếng Anh để xác định các thực thể (chủ ngữ/đối tượng) của một câu.

Ngôn ngữ lập trình cũng mô tả các đối tượng tương tự như vậy. Trong các khối mã lệnh chúng ta gọi đó là định danh (Identifier). Ví dụ như tên biến, tên hằng số…

Rào cản đầu tiên là xem cách định nghĩa các định danh trong ngôn ngữ. Nghĩa là một định danh như thế nào là hợp lệ trong ngôn ngữ đó.

int myNumber = 12; // java
let myNumber = 12 // F#
my_number = 12 # python

2. Các động từ

Trong một câu, động từ dùng để chỉ hành động. Có thể hành động đó đã được thực hiện hoặc chưa được thực hiện.

Với ngôn ngữ lập trình, chúng ta cũng định nghĩa hàm hay phương thức tương tự như vậy.

Như vậy rào cản thứ hai để bạn giỏi ngôn ngữ lập trình là phải tìm hiểu cách định nghĩa các hàm bằng ngôn ngữ .

// Java
public void addNumbers() {
      //… add numbers
}

// JavaScript
function addNumbers() {
      //…add numbers
}

# Python
def add_numbers():
  #…addd numbers

3. Các cụm từ / biểu thức

Các cụm từ và biểu thức là một tập hợp con của một câu, nó có thể đứng như một đơn vị riêng của chính nó, mang đến cấu trúc cho câu.

Điều này đồng nghĩa với biểu thức (expression) hoặc câu lệnh (statement) trong ngôn ngữ lập trình, bao gồm cả luồng điều khiển (control-flow).

Như vậy rào cản thứ 3 mà bạn phải tìm hiểu là các câu lệnh hoặc biểu thức hợp lệ

Biểu thức và câu lệnh xác định luồng để thực hiện, gọi là luồng điều khiển (control-flow), bao gồm ternary-expression, if-else, for, while và do-while… Điều may mắn là khái niệm này giống nhau đối với tất cả các ngôn ngữ lập trình.

Tham khảo nhiều vị trí JavaScript Developer hấp dẫn trên TopDev

4. Cú pháp và ngữ nghĩa

Cú pháp cho biết cách thức để định nghĩa một câu đúng, được thực hiện bằng cách đánh giá chuỗi các ký tự hoặc chuỗi các từ.

Chẳng hạn như trong tiếng Anh, bạn có các thứ như dấu chấm câu và viết hoa. Ví dụ, xhfrst không phải là từ hợp lệ nhưng cherish là từ hợp lệ, ‘we you cherish‘ không phải là một câu hợp lệ, nhưng ‘we cherish you’ thì lại là câu hợp lệ.

Các ngôn ngữ lập trình cũng tương tự như vậy. Có những thứ làm cho một dòng mã lệnh trở nên không hợp lệ, ví dụ như thiếu dấu chấm phẩy hoặc sử dụng ký tự sai cho định danh.

Rào cản thứ 4 là đánh giá một dòng mã lệnh hợp lệ trong ngôn ngữ lập trình (tức là cú pháp của ngôn ngữ).

int myNumber$ = 12; // Java: syntax error - invalid token '$'
var myNumber$ = 12 // JavaScript: valid identifier
my_number = 12; # Python: syntax error - invalid token ';'

Đối với ngữ nghĩa, thì đó là sự liên quan đến ý nghĩa ngữ cảnh của câu hoặc tuyên bố được đề cập đến.

Sau khi đánh giá về cú pháp, cần đánh giá ý nghĩa trong ngữ cảnh. Chẳng hạn ‘The tree climbed the boy’ có một cấu trúc hợp lệ hoặc cú pháp chính xác, nhưng lại sai về ý nghĩa.

Lập trình cũng vậy, hầu hết các ngôn ngữ đều có các ngữ nghĩa riêng và việc học nó trở thành rào cản thứ tư đối với bạn.

// java 
int myNumber = 12;
myNumber = "12"; // error
# python
my_number = 12
my_number = "12" # valid expression

5. Các đặc tả ngôn ngữ giúp bạn giỏi ngôn ngữ lập trình

Các đặc tả ngôn ngữ là những thứ liên quan trực tiếp đến một ngôn ngữ cụ thể.

Chẳng hạn như: danh từ trong tiếng Pháp được chia giới tính. Nhưng điều này lại không có trong tiếng Anh.

Các ngôn ngữ lập trình cũng có những cái riêng gắn liền với nó. Bao gồm các lớp (Class), các kiểu dữ liệu (Data Type) và các cấu trúc dữ liệu (Data Structure)…

Chẳng hạn trong JavaScript có khái niệm về Prototype (nguyên mẫu). Nhưng trong Java thì không. Vì vậy, rào cản thứ năm là bạn phải hiểu và khái niệm hóa những đặc tả về ngôn ngữ.

Vì liên quan đến từng ngôn ngữ cụ thể nên có thể mất nhiều thời gian để khái niệm hóa hơn. Đặc biệt nếu là khái niệm hoàn toàn mới như ngôn ngữ F#.

Tạm kết

Việc trừu tượng hóa sẽ giúp bạn thấy được sự giống nhau giữa các thể hiện khác nhau.

Khi bạn hiểu được và thực hiện được 5 quy tắc trên, bạn sẽ dễ dàng học và làm chủ một ngôn ngữ lập trình mới.

Việc lặp lại quá trình này sẽ khá khó khăn trong lần đầu tiên, nhưng đừng nản chí vội.  Bạn cứ lặp lại vài lần thì nó sẽ trở thành bản năng đối với bạn.

Qua bài viết này, mình hi vọng sẽ giúp các bạn có nhìn khác về việc học lập trình. Từ đó thay đổi tư duy và cách học để nhanh chóng thành thạo, giỏi ngôn ngữ lập trình mới. Ý kiến của bạn về cách học lập trình như thế nào? Để lại bình luận bên dưới nhé.

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Tìm kiếm việc làm IT mới nhất tại TopDev!

Cần cải thiện kỹ năng JavaScript nào để làm React?

Cần cải thiện kỹ năng JavaScript nào để làm React?

Bài viết được sự cho phép của tác giả Bùi Thị Huyền

Một trong những điều quan trọng nhất cần hiểu về React là về cơ bản nó là JavaScript. Điều này có nghĩa là bạn càng giỏi JavaScript thì bạn càng thành công với React.

Hãy chia nhỏ 7 khái niệm cơ bản mà bạn nên biết về JavaScript để thành thạo React.

Và khi tôi nói những khái niệm này là cần thiết, ý tôi là chúng được sử dụng trong mọi ứng dụng đơn lẻ mà một nhà phát triển React tạo ra, với rất ít hoặc không có ngoại lệ.

Học những khái niệm này là một trong những điều quý giá nhất mà bạn có thể làm để tăng tốc khả năng tạo dự án React và trở thành một nhà phát triển React lành nghề, vì vậy hãy bắt đầu.

1. Khai báo hàm và Arrow Functions

Cơ sở của bất kỳ ứng dụng React nào là thành phần. Trong React, các thành phần được định nghĩa bằng cả hàm và lớp JavaScript. Nhưng không giống như các hàm JavaScript, các thành phần React trả về các phần tử JSX được sử dụng để cấu trúc giao diện ứng dụng của chúng ta.

// JavaScript function: returns any valid JavaScript type
function javascriptFunction() {
  return "Hello world";
}

// React function component: returns JSX
function ReactComponent(props) {
  return <h1>{props.content}</h1>   
}

 

Lưu ý cách viết hoa khác nhau giữa tên của các hàm JavaScript và các thành phần của hàm React. Các hàm JavaScript được đặt tên bằng cách viết hoa lạc đà, trong khi các thành phần của hàm React được viết bằng cách viết hoa pascal (trong đó tất cả các từ đều được viết hoa).

Có hai cách khác nhau để viết một hàm trong JavaScript: cách truyền thống, sử dụng từ khóa hàm, được gọi là khai báo hàm và dưới dạng Arrow Function, đã được giới thiệu trong ES6.

Cả khai báo hàm và Arrow Function đều có thể được sử dụng để viết các thành phần hàm trong React.

Lợi ích chính của các Arrow Function là tính ngắn gọn của chúng. Chúng ta có thể sử dụng một số phím tắt để viết các hàm của chúng ta nhằm loại bỏ các bản viết sẵn không cần thiết, như vậy chúng ta thậm chí có thể viết tất cả trên một dòng.

// Function declaration syntax
function MyComponent(props) {
  return <div>{props.content}</div>;
}
 
// Arrow function syntax
const MyComponent = (props) => {
  return <div>{props.content}</div>;
}
 
// Arrow function syntax (shorthand)
const MyComponent = props => <div>{props.content}</div>;

/* 
In the last example we are using several shorthands that arrow functions allow:

1. No parentheses around a single parameter
2. Implicit return (as compared to using the "return" keyword)
3. No curly braces for function body
*/

 

Một lợi ích nhỏ của việc sử dụng khai báo hàm trên các Arrow Function là bạn không phải lo lắng về các vấn đề với việc nâng cấp.

Do hoạt động lưu trữ của JavaScript, bạn có thể sử dụng nhiều thành phần hàm được tạo bằng khai báo hàm trong một tệp duy nhất theo bất kỳ thứ tự nào bạn muốn.

Tuy nhiên, các thành phần hàm được tạo bằng các Arrow Function không thể được sắp xếp theo cách bạn muốn. Bởi vì các biến JavaScript được lưu trữ, các thành phần hàm mũi tên phải được khai báo trước khi chúng được sử dụng:

function App() {
  return (
    <>
      {/* Valid! FunctionDeclaration is hoisted */}
      <FunctionDeclaration />
      {/* Invalid! ArrowFunction is NOT hoisted. Therefore, it must be declared before it is used */}
      <ArrowFunction />
    </>
}
  
function FunctionDeclaration() {
  return <div>Hello React!</div>;   
}

function ArrowFunction() {
  return <div>Hello React, again!</div>;   
} 

 

Một sự khác biệt nhỏ khác trong việc sử dụng cú pháp khai báo hàm là bạn có thể xuất ngay một thành phần từ tệp bằng cách sử dụng export default hoặc export trước khi hàm được khai báo. Bạn chỉ có thể sử dụng từ khóa export trước các Arrow Function (xuất mặc định phải được đặt trên một dòng bên dưới thành phần).

// Function declaration syntax can be immediately exported with export default or export
export default function App() {
  return <div>Hello React</div>;   
}

// Arrow function syntax must use export only
export const App = () => {
  return <div>Hello React</div>;     
}

 

2. Template Literals

Với việc bổ sung ES6, chúng tôi đã được cung cấp một dạng chuỗi mới hơn được gọi là khuôn mẫu, bao gồm hai dấu tích phía sau ` thay vì dấu nháy đơn hoặc dấu ngoặc kép.

Thay vì phải sử dụng toán tử +, chúng ta có thể kết nối các chuỗi bằng cách đặt một biểu thức JavaScript (chẳng hạn như một biến) trong một cú pháp $ {} đặc biệt:

/* 
Concatenating strings prior to ES6.
Notice the awkward space after the word Hello?
*/
function sayHello(text) {
  return 'Hello ' + text + '!';
}

sayHello('React'); // Hello React!
 
/* 
Concatenating strings using template literals.
See how much more readable and predictable this code is?
*/
function sayHelloAgain(text) {
  return `Hello again, ${text}!`;
}

sayHelloAgain('React'); // Hello again, React!

 

Điều mạnh mẽ về các ký tự mẫu là khả năng sử dụng bất kỳ biểu thức JavaScript nào trong JavaScript (tức là bất kỳ thứ gì trong JavaScript phân giải thành một giá trị) trong cú pháp $ {}.

Chúng tôi thậm chí có thể bao gồm logic có điều kiện bằng cách sử dụng toán tử bậc ba, điều này hoàn hảo để thêm hoặc xóa có điều kiện một lớp hoặc quy tắc kiểu cho một phần tử JSX nhất định:

/* Go to react.new and paste this code in to see it work! */
import React from "react";

function App() {
  const [isRedColor, setRedColor] = React.useState(false);

  const toggleColor = () => setRedColor((prev) => !prev);

  return (
    <button
      onClick={toggleColor}
      style={{
        background: isRedColor ? "red" : "black",
        color: 'white'
      }}
    >
      Button is {isRedColor ? "red" : "not red"}
    </button>
  );
}

export default App;

 

Ví dụ: khi chúng tôi sử dụng các giá trị chuỗi có thể thay đổi trong các phần tử head hoặc body trong trang web của chúng tôi:

import React from 'react';
import Head from './Head';

function Layout(props) {
  // Shows site name (i.e. Reed Barger) at end of page title
  const title = `${props.title} | Reed Barger`;  
    
  return (
     <>
       <Head>
         <title>{title}</title>
       </Head>
       <main>
        {props.children}
       </main>
     </>
  );
}

 

3. Điều kiện: &&, ||, Ternary Operator

Xét rằng React chỉ là JavaScript, rất dễ dàng hiển thị (hoặc ẩn) các phần tử JSX có điều kiện bằng cách sử dụng các câu lệnh if đơn giản và đôi khi là câu lệnh switch.

import React from "react";

function App() {
  const isLoggedIn = true;

  if (isLoggedIn) {
    // Shows: Welcome back!
    return <div>Welcome back!</div>;
  }

  return <div>Who are you?</div>;
}

export default App;

 

Với sự trợ giúp của một số toán tử JavaScript thiết yếu, chúng tôi cắt giảm sự lặp lại và làm cho mã của chúng tôi ngắn gọn hơn.

Chúng ta có thể biến đổi câu lệnh if ở trên thành câu lệnh sau, sử dụng toán tử bậc ba. Toán tử bậc ba hoạt động giống hệt như câu lệnh if, nhưng ngắn hơn, nó là một biểu thức (không phải một câu lệnh) và có thể được chèn vào bên trong JSX:

import React from "react";

function App() {
  const isLoggedIn = true;

  // Shows: Welcome back!
  return isLoggedIn ? <div>Welcome back!</div> : <div>Who are you?</div>
}

export default App;

 

Các toán tử bậc ba cũng có thể được sử dụng bên trong dấu ngoặc nhọn (một lần nữa, vì nó là một biểu thức):

import React from "react";

function App() {
  const isLoggedIn = true;

  // Shows: Welcome back!
  return <div>{isLoggedIn ? "Welcome back!" : "Who are you?"</div>;
}

export default App;

 

Nếu giá trị đầu tiên (toán hạng) trong điều kiện là true, toán tử && sẽ hiển thị toán hạng thứ hai. Nếu không, nó trả về toán hạng đầu tiên. Và vì nó là giả (là một giá trị được JavaScript tự động chuyển thành boolean false) nên nó không được JSX hiển thị:

import React from "react";

function App() {
  const isLoggedIn = true;

  // If true: Welcome back!, if false: nothing
  return <div>{isLoggedIn && "Welcome back!"}</div>;
}

export default App;

 

Đối với logic này, chúng ta có thể sử dụng dấu || (hoặc) toán tử. Về cơ bản, nó hoạt động ngược lại với toán tử &&. Nếu toán hạng đầu tiên là true, toán hạng đầu tiên (falsy) được trả về. Nếu toán hạng đầu tiên sai, toán hạng thứ hai được trả về.

import React from "react";

function App() {
  const isLoggedIn = true;

  // If true: nothing, if false: Who are you?
  return <div>{isLoggedIn || "Who are you?"}</div>;
}

export default App;

 

  Quét mảng hiệu quả với hàm reduce trong Javascript

  Sử dụng map, filter và reduce trong Javascript như nào cho đúng?

4. 3 phương thức mảng: .map(), .filter(), .reduce()

Chèn các giá trị nguyên thủy vào các phần tử JSX rất dễ dàng – chỉ cần sử dụng dấu ngoặc nhọn.

Chúng ta có thể chèn bất kỳ biểu thức hợp lệ nào, bao gồm các biến chứa giá trị nguyên thủy (chuỗi, số, boolean, v.v.) cũng như các thuộc tính đối tượng chứa giá trị nguyên thủy.

import React from "react";

function App() {
  const name = "Reed";
  const bio = {
    age: 28,
    isEnglishSpeaker: true
  };

  return (
    <>
      <h1>{name}</h1>
      <h2>I am {bio.age} years old</h2>
      <p>Speaks English: {bio.isEnglishSpeaker}</p>
    </>
  );
}

export default App;

 

Điều gì sẽ xảy ra nếu chúng ta có một mảng và chúng ta muốn lặp lại mảng đó để hiển thị từng phần tử mảng trong một phần tử JSX riêng lẻ?

Đối với điều này, chúng ta có thể sử dụng phương thức .map (). Nó cho phép chúng ta chuyển đổi từng phần tử trong mảng của chúng ta theo cách chúng ta chỉ định với hàm bên trong. Lưu ý rằng nó đặc biệt ngắn gọn khi được sử dụng kết hợp với Arrow Function.

/* Note that this isn't exactly the same as the normal JavaScript .map() method, but is very similar. */
import React from "react";

function App() {
  const programmers = ["Reed", "John", "Jane"];

  return (
    <ul>
      {programmers.map(programmer => <li>{programmer}</li>)}
    </ul>
  );
}

export default App;

 

.map() giống như nhiều phương thức mảng, trả về một bản sao ngắn của mảng mà nó đã lặp lại. Điều này cho phép mảng đã trả về của nó được chuyển sang phương thức tiếp theo trong chuỗi.

.filter() như tên gọi của nó, cho phép chúng tôi lọc các phần tử nhất định ra khỏi mảng của chúng tôi. Ví dụ: nếu chúng tôi muốn xóa tất cả tên của các lập trình viên bắt đầu bằng “J”, chúng tôi có thể làm như vậy với .filter():

import React from "react";

function App() {
  const programmers = ["Reed", "John", "Jane"];

  return (
    <ul>
      {/* Returns 'Reed' */}
      {programmers
       .filter(programmer => !programmer.startsWith("J"))
       .map(programmer => <li>{programmer}</li>)}
    </ul>
  );
}

export default App;

 

Điều quan trọng là phải hiểu rằng cả .map() và .filter() chỉ là các biến thể khác nhau của phương thức mảng .reduce() phương thức này có khả năng chuyển đổi các giá trị mảng thành hầu như bất kỳ kiểu dữ liệu nào, ngay cả các giá trị không phải là mảng.

Đây là .reduce() thực hiện thao tác tương tự như phương thức .filter() của chúng tôi ở trên:

import React from "react";

function App() {
  const programmers = ["Reed", "John", "Jane"];

  return (
    <ul>
      {/* Returns 'Reed' */}
      {programmers
        .reduce((acc, programmer) => {
          if (!programmer.startsWith("J")) {
            return acc.concat(programmer);
          } else {
            return acc;
          }
        }, [])
        .map((programmer) => (
          <li>{programmer}</li>
        ))}
    </ul>
  );
}

export default App;

 

5. Thủ thuật đối tượng: Property Shorthand, cơ cấu hủy, toán tử Spread

Giống như mảng, các đối tượng là một cấu trúc dữ liệu mà bạn cần phải hiểu khi sử dụng React.

Đây là viết tắt thuộc tính đối tượng:

const name = "Reed";

const user = {
  // instead of name: name, we can use...
  name
};

console.log(user.name); // Reed

 

Cách tiêu chuẩn để truy cập thuộc tính từ một đối tượng là sử dụng ký hiệu dấu chấm. Tuy nhiên, một cách tiếp cận thậm chí còn thuận tiện hơn là cấu trúc đối tượng. Nó cho phép chúng tôi trích xuất các thuộc tính dưới dạng các biến riêng lẻ cùng tên từ một đối tượng nhất định.

Có vẻ như bạn đang viết ngược lại một đối tượng, đó là điều làm cho quá trình trở nên trực quan. Nó dễ sử dụng hơn nhiều so với việc phải sử dụng tên đối tượng nhiều lần để truy cập mỗi khi bạn muốn lấy một giá trị từ nó.

const user = {
  name: "Reed",
  age: 28,
  isEnglishSpeaker: true
};
 
// Dot property access
const name = user.name;
const age = user.age;
 
// Object destructuring
const { age, name, isEnglishSpeaker: knowsEnglish } = user;
// Use ':' to rename a value as you destructure it

console.log(knowsEnglish); // true

 

Bây giờ nếu bạn muốn tạo các đối tượng từ những đối tượng hiện có, bạn có thể liệt kê từng thuộc tính một, nhưng điều đó có thể lặp đi lặp lại.

Thay vì sao chép các thuộc tính theo cách thủ công, bạn có thể trải tất cả các thuộc tính của một đối tượng vào một đối tượng khác (khi bạn tạo nó) bằng cách sử dụng toán tử trải đối tượng:

const user = {
  name: "Reed",
  age: 28,
  isEnglishSpeaker: true
};

const firstUser = {
  name: user.name,
  age: user.age,
  isEnglishSpeaker: user.isEnglishSpeaker
};

// Copy all of user's properties into secondUser 
const secondUser = {
  ...user  
};

 

Điều tuyệt vời về đối tượng là bạn có thể rải bao nhiêu đối tượng thành một đối tượng mới tùy thích và bạn có thể sắp xếp chúng như thuộc tính. Nhưng lưu ý rằng các thuộc tính đến sau có cùng tên sẽ ghi đè các thuộc tính trước đó:

const user = {
  name: "Reed",
  age: 28
};

const moreUserInfo = {
  age: 70,
  country: "USA"
};

// Copy all of user's properties into secondUser 
const secondUser = {
  ...user,
  ...moreUserInfo,
   computer: "MacBook Pro"
};

console.log(secondUser);
// { name: "Reed", age: 70, country: "USA", computer: "Macbook Pro" }

 

Việc làm Javascript lương cao trên TopDev

6. Promises + Async/Await Syntax

Hầu như mọi ứng dụng React đều bao gồm mã không đồng bộ – mã mất một khoảng thời gian không xác định để được thực thi. Đặc biệt nếu bạn cần lấy hoặc thay đổi dữ liệu từ API bên ngoài bằng cách sử dụng các tính năng của trình duyệt như API tìm nạp hoặc axios thư viện bên thứ ba.

Promises được sử dụng để giải quyết mã không đồng bộ để làm cho nó phân giải như mã đồng bộ, bình thường mà chúng ta có thể đọc từ trên xuống dưới.

Promises truyền thống sử dụng lệnh gọi lại để giải quyết mã không đồng bộ của chúng tôi. Chúng tôi sử dụng lệnh gọi lại .then() để giải quyết các promises đã được giải quyết thành công, trong khi chúng tôi sử dụng lệnh gọi lại .catch() để giải quyết các lời hứa phản hồi có lỗi.

Đây là một ví dụ thực tế về việc sử dụng React để tìm nạp dữ liệu từ API GitHub của tôi bằng cách sử dụng API Tìm nạp để hiển thị hình ảnh hồ sơ của tôi. Dữ liệu được giải quyết bằng promises:

/* Go to react.new and paste this code in to see it work! */
import React from 'react';
 
const App = () => {
  const [avatar, setAvatar] = React.useState('');
 
  React.useEffect(() => {
    /* 
      The first .then() lets us get JSON data from the response.
      The second .then() gets the url to my avatar and puts it in state. 
    */
    fetch('https://api.github.com/users/reedbarger')
      .then(response => response.json())
      .then(data => setAvatar(data.avatar_url))
      .catch(error => console.error("Error fetching data: ", error);
  }, []);
 
  return (
    <img src={avatar} alt="Reed Barger" />
  );
};
 
export default App;

 

Thay vì luôn cần sử dụng các lệnh gọi lại để phân giải dữ liệu của chúng ta từ một lời hứa, chúng ta có thể sử dụng một cú pháp được làm sạch trông giống với mã đồng bộ, được gọi là cú pháp async / await.

Các từ khóa async và await chỉ được sử dụng với các hàm (các hàm JavaScript thông thường, không phải các thành phần hàm React).

Để sử dụng chúng, chúng ta cần đảm bảo rằng mã không đồng bộ của chúng ta nằm trong một hàm được bổ sung thêm từ khóa async. Giá trị của bất kỳ lời hứa nào sau đó có thể được giải quyết bằng cách đặt từ khóa await trước nó.

/* Go to react.new and paste this code in to see it work! */
import React from "react";

const App = () => {
  const [avatar, setAvatar] = React.useState("");

  React.useEffect(() => {
    /* 
	  Note that because the function passed to useEffect cannot be async, we must create a separate function for our promise to be resolved in (fetchAvatar)
    */
    async function fetchAvatar() {
      const response = await fetch("https://api.github.com/users/reedbarger");
      const data = await response.json();
      setAvatar(data.avatar_url);
    }

    fetchAvatar();
  }, []);

  return <img src={avatar} alt="Reed Barger" />;
};

export default App;

 

Chúng tôi vẫn sử dụng .catch() và khi chúng tôi gặp lỗi, chẳng hạn như khi chúng tôi nhận được phản hồi từ API của mình nằm trong phạm vi trạng thái 200 hoặc 300:

/* Go to react.new and paste this code in to see it work! */
import React from "react";

const App = () => {
  const [avatar, setAvatar] = React.useState("");

  React.useEffect(() => {
    async function fetchAvatar() {
      /* Using an invalid user to create a 404 (not found) error */
      const response = await fetch("https://api.github.com/users/reedbarge");
      if (!response.ok) {
        const message = `An error has occured: ${response.status}`;
        /* In development, you'll see this error message displayed on your screen */
        throw new Error(message);
      }
      const data = await response.json();

      setAvatar(data.avatar_url);
    }

    fetchAvatar();
  }, []);

  return <img src={avatar} alt="Reed Barger" />;
};

export default App;

 

7. ES Modules + Import / Export syntax

ES6 đã cho chúng tôi khả năng dễ dàng chia sẻ mã giữa các tệp JavaScript của riêng chúng tôi cũng như các thư viện của bên thứ ba bằng cách sử dụng ES modules.

Ngoài ra, khi chúng tôi tận dụng các công cụ như Webpack, chúng tôi có thể nhập các nội dung như hình ảnh và svgs, cũng như các tệp CSS và sử dụng chúng làm giá trị động trong mã của chúng tôi.

/* We're bringing into our file a library (React), a png image, and CSS styles */
import React from 'react';
import logo from '../img/site-logo.png';
import '../styles/app.css';
 
function App() {
  return (
    <div>
      Welcome!
      <img src={logo} alt="Site logo" />
    </div>
  );
}
 
export default App;

 

Ý tưởng đằng sau các ES modules là có thể chia mã JavaScript của chúng tôi thành các tệp khác nhau, để biến nó thành modules hoặc có thể tái sử dụng trên ứng dụng của chúng tôi.

Chúng tôi cũng có thể viết tất cả các lần exports vào cuối tệp thay vì bên cạnh mỗi biến hoặc hàm:

// constants.js
const name = "Reed";

const age = 28;

function getName() {
  return name;   
}

export { name, age };
export default getName;

// app.js
import getName, { name, age } from '../constants.js';

console.log(name, age, getName());

 

Bạn cũng có thể đặt bí danh hoặc đổi tên những gì bạn đang nhập bằng từ khóa as cho các mục nhập được đặt tên. Lợi ích của việc xuất mặc định là chúng có thể được đặt tên theo bất kỳ thứ gì bạn thích.

// constants.js
const name = "Reed";

const age = 28;

function getName() {
  return name;   
}

export { name, age };
export default getName;

// app.js
import getMyName, { name as myName, age as myAge } from '../constants.js';

console.log(myName, myAge, getMyName());

Nguồn: https://www.freecodecamp.org/news/javascript-skills-you-need-for-react-practical-examples/

Bài viết gốc được đăng tải tại viblo.asia/u/bui.thi.huyen

Xem thêm:

Tìm việc làm IT mới nhất trên TopDev

Test case là gì? Cách viết Test case hiệu quả

Test case là gì? Cách viết Test case hiệu quả

Test case là một tài liệu quan trọng trong kiểm thử phần mềm nói riêng và quá trình phát triển dự án phần mềm nói chung. Việc viết test case hiệu quả sẽ giúp tăng tính ổn định và độ tin cậy của phần mềm, quyết định trực tiếp đến sự thành công của dự án. Trong bài viết hôm nay, chúng ta cùng nhau tìm hiểu xem Test case là gìcách để viết được một test case hiệu quả nhé.

Test case là gì?

Test case – trường hợp kiểm thử là một tài liệu tập hợp các hành động được thực thi để kiểm tra, xác minh xem một chức năng của phần mềm có hoạt động chính xác với yêu cầu hay không. Một test case sẽ mô tả quá trình dữ liệu đầu vào (input), các hành động(action) hay sự kiện(event) thực hiện một cách tuần tự và kết quả mong đợi (expected result).

Test case là gì?

Mục đích và vai trò của test case trong kiểm thử phần mềm là đảm bảo rằng phần mềm hoạt động đúng như mong đợi, đáp ứng được cả yêu cầu về chức năng và phi chức năng. Một test case khi thực hiện kiểm thử có kết quả thất bại thì phần mềm/ chức năng đó được xác định là có lỗi (bugs) và cần phải được sửa lỗi trước khi đưa đến tay người dùng đầu cuối.

Thành phần của một Test case

Test case thông thường sẽ chứa các thành phần để mô tả chi tiết về cách thức kiểm thử một tính năng của phần mềm. Tùy theo công ty, tổ chức sẽ quy định template có thể khác nhau cho một test case; tuy nhiên vẫn sẽ cần đảm bảo những thành phần chính sau:

Thành phần của một Test case

1. ID test case

Giá trị duy nhất giúp xác định test case để phân biệt với các test case khác. Tùy quy định của dự án mà sẽ có cách quy ước chung đặt ID cho test case, thông thường có thể sử dụng ID dự án + ID module + số thứ tự test case.

2. Mô tả test case

Thể hiện ngắn gọn các thông tin liên quan, quan trọng nhất là mô tả mục đích của test case. Các thông tin mô tả sẽ giúp tester dễ dàng hình dung ra nội dung mà test case sẽ thực hiện.

3. Các bước của test case

Mô tả quy trình thực hiện test theo từng bước (step by step) với đầu vào (input) và đầu ra (output) của từng bước chi tiết. Đây là phần quan trọng nhất của một test case, cần có sự phân chia các bước rõ ràng và hợp lý, sẽ tốn thời gian nhất của một tester khi viết phần này.

4. Kết quả kỳ vọng

Kết quả mong muốn phần mềm, chức năng đó đạt được khi thực hiện các bước theo test case. Đây cũng chính là cơ sở để so sánh với kết quả thực tế, từ đó đưa ra kết quả kiểm thử của test case là Pass hay Fail.

5. Kết quả thực tế

Kết quả kiểm thử, chứa thông tin chi tiết về hiệu suất và độ chính xác của chương trình dưới điều kiện kiểm thử cụ thể. Kết quả thường được thể hiện cụ thể ở mỗi bước để giúp chúng ta dễ dàng so sánh giữa kết quả thực tế và kết quả kỳ vọng; để từ đó làm cơ sở cho các bước xác định và sửa lỗi nếu có sau này.

  Test plan là gì? 4 bước cần thiết để thực hiện test plan?

  Stress testing là gì? Phân biệt stress testing và load testing

Một số loại test case phổ biến

Tùy vào mục đích của việc kiểm thử cũng như theo giai đoạn của dự án mà sẽ có những loại test case tương ứng được sinh ra. 

Test case là gì?

Chúng ta có thể chia test case ra thành một số loại như sau:

  • Functionality Test cases: kiểm thử chức năng
  • User Interface Test cases: kiểm thử giao diện người dùng
  • Performance Test cases: kiểm thử hiệu suất
  • Integration Test cases: kiểm thử tích hợp
  • Usability Test cases: kiểm thử tính khả dụng
  • Database Test cases: kiểm thử cơ sở dữ liệu
  • Security Test cases: kiểm thử bảo mật
  • User Acceptance Test cases: kiểm thử chấp nhận người dùng

Cách để viết một test case hiệu quả

Để tạo ra được bộ test case hiệu quả, team kiểm thử của dự án cũng cần phải có bước lên kế hoạch và thiết kế test case một cách chi tiết, đầy đủ. Một bộ test case hiệu quả cần đảm bảo rằng tất cả các chức năng của phần mềm trong yêu cầu đều được kiểm tra với số lượng test case ít nhất có thể, tránh việc gây lãng phí thời gian kiểm thử.

Cách để viết một test case hiệu quả

Một số bước dưới đây sẽ giúp bạn lên kế hoạch, thiết kế và thực hiện viết test case một cách hiệu quả hơn:

  • Đặt ra mục tiêu và tiêu chuẩn cụ thể cho test case: dựa vào nhu cầu và mong muốn của khách hàng, tester xác định được mục đích của test case là đảm bảo việc phần mềm sẽ có khả năng đáp ứng được những yêu cầu trên một cách tốt nhất.
  • Đảm bảo hiệu suất kiểm thử: một test case đưa ra phải xác định được chức năng của module mà test case đó sẽ thực hiện kiểm thử; các thành phần trong module sẽ tương tác với nhau thế nào; từ đó xây dựng kịch bản phù hợp đảm bảo rằng các thành phần đã được kiểm tra qua.
  • Hãy lưu ý đến yêu cầu phi chức năng: các yêu cầu phi chức năng là điều thường dễ bị đội phát triển bỏ qua trong quá trình viết code. Vì vậy việc mô tả trong test case là điều cần thiết giúp phần mềm đáp ứng được nhu cầu của người dùng một cách chính xác.
  • Chuẩn bị điều kiện tiền đề: đây là yếu tố kiên quyết để những người thực hiện có thể kiểm thử đúng test case mà bạn mô tả, vì vậy hãy chuẩn bị và ghi rõ các bước cần thiết.
  • Đặt tên cho test case: Tên của test case cần nêu lên rõ mục tiêu của nó, đảm bảo dễ hiểu và phù hợp với mục đích.
  • Mô tả các bước kiểm thử: hãy đặt mình là người đọc và làm theo các bước trong mô tả, bạn cần ghi rõ các thông tin cần thiết để đảm bảo rằng mọi người (bao gồm cả tester, developer hay cả khách hàng) cũng đều dễ dàng làm theo.
  • Xác định rõ và đủ kết quả mong đợi: kết quả mong đợi cần thể hiện chi tiết theo từng bước. Kết quả cuối cùng cần có sự chính xác về số liệu nhất là với các kiểm thử liên quan đến hiệu năng hay có ràng buộc về dữ liệu.
  • Kiểm tra và sắp xếp lại test case: cuối cùng khi đã viết được một số lượng test case nhất định, hãy kiểm tra và sắp xếp lại chúng một cách hợp lý; đồng thời có những công cụ giúp theo dõi việc chỉnh sửa, cập nhật trong tương lai.

Kết bài

Hy vọng bài viết này giúp các bạn không chỉ là tester mà còn là những bạn tham gia trực tiếp vào team phát triển phần mềm, có thể nắm được test case là gì, các thành phần của test case cũng như cách để viết một test case hiệu quả. Điều này sẽ giúp đỡ chúng ta rất nhiều trong quá trình làm việc xây dựng và phát triển phần mềm, đáp ứng đúng và đủ yêu cầu từ khách hàng. Cảm ơn các bạn đã đọc bài và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Xem ngay tin đăng tuyển lập trình viên đãi ngộ tốt trên TopDev

Ngoài CV, có thể thêm cái gì để tăng cơ hội được gọi phỏng vấn?

tăng cơ hội được gọi phỏng vấn

Bài viết được sự cho phép của tác giả Lê Tuấn Anh

Như các bạn đã biết (hoặc chưa biết), để ứng tuyển cho một công việc thì ta cần phải gửi CV/Resume và đôi khi kèm theo cả Cover Letter. Với những công việc không quá nhiều cạnh tranh, ở công ty be bé, thì một CV chuẩn cả nội dung lẫn hình thức sẽ có cơ hội được gọi đi phỏng vấn rất là cao. Tuy nhiên nếu bạn đang ứng tuyển cho các công ty lớn, kiểu các tập đoàn đa quốc gia, đại sứ quán, vị trí Manager, Executive các thứ thì có thể gửi mỗi CV không là chưa đủ. Ứng tuyển vào các vị trí đó có rất rất nhiều các bạn giỏi, vậy nên bên cạnh việc CV phải thật nổi bật, ta nên cố gắng có thêm một vài cách khác để gây ấn tượng. Dưới đây là một số cách mà mình đã tư vấn cho các bạn khách hàng của mình sử dụng để ứng tuyển thành công:

1) Có một portfolio cá nhân

Portfolio cá nhân là nơi tổng hợp lại chi tiết các sản phẩm ta đã làm, hình ảnh video dự án mà ta đã tổ chức. Vì CV chỉ gói gọn trong 1-2 trang giấy thôi nên đôi lúc không lột tả hết được sự hoành tráng của những thứ ta đã làm. Thế nên mới cần có portfolio đi kèm.

Portfolio hiện tại mình thấy đơn giản nhất có 2 cách, 1 là làm portfolio trên Powerpoint sau đó xuất ra file PDF và gửi cho nhà tuyển dụng. Phương án 2 là ta tạo một trang web cá nhân trên WordPress và cho link vào trong CV, như vậy nhà tuyển dụng khi ấn vào link sẽ biết thêm rất nhiều thông tin về ta.

Portfolio đặc biệt quan trọng nếu các bạn đang quan tâm đến lĩnh vực Marketing, portfolio có thể là tập hợp các bài viết đã viết hoặc đơn giản là giới thiệu về bản thân và có CV chẳng hạn. Ví dụ:

portfolio cá nhân

portfolio cá nhân

Các bạn có thể đọc thêm bài cách tạo website cá nhân ở đây để tự làm portfolio. Dễ lắm không khó đâu.

2) Giải quyết vấn đề cho công ty

Nếu bạn cảm thấy CV và Cover Letter của bản thân mình không nổi bật lắm và thật sự mong muốn được vào làm việc ở một tổ chức/ vị trí nào đó, mình khuyên bạn nên làm một tài liệu giải quyết vấn đề cho công ty. Tuỳ theo vị trí mà công ty đang tuyển là gì mà bạn có thể soạn ra một bản tài liệu các phương án giải quyết và công việc bạn có thể làm để giải quyết vấn đề đó.

Ví dụ cụ thể, có một hãng quần áo lớn trên thế giới chuẩn bị mở chi nhánh tại Việt Nam và đang cần tuyển vị trí Marketing. Cô bạn mình bên cạnh việc chuẩn bị CV và Cover Letter thật đẹp và thật hay, bạn ấy chuẩn bị thêm một bản phân tích thị trường thời trang tại Việt Nam hiện tại, điểm mạnh và điểm yếu của nhãn hàng đó khi vào Việt Nam, các đối thủ của họ và các cách để phát triển khi họ vào Việt Nam. Khỏi phải nói, khi nhà tuyển dụng đọc chắc chắn đã gọi cô bạn mình đi phỏng vấn liền.

portfolio cá nhân

tuyển dụng

Bây giờ lấy ví dụ đọc một bản tin tuyển dụng bên dưới nhé:

tin tuyển dụng

Đây là một vị trí thực tập nước ngoài. Nếu ta ở Việt Nam và cũng chỉ gửi CV, Cover Letter nhàng nhàng như các bạn khác, làm sao cạnh tranh nổi? Vậy bây giờ ta thử xem xem công việc ở đây là gì? Các bạn đọc qua có thể thấy ‘Web & app translation’, ‘Content Marketing’, ‘Customer satisfaction’, etc.

Vậy nếu ta thực sự đam mê công việc này và muốn gây ấn tượng với nhà tuyển dụng, ta sẽ lên ngay website, tải ngay app của họ về và thử translate ra tiếng Việt luôn. Ta cũng gửi cho họ một số nội dung content mà ta đề xuất nếu có thể được nhận cho vị trí này. Không xét đến việc ý kiến của chúng ta đã hay hay chưa, chỉ cần nhà tuyển dụng thấy bạn bỏ thời gian và công sức ra để hoàn thành việc này là họ đã yêu lắm lắm rồi.

  Chưa Có Kinh Nghiệm, Làm Thế Nào Để Cover Letter Ấn Tượng Hơn?

  Cách tạo một portfolio ấn tượng cho Product Manager

3) Viết bản kế hoạch 30 – 60 – 90 ngày

Ở một vài vị trí của các công ty lớn, đặc biệt là khi tuyển các vị trí Manager, nhà tuyển dụng thường bắt ứng viên phải viết một bản kế hoạch làm việc của họ trong 30 – 60 và 90 ngày đầu tiên của họ tại công việc đó nếu họ được nhận. Mục đích của bản kế hoạch này là để giúp nhà tuyển dụng đánh giá được bạn ở 3 thứ:

  1. Bạn có hiểu rõ công việc không?
  2. Bạn có thể hoàn thành tốt công việc này không?
  3. Bạn có phải là một người giỏi kế hoạch không?

Bản kế hoạch này rất hay, vậy tại sao chúng ta không áp dụng khi đi ứng tuyển nhỉ. Bên cạnh CV và Cover Letter, ta có thể làm thêm một bản kế hoạch 30-60-90 ngày nếu ta được nhận vào vị trí này để gửi cho nhà tuyển dụng, từ đó giúp nhà tuyển dụng thấy ta thực sự mong muốn được làm ở công việc này hơn. Thường một bản kế hoạch 30-60-90 ngày sẽ có các phần như thế này, mình copy lại nguyên bản tiếng Anh để các bạn tham khảo:

  • Introduction: An overview of what you would like to accomplish the first three months on the job.
  • 30-Day Plan/First 30 days on the job: During the first 30 days on the job, time is spent attending training, meeting team members, learning the organization’s systems and its products and services, reviewing procedures and client accounts.
  • 60-Day Plan/First 60 days on the job : Studying best practices in the industry, setting goals for the next 30 days, meeting with supervisor to gather feedback, building relationships with your colleagues, identifying potential mentors, reviewing the efficiency of company processes and procedures, visiting other department, and continuing to attend training.
  • 90-Day Plan/First 90 days on the job: Obtaining feedback on new processes and procedures, implementing new strategies and procedures, and addressing the three strategic initiatives.

Để có được một bản kế hoạch tốt, bạn cần phải nghiên cứu rất nhiều. Nên nếu đã làm thì hãy làm cho kĩ, đừng làm cho có nhé.

4) Đến thẳng công ty để nộp

Cách này hên xui và tuỳ thuộc vào sở thích của mỗi công ty nhé.

Có một khách hàng của mình gặp vấn đề là gửi hồ sơ online mãi mà không có bên nào nhận. Bất đắc dĩ mình mới bày cách là bạn ấy hãy in hồ sơ ra thật đẹp, sau đó mang thẳng đến công ty, nộp cho lễ tân hoặc phòng HR của công ty đó. Liều ăn nhiều. May sao khi bạn đến nộp thì vị trí đó chưa tuyển được người, HR cũng đang rảnh rỗi, thấy bất ngờ khi có một ứng viên đến nộp trực tiếp nên gọi vào phỏng vấn luôn. Một tuần sau thì bạn được vào làm.

Trên đây là một số cách mình khuyến khích các bạn có thể thử áp dụng nếu trong trường hợp CV và Cover Letter gửi đi mãi mà chưa hiệu quả. Tìm việc là một quá trình dài, đôi khi còn phụ thuộc cả vào may mắn nữa. Vậy nên nếu bạn đã đầu tư rất kĩ cho hồ sơ mà không nhận được phản hồi, cũng đừng nản, cứ tiếp tục cố gắng nhé. Người tốt sẽ nhận được điều tốt thôi.

Bài viết gốc được đăng tải tại anhtuanle.com

Có thể bạn quan tâm:

Xem thêm việc làm Developer hấp dẫn trên TopDev

Gợi ý 5 cách giúp bạn có cảm hứng hơn khi làm việc

Gợi ý 5 cách giúp bạn có cảm hứng hơn khi làm việc

Bài viết được sự cho phép của tác giả Lê Tuấn Anh

Nếu ở thời điểm này chưa đổi hoặc chưa tìm được công việc mới tốt hơn, dưới đây là gợi ý 5 điều bạn có thể áp dụng vào công việc hiện tại để xem có cảm thấy vui vẻ và hạnh phúc hơn không.

1/ Tìm cơ hội chia sẻ lại kiến thức mình biết cho người khác

Nếu bạn đã đi làm trên 1 năm, mình tin bạn hoàn toàn có thể chia sẻ lại kiến thức công việc bạn đã và đang làm cho người khác. Người đó có thể là một em học sinh cấp ba, một em sinh viên hoặc một người đang muốn chuyển ngành nhưng còn thiếu thông tin. Có những việc mỗi ngày bạn làm hoàn toàn thấy bình thường nhưng với người khác là cả một chân trời kiến thức mới.

Ví dụ, một chị make-up artist chia sẻ với mình rằng công việc hàng ngày của chị trang điểm cho người nổi tiếng là rất bình thường với chị, không có gì đặc biệt, nhưng với những người mới vào nghề make-up hoặc đang tìm hiểu về nghề thì rất muốn nghe chị chia sẻ về những điều đó.

Khi bạn chia sẻ kiến thức của mình cho người khác, tự nhiên bạn sẽ cảm thấy vui hơn. Cảm giác y chang lúc bạn đi từ thiện vậy đó.

Bạn có thể chia sẻ bằng cách (1) viết bài chia sẻ trên mạng xã hội (cứ viết thôi, đừng lo đếm like hay có ai comment), (2) làm mentor cho ai đó hoặc (3) tham gia làm diễn giả, người chia sẻ cho một chương trình, sự kiện hay đơn giản là một số Podcast của ai đó.

2/ Viết lại quy trình những công việc mình đang làm

Một trong những lý do khiến một người có thể chán một công việc đó là cảm giác lặp đi lặp lại mỗi ngày đến chán ngắt. Vì mình đã quá quen với công việc đó nên cảm giác làm mà chẳng cần suy nghĩ. Tuy nhiên, với những người mới bắt đầu công việc đó thì lại không như vậy. Hãy nhớ lại thời điểm bạn mới bắt đầu công việc bạn đang làm, bạn đã bỡ ngỡ, phải tự mày mò kiến thức tự bơi như thế nào.

Bây giờ, hãy giúp người đi sau và giúp công ty một việc – viết lại quy trình công việc bạn đang làm ra giấy theo từng bước chi tiết nhất có thể. Ví dụ bạn đang làm công việc chăm sóc khách hàng trên điện thoại, quy trình hàng ngày của bạn là (1) tìm kiếm khách hàng trên những trang web nào -> (2) nhập liệu những thông tin gì vào đâu -> (3) gọi điện khách hàng thì nói gì, nếu khách hàng phản hồi lại thì trả lời thế nào -> (4) theo dõi khách hàng bao nhiêu ngày một lần, qua kênh nào…

Công việc nào cũng có thể ghi lại quy trình. Hãy tưởng tượng nếu bạn đang chỉ cho một người mới toanh làm công việc bạn đang làm, bạn sẽ viết ra từng bước như thế nào. Việc này là cách để mình tổng hợp, hệ thống hoá lại công việc mình đang làm, tìm xem có điểm nào cải thiện tốt hơn không, và cũng giúp ích cho công ty (thành thật mình thấy các công ty nhỏ rất thiếu quy trình, cần những thứ như thế này).

3/ Tìm cơ hội học tập ở chỗ làm hiện tại

Thêm một lý do nữa mình thường nghe được khi làm tư vấn hướng nghiệp cho những bạn đang chán việc đó là cảm giác “không học hỏi được gì mới” hay là “không có cơ hội học tập” trong công việc bạn đang làm. Điều này có thể đúng một phần, nếu đặc thù công việc của bạn quá dễ hoặc sếp của bạn là một người giỏi làm nhưng không giỏi hướng dẫn và truyền đạt cho nhân viên cấp dưới. Hãy thử suy nghĩ về những cách học mới dưới đây:

  • Nếu công ty có các trang thư viện, tủ sách, kênh tài nguyện – có tài liệu nào trong đó bạn có thể download về nghiền ngẫm, ngâm cứu mà khó kiếm ở ngoài hay không?
  • Công ty có ai khác giỏi ở bộ phận khác hoặc đang làm ở vị trí khác mà bạn đang quan tâm hứng thú để xin vài buổi cafe hỏi đáp về ngành đó hay không? Ví dụ bạn đang làm Sales mà quan tâm đến nhân sự, có ai trong phòng nhân sự có thể trò chuyện hay không?
  • Kĩ năng quản lý là một kĩ năng rất cần ở nhiều công việc, trong công ty hiện tại có ai bạn thấy giỏi kĩ năng quản lý để xin học hỏi từ họ hay không?
  • Bạn đã thử xin công ty hỗ trợ tiền để học các khoá học trực tiếp và trực tuyến liên quan đến lĩnh vực bạn làm hãy chưa? Nhiều công ty có thể chưa nghĩ đến việc này, nhưng nếu có thể giúp nhân viên của mình tiến bộ lên và bạn có cam kết đóng góp nhiều hơn nữa cho công ty, rất có thể bạn sẽ tiên phong cho quyền lợi này ở công ty bạn.

  Việc làm remote là gì? Top việc làm remote HOT nhất hiện nay

  Feedback là gì? Tầm quan trọng của feedback công việc và cuộc sống

4/ Khám phá tính cách của bản thân và tính cách của người khác

Một lý do khác khiến cho một người cảm thấy không hạnh phúc với công việc hiện tại là xung đột trong cách làm việc với đồng nghiệp, hoặc không hợp tính sếp. Một trong những lý do dẫn đến việc này là từ tính cách và giá trị sống khác nhau. Ví dụ dân Marketing thích mọi thứ nhanh lẹ để “bắt trend”, trong khi người làm kế toán cần cẩn thận, tỉ mỉ, có thời gian. Thế là choảng nhau.

Một trong những điều bạn có thể làm và mình thấy việc này có thể tạo sự gắn kết hơn với mọi người trong công ty đó là học về một công cụ khám phá bản thân. Thông thường mình sẽ hướng các bạn tìm hiểu công cụ Mật mã Holland, tuy nhiên bạn hoàn toàn có thể tìm hiểu một công cụ khác như Thần số học, Sinh trắc vân tay, MBTI, DISC hoặc …xem bói.

Cái gì cũng được, cốt lõi là bạn dùng công cụ đó để hiểu hơn về tính cách của bản thân mình, và hiểu hơn về tính cách của người khác. Khi bạn thấy được sự khác nhau giữa mình và người khác, bạn sẽ thông cảm hơn, ít tranh cãi hơn. Nếu bạn có khả năng truyền đạt tốt, bạn tìm hiểu xong mang đến công ty truyền đạt lại cho mọi người để tất cả mọi người hiểu nhau hơn, từ đó hạnh phúc hơn.

5/ Can đảm ngắt điện thoại, cho bản thân nghỉ ngơi ở một số thời điểm

Mình hiểu rằng mỗi công việc có tính chất khác nhau, có những công việc đòi hỏi bạn phải trực điện thoại mọi lúc mọi nơi, ví dụ như bán hàng chẳng hạn. Tuy nhiên chính vì việc chúng ta 24/7 hiện diện cho công việc cũng là một lý do khiến bạn cảm thấy burn-out, stress, mệt mỏi và không muốn tiếp tục công việc hiện tại.

Bạn không cần work-life balance kiểu 8 tiếng ở công ty và về nhà ngắt điện thoại, việc đó không khả thi với nhiều ngành nghề. Tuy nhiên mỗi ngày hãy tối thiểu có được 30 phút ngắt điện thoại không nhận các cuộc gọi, tin nhắn, hoặc mỗi tuần có được 1-2 tiếng cho việc này. Nếu bạn sợ bỏ lỡ thông tin từ ai đó, hãy đặt điện thoại ở chế độ tự động trả lời tin nhắn trong thời gian này, sau đó bạn sẽ liên hệ lại sau. Mình cho rằng 30 phút, 1-2 tiếng không gọi được bạn cũng không thực sự làm ai quá lo lắng hoặc khiến bạn ảnh hưởng quá lớn đến công việc – nếu bạn đã có thông tin rõ ràng cho mọi người rằng khung giờ đó bạn sẽ off.

Không cần nghỉ ngơi nhiều, nếu bạn thuộc loại “sạc pin nhanh”. Nhưng nếu không nghỉ ngơi thì chắc chắn sẽ chết. Phải sống, mới làm và cống hiến được.

Nếu tất cả những điều trên bạn đã làm và thử và vẫn không cảm thấy vui vẻ hơn trong công việc, đây là lúc bạn có thể suy nghĩ đến việc tìm kiếm một cơ hội mới. Hãy tìm đến một người tư vấn hướng nghiệp để giúp bạn tuốt tát lại hồ sơ, tìm hiểu về thị trường lao động và sẵn sàng tìm kiếm công việc mới phù hợp hơn cho bản thân.

Bài viết gốc được đăng tải tại anhtuanle.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Clean Architecture – Điều đơn giản với ý tưởng củ hành

Clean Architecture

Bài viết được sự cho phép bởi tác giả Vũ Thành Nam

Trong bài viết sự tiến hóa của kiến trúc phần mềm mình có đề cập đến loại kiến trúc này, bạn đọc có thể tìm đọc lại link ở cuối bài viết. Bài viết này mình sẽ đi sâu hơn một chút nhưng vẫn không phải dùng những thuật ngữ đao to búa lớn để diễn tả kiến trúc này, mà mình thông qua những ví dụ đơn giản nhất để bạn đọc có thể hiểu được một cách dễ dàng.

Bắt đầu nhé!

Bạn bắt đầu hình dung, một ứng dụng hay một website thường sẽ có 3 lớp thành phần chính đó là tầng giao diện, tầng xử lý nghiệp vụ business và tầng  cơ sở dữ liệu. Ba lớp ngày sẽ đi từ ngoài vào trong, thứ mà đập vào mắt bạn như bài viết này cũng không ngoại lệ, để có thể hiển thị được cho bạn đọc (client hay frontend) thì nó cần được xử lý bên phía trong hay còn được gọi với cái tên mĩ miều là backend, thế rồi chúng được lưu ở đâu đó như khi bạn lưu video hay ho trong ổ cứng của bạn. Bạn có thể bắt gặp ở đâu đó một mô hình thể hiện 3 tầng này chính là MVC (Model – View – Controller) hay MVP (Model – View – Presenter) hay MVVM (Model – View – ViewModel). Dù là mô hình nào thì nó cũng đều phân chia nhiệm vụ đảm nhận cho 3 tầng thành phần bên trên.

Nhưng có một vài lý do mà sự phát triển của mô hình 3 lớp này dần dần chuyển hóa thành mô hình cao cấp hơn. Trong bài viết kiến trúc phần mềm là để thay đổi, mình có đề cập một số nhu cầu tiến hóa của phần mềm và với kiến trúc mới này cũng không ngoại lệ.

Đầu tiên là Không phụ thuộc vào nền tảng (Independent of Frameworks). Bạn nghĩ sao khi bạn lưu một bộ phim hay trên ổ đĩa máy tính này nhưng bạn lại muốn xem chúng ở một máy tính khác, hoặc là bạn copy ra usb như ngày xưa chúng ta thường làm hoặc là bạn đưa chúng lên trên mây như hiện tại. Dù cách nào đi chăng nữa thì vấn đề bạn hướng tới là sự linh hoạt mà không phụ thuộc vào thiết bị cũng như cơ sở hạ tầng. Bạn dùng công nghệ nào, ngôn ngữ nào cho một trong 3 lớp thành phần điều này không còn quan trọng nữa.

Thứ 2 là kiểm thử dễ dàng (Testable). Phần mềm được phát triển thì phải được kiểm tra xem có lỗi hay không trước khi phát hành và việc chia tách từng lớp rõ ràng khiến việc kiểm thử dễ dàng hơn. Video trong usb của bạn không xem được, hoặc là do usb của bạn hỏng, hoặc là do máy tính bạn hỏng, hoặc là do màn hình bạn hỏng, dù cái gì hỏng đi chăng nữa thì bạn cũng dễ dàng kiểm tra các thành phần còn lại khi bạn mang qua liên kết với máy tính khác để kiểm tra một cách dễ dàng, khoanh vùng lỗi phát sinh cũng dễ dàng hơn.

Thứ 3 là không phụ thuộc vào giao diện (Independent of UI), thật may mắn khi từ khi máy tính ra đời, chúng ta không phải tiếp xúc ngay với những thế hệ đầu tiên màn hình đen xì và những dòng lệnh khô khan, thay vào đó là những màn hình windows với những click chuột, rồi dần dần nó không chỉ nằm chết tại máy của bạn nó có thể sử dụng ở bất cứ đâu thông qua giao diện web, hay giao diện mobile. Việc chia lớp thành phần View tách biệt với các thành phần còn lại giúp chúng ta có những trải nghiệm người dùng tốt hơn và dễ dàng thích ứng với mọi điều kiện thiết bị.

Thứ 4 đó là không phụ thuộc vào cơ sở dữ liệu (Independent of Database). Có thể bạn đã biết thì chúng ta có rất nhiều loại cơ sở dữ liệu được lưu trữ, cũng như nhiều loại ổ cứng hay usb hay đám mây cũng có nhiều loại như google cloud, icloud, onedrive… Vậy làm sao để ứng dụng của bạn không phụ thuộc vào chúng, mà chỉ cần tích hợp là chúng có thể chạy mượt mà. Việc tách lớp cơ sở dữ liệu riêng biệt giúp bạn làm được việc này.

Cuối cùng là không phụ thuộc vào bất kỳ bên thứ ba nào (Indenpendent of any External Agency). Bạn có nghĩ một trang thương mại điện tử có bao nhiêu hình thức thanh toán, có thể là vn-pay, có thể là momo, có thể là visa card. Dù là hình thức thanh toán nào cũng sẽ trở nên dễ dàng và có thể thay thế khi bạn làm việc trao đổi mọi thứ thông qua API (Application Programming Interface), một giao thức kết nối với các thư viện và ứng dụng khác.

Quay trở lại với kiến trúc Clean Architecture (mình xin phép không dịch vì không biết dịch sao nữa :D) mình chỉ lấy ví dụ nó như một củ hành có nhiều lớp, với các lớp đảm nhận nhiệm vụ với những tính chất được mô tả bên trên.

Clean Architecture

Bạn có thể thấy với kiến trúc này là những vòng tròn đồng tâm thể hiện các lớp thành phần như một củ hành vậy. Vậy từng lớp của củ hành như thế nào thì chúng ta cùng đi tìm hiểu tiếp nào!

Với kiến trúc Clean Architecture thì 3 lớp thành phần chính vẫn được giữ nguyên nhưng chỉ tổ chức lại thể hiện từ lõi hành ra bên ngoài vỏ bao gồm: Entity (Lớp lõi làm việc với cơ sở dữ liệu), Usecase (Lớp xử lý nghiệp vụ kết nối trao đổi dữ liệu với lớp lõi và tương tác với lớp ngoài), Interface (Lớp vỏ liên kết và kết nối với thế giới bên ngoài sau khi xử lý nghiệp vụ và có được dữ liệu sau khi xử lý), Driver (Lớp thể hiện hay lưu trữ dữ liệu)

Rồi chúng ta hãy cùng đi bóc hành từng lớp từ ngoài vào trong nhé!

Clean Architecture

Frameworks and Drivers layer

Thứ mà đập thẳng vào mắt người dùng cũng như lớp mà tiếp xúc, trao đổi với các ứng dụng khác hay trao đổi với các cơ sở dự liệu chính là đây.  Vỏ hành chính là lớp giúp chúng ta tiếp xúc với mọi thứ, có thể nó là một yêu cầu từ người dùng (request) của một trang web nào đó, có thể là một public api giúp tích hợp với một bên thứ ba hoặc hệ thống bên ngoài, có thể là một thiết bị di động như Android Apps hay Iphone Apps, có thể là một công cụ phân tích đọc dữ liệu database nào đó.

Interface Adapters layer

Đúng như tên gọi đây chính là lớp chuyển đổi dữ liệu, khi nhận được một tín hiệu nào đó từ lớp vỏ bên ngoài, lớp này có nhiệm vụ chuyển đổi những yêu cầu đó vào lớp xử lý bên trong. Hãy tưởng tượng nó như một ổ cắm đa năng vậy, nó nhận đầu vào, phân loại chúng và gửi đi những đúng nơi, đúng chỗ, đúng người xử lý, sự điều phối này giúp hệ thống có thể dễ dàng tích hợp với nhiều nơi hơn mà lớp vỏ hỗ trợ.

Nếu như lớp vỏ bên ngoài có rất nhiều nền tảng như desktop app, web app, mobile app, hệ thống bên thứ 3… thì sau khi qua lớp này, nó sẽ được quy chuẩn về một đầu vào duy nhất để hệ thống của bạn có thể xử lý chúng dễ dàng hơn. Đầu vào lúc này có thể là GraphQL, Restful, Soap, Scheduled Jobs, GUI, Odata… (kỹ thuật đặc thù một chút nhưng bạn có thể hiểu đơn giản nó là các giao thức truyền nhận dữ liệu khác nhau) chúng sẽ được xử lý thành một luồng dữ liệu mà lớp lõi bên trong có thể hiểu và xử lý được.

  Giới thiệu về JAMstack – kiến trúc phát triển web hiện đại

  #2 Lập trình Golang ăn xổi: Clean architecture

Use Case layer hay Application Logic layer

Sau khi đã được chuẩn hóa đầu vào và phân loại các vùng xử lý dữ liệu rồi thì vào đến lớp cận lõi này các nghiệp vụ đặc thù sẽ được xử lý tại đây, có thể nó là nghiệp vụ ngân hàng, có thể nó là nghiệp vụ thương mại điện tử, hay chỉ đơn giản là đếm số lượt upvote cho bài viết này. Việc xử lý nghiệp vụ ở lớp này khiến bạn dễ dàng phân loại xử lý nghiệp vụ của bạn hơn mà không phụ thuộc vào bất kỳ những yếu tố nào bên ngoài cũng như những lỗi không mong muốn từ cơ sở dữ liệu thô. Việc kiểm thử các chức năng nghiệp vụ tại lớp này cũng được dễ dàng hơn, tổ chức modular hay microservices cũng được phân chia dựa theo nghiệp vụ của lớp này.

Entities layer

Cuối cùng chính là lớp lõi domain entity, với lớp này chỉ đơn thuần là ảnh xạ (mapping) dữ liệu hay đơn giản là nhằm mục đích chứa dữ liệu thô, không phụ thuộc vào bất cứ thư viện, nền tảng, kỹ thuật, hay nghiệp vụ nào. Thô là thô, nó đảm bảo dữ liệu nguyên bản nhất để lớp cận lõi phía trên có thể có dữ liệu xử lý nghiệp vụ một cách chính xác. Đối với các công trình xanh dựng thì lớp này chính là các nguyên vật liệu xây dựng chưa qua bất kỳ công đoạn xử lý nào của một công trình như gạch đá, xi măng, sắt thép… Nó chỉ duy nhất thể hiện được là những dữ liệu nào liên quan đến nhau, phân nhóm dữ liệu, mối quan hệ cha con cũng như kiểu dữ liệu của chúng mà thôi.

Nếu bạn là người trong ngành và có căn bản một chút thì hình dưới đây sẽ giúp bạn nhận diện được những công nghệ nằm trong từng lớp nhé. Ở bài viết này mình sẽ không giải thích từng công nghệ trong hình này mà muốn mô tả một cách tổng quan hết về kiến trúc Clean Architecture.

Clean Architecture

Vậy ưu điểm nhiều thế thì kiến trúc này có nhược điểm gì không?

Tất nhiên là có nhé!

Đầu tiên là nó phức tạp, chính vì sự trừu tượng hóa quá nhiều, muốn mọi thứ không phụ thuộc vào nhau mà nó không tuân theo bất cứ quy tắc nào. Chính điều này khiến các lập trình viên khó nắm bắt và đi theo một tiêu chuẩn có sẵn như những kiến trúc cổ điển.

Tiếp nữa là không có sự định hướng cụ thể, mọi thứ đều là gián tiếp. Do muốn đa dạng hóa các lớp thành phần kiến chúng làm việc với nhau một cách gián tiếp và nếu chúng ta không kiểm tra chặn chẽ đầu vào và đầu ra của từng lớp thành phần vô tình khiến chúng trở thành lỗ hổng lớn.

Cuối cùng là nặng nề, thái hành quá nhiều lớp sẽ dễ khiến chúng ta cay mắt, khi một ứng dụng nhỏ không có nhu cầu mở rộng mà tuân theo kiến trúc này sẽ khiến chúng ta thêm vất vả nhiều hơn vì phải xây dựng rất nhiều lớp thành phần mới có thể tạo nên một tính năng đơn giản. Câu hỏi đặt ra trong trường hợp này là có thật sự cần thiết không.

Trên đây là bài viết về kiến trúc Clean Architecture với những ví dụ giúp bạn có thể nắm được một cách tổng quan nhất về kiến trúc này. Để hiểu hơn về tác giả của kiến trúc cũng như những kiến trúc nhỏ bên trong để hình thành nên kiến trúc này như hiện tại bạn có thể đọc thêm tại đây.

Còn đây là demo cho mô hình này của mình nhé! Hi vong có thể giúp bạn tham khảo một phần nào đó.

Bài viết gốc được đăng tải tại ntechdevelopers.com

Xem thêm:

Cập nhật IT jobs Developer lương cao mới nhất TopDev

Manager là gì? Những kỹ năng cần có để trở thành Manager

Manager là gì

Manager là một chức vụ vô cùng quan trọng trong bất kỳ tổ chức nào. Họ giữ vai trò then chốt trong việc đảm bảo hoạt động suôn sẻ và hiệu quả của doanh nghiệp. Nhưng Manager là gì và vai trò của họ trong công ty ra sao? Hãy cùng TopDev tìm hiểu trong bài viết dưới đây.

Manager là gì?

Manager, hay quản lý, là người đứng đầu và điều hành một nhóm, một bộ phận hoặc một tổ chức. Với vai trò quản lý, họ có trách nhiệm lãnh đạo, quản lý các hoạt động hàng ngày và đưa ra các chiến lược quan trọng để đạt được mục tiêu của tổ chức.

  IT Manager Là Gì? Những Điều Bạn Cần Biết Về IT Manager

Manager là gì?

Vai trò của Manager trong công ty

Manager đóng vai trò quan trọng trong việc cân bằng các nguồn lực để phân công công việc một cách hợp lý và đạt hiệu quả cao nhất. Họ là người lên kế hoạch, phân công nhiệm vụ, đưa ra quyết định và giải quyết các vấn đề phát sinh.

Ngoài ra, Manager cũng đảm nhiệm vai trò lãnh đạo, truyền cảm hứng và định hướng cho nhân viên. Họ giúp tạo ra một môi trường làm việc chuyên nghiệp, thúc đẩy sự phát triển và hoàn thành mục tiêu của công ty.

Tham khảo tuyển dụng IT Manager

Manager là gì?

Công việc của Manager là gì?

Công việc của Manager bao gồm nhiều khía cạnh và nhiệm vụ quan trọng. Dưới đây là một số công việc phổ biến mà Manager thường thực hiện:

  • Xây dựng, quản lý và phân công nhóm để hoàn thành các dự án

Một trong những nhiệm vụ quan trọng nhất của một Manager là xây dựng và quản lý một nhóm làm việc hiệu quả. Họ phải sắp xếp và phân công công việc cho từng thành viên trong nhóm, đồng thời đảm bảo rằng mỗi người có đủ tài nguyên và hỗ trợ để hoàn thành nhiệm vụ của mình. Manager cũng phải có khả năng tạo ra một môi trường làm việc hòa đồng, khuyến khích sự hợp tác và đồng lòng giữa các thành viên trong nhóm.

  • Phân công công việc cho nhân viên một cách hợp lý 

Một Manager giỏi phải có khả năng phân tích năng lực và kỹ năng của từng nhân viên trong nhóm và từ đó tiến hành phân công công việc phù hợp cho từng cá nhân. Bằng sự hiểu biết về sở thích, khả năng và kinh nghiệm của mỗi thành viên, Manager có thể tận dụng tối đa tiềm năng của từng thành viên để hoàn thành các mục tiêu của doanh nghiệp.

  • Theo dõi tiến độ và đánh giá kết quả công việc 

Theo dõi tiến độ công việc của nhóm và đảm bảo rằng các mục tiêu và thời hạn được đáp ứng cũng là một trách nhiệm quan trọng của một Manager. Họ cần có khả năng đánh giá và đưa ra phản hồi xây dựng để cải thiện hiệu suất làm việc. Qua việc theo dõi và đánh giá, Manager có thể xác định các vấn đề và áp dụng biện pháp để giải quyết sự cố và đảm bảo chất lượng công việc.

  • Đưa ra các quyết định quan trọng và giải quyết vấn đề phát sinh

Manager thường phải đối mặt với các tình huống phức tạp và phải ra các quyết định quan trọng. Họ phải có kỹ năng phân tích các thông tin đầu vào, đánh giá tình hình để từ đó đưa ra quyết định quan trọng một cách nhanh chóng và chính xác. Ngoài ra, Manager còn phải giải quyết các vấn đề phát sinh trong quá trình làm việc và tìm ra các giải pháp hợp lý để vượt qua những thách thức.

  • Quản lý nguồn lực hiệu quả để đạt mục tiêu đề ra

Một Manager có trách nhiệm phải quản lý các tài nguyên của tổ chức một cách hiệu quả, bao gồm nguồn lực nhân lực, tài chính, vật chất và thời gian. Họ cần phải lập kế hoạch, phân bổ và sử dụng các nguồn lực này một cách thông minh để đảm bảo đạt được mục tiêu và tiết kiệm chi phí.

  Product Manager là gì? Chân dung của một Product Manager

Những kỹ năng cần có của một Manager

Ngoài các kiến thức chuyên môn và kinh nghiệm, để trở thành một Manager bạn cần có những kỹ năng cụ thể dưới đây:

  • Kỹ năng giao tiếp 

Manager cần có khả năng giao tiếp một cách hiệu quả với đồng nghiệp, nhân viên và các bộ phận liên quan khác. Việc truyền đạt thông tin một cách rõ ràng, tổ chức hợp lý và thể hiện ý kiến một cách mạch lạc rất quan trọng nhằm đảm bảo sự hiểu biết và sự đồng thuận trong tổ chức.

  • Kỹ năng lãnh đạo và quản lý 

Đây là những yếu tố quan trọng để Manager có thể đạt được mục tiêu và tạo động lực cho nhóm làm việc. Manager cần có khả năng lãnh đạo, định hướng và truyền cảm hứng để đạt được sự cam kết từ nhân viên. Quản lý hiệu quả là khả năng tổ chức, phân công và giám sát công việc của nhóm.

  • Kỹ năng giải quyết vấn đề và ra quyết định 

Một Manager cần có khả năng phân tích vấn đề, tìm kiếm thông tin, đánh giá các tùy chọn và đưa ra quyết định thông minh và đúng đắn. Manager cũng cần có khả năng giải quyết các vấn đề phát sinh trong quá trình làm việc và áp dụng các biện pháp hiệu quả để vượt qua những thách thức.

  • Kỹ năng quản lý thời gian 

Một yếu tố quan trọng để Manager có thể đảm bảo sự hiệu quả và hiệu suất trong công việc là kỹ năng quản lý thời gian. Họ cần biết ưu tiên công việc, phân chia thời gian một cách hợp lý cũng như biết cách sử dụng hiệu quả các công cụ và phương pháp quản lý thời gian để hoàn thành các mục tiêu đề ra.

  • Khả năng lập kế hoạch chiến lược 

Đây là một yếu tố quan trọng để Manager có thể định hướng và phát triển tổ chức. Một Manager cần phải có khả năng nhìn xa và xác định mục tiêu dài hạn, phân tích môi trường kinh doanh và đưa ra các kế hoạch chiến lược để đạt được mục tiêu đó. Việc lập kế hoạch chiến lược bao gồm việc xác định các bước cụ thể, phân bổ tài nguyên và thiết lập các chỉ số để đo lường tiến độ và thành công.

  • Tinh thần trách nhiệm cao 

Với tinh thần trách nhiệm cao, điều này đảm bảo rằng Manager sẽ đứng ra đảm nhận trách nhiệm của mình một cách đúng đắn và chịu trách nhiệm với những quyết định và hành động của mình.

  Product Manager được sinh ra để làm gì?

Manager là gì?

Các câu hỏi thường gặp về Manager

Câu 1. Sự khác nhau giữa Leader và Manager là gì?

Leader là người đứng đầu một nhóm, chịu trách nhiệm hướng dẫn và theo dõi tiến độ làm việc của các thành viên trong team và đảm bảo các thành viên có thể phát huy hết khả năng và hoàn thành tốt các nhiệm vụ được giao. Trong khi đó, Manager là người phân chia và giao công việc phù hợp cho cấp dưới, bao gồm cả Leader. Họ còn là người sẽ duy trì và vận hành các nguồn tài nguyên của công ty để đảm bảo kế hoạch đã được diễn ra một cách thuận lợi.
Câu 2. Mức lương của Manager là bao nhiêu?
Mức lương của Manager phụ thuộc vào quy mô công ty, ngành nghề và trình độ, kinh nghiệm. Tại Việt Nam, mức lương trung bình của Manager vào khoảng 20 – 35 triệu/năm. Ngoài mức lương cơ bản, các Manager thường có thêm các khoản thưởng, phụ cấp và phúc lợi khác từ công ty tùy theo hiệu quả công việc.

Câu 3. Làm thế nào để trở thành một Manager giỏi?
Bạn cần không ngừng học hỏi, nâng cao kỹ năng chuyên môn cũng như kỹ năng mềm. Quan trọng là luôn lắng nghe nhân viên, ghi nhận phản hồi và có tinh thần trách nhiệm cao.

Kết luận

Trở thành một Manager không chỉ đơn giản là đứng đầu và quản lý, mà còn đòi hỏi những kỹ năng lãnh đạo, quản lý nhân sự và giao tiếp tốt. Manager giữ một vị trí quan trọng trong việc xây dựng một môi trường làm việc tích cực và đạt được mục tiêu của tổ chức. Hy vọng rằng bài viết của TopDev đã cung cấp cho bạn được một cái nhìn tổng quan về công việc Manager. Hãy tiếp tục theo dõi Blog TopDev để cập nhật thêm nhiều kiến thức hữu ích về lập trình và các tips tuyển dụng hiệu quả.

Xem thêm các tin tuyển dụng IT mới nhất trên TopDev

HƯỚNG DẪN CHUẨN HÓA VÀ TẠO CV TRÊN TOPDEV

Hướng dẫn tạo CV trên TopDev

Tạo CV online dành cho lập trình viên là một trong những tính năng được phát triển bởi TopDev. Công cụ giúp developer có thể tạo CV đúng chuẩn ATS, dễ dàng quản lý và ứng tuyển các công việc nhanh chóng.

I. GIỚI THIỆU CÔNG CỤ CHUẨN HÓA VÀ TẠO CV TRÊN TOPDEV

Công cụ chuẩn hóa và tạo CV IT là một trong những công cụ hữu ích không thể bỏ qua cho các lập trình viên trên TopDev. Công cụ giúp các developer dễ dàng tạo CV chuẩn dành riêng cho mình, đồng thời có thể ứng tuyển một cách nhanh chóng, hiệu quả cho những vị trí tuyển dụng IT phù hợp. 

 

Hướng dẫn tạo CV trên TopDev

Công cụ tạo CV online dành cho IT trên TopDev được thiết kế theo chuẩn ATS, giúp người dùng tạo CV nhanh chóng, đúng chuẩn và nâng cao sự chuyên nghiệp trong mắt nhà tuyển dụng. Với công cụ này, bạn chỉ cần nhập các trường thông tin cần thiết, hệ thống sẽ tự động nhận diện và tạo cho bạn một CV ấn tượng.

  CV chuẩn ATS là gì? Bí kíp đậu phỏng vấn với CV chuẩn ATS

Cụ thể hơn, hệ thống chọn lọc các thông tin tiêu chuẩn và cấu trúc thống nhất giúp nhà tuyển dụng dễ dàng đánh giá kinh nghiệm và tech stack của bạn. Các mẫu CV IT được chọn lọc kỹ càng dựa trên hơn 1.000 mẫu CV Developer nổi bật trên thế giới, ứng tuyển thành công các vị trí tại các tập đoàn công nghệ lớn Microsoft, Google, Amazon,…Chưa dừng lại ở đấy, việc tạo CV online giúp lập trình viên có thể đồng bộ quản lý CV của bạn trên tất cả các thiết bị, ứng tuyển dễ dàng mọi nơi chỉ với một click.

Tạo CV online ngay trên TopDev

II. HƯỚNG DẪN TẠO CV ONLINE TRÊN TOPDEV

Để tạo và quản lý CV trên TopDev, bạn chỉ cần thực hiện một số thao tác đơn giản, dưới đây là hướng dẫn chi tiết dành cho bạn.

Hướng dẫn tạo CV trên TopDev

1. Tạo CV

Để tạo CV trên TopDev, bạn chỉ cần thực hiện những thao tác rất đơn giản với 3 bước chính:

Bước 1: Tạo mới và điền thông tin theo mẫu

Truy cập vào công cụ tạo CV IT và thực hiện theo các bước: 

– Tạo tài khoản hoặc đăng nhập với Google hoặc Github 

– Đặt tên CV và chọn ngôn ngữ (Nếu đã nhập thông tin trước đó, bạn có thể chọn sử dụng thông tin có sẵn hoặc làm mới)

– Điền đầy đủ các trường thông tin cơ bản và thông tin khác (nếu có)

– Bật “Đang tìm việc” để tăng cơ hội tìm được việc làm phù hợp

Bước 2: Chọn mẫu CV developer ưng ý

– Chọn Xem trước và chọn mẫu ưng ý

– Chọn Lưu CV

– Xem lại CV tại “TopDev CV của tôi

Bước 3: Tìm việc làm IT và ứng tuyển trực tiếp trên TopDev

Ở bước này, bạn có thể click vào chuông để xem thêm “Việc làm phù hợp nhất dành cho bạn” và ứng tuyển hoặc tìm việc làm IT phù hợp trên TopDev.

2. Quản lý CV

Tại mục “TopDev CV của tôi”, bạn có thể điều chỉnh thông tin trên CV của mình theo nhu cầu hoặc tải CV đã được tạo về máy.

Bên cạnh đó, mục “Quản lý CV” sẽ giúp bạn kiểm tra các CV đã được tạo, bạn có thể xem, điều chỉnh, tải về hoặc xóa nhanh chóng trên TopDev. 

III. HƯỚNG DẪN CHUẨN HÓA CV TRÊN TOPDEV

Bên cạnh tính năng tạo CV online, bạn có thể chuẩn hóa CV theo chuẩn ATS trên TopDev. Theo đó, bạn chỉ cần tải mẫu CV sẵn có lên công cụ, hệ thống sẽ phát hiện và sắp xếp thông tin theo các trường thích hợp, cụ thể: 

  • Bước 1:Tải file CV của bạn lên và đợi CV được xử lý
  • Bước 2: Cập nhật thông tin mới nhất của bạn vào hồ sơ
  • Bước 3: Bắt đầu tìm việc và ứng tuyển với CV vừa được chuẩn hóa trên TopDev

Chuẩn hóa CV IT ngay trên TopDev

Hướng dẫn tạo CV trên TopDev

IV. KẾT LUẬN

Với công cụ chuẩn hóa và tạo CV online dành cho các lập trình viên trên TopDev, bạn có thể dễ dàng tạo ra những mẫu CV đúng chuẩn ATS và ứng tuyển vào các vị trí việc làm phù hợp. Bên cạnh đó, thông tin được đồng bộ trên nhiều ứng dụng giúp developer có thể ứng tuyển nhanh chóng ở bất cứ đâu, tăng sức cạnh tranh và cơ hội làm việc tại các công ty hàng đầu. 

Tìm việc làm IT nhanh chóng trên TopDev

RxJava – Thời đại lập trình Reactive programming ứng dụng Android đã tới

RxJava – Thời đại lập trình Reactive programming ứng dụng Android đã tới

Trước mình làm dự án Javascript và Nodejs, mình phải làm việc rất nhiều với tư duy hướng sự kiện. Lúc đó mình cứ nghĩ rằng có lẽ kiểu lập trình hướng sự kiện này chỉ thích hợp trên web app, hay cụ thể là Javascript mà thôi.

Với các ứng dụng Android, chúng ta đã quá quen thuộc với cách viết code tuần tự, hay còn gọi là lập trình đồng bộ. Giờ đây, với tư duy lập trình hướng sự kiện hay bất đồng bộ đó đã lan sang cả các dự án xây dựng ứng dụng Android.

Không biết do mình cổ hủ, lạc hậu hay giờ người ta mới phổ biến thư viện này. Thư viện đó chính là RxJava, một thư viện để hỗ trợ việc viết ứng dụng Android theo kiểu hướng sự kiện.

Nếu bạn đang có ý định tìm hiểu hoặc đã tìm hiểu trước đó rồi. Nhưng vẫn còn mơ hồ về RxJava thì bài viết này dành riêng cho bạn. Mình sẽ giải thích theo cách đơn giản nhất có thể để các bạn có thể hiểu rõ RxJava.

RxJava là gì?

RxJava là một thư viện dùng để viết các ứng dụng Java theo triết lý hướng sự kiện hay bất đồng bộ. Hay nói cách khác RxJava sẽ giúp cho bạn viết mã Java giống như Javascript. Về cơ bản là nó sẽ follow theo Observer Pattern.

RxJava là gì?

Code của bạn sẽ chia là 2 phần: một bên là tạo các sự kiện như click vào một button, tạo một request REST API… Phần còn lại sẽ lắng nghe và phản hồi một cách bất đồng bộ với sự kiện cụ thể đó (cập nhật View, xử lý kết quả trả về.v.v…)

RxJava có phiên bản đặc biệt cho Android gọi là RxAndroid. Về cơ bản triết lý là giống nhau, chỉ khác RxAndroid có mở rộng và hỗ trợ thêm các API của Android mà thôi.

Để các bạn dễ hiểu hơn, mình sẽ quay lại lịch sử viết mã nguồn ứng dụng Android.

Cách tiếp cận trước khi có RxJava

Nếu bạn đang làm việc trong các dự án Android thì hẳn không còn xa lạ gì tới AsyncTask. Nhiệm vụ của nó là thực hiện các tác vụ nặng dưới background, sau khi hoàn thành thì cập nhập lên UI Thread.

Nhưng ở đây có một số vấn đề:

  • Nếu cần xử lý đa luồng, quản lý nhiều AsyncTask thì thật là cơn ác mộng.
  • Không có cơ chế xử lý lỗi.
  • Dễ bị memory Leak nếu bạn tạo inner class và truyền Context không đúng cách.

Và còn nhiều vấn đề tiềm tàng khác nữa, bạn có thể đọc bài viết này: Đừng dùng AsyncTask cho tác vụ Network

Giờ đây, bạn có thể nghĩ tới RxJava, nó sẽ giải quyết các vấn đề trên cho bạn.

Dưới đây là một cách sử dụng RxJava cho một tác vụ chạy dưới background:

Observable{
        //The work you need to do
}
//thread you need the work to perform on
.subscribeOn(Schedulers.io)
//thread you need to handle the result on
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(Observer{
       //handle the result here
})

Nhìn thật là gọn gàng và sạch đẹp phải không?

Cách tiếp cận trước khi có RxJava

Như mình đã nói ở trên, RxJava tuân theo triết lý hướng sự kiện, nên tất nhiên là có thiết kế mã nguồn theo pattern là Observer Pattern.

Để hiểu bản chất RxJava, bạn cần hiểu về Observer Pattern.

Chúng ta sẽ đào sâu hơn một chút về các API của RxJava nhé.

  Android Jetpack là gì? Tại sao nên dùng Android Jetpack?

  Tìm hiểu về lớp HashMap trong Java: Các hoạt động và cách dùng

RxJava Basic: Observable, Observer

RxJava gồm hai component chính là: Observable và Observer. Và để liên kết hai component này thì có một số công cụ như: Schedulers, Operators và Subscription.

RxJava Basic: Observable, Observer

Observable

Là phần sẽ tạo ra các sự kiện. Bạn sẽ lắng nghe các sự kiện này để có hành động thích hợp. Giờ đây sẽ không còn khái niệm đợi chờ một tác vụ thực hiện xong rồi lần lượt tới các tác vụ khác.

Observer

Là những đoạn code sẽ lắng nghe Observable. Nó nhận dữ liệu từ Observable phát ra. Bạn sẽ cần phải override lại những methods để Observer làm việc.

Ví dụ các methods phổ biến:

  • onSubscribe(): Method được gọi khi một Observer đăng ký lắng nghe một Observable.
  • onNext(): Method này được gọi khi Observable bắt đầu bắn dữ liệu.
  • onError(): Nếu có bất kỳ lỗi lầm gì thì hàm onError() sẽ được gọi tên.
  • onComplete(): Được gọi khi một Observable hoàn thành tất cả các tác vụ.

Tìm việc làm Android lương cao trên TopDev!

Thực hành sử dụng RxJava trong Android.

Lý thuyết thì cũng đơn giản như vậy thôi, giờ mình sẽ cùng nhau thực hành ứng dụng RxJava vào dự án Android.

Đầu tiên, bạn cần thêm dependencies trong build.gradle

implementation "io.reactivex.rxjava2:rxjava:2.1.6"
implementation "io.reactivex.rxjava2:rxandroid:2.0.1"

Version 2.1.6 là version mới nhất tại thời điểm mình viết bài.

Dưới đây là ví dụ về in một danh sách và cập nhật vào một Adapter của một RecyclerView.

ArrayList animals = new ArrayList();
animals.add("Tiger");
animals.add("Lion");
animals.add("Elephant");Observable.just(animals)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeWith(new Observer<ArrayList>() {
            @Override
            public void onSubscribe(Disposable d) {

            }@Override

            public void onNext(ArrayList arrayList) {
                 //handling the result
                 adapter.updateList(animals);
                 adapter.notifyDataSetChanged();
            }@Override
            public void onError(Throwable e) {
                 //error handling made simple
            }@Override
            public void onComplete() {
                 //cleaning up tasks
            }
        });

Qua đoạn code trên, bạn có thể thấy cách RxJava làm tốt hơn so với AsyncTask rất nhiều.

  • Viết code ngắn gọn hơn.
  • Không cần đến Context, điều mà chúng ta luôn muốn loại bỏ để code dễ unit hơn.
  • Có hẳn phương thức để xử lý lỗi (onError)

Tổng kết

Mình hi vọng qua bài viết, bạn sẽ biết thêm một công cụ cực kỳ hữu ích, giúp bạn phát triển ứng dụng Android tốt hơn.

Sau này khi bạn đọc nhiều về các mô hình như MVVM, MVP thì RxJava gần như là thư viện được đóng đinh để hỗ trợ bạn triển khai mô hình hiệu quả.

Cảm nhận của bạn về RxJava như thế nào? Để lại bình luận bên dưới nhé.

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Tìm việc làm IT mọi cấp độ tại TopDev

Việc làm remote là gì? Top việc làm remote HOT nhất hiện nay

Việc làm remote

Đại dịch Covid-19 đã tạo ra một bước ngoặt lớn trong cách thức làm việc trên toàn cầu. Hình thức việc làm remote đã trở nên phổ biến hơn bao giờ hết, được nhiều doanh nghiệp và người lao động nhắc đến như một giải pháp linh hoạt và tiện lợi. Mô hình này mang lại những lợi ích đáng kể như giảm chi phí văn phòng, tăng năng suất làm việc và cân bằng tốt hơn giữa công việc với cuộc sống cá nhân.

Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về khái niệm “việc làm remote là gì” và khám phá top những việc làm remote hot nhất hiện nay. Bằng cách hiểu rõ về hình thức làm việc này, bạn có thể đánh giá xem liệu mô hình làm việc từ xa có phù hợp với nhu cầu và mục tiêu nghề nghiệp của bạn hay không.

Làm remote là gì?

Làm remote là gì?

Việc làm remote, hay còn gọi là làm việc từ xa, là hình thức làm việc mà nhân viên không cần phải có mặt tại văn phòng hay cơ sở làm việc truyền thống. Thay vào đó, họ có thể thực hiện công việc từ bất kỳ nơi đâu, miễn là có kết nối internet và các công cụ số hỗ trợ làm việc từ xa.

Trong mô hình việc làm remote, nhân viên sử dụng các công nghệ như email, ứng dụng nhắn tin, phần mềm quản lý dự án, hội nghị trực tuyến,… để tương tác với đồng nghiệp, quản lý và khách hàng. Họ có thể làm việc từ nhà, quán cà phê, không gian làm việc chung hoặc bất cứ nơi nào khác.

Theo một khảo sát của Upwork năm 2022, 25% lực lượng lao động tại Mỹ sẽ làm việc từ xa trong vòng 5 năm tới. Con số này đã tăng gấp 3 lần so với trước đại dịch COVID-19. Tại Anh, theo số liệu từ Văn phòng Thống kê Quốc gia, tỷ lệ lao động làm việc từ nhà đã tăng từ 5% trước đại dịch lên mức cao nhất là 37% vào tháng 1/2022.

Những số liệu này cho thấy việc làm remote đang ngày càng trở nên phổ biến hơn trên toàn cầu, đặc biệt là sau đại dịch COVID-19 khi nhiều doanh nghiệp và nhân viên nhận ra lợi ích của mô hình làm việc linh hoạt này.

Ưu, nhược điểm khi làm việc remote là gì?

Làm việc từ xa có nhiều ưu và nhược điểm, dưới đây là một số điểm mạnh và yếu của mô hình làm việc remote:

1. Ưu điểm

  • Linh hoạt về không gian và thời gian làm việc, giúp người lao động dễ dàng cân bằng công việc với đời sống cá nhân, dành nhiều thời gian hơn cho gia đình và sở thích.
  • Tiết kiệm đáng kể các chi phí đi lại, ăn trưa và trang phục cho người lao động. Doanh nghiệp cũng giảm chi phí thuê văn phòng, trang thiết bị và các khoản phụ cấp.
  • Năng suất làm việc được cải thiện nhờ môi trường yên tĩnh, tập trung hơn tại nhà, tránh các yếu tố xao nhãng ở văn phòng.
  • Thị trường lao động được mở rộng, cho phép doanh nghiệp tiếp cận nguồn nhân lực chất lượng cao và đa dạng hơn trên toàn cầu.
  • Giảm thiểu lượng khí thải carbon từ giao thông vận tải, thân thiện với môi trường.

2. Nhược điểm

  • Khó khăn trong giao tiếp, phối hợp giữa các thành viên nhóm do thiếu tương tác trực tiếp, dễ dẫn đến hiểu lầm.
  • Môi trường làm việc tại gia đình có thể gây ra sự xao nhãng, khó tập trung cho công việc.
  • Nhân viên dễ cảm thấy cô đơn, thiếu sự kết nối với đồng nghiệp.
  • Yêu cầu về hạ tầng công nghệ như máy tính, kết nối internet ổn định và phần mềm hỗ trợ.
  • Doanh nghiệp khó quản lý, giám sát nhân viên làm việc từ xa hiệu quả.

  Vừa đi vừa code – Freelance, Remote, Hybrid hay Office Working?

  Kí sự Freelancer ở Upwork

Sự khác nhau giữa Freelancer và Job Remote là gì?

Sự khác nhau giữa Freelancer và Job Remote

Làm remote và làm freelancer đều là các hình thức làm việc không cần phải đến văn phòng trực tiếp và thường được thực hiện từ xa. Tuy nhiên, có một số điểm khác biệt quan trọng giữa chúng:

1. Mối quan hệ làm việc

  • Remote: Bạn là nhân viên toàn thời gian hoặc bán thời gian của một công ty và làm việc theo chỉ đạo của công ty đó, mặc dù có thể làm việc từ xa.
  • Freelancer: Bạn là người tự làm chủ và nhận các dự án hoặc công việc từ nhiều khách hàng khác nhau.

2. Bảo hiểm và phúc lợi

  • Remote: Bạn thường được hưởng các quyền lợi như bảo hiểm y tế, nghỉ phép, lương hưu,… từ công ty.
  • Freelancer: Bạn phải tự chịu trách nhiệm về các khoản bảo hiểm và phúc lợi của mình.

3. Quản lý thời gian

  • Remote: Bạn làm việc theo lịch trình và deadline do công ty đưa ra.
  • Freelancer: Bạn tự quyết định lịch trình và thời gian làm việc của mình.

4. Thu nhập và tính ổn định

  • Remote: Thu nhập thường ổn định hơn với mức lương cố định hoặc theo dự án.
  • Freelancer: Thu nhập không ổn định, phụ thuộc vào khả năng tìm kiếm và hoàn thành dự án.

Cả remote jobs và freelancer đều có ưu và nhược điểm riêng, phụ thuộc vào sự ưu tiên và phong cách làm việc của mỗi người.

TOP những việc làm remote được ưu chuộng nhất hiện nay

Các việc làm remote ngày nay rất đa dạng và phong phú, nhưng có một số lĩnh vực và vị trí được đặc biệt ưu chuộng. Dưới đây là một số trong số những việc làm remote phổ biến trên thị trường:

Lập trình viên

Lập trình viên là một trong những ngành nghề có nhu cầu làm remote cao nhất. Với kỹ năng lập trình tốt, bạn có thể dễ dàng tìm được việc làm remote cho các công ty trong nước và quốc tế. Nhờ sự phát triển của công nghệ và các công cụ quản lý dự án, chia sẻ mã nguồn trực tuyến, nhiều công ty công nghệ lớn như Google, Microsoft, Amazon đã cho phép nhân viên lập trình của mình làm việc từ xa một cách linh hoạt.

Tham khảo việc làm IT remote hấp dẫn trên TopDev

Sáng tạo nội dung (Content Creator)

Viết bài, biên tập nội dung, sáng tạo nội dung là những công việc mà bạn chỉ cần một chiếc máy tính và kết nối internet để thực hiện. Nhiều trang web tin tức, blog, tạp chí điện tử đã thuê nhân viên làm việc remote để tạo ra nội dung chất lượng. Điều này giúp họ tiếp cận nguồn nhân lực rộng lớn và tiết kiệm chi phí văn phòng.

Thiết kế đồ họa/Thiết kế website

Thiết kế đồ họa/Thiết kế website

Với sự phát triển của các công cụ thiết kế đồ họa và web trực tuyến, các designer có thể dễ dàng làm việc từ xa. Họ có thể nhận yêu cầu thiết kế từ khách hàng, hoàn thành sản phẩm và gửi qua email hoặc đăng tải trực tuyến. Nhiều công ty thiết kế, quảng cáo đã áp dụng mô hình làm việc remote để tiếp cận những nhà thiết kế tài năng trên toàn cầu.

Dịch vụ khách hàng/Hỗ trợ kỹ thuật

Để giảm chi phí và tăng hiệu quả hoạt động, nhiều công ty đã outsource dịch vụ khách hàng và hỗ trợ kỹ thuật cho nhân viên làm việc từ xa. Nhân viên hỗ trợ khách hàng có thể trả lời cuộc gọi, email hoặc trò chuyện trực tuyến từ bất cứ đâu trên thế giới, miễn là có kết nối internet ổn định.

Kế toán/tài chính

Với sự phát triển của phần mềm kế toán và tài chính trực tuyến, nhiều nhân viên kế toán và tài chính có thể làm việc từ xa. Họ có thể nhận tài liệu từ khách hàng qua email, xử lý dữ liệu và gửi kết quả lại cho khách hàng mà không cần phải đến văn phòng.

Quản lý dự án

Nhờ sự hỗ trợ của các công cụ quản lý dự án trực tuyến như Trello, Asana, Basecamp, nhiều quản lý dự án đã có thể làm việc từ xa và giám sát tiến độ dự án một cách hiệu quả. Họ có thể tổ chức các cuộc họp trực tuyến, phân công công việc và theo dõi tiến độ thực hiện từ bất cứ đâu.

Các câu hỏi thường gặp

1. Remote là nghề gì?

“Remote” không phải là một nghề mà là một cách thức làm việc. Nó chỉ cách làm việc từ xa, không phải tại văn phòng hay cơ sở của công ty.

Khi nói đến “Remote jobs” hoặc “Remote work”, điều đó có nghĩa là bạn có thể làm nhiều loại nghề nghiệp khác nhau nhưng với mô hình làm việc từ xa, thường là tại nhà hoặc bất kỳ nơi đâu có kết nối internet mà không cần phải đến văn phòng công ty.

2. Làm thế nào để tìm kiếm việc làm remote?

Bạn có thể tìm việc làm remote thông qua các trang web việc làm, tham gia nhóm trên mạng xã hội dành cho những người tìm việc làm remote. Thêm nữa, bạn có thể xây dựng thương hiệu cá nhân trên mạng xã hội giúp bạn dễ dàng thu hút sự chú ý của các nhà tuyển dụng và tăng cơ hội nhận được việc làm remote.

3. Làm thế nào để quản lý việc làm remote hiệu quả?

quản lý việc làm remote

Tạo ra một lịch làm việc hàng ngày hoặc hàng tuần để giúp bạn tổ chức công việc và thời gian hiệu quả. Sử dụng các công cụ quản lý thời gian như Google Calendar hoặc các ứng dụng quản lý công việc như Trello để theo dõi công việc và deadline.

4. Làm việc remote có ảnh hưởng gì đến cơ hội thăng tiến nghề nghiệp?

Điều này phụ thuộc vào chính sách của công ty. Một số lo ngại việc làm remote có thể hạn chế cơ hội thăng tiến do thiếu các tương tác trực tiếp. Tuy nhiên nhiều công ty cũng có chính sách thăng tiến cho nhân viên remote.

5. Dấu hiệu lừa đảo khi tìm việc remote là gì?

Khi tìm kiếm việc làm remote, cần đề phòng những dấu hiệu lừa đảo sau đây:

  • Yêu cầu đóng phí đảm bảo việc làm
  • Mô tả công việc mơ hồ hoặc phúc lợi tốt bất thường
  • Nhận việc qua trung gian
  • Yêu cầu cung cấp thông tin cá nhân nhạy cảm
  • Không có thông tin cụ thể về công ty hoặc liên hệ

Tóm lại

Bài viết này chúng ta đã tìm hiểu làm remote là gì cũng như top các việc làm remote phổ biến nhất trên thị trường hiện nay. Mô hình làm việc remote mang đến nhiều lợi ích đáng kể và cũng đặt ra nhiều thách thức cho cả người lao động và doanh nghiệp. Vì vậy, cả người lao động và doanh nghiệp cần có những điều chỉnh phù hợp để đảm bảo hiệu quả làm việc và sự phát triển bền vững trong môi trường làm việc mới.

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Graphic Designer là gì? Những điều cần biết về Graphic Designer

Graphic designer là gì?

Trong thời đại 4.0 ngày nay, vai trò của người thiết kế đồ họa (Graphic Designer) ngày càng trở nên quan trọng và được đánh giá cao. Vậy, bạn có biết Graphic Designer là gì và công việc của họ là như thế nào không? Trong bài viết này, hãy cùng TopDev khám phá nhiều khía cạnh về Graphic Designer, từ công việc hàng ngày, kỹ năng cần có, cơ hội nghề nghiệp và các câu hỏi thường gặp xoay quanh công việc này.

Graphic Designer là gì? 

Graphic designer là người chuyên thiết kế và tạo ra các sản phẩm có liên quan đến hình ảnh, đồ họa và thiết kế mỹ thuật. Họ sử dụng sự sáng tạo và kỹ năng kỹ thuật để tạo ra các sản phẩm như bảng quảng cáo, hình ảnh, logo, bìa sách và nhiều sản phẩm khác.

Graphic designer là gì?

Công việc của Graphic Designer là gì?

Thông thường trên các JD (mô tả công việc) khi tuyển dụng, các công việc của một Graphic Designer bao gồm:

  • Lên ý tưởng và thiết kế các ấn phẩm truyền thông:

Bằng sự sáng tạo và kỹ năng thiết kế, những Graphic Designer đảm nhận việc tạo ra các thiết kế sáng tạo và hấp dẫn như banner, cover, infographics và các ấn phẩm khác để phục vụ cho hoạt động quảng cáo, nội dung trên website và mạng xã hội. Tất cả nhằm mục tiêu tạo ra các sản phẩm thị giác thu hút khách hàng.

  • Phối hợp với content writer:

Graphic Designer làm việc chặt chẽ với Content Writer để đảm bảo rằng thiết kế phù hợp với nội dung của blog, email marketing và các trang mạng xã hội của công ty. Họ cùng nhau tạo ra các sản phẩm thiết kế phù hợp và tương thích với thông điệp, mục tiêu của nội dung.

  • Thiết kế video giới thiệu sản phẩm và video hướng dẫn:

Ngoài việc thiết kế, chỉnh sửa các hình ảnh, Graphic Designer cũng tham gia vào quá trình thiết kế video giới thiệu hoặc video hướng dẫn sử dụng sản phẩm. Họ sử dụng kỹ năng thiết kế đồ họa và công cụ phần mềm để tạo ra các video chất lượng cao, giúp giới thiệu và hướng dẫn khách hàng về sản phẩm và dịch vụ của công ty.

  • Thiết kế các ấn phẩm truyền thông nội bộ:

Graphic designer có trách nhiệm thiết kế các ấn phẩm truyền thông nội bộ như tờ rơi, poster, slide thuyết trình, và các tài liệu nội bộ khác. Công việc này đảm bảo rằng thông điệp và hình ảnh của công ty được truyền tải một cách chuyên nghiệp và thú vị trong các hoạt động nội bộ.

  • Đảm bảo tuân thủ các nguyên tắc thiết kế và chỉnh sửa:

Để đảm bảo rằng các thiết kế tuân thủ các nguyên tắc thiết kế như sử dụng màu sắc, văn bản, hình ảnh và định dạng một cách hợp lý, Graphic Designer cũng phải thực hiện các chỉnh sửa cần thiết để đảm bảo rằng thiết kế phù hợp với yêu cầu và mục tiêu của dự án.

  Làm sao để chuyển đổi từ Graphic Design sang UX Design? (phần 1)
  Làm sao để chuyển đổi từ Graphic Design sang UX Design? (phần 2)

Graphic designer là gì?

Kỹ năng cần có ở một Graphic Designer

Graphic Designer đóng một vai trò thiết yếu trong việc xây dựng những hình ảnh chuyên nghiệp, thu hút của sản phẩm hay dịch vụ trong mắt khách hàng. Vậy, để trở thành một Graphic Designer, bạn cần có:

  • Kỹ năng chuyên môn

Về khả năng chuyên môn, để trở thành một Graphic Designer, bạn cần trang bị cho bản thân những kiến thức dưới đây:

  • Sự thành thạo về công cụ và phần mềm thiết kế: 

Graphic Designer cần có kiến thức sâu về các công cụ và phần mềm thiết kế đồ họa như Adobe Photoshop, Illustrator, InDesign và các ứng dụng khác. Sự thành thạo về các công cụ này giúp họ tạo ra các thiết kế chuyên nghiệp và đáp ứng được yêu cầu của dự án.

  • Kiến thức về thiết kế và nguyên tắc hình ảnh: 

Hiểu về các nguyên tắc cơ bản của thiết kế như sử dụng màu sắc, hình ảnh, văn bản và cách bố trí một cách hợp lý để tạo ra các thiết kế hấp dẫn và hiệu quả là một kỹ năng cần thiết của một Graphic Designer 

  • Sự sáng tạo và khả năng tư duy thiết kế: 

Ngoài ra, họ cần có khả năng tư duy sáng tạo để tạo ra các ý tưởng và thiết kế mới mẻ, khả năng nhìn nhận các yêu cầu và thông điệp của dự án để tạo ra các giải pháp thiết kế độc đáo và phù hợp.

  • Kỹ năng xử lý hình ảnh và đồ họa: 

Graphic Designer cần có khả năng chỉnh sửa và xử lý hình ảnh, biết cách tạo ra các hiệu ứng đồ họa và áp dụng các kỹ thuật tạo hình để cải thiện chất lượng và truyền tải thông điệp của thiết kế.

  • Hiểu biết về xu hướng thiết kế và truyền thông: 

Graphic Designer cần cập nhật với các xu hướng mới nhất trong lĩnh vực thiết kế và truyền thông. Họ nên có kiến thức về phong cách thiết kế hiện đại, sự phát triển của công nghệ và sự thay đổi trong ngành để áp dụng những xu hướng này vào công việc của mình.

Graphic designer là gì?

  • Kỹ năng mềm

Ngoài những kỹ năng về chuyên môn vô cùng quan trọng được liệt kê ở trên, là một Graphic Designer không thể thiếu những những kỹ năng mềm, bao gồm:

  • Sự sáng tạo và linh hoạt: 

Graphic Designer cần có sự sáng tạo và khả năng thích ứng để tạo ra các giải pháp thiết kế độc đáo và đáp ứng được yêu cầu của khách hàng. Họ cũng cần linh hoạt để làm việc trong các dự án khác nhau và đáp ứng được các yêu cầu thay đổi.

  • Kỹ năng giao tiếp: 

Khả năng giao tiếp tốt giúp Graphic Designer hiểu rõ yêu cầu và ý kiến của khách hàng và trình bày, giải thích ý tưởng thiết kế của mình một cách rõ ràng và hiệu quả.

  • Khả năng làm việc nhóm: 

Vì phải thường làm việc trong môi trường nhóm và cần có khả năng làm việc cộng tác và tương tác tốt với các thành viên khác trong nhóm, do đó, một Graphic Designer cần biết lắng nghe ý kiến của người khác, chia sẻ ý tưởng và hợp tác để đạt được kết quả tốt nhất cho dự án.

  • Khả năng quản lý thời gian và  chịu áp lực công việc: 

Graphic Designer thường phải làm việc theo deadline và đối mặt với áp lực công việc. Họ cần có khả năng quản lý thời gian hiệu quả, ưu tiên công việc và hoàn thành dự án đúng hạn.

  9 công cụ siêu tiện lợi cho cả Developer và Designer

Cơ hội nghề nghiệp của Graphic Designer

Ngành Graphic Design đang trở thành một lĩnh vực phát triển mạnh mẽ với nhu cầu ngày càng tăng về thiết kế đẹp mắt và chuyên nghiệp. Dưới đây là một số cơ hội nghề nghiệp mà Graphic Designer có thể khám phá:

  • Làm việc trong các agency quảng cáo và công ty thiết kế: 

Graphic Designer có thể làm việc trong các agency quảng cáo, công ty thiết kế và công ty truyền thông để phát triển các chiến dịch quảng cáo và các dự án sáng tạo khác.

  • Làm việc freelance (tự do): 

Graphic Designer có thể lựa chọn làm việc tự do và nhận các dự án từ khách hàng cá nhân hoặc doanh nghiệp.

  • Làm việc trong ngành công nghiệp truyền thông và truyền thông kỹ thuật số:

Graphic Designer có thể làm việc trong các công ty truyền thông, xuất bản, công ty phần mềm và công ty truyền thông kỹ thuật số để tạo ra các nội dung trực quan và thiết kế đồ họa cho các sản phẩm truyền thông.

Tham khảo việc làm Designer lương cao

Graphic designer là gì?

Các câu hỏi thường gặp về Graphic Designer là gì?

Câu 1. Lương của Graphic Designer là bao nhiêu?

Mức lương của Graphic Designer phụ thuộc vào kinh nghiệm, vị trí công việc và quy mô công ty. Tại Việt Nam, mức lương khởi điểm vào khoảng 8-10 triệu đồng cho nhân viên mới ra trường, trong khi Graphic Designer giàu kinh nghiệm có thể nhận mức lương 20-30 triệu đồng/tháng.

Câu 2. Làm Graphic Designer có cần bằng đại học không?

Để trở thành một Graphic Designer, không bắt buộc phải có bằng cấp đại học nhưng đó có thể là một lợi thế trong việc tìm kiếm việc làm và nâng cao khả năng cạnh tranh của bạn trong tương lai. Tuy nhiên, quan trọng hơn là khả năng và kỹ năng thực tế của bạn trong lĩnh vực thiết kế. Việc xây dựng một portfolio ấn tượng và có những dự án thực tế để chứng minh khả năng của bạn thường quan trọng hơn so với việc có bằng cấp đại học.

Câu 3. Graphic Designer có thể làm việc từ xa (remote) không?

Câu trả lời là có, do tính chất công việc, Graphic Designer có thể hoàn toàn làm việc từ xa (remote) và freelance. Họ chỉ cần một máy tính kết nối internet, các phần mềm đồ họa và kỹ năng giao tiếp, quản lý công việc tốt. Nhiều Graphic Designer chuyên nghiệp đã chọn con đường freelance để linh hoạt giờ giấc và chọn lọc các dự án phù hợp.

  Top câu hỏi phỏng vấn Graphic Designer chinh phục nhà tuyển dụng

Kết luận

Graphic Designer đóng vai trò quan trọng trong việc tạo ra các sản phẩm đồ họa và thiết kế sáng tạo. Họ cần có sự sáng tạo, kỹ năng kỹ thuật và hiểu biết về thiết kế để thực hiện công việc một cách chuyên nghiệp. Với sự phát triển của ngành thiết kế đồ họa, Graphic Designer có nhiều cơ hội nghề nghiệp hấp dẫn trong các lĩnh vực truyền thông, truyền thông kỹ thuật số và thiết kế giao diện người dùng. Hy vọng rằng bài viết của TopDev đã cung cấp cho bạn được một cái nhìn tổng quan về nghề Graphic Designer. Đừng quên tiếp tục theo dõi Blog TopDev để cập nhật thêm nhiều kiến thức về lập trình và các tips tuyển dụng hữu ích.

Xem thêm các tin tuyển dụng IT mới nhất trên TopDev

Bàn về “peer-pressure” khi lướt LinkedIn và TikTok

Bàn về

Bài viết được sự cho phép của tác giả Lê Tuấn Anh

LinkedIn là mạng xã hội chuyên nghiệp cho những người đi làm, Tiktok là nền tảng giải trí video ngắn, lý thuyết là như thế. Thực tế với nhiều người bạn xung quanh mình, LinkedIn hay Tiktok là những nền tảng góp phần tạo nên ‘peer-pressure’, hay sự so sánh với người khác khiến cho bản thân cảm thấy tự ti. Trên LinkedIn bạn toàn thấy những bạn trẻ giỏi giang làm giám đốc, quản lý, profile công việc hoành tráng. Trên Tiktok bạn thấy những cá nhân còn giỏi giang hơn, trẻ tuổi tài cao, làm tự do, nhiều tiền, ăn ngon, du lịch khắp mọi nơi. Không cảm thấy áp lực hay tự ti khi nhìn thấy những hình ảnh trên mới lạ.

Nếu bạn đang thuộc nhóm đối tượng trên, mình chia sẻ dưới đây một vài ‘bí kíp’ bản thân đã trang bị để phần nào xử lý vấn đề áp lực đồng đẳng và tâm lý tự ti này.

1/ Bạn và người khác có hoàn cảnh khác nhau, định nghĩa thành công khác nhau, những sự may mắn khác nhau

Không có 2 người nào giống nhau hoàn toàn về ngoại hình, gia đình, tính cách, hoàn cảnh sống và các mối quan hệ. Tất cả những điều này lại có ảnh hưởng rất lớn đến kết quả công việc của một người. Chính vì vậy khi có sự so sánh bản thân mình với người khác, bạn hãy tự đặt những câu hỏi dưới đây để có cái nhìn sâu và rộng hơn trong việc so sánh:

  • Bạn có xuất phát điểm giống người ta hay không? Hoàn cảnh gia đình bạn, những mối quan hệ xung quanh bạn có giống người ta hay không?
  • Mục tiêu trong công việc / cuộc sống của bạn có giống người ta hay không? Người ta có thể đang thành công về tiền bạc, địa vị – liệu đó có phải là những thứ bạn đang theo đuổi hay không?

Lấy một ví dụ về việc làm KOL trên mạng xã hội hiện nay. Có rất nhiều người đang làm KOLs, chia sẻ về những khía cạnh khác nhau trong cuộc sống, nhưng chỉ một số ít trong đó trở nên nổi tiếng. Bên cạnh việc họ có năng lực thực sự, bạn phải thừa nhận rằng họ có may mắn gặp thời, có chống lưng (ý nói gia đình tài chính tốt), có ekip hùng hậu để hỗ trợ. Bạn có những điều đó hay không?

2/ Bạn có chấp nhận đánh đổi không?

Trừ một số trường hợp đặc biệt, mình không nghĩ rằng ông trời cho ai tất cả mọi thứ. Xung quanh mình có đa dạng kiểu người với những kiểu nghề nghiệp khác nhau. Những người làm công tác xã hội giúp ích cho người cho đời, công việc ý nghĩa, đúng đam mê, sở thích thì gặp khó khăn trong tài chính, tiền bạc không quá dư dả, không có cơ hội được ăn ngon, chơi xa, không thể lo được cho gia đình hay người thân những cơ hội xịn nhất. Những người làm trong giới nghệ thuật trông lúc nào cũng bóng bẩy, hào nhoáng, đẹp đẽ nhưng tối về là những nỗi cô đơn, là bạn với chất kích thích. Những giám đốc, quản lý làm việc quần quật ngày đêm đem về những căn bệnh xương khớp, dạ dày và nhiều tiền thuốc cho bệnh viên.

Mình nói như trên không phải vơ đũa cả nắm rằng tất cả những người trong lĩnh vực đó đều như vậy. Có những người làm công tác xã hội vẫn giàu, những người làm nghệ thuật vẫn sống healthy, hay nhiều người làm quản lý vẫn có sức khoẻ rất tốt. Điều mình muốn nói ở đây là, để đạt được sự thành công vượt trội ở một lĩnh vực nào đó, bạn phải chấp nhận đánh đổi một hoặc một số phần tập trung trong cuộc sống. Bạn không thể nào vừa mong muốn đóng góp cho công ty, làm OT mà vẫn có nhiều thời gian cho bạn bè, con cái, người thân. Không thể nào vừa muốn có nhiều thời gian nghỉ ngơi, chăm sóc sức khoẻ mà vẫn dành nhiều thời gian cho công việc. Khi bạn chọn tập trung điều gì, bạn phải hi sinh đi một số điều còn lại.

Nếu bạn đang cảm thấy peer-pressure với một ai đó, thử tìm hiểu hoặc đặt mình vào vị trí của họ xem, để đạt được những thành công như họ đang có, họ đã đánh đổi những điều gì? Là bạn, bạn có chấp nhận đánh đổi những điều đó hay không.

  20 mẹo xây dựng thương hiệu cá nhân hiệu quả trên LinkedIn (Phần 1)

  Cách tìm ứng viên trên LinkedIn không phải HR nào cũng biết

3/ Xem thông tin Tiktok và LinkedIn một cách có chọn lọc

Các nền tảng mạng xã hội đều rất thông minh, chúng biết gợi ý những nội dung mà chúng ta dành thời gian xem nhiều. Ví dụ bạn dành thời gian xem nhiều video của một người A thành công nào đó trên mạng, bạn sẽ nhận được thêm nhiều video của những người B, C, D tương tự như vậy. Điều này vô tình làm cho chúng ta ngày càng áp lực hơn khi nhìn thấy quá nhiều tấm gương thành công như thế.

Mình cũng giống các bạn, không phải là mình không có áp lực. Mình làm công việc giáo dục. Khi mình lướt Tiktok và LinkedIn mình thấy những người làm nghề giống mình được giải thưởng này kia, làm chương trình này nọ, gặp gỡ đối tác to nhỏ – mình cũng cảm thấy áp lực và tự ti vì sao mình không được những điều đó. Việc áp lực là không thể tránh, đặc biệt với những người nhạy cảm. Điều mình và các bạn có thể làm được là điều chỉnh lại những nội dung mà chúng ta thường xuyên xem trên các trang mạng.

Thử lướt một lượt danh sách những người bạn đang theo dõi trên Tiktok và LinkedIn, xem nội dung của ai đang làm bạn cảm thấy áp lực, hãy huỷ theo dõi. Đừng nghĩ rằng bản thân mình xấu tính khi huỷ theo dõi một ai. Có thể người đó rất giỏi và được nhiều người ngưỡng mộ, nhưng cách chia sẻ của họ không hợp style với bạn thì việc bạn huỷ theo dõi là hoàn toàn bình thường.

Hãy hạn chế thời gian lướt newfeed trong vô thức. Tức là khi bạn mở Tiktok hoặc LinkedIn ra, bạn có chủ đích vào kênh nào thì tìm kênh đó và vào xem nội dung. Đừng lướt newfeed cho vui nữa. Mỗi ngày bạn có thể tự quy định cho bản thân 5-10 phút, 2-3 lần mỗi ngày vào khung giờ nào đó cho việc lướt newfeed, hết thời gian đó thì thôi. Làm được việc này là bạn sẽ hạn chế được việc tiếp cận với nhiều nội dung làm bạn áp lực hơn.

4/ Tập biết ơn và đóng góp cho xã hội

Có 2 việc bạn có thể làm để bản thân cảm thấy ít áp lực hơn là tập thói quen biết ơn những gì đang có và đóng góp cho xã hội theo cách của bạn. Khi bạn làm được hai điều này, thời gian bạn dành cho việc so sánh và tự ti sẽ giảm đi.

Mỗi buổi sáng, buổi trưa hoặc buổi tối, hãy mở phần mềm Note trên điện thoại hoặc một cuốn sổ trước mặt, viết ra 03 điều mà bạn thấy biết ơn cuộc sống hiện tại. Ví dụ, ngay lúc này đây mình biết ơn vì (1) có những công việc nhỏ kiếm được khoản tiền nhỏ đủ trả tiền ở chung cư tốt (2) vẫn được ăn ngon 3 bữa mỗi ngày (3) có một sức khoẻ tốt và trí tuệ minh mẫn để viết ra những điều này. Còn bạn, bạn biết ơn điều gì?

Hãy dành thêm thời gian ngoài giờ làm việc để đóng góp cho xã hội và cộng đồng. Bạn có thể trực tiếp tham gia các bếp ăn tình thương, đi phát quà cho người nghèo hoặc những việc tương tự. Làm để thấy cuộc sống bạn vẫn còn may mắn hơn người khác nhiều lắm, có gì mà phải tự ti. Nếu bạn có khả năng chia sẻ và truyền đạt kiến thức tốt, hãy đăng ký trở thành mentor cho các em sinh viên hoặc chia sẻ những gì bạn biết đến các em học sinh – sinh viên. Trở thành người dẫn lối, chia sẻ là sẽ thấy cuộc sống của bản thân có ích, từ đó bớt dần sự tự ti.

Cảm ơn các bạn đã đọc. Chúc các bạn một ngày nhiều niềm vui.

Bài viết gốc được đăng tải tại anhtuanle.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Tại sao thiết kế phần mềm càng đa dụng lại càng phức tạp?

Tại sao thiết kế phần mềm càng đa dụng lại càng phức tạp?

Bài viết được sự cho phép bởi tác giả Vũ Thành Nam

Có lẽ đây là một chủ đề nói đơn giản cũng không hẳn mà nói phức tạp cũng không hẳn, đi sâu hơn vào lĩnh vực này mình cảm thấy mình thật nhỏ bé, vì vậy có thể bài viết này sai sót ở đâu đó do mình còn ít kinh nghiệm mong các bạn có thể bổ sung góp ý thêm nhé!

Đầu tiên thì bạn thường đặt câu hỏi tại sao lại phải làm phức tạp hóa vấn đề lên trong khi một phần mềm chỉ cần đáp ứng đúng và đủ nhu cầu hiện tại của mình.

Nếu như bạn đã đọc qua về quá trình phát triển của các kiến trúc phần mềm thì bạn sẽ nhận thấy chúng ta thiết kế không phải nhằm mục đích đáp ứng mỗi nhu cầu hiện tại, mà nó còn để giải quyết những vấn đề phát triển trong tương lai.

Dưới đây là một số lý do mà các kiến trúc sư phần mềm đã phải đau đầu cho những thiết kế đáp ứng tương lai:

Code maintainance

Mình thường so sánh việc kiến trúc phần mềm với kiến trúc xây dựng, nó có khá là nhiều điểm tương đồng. Hãy thử tưởng tượng bạn muốn thiết kế và xây dựng một ngôi nhà nhưng bạn không chắc chắn cái bạn muốn, cái duy nhất bạn có chỉ là ý tưởng nhưng không thể nào thiết kế một cách tùy ý được. Vậy bạn cần ngay lúc này là bản thiết kế vậy là bạn tìm đến một kiến trúc sư.

Ngôi nhà của bạn, bạn nghĩ nên có 2 phòng ngủ, ah không có thể là 40 phòng ngủ. Vậy làm thế nào để kiến trúc sư hay chính bạn có thể lên kế hoạch một cách chắc chắn đây, khi này kiến trúc sư đành phải đâu đầu suy nghĩ làm sao có thể thêm hoặc bớt số phòng ngủ sao cho dễ dàng nhất. Bản vẽ ban đầu sẽ thể hiện được cái bạn muốn, từ đó nó cũng đánh giá được chi phí xây dựng, nhưng mà khi có sự thay đổi trong cái bạn muốn ban đầu, bản vẽ này vẫn phải đáp ứng được nhu cầu thay đổi một cách ít nhất có thể, chi phí chỉnh sửa cũng phải ít nhất mà vẫn đáp ứng được yêu cầu mới. Đó chính là sự đau đầu của một kiến trúc sư mà không phải ai cũng làm được.

thiết kế phần mềm

Trong kiến trúc phần mềm cũng vậy, nhiều kiến trúc sư phần mềm có nhiều năm kinh nghiệm thường hiểu được vấn đề này, khi này họ sẽ tạo ra những thành phần (phần tử) theo hướng trừu tượng hóa nhằm dễ dàng thay đổi, dễ dàng tích hợp, dễ dàng nâng cấp hay thay đổi vị trí. Một điều đáng lưu tâm nữa đó là thiết kế làm sao để những người xây dựng hay những người vận hành, bảo trì và phát triển sau này có thể hiểu được, điều này đồng nghĩa với việc có một chuẩn chung và có một quy định chung cho chuyên ngành.

Vậy nên nói không ngoa chứ lập trình viên chẳng khác nào một thợ xây, nó thiết kế và thi công theo bản vẽ và khi đạt tới số năm kinh nghiệm rồi thì họ có thể lên chức thành kiến trúc sư nếu muốn

Code Reusability

Cách tốt nhất để tăng chất lượng code lên đó chính là code ít đi, “Không code, không bug”. Điều này thật vô lý nhưng mà nó lại vô cùng thuyết phục, bạn có thể code 1 tính năng và đã được kiểm thử, việc bạn sử dụng lại đoạn code của tính năng đó sẽ giúp bạn tiết kiệm được thời gian viết mới cũng như thời gian kiểm thử lại. Vậy nên giải pháp kiến trúc làm sao để có thể tái sử dụng tối đa hết mức có thể sẽ được ưa chuộng và là một trong những mục tiêu vô cùng quan trọng. Dựa vào ý tưởng tái sử dụng này mà những thư viện (libraries), nền tảng (frameworks), mẫu chung (templates), hay công cụ sinh mã code (code generators) ra đời cũng là vì vậy.

Cùng hình dung bạn có những mảnh lego nhỏ nhỏ xinh xinh, bạn có thể dùng nó để xây tàu, xây nhà, xây cầu mà cũng chỉ là những mảnh lego đó. Đó chính là tính đa dụng mà người thiết kế cần lưu tâm khi thiết kế những thành phần trong phần mềm của mình theo hướng lego. Có thể tái sử dụng để xây dựng bất cứ thứ gì và ở bất cứ đâu.

thiết kế phần mềm

Vậy làm sao để thiết kế tính đa dụng dễ dàng tái sử dụng được như vậy, lại một lần nữa đau đầu rồi.

  Chia sẻ kinh nghiệm viết code Front-end hiệu quả và bảo mật

  Các nguyên lý trong thiết kế phần mềm

Features, features and features

Tính năng, tính năng và tính năng, điều mà được ưu tiên hàng đầu cho bất cứ sản phẩm phần mềm nào. Nếu bạn là một nhà quản lý bạn thường đứng giữa sự lựa chọn những quyết định mang tính thử thách, một phần mềm đáp ứng đủ tốt cho chức năng đồng thời dễ dàng mở rộng, vận hành, bảo trì và phát triển. Tất nhiên là muốn chọn cả hai rồi, vậy chi phí thiết kế kiến trúc không cho phép và chỉ được chọn một thì sao. Chắc chắn lúc này là anh ấy sẽ phải chọn đáp ứng đủ tính năng là ưu tiên hàng đầu. Nhiều khi vẫn biết là kiến trúc đó chưa tốt nhưng về mặt thời gian và chi phí không đủ thì đành phải nợ lại (Technical Debt).

Nợ thì phải trả, điều đó luôn đúng rồi, nhưng việc ưu tiên tính năng là hoàn toàn chính xác vì khách hàng trả tiền cho bạn là để xây dựng tính năng mà. Việc bạn phải làm lúc này là thông báo cho khách hàng và đưa là những options những giải pháp khác nhau cho khách hàng lựa chọn. Ví dụ để đảm bảo tính năng thì bạn có thể xây dựng theo hướng cấu hình (configuration) để đảm bảo thêm tính dễ dàng thay đổi, xây dựng tách nhỏ module để có thể đẽ dàng tái sử dụng. Có lẽ ưu tiên tính năng nhưng bạn vẫn nên nghĩ mở rộng hơn và tối ưu nhất có thể tại thời điểm đó để sao có thể nợ ít nhất. Bạn hiểu ý mình chứ?

thiết kế phần mềm

Bạn thấy đó, kiến trúc đâu phải dễ dàng gì, mà một khi bản vẽ của bạn sai thì một khi đã thi công rồi nó sẽ tốn rất nhiều chi phí về sau, trách nhiệm thiết kế lúc này rất nặng.

Bạn nghĩ sao về mảng này trong chuyên ngành phát triển công nghệ phần mềm? Góp ý thêm cho mình nhé!

Bài viết gốc được đăng tải tại ntechdevelopers.com

Xem thêm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Feedback là gì? Tầm quan trọng của feedback công việc và cuộc sống

feedback la gi

Bạn đã bao giờ nghe về thuật ngữ “feedback” trong đời sống hàng ngày hay tại nơi bạn làm việc chưa? Feedback đóng góp vai trò quan trọng trong quá trình nhận ra những khuyết điểm và cải thiện bản thân. Vậy, feedback là gì? Tại sao nó lại quan trọng? Trong bài viết này, cùng TopDev tìm ra câu trả lời cho những vấn đề này.

Feedback là gì?

Feedback là quá trình cung cấp thông tin, đánh giá hoặc ý kiến về hành vi, hiệu suất hoặc kết quả của một người, nhằm giúp người đó tự cải thiện. Nó có thể được cung cấp từ nhiều nguồn khác nhau, bao gồm đồng nghiệp, cấp trên, người thân, bạn bè hoặc người hướng dẫn. Feedback có thể là tích cực hoặc tiêu cực, nhưng mục đích chính là giúp người nhận nắm bắt thông tin và phát triển.

feedback là gì

Tầm quan trọng của feedback trong công việc và cuộc sống

Đón nhận những feedback từ mọi người xung quanh, đặc biệt là những feedback mang tính xây dựng và đóng góp sẽ mang lại rất nhiều lợi ích cho bạn. Cụ thể:

Nhận ra điểm mạnh và điểm yếu

Feedback cho phép bạn nhìn nhận bản thân một cách khách quan hơn. Bằng cách nghe ý kiến ​​từ người khác, bạn có thể nhận ra những điểm mạnh mà bạn có thể chưa nhận ra hoặc khám phá những khía cạnh cần cải thiện. Điều này giúp bạn có một cái nhìn tổng thể về bản thân và đồng thời tạo cơ hội để phát triển và hoàn thiện hơn.

Khuyến khích sự phát triển và học hỏi

Lắng nghe phản hồi từ những người xung quanh giúp bạn có thêm cơ hội học hỏi và phát triển. Khi chấp nhận feedback một cách tích cực và đề cao việc cải thiện bản thân, bạn có thể mở rộng kiến thức, kỹ năng và nhận thức về mình. Ngoài ra, feedback cũng giúp bạn nhận biết những sai lầm của bản thân và học hỏi từ lỗi lầm, từ đó bạn có thể ngày càng trở nên thành thạo hơn trong công việc và thành công cuộc sống.

Tạo ra và xây dựng những mối quan hệ chất lượng hơn

Feedback là một công cụ quan trọng trong việc xây dựng mối quan hệ tốt hơn với người khác. Bằng cách cung cấp feedback một cách xây dựng và chân thành, bạn có thể khuyến khích người khác phát triển và cải thiện. Đồng thời, khi nhận feedback, bạn nên thể hiện sự tôn trọng và sẵn lòng lắng nghe. Điều này tạo ra một môi trường giao tiếp tự do và mang tính đóng góp, giúp mọi người tiến xa hơn trong công việc và mối quan hệ cá nhân.

Tham khảo việc làm IT helpdesk lương cao

feedback là gì

  Vì sao feedback rất quan trọng?

Cách đưa và nhận feedback hiệu quả

Feedback là một cách hiệu quả để phát triển và cải thiện bản thân, nhưng để đạt được hiệu quả cao, cách đưa và nhận feedback cần được thực hiện một cách đúng đắn. Để quá trình đưa và nhận feedback hiệu quả, phản hồi cần phải:

  • Cụ thể và rõ ràng

Khi đưa feedback, hãy tập trung vào việc cung cấp thông tin cụ thể và rõ ràng về hành động, hiệu suất hoặc kết quả cụ thể. Tránh những phê phán mơ hồ hay tổng quát, thay vào đó hãy nêu rõ lý do và ví dụ cụ thể mà bạn muốn góp ý.

  • Nhanh chóng và kịp thời

Feedback nên được đưa ra kịp thời, ngay sau khi sự kiện xảy ra. Điều này giúp người nhận feedback nhớ rõ hành vi hoặc tình huống mà feedback đang ám chỉ. Đồng thời, người đưa feedback cũng nên đảm bảo rằng thời điểm đưa feedback là thích hợp và không gây phiền hà cho người nhận.

  • Xây dựng và tích cực

Một yếu tố quan trọng của feedback hiệu quả là tính tích cực và xây dựng. Thay vì tập trung vào những điểm yếu và lỗi lầm, hãy tìm cách nhấn mạnh vào điểm mạnh của người nhận feedback và các lĩnh vực mà họ có thể cải thiện. Góp ý xây dựng và đề xuất cách để người nhận phát triển và thành công hơn.

  • Lắng nghe và tôn trọng

Người nhận feedback cần lắng nghe một cách chân thành và tôn trọng ý kiến của người đưa feedback. Hãy giữ tinh thần thoải mái, tư duy mở để tiếp thu thông tin và không phản ứng thái quá. Nếu có sự không đồng ý, hãy thể hiện một cách tôn trọng và trao đổi ý kiến một cách xây dựng.

  Kỹ năng trình bày vấn đề

feedback là gì

Các câu hỏi thường gặp về feedback là gì?

Câu 1. Feedback tích cực và tiêu cực có ý nghĩa gì?

Feedback tích cực và tiêu cực đều có ý nghĩa quan trọng trong quá trình phát triển cá nhân và cải thiện. Trong khi, feedback tích cực là những đánh giá, nhận xét hoặc gợi ý mà người khác đưa ra để khen ngợi, nhấn mạnh điểm mạnh và động viên. Ngược lại, feedback tiêu cực là những đánh giá, nhận xét hoặc gợi ý đưa ra để chỉ ra điểm yếu, lỗi lầm hoặc khuyết điểm trong hành vi, hiệu suất hoặc kết quả.

Câu 2. Làm thế nào để xử lý feedback tiêu cực?

Hãy lắng nghe một cách chân thành và giữ một thái độ luôn sẵn sàng học hỏi trước những feedback tiêu cực. Hãy nhìn vào feedback như một cơ hội để phát triển và cải thiện bản thân

Câu 3. Làm thế nào để yêu cầu feedback từ người khác?

Hãy đặt ra mục đích của bạn trong việc nhận feedback và trình bày rõ ràng về lĩnh vực mà bạn muốn cải thiện hoặc nhận được đánh giá. Sau đó, hãy lắng nghe chân thành và tôn trọng ý kiến của mọi người xung quanh và cảm ơn vì sự chia sẻ ý kiến họ.

Kết luận

Feedback đóng vai trò quan trọng trong cả công việc và cuộc sống. Nó giúp chúng ta nhận biết điểm mạnh, điểm yếu và tạo cơ hội để phát triển. Bằng cách đưa và nhận feedback một cách hiệu quả, chúng ta có thể xây dựng mối quan hệ tốt hơn và phát triển bản thân. Hãy coi feedback là một công cụ hữu ích để trở thành phiên bản tốt hơn của chính mình. Hy vọng rằng bài viết của TopDev đã cung cấp cho bạn được nhiều kiến thức hữu ích về feedback. Đừng quên tiếp tục theo dõi Blog TopDev để cập nhật thêm nhiều kiến thức về lập trình và các tips tuyển dụng hữu ích.

Xem thêm các tin tuyển dụng IT mới nhất trên TopDev