Một thách thức lớn đối với team phát triển phần mềm khi làm việc nhóm ngoài việc đảm bảo code chạy tốt thì đó là việc xây dựng được bộ mã nguồn đủ chuẩn theo đúng format, mang tính đồng bộ, nhất quán để có khả năng bảo trì tốt trong tương lai. Và để làm được điều này thì chúng ta sẽ cần đến các công cụ định dạng code như Prettier. Vậy Prettier là gì, bài viết hôm nay mình sẽ giúp các bạn trả lời cho câu hỏi trên cùng một vài hướng dẫn định dạng code sử dụng Prettier trong dự án nhé.
Prettier là gì?
Prettier là một công cụ giúp tự động định dạng (format) code theo một chuẩn được thống nhất từ trước nhằm duy trì sự nhất quán của toàn bộ source code trong dự án. Prettier được cung cấp dưới dạng thư viện mã nguồn mở, hoàn toàn miễn phí và hỗ trợ đa dạng các ngôn ngữ khác nhau từ ngôn ngữ lập trình (JavaScript, TypeScript,…), đến các ngôn ngữ hiển thị (HTML, CSS,…) và các loại định dạng dữ liệu (JSON, Markdown,…)
Để thực hiện việc format code với Prettier, chúng ta có nhiều lựa chọn sử dụng tùy vào thời điểm và nhu cầu của team phát triển dự án, bao gồm:
Thông qua các Editor plugin: cài đặt plugin Prettier trực tiếp trên Editor mà bạn sử dụng, ví dụ như với IDE Visual Studio Code, bạn có thể tải và cài đặt package Prettier formatter for Visual Studio Code. Mỗi lần viết code xong, lưu lại (save) thì code của bạn sẽ được tự động format
Thông qua CLI (giao diện dòng lệnh): Prettier hỗ trợ chạy lệnh để thực hiện format code cho một số file hoặc toàn bộ source code dự án. Vì thế bạn có thể sử dụng thông qua CLI và gọi ra lúc cần.
Thông qua Pre-commit Hook: đây là cách mà nhiều dự án áp dụng để tránh trường hợp thành viên trong team vô tình hoặc cố ý không chịu cài đặt Prettier trên IDE hay không chạy lệnh format qua CLI. Code sẽ được tự động format bởi Prettier ngay trước khi commit và push lên Git services.
Lợi ích khi sử dụng Prettier
Trong lập trình, việc viết code một cách gọn gàng, dễ đọc là tiêu chuẩn cơ bản mà một lập trình viên cần đạt được. Tuy nhiên việc định dạng code một cách thủ công là một thách thức nhất là khi làm việc nhóm, sẽ dễ xảy ra tình trạng mỗi thành viên có một style format code khác nhau. Vì vậy, Prettier ra đời giúp cho chúng ta giải quyết được vấn đề trên, vừa tiết kiệm được thời gian thực hiện và đảm bảo sự nhất quán khi làm việc nhóm.
Có nhiều thư viện cũng cho phép bạn định dạng code trong dự án, tuy nhiên Prettier sẽ mang lại cho bạn nhiều lợi ích nổi trội hơn công cụ khác khi sử dụng bao gồm:
Hỗ trợ nhiều ngôn ngữ lập trình khác nhau: JavaScript, JSX, Angular, Vue, Flow, TypeScript, CSS, HTML, JSON, Markdown, YAML,… và một số phiên bản mở rộng của các ngôn ngữ trên.
Dễ sử dụng: Prettier có thể dễ dàng cài đặt và sử dụng mà không mất thời gian cấu hình. Việc định dạng diễn ra ngay khi save code giúp bạn tiết kiệm được thời gian, tăng năng suất làm việc; tạo sự nhất quán trong dự án.
Cho phép tùy chỉnh: Prettier cho phép người dùng tùy chỉnh cấu hình source code tùy thuộc theo dự án, ngôn ngữ; từ đó bạn có thể áp dụng một số quy tắc dựa trên sở thích cá nhân hay của tổ chức vào code viết ra.
Có khả năng kết hợp với các công cụ kiểm tra mã nguồn khác: Prettier có thể kết hợp với ESLint (công cụ kiểm tra source code) bằng cách đọc cấu hình từ file .editorconfig. Việc kết hợp 2 thư viện này giúp bạn vừa đảm bảo chất lượng, vừa đảm bảo thẩm mỹ trong source code của mình.
Như đã đề cập ở phần trên, bạn có thể sử dụng Prettier theo nhiều cách khác nhau, tùy vào mục đích và thời điểm cần định dạng code. Phần này mình sẽ hướng dẫn các bạn cách áp dụng Prettier định dạng code thông qua việc sử dụng CLI và tích hợp vào Visual Studio Code nhé.
Sử dụng Prettier qua dòng lệnh
Chúng ta có thể sử dụng Prettier trực tiếp qua dòng lệnh (CLI) với cú pháp:
Kiểm tra code có tuân theo tiêu chuẩn của Prettier hay không: npx prettier –write index.js
Định dạng code với Prettier: npx prettier –write index.js
Bạn có thể sử dụng CLI trên cho file hoặc thư mục; hoặc có thể thêm những lệnh trên vào trước các thủ tục commit code (hook pre-commit) để đảm bảo rằng source code của bạn tuân thủ theo định dạng Prettier.
Trong VS Code, bạn hãy tìm extension Prettier và cài đặt, kích hoạt nó cho dự án của bạn.
Lúc này bạn đã có thể sử dụng ngay tính năng định dạng file của Prettier bằng cách chuột phải và chọn Format Document hoặc sử dụng các tổ hợp phím tắt Shift + Alt + F (hay Ctrl + Shift + P). Để sử dụng tính năng tự động format code ngay khi lưu, hãy bật tính năng Format On Save của VS Code.
Để cấu hình Prettier, bạn có thể lựa chọn điều hướng File/ Preferences/ Settings/ Extensions và lựa chọn Prettier. Bạn cũng có thể cấu hình cách mà bạn muốn Prettier hoạt động thông qua thiết lập với key prettier trong file package.json hoặc tạo file .prettierrc.
Bạn có thể tham khảo thêm một số các thuộc tính cấu hình trong Prettier ở link dưới đây:
Tạo ra những dòng code sạch và đẹp là một phần công việc của lập trình viên và sử dụng Prettier sẽ giúp bạn đơn giản hóa công việc trên. Tận dụng những thiết lập tùy chỉnh của công cụ Prettier còn giúp bạn cá nhân hóa và tạo ra phong cách viết code riêng của bản thân. Cảm ơn các bạn đã đọc bài, hẹn gặp lại trong các bài viết tiếp theo của mình.
Trong kỷ nguyên dữ liệu lớn, hệ quản trị cơ sở dữ liệu đóng vai trò cực kỳ quan trọng trong việc lưu trữ, quản lý và truy xuất thông tin. Một trong những loại DBMS phổ biến nhất là Hệ quản trị cơ sở dữ liệu quan hệ. Trong bài viết này, hãy cùng TopDev tìm hiểu khái niệm RDBMS là gì và chức năng cũng như đi sâu vào thành phần của một hệ quản trị cơ sở dữ liệu quan hệ.
RDBMS là gì?
RDBMS là viết tắt của từ Relational Database Management System – Hệ quản trị cơ sở dữ liệu quan hệ, là một hệ quản trị cơ sở dữ liệu (DBMS) dựa trên mô hình dữ liệu quan hệ, RDBMS được thiết kế để lưu trữ và quản lý dữ liệu có cấu trúc bằng dạng bảng với các cột ứng với các thuộc tính và các hàng đại diện cho các bản ghi. Dữ liệu trong RDBMS được tổ chức một cách logic và có hệ thống, giúp việc truy xuất, cập nhật và phân tích thông tin trở nên dễ dàng và hiệu quả.
Hầu hết các hệ quản trị cơ sở dữ liệu quan hệ thương mại sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL) để thao tác với cơ sở dữ liệu.
Vào những năm 1970, mô hình cơ sở dữ liệu quan hệ (RDBMS) được phát triển, đánh dấu một bước ngoặt quan trọng trong lịch sử cơ sở dữ liệu. Kể từ đó, nhiều hệ quản trị cơ sở dữ liệu quan hệ đã được ra đời như MySQL, MS SQL Server, Oracle,…
Phân biệt RDBMS và DBMS
RDBMS là một loại DBMS, trong đó dữ liệu được tổ chức và lưu trữ theo một mô hình quan hệ. Mô hình quan hệ sử dụng các bảng để lưu trữ dữ liệu và các mối liên kết giữa các bảng để biểu diễn các mối quan hệ thực tế.
Các DBMS như MySQL, Oracle, PostgreSQL, SQL Server đều là RDBMS.
Sự khác biệt chính:
Đặc điểm
DBMS
RDBMS
Mô hình dữ liệu
Có thể là quan hệ, mạng, phân cấp, đối tượng…
Chỉ sử dụng mô hình quan hệ
Cấu trúc dữ liệu
Linh hoạt, tùy thuộc vào loại DBMS
Cấu trúc bảng, hàng, cột
Ngôn ngữ truy vấn
Có thể sử dụng nhiều loại ngôn ngữ
Chủ yếu sử dụng SQL
Tính năng
Tùy thuộc vào loại DBMS
Các tính năng cơ bản của DBMS cộng thêm các tính năng đặc trưng của mô hình quan hệ (khóa chính, khóa ngoại, chuẩn hóa…)
Lưu ý: Mọi RDBMS đều là DBMS nhưng không phải mọi DBMS đều là RDBMS.
Tính năng chính của Hệ quản trị cơ sở dữ liệu quan hệ
RDBMS cung cấp một loạt các tính năng phù hợp để lưu trữ, quản lý và thao tác dữ liệu có cấu trúc. Dưới đây là một số tính năng chính của RDBMS:
Tính nguyên tử (Atomicity)
Tính nguyên tử là một tính chất quan trọng trong RDBMS, đảm bảo rằng mỗi giao dịch cơ sở dữ liệu được xử lý một cách toàn vẹn. Nếu một giao dịch không thể hoàn thành (ví dụ, do lỗi hệ thống), mọi thay đổi mà giao dịch đó tạo ra sẽ không được áp dụng. Điều này giúp duy trì độ chính xác và đáng tin cậy của dữ liệu, đảm bảo rằng dữ liệu không bị rối loạn do các giao dịch không hoàn thành.
Tính nhất quán (Consistency)
Tính nhất quán đảm bảo rằng khi một giao dịch được thực hiện, nó sẽ không làm vi phạm các ràng buộc đã xác định trong cơ sở dữ liệu, như các quy tắc về khóa chính, khóa ngoại, và các ràng buộc khác. Điều này có nghĩa rằng sau khi giao dịch hoàn tất, cơ sở dữ liệu sẽ vẫn trong trạng thái hợp lệ và nhất quán.
Tính bền vững (Durability)
Tính bền vững có nghĩa là một khi giao dịch đã được xác nhận và hoàn thành, kết quả của nó sẽ được lưu trữ vĩnh viễn trong cơ sở dữ liệu, ngay cả khi xảy ra các sự cố như mất điện, lỗi hệ thống hoặc hỏng hóc phần cứng. RDBMS thường sử dụng các phương thức sao lưu và nhật ký để đảm bảo rằng dữ liệu có thể được phục hồi dễ dàng trong trường hợp không mong muốn xảy ra.
Cấu trúc dữ liệu
Trong RDBMS, dữ liệu được tổ chức và lưu trữ ở dạng bảng, gồm các hàng (records) và cột (fields). Điều này làm cho việc quản lý, truy vấn và thao tác dữ liệu trở nên dễ dàng hơn. Mỗi bảng thường đại diện cho một thực thể cụ thể (chẳng hạn như nhân viên hoặc sản phẩm), và các cột đại diện cho các thuộc tính của thực thể đó.
Chỉ mục (Indexes)
RDBMS tạo ra các chỉ mục để cải thiện hiệu suất truy xuất dữ liệu. Chỉ mục hoạt động giống như bảng tra cứu, cho phép hệ thống xác định nhanh chóng vị trí dữ liệu trong bảng mà không cần phải duyệt từng dòng. Việc sử dụng chỉ mục giúp tăng tốc độ tìm kiếm, truy vấn và lọc dữ liệu, đặc biệt là đối với các tập dữ liệu lớn.
Bảng ảo (Views)
Trong RDBMS, tính năng tạo bảng ảo (hay còn gọi là views) cho phép người dùng tạo ra các truy vấn lưu trữ mà không cần thay đổi cấu trúc dữ liệu gốc. Bảng ảo thực chất là một truy vấn được lưu trữ, có thể truy xuất dữ liệu từ một hoặc nhiều bảng khác nhau. Tính năng này rất hữu ích khi cần bảo vệ dữ liệu quan trọng, vì nó cho phép người dùng truy cập vào một phần dữ liệu mà không cần biết đến toàn bộ dữ liệu gốc. Bảng ảo cũng giúp đơn giản hóa việc truy vấn cho người dùng bằng cách cung cấp một giao diện dễ hiểu hơn.
Các khái niệm cơ bản trong RDBMS
Bảng, hàng, cột
Bảng (Relation): Là một cấu trúc để lưu trữ dữ liệu, tương tự như một bảng trong Excel. Mỗi bảng đại diện cho một thực thể trong thế giới thực (ví dụ: khách hàng, sản phẩm).
Bản ghi (Record):Mỗi hàng trong bảng đại diện cho một bản ghi dữ liệu cụ thể (ví dụ: một khách hàng cụ thể).
Thuộc tính (Attribute):Mỗi cột trong bảng đại diện cho một thuộc tính của bản ghi (ví dụ: tên, địa chỉ, số điện thoại).
Khóa chính, khóa ngoại
Khóa chính (Primary Key): Là một hoặc nhiều cột duy nhất xác định một hàng trong bảng. Khóa chính đảm bảo rằng mỗi hàng là duy nhất.
Khóa ngoại (Foreign Key): Là một cột trong một bảng tham chiếu đến khóa chính của một bảng khác. Khóa ngoại được sử dụng để thiết lập mối quan hệ giữa các bảng.
Ràng buộc SQL
Ràng buộc SQL (SQL Constraints) là các quy tắc được định nghĩa để kiểm soát dữ liệu được lưu trữ trong các bảng của cơ sở dữ liệu quan hệ. Các ràng buộc này giúp đảm bảo tính toàn vẹn và chính xác của dữ liệu. Sau đây là một số ràng buộc SQL phổ biến:
NOT NULL: Đảm bảo rằng một cột không được phép có giá trị null.
UNIQUE: Đảm bảo rằng tất cả các giá trị trong một cột phải là duy nhất.
PRIMARY KEY: Định nghĩa một hoặc nhiều cột làm khóa chính của bảng, mỗi bản ghi phải có một giá trị duy nhất.
FOREIGN KEY: Liên kết một cột (hoặc nhóm cột) trong một bảng với một cột (hoặc nhóm cột) trong một bảng khác.
CHECK: Đảm bảo rằng các giá trị trong một cột phải thỏa mãn một điều kiện xác định.
DEFAULT: Cung cấp một giá trị mặc định cho một cột khi không có giá trị nào được cung cấp.
Mối quan hệ
Các bảng trong RDBMS được liên kết với nhau thông qua các mối quan hệ. Các loại mối quan hệ phổ biến bao gồm:
Một-một: Một hàng trong bảng này liên kết với tối đa một hàng trong bảng kia.
Một-nhiều: Một hàng trong bảng này có thể liên kết với nhiều hàng trong bảng kia.
Nhiều-nhiều: Một hàng trong bảng này có thể liên kết với nhiều hàng trong bảng kia và ngược lại.
RDBMS hoạt động như thế nào?
Như đã đề cập, RDBMS hoạt động dựa trên mô hình dữ liệu quan hệ và lưu trữ dữ liệu dưới dạng bảng. Mỗi hệ thống sẽ có số lượng bảng khác nhau, mỗi bảng có một khóa chính duy nhất. Khóa chính sau đó được sử dụng để xác định từng bảng. Trong bảng có hàng và cột, mỗi hàng đại diện cho một thực thể riêng biệt, trong khi mỗi cột chứa thông tin về một thuộc tính cụ thể của thực thể đó.
Để đảm bảo tính toàn vẹn và nhất quán của dữ liệu, RDBMS sử dụng các khóa chính (primary key) và khóa ngoại (foreign key) đểquản lý và bảo đảm tính toàn vẹn, nhất quán của dữ liệu trong cơ sở dữ liệu. Khóa chính đảm bảo mỗi bản ghi là duy nhất, trong khi khóa ngoại tạo ra các mối quan hệ giữa các bảng, giúp dữ liệu luôn được liên kết một cách chính xác.
Note: Khóa chính có thể là tổ hợp của 2 hoặc nhiều field được gọi là Khóa tổ hợp
Người dùng sử dụng ngôn ngữ truy vấn SQL (Structured Query Language) để tương tác với dữ liệu trong RDBMS. Các truy vấn SQL cho phép người dùng lấy, thêm, sửa, xóa dữ liệu trong các bảng.
Trong những năm gần đây, NoSQL (Not Only SQL) đã nổi lên như một lựa chọn thay thế cho RDBMS, đặc biệt là khi xử lý lượng dữ liệu lớn và có cấu trúc linh hoạt. Tuy nhiên, RDBMS vẫn giữ vai trò quan trọng trong nhiều ứng dụng.
Tính năng
RDBMS
NoSQL
Cấu trúc dữ liệu
Cấu trúc, bảng, hàng, cột
Linh hoạt, không có cấu trúc cố định
Mối quan hệ
Mối quan hệ rõ ràng giữa các bảng
Mối quan hệ đơn giản hoặc không có
Truy vấn
SQL, mạnh mẽ
Các ngôn ngữ truy vấn khác nhau, đơn giản hơn
Khả năng mở rộng
Khó mở rộng
Dễ mở rộng
Ứng dụng điển hình
Hệ thống quản lý khách hàng, ngân hàng, ERP
Dữ liệu lớn, ứng dụng web thời gian thực
Khi nào nên chọn RDBMS?
Ứng dụng yêu cầu tính nhất quán cao và dữ liệu có cấu trúc rõ ràng.
Cần thực hiện các truy vấn phức tạp và các giao dịch phức tạp.
Yêu cầu bảo mật cao.
Khi nào nên chọn NoSQL?
Dữ liệu có cấu trúc không cố định hoặc thay đổi thường xuyên.
RDBMS là một công cụ mạnh mẽ để quản lý dữ liệu có cấu trúc. Việc lựa chọn giữa RDBMS và NoSQL phụ thuộc vào yêu cầu cụ thể của từng ứng dụng. Hiểu rõ các đặc điểm và ứng dụng của RDBMS sẽ giúp bạn đưa ra quyết định đúng đắn khi thiết kế và triển khai cơ sở dữ liệu.
Bài viết được sự cho phép của tác giả Nguyễn Hoàng Phú Thịnh
Hế lô a ji nô mô tô anh em. Mình đã trở lại với 1 bài viết khác, nguy hiểm và chém gió hơn xưa 😎
Bài này mình sẽ viết về CRM, một thứ rất phổ biến trong tất cả các ngành nghề nói chung và ngành phần mềm nói riêng.
Thật ra hồi xưa mình cũng chả hiểu CRM là gì hết. Mà hồi đó cũng chả có ai giải thích được cho mình hiểu CRM nó là cái vẹo gì cả.
Đến khi đi làm có dịp tiếp xúc thực tế thì mới biết được bản chất nó là gì. Bài này mình sẽ share góc nhìn cá nhân của mình về CRM, chủ yếu là cảm nhận của mình. Để qua đó anh em có thể hiểu hơn về nó, hiểu CRM thật sự nó là cái gì 😀
Okê, lét gô!!!
1. CRM là Customer Relationship Management
Giờ lên google search 1 phát là ra ngay: CRM tức là quản trị quan hệ khách hàng. Cái này thì ai cũng search được, nên mình không nói lại nữa. Để bắt đầu thì anh em đọc một đống ví dụ ngay sau đây.
Một shop bán hàng online, mỗi tháng họ có khoảng 150 đơn hàng. Đâu đó trong 150 đơn hàng này là có những khách hàng đã quay lại mua hàng của họ nhiều lần. Đó là dấu hiệu của CRM.
Cũng một shop bán giày đá banh khác. Khách đến mua cần được tư vấn về các loại giày đá banh.
Tư vấn xong, dù khách có mua hay không, shop này vẫn xin số điện thoại của khách ghé quán. Lần sau có thông tin hàng mới về hay khuyến mãi gì thì shop sẽ nhắn tin báo. Đó là CRM.
Hoặc lâu lâu Viettel nhắn tin chúc mừng sinh nhật anh em. Đó cũng là CRM.
Shopee gửi mail báo sắp tới là sinh nhật Shopee, mời anh em ghé nhà Shopee để… mua đồ giảm giá. Đó cũng là CRM.
Tự nhiên lâu lâu cái Mocha nó nhắn tin, kêu cài app Mocha dùng đi, tặng cho 50 phút nội mạng gọi miễn phí. Đó là CRM.
Hay chả hiểu sao tự nhiên mấy trung tâm Wall Street, ILA nó cứ hay gọi mình lên test tiếng Anh, tiếng Mã Lai gì đấy. Đó cũng là CRM.
Hoặc bữa mình có mua máy khoan trên Tiki, cái tợ nhiên lâu lâu lên lại Tiki thấy Tiki hỏi: “Bạn có hài lòng với sản phẩm máy khoan ABCXYZ đã mua? Bạn có thể để lại cảm nhận của mình được hôn?”
Hoặc hôm bữa mình thấy có shop bán quà lưu niệm tổ chức minigame “xếp-hình” trên facebook. Ham quá nhảy vào chơi, thế là được quà. Đó là CRM.
Mình có cài cái app MOMO vào điện thoại. Thấy suốt ngày MOMO thông báo hot deals, hết cái này khuyến mãi rồi tới cái kia giảm giá. Ngày nào cũng nhận được tin. Một ngày mà MOMO không nhắn tin cho mình thì chắc lạ lắm. Đó là CRM.
Hay đơn giản hơn. CRM là tất cả các hoạt động mình làm với khách hàng, để họ nhớ tới mình nhiều hơn.
Giống như anh em đi cua gái vậy. Phải thể hiện tốt thì chị em mới nhớ tới mình. Bán hàng cũng vậy. Đôi lúc bao nhiêu khách hàng mới không quan trọng bằng khách hàng cũ quay lại mua hàng bao nhiêu lần.
Một khi khách hàng đã nhận diện được mình, đã tin tưởng mình thì việc họ đến với mình để mua hàng thì nằm trong bàn tay. CRM là một khái niệm về các chiêu thức để làm được điều này.
Tuy nhiên, các anh em hiểu tới đây thôi thì chưa đủ. CRM nó còn 1 nửa vòng tròn trước đó nữa!
Cũng là ví dụ từ một shop online khác.
Khi anh A ảnh mua sách từ FAHASA thì anh A trở thành khách hàng của FAHASA. Còn khi anh A chưa mua sách của FAHASA thì anh A ảnh là người dưng của FAHASA.
Cái đoạn sau khi anh A ảnh mua sách và trở thành khách hàng rồi, thì chuyện chăm sóc ảnh là điều đương nhiên.
NHƯNG,
Khi anh A ảnh đang là người dưng, không quen biết gì hết, mà đùng cái mình biến ảnh thành khách hàng của mình thì việc này cũng được gọi là CRM.
Nó là nửa vòng tròn thường bị hiểu thiếu về CRM.
CRM không chỉ quản lý các hoạt động giữa người bán và người mua (sau khi người mua đã mua hàng). Mà nó còn quản lý luôn các hoạt động giữa người bán và “người dưng”. Để sau một thời gian, “người dưng” đó trở thành khách hàng của mình.
Vậy chốt lại CRM là tổng hợp các cách, các hình thức, các kỹ xảo, các tuyệt chiêu, các best practice để: Biến một người dưng mua hàng của mình, trở thành khách hàng của mình, khiến họ nhớ tới mình và quay lại, tiếp tục mua hàng của mình lần thứ 2, thứ 3 và lần thứ “n”.
Khái niệm nó là vậy, còn đưa vào áp dụng thì CRM nó tồn tại chủ yếu ở 3 hoạt động rõ rệt là: Marketing – Sales – Customer Service.
Mình có một ví dụ cơ bản thường gặp nhất cho anh em. Ví dụ một shop bán hoa online.
Shop bán hoa này vừa rồi mới mua 1500 data khách hàng từ công ty bảo hiểm, từ Mobiphone, hoặc từ một tổ chức, trường học nào đó.
Sắp tới mùa 8/3, họ sẽ chia nhau ra alo cho anh em, giới thiệu sản phẩm rồi tư vấn quà tặng vợ, tặng mẹ, tặng bà ngoại. Hoa này thì ý nghĩa gì, hoa kia ý nghĩa gì, hoa này mua trước bao ngày, hoa kia thì phải bỏ hộp giấy, vâng vâng và mây mây.
Từ 1500 người dưng, sau khi gọi xong họ xác định được có khoảng 850 người có vẻ hứng thú về việc tặng hoa mùa 8/3 (có vẻ thôi nhé anh em). Đây là hoạt động Marketing.
Trong 850 người này, đội Sales của shop sẽ bắn 850 cái email về các câu chuyện ý nghĩa về việc tặng hoa cho người phụ nữ. Rồi là đang có hot deal giảm giá, mua trước ngày 8/3 khoảng 365 ngày thì được giảm giá 69%, ví dụ vậy. Rồi là chương trình đóng gói sẵn, tặng quà tận nơi cho đối tượng, rồi giúp khách hàng viết những câu chúc hoành tráng nhất chẳng hạn. Đây là hoạt động Sales.
Các hoạt động này chứ dàn trải theo từng tuần, từng ngày. Trong 850 người có vẻ hứng thú, shop xác định được có khoảng 600 người đăng ký nhận tư vấn từ shop.
Rồi từ 600 người, xuống còn 400 người đặt hàng online, 50 người yêu cầu gửi báo giá. Trước 8/3 khoảng 2 ngày, shop tổng kết họ nhận được 378 đơn hàng từ 1500 data ban đầu. Đem về doanh thu hơn 89 chai bia sau hơn 1 tháng kick-off chiến dịch.
Sau khi thu về 89 triệu từ chiến dịch, shop bắt đầu tăng cường các hoạt động bên lề cho 378 người khách đã mua hàng này.
Nào là gửi bản tin cách chăm sóc cây, hoa tại bàn làm việc, tại nhà. Rồi chọn hoa tặng người yêu sao cho phù hợp. Rồi thì tặng hoa không nhất thiết chờ 8/3 hay valentine. Rồi ý nghĩa các loài hoa. Lâu lâu tổ chức game tri ân khách hàng, tặng 10 tấm vé may mắn lên Đà Lạt nghỉ dưỡng tại Resort vườn hoa nhiệt đới trong 3 ngày 2 đêm.
Đối với những khách đã mua hàng, hoa mua về có vấn đề gì thì shop hỗ trợ chăm sóc, giải đáp các thắc mắc, khiếu nại nhiệt tình. Shop còn có chính sách đền bù nếu hoa bị dập trong quá trình vận chuyển nữa.
Nhờ đó, cứ khách này giới thiệu khách khác. 378 người khách cũ đã giới thiệu được cho hơn 150 người khác, mua hoa, và trở thành khách hàng thân thiết của cửa hàng. Đó là hoạt động Customer Service.
Tức là shop này đã dùng CRM, để biến 1500 người dưng thành 378 người khách hàng. Rồi từ 378 người khách này, họ giới thiệu cho hơn 150 người khách khác. Đó là sức mạnh của CRM.
Rõ ràng là nếu áp dụng thành công, phù hợp với đối tượng khách hàng, phù hợp với sản phẩm và xu hướng thị trường thì CRM là một thứ không thể thiếu đối với các doanh nghiệp.
Để hình dung rõ nhất về hoạt động CRM, anh em cứ tưởng tượng nó như 1 cái phễu (sales funnel) như hình dưới đây.
Về cơ bản, Sales Funnel sẽ như thế này (Hình chôm từ pushalert.co)
Như hình trên, stage đầu tiên (discovery) sẽ lấy thông tin “người dưng” từ các Social Media, Website,… Rồi tương tác với họ, rồi bán hàng, rồi theo dõi và chăm sóc khách hàng.
Các stage không nhất thiết phải như vậy.
Nó hoàn toàn có thể linh động thay đổi. Thay đổi tên cho tới cách thức vận hành, tùy vào mục đích sử dụng của mình 🙂
Trong cuộc sống thì ai chả cần duy trì mối quan hệ. Tạo dựng mối quan hệ đã khó, duy trì nó còn khó hơn. Bạn bè thì nhiều mà bạn thân được tầm mấy đứa.
Nói về hệ thống CRM, thì… cũng không có nhiều cái để nói lắm :)) Nó cũng apply i chang concept như mình chém gió bên trên. Tuy nhiên có một ý mình muốn chia sẻ thế này. Hệ thống CRM không phải là một cái gì đó ghê gớm lắm.
Đơn giản hệ thống CRM nó chỉ là một cái tool.
Mà tool thì có nhiều loại, nhiều cấp độ, nhiều tính năng, tùy level sử dụng. Nhưng quan trọng nhất vẫn là: sử dụng như thế nào mà thôi.
Tất cả các doanh nghiệp từ nhỏ tới lớn. Từ một cái shop online nhỏ xinh cho tới một công ty mấy nghìn nhân viên bự chà bá lửa thì họ vẫn-đều-đang-áp-dụng hệ thống CRM đấy thôi. Đó chính là Excel!
Họ vẫn đang lưu thông tin khách hàng của họ vào Excel hết cả thôi. Làm việc và cập nhật ngay trên này.
Kể cả những form mẫu, biểu mẫu trong quá trình bán hàng cũng làm bằng Excel hết. Tức là cả thế giới đều vẫn đang dùng hệ thống CRM, nhưng là mức sơ khởi, ở mức chỉ keep track được thông tin khách hàng thôi. Đó là Excel.
Sau này khi lượng khách hàng đông, Excel không đáp ứng đủ khả năng. Thì họ mới tìm đến các công cụ khác, xịn hơn, nguy hiểm hơn để dùng.
Những công cụ này không những giúp lưu trữ thông tin, mà còn tự động hóa được. Tự động gửi mail, tự động nhận diện, phân loại khách hàng, tự động nhắc nhở Salesman.
Các hệ thống tiên tiến ngày nay sẽ keep track hết toàn bộ các hoạt động của Salesman với khách hàng. Từ email, phone call, fax, appointment, cho tới các buổi cà phê ngoài giờ, các hoạt động khác với khách hàng như chạy bộ, cầu lông, tennis, đi hội thảo, abc, xyz.
Đều được các hệ thống CRM này lưu trữ lại hết, tự động hoặc thủ công, thì tùy vào tính năng của hệ thống.
Các hệ thống xịn xịn hiện nay đều có thể chạy Marketing Automation. Ví dụ như CleverReach.
Đó là bối cảnh IT, và dưới góc nhìn của BA. Nhưng nếu nhìn qua lăng kính đời sống hằng ngày của anh em mình thì sao?
CRM là Customer Relationship Management. Cái vế chính của khái niệm này là cụm: Relationship Management.
Như mình nói ở trên thì mối quan hệ là một thứ rất quan trọng. Không chỉ có thời này mới quan trọng, mà trước giờ nó cũng đã rất quan trọng rồi. Buôn có bạn, bán có phường mà.
Thiệt ra thì anh em mình vẫn luôn làm hoạt động CRM mỗi ngày đó thôi.
Lâu lâu lên facebook kiếm mấy đứa lâu ngày không nói chuyện, ping nó hỏi thăm vài câu. Hoặc lâu lâu ngồi lọc lại danh sách friend trên facebook. Hoặc lâu lâu rủ mấy thằng bạn ra cà phê ngồi chém gió (cái này chắc thường xuyên chứ không có lâu ?). Mấy cái này chính xác là relationship management.
Liên quan tới CRM, giờ có thể anh em sẽ bắt gặp một số khái niệm mới như CEM (Customer Engagement Management) hoặc xRM (whatever Relationship Management).
Về bản chất thì cũng như nhau, nhưng mỗi khái niệm sẽ có một bối cảnh và mục đích sử dụng riêng.
Thường nói về CRM thì anh em sẽ hay nghe tới mấy ông lớn như Salesforce, Zoho, Dynamics 365 hay Oracle CRM. Nhưng hệ thống thì cũng chỉ là hệ thống. Con người vận hành hiệu quả thì hệ thống phát huy tác dụng. Và ngược lại 🙂
Bài này mình chia sẻ góc nhìn của mình về CRM, về khái niệm và các hoạt động CRM. Hi vọng anh em sẽ thấy bài này dễ hiểu và thực tế. Có gì cần trao đổi thêm thì anh em cứ còm men phía dưới nhé.
Trong bối cảnh phát triển phần mềm ngày càng đa dạng và phức tạp, việc lựa chọn một hệ quản trị cơ sở dữ liệu (DBMS) phù hợp đóng vai trò quan trọng trong việc đảm bảo hiệu năng, tính ổn định và khả năng mở rộng của ứng dụng. MySQL và SQL Server, hai trong số những DBMS phổ biến nhất hiện nay, đều sở hữu những ưu điểm riêng biệt. Bài viết này sẽ tiến hành so sánh MySQL và SQL Server, nhằm cung cấp cho người đọc cái nhìn toàn diện và khách quan, từ đó đưa ra lựa chọn tối ưu cho dự án của mình.
Nhắc lại Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS)
RDBMS là hệ quản trị cơ sở dữ liệu quan hệ mạnh mẽ, hiệu quả trong việc lưu trữ, quản lý và thao tác dữ liệu có cấu trúc. Nền tảng của RDBMS nằm ở mô hình quan hệ, được đề xuất bởi E.F. Codd vào năm 1970. Mô hình này tổ chức dữ liệu thành các bảng, bao gồm các hàng và cột. Mỗi hàng đại diện cho một bản ghi hoặc một thể hiện của một thực thể, trong khi mỗi cột đại diện cho một thuộc tính hoặc tính chất của thực thể đó.
Một trong những điểm mạnh chính của RDBMS là khả năng thiết lập mối quan hệ giữa các bảng bằng cách sử dụng khóa chính và khóa ngoại. Tính năng này cho phép thao tác và truy xuất dữ liệu phức tạp bằng cách sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL), một ngôn ngữ chuẩn được thiết kế đặc biệt để quản lý các cơ sở dữ liệu quan hệ.
RDBMS có tính toàn vẹn dữ liệu, tính nhất quán và hiệu quả trong việc quản lý khối lượng dữ liệu có cấu trúc lớn.
Giới thiệu SQL, MySQL và SQL Server
SQL
SQL là viết tắt của Structured Query Language (Ngôn ngữ truy vấn có cấu trúc). Theo hướng dẫn của ANSI (Viện Tiêu chuẩn Quốc gia Hoa Kỳ), SQL là ngôn ngữ chuẩn để duy trì và quản lý cơ sở dữ liệu. Do đó tuy có thay đổi nhỏ về cú pháp nhưng hầu hết các truy vấn của cơ sở dữ liệu để truy xuất, thêm hoặc thao tác dữ liệu đều dựa trên cú pháp SQL chuẩn.
Bạn có thể sử dụng SQL để quản lý nhiều hệ quản trị cơ sở dữ liệu quan hệ, chẳng hạn như MySQL, SQL Server, Oracle và MS Access.
MySQL là hệ quản trị cơ sở dữ liệu quan hệ được phát triển và phát hành vào năm 1995 hiện thuộc sở hữu của Oracle Corporation.
MySQL là một trong những RDBMS mã nguồn mở đầu tiên được phát triển và ra mắt. Được thiết kế và viết bằng ngôn ngữ lập trình C và C++, MySQL tương thích với tất cả các hệ điều hành chính. Nó là một thành phần cốt lõi của một chồng phần mềm ứng dụng web mã nguồn mở phổ biến rộng rãi được gọi là LAMP, viết tắt của Linux, Apache, MySQL, PHP/Perl/Python.
SQL Server
SQL Server là một hệ quản trị cơ sở dữ liệu quan hệ mạnh mẽ được phát triển bởi Microsoft. Nó cung cấp một nền tảng để lưu trữ, quản lý và truy xuất dữ liệu cho các ứng dụng và dịch vụ khác nhau. SQL Server hỗ trợ SQL, một ngôn ngữ lập trình được sử dụng để giao tiếp với cơ sở dữ liệu. Nó cho phép người dùng tạo, sửa đổi và xóa cơ sở dữ liệu, bảng và view, cũng như thực hiện các thao tác khác nhau như truy vấn, sắp xếp, lọc và nối dữ liệu. SQL Server cũng cung cấp các tính năng nâng cao như khả năng sẵn sàng cao, bảo mật và khả năng mở rộng, làm cho nó trở thành một lựa chọn phổ biến cho các doanh nghiệp mọi quy mô.
Sau khi điểm qua các khái niệm, ta có thể hiểu tóm gọn, SQL là một ngôn ngữ truy vấn, MySQL và SQL Server là hai hệ quản trị cơ sở dữ liệu quan hệ sử dụng SQL để quản lý và các thao tác khác với cơ sở dữ liệu.
Chắc hẳn nhiều bạn bắt đầu học về cơ sở dữ liệu sẽ nhầm tưởng SQL và MySQL là một. Nhưng nhu đã giải thích khái niệm ở trên. SQL và MySQL hoàn toàn khác nhau:
Đặc điểm
SQL
MySQL
Định nghĩa
Ngôn ngữ truy vấn chuẩn để tương tác với cơ sở dữ liệu quan hệ.
Hệ quản trị cơ sở dữ liệu quan hệ sử dụng ngôn ngữ SQL.
Chức năng chính
Truy vấn, thao tác dữ liệu trong cơ sở dữ liệu.
Lưu trữ, quản lý và truy xuất dữ liệu.
Tính linh hoạt
Ít linh hoạt, tuân theo chuẩn.
Linh hoạt cao, nhiều tùy chọn cấu hình.
Cộng đồng
Rất rộng lớn và đa dạng.
Lớn mạnh, tập trung vào mã nguồn mở.
Cập nhật
Ít thay đổi, ổn định.
Thường xuyên cập nhật, nhiều phiên bản.
Hệ điều hành
Không phụ thuộc hệ điều hành.
Hỗ trợ nhiều hệ điều hành.
Công cụ
Không có công cụ quản lý tích hợp.
Có công cụ quản lý MySQL Workbench.
Engine lưu trữ
Chỉ hỗ trợ một loại.
Hỗ trợ nhiều loại engine lưu trữ.
Bảo mật
Tương đối cao, tuân theo chuẩn.
Có thể tùy chỉnh, nhưng cần cấu hình cẩn thận.
Mở rộng
Khó mở rộng.
Dễ dàng mở rộng nhờ cộng đồng và các module.
So sánh chi tiết giữa MySQL và SQL Server
Đặc điểm
MySQL
SQL Server
Giải thích chi tiết
Nhà cung cấp
MySQL AB (thuộc Oracle)
Microsoft
MySQL ban đầu được phát triển bởi một công ty Thụy Điển, sau đó được Oracle mua lại. SQL Server hoàn toàn thuộc sở hữu của Microsoft.
Giấy phép
Mã nguồn mở (GPL), bản quyền thương mại
Thương mại
MySQL có phiên bản cộng đồng miễn phí (GPL) và phiên bản thương mại cho doanh nghiệp. SQL Server chỉ có bản quyền thương mại với nhiều phiên bản khác nhau (Express, Standard, Enterprise).
Hệ điều hành
Windows, Linux, macOS
Windows, Linux (từ SQL Server 2017)
MySQL có tính tương thích cao với nhiều hệ điều hành. SQL Server trước đây chủ yếu chạy trên Windows nhưng đã mở rộng sang Linux từ phiên bản 2017.
Công cụ quản lý
MySQL Workbench
SQL Server Management Studio (SSMS)
MySQL Workbench là một công cụ trực quan để thiết kế, quản lý cơ sở dữ liệu MySQL. SSMS là công cụ tương tự cho SQL Server và còn tích hợp với các dịch vụ đám mây Azure.
Ngôn ngữ lập trình
SQL procedural language
T-SQL, tích hợp .NET
Cả hai đều hỗ trợ SQL tiêu chuẩn nhưng có các extension riêng. T-SQL của SQL Server mạnh mẽ hơn với tích hợp .NET, cho phép tạo các thủ tục lưu trữ phức tạp.
Sao lưu và phục hồi
Hot backup (bằng công cụ bên thứ ba), MySQL Enterprise Backup
Nhiều công cụ tích hợp (full backup, differential backup, transaction log backup)
MySQL cần công cụ bên thứ ba cho sao lưu nóng, trong khi SQL Server cung cấp nhiều tùy chọn sao lưu trực tiếp.
Khả năng sẵn sàng cao
Replication (master-slave, master-master), MySQL Cluster
Cả hai đều có các cơ chế đảm bảo dữ liệu luôn sẵn sàng, nhưng với các đặc điểm khác nhau. AlwaysOn của SQL Server được đánh giá cao về tính năng.
Engine lưu trữ
InnoDB (mặc định), MyISAM, Memory
Một engine duy nhất nhưng có nhiều tính năng (partitioning, compression, in-memory)
MySQL cho phép chọn engine lưu trữ phù hợp với từng loại dữ liệu, trong khi SQL Server sử dụng một engine duy nhất nhưng cung cấp nhiều tùy chọn cấu hình.
Hỗ trợ JSON
Từ phiên bản 5.7
Từ SQL Server 2016
Cả hai đều hỗ trợ lưu trữ và truy vấn dữ liệu JSON, nhưng với cú pháp và tính năng khác nhau.
Cộng đồng
Lớn mạnh, mã nguồn mở
Lớn, tập trung vào doanh nghiệp
Cộng đồng MySQL rất lớn và hoạt động, trong khi cộng đồng SQL Server cũng lớn nhưng tập trung vào các doanh nghiệp sử dụng Microsoft.
Chi phí
Miễn phí (bản cộng đồng), bản thương mại có phí
Chỉ có bản thương mại, nhiều mức giá khác nhau
MySQL có lựa chọn miễn phí, trong khi SQL Server chỉ có bản trả phí.
Khi nào nên lựa chọn MySQL hay SQL Server?
Việc lựa chọn giữa MySQL và SQL Server phụ thuộc chặt chẽ vào quy mô, đặc thù của dự án và các mục tiêu kinh doanh cụ thể. MySQL, với tính linh hoạt cao, cộng đồng rộng lớn và chi phí hợp lý, có bản sử dụng miễn phí thường được ưu tiên cho các dự án vừa và nhỏ, các ứng dụng web đòi hỏi khả năng tùy biến cao.
Trong khi đó, SQL Server, với sự hỗ trợ mạnh mẽ của Microsoft, các tính năng nâng cao và khả năng tích hợp sâu rộng, tỏ ra phù hợp với các doanh nghiệp lớn, các ứng dụng đòi hỏi tính bảo mật và ổn định cao. Khi đưa ra quyết định, các yếu tố như hiệu năng, khả năng mở rộng, chi phí, kinh nghiệm của đội ngũ và sự phù hợp với hệ sinh thái công nghệ hiện có cần được cân nhắc kỹ lưỡng.
Hơn nữa cả hai cơ sở dữ liệu đều được hỗ trợ tốt bởi các nhà cung cấp đám mây lớn như AWS, Azure và Google Cloud, vì vậy đây là hai RDBMS được sử dụng rất phổ biến hiện nay.
Bài viết trên của TopDev đã phân biệt sự khác nhau giữa SQL, MS SQL Server và MySQL, cùng với các bảng so sánh thật chi tiết, hi vọng nó đã giúp bạn hiểu về ba khái niệm này cũng như có sự lựa chọn phù hợp cho dự án của mình.
Khi bắt đầu một công việc mới, bạn sẽ có chút phấn khích với những cơ hội được phát triển, mối quan hệ mới. Đồng thời chắc hẳn cũng có chút lo lắng về việc làm sao để hoà nhập hay liệu mình có làm tốt công việc không? Dưới đây là một vài ‘bí kíp’ để bạn chuẩn bị bắt đầu công việc mới một cách tự tin nhất.
1/ Tìm hiểu về đồng nghiệp làm việc cùng
Dù làm công việc gì, có đồng nghiệp dễ thương và hỗ trợ sẽ giúp ích cho mình rất nhiều trong công việc. Một ‘bí kíp’ đầu tiên mình thường khuyên các bạn mới đi làm đó là hãy dành thời gian làm quen với đồng nghiệp trong một vài tuần đầu tiên.
Cách làm là có thể mời đồng nghiệp ăn trưa, cà phê. Không cần quá lê thê dài dòng, gặp nhau khoảng 30-45 phút là đủ để tìm hiểu về nhau. Khi nói chuyện với đồng nghiệp mới thì bên cạnh việc hỏi han cũng hãy chia sẻ về bản thân một chút, tránh để người khác cảm thấy khó chịu như đang bị hỏi cung.
2/ Hỏi sếp về định hướng và mục tiêu
Khi đi làm bạn cần hiểu rằng mỗi công ty, mỗi nhân sự có những cách quản lý và con người làm việc khác nhau. Có công ty quy trình rõ ràng nghiêm ngặt, sếp khó tính, có công ty chẳng có quy trình gì cả, sếp dễ tính. Một trong những vấn đề có thể gặp ở những công ty ít quy trình đó là bạn không biết mình cần làm gì hoặc mục tiêu công việc cụ thể là gì trong thời gian đầu đi làm.
Giải pháp là hỏi sếp và hỏi đồng nghiệp xung quanh. Sếp là người chịu trách nhiệm cho kết quả làm việc của mình, vì vậy đừng ngại hỏi sếp về kì vọng của sếp. Nếu sếp có kì vọng chưa rõ ràng, hãy hỗ trợ sếp bằng việc đề xuất một vài kì vọng từ phía bản thân.
Một ví dụ về đặt mục tiêu khi mới đi làm là “Kế hoạch 30-60-90 ngày” – trong 3 mốc thời gian trên bạn muốn đạt được gì? Hãy suy nghĩ và trình bày kế hoạch này với sếp, sau đó cứ đến từng mốc thì gặp sếp để review. Nhiều sếp sẽ rất thích nhân viên có sự chủ động như vậy.
Ngoài việc gặp sếp thì cũng cần sắp xếp thời gian gặp đồng nghiệp. Các anh chị đã làm ở công ty một thời gian sẽ biết người từng làm ở vị trí của bạn thường ngày công việc làm gì, tiếp xúc với phòng ban nào.
3/ Hãy nhìn xa, rộng để hiểu hơn về doanh nghiệp
Một trong những ‘bí kíp’ để tạo động lực cho bạn làm việc tốt hơn đó là hãy tìm hiểu sâu về doanh nghiệp mình đang làm việc. Nếu bạn đang làm việc cho một doanh nghiệp lớn có hàng ngàn nhân viên, sẽ rất dễ dàng để bạn tìm được những thông tin về tầm nhìn, sứ mệnh, giá trị cốt lõi. Nếu là một doanh nghiệp nhỏ, hãy nghe câu chuyện khởi đầu của người lập nên doanh nghiệp. Mình tin rằng những điều trên khi bạn hiểu kĩ sẽ giúp bạn cảm thấy ‘thuộc về’ hơn nơi mình đang làm việc, từ đó có động lực đóng góp và cống hiến nhiều hơn.
4/ Dành riêng cho thực tập sinh: đừng để thời gian của mình trống
Nếu bạn đi thực tập, bạn có thể rơi vào 2 trường hợp đó là:
không có quá nhiều việc để làm
có quá nhiều việc lặt vặt không đúng chuyên môn
Hãy nhớ rằng khi mình đi thực tập là đi học. Học ở đây không chỉ là học về chuyên môn công việc. Chúng ta còn học nhiều thứ khác như cách thích nghi với môi trường công sở, mối quan hệ đồng nghiệp, quan sát cách vận hành của một doanh nghiệp… Vì vậy hãy xem mỗi trải nghiệm khi đi làm thực tập đều là một cơ hội để học, đừng ngại làm những việc ngoài chuyên môn. Nếu thời gian của bản thân hơi rảnh khi đi làm thực tập, hãy đề xuất với các anh chị đồng nghiệp xem mình có thể làm gì để hỗ trợ các anh chị ấy không?
5/ Hãy nhẫn nại
Bạn là một nhân viên mới, vì vậy bạn và mọi người chắc chắn cần thời gian để làm quen và thích ứng với nhau. Vì vậy nếu thời gian đầu bạn có cảm thấy chưa ‘thuộc về’ nơi này, mọi người có vẻ xa cách, công việc có vẻ khó thì đó cũng là chuyện hoàn toàn bình thường. Từ từ bạn sẽ dần quen hơn với công việc, các đồng nghiệp cũng từ từ chào đón bạn hơn, bạn sẽ thấy vui hơn với mỗi ngày đi làm.
Trong bối cảnh công nghệ không ngừng tiến bộ trên toàn cầu, vai trò của lập trình viên ngày càng được coi trọng. Những tiến bộ về trí tuệ nhân tạo (AI), điện toán đám mây (Cloud) và dữ liệu lớn (Big Data) đã khiến nhu cầu nhân lực trong lĩnh vực CNTT tăng vọt tại nhiều quốc gia, bao gồm cả Việt Nam. Đây không chỉ là một nghề hấp dẫn bởi cơ hội việc làm rộng mở mà còn bởi mức thu nhập đầy hứa hẹn mà nó mang lại.
Năm 2024, ngành công nghệ thông tin tại Việt Nam tiếp tục duy trì đà phát triển mạnh mẽ, kéo theo sự tăng trưởng về mức lương của lập trình viên. Với Báo Cáo Thị Trường IT Việt Nam 2024 do TopDevphát hành, sẽ cung cấp cho chúng ta cái nhìn tổng quan về mức lương của toàn ngành, phân tích các yếu tố ảnh hưởng đến thu nhập, so sánh giữa các vị trí và khu vực khác nhau, cũng như dự đoán xu hướng trong tương lai gần.
Tổng quan mức lương IT năm 2024
Trong bối cảnh toàn cầu đối mặt với những biến động kinh tế, nhiều doanh nghiệp trên khắp thế giới, bao gồm Việt Nam, đang gặp phải các vấn đề nghiêm trọng liên quan đến dòng tiền, mở rộng kinh doanh và tăng trưởng kinh tế. Chi phí nhân sự, cùng với chi phí vận hành và marketing, đã được thắt chặt tối đa để đảm bảo hiệu quả kinh doanh và ổn định tài chính. Các doanh nghiệp hiện đang tập trung vào việc nâng cao năng suất, tối ưu hóa quy trình làm việc và tinh giản các hoạt động. Tuy nhiên, so với các ngành khác, mức lương của các vị trí liên quan đến CNTT vẫn vượt trội hơn hẳn.
Theo Báo Cáo Thị Trường IT Việt Nam 2024, hơn 70% các vị trí trong ngành CNTT nhận mức lương từ 1.000 USD trở lên, cho thấy sự chênh lệch đáng kể so với nhiều lĩnh vực khác. Điều này cho thấy giá trị mà các chuyên gia CNTT có thể mang lại, đặc biệt trong bối cảnh các doanh nghiệp đang dựa vào công nghệ để tăng cường hiệu quả và duy trì sự cạnh tranh.
Bên cạnh đó, mức lương IT còn phụ thuộc vào nhiều yếu tố như vị trí địa lý, cấp bậc hay số năm kinh nghiệm. Theo báo cáo có thể thấy, tại TP. Hồ Chí Minh, khoảng 32,10% lập trình viên nhận mức lương từ 1.600 USD trở lên, trong khi ở Hà Nội con số này là 20,55%. Các thành phố khác như Đà Nẵng và các tỉnh thành nhỏ hơn có mức lương thấp hơn so với hai thành phố lớn, tuy nhiên vẫn giữ sự ổn định ở khoảng 600 – 1.500 USD.
Mức lương lập trình viên theo trình độ
Báo cáo từ TopDev về mức lương IT năm 2024 cho thấy một sự chuyển đổi rõ rệt trong yêu cầu về trình độ đối với các vị trí trong ngành CNTT. Các vị trí Middle (3-4 năm kinh nghiệm) và Senior (5+ năm kinh nghiệm) tiếp tục gia tăng tỷ trọng, cho thấy một xu hướng rõ ràng: các doanh nghiệp đang ưu tiên tuyển dụng các lập trình viên có kinh nghiệm. Điều này là hệ quả từ sự phát triển và mở rộng của các dự án công nghệ phức tạp, đòi hỏi nhân lực có khả năng giải quyết những vấn đề kỹ thuật cao hơn và đảm bảo chất lượng sản phẩm cuối cùng.
Bên cạnh đó, yêu cầu cho các vị trí quản lý trong ngành CNTT cũng đang tăng lên, thể hiện qua sự gia tăng tỷ trọng các các vai trò Leader/Manager. Trong khi đó, sốlượng cơ hội cho Intern và Fresher lại đang giảm dần. Điều này cho thấy sự cạnh tranh khốc liệt cho các vị trí đầu vào, khi các công ty tập trung vào tuyển dụng nhân sự có kinh nghiệm ngay từ đầu để tiết kiệm chi phí đào tạo và tối ưu hóa nguồn lực.
Mức lương khởi điểm của lập trình viên Fresher dao động từ 415 đến 510 USD/tháng, với mức trung bình khoảng 480 USD. Sau khi tích lũy kinh nghiệm trong 1-2 năm, mức lương của lập trình viên Junior tăng lên đáng kể, đạt trung bình khoảng 780 USD/tháng. Mức lương dao động từ 510 USD đến 950 USD, cho thấy tốc độ tăng nhanh chóng sau những năm đầu tiên làm việc. Mức lương IT sẽ tỉ lệ thuận với vị trí làm việc, ở vai trò Director/Architect mức lương có thể lên đến 2.590 USD.
Mức lương IT không chỉ phụ thuộc vào số năm kinh nghiệm mà còn bị ảnh hưởng lớn bởi các công nghệ mà họ sử dụng. Các công nghệ mới nổi như Cloud (AWS, Azure, GCP), AI/ML (TensorFlow), và các công nghệ liên quan đến DevOps (Kubernetes) đang dẫn đầu về mức lương. Điều này hoàn toàn dễ hiểu khi nhu cầu về nhân tài trong các lĩnh vực này đang tăng cao, trong khi nguồn cung lại tương đối hạn chế.
Bên cạnh các công nghệ mới, các ngôn ngữ lập trình truyền thống như Java, Python, PHP vẫn giữ được vị thế quan trọng và mức lương ổn định. Đây là những ngôn ngữ có cộng đồng lớn, tài liệu phong phú và được ứng dụng rộng rãi trong nhiều dự án. Điều này cho thấy việc nắm bắt các kỹ năng mới và công nghệ tiên tiến là yếu tố quyết định để lập trình viên đạt được mức lương cao hơn trong ngành CNTT.
Mức lương lập trình viên theo vị trí
Dựa theo báo cáo, những vị trí có mức lương cao nhất trong ngành lập trình thường yêu cầu các kỹ năng đặc thù như Phân tích Dữ liệu (Data Analyst), Điện toán Đám mây (Cloud), DevOps, Máy học (Machine Learning) và Trí tuệ Nhân tạo (AI). Trong bối cảnh các doanh nghiệp đẩy mạnh quá trình chuyển đổi số, vai trò của các dịch vụ đám mây và DevOps ngày càng trở nên quan trọng. Các công ty đang tìm cách tối ưu hóa quy trình làm việc, duy trì và phát triển hệ thống công nghệ, dẫn đến nhu cầu tuyển dụng kỹ sư Cloud và DevOps tăng vọt.
Bên cạnh đó, các vai trò liên quan đến Data & Analytics cũng có mức thu nhập ổn định, dao động từ 1.000 – 2.000 USD/tháng. Các vị trí liên quan đến Product & Project Management cũng có mức lương tương đương, thể hiện sự quan trọng của vai trò này trong việc duy trì và phát triển các dự án công nghệ, đảm bảo hiệu suất và tiến độ công việc.
Trái ngược với các vị trí đòi hỏi kỹ năng chuyên môn cao, những công việc mang tính hỗ trợ như IT Helpdesk, SRE (Site Reliability Engineer) và Tester lại có mức lương khiêm tốn hơn, thường dưới 1.000 USD/tháng. Mặc dù đây vẫn là các vai trò cần thiết, mức thu nhập của các vị trí này phản ánh sự chênh lệch về yêu cầu kỹ năng và trách nhiệm so với các lĩnh vực chuyên sâu như Cloud hay AI.
Tổng kết
Năm 2024 đánh dấu nhiều thay đổi quan trọng trong mức lương và nhu cầu tuyển dụng lập trình viên tại Việt Nam. Các vị trí có kỹ năng đặc thù như Cloud, DevOps, AI và Machine Learning tiếp tục dẫn đầu với mức lương hấp dẫn, trong khi các vai trò hỗ trợ có mức lương thấp hơn nhưng vẫn giữ vai trò không thể thiếu trong hệ sinh thái công nghệ.
Báo Cáo Thị Trường IT Việt Nam 2024 do TopDev phát hành không chỉ cung cấp cái nhìn toàn diện về mức lương IT mà còn đi sâu vào các xu hướng công nghệ, nhu cầu tuyển dụng và thách thức trong ngành. Đây sẽ là tài liệu quan trọng giúp lập trình viên định hướng nghề nghiệp, cũng như hỗ trợ các doanh nghiệp trong việc xây dựng chiến lược tuyển dụng hiệu quả.
Hồ Chí Minh, Việt Nam – TopDev hân hạnh công bố Báo cáo Thị trường IT Việt Nam năm 2024 – 2025 với chủ đề “Vietnam IT & Tech Talent Landscape”, một bản phân tích toàn diện về bối cảnh công nghệ và nhân lực IT tại Việt Nam. Báo cáo này cung cấp một cái nhìn chi tiết về những xu hướng phát triển, thách thức, và cơ hội đầu tư trong lĩnh vực IT tại Việt Nam, trong bối cảnh quốc gia đang dẫn đầu khu vực Đông Nam Á về tốc độ tăng trưởng kinh tế và công nghệ.
1. Việt Nam – Trung tâm Công nghệ Mới của Khu vực ASEAN
Bất chấp những biến động kinh tế toàn cầu, thị trường CNTT Việt Nam vẫn duy trì đà tăng trưởng mạnh mẽ, trở thành một trong những điểm sáng của khu vực ASEAN. Theo dự báo của Ngân hàng Thế giới (WB), Việt Nam tiếp tục nằm trong nhóm các quốc gia có tốc độ tăng trưởng GDP nhanh nhất trong 30 năm qua, với mức tăng trưởng năm 2023 đạt 5.05% và được dự báo sẽ đạt 5.5% – 6.0% vào năm 2024.
Sự gia tăng dòng vốn đầu tư trực tiếp nước ngoài (FDI) là yếu tố then chốt giúp Việt Nam củng cố vị thế là trung tâm công nghệ khu vực. Nửa đầu năm 2024, Việt Nam đã thu hút được 11,63 tỷ USD thặng dư thương mại, phần lớn nhờ vào các khoản đầu tư từ các quốc gia như Mỹ, Nhật Bản, Hàn Quốc. Những công ty đa quốc gia như Samsung, Intel và LG không ngừng mở rộng các trung tâm nghiên cứu và phát triển (R&D) tại Việt Nam, biến quốc gia này thành một điểm đến hàng đầu cho các trung tâm công nghệ khu vực.
Cùng với việc Việt Nam nâng cấp mối quan hệ với Mỹ và Hàn Quốc lên mức Đối tác Chiến lược Toàn diện, các ngành công nghệ cao như chất bán dẫn và trí tuệ nhân tạo (AI) đang trở thành trọng tâm phát triển. Bên cạnh đó, việc hiện đại hóa cơ sở hạ tầng công nghệ và nguồn nhân lực lành nghề cũng đóng góp đáng kể vào sự tăng trưởng của ngành CNTT Việt Nam. Chính phủ đã đề ra các chiến lược nhằm nâng cao kỹ năng công nghệ và thúc đẩy chuyển đổi số, trong đó có việc tích hợp AI và các công nghệ đám mây vào giáo dục và doanh nghiệp. Điều này đảm bảo rằng Việt Nam không chỉ là điểm đến đầu tư hấp dẫn, mà còn là trung tâm đổi mới sáng tạo hàng đầu tại ASEAN.
2. Thị trường việc làm IT: Sự bùng nổ và cơ hội tuyển dụng
Thị trường việc làm IT tại Việt Nam đang chứng kiến sự bùng nổ chưa từng có, đặc biệt trong các lĩnh vực như trí tuệ nhân tạo (AI), dữ liệu lớn (Big Data), điện toán đám mây, và an ninh mạng. Nhu cầu tuyển dụng nhân sự công nghệ cao đang tăng mạnh, với mức lương cho các chuyên gia trong các lĩnh vực này liên tục gia tăng. Theo Báo cáo, mức lương trung bình của lập trình viên tại Việt Nam vào năm 2024 ước tính dao động từ 1.100 đến 3.000 USD mỗi tháng, tùy thuộc vào kỹ năng và kinh nghiệm. Đặc biệt, các vị trí chuyên sâu như kỹ sư AI và chuyên gia bảo mật thông tin có thể nhận được mức lương vượt xa con số trung bình, nhờ vào sự khan hiếm nhân lực và tầm quan trọng của những vai trò này trong các doanh nghiệp.
Sự phát triển nhanh chóng của thị trường công nghệ không chỉ mở ra nhiều cơ hội việc làm mà còn đặt ra những thách thức lớn đối với các doanh nghiệp. Một trong những thách thức đáng kể là sự thiếu hụt nguồn nhân lực có kỹ năng chuyên môn sâu. Theo số liệu từ Bộ Thông tin và Truyền thông, thị trường IT Việt Nam cần bổ sung ít nhất 500.000 lao động công nghệ từ nay đến năm 2025 để đáp ứng nhu cầu. Điều này đặt ra yêu cầu cấp bách đối với doanh nghiệp trong việc triển khai các chương trình đào tạo upskilling và reskilling cho nhân viên.
3. Đổi mới sáng tạo khởi nghiệp: Việt Nam – Vùng đất của cơ hội
Hệ sinh thái khởi nghiệp công nghệ tại Việt Nam đang trên đà phát triển mạnh mẽ, nhờ vào sự hỗ trợ tích cực từ Chính phủ và các nhà đầu tư quốc tế. Theo báo cáo, Việt Nam hiện đứng thứ 3 trong khu vực Đông Nam Á về số lượng dự án khởi nghiệp nhận được đầu tư. Trong năm 2023, tổng vốn đầu tư vào các startup công nghệ tại Việt Nam đạt 529 triệu USD, tập trung chủ yếu vào các lĩnh vực giáo dục, y tế, và thương mại điện tử, những ngành có tiềm năng tăng trưởng và mang lại nhiều giá trị xã hội.
Một điểm nhấn quan trọng trong Báo cáo là sự hợp tác chặt chẽ giữa các doanh nghiệp khởi nghiệp trong nước và các nhà đầu tư quốc tế. Những sáng kiến như chương trình Qualcomm Vietnam Innovation Challenge đã mở ra cơ hội cho các doanh nghiệp khởi nghiệp Việt Nam tiếp cận với những công nghệ tiên tiến hàng đầu, đặc biệt trong lĩnh vực trí tuệ nhân tạo và viễn thông. Đồng thời, chương trình Google for Startups Accelerator đã cung cấp các nguồn lực hỗ trợ như vốn đầu tư và kỹ thuật cho các startup, giúp họ tăng tốc phát triển và mở rộng ra thị trường quốc tế.
4. Chuyển đổi số và các xu hướng công nghệ mới
Việt Nam đang chứng kiến một làn sóng chuyển đổi số toàn diện, lan tỏa mạnh mẽ trên nhiều lĩnh vực quan trọng như tài chính, ngân hàng và dịch vụ công. Báo cáo chỉ ra rằng các sáng kiến về chuyển đổi số đang mang lại sự thay đổi đáng kể trong cách thức vận hành của doanh nghiệp, với trọng tâm là tích hợp các công nghệ tiên tiến như trí tuệ nhân tạo, điện toán đám mây và phân tích dữ liệu.
Nền kinh tế số của Việt Nam hiện chiếm khoảng 16.5% GDP quốc gia và dự kiến sẽ tiếp tục tăng trưởng với tốc độ 20% hàng năm. Đây là một cơ hội lớn cho các doanh nghiệp trong nước và quốc tế tham gia vào cuộc cách mạng công nghệ này, đặc biệt trong bối cảnh các doanh nghiệp cần đẩy mạnh chuyển đổi số để giữ vững vị thế trong nền kinh tế toàn cầu. Các giải pháp số hóa như ngân hàng trực tuyến, thương mại điện tử, và chính phủ điện tử đã trở thành những thành phần cốt lõi của nền kinh tế số, mở ra nhiều cơ hội phát triển và đầu tư. Theo Báo cáo eConomy SEA 2023 của Google, GMV của Việt Nam dự kiến sẽ tăng từ 30 tỷ USD trong năm 2023 lên 43 tỷ USD vào năm 2025, điều này càng củng cố tiềm năng phát triển mạnh mẽ của nền kinh tế số tại Việt Nam.
Cùng với đó, Việt Nam hiện đang được đánh giá là một trong những quốc gia tiên phong trong việc ứng dụng công nghệ mới tại khu vực ASEAN. Các xu hướng như 5G, Internet vạn vật (IoT) cũng đang nhanh chóng được triển khai, giúp thúc đẩy quá trình chuyển đổi số và hiện đại hóa cơ sở hạ tầng công nghệ. Đồng thời, với sự hỗ trợ mạnh mẽ từ Chính phủ và dòng vốn đầu tư quốc tế, Việt Nam đang trên đà trở thành một trung tâm công nghệ lớn của khu vực, thu hút ngày càng nhiều doanh nghiệp và chuyên gia công nghệ tham gia vào quá trình đổi mới sáng tạo.
5. Những thách thức và cơ hội tương lai
Mặc dù thị trường IT Việt Nam đang có tiềm năng phát triển vượt bậc, nhưng vẫn tồn tại những thách thức lớn mà các doanh nghiệp và nhà đầu tư cần phải đối mặt. Một trong những thách thức chính là hạ tầng công nghệ, đặc biệt trong bối cảnh mạng 5G, các trung tâm dữ liệu và dịch vụ đám mây đang dần trở thành nhu cầu tất yếu. Để có thể tiếp tục phát triển bền vững, Việt Nam cần phải tăng cường đầu tư vào nâng cấp cơ sở hạ tầng, đảm bảo đủ khả năng đáp ứng nhu cầu phát triển công nghệ ngày càng tăng.
Ngoài ra, vấn đề an ninh mạng và bảo mật dữ liệu cũng đặt ra áp lực lớn cho các doanh nghiệp IT. Trong thời đại mà các cuộc tấn công mạng ngày càng tinh vi, việc tuân thủ các tiêu chuẩn an ninh mạng và quy định bảo mật dữ liệu trở thành yêu cầu bắt buộc nếu các doanh nghiệp muốn tham gia vào chuỗi cung ứng toàn cầu. Điều này đòi hỏi các doanh nghiệp không chỉ cải tiến công nghệ mà còn phải tập trung đào tạo nguồn nhân lực có chuyên môn cao về bảo mật dữ liệu.
Cũng theo báo cáo, một trong những thách thức lớn đối với thị trường lao động IT là sự gia tăng yêu cầu tuyển dụng các vị trí có kinh nghiệm, đặc biệt trong các lĩnh vực phức tạp như an ninh mạng và trí tuệ nhân tạo. Nhu cầu về những chuyên gia giàu kinh nghiệm vượt xa nguồn cung, tạo áp lực lớn lên các doanh nghiệp trong việc thu hút và giữ chân nhân tài. Điều này khiến các doanh nghiệp không chỉ cần tập trung tuyển dụng mà còn phải triển khai các chương trình đào tạo nội bộ để phát triển và nâng cao tay nghề của đội ngũ nhân viên
Ông Park JongHo, CEO TopDev, chia sẻ: “Báo cáo lần này của TopDev không chỉ là một bản phân tích thị trường mà còn là chiếc la bàn cho các doanh nghiệp và nhà đầu tư đang có mong muốn khai phá tiềm năng của ngành IT tại Việt Nam. Chúng tôi tin rằng Việt Nam sẽ tiếp tục vươn lên, trở thành trung tâm công nghệ và đổi mới sáng tạo hàng đầu của khu vực.”
Mặc dù đối mặt với nhiều thách thức, ngành công nghệ thông tin Việt Nam vẫn thể hiện sự phát triển mạnh mẽ và tiềm năng to lớn trong năm 2024. Để hiểu rõ hơn về bức tranh toàn cảnh thị trường IT Việt Nam, những cơ hấp dẫn cũng như xu hướng công nghệ mới nổi, độc giả có thể tham khảo chi tiết trong Báo cáo Thị trường IT Việt Nam 2024 do TopDev thực hiện tại đây.
Được thành lập vào năm 2015 bởi Applancer JSC với sứ mệnh “Make IT Vietnam Better”, TopDev đã trở thành nền tảng Tuyển dụng IT hàng đầu tại Việt Nam với website hơn 1 triệu truy cập mỗi tháng, và hơn 250.000 lượt tải ứng dụng di động và 750.000 thành viên đăng ký. Tầm nhìn của TopDev là tối ưu quy trình thu hút nhân tài CNTT, giúp cả người tìm việc và nhà tuyển dụng dễ dàng hơn thông qua dịch vụ và tính năng tiện lợi để tìm ra cơ hội việc làm phù hợp. Bên cạnh đó, TopDev còn là đơn vị tổ chức 02 sự kiện Công nghệ thường niên lớn nhất Việt Nam: Vietnam Mobile Summit & Vietnam Web Summit với quy mô hàng nghìn người tham dự tại TP.HCM & Hà Nội. Ngoài ra, từ năm 2016 TopDev đã công bố Báo cáo Thị trường CNTT Việt Nam thường niên với sự tin tưởng & kiểm chứng của nhiều doanh nghiệp, tổ chức & chính phủ.
Bài viết được sự cho phép của tác giả Võ Doãn Thành
1. Cuộc trò truyện với ông anh
Nói về security thì có vô vàng các vấn đề mà có thể gặp phải trong quá trình phát triển ứng dụng hoặc xây dựng cơ sở hạ tầng.
Ứng dụng của bạn càng có nhiều lớp bảo vệ thì “có thể” việc giúp an toàn thông tin cho người dùng càng cao và tăng độ tin cậy của người dùng với ứng dụng.
Mình nói “có thể” tức việc hiểu và tận dùng các lớp bảo mật chỉ giúp ứng dụng có thêm nhiều lớp chắn không có nghĩa là an toàn được 100%.
Vì giờ các pháp sư hacker rất là chuyên nghiệp.
Hổm mình có nói chuyện với ông anh làm chung. Ảnh thì chuyên làm về security. Ảnh kể cho mình nghe 1 tràng ý như thế này.
Mục đích việc hiểu về security (cả về lý thuyết và phướng án phòng chống) không phải là để em có thể chống lại các cuộc tấn công (attacks) mà là giúp em phát hiện ra mình có đang bị tấn công hay không.
Càng nhiều lớp bảo vệ giống như em có nhiều bức tường thành để bảo vệ cung điện. Nhưng vấn đề nếu 1 trong các bức tường của em mà chỉ cần có khe nức mà em không phát hiện thì rất dễ bị kẻ địch họ thổi khí độc vào và hạ bệ các binh lính và không cần đập phá thành làm gì.
Hacker giờ xịn xò lắm. Họ sẽ không cần phải đánh sập server của em hoặc chiếm quyền kiểm soát gì cả. Đơn giản là họ tới và lấy những thức cần thôi. Ví dụ 10% doanh thu mỗi tháng của ứng dụng.
Bạn có cảm thấy rùng mình khi nghe câu chuyện trên không? Có khi ứng dụng đang bị hack mà do chẳng có chuyện gì xảy ra nên chúng ta cứ cho mình đang an toàn.
Có rất nhiều bài học về security nhưng mình nghĩ 4 vấn đề dưới đây khá là phổ biến mà ít được chú ý. Security thì cần cho tất cả mọi người kể cả developers nữa nha.
2. SQL Injection (SQLi)
Vấn đề và cách hoạt động:
SQLi là một loại tấn công mạng khai thác lỗ hổng trong cách một ứng dụng web tương tác với database.
Kẻ tấn công có thể chèn mã SQL độc hại vào các nơi như form đăng nhập, thanh search hoặc bất kỳ trường nào chấp nhận dữ liệu từ người dùng.
Mã chèn này sẽ lừa database của ứng dụng thực thi các hành động không mong muốn, có thể dẫn đến sự xâm nhập.
Vấn đề này thường xảy ra khi chúng ta query thẳng trực tiếp data của người dùng vào database.
Ví dụ:
Với form đăng nhập thì ta cần thông tin như username và password để xác minh danh tính người dùng.
Với user bình thường sẽ là
SELECT * FROM users WHERE username='abc123' AND password='anything';
Còn đối với hacker sẽ gửi username là “admin’–“
SELECT * FROM users WHERE username='admin'--' AND password='anything';
Lúc này câu SQL bên trên nó chỉ thực hiện tới “SELECT * FROM users WHERE username=’admin'” vì từ khúc “–” nó hiểu là đang comment.
Rất dễ dàng bị chiếm user admin hoặc thay đổi dữ liệu không mong muốn.
Giải pháp:
Parameterized Queries: Sử dụng các truy vấn có tham số để tách biệt đầu vào của người dùng khỏi câu lệnh SQL.
Input Validation: Xác thực tất cả đầu vào của người dùng để đảm bảo chúng khớp với định dạng mong đợi và không chứa các ký tự độc hại.
Giờ đa số chúng ta đều dùng ORM thì các vấn đề này có thể giảm thiểu. Chỉ trường hợp mình dùng thẳng raw query thôi.
// Prepare the SQL statement with placeholders for username and password
PREPARED_STATEMENT = "SELECT * FROM users WHERE username = ? AND password = ?";
// Bind user input to the prepared statement parameters
username_param = username
password_param = password
// Execute the prepared statement with the bound parameters
results = database_connection.execute(PREPARED_STATEMENT, username_param, password_param)
3. Cross-Site Scripting (XSS)
Vấn đề và cách hoạt động:
XSS là một lỗ hổng bảo mật web cho phép kẻ tấn công chèn các đoạn mã độc hại vào các trang web đáng tin cậy.
Các đoạn mã này sau đó được thực thi trong trình duyệt web của nạn nhân khi họ truy cập vào trang web bị lỗ hổng.
Kẻ tấn công có thể sử dụng XSS để đánh cắp thông tin nhạy cảm, chuyển hướng người dùng đến các trang web độc hại hoặc làm gián đoạn chức năng của trang web.
Ví dụ:
Ví dụ kinh điển mà chúng ta có thể thấy đó là việc comment trên các forum. Hacker sẽ comment 1 nội dung gì đó mà không phải là text.
Nó là 1 đoạn mã javascript để đọc các nội dung cookies xong sau đó gửi sang 1 web khác.
Hacker sẽ đánh cắp các thông tin của người dùng. Vì khi người dùng load comments tiếp theo vô tình load lên đoạn comment chứ đoạn script của hacker.
Giải pháp:
Input Validation and Sanitization: Xác thực tất cả dữ liệu đầu vào từ người dùng để đảm bảo nó phù hợp với các định dạng mong đợi và loại bỏ bất kỳ ký tự độc hại tiềm ẩn nào. Bạn cũng có thể làm sạch dữ liệu đầu vào bằng cách chuyển đổi các ký tự đặc biệt thành các dạng vô hại (ví dụ: < trở thành <).
Output Encoding: Trước khi hiển thị dữ liệu đầu vào của người dùng trên trang web, hãy mã hóa nó một cách thích hợp để ngăn nó bị diễn giải như mã. Điều này bao gồm việc chuyển đổi các ký tự đặc biệt thành các thực thể HTML hiển thị dưới dạng văn bản, không thực thi như mã.
Content Security Policy (CSP): Triển khai CSP định nghĩa các nguồn cho phép cho các đoạn mã và tài nguyên khác. Điều này hạn chế trình duyệt thực thi bất kỳ đoạn mã nào không đến từ các nguồn được phê duyệt.
DoS attack nhằm mục đích làm gián đoạn hoạt động bình thường của một trang web, máy chủ hoặc mạng bằng cách áp đảo nó với một lượng lớn lưu lượng truy cập.
Lưu lượng truy cập quá mức này ngăn cản người dùng hợp pháp truy cập vào tài nguyên bị tấn công.
Các cuộc tấn công DoS thường được sử dụng để tống tiền hoặc đơn giản là gây rối loạn và hỗn loạn.
Ví dụ:
Với vấn đề này thì dễ dàng hình dung nhất. Đó là bạn có 1 website nhưng hacker không muốn nó hoạt động bình thường hoặc công ty đối thủ không muốn khách hàng có thể mua hàng từ công ty của bạn.
Hacker sẽ tạo các script để gọi tạo ra các requests liên tục tới các server mà website bạn đang có. Lúc sẽ các server sẽ trì trệ hoặc tệ có thể down. Do phải handle 1 lượng requests lớn từ hacker.
Trải nghiệm người dùng sẽ tệ đi và có thể ảnh hưởng lớn tới doanh thu.
Giải pháp:
Traffic Filtering: Triển khai các tường lửa và giải pháp bảo mật mạng để lọc lưu lượng đáng ngờ và chặn các mẫu tấn công đã biết.
Rate Limiting: Hạn chế số lượng yêu cầu mà một địa chỉ IP đơn lẻ có thể gửi trong một khung thời gian cụ thể. Điều này có thể giúp ngăn chặn một nguồn duy nhất làm quá tải hệ thống.
Resource Scaling: Cân nhắc mở rộng hạ tầng (ví dụ: sử dụng các dịch vụ dựa trên cloud) để xử lý các đột biến lưu lượng không mong đợi.
DDoS Protection Services: Nhiều nhà cung cấp dịch vụ bảo mật cung cấp các dịch vụ bảo vệ DDoS giúp nhận diện và giảm thiểu các cuộc tấn công DDoS. (Mình dùng Cloudflare nha.)
Incident Response Plan: Có sẵn một kế hoạch để phản ứng hiệu quả với các cuộc tấn công DoS, bao gồm xác định nguồn tấn công, giảm thiểu tác động và khôi phục hoạt động bình thường.
CSRF, còn được gọi là XSRF hoặc Sea Surf, là một lỗ hổng bảo mật web cho phép kẻ tấn công lừa trình duyệt của người dùng đã xác thực thực hiện các hành động trái phép trên một trang web đáng tin cậy.
Kẻ tấn công lợi dụng phiên làm việc đáng tin cậy của người dùng với trang web để thực hiện các hành động thay mặt cho nạn nhân.
Ví dụ:
Gần đây chúng ta được cảnh báo khá là nhiều về việc giả mạo các trang web của ngân hàng. Hacker sẽ gửi 1 tin nhắn nhìn thì rất giống như nội dung được gửi từ ngân hàng thiệt.
Sau khi nạn nhân click vào link giả mạo thì giao diện và cách thức rất là giống như trang web thật. Sau đó nạn nhân đăng nhập ở trang giả mạo thì hacker đã có đầy đủ thông tin username và password của nạn nhân.
Sau đó hacker có thể vào trang web thiệt của ngân hàng để làm các hành động như đánh cắp tiền.
Giải pháp:
Token CSRF: Tạo các token duy nhất cho mỗi form trên trang web và nhúng chúng dưới dạng các trường ẩn. Server sẽ xác thực các token này trước khi xử lý các form gửi đi. Điều này đảm bảo rằng chỉ có các form hợp lệ do người dùng gửi mới được xử lý, ngay cả khi kẻ tấn công lừa người dùng nhấp vào liên kết độc hại.
Double Submit Cookies: Áp dụng cookie với các biện pháp bảo mật bổ sung như cờ HttpOnly và thuộc tính SameSite. Những tính năng này có thể giúp ngăn cookie bị gửi trong các yêu cầu cross-site do kẻ tấn công khởi xướng.
User Education: Giúp người dùng hiểu về các rủi ro khi nhấp vào các liên kết đáng ngờ hoặc truy cập các trang web không đáng tin cậy.
6. Kết luận
Giờ chúng ta hiểu được tầm quan trọng của việc hiểu về security. Nó giúp chúng ta tránh được những rủi ro như mất cắp dữ liệu, chiếm quyền kiểm soát hoặc tệ nhất là mất tiền.
Bất cứ ai từ developers tới người dùng để phải nhận thức rõ về việc tự bảo vệ bản thân trước những tấn công mạng.
Hãy cập nhật thêm những kiến thức về an ninh mạng sẽ giúp bạn tránh những mất mát không mong muốn.
7. Câu hỏi mở rộng
Thường thì mình thấy các websites đa số sẽ lưu token vào localStorage để tiện cho mục đích sử dụng.
Vậy rủi ro khi dùng localStorage có hay không? Nếu là bạn thì bạn có dùng localStorage không hay dùng phương pháp nào giúp bảo vệ token cho người dùng?
Công nghệ điện toán đám mây (Cloud Computing) phát triển mạnh mẽ và đóng vai trò then chốt trong nền công nghiệp 4.0 hiện nay, đồng thời cũng mang lại cho chúng ta nhiều cơ hội nghề nghiệp mới, trong đó có Cloud Engineer. Bài viết hôm nay chúng ta cùng nhau tìm hiểu xem Cloud Engineer là gì và cần trang bị những kỹ năng nào để trở thành một Kỹ sư đám mây nhé.
Cloud Engineer là gì?
Cloud Engineer – Kỹ sư đám mây là người chịu trách nhiệm thiết lập, giám sát và vận hành các hoạt động hệ thống đám mây (Cloud System). Là người có kiến thức trong lĩnh vực điện toán đám mây, Cloud Engineer sẽ giúp phân tích cơ sở hạ tầng dữ liệu của tổ chức, doanh nghiệp hiện tại; từ đó chuyển đổi dữ liệu này sang môi trường lưu trữ đám mây trên Internet; sau đó vận hành và thực hiện các công việc bảo trì, cập nhật phần mềm.
Tại sao các tổ chức, doanh nghiệp lại cần đến vị trí Cloud Engineer?
Trong bối cảnh phát triển công nghệ hiện nay, điện toán đám mây (Cloud Computing) đã trở thành một lĩnh vực đi đầu, mang đến sự đổi mới và nâng cao hiệu quả cho các hoạt động kinh doanh của tổ chức. Cloud Engineer được xem là kiến trúc sư của quá trình chuyển đổi này với bộ kỹ năng chuyên môn toàn diện và có hiểu biết sâu sắc về cả hoạt động của doanh nghiệp cũng như nền tảng kỹ thuật đáp ứng.
Công việc cụ thể của một kỹ sư đám mây bao gồm:
Phân tích thực trạng cơ sở hạ tầng lưu trữ dữ liệu hiện tại của tổ chức, từ đó đưa ra đề xuất kế hoạch xây dựng và triển khai hệ thống đám mây phù hợp.
Tiến hành triển khai chuyển đổi dữ liệu sang lưu trữ đám mây sử dụng các nền tảng điện toán đám mây phổ biến hiện nay như Amazon Web Services (AWS), Microsoft Azure hay Google Cloud Platform (GCP).
Vận hành, quản trị và bảo trì hệ thống đám mây của tổ chức, đảm bảo các hoạt động ổn định và hiệu quả; đồng thời áp dụng các biện pháp bảo mật chặt chẽ giúp theo dõi, giám sát và ngăn chặn rủi ro an ninh thông tin.
Hỗ trợ tư vấn các vấn đề kỹ thuật liên quan đến lưu trữ dữ liệu đám mây đến các phòng ban, bộ phận trong tổ chức. Tạo và hướng dẫn sử dụng đảm bảo hoạt động hiệu quả ở các bộ phận của hệ thống đám mây.
Tìm hiểu và áp dụng các công nghệ mới lên hệ thống đám mây hiện tại nhằm nâng cấp hoặc mở rộng khi có nhu cầu của tổ chức.
Những kỹ năng cần có của một Cloud Engineer
Để trở thành một Cloud Engineer, bạn cần trang bị nhiều kỹ năng đa dạng khác nhau về kỹ thuật cũng như làm việc nhóm, đồng thời còn luôn có tư duy cập nhật công nghệ mới trong bối cảnh phát triển và thay đổi liên tục của công nghệ điện toán đám mây hiện nay.
Cùng liệt kê ra một số kỹ năng chính mà kỹ sư đám mây cần trang bị nhé:
1. Hiểu biết về Cloud Computing
Đây là điều cơ bản nhất liên quan đến công việc của một Cloud Engineer, vì thế bắt buộc bạn cần có hiểu biết và kinh nghiệm làm việc thực tiễn đối với một hoặc một vài Cloud Provider lớn như AWS, GCP hay Azure. Các giải pháp mà kỹ sư đám mây đưa ra dành cho tổ chức sẽ xoay quanh các nhà cung cấp Cloud trên, nắm được chi tiết những gì hệ thống cloud cung cấp sẽ giúp bạn trong quá trình làm việc hàng ngày.
2. Kỹ năng lập trình (Programming)
Một kỹ sư đám mây cũng cần viết code, lập trình để tạo ra được các ứng dụng liên kết với các Cloud services (dịch vụ đám mây) như API hay Web services. Các ngôn ngữ lập trình phổ biến sử dụng ở vị trí công việc này bao gồm Python, Java hay Go.
3. Kiến thức về mạng, giao thức Internet (Networking)
Đây cũng là một kỹ năng cơ bản mà Cloud Engineer cần có do đặc thù công việc, luôn luôn chạy trên Cloud thông qua mạng nên cần có kiến thức, hiểu biết về địa chỉ IP (IP Address), các giao thức Internet (TCP/IP, HTTP, SSL, …).
4. Kỹ năng quản trị CSDL (Database management)
Các dịch vụ Cloud đều cung cấp các giải pháp quản trị dữ liệu, và vì thế để vận hành được hệ thống Cloud thì kỹ sư đám mây cũng cần biết các kỹ năng liên quan đến quản trị CSDL. Tùy vào hệ thống mà tổ chức lựa chọn, bạn cũng nên trang bị hiểu biết về RDBMS hoặc NoSQL; bên cạnh đó là các loại Storage (File, Block, Object) sẽ được sử dụng.
5. Hiểu biết về các công nghệ tự động trên Cloud
Các công nghệ tự động hóa áp dụng cho việc deploy code, đẩy nhanh các process trong chu trình phát triển phần mềm và quản lý cơ sở hạ tầng như CI/CD hay DevOps là những thứ mà Cloud Engineer cũng phải trang bị để có thể hợp tác cùng các bộ phận, team phát triển khác trong dự án.
6. Hiểu biết về Container (Containerization)
Container là những packages đóng gói ứng dụng (application) cùng các phụ thuộc cần thiết đi kèm (dependencies) để chạy được ứng dụng đó trên nhiều môi trường khác nhau, cụ thể ở đây là Cloud Platform. Cloud Engineer cần nắm được các công nghệ container như Docker, Kubernetes để có thể deploy chúng lên các dịch vụ Cloud.
7. Các kỹ năng cần thiết khác
Ngoài những kỹ năng trên thì một số kỹ năng cần thiết khác mà kỹ sư đám mây cũng cần trang bị như: hiểu biết về hệ điều hành Linux, các kỹ thuật liên quan đến bảo mật và khôi phục dữ liệu, các kỹ thuật ảo hóa giúp tạo ra nhiều hệ thống chạy ứng dụng,… Cloud Engineer đồng thời cũng là vị trí thường xuyên làm việc với các đội nhóm khác, là cầu nối và hỗ trợ các đội phát triển, vận hành hệ thống; vì vậy mà việc trang bị các kỹ năng mềm liên quan đến làm việc nhóm hay kỹ năng báo cáo cũng là điều cần thiết.
Hiện nay, nhiều tổ chức, doanh nghiệp đã và đang thực hiện việc chuyển đổi hạ tầng cơ sở dữ liệu của mình lên cloud, vì thế mà nhu cầu tuyển dụng vị trí Cloud Engineer cũng đang tăng lên theo từng năm. Thuật ngữ Cloud Engineer có thể được các nhà tuyển dụng sử dụng chung cho một số vai trò khác nhau tùy theo tính chất công việc cụ thể theo nhu cầu của tổ chức, bao gồm:
Cloud Architect: thiết kế các hệ thống cloud
Cloud Software Engineer: xây dựng, triển khai các phần mềm cloud
Cloud Security Engineer: đảm bảo bảo mật hệ thống cloud
Cloud System Engineer: vận hành hệ thống cloud
Cloud Network Engineer: vận hành mạng cloud
Mỗi vị trí sẽ tập trung vào một loại Cloud Computing cụ thể, đòi hỏi kỹ sư đám mây có những hiểu biết chuyên môn kỹ thuật cũng như kinh nghiệm làm việc trên từng nền tảng khác nhau. Vì lý do đó mà hiện nay không hề thiếu lựa chọn công việc dành cho các Cloud Engineer với những mức lương hấp dẫn. Theo thống kê tại Việt Nam, lương của Cloud Engineer nằm trong top đầu ngành, tương đương với các vị trí như kỹ sư AI hay chuyên viên phân tích dữ liệu. Rõ ràng, đây là cơ hội lớn dành cho các bạn đang có ý định học và theo đuổi con đường trở thành một kỹ sư đám mây trong tương lai.
Kết bài
Qua bài viết này, hy vọng các bạn đã có cái nhìn rõ ràng hơn về vị trí Cloud Engineer, về công việc mà kỹ sư đám mây đảm nhận cũng như những kỹ năng mà họ được trang bị. Để trở thành một Cloud Engineer, bạn sẽ cần phải học hỏi rất nhiều về mặt kỹ thuật cũng như tích lũy kinh nghiệm làm việc với các hệ thống điện toán đám mây hiện nay. Mình nghĩ đây là một vị trí rất tuyệt vời và nếu có ý định, đừng ngần ngại tìm hiểu và học tập để có kế hoạch phát triển phù hợp với bản thâ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.
Swagger và Postman là hai nền tảng phổ biến giúp chúng ta làm việc với API từ thiết kế, kiểm thử và tạo tài liệu mô tả. Để lựa chọn sử dụng công cụ nào giữa hai nền tảng trên, bạn cần nắm được những điểm khác nhau cơ bản liên quan để xem nó có đáp ứng được nhu cầu và mục đích sử dụng trong dự án hay không. Bài viết hôm nay chúng ta cùng đi so sánh Swagger với Postman để trả lời cho câu hỏi trên nhé.
Swagger là gì?
Swagger là một framework được sử dụng để thiết kế, tài liệu hóa và kiểm thử các API, nó cho phép tạo ra các tài liệu API theo định dạng chuẩn và có thể tương tác.
Swagger cung cấp ba công cụ chính để hỗ trợ nhà phát triển bao gồm:
Swagger Editor: công cụ giúp tạo ra mô tả chi tiết về các API bao gồm endpoint, parameters và responses
Swagger Codegen: công cụ giúp tự động tạo mã thực thi các API cho các ngôn ngữ lập trình khác nhau
Swagger UI: là công cụ phổ biến nhất trong Swagger, cho phép tạo các tài liệu HTML, CSS từ file cấu hình giúp cho công việc nghiên cứu và sử dụng API.
Postman là gì?
Postman là một nền tảng cho việc xây dựng và sử dụng API, nó đơn giản hóa từng bước trong vòng đời phát triển API, từ đó giúp chúng ta tạo ra các API tốt hơn, nhanh hơn và dễ dàng hơn.
Postman cung cấp các tính năng chính như:
API repository: lưu trữ thông tin mô tả về các API
API tools: thiết kế, kiểm thử, viết tài liệu hướng dẫn sử dụng các API
API collaboration: tạo ra các workspace khác nhau để chia sẻ thông tin các API theo nhóm làm việc
API governance: thiết lập các quy tắc cần tuân theo khi tạo và chạy kiểm thử API
API integrations: tích hợp với các hệ thống khác trong quá trình phát triển phần mềm như CircleCI, Gitlab, Jenkins, …
So sánh Swagger với Postman
Chúng ta sẽ cùng so sánh hai công cụ này theo từng tiêu chí cụ thể sau:
1. Về trọng tâm mục đích sử dụng
Mục đích chính của Swagger là việc thiết kế, xây dựng tài liệu và chuẩn hóa các API. Yếu tố này khiến có Swagger không được sử dụng rộng rãi bởi nhiều đối tượng khác nhau như Postman mà thường được sử dụng cho các dự án liên quan đến xây dựng API. Trong khi đó, Postman phục vụ cho nhiều đối tượng khác như trong dự án, từ lập trình viên, kiểm thử viên, quản lý hay cả khách hàng cũng có thể dễ dàng sử dụng để kiểm tra API và từ đó tham gia vào quá trình phát triển các API cho hệ thống.
2. Về tính dễ sử dụng
Nếu bạn là người mới bắt đầu làm việc với Swagger, có thể bạn sẽ cảm thấy công cụ này khá khó sử dụng và cần thời gian để làm quen. Thực tế thì Swagger luôn cần đầu tư thời gian cho những thiết lập ban đầu, kể cả với những API đơn giản. Swagger đòi hỏi bạn cung cấp tài liệu về API một cách rõ ràng, chi tiết ngay từ đầu; vì thế nó có thể tạo ra sự nặng nề nếu bạn chưa làm quen và hiểu hết về công dụng của nền tảng này.
Ngược lại thì Postman cho thấy đây là một công cụ tuyệt vời dành cho những người mới bắt đầu, hay chỉ có nhu cầu đơn giản là kiểm tra xem API có hoạt động hay không. Giao diện thân thiện với những thiết lập đơn giản giúp bạn dễ dàng nhìn vào và sử dụng được ngay. Tất nhiên Postman có nhiều tính năng phức tạp mà bạn cần phải học, tìm hiểu mới có thể sử dụng; tuy nhiên về tính dễ sử dụng thì Postman vẫn được đánh giá cao hơn Swagger.
Swagger được thiết kế chủ yếu cho các API theo kiểu REST, vì thế nếu API của bạn không phải kiểu REST thì sẽ có thể gặp một vài vấn đề với công cụ này. Postman hỗ trợ cả RESTful services và SOAP services. Cả 2 nền tảng này đều hỗ trợ tất cả các phương thức HTTP phổ biến như GET, POST, PUT, DELETE, PATH, …
4. Về khả năng tạo tài liệu
Postman cho phép người dùng tạo tài liệu mô tả API mở mức độ cơ bản, thường sử dụng để ghi chú các thông tin cần thiết cho việc chia sẻ trong team phát triển khi sử dụng. Với Swagger, tài liệu hóa API được xem là tính năng cốt lõi của công cụ này, vì thế tài liệu API sinh ra từ Swagger có đầy đủ các tính năng toàn diện, có thể tương tác với người dùng và được dùng để làm tài liệu chính thức cho các bản mô tả chi tiết về API.
5. Về khả năng hỗ trợ sinh mã
Swagger có các bộ SDK tích hợp với nhiều ngôn ngữ lập trình khác nhau như Java, Node.js, Ruby, Python, … giúp chúng ta có thể dễ dàng sinh tài liệu mô tả một cách nhanh chóng và hiệu quả. Từ các mô tả API, bạn cũng có thể sinh source code bằng các ngôn ngữ lập trình trong Swagger, điều này có được nhờ việc chuẩn hóa API tốt cùng nhiều khai báo thiết lập chi tiết. Postman cũng có sự hỗ trợ trong quá trình tạo và sinh mã code; tuy nhiên công cụ này chỉ hỗ trợ ở mức cơ bản.
Postman sinh ra để tham gia vào quá trình phát triển phần mềm, vì thế nó được thiết kế để tích hợp dễ dàng vào hệ sinh thái này. Nó có khả năng tích hợp nhiều công cụ DevOps khác như CI/CD (Travis CI, CircleCI), quản lý source code (GitLab, BitBucket), giao tiếp (Slack, Microsoft Teams, Trello), máy chủ (Jenkins) hay các công cụ kiểm thử khác (Selenium, Junit),… Nhiều ràng buộc cũng có thể được tích hợp vào Postman giúp nó tham gia sâu hơn vào quá trình kiểm thử API nói riêng và phát triển phần mềm nói chung. Swagger cũng có một số tính năng liên quan đến tự động hóa quy trình cũng như có thể tích hợp một vài công cụ khác, tuy nhiên nó thường được sử dụng như một nền tảng độc lập nhiều hơn.
7. Về quy mô sử dụng
Postman được sử dụng rộng rãi bởi nhiều đối tượng khác nhau trong team phát triển dự án từ Developer, Tester, BA hay cả khách hàng cũng có thể thường xuyên sử dụng. Các công ty công nghệ xem Postman là một công cụ hữu ích tham gia vào quy trình phát triển phần mềm của họ; ngoài ra, nó còn được các nhà cung cấp dịch vụ phần mềm (SaaS – software-as-a-service) xem như một tính năng đảm bảo hoạt động của API trên nền tảng của họ.
Swagger thường được lựa chọn bởi các công ty, tổ chức ưu tiên việc thiết kế, xây dựng và kinh doanh xoay quanh API. Phương pháp tiếp cận là việc chuẩn hóa API ngay từ đầu bằng công cụ Swagger cung cấp, đồng thời tạo ra các tài liệu chi tiết có cấu trúc rõ ràng.
8. Về chi phí sử dụng
Cả hai nền tảng này đều cung cấp miễn phí để bạn có thể sử dụng. Swagger là một công cụ open-source và bạn có thể tải về và triển khai chạy ở local hay server của mình. Postman cung cấp ở dạng ứng dụng có sẵn trên nhiều nền tảng khác nhau từ Windows, MacOS hay Linux. Tuy nhiên một số tính năng cao cấp liên quan đến khả năng làm việc nhóm hay hỗ trợ từ xa chỉ được tích hợp trên phiên bản có tính phí của Postman.
Với những điểm khác biệt ở trên, chúng ta có thể phần nào trả lời cho câu hỏi so sánh Swagger với Postman, nên lựa chọn công cụ nào cho dự án của bạn:
Nếu nhu cầu của bạn là cần một công cụ để thiết kế, chuẩn hóa cũng như tạo tài liệu mô tả API cho người dùng sử dụng; hãy lựa chọn Swagger. Những công ty lớn tập trung vào việc phát triển và kinh doanh xung quanh API cũng đang sử dụng Swagger như: MOSICA, DatamedIQ GmbH, H&R Block, Shiji Group, Keeggo, ePayPolicy, …
Nếu nhu cầu của bạn tập trung vào việc kiểm thử, có thể tự động hóa quá trình kiểm thử và tham gia vào quy trình phát triển của dự án thì Postman là lựa chọn phù hợp cho bạn. Thực tế hiện nay, Postman được sử dụng rộng rãi và dành cho hầu hết các đối tượng tham gia dự án. Google, Microsoft, hay Adobe cũng sử dụng công cụ này trong các team phát triển dự án của họ.
Kết bài
Qua bài viết so sánh Swagger với Postman này, hy vọng các bạn đã có thể tự tin lựa chọn cho mình công cụ sử dụng cho các công việc liên quan đến API trong dự án sắp tới. Cả Swagger và Postman đều là những nền tảng có tính ứng dụng cao và bạn hoàn toàn có thể kết hợp cả hai công cụ này giúp ích cho công việc thiết kế, xây dựng và kiểm thử API. 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.
Một trong những câu hỏi lớn mà những ai bắt đầu học lập trình thường đặt ra là: “Học công nghệ thông tin nên mua laptop hay PC? Việc lựa chọn một thiết bị phù hợp để đồng hành cùng hành trình chinh phục thế giới lập trình là quyết định quan trọng. Mỗi thiết bị, dù là laptop hay máy tính để bàn, đều sở hữu những ưu điểm và hạn chế riêng, phù hợp với từng nhu cầu và mục tiêu khác nhau. Bài viết này của TopDev sẽ cung cấp một cái nhìn tổng quan và sâu sắc về hai lựa chọn này, giúp bạn đưa ra quyết định sáng suốt nhất.
Tại sao nên sử dụng Laptop để lập trình?
Laptop ra đời để giải quyết các vấn đề về kích thước, khối lượng cũng như tính di động mà PC không thể đáp ứng được. Laptop với thiết kế nhỏ gọn, dễ dàng mang theo và sử dụng ở bất kỳ đâu. Thông thường, laptop được trang bị pin, giúp người dùng có thể sử dụng mà không cần kết nối với nguồn điện liên tục. Đây là một lợi thế lớn cho những ai cần di chuyển thường xuyên hoặc học tập ở nhiều không gian khác nhau.
Ưu điểm
Tính di động: Laptop cho phép bạn học lập trình ở bất kỳ đâu, từ lớp học, văn phòng làm việc hay quán cà phê.
Tiết kiệm không gian: Nếu bạn sống trong không gian nhỏ, laptop là lựa chọn tối ưu hơn so với PC.
Không cần nguồn điện: Laptop thường được trang bị pin, cho phép sử dụng mà không cần kết nối với ổ điện. Điều này rất hữu ích khi bạn ở những nơi không có ổ điện hoặc trong các tình huống khẩn cấp.
Đa dạng tính năng: Nhiều laptop hiện nay được trang bị các tính năng tiên tiến như cảm biến vân tay, webcam chất lượng cao, và màn hình cảm ứng. Thường thì dùng PC sẽ phải trang bị riêng webcam.
Kết nối không dây: Laptop thường hỗ trợ kết nối Wi-Fi và Bluetooth, giúp bạn dễ dàng kết nối với nhiều thiết bị khác nhau và sử dụng Internet ở bất kỳ đâu.
Hiệu suất hạn chế: So với PC, laptop thường có hiệu suất thấp hơn, đặc biệt là các dòng laptop giá rẻ.
Khó nâng cấp: Nâng cấp linh kiện trên laptop thường khó khăn, chỉ có một số linh kiện có thể thay thế như RAM hay SSD, trong khi CPU và GPU thường không thể nâng cấp được.
Có nên lập trình bằng PC?
PC là máy tính để bàn với cấu hình mạnh mẽ hơn, thường được sử dụng cho những công việc yêu cầu hiệu suất cao như lập trình game, thiết kế đồ họa, hay các dự án lớn. PC thường có khả năng nâng cấp linh kiện dễ dàng hơn, từ đó giúp người dùng kéo dài tuổi thọ và hiệu suất của máy.
Ưu điểm
Cấu hình mạnh mẽ: PC thường cho hiệu suất tốt hơn, phù hợp với những ai học lập trình về lập trình game hay phát triển phần mềm lớn.
Dễ dàng nâng cấp: Bạn có thể dễ dàng thay thế các linh kiện như card đồ họa, CPU, hay RAM để nâng cấp hiệu suất.
Màn hình kích thước lớn: Với PC, bạn có thể tự do lựa chọn màn hình có độ phân giải và kích thước phù hợp, thường thì kích thước màn hình PC sẽ lớn hơn laptop, thậm chí bạn có thể sử dụng 2 màn hình nếu muốn.
Giá thành rẻ hơn laptop: Đối với cùng cấu hình và hiệu năng, PC thường có giá thành rẻ hơn laptop.
Nhược Điểm
Không thể mang đi: PC cố định ở một vị trí, khiến bạn khó khăn khi muốn học ở nhiều nơi khác nhau.
Cần nguồn điện liên tục: Nếu bạn muốn dùng PC, bạn cần phải có một nguồn điện ổn định, điều này có thể là một bất tiện nếu bạn học ở những nơi không có ổ điện hoặc khi cúp điện đột ngột có thể những file code sẽ chưa kịp lưu.
Vậy câu trả lời cho học IT nên mua laptop hay PC là gì? Cùng xem qua bảng tổng hợp so sánh giữa laptop và PC sau:
Laptop
Máy tính để bàn (PC)
Tính di động
Cao
Thấp
Hiệu năng
Hiệu năng thấp hơn PC với cùng tầm giá, khó nâng cấp.
Cao, dễ nâng cấp
Giá thành
Cao hơn
Thấp hơn
Khả năng di chuyển
Có thể mang đi bất cứ đâu
Cố định không thể di chuyển
Pin
Trang bị pin có thể sử dụng không cần nguồn điện trực tiếp
Bắt buộc phải cắm điện trực tiếp mới dùng được
Màn hình
Màn hình nhỏ hơn PC, thường tối đa chỉ 16 inch
Nhiều kích cỡ màn hình để lựa chọn, thường nhỏ nhất là 21 inch.
Nếu bạn chỉ học lập trình cơ bản (HTML, CSS, JavaScript), một chiếc laptop với cấu hình trung bình có thể đủ đáp ứng nhu cầu của bạn. Tuy nhiên, nếu bạn định học những công nghệ yêu cầu hiệu suất cao hơn như phát triển game hay machine learning, bạn có thể sẽ cần đến một chiếc PC với cấu hình mạnh mẽ.
Ngân sách
Ngân sách là yếu tố quan trọng ảnh hưởng đến quyết định của bạn. Vai trò của giá cả không chỉ nằm ở chi phí mua mà còn ở chi phí bảo trì và nâng cấp. Thường thì, bạn có thể mua một chiếc PC có cấu hình tương đương với chi phí thấp hơn so với laptop.
Tính di động
Nếu bạn muốn học lập trình trong khi di chuyển, laptop sẽ là lựa chọn lý tưởng. Ngược lại, nếu bạn muốn có một nơi học tập ổn định và không cần di chuyển nhiều, PC có thể là sự lựa chọn hợp lý hơn.
Khả năng nâng cấp
Như đã đề cập, PC dễ dàng nâng cấp hơn nhiều so với laptop. Nếu bạn dự định giữ máy trong một thời gian dài và không muốn phải thay thế hoàn toàn, một chiếc PC có thể phù hợp hơn.
Cách chọn laptop và PC phù hợp với việc học IT
Đối với sinh viên ngành Công nghệ Thông tin, việc lựa chọn một chiếc laptop hay PC phù hợp là vô cùng quan trọng để hỗ trợ quá trình học tập và làm việc hiệu quả. Dưới đây là các tiêu chí cần xem xét khi lựa chọn máy tính, bao gồm CPU, RAM, card đồ họa và ổ cứng.
CPU
CPU đóng vai trò quan trọng trong việc đảm bảo máy tính của bạn có thể xử lý tốt các tác vụ lập trình. Để học tập hiệu quả, bạn nên chọn các CPU có hiệu suất cao như Intel Core i5 hoặc i7 thế hệ mới nhất, hoặc các CPU từ AMD như Ryzen 7. Những CPU này đủ mạnh để bạn có thể chạy mọi chương trình lập trình mới nhất mà không gặp tình trạng giật, lag. Một số CPU bạn có thể tham khảo gồm:
Intel Core i5-12600K
Intel Core i7-12700K
AMD Ryzen 7 5800X
RAM
Dung lượng RAM ảnh hưởng trực tiếp đến khả năng chạy đồng thời nhiều chương trình và ứng dụng. Đối với sinh viên CNTT, mức RAM tối thiểu là 8GB để đảm bảo máy có thể hoạt động mượt mà trong hầu hết các tác vụ lập trình cơ bản. Tuy nhiên, nếu bạn làm việc với các dự án lớn hoặc yêu cầu đồ họa nặng, hãy cân nhắc nâng cấp lên 16GB hoặc 32GB RAM để đảm bảo khả năng xử lý. Ngoài ra, tốc độ RAM cũng rất quan trọng, vì tốc độ càng cao thì khả năng truy cập dữ liệu của máy càng nhanh. Tốc độ RAM thường được đo bằng MHz (megahertz), do đó hãy chọn loại có tốc độ cao để đảm bảo hiệu suất tốt nhất.
Card đồ họa (GPU)
Mặc dù không phải lúc nào cũng cần card đồ họa mạnh cho việc lập trình, nhưng đối với những sinh viên làm việc với đồ họa, game, hay AI thì GPU chuyên dụng sẽ rất cần thiết. Một số phần mềm yêu cầu GPU để xử lý hình ảnh, giúp tăng tốc độ và hiệu suất làm việc. Các mẫu card đồ họa bạn có thể tham khảo bao gồm:
NVIDIA GeForce GTX 1650
AMD Radeon RX 5500 XT
NVIDIA GeForce RTX 3050
Những card đồ họa này không chỉ hỗ trợ tốt cho việc lập trình mà còn đáp ứng tốt các nhu cầu giải trí như chơi game hoặc xử lý đồ họa.
Ổ cứng (Storage)
Khi chọn ổ cứng, bạn nên ưu tiên loại SSD (Solid State Drive) vì nó giúp máy khởi động nhanh hơn và truy cập dữ liệu nhanh chóng hơn so với ổ cứng HDD truyền thống. SSD NVMe với tốc độ đọc/ghi vượt trội sẽ là lựa chọn lý tưởng, giúp tối ưu hóa hiệu suất hệ thống. Dung lượng tối thiểu nên là 256GB, nhưng nếu có điều kiện, bạn nên chọn 512GB hoặc 1TB để có không gian lưu trữ rộng rãi hơn cho các dự án và tài liệu học tập. Nếu bạn cần nhiều không gian lưu trữ mà vẫn muốn tiết kiệm chi phí, có thể kết hợp SSD cho hệ điều hành và ứng dụng chính, cùng HDD để lưu trữ dữ liệu.
Vậy học công nghệ thông tin nên mua laptop hay PC?
Nếu bạn cần tính di động và linh hoạt, hãy chọn laptop. Đây là lựa chọn tốt nhất cho những người học lập trình đang ở trong tình huống phải di chuyển nhiều hoặc sống ở không gian hẹp.
Nếu bạn có nhu cầu sử dụng cao hơn và không lo lắng về việc di chuyển, hãy chọn PC. Cấu hình mạnh mẽ hơn, khả năng nâng cấp linh hoạt và giá cả hợp lý hơn sẽ giúp bạn tiết kiệm hơn trong tương lai.
Nếu bạn có điều kiện tài chính và có nhu cầu sử dụng cả PC và laptop, thì tất nhiên, bạn có thể mua cả hai!
Cuối cùng, không có lựa chọn nào là hoàn hảo cho tất cả mọi người, cả laptop và PC đều có những ưu nhược điểm riêng để bạn cân nhắc lựa chọn tùy thuộc vào nhu cầu sử dụng và tài chính. Hy vọng rằng bài viết này đã giúp bạn có cái nhìn rõ ràng hơn về việc chọn laptop hay PC cho việc học lập trình.
Việc lựa chọn một chiếc laptop lập trình phù hợp với ngân sách luôn là một bài toán khó, đặc biệt là với những bạn sinh viên, freelancer hay những người mới bắt đầu sự nghiệp lập trình với mức ngân sách hạn chế. Bài viết này của TopDev sẽ giúp bạn tổng hợp những thông tin cần thiết để đưa ra quyết định sáng suốt nhất khi chọn mua laptop lập trình dưới 10 triệu đồng.
Laptop lập trình dưới 10 triệu nên chọn cấu hình như thế nào?
Để có thể đáp ứng tốt các tác vụ lập trình, một chiếc laptop cần có cấu hình ổn định, với tầm giá 10 triệu thì ta không thể yêu cầu quá cao nhưng ít nhất phải đảm bảo các tiêu chí dưới đây để có thể học lập trình ổn:
CPU: Nên chọn các dòng CPU Intel Core i3 hoặc i5 thế hệ 10 trở lên, hoặc AMD Ryzen 3 hoặc Ryzen 5.
RAM: Tối thiểu 8GB RAM, để có thể chạy đa nhiệm mượt mà và các phần mềm lập trình nặng.
Ổ cứng: Ưu tiên SSD để tăng tốc độ khởi động và truy xuất dữ liệu. Dung lượng tối thiểu 256GB.
Card đồ họa: Card đồ họa tích hợp (onboard) của Intel hoặc AMD là đủ để đáp ứng nhu cầu lập trình cơ bản. Tuy nhiên, nếu bạn có nhu cầu làm việc với đồ họa 3D hoặc các phần mềm nặng hơn, hãy cân nhắc chọn một chiếc laptop có card đồ họa rời. Tuy nhiên trong tầm giá dưới 10 triệu thì rất khó để tìm một chiếc laptop có card rời, nên cân nhắc tăng ngân sách nếu bạn thật sự có nhu cầu.
Màn hình: Nên chọn màn hình có độ phân giải Full HD trở lên để bạn có thể thoải mái làm việc vì thời lượng nhìn màn hình khi học và làm lập trình khá nhiều.
Cổng kết nối: Đầy đủ các cổng kết nối cần thiết như USB, HDMI, LAN để kết nối với các thiết bị ngoại vi.
>> Tổng hợp 30+ mẫu laptop lập trình nhiều phân khúc đáng mua nhất 2024
Danh sách laptop lập trình giá rẻ dưới 10 triệu
Laptop Acer Aspire 3 A315 58 54XF
Acer Aspire 3 A315-58-54XF là một lựa chọn đáng cân nhắc cho những ai đang tìm kiếm một chiếc laptop vừa túi tiền, hiệu năng ổn định để phục vụ cho công việc và học lập trình. Acer Aspire 3 A315 là một chiếc laptop 15.6 inch, sở hữu thiết kế đơn giản, hiện đại và trọng lượng khá nhẹ được trang bị cấu hình khá ổn định với:
CPU: Intel Core i5-1135G7, thuộc thế hệ thứ 11 Tiger Lake, đảm bảo khả năng xử lý mượt mà các tác vụ văn phòng, học tập, giải trí.
RAM: 8GB DDR4, đủ để chạy đa nhiệm nhiều ứng dụng cùng lúc, được trang bị một khe RAM nâng cấp 4GB.
Ổ cứng: SSD 512GB NVMe PCIe, giúp máy khởi động nhanh, tốc độ truy xuất dữ liệu nhanh chóng.
Màn hình: Màn hình 15.6 inch Full HD, tần số quét 60Hz
Khối lượng: 1.7 kg
Với cấu hình trên, chiếc laptop này đáp ứng tốt các nhu cầu sử dụng hàng ngày như lướt web, xem phim, làm việc với các ứng dụng văn phòng (Word, Excel, PowerPoint), lập trình với các ngôn ngữ cơ bản. So với các đối thủ cùng cấu hình, Acer Aspire 3 A315-58-54XF có mức giá khá cạnh tranh chỉ dưới 10 triệu đồng.
Lenovo IdeaPad 1 15AMN7 R5 7520U/8GB/256GB là một lựa chọn đáng cân nhắc trong phân khúc laptop giá rẻ, đặc biệt với bộ vi xử lý AMD Ryzen 5 7520U, 8GB RAM và ổ cứng SSD 256GB, máy vận hành mượt mà các tác vụ hàng ngày như lướt web và chạy ổn các ứng dụng lập trình.
Thông số kỹ thuật chi tiết:
Hệ điều hành: Windows 11 Home
Bộ vi xử lý: AMD Ryzen 5 7520U
Bộ nhớ trong: 8GB LPDDR5
Ổ cứng: SSD NVMe PCIe 256GB
Màn hình: 15.6 inch, Full HD (1920 x 1080), tấm nền TN
Card đồ họa: AMD Radeon 610M
Cổng kết nối: USB 3.2 Gen 1, USB-C 3.2 Gen 1, HDMI, jack tai nghe 3.5mm
Với tầm giá khoảng 9 triệu đồng, thật khó có model nào qua được Lenovo IdeaPad hiệu năng xử lý nhờ sử dụng chip AMD Ryzen 5 thế hệ mới. Đây là một sự lựa chọn đáng cân nhắc cho các bạn sinh viên đang tìm kiếm laptop lập trình viên giá rẻ dưới 10 triệu đồng.
Laptop HP 15S-FQ5231TU 8U241PA
HP 15S-FQ5231TU 8U241PA là một chiếc laptop 15.6 inch, được thiết kế với vẻ ngoài hiện đại, gọn nhẹ và trọng lượng vừa phải, rất phù hợp để mang theo bên mình. Máy được trang bị cấu hình ổn định, đáp ứng tốt nhu cầu làm việc văn phòng, học tập và giải trí cơ bản.
Thông số kỹ thuật chính:
Màn hình: 15.6 inch, Full HD (1920 x 1080 pixels), tấm nền IPS
Bộ vi xử lý: Intel Core i3-1215U
Bộ nhớ RAM: 8GB DDR4
Ổ cứng: SSD 256GB PCIe NVMe
Đồ họa: Intel UHD Graphics
Hệ điều hành: Windows 11 Home
Kết nối: Wi-Fi 6, Bluetooth 5.1, USB-C, USB-A, HDMI, jack tai nghe 3.5mm
Pin: 3 cell, thời lượng sử dụng khá tốt
Trọng lượng: Khoảng 1.69 kg
Tuy chỉ có chip core i3 nhưng với thế hệ gen thứ 12 khá mới hiện nay, HP 15S-FQ5231TU 8U241PA đủ thực hiện các tác vụ cơ bản để lập trình, là một lựa chọn đáng cân nhắc nếu bạn đang tìm kiếm một chiếc laptop gọn nhẹ, hiệu năng ổn định và giá cả phải chăng. Hiện nay model HP 15S-FQ5231TU 8U241PA đang có giá chỉ 9-10 triệu đồng.
Laptop ASUS VivoBook Go 14 E1404FA-NK113W
ASUS VivoBook Go 14 E1404FA-NK113W là một chiếc laptop 14 inch, sở hữu thiết kế hiện đại, mỏng nhẹ và màu sắc trẻ trung, đây là một trong những mẫu laptop được ưa chuộng hiện nay, đặc biệt phù hợp với các bạn học lập trình đang tìm kiếm mẫu laptop giá rẻ dưới 10 triệu. Máy được trang bị cấu hình khá ổn định với:
CPU: AMD Ryzen 3 7320U, thuộc thế hệ mới của AMD, đảm bảo khả năng xử lý mượt mà các tác vụ văn phòng, học tập, giải trí.
RAM: 8GB LPDDR5, đủ để chạy đa nhiệm nhiều ứng dụng cùng lúc.
Ổ cứng: SSD 256GB NVMe PCIe, giúp máy khởi động nhanh, tốc độ truy xuất dữ liệu nhanh chóng.
Màn hình: Màn hình 14 inch Full HD, viền màn hình siêu mỏng, mang đến trải nghiệm hình ảnh sống động.
Bàn phím và touchpad của Asus Vivobook Go 14 E1404FA-NK113W cũng được thiết kế tốt, cứng cáp phù hợp cho các coder.
Những chiếc laptop Asus luôn nổi bật với vẻ ngoài thanh lịch và hiện đại, mặc dù với mức giá chỉ dưới 10 triệu đồng Vivobook Go 14 E1404FA-NK113W cũng được trang bị vẻ ngoài rất đẹp mắt với bề mặt kim loại tạo cảm giác chắc chắn và sang trọng.
Laptop ASUS ExpertBook B1 B1502CBA-NJ1261W
Tiếp theo trong danh sách laptop lập trình viên giá rẻ dưới 10 triệu đồng lại là một sản phẩm từ nhà Asus. ASUS ExpertBook B1 B1502CBA-NJ1261W là một chiếc laptop được thiết kế đặc biệt, cấu hình mạnh mẽ và các tính năng hữu ích, chiếc laptop này sẽ là người bạn đồng hành đắc lực trong công việc hàng ngày của bạn.
Cũng tương tự như những model trước, ASUS ExpertBook B1 B1502CBA-NJ1261W có thông số kỹ thuật đáp ứng yêu cầu cơ bản để lập trình, chi tiết:
Bộ vi xử lý: Intel Core i3-1215U thế hệ 12, mang đến hiệu năng xử lý nhanh chóng, mượt mà cho các tác vụ văn phòng, lập trình cơ bản.
Bộ nhớ: 8GB RAM DDR4, đủ để chạy đa nhiệm nhiều ứng dụng cùng lúc.
Ổ cứng: SSD 256GB NVMe PCIe
Màn hình: Màn hình 15.6 inch Full HD, độ sáng 250 nits, chống lóa, góc nhìn rộng, mang đến trải nghiệm hình ảnh sống động.
Hệ điều hành: Windows 11 Home, giao diện thân thiện, dễ sử dụng.
Bàn phím gõ êm, touchpad rộng rãi, hỗ trợ các cử chỉ đa điểm, mang đến trải nghiệm nhập liệu thoải mái.
Giá bán hiện tại của chiếc laptop này tất nhiên cũng chỉ dao động từ 9-10 triệu, nếu bạn muốn nâng cấp lên core i5 hay i7 thì chỉ cần thêm từ 3 đến 5 triệu đồng.
Laptop Dell Vostro 3520 F0V0VI3
Cuối cùng trong danh sách là một ứng cử viên đến từ nhà Dell. Với bộ vi xử lý Intel Core i3-1215U thế hệ mới, kết hợp cùng RAM 8GB DDR4, Dell Vostro 3520 F0V0VI3 đảm bảo hiệu năng mạnh mẽ, xử lý đa nhiệm mượt mà các tác vụ văn phòng, học tập và giải trí. Ổ cứng SSD 512GB PCIe tốc độ cao không chỉ giúp máy khởi động nhanh chóng mà còn rút ngắn thời gian truy xuất dữ liệu, tăng hiệu suất làm việc.
Màn hình Full HD 15.6 inch sắc nét, sống động, mang đến trải nghiệm hình ảnh tuyệt vời cho người dùng. Bàn phím được thiết kế khoa học, hành trình phím hợp lý, tạo cảm giác thoải mái khi thao tác.
Tóm tắt thông số kỹ thuật:
Bộ vi xử lý: Intel Core i3-1215U thế hệ 12
Bộ nhớ RAM: 8GB DDR4
Ổ cứng: SSD 512GB NVMe PCIe
Màn hình: 15.6 inch Full HD
Hệ điều hành: Windows 11 Home được cài đặt sẵn theo máy
Dell Vostro 3520 F0V0VI3 là một lựa chọn đáng cân nhắc trong tầm giá dưới 10 triệu đồng để sở hữu chiếc laptop lập trình ổn định.
Việc chọn mua laptop lập trình dưới 10 triệu đòi hỏi bạn phải cân nhắc kỹ lưỡng về nhu cầu sử dụng, ngân sách và các yếu tố kỹ thuật. Hy vọng rằng bài viết này của TopDev đã cung cấp cho bạn những thông tin cần thiết để đưa ra quyết định đúng đắn.
Bài viết được sự cho phép của tác giả Nguyễn Hoàng Phú Thịnh
Đã bao giờ anh em thắc mắc: Product trong ngành công nghệ là gì? Nó khác gì với các “software” thông thường? Và ranh giới giữa một thứ được xem là “product” và một thứ “chỉ-được-xem-là-software” là gì 🙂 ?
Chả hiểu bằng một ma lực nào đó mà thời gian qua, các câu hỏi này cứ liên tục trôi nổi trong đầu mình. Nay mình note ra vài thứ (có thể xem là) trải nghiệm cá nhân về 2 khái niệm: productvà software này.
Hi vọng có dịp cùng anh em chém gió, đàm đạo sôi nổi về topic này 😎
Product vs Software
Nói theo ngôn ngữ marketing thì “Product is anything that can be offered to the market that satisfied a want or need“.
Anything ở đây có thể là vô hình hoặc hữu hình. Hữu hình như cái chén, cái muỗng, cái dĩa. Đến những thứ vô hình như: tour du lịch, excel, bữa ăn tối tại nhà hàng, hay dịch vụ sửa xe…
Bài note này mình chỉ nói đến các “digital products”, tức những thứ như: Excel, Mương14, Facebook, hay các game như PUBG mà anh em vẫn đang chơi hằng ngày.
Với định nghĩa này thì product và software có vẻ không khác gì nhau. Nhưng thực tế nếu nhìn theo khía cạnh “quality of service“ thì sự khác biệt ở đây là cả… 1 bầu trời nghệ thuật.
Mình lấy Momo ra làm ví dụ.
Mình dùng app này cũng khá lâu rồi. Nhưng Momo chưa từng làm một người dùng cuối như mình thấy thất vọng. Có vẻ hơi dễ dãi nhưng sự thật là mình chưa-từng-một-lần phàn nàn khi sử dụng sản phẩm này.
Với trải nghiệm cá nhân, quả không gì bằng một công cụ tiện lợi, mượt mà. Và luôn là một cái gì đó, có thể khiến người dùng “wow” mỗi khi sử dụng.
Momo không còn đơn thuần chỉ là một “tool dùng để thanh toán” khi cần. Mà hơn hết nó đã trở thành 1 “sản phẩm” cho nhu cầu tài chính cá nhân mọi lúc, mọi nơi và tại mọi thời điểm (câu này nghe giống quảng cáo vãi ae :)) ).
Thường khi rảnh tay anh xem sẽ có thói quen mở Facebook lên lướt lướt đúng không. Có tin được không khi thi thoảng rảnh rỗi mình lại có thói quen mở… Momo để lướt xem các chương trình khuyến mãi. Thay vì mở Facebook để lướt?!?!
Cả 2 hành vi này đều đem lại “phần thưởng” cho mình là được cập nhật thông tin ngay tức thời.
Nhưng để một người dùng bình thường như mình làm điều này một cách rất tự nhiên và mang lại được một cảm xúc tích cực, thì anh em có thể thấy team Momo đã làm quality of service cho sản phẩm của mình tốt như thế nào.
Quay lại các software mà anh em đang làm, những sản phẩm này thường “sống tốt” được ở những môi trường nào?
Software
Thường khi outsource hoặc làm phần mềm cho một khách hàng nào đó, end-user sẽ được gói gọn trong một tệp người khá rõ ràng.
Có nhiều yếu tố, nhưng mình chỉ muốn nói đến 2 yếu tố khác biệt rõ nhất giữa 1 software và 1 product đó là:
Số lượng người dùng
Và môi trường sử dụng
Tại một thời điểm nhất định, số lượng người dùng sẽ được giới hạn ở một con số nào đó. Thường khách hàng có thể có 20, 50, hoặc cả trăm người dùng. Con số có thể nhiều hơn, nhưng chắc chắn vẫn trong tầm ước lượng và kiểm soát của anh em.
Còn các yếu tố liên quan đến môi trường sử dụng của end-users có thể như:
Thiết bị họ dùng: nào là yêu cầu phần cứng, hệ điều hành, màn hình các kiểu…
Hoặc đơn giản như việc end-users phải được training đầy đủ, bài bản, quành tráng thì mới có thể sử dụng được phần mềm của anh em.
Khi đã rõ 2 điều trên, anh em sẽ đỡ vả hơn rất rất nhiều trong việc maintain khi đưa phần mềm vào sử dụng thực tế. Mặc dù sự thật khá phũ là “làm xong” phần mềm đã là 1 câu chuyện đau đớn, đưa vào sử dụng còn đớn đau hơn gấp bội.
Đó là câu chuyện của việc cho ra đời một software thông thường. Còn với product thì sao?
Product
Hoàn toàn khác. Chắc chắn nó là một câu chuyện hoàn toàn khác.
Làm product, mọi thứ sẽ vô định hơn nhiều so với việc anh em làm một software có scope rõ ràng.
Số lượng end-users? Anh em sẽ phải luôn trong thế chuẩn bị cho các trường hợp khẩn cấp: lượng users sử dụng tăng cao, tăng đột biến..., bất kể lễ lộc hay weekend.
Còn nói về môi trường sử dụng thì là một câu chuyện dài, rất dài.
Đã là Product thì anh em sẽ phải quăng sản phẩm của mình vào scope đúng nghĩa của chữ “market”.
Tức sản phẩm của anh em phải sẵn sàng để sống tốt trong một thứ gọi là “the real world”. Nơi mọi thứ oái ăm, lạ đời nhất hoàn toàn đều có thể diễn ra.
Sự thật 169% là anh em sẽ không tài nào lường trước được end-users họ sẽ làm gì với cái apps của mình.
Sẽ có một nghìn lẻ một trường hợp người dùng không thao tác theo luồng mình nghĩ đến từ đầu. Mà sẽ theo một cái luồng oái ăm nào đó. Mặc dù nghe vô lý nhưng lại rất thuyết phục.
…
Hồi đó mình có làm một sản phẩm giúp các bạn Đại lý đi tuyển nhân viên bán hàng.
Toàn bộ quy trình đầu đến cuối đều được làm online hết. Trong đó có đoạn: bạn ứng viên phải làm 1 bài đánh giá tính cách, xem thử bạn có thật sự phù hợp với công việc này hay không.
Bài trắc nghiệm đơn giản chỉ là một web page, ứng viên sẽ nhận link bài đánh giá qua email >> mở ra >> làm.
Thực tế là bài đánh giá khá dài. Vừa trả lời trắc nghiệm, lẫn trả lời tự do. Và vì được code khá lâu, trên một nền tảng cũ nên bài trắc nghiệm này không responsive trên trình duyệt web được. Tức người dùng phải mở bằng laptop để có được “trải-nghiệm-đúng-nhất”.
Nhưng cái mắc cười là: hầu như 90% ứng viên (những người dùng rất bình thường trong cái gọi là “the real world” kia) lại làm bài trắc nghiệm trên… điện thoại.
Và anh em thử tưởng tượng một web page không responsive, nhập liệu cả chục cái free text, và chỉ có 1 nút Submit lẻ loi chật vật hiển thị giữa một rừng cả mấy chục fields, trên cái màn hình điện thoại vỏn vẹn chỉ tầm 4-5 inch!?!?! Chưa kể còn không submit kết quả được trên trình duyệt Safari 9 trở về trước…
Rõ ràng những thứ “ngó bộ hiển nhiên” nhưng lại bị bỏ qua một cách “rất tự nhiên” như vầy thì quality of service là một con số 0 tròn trĩnh.
Một sai lầm rất đáng trách của người làm câu chuyện phân tích & thiết kế như mình. Hoặc các anh em đang play role BA/ PO cho sản phẩm của mình.
Và sự thật là sản phẩm của anh em cần phải được quăng vào thế giới thực tế. Và PHẢI được dùng bởi người dùng thực tế ngoài kia, thì “khả năng hoàn thiện sản phẩm” mới tốt dần lên được.
Cùng đồng ý một điều là sẽ không có bất cứ sản phẩm công nghệ nào đạt được mức độ hoàn thiện ngay từ NHỮNG lần build đầu tiên cả. Cái gì cũng vậy, cần thời gian để cải thiện và nâng cấp dần dần.
Nhưng mấu chốt là anh em cần có FEEDBACK từ người dùng thì mới có thể làm được sự “cải thiện, và nâng cấp dần dần” đó. Và xuyên suốt quá trình lấy feedback từ người dùng, cái khó nhất vẫn luôn là: làm sao để họ chịu dùng sản phẩm của mình.
Nhưng…
Một thực trạng là anh em sẽ rất hay bị dí deadline trong môi trường các công ty outsource. Nào là khách hàng ép, dự án rush, nhu cầu gấp. Nói chung đụng đâu cũng thấy… nước sôi đổ tới háng hết. Dẫn tới timeline của anh em bị bóp nghẹt không thương tiếc.
Thử hỏi “làm xong” còn chưa kịp huống chi nói đến chuyện “làm đẹp”. Nó giống kiểu: anh em đang làm bài kiểm tra mà mắc ị vậy.
Và cứ vậy, project này qua project khác, software này qua software khác, nó cứ như một nùi tả pí lù. Cứ “xong” theo kiểu bị dí, bị ép. Shit của ông này cứ chồng lên shit của ông khác, and so on, you know….
Chưa kể những dự án enhancement hay migration. Tức làm trên cái có sẵn, rồi cải tiến lên phù hợp với new biz hoặc technology nào đó.
Ver1 đã tệ, thì với cách làm cũ dù có làm thêm thì cũng chỉ là một cục tệ ver2 khác. Tức là trước chỉ có 1 cục, giờ ghép vào thành 2 cục tệ, what da fuck???
Ngoài ra, làm product là gắn liền với sự cải tiến liên tục.
Sẽ có chặn bắt đầu, nhưng thường không có chặn kết thúc như khi anh em làm các project outsource thông thường. 500 anh em sẽ phải liên tục theo dõi quá trình sử dụng của người dùng. Đưa ra những cải tiến kịp thời và phù hợp với thị trường hay chiến lược của sản phẩm.
Và thị trường hay nhu cầu của biz thì luôn thay đổi, thậm chí thay đổi từng giờ, từng ngày. Nên sẽ không bao giờ có chuyện “làm xong dự án” khi anh em làm product.
Nói gì nói anh em sẽ phải luôn gắn liền cuộc sống của mình với sản phẩm mình làm.
Nghĩa là, sản phẩm mà có shit, thì anh em vẫn là người hốt. Dù có lấp liếm được đến đâu đi chăng nữa, thì sau cùng vẫn chính là mình. Chính mình là người đi dọn những đống shit đó.
Cho nên?
Do it one time, do it right
Vì không có thời gian nên anh em phải hết sức cố gắng làm chuẩn ngay từ đầu. Bất kể anh em có làm một product triệu đô, hay đơn thuần đang outsource một software thông thường đi chăng nữa.
Khái niệm “chuẩn” của mỗi người là khác nhau. Nhưng chắc chắn, quality của “chuẩn” nó sẽ HƠN NHIỀU so với “tàm tạm để test”, hay “vầy là ổn rồi”, hay “kệ m* nó đi vầy là được rồi!!!”
Nếu làm đúng ngay từ đầu, anh em sẽ đỡ tốn thời gian quay lại chỉnh sửa. Đó là nguyên lý.
Một function dù khó cỡ nào, nếu cố gắng phân tích đúng ngay từ đầu, thì nỗ lực sửa, fix bugs là rất ít.
Đặc biệt, công việc của người làm phân tích & thiết kế như BA mà sai ngay từ đầu, thì rất dễ đẩy công sức của 500 anh em xuống biển. Đã không có thời gian, nay còn tự bóp mình. Kịch bản rất dễ đẩy các anh em vào con đường phạm pháp, quynh đệ tương tàn…
Làm việc có tâm, sâu sắc hơn một chút
Thêm một ý nữa là dù ít hay nhiều, hãy để tâm hơn một xíu ngay trong quá trình làm sản phẩm của mình. Dù cho anh em có đang outsource “theo đơn đặt hàng” cho một software nào đó.
Chúng ta, Biz Analyst, hay Dev, hay thậm chí cả QC khi design, build hay test một tính năng nào đó, HÃY LUÔN cố gắng đặt mình vào thế của người dùng cuối.
Dù biết thế giới này đã có rất nhiều yếu tố thọt vào đít anh em mỗi sớm thức dậy: deadline, sếp chửi, khách hàng dí, thằng chung team làm ẩu xém toang tám chục lần, vâng vâng và mây mây.
Nhưng hãy cố quan tâm đến góc nhìn của người dùng được chừng nào, hay chừng đấy.
Nếu vẫn thấy app mình ổn, quay sang dòm mấy cái app đang nổi, rồi quay lại dòm app mình lần nữa, thấy sao anh em :)))
Đầu bếp nấu một món theo công thức có sẵn mà không quan tâm đến thực khách là ai, khẩu vị ra sao thì chắc chắn: món đó chỉ dừng ở mức “có thể ăn” của thực khách. Hoàn toàn không để lại ấn tượng hay feelings tốt đẹp gì về món đó cả. Thậm chí vài ngày sau là quên bà nó mất mình đã từng ăn món đó ở chỗ này.
Tạm kết
Trên là vài dòng suy nghĩ vu vơ về một software thông thường và một product. Nó như kiểu giữa một chiếc xe chạy được, và phiên bản hoàn chỉnh của chiếc xe đó vậy.
Theo đó là ranh giới vô cùng mong manh, nhưng cũng là cả một bầu trời khác biệt nếu nhìn theo góc độ quality of service.
Với một software làm ra mà mình vô cùng tâm huyết, mình hay nói vui với anh em là “nâng tầm product” cho software đó 🙂 Nói trắng ra là hoàn chỉnh sản phẩm hơn mỗi ngày. Để sản phẩm ngày càng tiệm cận đến mức độ hoàn thiện cao nhất mà nó có thể.
Một lần nữa, nói vậy nhưng thực tế sẽ luôn gặp trở ngại để làm được như vậy. Cái THÚ ở đây là nằm ở khả năng luồng lách vượt trở ngại của anh em, để hoàn thiện sản phẩm được đến mức nào mà thôi.
Chúc anh em may mắn, mình đi lấp liếm fix bugs tiếp đây, baiiii.
Trong kỷ nguyên số, công cụ tìm kiếm đã trở thành một phần không thể thiếu trong cuộc sống của chúng ta. Google đã trở thành công cụ tìm kiếm thống lĩnh thị trường trong nhiều năm qua. Tuy nhiên, sự xuất hiện của SearchGPT, một công cụ tìm kiếm mới dựa trên trí tuệ nhân tạo (AI), đang hứa hẹn sẽ mang đến một cuộc cách mạng trong lĩnh vực này. Cùng TopDev tìm hiểu thật cặn kẽ về SearchGPT và có khác biệt nổi bật nào so với Google Search không nhé.
SearchGPT là gì?
SearchGPT là công cụ tìm kiếm sử dụng trí tuệ nhân tạo (AI) được phát triển bởi OpenAI – ra mắt chính thức vào 25/7/2024. Khác với các công cụ tìm kiếm truyền thống chỉ đơn thuần liệt kê các liên kết, SearchGPT sử dụng công nghệ AI để hiểu sâu hơn về ý định của người dùng và cung cấp các câu trả lời trực tiếp, tổng hợp từ nhiều nguồn thông tin khác nhau.
SearchGPT có khả năng truy vấn thông tin theo thời gian thực, truy cập được link gốc, tăng độ tin cậy của kết quả trả về.
Ngay sau khi SearchGPT ra mắt cổ phiếu công ty Alphabet (công ty mẹ của Google) bốc hơi 3% – tương đương hơn 60 tỷ USD, nhìn vào đây ta đủ thấy SearchGPT là một đối thủ đáng gờm mà Google phải dè chừng.
Những tính năng nổi bật của SearchGPT
SearchGPT, với sự kết hợp tinh tế giữa công nghệ tìm kiếm truyền thống và trí tuệ nhân tạo tiên tiến, đã tạo nên một bước đột phá trong việc truy xuất thông tin. Dưới đây là những đặc điểm nổi bật làm nên sự khác biệt của công cụ này:
Độ chính xác của thông tin cao
Search GPT được xây dựng trên mô hình LLM hiện đại nhất của Open AI hiện tại là GPT-4. Vì vậy nguồn tài nguyên sẽ không bị giới hạn và lấy được những thông tin mới nhất theo thời gian thực tế.
Để tránh vấn đề “ảo giác AI” mà cái AI model hiện tại đang mắc phải thì Search GPT kết nối với các nhà xuất bản, bản tin, cơ quan truyền thông bằng cách trích dẫn nội dung và gắn đường dẫn liên kết đến các bài báo.
Khả năng hiểu sâu ý định người dùng
Không chỉ đơn thuần là một công cụ tìm kiếm các từ khóa, SearchGPT có khả năng hiểu ngữ cảnh một cách sâu sắc. Công cụ này có thể nắm bắt được ý nghĩa ẩn sau câu hỏi, thậm chí cả những câu hỏi phức tạp, đòi hỏi sự suy luận logic và tổng hợp thông tin đa chiều. Nhờ đó, người dùng có thể đặt câu hỏi một cách tự nhiên, gần gũi với ngôn ngữ giao tiếp hàng ngày.
Cung cấp câu trả lời toàn diện và trực quan
Thay vì liệt kê một danh sách dài các liên kết như Google search, hay chỉ đưa ra câu trả lời được tổng hợp bằng AI, SearchGPT tổng hợp thông tin từ nhiều nguồn đáng tin cậy để đưa ra một câu trả lời ngắn gọn, súc tích và dễ hiểu và có gắn thêm nguồn tham khảo để tăng độ tin cậy và tính xác thực của thông tin. Ngoài văn bản, công cụ này còn có khả năng trình bày kết quả dưới dạng hình ảnh, video, đồ thị, giúp người dùng tiếp cận thông tin một cách trực quan và sinh động hơn.
Khả năng học hỏi và phát triển không ngừng
SearchGPT được xây dựng trên nền tảng của các thuật toán học máy tiên tiến, cho phép công cụ này tự học và cải thiện khả năng hiểu ngôn ngữ và cung cấp thông tin chính xác qua thời gian. Nhờ đó, SearchGPT ngày càng trở nên thông minh hơn và đáp ứng tốt hơn nhu cầu của người dùng. Nếu bạn bắt đầu và đang thảo luận về điện thoại iPhone của Apple thì những truy vấn tiếp theo SearchGPT sẽ tự hiểu được Apple đang nhắc đến là hãng điện thoại chứ không phải quả táo.
Việc ra mắt SearchGPT không chỉ là bước đột phá của OpenAI mà còn đặt ra thách thức lớn đối với Google, cùng xem hai công cụ tìm kiếm này có điểm gì khác nhau trong bảng tổng hợp dưới đây:
Tính năng
Google Search
SearchGPT
Cách thức hoạt động
Liệt kê các liên kết đến các trang web có liên quan
Hiểu ý định của người dùng và cung cấp câu trả lời trực tiếp
Kết quả tìm kiếm
Các trang web
Câu trả lời tổng hợp, các đoạn trích văn bản, liên kết đến các trang web có liên quan
Giao diện
Đơn giản, tập trung vào các liên kết
Thân thiện hơn, giao diện dạng chat, tăng tính tương tác.
Công nghệ
Dựa trên thuật toán PageRank và Machine Learning để xếp hạng các trang web.
Sử dụng AI để hiểu ngữ cảnh, trả lời câu hỏi phức tạp
Độ chính xác thông tin
Cung cấp thông tin cập nhật và chính xác hơn nhờ vào việc thu thập dữ liệu liên tục
Phụ thuộc vào thông tin đầu vào của model, có thể không cập nhật thông tin mới nhất
Khả năng xử lý
Không thể trả kết quả đúng với những truy vấn phức tạp.
Xử lý được dễ dàng các câu hỏi phức tạp và có thể giải thích chi tiết hơn nữa.
Cách sử dụng Search GPT đơn giản nhất
Hiện tại, Search GPT đang chỉ là phiên bản dạng “nguyên mẫu” và có khoảng 10,000 người dùng được đăng ký trải nghiệm sản phẩm. Hiện tại số lượng người trải nghiệm đã đủ, ở đây TopDev vẫn sẽ hướng dẫn các bước sử dụng SearchGPT dựa vào thông tin được publish bởi Open AI.
Bước 1: Bạn có thể vào website: chatgpt.com/search để đăng nhập hoặc đăng ký (nếu bạn đã có tài khoản chatGPT, có thể đăng nhập bằng tài khoản này)
Bước 2: Sau khi đăng ký thành công, bạn đăng nhập vào tài khoản đã được xác nhận trên website SearchGPT.
Bước 3: Nhập truy vấn vào ô “What are you looking for?” và nhấn Enter để đi đến kết quả tìm kiếm
Bước 4: Search GPT sẽ trả lại kết quả đã được AI tóm tắt từ những nguồn uy tín kèm theo nguồn link gốc của thông tin.
Bước 5: Bạn có thể tiếp tục hỏi thêm những thông tin chuyên sâu về chủ đề tìm kiếm trong chatbox tại ô “Ask a follow-up…”.
Dù hiện tại SearchGPT chỉ là một nguyên mẫu thử nghiệm tuy nhiên với những tính năng nổi bật như đã nêu trên chắc hẳn SearchGPT sẽ là một mô hình tìm kiếm bằng AI được nhiều người dùng ưa chuộng. Sự ra mắt của SearchGPT cũng đánh dấu thêm một bước ngoặt quan trọng trong cuộc cạnh tranh khốc liệt giữa OpenAI và Google. Theo dõi TopDev để cập nhật những tin tức mới nhất về công nghệ bạn nhé!
Bài viết được sự cho phép của tác giả Nguyễn Thành Nam
Nếu bạn đang định xây dựng tính năng để tính toán khoảng thời gian tương đối (như “sau 3 ngày nữa”, “4 tháng trước”, “1 phút trước”) mà không cần sử dụng thư viện bên ngoài?
Trong bài viết này, chúng ta sẽ tìm hiểu về Intl.RelativeTimeFormat, một tính năng để định dạng thời gian tương đối (hỗ trợ nhiều ngôn ngữ) trong JavaScript.
I. Giới thiệu về Intl.RelativeTimeFormat
Intl.RelativeTimeFormat là một phần của bộ công cụ quốc tế hóa (i18n – Internationalization) trong JavaScript. Nó cho phép bạn định dạng các khoảng thời gian tương đối (như “sau 3 ngày nữa”, “4 tháng trước”, “1 phút trước”) một cách dễ dàng và chính xác. Đặc biệt nó có hỗ trợ hiển thị nhiều ngôn ngữ khác nhau và bạn cũng không cần sử dụng thư viện bên ngoài để xử lý.
Tại sao nên sử dụng Intl.RelativeTimeFormat?
Hỗ trợ đa ngôn ngữ:Intl.RelativeTimeFormat hỗ trợ nhiều ngôn ngữ (bao gồm cả tiếng việt).
Đơn giản và dễ sử dụng: Đối tượng này cung cấp các phương thức để định dạng thời gian tương đối mà không cần phải tự viết các chức năng phức tạp.
Đảm bảo tính chính xác: Định dạng chính xác và phù hợp với ngữ cảnh văn hóa của từng ngôn ngữ.
II. Cách sử dụng Intl.RelativeTimeFormat
⚡️ Tạo đối tượng Intl.RelativeTimeFormat
Để sử dụng Intl.RelativeTimeFormat, bạn cần tạo một đối tượng mới từ lớp này. Dưới đây là cú pháp cơ bản:
Một số câu hỏi thường gặp khi sử dụng Intl.RelativeTimeFormat (FAQs)
Intl.RelativeTimeFormat là gì? Intl.RelativeTimeFormat là một API trong JavaScript cho phép định dạng thời gian tương đối cho nhiều ngôn ngữ khác nhau.
Làm thế nào để tạo đối tượng Intl.RelativeTimeFormat? Bạn có thể tạo đối tượng bằng cách sử dụng cú pháp new Intl.RelativeTimeFormat('vi', { numeric: 'auto' }).
Có thể sử dụng Intl.RelativeTimeFormat cho những đơn vị thời gian nào? Intl.RelativeTimeFormat hỗ trợ các đơn vị thời gian như giây, phút, giờ, ngày, tuần, tháng, quý, và năm.
Các tùy chọn định dạng của Intl.RelativeTimeFormat là gì? Các tùy chọn bao gồm numeric (always, auto) và style (long, short, narrow).
Có thể kết hợp nhiều tùy chọn khi sử dụng Intl.RelativeTimeFormat không? Có, bạn có thể kết hợp các tùy chọn để đạt được định dạng mong muốn cho từng ngữ cảnh cụ thể.
VII. Kết luận
Intl.RelativeTimeFormat là một công cụ mạnh mẽ và dễ sử dụng để định dạng thời gian tương đối trong JavaScript. Bằng cách hỗ trợ nhiều ngôn ngữ và cung cấp các tùy chọn định dạng linh hoạt, nó giúp việc quốc tế hóa ứng dụng của bạn trở nên dễ dàng hơn. Hãy thử áp dụng Intl.RelativeTimeFormat vào dự án của bạn và trải nghiệm sự tiện lợi mà nó mang lại!
Hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách sử dụng Intl.RelativeTimeFormat trong JavaScript.
Mình từng gặp một trường rất trớ trêu: dự án đã đóng rồi, hợp đồng thì cũng đã thanh lý, nhưng mình cứ bị kẹt vô thế nửa nạc nửa mỡ.
Số là dự án đã qua 3 tháng bảo hành và đã đóng hoàn toàn dựa trên hợp đồng. Nhưng khách hàng thì cứ ỡm ờ. Lúc thì nói muốn ký gói bảo hành một năm, lúc thì không thấy đá động phản hồi gì hết.
Mà oải cái là anh chàng Contact Point bên khách hàng cứ lâu lâu nhắn mình, nhờ support cái này, cái kia.
Về lý, team mình không việc gì phải tiếp tục support. Nếu muốn support, khách hàng phải ký hợp đồng Maintenance, không nói nhiều.
Về tình, team mình không thể nói không support, vì còn phải giữ mối quan hệ cho những deal sau này (rất có thể là những deal lớn). Đặc biệt là khi họ đang nửa nạc nửa mở nói muốn ký tiếp hợp đồng Maintenance. Nghĩa là miếng ăn đang cận kề trước mặt…, nên không nỡ phũ được.
Nếu tạm bỏ qua các quyết định về lãi lỗ (vì có thể ký hợp đồng maintenance nhưng team mình vẫn lỗ), thì dưới vai trò BA, anh em sẽ giải quyết vấn đề này như thế nào?
Rõ ràng anh em phải ra quyết định đúng không nào: Support hay không support, không support hay support nói một lời.
Ngoài ra, anh em vẫn có thể raise lên để mấy sếp giải quyết. Quyết định nào cũng có cái lợi, cái hại. Nó tùy thuộc vào anh em. Kỹ năng ra quyết định của mình là ở chỗ này.
Dự án sau đó có êm hay không, mọi người có còn happy với nhau hay không chính là nằm ở những quyết định của mình trong dự án.
Như mình, mình không thích ỡm ờ, nhưng vì “một lý do nào đó”, khách hàng không rõ ràng, hoặc “không muốn rõ ràng”. Tuy nhiên, nếu khách hàng muốn nửa nạc nửa mỡ, thì mình cũng sẽ nửa nạc nửa mỡ. Thích ba rọi, thì có ngay ba rọi.
Những điểm nào mình có thể trả lời ngay, “low_energy”, thì mình hoàn toàn có thể support họ. Còn những vấn đề khác phức tạp hơn, đòi hỏi “high_energy” hơn thì mình sẽ tìm cách từ chối khéo.
Và mình cũng sẽ linh động từng case, theo khả năng có thể phát sinh thêm những issue khác. Cố gắng triệt để những vấn đề này. Vì nếu có ký maintenance thì team mình cũng sẽ là bên phải giải quyết.
Nên dù gì người được lợi nhất vẫn là cả khách hàng và team dự án mà thôi 🙂
Đây chỉ là cách để mình dung hòa mối quan hệ và lợi ích của 2 bên. Và nó có khoảng thời gian nhất định, chứ không thể kéo dài suốt được. Đặt một hạn chót, và cho khách hàng “chỉ được ỡm ờ” tối đa trong khoảng thời gian này. Sau thời gian này, mọi thứ cần phải rõ ràng.
…
Trên là ví dụ điển hình gần đây nhất mình gặp phải. Còn anh em gặp trúng những ca củ chuối nào, kể bên dưới còm men nhé.
Rõ ràng là xuyên suốt dự án có rất nhiều trường hợp mà anh em BA phải ra quyết định một mình.
Kỹ năng giải quyết vấn đề thì luôn đi kèm với kỹ năng ra quyết định. Còn việc ra quyết định thì luôn đi kèm với hai chữ “trách nhiệm” 🙂
Đừng để người khác phải đổ vỏ cho những quyết định của mình, meo meo…
Mỗi quyết định đưa ra đều dẫn đến một cánh cửa nào đó.
Cửa dẫn dự án đến đích có, dẫn xuống vực cũng có. Một lần nữa, đi cánh cửa nào là tùy vào kinh nghiệm và khả năng chịu khó quan sát, học hỏi của chính bản thân mình.
Nên làm để rèn luyện
✅ Chịu khó quan sát, hỏi người khác vì sao họ lại làm như vậy.
✅ Xông pha nhận các dự án mới, task mới.
✅ Dám làm những cái mới >> dễ sai >> dám nhận trách nhiệm >> học cái sai >> có kinh nghiệm >> lần sau quyết định đỡ sai hơn.
✅ Nên có mentors cho mình.
✅ Tập hỏi 5 Whys cho các vấn đề cá nhân thường ngày.
✅ Chịu khó đọc sách(học được nhiều câu từ, cách diễn giải hay >> tăng khả năng ăn nói, diễn đạt hiệu quả hơn).
✅ Suy nghĩ kỹ trước khi nói. Đặc biệt là những anh em hay hấp tấp như mình, và cả những anh em hay nóng tính.
✅ Tải game Plant vs. Zombies 2, Clash Royale, Football Manager… về chơi, hoặc các game puzzle, chiến thuật khác >> tăng khả năng tư duy logic, dàn xếp đội hình.
✅ Tập vẽ mind map.
✅ Ngủ sớm, dậy sớm >> tỉnh táo hơn >> quyết định sáng suốt hơn >> vấn đề được giải quyết tốt hơn.
✅ Ăn trái cây nhiều >> tránh lão hóa, tăng đẹp chai, cu te, tăng độ minh mẫn, suy nghĩ thấu đáo hơn.
✅ Chơi đá banh, nhảy dây, bắn thun các kiểu…, miễn là thể thao lành mạnh.
1.5. System Thinking
Kỹ năng cuối cùng trong nhóm Analytical Thinking đó là System Thinking 😎
System Thinking nghĩa là Tư duy hệ thống.
Tư duy hệ thống là khi mình hiểu và nhìn nhận vấn đề trên một góc nhìn tổng quan nhất. Để khi có một vấn đề phát sinh, tư duy hệ thống sẽ giúp chúng ta hầu như tự động nhìn nhận được những thứ bên trong hoặc những thứ liên quan đến đối tượng đó, mà có thể bị tác động. Từ đó tính toán hay làm gì tiếp là tùy vào anh em.
Như mình có note ở bài Bí kíp chân truyền của BA, cái quan trọng nhất là mình nhìn bất kỳ một hệ thống nào dưới góc độ các components và relationship giữa chúng với nhau.
Tư duy này giúp ích anh em BA rất nhiều trong quá trình làm dự án.
Ví dụ ngay lúc đầu, chúng ta vẽ ABCDEFGH để làm. Tầm 3 tháng sau, khách hàng thay F bằng K ==> vấn đề bắt đầu phát sinh.
Nếu không có tư duy hệ thống, chúng ta sẽ rất mịt mờ, và thường không có khuynh hướng cân nhắc xem thử:
Rút ông F ra, thế ông K vào thì nó sẽ ảnh hưởng gì tới những ông A, B, C, D, E, G, H còn lại.
Và ảnh hưởng gì tới nguyên cụm ABCDEFGH ban đầu?
Đây là việc anh em phải làm rất thường xuyên với bất kỳ change request nào, dù to hay nhỏ.
Do đó, những ai có tư duy hệ thống sẽ có khuynh hướng phân tích điều này một cách tự nhiên, đầy đủ và rõ ràng hơn bao giờ hết.
Sau cùng thì, những gì mình phân tích được sẽ giúp ích cho chính chúng ta.
Nên, tư duy theo hướng hệ thống là tốt, nhưng không phải là thứ bắt buộc, vì đâu ai kiểm chứng được là anh đã tư duy hệ thống hay chưa!?!?
Stakeholders chỉ quan tâm: có vấn đề mới nảy sinh đó, giờ BA nó trả lời như vầy, team nó xử lý như vầy ==> rồi kết qua đem lại có đáp ứng đúng kỳ vọng các bên hay không?
==> Người ta chỉ quan tâm kết quả sau cùng mà thôi.
Nên chuyện tư duy có tổng quát hay không không ai kiểm chứng được ngay, mà người ta chỉ dựa vào kết quả làm được.
Nên khi có vấn đề phát sinh, thường thì BA (đặc biệt là mình) sẽ có khuynh hướng “skip” qua bước này. Đặc biệt là lúc bị Mr. Deadline dí sát đít. Vì lo mà cắm đầu làm cho xong chứ ngồi đó tư duy với chả hệ thống@79mahf*#mjd@@….
Do đó qua bài note này, hi vọng anh em sẽ chú ý hơn về khoản này để tránh phiền hà về sau 🙂
…
Có những thứ tưởng như nhỏ nhặt nhưng phiền phức vô cùng.
Như trường hợp mình gặp: khách hàng đòi đổi một trường dữ liệu từ Option Set sang Multi Option Set. Cấu trúc dữ liệu thay đổi, chấp nhận. Nhưng đó chưa phải ác mộng.
Cái kinh khủng nhất là những report có dính tới field đó.
Lúc mình làm thì hệ thống không query data theo dữ liệu Multi Option Set được, nên không thể visualize lên report. Buộc phải dùng một field text trung gian >> copy giá trị trên field Multi Option Set đó ra field text >> rồi mới query data dựa tên field text này.
Và team phải làm như vầy cho… toàn bộ những field Option Set liên quan tới field mà khách hàng thay đổi, đắng lòng…
Do đó, nếu BA nhìn nhận vấn đề chưa đầy đủ, chưa thấy được những khía cạnh hoặc các thành tố khác có thể bị tác động ==> anh em team nhà sẽ rất dễ bị bóp.
Và quan trọng trên hết, anh em phải trang bị đủ kiến thức thì mới có được một góc nhìn bao quát và đầy đủ nhất được.
Nên làm để rèn luyện
✅ Phải trao đổi mọi thứ thật rõ ràng với team nhà trước khi confirm bất cứ thứ gì với khách hàng.
✅ Luôn phản hồi, nói cho người khác hiểu anh em đang nghĩ gì trong các buổi họp >> mọi người sẽ xem xét góc nhìn đó đã bao quát hay chưa, hay còn phiến diện quá. ==> Đi họp đừng có im im, ngồi rung đùi từ đầu tới cuối buổi nhé anh em (anh em tìm hiểu thêm về Thinking Out Loud)
✅ Đọc nhiều về lĩnh vực, sản phẩm mình đang làm.
✅ Quan sát xem những senior thường nghĩ gì khi có vấn đề phát sinh.
✅ Đa phần mọi người sẽ suy nghĩ rất phiến diện ==> thử suy nghĩ ngược 180 độ với hướng suy nghĩ của họ ==> anh em sẽ suy nghĩ bao quát hơn (ít nhất là so với người đó).
✅ Hằng ngày, đi ăn bún bò, hủ tiếu, đi uống cà phê, mua trà sữa, hoặc thấy cô lao công chùi nhà vệ sinh, hãy chú ý nhiều hơn tới quy trình công việc của họ.
✅ Tải game ăn cặp Pokemon, hoặc các game tìm điểm chung ==> tăng độ nhạy trong việc nhận diện điểm giống nhau ==> khả năng phát hiện ra các pattern trong đời sống xung quanh sẽ cao hơn.
✅ Lâu lâu thử tìm điểm chung giữa những phần mềm có trong trong điện thoại, giữa các loại xe máy trên đường, hoặc giữa mấy đứa bạn trẻ trâu xung quanh mình, xem thử những thứ đó có đặc tính gì giống nhau hay không.
2. Communication
Cuối cùng cũng đến, đó là nhóm các kỹ năng về giao tiếp 😎
Thường anh em sẽ chỉ chú ý đến chuyện giao tiếp qua đường nói thôi. Nhưng thực ra còn những khoản khác mình cũng cần chú ý như sau.
2.1. Verbal
Đầu tiên là đường nói.
Rõ ràng anh em BA chúng ta cần đường nói rất nhiều. Từ lúc elicit requirement, đến lúc trao đổi nội bộ, làm việc với đồng bọn ở nhà.
Nói không ai hiểu, coi như tèo.
Nói người ta hiểu sai ý, cũng tèo.
Nói một ý, nhưng phải diễn tả đi diễn tả lại 8 tỷ lần người ta mới hiểu, cũng tèo luôn.
Nói ẩn dụ nhiều quá, người ta tưởng mình đá đểu, cũng tèo luôn.
Đi cà phê với anh em, nói chuyện nhạt quá, không ai thèm chơi, thèm nói chuyện với mình ==> tèo của tèo luôn.
Đi lấy requirement, không dẫn dắt được buổi workshop, nội dung đi lệch hướng ==> tèo nguyên buổi workshop.
Gặp vấn đề, biết root cause ở đâu, thậm chí biết luôn cách giải quyết cho máu, nhưng không thể nào giải thích cho đồng bọn hiểu ==> cả đám cùng tèo.
…
Và còn hàng ngàn những ví dụ khác, mà khi anh em không giao tiếp tốt bằng đường nói, sẽ rất là ác mộng với người làm BA.
Có 2 điểm mình thấy rất quan trọng đối với đường nói, đó là: Âm điệu và Âm lượng.
Âm điệu của giọng nói là tiếng trầm bổng của giọng mình nói
Âm lượng của giọng nói là mình nói có nhỏ xí, lí nhí trong miệng không, hay mình nói to, rõ ràng…
Mình thấy 2 điều này là cực kỳ quan trọng. Vì nó phần nào sẽ giúp anh em thu hút được sự chú ý của người nghe.
Anh em thử để ý trong các buổi meeting, sẽ có những người nói mà chả có ma nào nghe. Những thanh niên này nói một hồi thì bà con mới để ý là… người đó đang nói.
Ngược lại, có những người, mà vừa mới mở miệng ra nói vài chữ, là đã thu hút được sự chú ý của đông đảo quần chúng nhân dân rồi.
Sự khác biệt do đâu?
Có thể người đó rất xịn xò mà ai cũng nể. Có thể là sếp, sếp của sếp, vợ của sếp, ghệ của sếp, vâng vâng.
Nhưng ngoài những yếu tố “nho nhỏ” trên thì theo mình quan trọng nhất vẫn nằm ở âm điệu và âm lượng của giọng nói.
Tuy nhiên, không phải cứ nói to, trầm, mạnh mẽ là sẽ thu hút được mọi người.
Mình có quen chị kia, hễ chỉ nói là đùng cái mọi người chú ý liền. Lạ lùng vậy đó. Mà được cái là chỉ nói không to, thậm chí là có phần hơi nhỏ, nhưng khi chỉ nói thì lại có sức hút lạ lùng.
Ngoài nội dung có giá trị cho người khác, thì đâu đó mình tin rằng âm điệu và âm lượng góp phần nhiều tạo nên “hiệu ứng thu hút” hiệu quả như vầy.
Nên làm để rèn luyện
✅ Phải tranh-thủ-từng-tí-cơ-hội-một để thuyết trình, nói chuyện trước đám đông. Đám càng đông, càng nguy hiểm >> càng tốt (vì đám đông sẽ phản hồi lại, chém lại, ném mắm tôm sầu riêng lại những gì anh em nói ==> anh em sẽ tập dần cách đỡ, cách phản hồi, và quan trọng nhất là cách xử lý của mình sẽ ngày một tốt hơn)
✅ Chịu khó đi hát ka ra ô kê với đồng bọn. Chú ý tập hát lấy hơi từ bụng, anh em sẽ hát khỏe hơn, nguy hiểm hơn, và lòe được nhiều người hơn 😎
✅ Đi cà phê thì chịu khó nói chuyện, chém gió với nhau ==> tập hình thành lối diễn giải, và cân bằng ngữ điệu của mình cho phù hợp.
✅ Tập phát âm rõ, chữ nào hay ngọng thì nói chậm lại.
✅ Đi present cho khách hàng, có run quá thì phải NÓI CHẬM lại. Vì bản năng mình khi run sẽ auto bắn rất nhanh, nhưng không, cần phải chậm lại.
✅ Sáng dậy chịu khó chạy bộ, hoặc đi làm chịu khó leo thang bộ ==> tập thở, điều phối cách lấy hơi cho đều, cho khỏe.
✅ Và sau tất cả, một trong những điều quan trọng nhất để nói tốt là phải…
2.2. Listening
Listening – lắng nghe người khác.
Nãy là mình nói tốt rồi, giờ thì mình phải nghe tốt. Làm BA mà nghe ẩu là dễ dính chưởng lắm. Vì có những cái, tưởng như đơn giản, mà nếu không nghe kỹ thì là một mớ hầm bà lằng trong đó.
Chưa kể nếu làm với khách hàng nước ngoài, partner nước ngoài, chắc gì mình đã hiểu rõ những yêu cầu (và cả những ý đồ, mong muốn đằng sau lời họ nói).
Do đó, nguyên tắc của BA là cứ phải xác nhận lại những gì mình nghe, để đảm bảo rằng: mình nghe đúng những gì đối phương diễn giải.
Anh em đừng lo. Nếu có thanh niên nào phàn nàn kiểu như: ơ thằng này cùi bắp, tiếng anh, tiếng em cùi bắp, gì mà cứ hỏi tới hỏi lui, rồi xác nhận tới lui tùm lum tùm la…. Thì cứ kệ bà nó.
Mình cứ xác nhận lại cho chắc những gì mình nghe đi cái đã. Công việc của mình, mình cứ làm, không cần quan tâm bố con thằng nào ồn ào hết.
Vì nếu nghe không cẩn thận, hiểu sai ý, thì những gì mình phản hồi lại sẽ rất trớt quớt, khi đó thì càng tệ nữa. Khách hàng sẽ nghĩ sai về mình. Sau này làm việc còn khó hơn.
Chưa kể, nghe ẩu – hiểu sai ==> sẽ mang về một mớ thông tin đầy rẫy sự nguy hiểm cho đồng bọn đang ngóng trông ở nhà. Lúc đó vô dự án càng teooooo nữa.
Nên gì đi chăng nữa thì hãy nhớ: Listening một cách đàng quàng, cẩn thận, và luôn luôn phản hồi lại để đảm bảo mình hiểu đúng ý người nói.
Mindful Listening: Lắng nghe một cách chuyên tâm nhất – phiên bản tàu khựa (Nguồn ảnh: Pinterest/JohnDonaldson14)
Có thể anh em sẽ quen với hình trên. Bà con đồn nhau rằng: chữ “lắng nghe” tiếng Trung rất có ý nghĩa, bởi vì nó là sự kết hợp của:
Lắng nghe đơn thuần,
Kết hợp suy nghĩ,
Kèm theo quan sát,
Không thể thiếu sự tập trung – tôn trọng người nói,
Và cảm nhận bằng cả trái trym.
Sau cùng, lắng nghe tốt là cội nguồn của cả nhóm kỹ năng Giao tiếp này.
Nên làm để rèn luyện:
✅ Những buổi workshop quan trọng, hãy luôn ghi âm để về nghe lại ==> tránh nghe sót, nghe sai ý (nhưng nhớ xin phép bà con trước nhé anh em).
✅ Luôn phản hồi lại nếu mình không chắc về những gì nghe được.
✅ Mạnh dạn nói: “Tiếng Anh tao không được tốt lắm, vui lòng nói chậm giúp tao”. Khi mình làm việc với các Support Partners của Microsoft, mình toàn miss, hiểu sai ý nó. Nó hỏi A, mình đi cắm đầu trả lời B, rất nhiều và rất nhiều lần như vậy.
Và khi mọi thứ được chậm lại, công việc sẽ dễ dàng hơn cho cả hai. Đặc biệt là khi nói chuyện với những accent mà anh em nghe không quen (như Ấn, Mexico, hay Bồ Đào Nha chẳng hạn…)
✅ Nếu trao đổi qua điện thoại, hoặc online meeting, hãy luôn đảm bảo là sẽ có người ghi Meeting Minutes sau cuộc trao đổi. Vì nói qua điện thoại, hay online meeting sẽ khó nghe hơn rất nhiều ==> nên có biên bản để đảm bảo mọi người cùng đi chung một hướng.
.
.
.
Tập 2 tạm kết tại đây. Nếu có phản hồi gì thì anh em cứ còm men bên dưới cho mình biết nhé 🙂
Bài viết được sự cho phép của tác giả Nguyễn Hoàng Phú Thịnh
Thời gian qua có nhiều anh em hỏi mình về ngành MIS. Và đặc biệt là câu hỏi: sau này ra trường, làm BA thì cần có những kỹ năng – kiến thức chuyên ngành như thế nào???
…
Do đó, như lời giới thiệu ở trên, chuỗi bài này mình sẽ note về chủ đề: những kỹ năng cần có của một người làm công việc Business Analyst.
Là một bài khá fundamental, nhưng cũng là dịp để bản thân mình dòm lại: thật sự BA cần có những kỹ năng nào, và liệu mình đã có đủ hết những kỹ năng đó hay chưa.
Bắt đầu thôi nào!
Tổng quan một chút
Trong bất kỳ ngành nghề nào, chúng ta đều cần tới: Kiến thức và kỹ năng cần có của ngành nghề, công việc đó.
Business Analyst cũng vậy, sẽ có:
Nhóm các Kiến thức chuyên môn – Knowledge Areas (có thể hiểu là kỹ năng cứng).
Và nhóm các Kỹ năng cần thiết – Underlying Competencies (có thể hiểu là kỹ năng mềm).
List dài những kỹ năng dưới đây là mình tham khảo từ BABOK v3.0. Nhìn khá dài và chuối, nhưng anh em khoan hẳn hoang mang, vì mình sẽ cố gắng đưa nó về sát thực tế nhất cho anh em dễ hình dung.
Nếu đọc có gì không ổn, chưa rõ, hoặc cần thảo luận thêm thì cứ quăng mình cái boong, à nhầm, quăng mình cái còm men để tăng tính tương tác nhé anh em.
Ô keiii, lét sờ gâu anh em eiiii 😎
1. Analytical Thinking
Đầu tiên là nhóm kỹ năng về Tư duy phân tích.
“Tư duy phân tích” nghe thì có vẻ hơi đao to búa lớn, nhưng thực tế anh em cứ hình dung vầy cho đơn giản. Mấu chốt nằm ở từ phân tích, nên hiểu “phân tích” như thế nào cho thực tế nhất.
“Phân tích đơn giản là sắp xếp & phân loại mọi thứ lại cho đẹp đẽ, sạch sẽ mà thôi 🙂 “
Từ một BA Manager nọ
…hoặc
“Analysis means simply breaking down the information of an object, entity, process, or anything else to understand its functioning“
Sandhya Jane – Author of Business Analysis: The Question and Answer book
Mục đích sau cùng của việc phân tích là để mình hiểu được cái mình phân tích, hiểu được bản chất vấn đề.
Còn “tư duy” là hoạt động của hệ thần kinh, giúp chúng ta nhìn nhận những thứ xung quanh mình. Từ đó định hướng cho các hành động phù hợp hơn, hiệu quả hơn với tình huống mà mình đang gặp.
Vậy nên, người có tư duy phân tích là người có thiên hướng sắp xếp và phân loại các tiểu tiết của vấn đề, để qua đó: hiểu được bản chất của vấn đề.
Và 5 thứ sau đây sẽ giúp hình thành nên tư duy phân tích của anh em.
1.1. Conceptual & Visual Thinking
Trong bối cảnh Business Analyst, tư duy phân tích thể hiện rõ ở hai mặt: Conceptual và Visual.
Conceptual là góc nhìn theo hơi hướng trừu tượng – khái quát vấn đề
Còn Visual là góc nhìn mang hơi hướng trực quan – dùng hình ảnh cụ thể để mường tượng rõ vấn đề.
Khi làm việc với khách hàng, nói về concept chung của phần mềm có thể sẽ gây bối rối cho khách hàng. Vì họ chưa hình dung được nó là cái gì. Mọi thứ vẫn còn chung chung và trừu tượng quá.
Thay vào đó, việc demo ngay các chức năng có trên phần mềm sẽ khiến khách hàng dễ hình dung hơn (đó là Visual)
Visual thinking cho phép khách hàng “nhìn được”, “tưởng tượng được” và “ánh xạ” hình ảnh đó ngay trong đầu.
Visual Thinking
Nói về Visual Thinking thì đây là thứ anh em sẽ rất-rất-rất cần khi làm BA.
Vì có nhiều thứ mình sẽ rất khó để hình dung rõ vấn đề. Đặc biệt là các vấn đề quá sâu về chuyên môn, như chuyện coding chẳng hạn.
Chưa kể anh em còn phải giải thích, document lại cho các bên hiểu rõ vấn đề đang gặp phải.
Khi trao đổi với anh em đì ve lốp pơ, sẽ có những thuật ngữ, mà nếu mình chưa từng tận tay làm thực tế, thì thề luôn, là hầu như rất khó để mường tượng, và hiểu nó một cách “bản chất nhất”.
Nó nằm ở cả quá trình lấy yêu cầu với khách hàng. Ví dụ những thứ như API, Web Service… Hai thứ này thật sự rất khó gặm với những ai chưa làm thực tế bao giờ.
Những thứ thư: nhận và gửi data như thế nào, hay những hạn chế của những “available API” ảnh hưởng đến solution requirement ra sao???
Tất cả những thứ này sẽ gây rất nhiều khó khăn cho anh em nếu không hiểu rõ nó.
Đối với những trường hợp khá là trừu tượng như vầy thì hãy nhờ đến Visual Thinking.
Hãy nhờ một chuyên gia về khái niệm, lĩnh vực đó, diễn tả lại cho anh em hiểu thông qua… hình vẽ.
Vẽ là thứ rất quan trọng với anh em BA mình. Khi mọi thứ đã được phác thảo rõ ràng ra về hình ảnh, thì bản chất vấn đề sẽ dần lộ diện.
Mấu chốt là vẽ như thế nào cho hiệu quả. Cái này thì rõ ràng cần phải học và tích lũy rất nhiều.
Conceptual Thinking nghĩa là tư duy theo hơi hướng trừu tượng, bao quát vấn đề.
Trừu tượng nghĩa là tổng quát hóa một cái gì đó, không cần care chi tiết bên trong nó có gì. Và thường thì bà con vẫn hiểu khái niệm trừu tượng đó khi chúng ta nói ra. Vì trừu tượng là thứ dựa trên một hình tượng nào đó, và được hình dung trong đầu.
Cái này có vẻ lạ. Thường thì khi trừu tượng quá, khó hiểu quá thì mình mới cần áp dụng Visual Thinking để mọi thứ được phác thảo ra rõ ràng, để dễ mường tượng hơn.
Vậy thì ngược lại, Conceptual Thinking – tư duy theo hướng trừu tượng thì được dùng khi nào?
Đó là khi anh em cần nhìn vấn đề dưới bức tranh tổng quan. Để xác định được các component chung nhất trong bức tranh tổng quan đó. Và relationship giữa chúng với nhau.
Ví dụ trong giai đoạn pre-sales, anh em thường phải gặp những người là C-Level bên phía khách hàng. Mà đã là C-Level rồi thì góc nhìn của họ thường rất bao quát và trừu tường.
Họ luôn nhìn bài toán từ trên cao, và đó phải là cách tiếp cận của BA khi làm việc với những người này.
Mình từng bị dập tơi bời không biết bao nhiêu lần khi cứ nói detail thế này thế kia với “nhầm đối tượng”.
Cách tiếp cận chỉ là một chuyện. Nếu anh em không suy nghĩ bao quát, tổng quát hóa, sẽ rất khó để hiểu được ý đồ thật sự mà khách hàng mong muốn.
…
Cuối cùng, Conceptual Thinking và Visual Thinkingthường phải đi chung, và bổ trợ cho nhau. Không phải cứ tổng quát hóa là không cần visualize, mà hễ visualize thì không được visualize một bức tranh tổng quát.
Vậy chốt lại, để rèn luyện được Tư duy phân tích, anh em cần có Tư duy tổng quát hóa và Tư duy bằng hình ảnh🙂
Nên làm để rèn luyện
✅ Đọc thêm về Design Thinking.
✅ Tập vẽ bằng bút, tập thể hiện ý đồ bằng nét vẽ của mình.
✅ Tập vẽ mind map.
✅ Đọc bộ Hình vẽ thông minh của Dan Roam (hiểu cách ổng dùng hình ảnh để giải quyết vấn đề như thế nào)
✅ Chịu khó quan sát(cả top-down và bottom-up)
✅ Tập làm Power Point, thể hiện ý tưởng bằng hình vẽ trên Power Point.
✅ Tập present trước đồng bọn.
✅ Thử nghe một câu chuyện phức tạp nào đó, rồi thể hiện lại bằng hình ảnh cho người khác hiểu.
1.2. Creative & Innovative
Tiếp theo là Creative và Innovative. Cả 2 đều kiểu kiểu sáng tạo, nhưng nó khác nhau ở chỗ:
Creative là biết làm, biết cách để làm, nói về cách làm, thường nghiêng về smart, tiếng Việt dịch là SÁNG TẠO.
Còn Innovative nghĩa là nghĩ khác, tạo ra cái mới, cách làm mới, là sáng tạo của sáng tạo, tiếng Việt dịch là ĐỘT PHÁ.
Và dĩ nhiên, dù có sáng tạo hay đột phá thứ dữ cỡ nào thì cũng phải mang lại kết quả tích cực; chứ hổng có sáng tạo tầm bậy tầm bạ.
Mình cũng không ít lần phát sinh “ý tưởng vĩ đại” để update dữ liệu của khách hàng, theo kiểu bulk update. Nghĩa là update nguyên cục. Và cũng không ít lần ôm mỏ máo khi làm tầm bậy tầm bạ.
Cứ tưởng sáng tạo để tiết kiệm thời gian, mà ai dè còn tốn thời gian hơn cả chục lần để đi đổ đống vỏ mình gây ra, đắng lòng…
Nhiều lúc overload với đống công việc theo kiểu hành chính, hoặc update dữ liệu khá thủ công. Chúng ta cần tìm ra cách làm cho nhanh, cho hiệu quả. Dù có hỏi người này, người kia, tự mình google, hay tự mình nghĩ ra thì cũng đều rất cần thiết cho công việc BA hằng ngày.
Nó giúp chúng ta tiết kiệm được thời gian, để tập trung vào cái cần thiết hơn, và tạo ra được nhiều kết quả hơn.
Nên làm để rèn luyện
✅ Chịu khó đọc chuyên mục các mẹo (tips) của các tools hay dùng như Office365, Draw.IO, Jira…
✅ Chú ý quan sát, copy cách người khác làm.
✅ Bản thân mình tự thử nhiều cách khác nhau để làm một cái gì đó (mặc dù có thể fail, tốn thời gian hơn, nhưng ít nhất cũng biết được vài cách không thành công. Và đặc biệt là bản thân mình dạn hơn, dám thử nhiều cái mới hơn)
✅ Nên tracking những task mình làm trong ngày(để đo lường được hiệu quả >> cuối ngày xem lại >> tìm cách nâng cao hiệu suất).
✅ Có một chỗ ghi note thật nhanh trên điện thoại. Có ý tưởng một phát là rút điện thoại ra, rẹt rẹt, ghi âm lại liền. Hoặc chỉ cần 2-3 chạm là đã nhập ý tưởng được rồi.
✅ Lâu lâu đi lòng vòng nói chuyện với đồng bọn để refresh. Sẵn xem thử đồng bọn có gì hay không để về bắt chước.
✅ Đặt deadline cho các task mình làm >> càng gấp >> càng dễ nghĩ cách khác làm nhanh hơn.
1.3. Problem Solving
Chắc chắn không chỉ BA, mà ai cũng cần kỹ năng này hết, kỹ năng giải quyết vấn đề.
Kỹ năng này cần xuyên suốt mọi lúc mọi nơi. Từ lúc chưa có dự án, tới lúc làm dự án. Thậm chí đóng dự án rồi mà vẫn còn một đống vấn đề phát sinh cần giải quyết.
Người có kỹ năng giải quyết vấn đề tốt là người nhạy với các thông tin nhận được.
Giả dụ khi mình nhận được thông tin, về một vấn đề cần phải giải quyết đi chẳng hạn. Là ngay lập tức trong đầu mình xác định được ngay vấn đề đang gặp là vấn đề gì. Hoặc chí ít nhìn nhận được nó thuộc khía cạnh, lĩnh vực nào, liên quan tới mình không, liên quan nhiều hay ít, abc, xyz...
Vì thực sự trong quá trình làm dự án sẽ có rất nhiều “problem” xảy ra. Nhỏ có, to có, bự chà bá cũng có.
Là người “đầu mối thông tin”, hầu như anh em BA sẽ phải can thiệp đến 96,69% các vấn đề xảy ra.
Từ những thứ nho nhỏ như sắp tới hạn deliver rồi mà anh em đì ve lốp pơ cứ nghỉ liên tục, cả team bị pending không ăn nhậu được gì. Hoặc tới deadline rồi mà khách hàng vẫn chưa chịu gửi master data, vâng vâng…
Cho đến những thứ mệt não hơn như: đang lúc demo cho khách hàng mà server ở nhà bị… tụt bà nó, không connect zô được.
Đây là trường hợp mình gặp rất nhiều, nội kể lại không cũng thấy ớn ớn.
Lần đó đi khách hàng cũng toàn nhân vật thứ dữ. Mặc dù đã nhắn nhủ anh em ở nhà là ráng support tốt, để anh em ra chiến trường demo cho suôn sẻ. Thì y như rằng, lần nào cũng có chuyện.
Lần đó có một ông Marketing Director. Khi đi tới phần nói về Social Listening, tích hợp với Facebook thì ổng có vẻ khoái. Vì trước giờ chưa có partner nào show cho ổng xem được cái này. Và thực sự business của họ đang rất có nhu cầu về khoản này.
Một phần cũng tự tin vì giải pháp mà team đã chuẩn bị. Phần khác vì thấy ổng khoái nên mình chém khá cao hứng.
Đến hồi quan trọng nhất: “bây giờ em sẽ demo cho anh xem ví dụ cụ thể mà bên em đã chuẩn bị cho bên mình”.
Nghe vậy ổng khoái lắm, gật đầu lia lịa.
Cái ai dè, login vô hệ thống bị failed, báo lỗi thiếu quyền các kiểu. Lúc này mình cũng hơi tái táiii. Nhờ anh PM chém gió câu giờ, mình ping về nhà nhờ anh em Dev support.
Mà hình như anh em đang vi vu đâu đó, gọi cháy máy không được. Thấy sốt ruột quá, nghĩ bụng: “chết mẹ rồi, lỡ chém mạnh quá mà không show được gì thì hố chết...”
Hồi sau anh em gọi lại, đưa cho cái account khác, thử login nhưng vẫn failed. Thử vào trình duyệt ẩn, vẫn failed.
Thôi thì cũng đã hơn 20 phút trôi qua, bèn dùng phương án B. Show hình, thay cho live demo. May hôm trước có nghe lời anh PM, chịu khó screenshot trước vài tấm sơ cua, hú vía.
…
Với những trường hợp gặp sự cố với khách hàng như vậy, mình nghĩ sẽ thiên nhiều về kinh nghiệm chinh chiến của anh em.
Còn những thứ trao đổi nội bộ với nhau, để cùng giải quyết 1 vấn đề nào đó thì có phần thiên nhiều về soft skills của mình hơn (dĩ nhiên là kinh nghiệm dự án cũng rất quan trọng).
Có những người khi gặp vấn đề, họ sẽ cứ phang phang vào mình, nói đủ thứ trên trời dưới đất, búa lua xua hết.
Nhiệm vụ của mình là cần phải bình tĩnh lại>> từ từ nhìn nhận đâu là vấn đề cốt yếu mà người đó đang gặp.
Cái này rất khó, vì khi gặp những thứ mà anh em không phải chuyên môn, như những term về kỹ thuật đi chẳng hạn. Hoặc có quá nhiều thông tin chồng chéo nhau, mother of phức tạp của phức tạp. Thì cái cần ở đây là mình phải đủ bình tĩnh và tỉnh táo dể nhận diện vấn đề.
Khi đã hiểu vấn đề, anh em mới nghĩ tới phương án giải quyết.
Có thể có nhiều phương án, nhưng việc chọn phương án nào là tốt nhất ở thời điểm hiện tại mới là quan trọng. Mỗi phương án nó đều mở ra 1 cánh cửa mới.
Và không bao giờ có công thức chung cho từng hoàn cảnh cụ thể.
Cùng tình huống đó, nhưng ở bối cảnh A, con người A’ thì giải quyết khác. Nhưng với bối cảnh B, và con người B’, thì lại phải giải quyết khác.
Nên khoản này đòi hỏi anh em phải chú ý quan sát nhiều. Học hỏi và gặp nhiều sự cố thì sẽ rèn luyện được kỹ năng này.
Ngoài ra, kỹ năng Giải quyết vấn đềsẽ luôn đi kèm với một thứ quan trọng không kém, đó là…
Việc lựa chọn một chiếc laptop phù hợp cho việc học Công nghệ Thông tin (CNTT) là điều rất quan trọng, đặc biệt là với sinh viên hoặc người mới bắt đầu. Với ngân sách dưới 15 triệu, có rất nhiều sự lựa chọn tuyệt vời giúp bạn có thể lập trình và làm việc hiệu quả. Trong bài viết này, chúng ta sẽ cùng tìm hiểu những tiêu chí cần xem xét khi mua laptop và điểm qua danh sách các mẫu laptop học CNTT dưới 15 triệu tốt nhất.
Tiêu chí lựa chọn cấu hình laptop lập trình dưới 15 triệu
Trước khi đi vào danh sách laptop học lập trình dưới 15 triệu nên chọn mua, chúng ta phải xác định rõ một chiếc laptop học lập trình thì nên sở hữu những đặc điểm, thông số kỹ thuật nào.
Dưới đây là những yếu tố cơ bản bạn cần xem xét khi chọn mua laptop để học lập trình:
Bộ vi xử lý (CPU)
CPU là trái tim của bất kỳ máy tính nào. Đối với lập trình, bạn cần một chiếc laptop có bộ vi xử lý đủ mạnh để xử lý các tác vụ đa nhiệm và chạy các phần mềm phát triển như Visual Studio, Android Studio hoặc Eclipse một cách mượt mà. Trong tầm giá dưới 15 triệu, các CPU như Intel Core i5 hoặc AMD Ryzen 5 là lựa chọn phù hợp.
Bộ nhớ RAM
RAM quyết định khả năng xử lý đa nhiệm của laptop. Để học lập trình, tối thiểu bạn cần một máy tính có 8GB RAM. Nếu có thể, hãy tìm những mẫu laptop có khe cắm hỗ trợ nâng cấp RAM, nếu máy không thể nâng cấp thì nên chọn tối thiểu 16GB.
Ổ cứng SSD
Những chiếc laptop trong tầm giá 15 triệu hiện nay đa số đều đã trang bị ổ cứng SSD thay vì ổ cứng HDD truyền thống, mang lại tốc độ truy xuất dữ liệu nhanh hơn rất nhiều.
Với việc học tập lập trình, bạn nên chọn laptop có ổ SSD ít nhất 256GB để đảm bảo dung lượng lưu trữ đủ cho các tài liệu học tập và phần mềm.
Card đồ họa (GPU)
Đối với sinh viên học CNTT, một chiếc laptop có card đồ họa rời không quá cần thiết trừ khi bạn làm việc nhiều với đồ họa hoặc lập trình game.
Màn hình
Màn hình là yếu tố quan trọng giúp bạn làm việc thoải mái trong thời gian dài. Kích thước màn hình 14 inch hoặc 15.6 inch với độ phân giải Full HD (1920 x 1080) là lý tưởng để làm việc và học tập.
Dưới đây là tóm tắt các tiêu chí cơ bản để lựa chọn laptop lập trình dưới 15 triệu:
CPU
Tối thiểu là core i5
RAM
Từ RAM 8GB trở lên, nên có khe nâng cấp
Ổ cứng
Tốt nhất từ SSD 256GB
Màn hình
Chuẩn Full HD
Card đồ hoạ
Cần thiết nếu bạn học lập trình game
Danh sách laptop dưới 15 triệu phù hợp học lập trình
Dưới đây là danh sách 8 mẫu laptop tốt nhất dưới 15 triệu, phù hợp cho việc học lập trình và các nhu cầu học tập khác.
Laptop Dell Precision 3560 – Intel Core i5-1135G7
Dell Precision 3560 là một trong những dòng laptop workstation nổi bật của Dell, được thiết kế dành cho các tác vụ chuyên dụng như lập trình, thiết kế đồ họa, và kỹ thuật. Với bộ vi xử lý Intel Core i5-1135G7, đây là sự lựa chọn tuyệt vời cho những người dùng cần hiệu suất ổn định trong một thiết kế mỏng nhẹ và bền bỉ.
Cấu hình chi tiết:
CPU: Intel Core i5-1135G7 (4 lõi, 8 luồng, xung nhịp cơ bản 2.4 GHz và tối đa 4.2 GHz).
RAM: 8GB DDR4, có thể nâng cấp lên 32GB.
Ổ cứng: SSD 256GB, cho tốc độ truy xuất dữ liệu nhanh.
Card đồ họa: Intel Iris Xe Graphics tích hợp, đủ để xử lý đồ họa cơ bản và chạy các phần mềm lập trình.
Màn hình: 15.6 inch Full HD (1920 x 1080), mang đến hình ảnh sắc nét.
Pin: Pin 4-cell 64 Wh, thời lượng sử dụng kéo dài từ 8 đến 10 giờ tùy vào tác vụ.
Trọng lượng: Khoảng 1.59 kg, tương đối nhẹ so với các dòng máy workstation.
Giá thành: Hiện laptop Dell Precision 3560 đang có giá tầm 11-12 triệu cho phiên bản chip core i5, nếu bạn nâng cấp lên phiên bản core i7 thì sẽ cộng thêm khoảng 2 triệu đồng.
Dell Latitude 7420 – Intel Core i5-1145G7
Dell Latitude 7420 là một trong những mẫu laptop doanh nghiệp cao cấp của Dell, nổi bật với thiết kế mỏng nhẹ, tính di động cao, và hiệu năng mạnh mẽ. Được trang bị bộ vi xử lý Intel Core i5-1145G7 thế hệ thứ 11, Latitude 7420 mang đến khả năng xử lý mạnh mẽ, tiết kiệm năng lượng và khả năng bảo mật cao, phù hợp cho cả người dùng doanh nghiệp và cá nhân cần một thiết bị mạnh mẽ, linh hoạt trong công việc. Ngoài ra, với thiết kế thời thượng và trọng lượng nhẹ, đây là lựa chọn lý tưởng cho những người thường xuyên di chuyển.
Thông số kỹ thuật chi tiết của Dell Latitude 7420:
Cảm ứng, 14 inch FHD (1920 x 1080), WVA, 250nits, NTSC 45%, 60Hz, Anti-Glare
Pin
3-cell, 42 WHr
Trọng lượng
Khoảng 1.31 kg
Với màn hình chất lượng, hiệu suất mạnh mẽ, và các tính năng bảo mật tiên tiến, đây là một trong những lựa chọn hàng đầu trong phân khúc laptop học CNTT dưới 15 triệu. Hiện laptop Dell Latitude 7420 Core i5-1145G7 likenew (hiện model này đã ngưng sản xuất hàng mới) đang được bán với giá dao động từ 12-14 triệu, tùy cửa hàng và chương trình ưu đãi.
Tiếp theo cũng là một con máy đến từ hãng Dell, dòng Inspiron, Dell Inspiron 15 3530 – Intel Core i5-1335U, là mẫu laptop tầm trung được thiết kế dành cho người dùng phổ thông, sinh viên và nhân viên văn phòng với nhu cầu sử dụng đa dạng. Được trang bị bộ vi xử lý Intel Core i5-1335U thế hệ 13, máy cung cấp hiệu suất mạnh mẽ cho các tác vụ hàng ngày như lướt web, soạn thảo văn bản, và tất nhiên cũng phù hợp để viết code và chạy chương trình.
Cùng tham khảo thông số kỹ thuật chi tiết của Dell Inspiron 15 3530:
15.6 inch Full HD (1920 x 1080), LED, chống chói, 120Hz 250 nits
Pin
Pin 3-cell 41 Whr
Trọng lượng
Khoảng 1.65 kg
Với ưu điểm là thiết kế sang trọng, Dell Inspiron 15 3530 là một lựa chọn tuyệt vời cho người dùng cần một chiếc laptop màn hình lớn, hiệu năng ổn định với giá cả phải chăng chỉ khoảng 13-15 triệu đồng.
Laptop Acer Aspire 3 A315
Acer Aspire 3 A315 là một trong những sản phẩm mới nhất của Acer trong phân khúc laptop Acer Aspire tầm trung. Được trang bị bộ vi xử lý Core i5-1235U, laptop này sẽ mang đến hiệu suất xử lý mạnh mẽ cho các tác vụ hàng ngày. Bạn có thể thực hiện các tác vụ đa nhiệm mượt mà và nhanh chóng. Một trong những ưu điểm của chiếc laptop này đó là thời lượng pin, với một lần sạc đầy Acer Aspire A315 có thể hoạt động liên tục lên đến 9 tiếng, cho phép bạn sử dụng cả ngày mà không cần lo lắng về việc sạc pin.
Ổ cứng: SSD 256GB, có thể nâng cấp thêm lên 512GB.
Card đồ họa: Intel Iris Xe Graphics tích hợp, đủ để xử lý đồ họa cơ bản và chạy các phần mềm lập trình.
Màn hình: 15.6 inch Full HD (1920 x 1080), với tấm nền IPS
Pin: Pin 4-cell 64 Wh, thời lượng sử dụng kéo dài từ 8 đến 10 giờ tùy vào tác vụ.
Trọng lượng: Khoảng 1.7kg
Với những ưu điểm và thông số cơ bản đáp ứng được tiêu chí của một chiếc laptop lập trình, nhưng Acer Aspire 3 A315 lại có một mức giá vô cùng bất ngờ, chỉ hơn 10 triệu đồng là bạn đã có thể sở hữu em máy mạnh mẽ bên trong, tao nhã, tinh tế bên ngoài.
HP Laptop 15s-fr5005TU Core i7-1260P
Laptop HP là một dòng sản phẩm laptop cao cấp đến từ Mỹ, được biết đến với thiết kế thanh lịch và thời thượng cùng hiệu năng sử dụng cực đỉnh. Nếu bạn muốn tìm một chiếc laptop lập trình 15 triệu trở xuống, HP Laptop 15s-fr5005TU Core i7-1260P là một trong những lựa chọn đáng cân nhắc.
Laptop HP 15s-fr5003TU được trang bị bộ vi xử lý Intel Core i7-1260P thế hệ thứ 12 của Intel, kết hợp với 16GB RAM và ổ cứng SSD 512GB. Từ đó mang lại cấu hình mạnh mẽ cho các tác vụ từ cơ bản đến nâng cao. Tham khảo cấu hình chi tiết của chiếc laptop này:
15.6 inch Full HD (1920 x 1080), màn IPS, chống chói, chống lóa 250 nits
Pin
Pin 3-cell 41 Whr
Trọng lượng
Khoảng 1.8 kg
HP Laptop 15s-fr5005TU Core i7-1260P chắc chắn là một lựa chọn không thể bỏ qua cho sinh viên học lập trình. Với bộ vi xử lý Intel Core i7 thế hệ mới, RAM 16GB và ổ cứng SSD 512GB, nhưng laptop này chỉ có giá khoảng 14-15 triệu đồng, có thể các cửa hàng khác nhau sẽ có chênh lệnh về giá nhưng vẫn đáp ứng tiêu chí máy học lập trình tốt giá rẻ.
Laptop Lenovo V14 G4 IRU 83A000BGVN
Laptop Lenovo V15 G4 IRU thuộc dòng laptop sinh viên, giá rẻ cấu hình mạnh được nhiều người dùng lựa chọn. Với chip Intel Core i5-13420H với 8 lõi, 12 luồng, tần số turbo tối đa 4.6GHz và RAM 16GB DDR4 3200MHz, đây là một chiếc laptop đáp ứng hoàn hảo cho việc lập trình.
Màn hình: 14 inches, 1920 x 1080 pixels (FullHD), IPS, độ sáng 350 nits, chống chói, độ phủ màu 45% NTSC
Pin: 38Wh
Trọng lượng: 1.43kg
Laptop Lenovo V14 G4 IRU 83A000BGVN là một mẫu laptop học tập trang bị bộ vi xử lý mạnh mẽ, dung lượng RAM lớn trong một thiết kế bền bỉ, với mức giá khoảng 13 triệu đồng, hẹn đáp ứng tốt mọi nhu cầu lập trình cho các lập trình viên tương lai.
Việc chọn lựa laptop phù hợp cho việc học CNTT dưới 15 triệu đòi hỏi sự cân nhắc kỹ lưỡng về cấu hình, nhu cầu sử dụng và tính năng. Những dòng máy tính trên đều là các lựa chọn tốt cho sinh viên hoặc những ai mới bắt đầu học lập trình. Tùy theo mục đích sử dụng, bạn có thể lựa chọn cho mình một chiếc laptop phù hợp để hỗ trợ tốt nhất cho công việc học tập và phát triển kỹ năng lập trình.
Bài viết được sự cho phép của tác giả Nguyễn Thành Nam
GitHub không chỉ là nơi để chia sẻ mã nguồn mà còn là một kho tàng tài nguyên quý giá cho lập trình viên muốn nâng cao kỹ năng của mình. Từ các dự án mã nguồn mở cho đến tài liệu học tập chuyên sâu, GitHub cung cấp một nền tảng tuyệt vời để bạn cải thiện khả năng lập trình và tiếp cận những kiến thức mới.
Trong bài viết này, chúng ta sẽ khám phá một số repositories nổi bật mà bạn có thể tham khảo để phát triển kỹ năng lập trình.
1. FreeCodeCamp
FreeCodeCamp là một nền tảng học lập trình nổi tiếng, và repository của nó là một trong những nguồn tài liệu học tập phong phú nhất trên GitHub. Với hơn 40,000 giờ học miễn phí và hàng loạt bài tập thực hành từ cơ bản đến nâng cao, FreeCodeCamp giúp bạn nắm vững các kỹ năng lập trình như HTML, CSS, JavaScript, và nhiều ngôn ngữ khác. Repository này không chỉ là tài liệu học tập mà còn chứa nhiều dự án thực tế, giúp bạn áp dụng kiến thức vào thực tiễn.
“Aweome” là một danh sách tuyển chọn các tài nguyên học tập, công cụ phát triển, và dự án mã nguồn mở trên nhiều lĩnh vực khác nhau của lập trình. Danh sách này liên tục được cập nhật bởi cộng đồng, bao gồm mọi thứ từ lập trình web, học máy, cho đến các công cụ DevOps. Nếu bạn đang tìm kiếm các tài liệu hoặc công cụ giúp nâng cao kỹ năng, thì đây chính là nơi bắt đầu.
The Algorithms là một repository tuyệt vời cho những ai muốn hiểu sâu hơn về cách các thuật toán hoạt động. Dự án này chứa các triển khai của nhiều thuật toán phổ biến bằng nhiều ngôn ngữ lập trình khác nhau, từ Python đến Java và C++. Bạn có thể học được cách áp dụng các thuật toán trong thực tế và cải thiện kỹ năng lập trình thuật toán của mình.
CS50x là một khóa học nhập môn khoa học máy tính nổi tiếng của Harvard, và repository của nó chứa toàn bộ tài liệu học tập và bài tập thực hành của khóa học. Dù bạn mới bắt đầu hay đã có nền tảng, CS50x cung cấp một lộ trình học tập có cấu trúc rõ ràng, giúp bạn xây dựng kiến thức từ cơ bản đến nâng cao trong lập trình và khoa học máy tính.
Developer Roadmap là một dự án hướng dẫn chi tiết về các kỹ năng và công nghệ mà bạn cần nắm vững để trở thành một lập trình viên chuyên nghiệp. Repository này cung cấp các bản đồ lộ trình học tập cho nhiều lĩnh vực khác nhau như front-end, back-end, DevOps, v.v. Mỗi bản đồ đều được xây dựng dựa trên các công nghệ và kỹ năng được yêu cầu nhiều nhất trong ngành, giúp bạn định hướng học tập một cách hiệu quả.
Nếu bạn là người thích học qua thực hành, Project-Based Learning sẽ là repository phù hợp với bạn. Nó cung cấp một danh sách các dự án thực tế mà bạn có thể tự tay thực hiện để nâng cao kỹ năng lập trình. Từ việc xây dựng ứng dụng web, trò chơi, cho đến các công cụ CLI, bạn sẽ tìm thấy những dự án thú vị và thách thức để thử sức.
JavaScript30 là một khoá học miễn phí với 30 dự án thực hành bằng JavaScript. Không cần bất kỳ thư viện hay framework nào, bạn sẽ học cách xây dựng các ứng dụng chỉ với JavaScript thuần. Đây là cách tuyệt vời để nắm vững ngôn ngữ này và cải thiện kỹ năng lập trình của mình một cách nhanh chóng.
LeetCode Patterns là một công cụ hữu ích cho những ai muốn rèn luyện kỹ năng giải quyết vấn đề và chuẩn bị cho các kỳ thi lập trình. Repository này phân loại các bài tập trên LeetCode theo các mẫu phổ biến, giúp bạn dễ dàng tiếp cận và học hỏi các kỹ thuật giải quyết vấn đề hiệu quả.
Repository này lấy cảm hứng từ cuốn sách “Clean Code” của Robert C. Martin, áp dụng các nguyên tắc của lập trình sạch vào JavaScript. Đây là một tài nguyên tuyệt vời cho bất kỳ ai muốn viết mã nguồn sạch, dễ hiểu và bảo trì. Các ví dụ trong repository giúp bạn thấy rõ cách áp dụng lý thuyết vào thực tế, từ đó nâng cao chất lượng mã nguồn của mình.
“You Don’t Know JS” là một series sách nổi tiếng giúp bạn hiểu sâu về JavaScript. Repository này chứa toàn bộ nội dung của series, được tổ chức theo từng cuốn sách, từ cơ bản đến nâng cao. Dù bạn đã có kinh nghiệm hay mới bắt đầu, series này sẽ giúp bạn khám phá các khía cạnh chưa biết của JavaScript và nâng cao kỹ năng lập trình của mình.
Nó cung cấp một danh sách các tài liệu và nguồn học tập đã được chọn lọc kỹ lưỡng, thích hợp cho những ai đang chuẩn bị cho các buổi phỏng vấn lập trình hoặc muốn củng cố kiến thức cơ bản về khoa học máy tính.
Các thuật toán và cấu trúc dữ liệu sử dụng ngôn ngữ JavaScript kèm theo giải thích và liên kết đến các tài liệu tham khảo.
Bộ sưu tập này chứa các thuật toán và cấu trúc dữ liệu là lựa chọn hoàn hảo cho các lập trình viên muốn hiểu rõ cách hoạt động của các thuật toán và cách triển khai chúng một cách hiệu quả.
Nó là công cụ tuyệt vời cho cả việc học tập và chuẩn bị cho các buổi phỏng vấn.
Kho lưu trữ này là một hướng dẫn toàn diện để chuẩn bị phỏng vấn Front End, bao gồm các câu hỏi kiểm tra, thử thách lập trình, và các khái niệm về thiết kế hệ thống.
Nó là sự lựa chọn lý tưởng cho các lập trình viên Front End đang chuẩn bị cho các buổi phỏng vấn kỹ thuật và muốn nâng cao kỹ năng giải quyết vấn đề.
Tech Interview Handbook cung cấp các tài liệu được chọn lọc kỹ càng để chuẩn bị cho phỏng vấn lập trình, bao gồm thuật toán, cấu trúc dữ liệu, và các kỹ thuật phỏng vấn.
Đây là nguồn tài nguyên quý giá cho các lập trình viên muốn chuẩn bị một cách hiệu quả cho các buổi phỏng vấn kỹ thuật.
GitHub là một kho tài nguyên vô giá cho lập trình viên ở mọi cấp độ. Các repositories được liệt kê trong bài viết này cung cấp cả lý thuyết lẫn thực hành, giúp bạn nâng cao kỹ năng một cách toàn diện. Dù bạn đang ở giai đoạn nào trong hành trình lập trình, việc sử dụng hiệu quả các tài nguyên này sẽ giúp bạn tiến bộ nhanh chóng và đạt được mục tiêu của mình.
Bài viết được sự cho phép của tác giả Nguyễn Hoàng Phú Thịnh
Chuyện là nhà mình có cái xô bể, chắp vá cũng được 7-8 lớp. Về bản chất, nó vẫn đựng nước được. Nhưng ngoài điểm đó ra, nó trông như đồ bỏ.
Mẹ mình thì vẫn khoái dùng cái xô này, và không nỡ vứt nó đi :3
Nhưng mỗi lần về quê mình lại chẳng muốn dùng nó tí nào? Kỳ cục zậy đó? Cùng là một cái xô bể, nhưng có người muốn dùng, có người không.
Đó là vấn đề của Quality of Service. Ánh xạ qua thế giới phần mềm, nó chính là Non-Functional Requirement 😎
1. Các loại requirement trong một dự án phần mềm
Như anh em đã biết, hoặc chưa biết: một giải pháp, một sản phẩm, hay một phần mềm nào đó đều có các yêu cầu cụ thể (requirement) cho các giải pháp, sản phẩm hay phần mềm đó.
Là một người làm Business Analyst, chúng ta sẽ làm rất nhiều thứ xoay quanh các requirement này.
Bất kỳ phần mềm nào cũng vậy? Sinh ra đều phải có mục đích. Tức mỗi phần mềm đều có các yêu cầu của riêng nó. Mà các yêu cầu này không phải là ít.
Một phần mềm có rất-rất-rất nhiều yêu cầu. Nào là phải làm được cái này, cái kia, nào là phải đẹp, phải nhanh, phải abc, xyz…
Chính vì có quá nhiều requirement, xuất phát từ nhiều đối tượng khác nhau. Lộn xộn quá, nên người ta mới gom nó lại, rồi chia thành 4 loại requirement như trên, để anh em BA chúng ta có thể dễ dàng moi móc và quản lý được nó.
Cụ thể 4 loại nó như thế nào thì mình sẽ để dành nói ở bài sau. Bài này mình sẽ tập trung nói về Solution Requirement.
Ô kê, Solution Requirement được chia nhỏ thành 2 loại sau:
Functional requirement
và Non-Functional requirement.
Có một số ví dụ cho anh em dễ hình dung hơn:
Ly nước:
Functional Req: ly đựng được nước
Non-Functional Req: ly rớt không bể.
Mũ bảo hiểm:
Functonal Req: có đèn chiếu sáng, nhấp nháy lòe loẹt trong đêm
Non-Functional Req: chịu được lực va đập lên tới 3000 Newton.
Non-Functional Req: ăn xong có khăn giấy lau miệng, hoặc ăn xong không đau bụng.
Phần mềm ABCDXYZ:
Functional Req: quản lý thông tin khách hàng
Non-Functional Req: có nút Help – hướng dẫn người dùng online ngay trên hệ thống.
Đó là một vài ví dụ để anh em hình dung được thế nào là Functional Req và Non-Functional Req.
Vậy Functional Requirement là gì?
2. Functional Requirement là gì?
Functional Requirement là:
The capabilities that a solution must have in terms
of the behavior and information that the solution will manage
Trên là định nghĩa của BABOK, nhưng thôi, đọc nghe dài dòng tùm lum tùm la quá. Rút gọn lại anh em có thể hiểu Functional Requirement là những thứ mà giải pháp có thể làm được.
Hay cụ thể hơn, Functional Requirement là nói về: Behaviors và Functions (Hành vi và Chức năng) của giải pháp.
Ví dụ:
Ly thì phải đựng được nước
Mũ bảo hiểm phải có đèn phát sáng
Ly chè ăn zô là đỡ đói
Hệ thống ABCDXYZ quản lý được thông tin khách hàng.
BABOK ver3.0 định nghĩa Non-Functional Requirement như sau:
Not relate directly to the behaviour of functionality of the solution, but rather describe conditions under which a solution must remain effective or qualities that a solution must have.
Lại dài loằng ngoằng, nhưng không sao, đọc cũng dễ hiểu. Càng về sau BABOK định nghĩa càng dễ hiểu mà, hehe.
Non-Functional Requirement là những thứ:
Không liên quan trực tiếp tới hành vi – chức năng của giải pháp
Nhưng lại là các điều kiện giúp hệ thống chạy tốt và đảm bảo được chất lượng như yêu cầu.
Rút gọn 2 dòng trên, mình có cách định nghĩa trực quan hơn như sau:
Non-Functional Requirement = Quality of Services
Tức Non-Functional Requirement là những thứ liên quan đến CHẤT LƯỢNG sản phẩm.
Sản phẩm đó đáp ứng được mục đích sử dụng là 1 chuyện, nhưng nó phải đảm bảo tốt về mặt trải nghiệm người dùng thì mới thật sự đẳng cấp 😎
3.1. Non-Functional Requirement quan trọng đến mức nào?
Quay lại cái xô ở đầu bài. Xô, là giải pháp để đựng nước và được dùng cho các mục đích khác nhau.
Functional Req của cái Xô là đựng được nước. Chỉ nhiêu đó thôi.
Còn Non-Functional Req của cái Xô là: xô làm bằng nhựa không giòn, phơi nắng không bể, không mọc rêu, không trơn, kiểu dáng thon gọn, vừa tay cầm.
Rõ ràng, cái xô ở nhà mình chỉ đạt được mỗi Functional Requirement, còn Non-Functional Requirement thì.. thấy gớm.
Mẹ mình thích dùng vì mẹ mình chỉ quan tâm đến Functional Requirement, tức là chức năng của nó, chỉ cần đựng được nước là được.
Còn mình không thích dùng vì nó không đáp ứng được Non-Functional Requirement, những requirement mà đáng lý ra một cái xô phải có. Đã zậy, còn lủng lỗ, chấp vá tùm lum tùm la, thấy ớn.
Điều này nói lên được vấn đề gì?
Nó nói lên được: User họ quan tâm điều gì?
À há…
Mấu chốt là ở chỗ này.
Nếu user giống mẹ mình, không care nhiều đến Non-Functional, ok anh em trong vùng an toàn.
Cứ thoải mái, chỉ cần cho hệ thống chạy được là được. Tức là hệ thống chỉ cần làm được những thứ mà khách hàng yêu cầu là được.
Còn nếu user giống mình, rất rất quan tâm đến Non-Functional thì…, well, có vẻ hơi mệt với anh em. Đối với họ, không những hệ thống phải chạy được, mà hệ thống còn phải chạy nhanh, gọn, và đẹp nữa.
Và một khi mình nắm được mức độ kỳ vọng của users, mình sẽ biết cách làm họ hài lòng hơn.
Đã không ít lần mình và đồng bọn đang bon bon về đích, tưởng chừng sẽ Go-Live êm xuôi trót lọt. Mà phải khựng lại cả thảy 4-5 lần cũng chỉ vì cái chữ Non-Functional Requirement này.
Khách hàng liên tục complain về nhóm users sử dụng iPad nhập liệu quá lâu, và touch quá nhiều trên màn hình để có thể… hoàn thành được một giao dịch.
Hay việc tìm kiếm các keyword trên hệ thống cũng gặp trở ngại.
Ví dụ, có một dữ liệu mang tên: “Chú Bảy đẹp chai cute hột me tốt bụng”. Thì khi user nhập keyword: “đẹp chai me” thì hệ thống không tìm ra kết quả.
Nhưng nếu user nhập keyword: “đẹp chai cute hột me” thì kết quả mới nhả ra. Tức hiện tại hệ thống chỉ tìm được kết quả theo các keyword là một string theo đúng thứ tự từ trái sang phải.
Trong khi users họ lại muốn: chỉ cần nhập keyword “đẹp chai me”, thì hệ thống sẽ nhả ra tất cả các kết quả chứa 3 từ khóa “đẹp”, “chai”, và “me” riêng biệt, không cần care đến thứ tự. Ví dụ:
Ông Sáu đẹp chai cute hột me khiêm tốn
ABC đẹp cute chai me hột khiêm tốn
XYZ đẹp me chai cute khiêm tốn hột…
Rõ ràng đó chính là các Non-Functional Requirement mà mình, một người BA không hề nắm được, cũng như không làm rõ ngay từ đầu, khiến cho anh em tốn khá nhiều effort để setup lại mọi thứ cho phù hợp với các “quality of services” này.
Đau thương, chỉ có thể chốt lại được bằng từ đau thương 😥
….
Do đó nếu có ai hỏi mình: Non-Functional Req quan trọng đến mức nào? Thì mình tự tin trả lời ngay: quan trọng như Functional Requirement vậy.
Nhiều lúc chưa cần quan tâm behind the scenes chạy như thế nào, lớp front end mà chuối là users cũng bỏ chạy rồi 🙂
Mình tự tin đặt 2 thằng này ngang hàng nhau. Và đây thường là điểm GAP rất lớn giữa…
3.2. Non-Functional Requirement tạo ra GAP lớn giữa…
Thường những người làm triển khai/ outsource – như mình không quan tâm nhiều đến các Non-Functional Requirement. Vì end user của các giải pháp mình làm thường không phải là “end consumer”.
Mà end user thì không phải trả tiền để sử dụng hệ thống, end consumer mới là người trả tiền để sử dụng hệ thống.
Tức là end consumer mới là người sử dụng thông qua hệ thống.
Ví dụ anh em outsource làm hệ thống quản lý khách sạn Millennium, thì end user của hệ thống này là các Quản trị viên của hệ thống, các nhân viên phòng ban. Tức họ là ai? Là người của khách sạn. Không phải khách hàng.
Họ sẽ dụng hệ thống như một công-cụ-trung-gian giúp họ quản lý khách sạn tốt hơn mà thôi.
Còn đối với anh em làm product. Product ở đây có thể là ứng dụng đặt phòng trực tuyến của khách sạn Millennium. End user chính là end consumer. Họ vừa là người dùng ứng dụng, vừa là người trả tiền để sử dụng dịch vụ của Millennium.
Do đó, vấn đề “quality of service” của ứng dụng, hay các yếu tố non-functional của ứng dụng có làm họ vui hay không? Có làm họ thấy thoải mái khi sử dụng hay không? Ứng dụng chạy mượt không? vâng vâng… luôn được chú trọng hàng đầu.
Những yếu tố này góp phần KHÔNG-HỀ-NHỎ trong việc khách hàng ra quyết định: có tiếp tục sử dụng dịch vụ nữa hay không.
Chưa kể, làm product phục vụ end consumer, anh em phải phục vụ tới hơn cả triệu người dùng. Chứ không phải lẻ tẻ vài ba chục, hay chỉ vài trăm người dùng như những hệ thống quản lý back-end.
Chắc hẳn anh em còn nhớ vụ Momo lắc lì xì.
Chỉ trong vòng một ngày 24/1, Momo phải chịu tải lên đến hơn 2 triệu lượt đăng nhập và lắc cùng một lúc. Tức là hơn 2 triệu lượt CCU (concurrent users). Điều này có nghĩa đội ngũ anh em Momo phải liên tục xử lý tình trạng tắt nghẽn server. Kinh khủng!
Hoặc lâu lâu app có vấn đề gì thì phải lo cắm đầu fix ngay, kể cả có holiday hay weekend.
Vì giả dụ anh em down cái app được quảng cáo thiệt ngon về xài, mà mới chạm có 3-4 cái thấy lag banh chành, nút bấm gì mà tùm lum tùm la. Thì ngay lập tức: app bị delete cái một, và suốt đời nằm gọn trong blacklist.
Do đó, đây là GAP không hề nhỏ, liên quan đến “tư duy hành nghề” của những anh em làm outsource muốn chuyển qua làm product. Tuy nhiên, miễn là đừng ẩu và luôn chú ý cẩn thận thì mình nghĩ GAP cũng không quá lớn 🙂
.
Ô kê, hi vọng mình đã chém đủ mạnh để anh em hiểu về tầm quan trọng của Non-Functional Requirement (NFR). Biết nó quan trọng, chúng ta sẽ chú ý đến nó hơn.
Chú ý kể cả khi anh em đang làm triển khai những SaaS nhé. Những Software as a Service như Dynamics 365 của Microsoft. Có những thứ NFR mà mình chẳng thể can thiệp được, ví dụ như Security hay Accessibility của những SaaS này.
Những yếu tố NFR này đều được các hãng build sẵn thành một gói để chúng ta tiện triển khai và sử dụng.
Tuy nhiên, BA cũng cần nắm rõ những yếu tố NFR này ngay từ đầu dự án để tránh out of scope sau này, cũng như giải thích trước cho khách hàng để họ hiểu những điểm mạnh và hạn chế của giải pháp (tránh đòi thêm sau này).
Những NFR này thì các hãng đều có sẵn official document, anh em có thể dễ dàng tìm thấy bằng cụ Gồ 🙂
Câu hỏi cuối cùng, Non-Functional Requirement (NFR) gồm những loại nào?
Phần dưới đây mình sẽ nói sơ lược về các loại NFR hay gặp nhất, từ những gì mình lượm lặt được trong quá trình làm việc cũng như chia sẻ từ các bậc tiền bối 😎
4. Các loại Non-Functional Requirement?
Sorry anh em, vì phần bốn này dài quá nên mình sẽ tách ra ở bài tiếp theo. Mình sẽ để link ở đây, vị trí này, anh em đón đọc nhé.
Phần này sẽ nói về các loại NFR, kèm các ví dụ cụ thể luôn cho anh em dễ hình dung 😎
Tóm tắt
Bài này mình sẽ đúc kết bằng những dòng sau cho anh em dễ nhớ:
Có 4 loại requirement: Business Req, Stakeholder Req, Solution Req và Transition Req (mình sẽ nói rõ hơn ở bài sau)
Solution Requirement gồm: Functional và Non-Functional Req.
Functional Requirement nói lên behaviors và functions của giải pháp (what the system do?)
Non-Functional Requirement nói lên quality of services của giải pháp (how the system work?)