Home Blog Page 117

Khởi tạo và chạy một thread trong Java

Khởi tạo và chạy một thread trong Java

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh

Trong Java, chúng ta có 2 cách để khởi tạo và chạy một thread, đó là sử dụng class Thread hoặc là interface Runnable. Cụ thể như thế nào, trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về chúng các bạn nhé!

  10 câu hỏi javascript để nâng cao trình độ
  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java

Class Thread

Các bạn có thể dễ dàng tạo mới một thread bằng cách extend class của các bạn từ class Thread rồi sau đó override phương thức run() của class Thread này. Code bên trong run() method sẽ là tác vụ mà chúng ta cần execute trong thread mới.

Ví dụ mình muốn tạo mới một thread để tính tổng của 2 số bằng cách extend class Thread thì mình sẽ tạo mới một class extend class Thread và override lại phương thức run() như sau:

Để chạy thread trong trường hợp này, chúng ta sẽ tạo mới instance của class Calculator và gọi phương thức start() của đối tượng này để chạy các bạn nhé. Ví dụ:

package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.start();
}

}

Kết quả:

Khởi tạo và chạy một thread trong Java

Các bạn có thể thấy rõ việc code của chúng ta được execute trong main thread hay là một thread khác bằng cách add thêm một số dòng code như sau:

package com.huongdanjava.javaexample;

public class Calculator extends Thread {

    @Override
    public void run() {
        System.out.println("Calculator : " + Thread.currentThread().getName());

        int a = 2;
        int b = 7;

        int sum = a + b;

        System.out.println(sum);
    }

}
package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
    System.out.println("Main : " + Thread.currentThread().getName());

Calculator calculator = new Calculator();
calculator.start();
}

}

Kết quả:

Khởi tạo và chạy một thread trong Java

Nếu các bạn để ý thì sẽ có thắc mắc là nếu chúng ta gọi phương thức run() thay vì phương thức start() của class Calculator thì có sự khác biệt gì? Câu trả lời là nếu các bạn gọi phương thức run() thì code bên trong nó sẽ được execute trong cùng thread của chương trình thay vì một thread mới.

Ví dụ nếu bây giờ mình đổi qua gọi phương thức run() trong hàm main của ứng dụng:

package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
    System.out.println("Main : " + Thread.currentThread().getName());

Calculator calculator = new Calculator();
calculator.run();
}

}

các bạn sẽ thấy kết quả như sau:

Khởi tạo và chạy một thread trong Java

Interface Runnable

Với interface Runnable thì class của các bạn cần implement interface này và hiện thực phương thức run() được định nghĩa trong nó.

Trong ví dụ trên, thay vì extend từ class Thread mình có thể implement interface Runnable như sau:

package com.huongdanjava.javaexample;

public class Calculator implements Runnable {

    public void run() {
        System.out.println("Calculator : " + Thread.currentThread().getName());

        int a = 2;
        int b = 7;

        int sum = a + b;

        System.out.println(sum);
    }

}

Để tạo mới thread và chạy ứng dụng của chúng ta trong trường hợp này, các bạn cần tạo mới class Thread với tham số là class implement interface Runnable của chúng ta. Ví dụ như sau:

package com.huongdanjava.javaexample;

public class Example {

public static void main(String[] args) {
    System.out.println("Main : " + Thread.currentThread().getName());

    Thread thread = new Thread(new Calculator());
    thread.start();
}

}

Kết quả cũng như vậy:

Khởi tạo và chạy một thread trong Java

Tổng kết

Việc sử dụng extend class Thread hay implement interface Runnable là tuỳ vào nhu cầu của các bạn nhưng mình prefer việc implement interfacve Runnable hơn vì trong Java, chúng ta có thể implement nhiều interface khác nhau nhưng chỉ có thể extend từ một class nào đó.

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

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

Xem thêm Tuyển Java lương cao hấp dẫn trên TopDev

Cải tiến AI liên tục với Data Harvest Loop

data harvest loop
Data Harvest Loop - Vòng lặp thu thập dữ liệu hoạt động như thế nào?

Vấn đề khi thu thập dữ liệu cho AI

Một trong những khó khăn của các doanh nghiệp startup về lĩnh vực AI là làm thế nào có thể thu thập được những dữ liệu chất lượng để huấn luyện và đào tạo ra các mô hình AI.

Bản thân mình trong quá trình làm việc tại Cinnamon AI những năm vừa qua với hơn 50 – 60 đối tác thì những đối tác lớn nhất cũng chỉ có thể cung cấp được từ 5000 – 30000 ảnh cho một dự án. Số lượng ảnh này thật sự vẫn còn rất khiêm tốn để xây dựng một mô hình có thể giải quyết được các vấn đề cho khách hàng.

data harvest loop 1
Thu thập và huấn luyện data giúp ích rất nhiều cho quá trình đào tạo AI

Đối tác của Cinnamon AI đều là những tập đoàn công nghệ rất lớn, có doanh thu mỗi năm lên đến hàng nghìn tỷ đô như Toshiba, Toyota, Suntory,… Tuy nhiên, kể cả là những tập đoàn lớn như thế này thì việc họ chia sẻ dữ liệu cho những đơn vị cung cấp giải pháp như Cinnamon AI cũng rất hạn chế.

Có nhiều yếu tố ảnh hưởng đến điều này: Thứ nhất đây là vấn đề liên quan đến tính bảo mật dữ liệu. Thứ hai, không phải công ty cung cấp giải pháp nào cũng sẵn sàng đầu tư một lượng lớn nhân sự để xử lý những dữ liệu này cho các đối tác như Cinnamon AI. Vậy Data Harvest Loop giải quyết những vấn đề này như thế nào? Giải pháp sẽ được trình bày trong bài chia sẻ này.

Tại sao cần sử dụng đến Data Harvest Loop?

Những đơn vị cung cấp về giải pháp hoặc sản phẩm như Cinnamon AI, nếu việc thiết kế sản phẩm dựa vào các dữ liệu đã có sẵn mà khách hàng cung cấp thì sẽ phải đối diện với những vấn đề gì? Có 2 vấn đề lớn mà chúng ta sẽ gặp phải:

Thứ nhất, khi làm việc ở một đơn vị thiết kế về giải pháp hoặc sản phẩm AI, mọi người sẽ thật sự hiểu rằng: sự kết hợp giữa trải nghiệm người dùng thay đổi về chu trình vận hành như thế nào phải kết hợp với độ chính xác của AI mới có thể tăng độ chính xác này lên đến mức có thể sử dụng được.

Tuy nhiên nếu chúng ta không thuyết phục được khách hàng rằng khách hàng nên thay đổi quy trình vận hành mà chỉ tập trung vào việc làm thế nào để xử lý dữ liệu và mang lại độ chính xác tốt hơn của phần mềm AI, thì khả năng và giải pháp AI đó có thể giải quyết được bài toán của người dùng tốt hơn con người sẽ thấp hơn.

  26 công cụ và kỹ thuật trong Big Data có thể bạn chưa biết
  AI-Powered Future: Data drive product - Trí tuệ nhân tạo vận hành Thế giới

Thứ hai, đối với các công ty cung cấp giải pháp, nếu chúng ta liên tục làm việc với những khách hàng mới và phải huấn luyện lại mô hình AI dựa trên dữ liệu mới của khách hàng thì về mặt công nghệ lõi, công ty sẽ rất khó có khả năng mở rộng hơn nữa nếu không gia tăng quy mô nhân sự. Trong khi đó nhân sự AI lại là một vấn đề khó khăn của thị trường, vậy nên dựa vào dữ liệu có sẵn của doanh nghiệp có thể sẽ không phải là hướng đi có lợi trong dài hạn.

Vậy nên thay vì tìm cách tận dụng tối đa dữ liệu đang có, chúng ta nên cùng với khách hàng xây dựng một quy trình vận hành và giải pháp phần mềm, để làm thế nào bản thân khách hàng cùng với đơn vị cung cấp giải pháp có thể liên tục thu thập dữ liệu một cách bền vững, không chỉ cho hiện tại mà còn cho rất nhiều hoạt động vận hành sau này.

Data Harvest Loop là gì?

Để giải thích vấn đề này mình sẽ phân tích dựa trên các trường hợp thực tế.

Giải pháp hỗ trợ lái xe an toàn Mobileye

Mobileye là công ty chuyên về thiết kế giải pháp để hỗ trợ cảnh báo tài xế có được trải nghiệm lái xe an toàn hơn. Vậy vòng lặp của Mobileye cho việc thu thập dữ liệu diễn ra như thế nào?

Thông thường Mobileye sẽ sử dụng AI để đưa ra cảnh báo về khả năng xảy ra tai nạn cho tài xế. Người tài xế sẽ có rất nhiều dạng phản hồi lại cảnh báo của AI, thông qua việc tương tác với xe ô tô như giảm tốc độ, bẻ lái,… Nếu cảm thấy không đúng, họ có thể lờ đi hoặc không có phản ứng gì, còn nếu đúng thì họ sẽ có nhiều lựa chọn như tinh chỉnh vô lăng như thế nào, chân ga ra sao và những cách xử lý với chiếc xe khác nhau. Lúc này, AI sẽ tiếp tục thu thập lại những phản ứng này của người dùng.

Nhờ sự cảnh báo từ các giải pháp của Mobileye nên tỉ lệ xảy ra tai nạn sẽ giảm thiểu và mang lại trải nghiệm lái xe an toàn hơn cho người dùng cuối. Khi đã có được sự an toàn hơn cho người dùng và các công ty thì họ sẽ sử dụng giải pháp của Mobileye nhiều hơn.

Vậy vòng lặp này sẽ được thu thập như thế nào?

Khi người dùng cuối có trải nghiệm tốt hơn, lúc họ sử dụng giải pháp phần mềm của Mobileye kết hợp với camera hành trình thì Mobileye thu thập được một loại dữ liệu vô cùng quan trọng là hình ảnh môi trường xung quanh của chiếc xe đó khi dữ liệu cảnh báo được đưa ra. Ảnh dữ liệu về đường phố này sẽ tiếp tục được sử dụng cùng với những dữ liệu cảnh báo của phần mềm Mobileye đưa ra và cách tài xế phản hồi lại với những cảnh báo đó.

Toàn bộ những dữ liệu này sẽ được đưa vào môi trường AI để huấn luyện và khi môi trường AI được huấn luyện tốt hơn, nó sẽ đưa ra được các cảnh báo có mức độ chính xác cao hơn.

Khi cảnh báo chính xác hơn được đưa ra, người dùng tiếp tục phản hồi lại những cảnh báo này, rằng nó đúng hay sai. Vòng lặp như vậy sẽ liên tục diễn ra, lặp đi lặp lại gọi là vòng lặp thu thập dữ liệu.

Xem thêm “AI giờ đã được bình chọn là xu hướng của tương lai, sao developer mình còn chưa tận dụng điều đó?”

Trong một ứng dụng không chỉ đơn thuần có một vòng lặp dữ liệu mà có thể có nhiều vòng lặp dữ liệu.

Như với trường hợp của Mobileye, ngoài dữ liệu về đường phố xung quanh khi cảnh báo được đưa ra, họ đồng thời cũng thu thập dữ liệu về vị trí của chiếc xe đó (1) và có thể kết hợp với tần suất xuất hiện tai nạn trên tuyến đường đó (2) và phản ứng của tài xế (3). Kết hợp tất cả những yếu tố này để đưa vào mô hình học của AI và giúp cho AI đưa ra mức độ cảnh báo chính xác hơn.

Càng nhiều vòng lặp dữ liệu được tạo ra nhờ liên kết các dữ liệu liên quan với nhau thì AI càng có cơ hội đưa ra những dự báo mang tính chính xác hơn.

data harvest loop
Vòng lặp dữ liệu giúp tăng độ chính xác cho mô hình AI

Giải pháp phát triển trò chơi của Game of Whales

Game of Whales cung cấp một công cụ dành cho các nhà phát triển game. Các nhà phát triển game thường kiếm tiền dựa vào việc bán quảng cáo hoặc bán các tính năng trong game. Nhưng cách xuất hiện của những quảng cáo này như thế nào để tối ưu hóa được lợi nhuận sẽ là một bài toán rất đau đầu với nhiều nhà phát triển game.

Game of Whales cung cấp các giải pháp mà ở đó họ có thể sử dụng dữ liệu thu thập được từ AI testing hoặc từ cách mà người dùng cuối phản hồi lại với một quảng cáo (như việc người dùng cuối nhấp vào app, sử dụng app hay xem hết một video trên app chẳng hạn).

Thông qua việc thu thập dữ liệu người dùng với những quảng cáo này, Game of Whales sẽ đưa ra các chiến lược xem làm thế nào có thể tối ưu hóa doanh thu từ một người chơi hoặc giảm thiểu khả năng người chơi thoát ứng dụng vì trải nghiệm người dùng quá tệ do có quá nhiều quảng cáo.

Vậy trong ví dụ về Game of Whales này, một vòng lặp sẽ được thiết kế như thế nào?

Tính năng đầu tiên liên quan đến việc đưa ra dự đoán về cách một quảng cáo sẽ xuất hiện ra sao, tần suất như thế nào và khi nào thì nên được xuất hiện.

Khi quảng cáo được đưa ra, người chơi sẽ phản hồi lại quảng cáo đó. Game of Whales tiến hành thu thập những phản hồi này của người dùng cuối để liên tục tối ưu và đưa ra chiến lược quảng cáo hiệu quả hơn. Đồng thời, khi người dùng cuối nhận thấy hiển thị quảng cáo tốt hơn thì trải nghiệm người dùng sẽ được nâng cao và bản thân công ty cũng tối ưu doanh thu tốt hơn.

Khi người dùng cuối có được càng nhiều trải nghiệm tốt thì việc họ sử dụng lại app cũng sẽ nhiều hơn hoặc mức độ gắn kết của người dùng với ứng dụng cũng trở nên tốt hơn. Từ đó, dữ liệu Game of Whales thu thập được càng nhiều và họ lại tái sử dụng dữ liệu này càng nhiều để huấn luyện lại mô hình AI, đưa ra chiến lược hiển thị quảng cáo tối ưu hơn.

Mô hình Data Harvest Loop của Cinnamon AI

Concept này gồm những cấu phần nào?

Cấu phần đầu tiên liên quan đến tính năng của phần mềm AI này là như thế nào. Tính năng AI có 3 loại:

  1. Kỹ năng nhận dạng
  2. Kỹ năng dự đoán
  3. Kỹ năng gợi ý

Thông thường, tính năng AI ban đầu sẽ không đạt được độ chính xác cao nên chúng ta cần đến cấu phần thứ hai là Expert-AI collaboration design. Đây là cách thiết kế trải nghiệm người dùng và quy trình vận hành để chuyên gia là con người sẽ tương tác được với máy và máy thu thập dữ liệu phản hồi từ người dùng.

Nhờ sự hỗ trợ này của con người mà ứng dụng mang đến cấu hình thứ baBusiness End-value (giá trị đối với doanh nghiệp). Thông thường đơn vị ứng dụng giải pháp, sản phẩm sẽ nằm ở 1 trong 5 loại giá trị cơ bản nhất:

  1. Giảm thiểu chi phí
  2. Gia tăng doanh thu
  3. Hạn chế được các rủi ro
  4. Trải nghiệm người dùng tốt hơn
  5. Thúc đẩy quá trình nghiên cứu và phát triển sản phẩm thành dịch vụ mới

Khi có được các giá trị với người dùng cuối này rồi thì trải nghiệm người dùng, về cơ bản, sẽ trở nên tốt hơn và quan trọng hơn đó là sự gắn kết của người dùng với sản phẩm sẽ trở nên lâu bền hơn. Nhờ đó, chúng ta sẽ thu thập được nhiều dữ liệu quan trọng liên quan đến trải nghiệm người dùng và tái sử dụng dữ liệu này để đưa ra tính năng AI chính xác hơn sau này.

data harvest loop
Giải pháp AI cần đáp ứng được những giá trị cơ bản

Nguyên nhân của việc cần thay đổi concept

Hiện tại đang có 2 chiến lược chính mà Cinnamon AI theo đuổi.

Thứ nhất là Innovation Sales.
Đây là một phương thức bán hàng cho phép Cinnamon AI giữ quyền kiểm soát lớn hơn trong việc quyết định các tính năng nào nên được xây dựng trong giải pháp cho khách hàng doanh nghiệp.

Thứ hai là Expert-in-the-Loop.
Đây là cách thiết kế AI và con người cùng làm việc với nhau để làm sao có thể mang lại giá trị cho người dùng cuối tốt hơn.

Innovation Sales là gì? Để phân tích khái niệm này, mình sẽ giới thiệu về một quá trình bán hàng hằng ngày tại Cinnamon AI.

Sau khi đã có những cuộc trao đổi với khách hàng thì Cinnamon AI sẽ tiến hành phân tích quy trình vận hành của họ. Từ quy trình hàng ngày đó, chúng tôi có thể phân tích được những tác vụ lặp đi lặp lại xem nên sử dụng hay cắt bỏ. Nhờ đó sẽ quy hoạch được phạm vi dữ liệu mà mình cần phải xử lý.

Từ phạm vi dữ liệu đó, chúng tôi sẽ tinh chỉnh lại, huấn luyện lại các mô hình AI để có thể đáp ứng được vấn đề mà khách hàng yêu cầu. Đây là cách truyền thống trong việc thiết kế ra một sản phẩm AI.

Tuy nhiên nếu chúng ta đi theo hướng tiếp cận này thì sẽ gây ra 3 vấn đề lớn:

Thứ nhất, nếu chỉ tập trung phân tích quy trình vận hành hiện tại của khách hàng thì:

  1. Việc tối ưu quy trình đơn lẻ trong một chu trình rộng lớn có thể không mang lại hiệu quả kinh tế cho đối tác của chúng ta.
  2. Sẽ có rất nhiều quy trình vận hành mà thật ra nó hoàn toàn có thể thay đổi hay không cần thiết ở thời điểm hiện tại mà chúng ta vẫn áp dụng AI vào nên không đạt được hiệu quả.

Thứ hai là khi thiết kế một giải pháp AI, ta cần kết hợp giữa 3 việc để có thể mang lại độ chính xác cao hơn cho các mô hình AI, gồm:

  • Tinh chỉnh chu trình vận hành
  • Xác định dữ liệu
  • Cải thiện công nghệ

Tuy nhiên, nếu phân tích quy trình vận hành theo cách truyền thống thì khách hàng sẽ kỳ vọng rất cao vào độ chính xác ở thời điểm hiện tại của các mô hình AI. Trong khi điều này về mặt công nghệ sẽ rất khó đạt được.

Thứ ba là đối với khách hàng mới, chúng ta sẽ có một lượng dữ liệu mới cần xử lý.

Do đó, chúng ta bắt buộc phải tinh chỉnh lại mô hình AI mà mình đã có sẵn. Điều này dẫn đến việc những cải tiến về mặt công nghệ mà chúng ta có được từ những khách hàng cũ, nhưng chưa chắc đã có thể tái ứng dụng lại với những khách hàng mới, khiến cho công ty rất khó tiếp tục mở rộng nếu không liên tục mở rộng nhân sự.

  "Cơ hội phát triển sự nghiệp AI với các ngành nghề là tương đồng" - Bảo Đại, AI Researcher tại Knorex

Concept được xây dựng và phát triển lại như thế nào?

Ở bước đầu tiên, thay vì phân tích về quy trình vận hành hàng ngày thì Cinnamon AI tập trung vào việc hiểu rất sâu và xác định được chiến lược cạnh tranh dài hạn của doanh nghiệp (1), đồng thời xác định được giá trị cuối mà doanh nghiệp muốn hướng tới (2). Hai giá trị này phải tương đương với nhau.

Khi đã hiểu rõ được định hướng phát triển về mặt lâu dài của doanh nghiệp, thì công ty cùng với khách hàng sẽ tìm được trải nghiệm người dùng nào là tối quan trọng mà khách hàng cần có để thêm nhiều người dùng cuối hơn.

Sau khi đã phân tích và đánh giá được đâu là trải nghiệm người dùng quan trọng hơn thì sẽ xác định được data flow. Tức là những loại dữ liệu nào là tối quan trọng mà chúng ta cần thu thập để có được những nhận định hoặc dự đoán tốt hơn trong tương lai.

Dựa vào các dữ liệu quan trọng này, Cinnamon AI mới thiết kế cách mà con người và máy làm việc với nhau ra sao để có thể liên tục thu thập được những loại dữ liệu như thế này.

Bước quan trọng và khác biệt nhất giữa cách bán hàng truyền thống và cách làm mới mà hiện tại Cinnamon AI đang áp dụng đó là ngay từ đầu, thay vì phân tích chu trình vận hành của khách hàng thì chúng ta cần tìm ra, đâu là giá trị khách hàng muốn hướng tới và đâu là lợi thế cạnh tranh lâu dài mà khách hàng muốn tạo dựng.

Nếu chúng ta có thể thuyết phục được khách hàng với những giá trị này hoặc nhiều hơn, khi chúng ta tích lũy được nhiều giá trị cuối thì những giá trị này sẽ chuyển đổi thành những giá trị lâu dài và việc chúng ta cần làm là bán được sản phẩm cho khách hàng.

Ngay từ đầu, thay vì phân tích chu trình vận hành của khách hàng thì chúng ta cần tìm ra đâu là giá trị khách hàng muốn hướng tới và đâu là lợi thế cạnh tranh lâu dài mà khách hàng muốn tạo dựng

Lấy ví dụ về việc giảm thiểu chi phí. Khi giảm thiểu chi phí đến mức nhất định thì có thể cân nhắc đó là sự sáng tạo đột phá trên thị trường.

Lấy ví dụ với một luật sư danh tiếng, thường chi phí để một cá nhân chi trả cho luật sư giải quyết trường hợp của mình là không hề nhỏ và không phải ai cũng đủ khả năng chi trả cũng như tiếp cận dịch vụ luật sư. Thế nhưng nếu chúng ta có thể sử dụng AI như công cụ hỗ trợ cho một người luật sư thì kết quả sẽ khác hẳn. Thay vì phục vụ 3 đến 5 khách hàng mỗi ngày, giờ đây họ có thể phục vụ đến 20, 30 khách hàng mỗi ngày. Rõ ràng khi năng suất lao động tăng lên như vậy thì chi phí sẽ giảm xuống.

Chúng ta hoàn toàn có thể tạo ra những microproduct.
Chẳng hạn như mọi người có thể lên những ứng dụng này đặt câu hỏi cho các luật sư và nhận được phản hồi từ họ. Đây rõ ràng là sản phẩm hoàn toàn mới và mang tính cạnh tranh cao trên thị trường, rộng mở hơn và rất khó bị sao chép bởi đối thủ. Đó là một trong những ví dụ rất điển hình khi chúng ta đẩy mạnh giá trị về cắt giảm chi phí đến một mức độ nhất định và sẽ tạo ra một microproduct, một sản phẩm mới rộng rãi hơn trên thị trường.

Thứ hai là phải thiết kế được quy trình để con người / chuyên gia tương tác được, phản hồi được với máy và máy cũng phải thu thập được những phản hồi như thế này.

Điều này rất quan trọng, vì khi ứng dụng công nghệ để giải quyết bất kỳ vấn đề thì thông thường chúng ta kỳ vọng rằng giải pháp đó sẽ đạt được hiệu quả 100% (dĩ nhiên vẫn có những trường hợp cho phép các công ty AI làm việc không cần độ chính xác tuyệt đối là 100%). Tuy nhiên nếu chúng ta chỉ dựa vào những tác vụ đó thì ứng dụng của AI sẽ rất hạn chế.

Vậy làm thế nào để đạt được độ chính xác 100% trong khi AI chỉ có thể đạt độ chính xác từ 60 – 80%? Hơn nữa, dù một công ty AI có thể đưa ra giải pháp đạt được độ chính xác đến 95% thì chưa chắc nó có thể ứng dụng được trong doanh nghiệp đó?

Đây chính là cơ hội để chúng ta thiết kế nên sản phẩm người và máy có thể cùng làm việc với nhau.

Tại Cinnamon AI, chúng tôi tập trung vào 3 mô hình chính:

  1. Một là Human Inspection Model – con người sẽ là cấu phần kiểm tra và chỉnh sửa lại kết quả dự đoán của AI.
  2. Thứ hai là Human Backup Model – con người sẽ đứng phía sau và sẵn sàng hỗ trợ cho AI trong trường hợp có sai sót.
    Một ví dụ điển hình của mô hình này là chatbot – ứng dụng trò chuyện với khách hàng. Nếu trường hợp chatbot bắt đầu trả lời sai quá nhiều và khiến khách hàng khó chịu thì tổng đài viên sẽ thay thế trả lời cuộc trò chuyện đó. Đối với khách hàng cuối có thể họ không nhận ra được sự thay đổi giữa người hay AI đang trả lời nhưng về cơ bản, trải nghiệm của người dùng cuối sẽ an toàn hơn nếu chỉ để cho AI nói chuyện một mình với khách.
  3. Mô hình số ba là Surveillance Model cũng là một trong những loại mô hình khó đạt được nhất.
    Đây là mô hình giám sát mà ở đó chúng ta có thể phát triển những phần mềm giám sát ngược lại AI để quan sát xem AI có khẳng định được độ chính xác với câu trả lời mà chúng đưa ra hay không. Nếu phát triển mô hình này hiệu quả thì con người chỉ cần tập trung vào chỉnh sửa, kiểm tra lại những dự đoán của AI mà ở đó AI không tin rằng nó đúng. Nhờ vậy nên có thể gia tăng năng suất lao động của con người lên rất nhiều lần.

Bài viết được trích dẫn từ phần trình bày của anh Nghiêm Xuân Bách tại sự kiện Vietnam Web Summit 2020 LIVE do TopDev tổ chức

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

Xem thêm các việc làm Developer hấp dẫn tại TopDev

Cách vận hành của Flexbox

Flexbox hứa hẹn sẽ giải cứu chúng ta khỏi những rắc rối đến từ CSS thuần (như tính năng vertical alignment chẳng hạn). Tuy nhiên, để thuần thục model mới này là 1 thách thức không hề dễ dàng.

Tác giả: Scott Domes

Hy vọng, các hình ảnh minh họa dưới đây sẽ giúp bạn hiểu rõ cách hoạt động của Flexbox, từ đó sử dụng Flexbox để build các layout tốt hơn.

Nguyên tắc cơ bản của Flexbox là tạo các layouts linh hoạt và trực quan. Để thực hiện được điều này, Flexbox sẽ để các containers tự quyết định cách phân bố đều “đứa con” của chính containers – bao gồm kích thước và khoảng cách giữa các containers.

Về nguyên tắc nghe thì khá hay nhưng hãy xem trên thực tế ra sao nhé! Chúng tôi đi sâu phân tích 5 properties Flexbox phổ biến nhất: chức năng của chúng, cách bạn sử dụng các properties và kết quả thu được là gì.

Property #1: Display: Flex

Đây là ví dụ webpage của chúng tôi:

Cách vận hành của Flexbox

Bạn có 4 thẻ với 4 màu và 4 kích thước khác nhau nằm trong 1 thẻ container xám. Hiện tại, mỗi thẻ được mặc định display: block. Mỗi square chiếm đầy bề rộng line của mình.

Để khởi động với Flexbox, bạn cần biến container thành 1 flex container. Rất đơn giản!

#container {
  display: flex;
}

Cách vận hành của Flexbox

Không có nhiều thay đổi – các thẻ của bạn đã được hiển thị theo hàng. Nhưng đằng sau đó, bạn đã hoàn thành 1 công việc cực kì “quyền lực”. Bạn đã cho các ô vuông của mình 1 thứ gọi là flex context.

Bây giờ, bạn có thể bắt đầu định vị chúng trong context đó – công việc bớt khó nhằn hơn nhiều so với CSS truyền thống.

Property #2: Flex Direction

Một Flexbox container có 2 trục: 1 trục chính và 1 trục chéo được thiết kế mặc định như sau: 

Cách vận hành của Flexbox

Theo mặc định, các items được sắp xếp dọc trục chính, từ trái qua phải. Đây là lý do các squares của bạn được mặc định thẳng hàng khi bạn áp dụng display: flex.

NhưngFlex-directionsẽ giúp bạn xoay trục chính.

#container {
  display: flex;
  flex-direction: column;
}
Cách vận hành của Flexbox

Có 1 sự khác biệt rất rõ ở đây: thay vì trên trục chính, flex-direction: column lại không căn chỉnh các squares trên trục chéo, khiến cho bản thân trục chính sẽ chuyển từ chiều ngang sang chiều dọc. 

Vài phương án cho flex-direction khác chính là: row-reverse và column-reverse.

Cách vận hành của Flexbox

Property #3: Justify Content

Justify-content quản lý cách bạn căn chỉnh các items trên trục chính.

Đầu tiên, hãy trở lại với flex-direction: row.

#container {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
}

Bạn có 5 lệnh để sử dụng justify-content:

  1. Flex-start
  2. Flex-end
  3. Center
  4. Space-between
  5. Space-around
Cách vận hành của Flexbox

Không gian trống xung quanh và không gian trống ở giữa là ít trực quan nhất. Không gian trống ở giữa sẽ đem đến khoảng trống bằng nhau giữa mỗi square, nhưng giữa square với container thì không.

Khoảng trống xung quanh sẽ sắp xếp khoảng trống bằng nhau ở 1 trong 2 phía của square – đồng nghĩa là khoảng trống giữa các squares ngoài cùng nhất và container chỉ còn lại 1 nửa so với khoảng trống giữa 2 squares (mỗi square lại đóng góp lượng bản lề bằng nhau không trùng lắp, nhờ đó mà tăng gấp đôi khoảng trống)

Lưu ý cuối cùng: justify-content hoạt động song song với trục chính và flex-direction sẽ chuyển đổi trục chính. 

Property #4: Align Items

Nếu justify-content chạy trên trục chính thì align-items áp dụng cho trục chéo.

Cách vận hành của Flexbox

Hãy reset flex-direction lại thành hàng row, nhờ đó các trục của chúng ta sẽ trông giống như hình trên.

Sau đây là 5 lên align-items.

  1. flex-start
  2. flex-end
  3. center
  4. stretch
  5. baseline

Ba lệnh đầu tiên tương tự như justify-content, nên không có gì quá “vi diệu” ở đây.

Tuy nhiên, 2 lệnh ở dưới lại có chút khác biệt.

Bạn có stretch, nhờ đó items có thể chiếm toàn bộ trục chéo và baseline – trong baseline phần cuối của các paragraph tags sẽ được căn chỉnh.

Cách vận hành của Flexbox

(Lưu ý rằng với align-items: stretch, tôi phải set chiều cao của các squares ở chế độ auto. Trái lại, property height sẽ ghi đè lên stretch)

Với baseline, nếu bỏ các paragraph tags đi, baseline sẽ căn chỉnh bottom của các squares như sau:

Cách vận hành của Flexbox

Để chứng mình trục chính và trục chéo tốt hơn, hãy combine justify-content và align-items, và chứng kiến sự khác biệt của centering khi hoạt động trong 2 lệnh flex-direction.

Cách vận hành của Flexbox

Với hàng, các squares được set dọc theo trục chính nằm ngang. Với column, các square sẽ nằm theo trục chính dọc. 

Dù các squares được đặt trung tâm theo chiều dọc và chiều ngang trong cả 2 trường hợp nhưng cả 2 trường hợp đều không thể hoán đổi!

Property #5: Align Self

Align-self cho phép bạn vận dụng alignment thủ công của 1 yếu tố cụ thể.

Về cơ bản, align-self ghi đè align-items cho 1 square. Dù được thiết lập auto nhưng tất cả các properties đều như nhau, trong đó align-self sẽ follow align-items của container.

#container {
  align-items: flex-start;
}
.square#one {
  align-self: center;
}
// Only this square will be centered.

Đây là kết quả hiển thị. Bạn sẽ áp dụng align-self vào 2 squares và phần còn lại thì áp dụng align-items: center và flex-direction: row.

Cách vận hành của Flexbox

Kết luận

Dù chúng ta mới chỉ tìm hiểu sơ về Flexbox nhưng những lệnh này là đủ để bạn giải quyết các alignments cơ bản nhất – và căn chỉnh dọc nội dung chính của bạn.

Bài viết gốc đựoc đăng tải tại freecodecamp

Cos thể bạn quan tâm:

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

HR Manager là gì? Nhân sự HR Manager là làm gì?

HR Manager là gì
HR Manager là gì

Nhiều vị trí nhân sự được quan tâm và dường như nhiều người đã biết làm nhân sự là làm gì. Tuy nhiên, các vị trí cao hơn như HR Manager có gì đặc biệt? HR Manager là gì? Công việc và những năng lực nào cần rèn luyện để trở thành một HR Manager giỏi? Cùng TopDev tìm hiểu bài viết sau đây!

HR Manager là gì?

Trưởng phòng Nhân sự (hay HR Manager) được biết đến là người đứng đầu bộ phận nhân sự. Họ trực tiếp chịu trách nhiệm phát triển, quản lý và triển khai các chiến lược nhân sự phù hợp với chiến lược kinh doanh tổng thể, giúp giải quyết các yêu cầu, khiếu nại hoặc các vấn đề khác liên quan tới bộ phận Nhân sự.

HR Manager là gì
HR Manager là gì

Vậy HR Manager cụ thể sẽ làm gì?

Dưới đây là mô ta về những nhiệm vụ mà một HR Manager có thể chịu trách nhiệm thực hiện.

– Xây dựng kế hoạch và thực hiện chiến lược nhân sự phù hợp với chiến lược kinh doanh tổng thể theo từng giai đoạn phát triển của công ty.

– Thiết lập, theo dõi và quản lý quy trình truyển dụng, giám sát tuyển chọn và sàng lọc các ứng viên.

– Đánh giá nhu cầu và chất lượng đào tạo; nhằm triển khai việc thực hiện các giải pháp mới đối với khung đào tạo chất lượng chuyên môn cho nhân viên.

– Vạch ra chiến lược cụ thể; hỗ trợ nhu cầu phát triển doanh nghiệp, các vấn đề về sự đồng hành và giữ chân.

– Phân tích theo dõi để xây dựng hệ thống đánh giá chất lượng; khung khen thưởng cho nhân viên.

– Hoàn thiện và phát triển văn hóa doanh nghiệp.

– Rà soát, kiểm tra những thông tin về số liệu có liên quan đến các báo cáo 

– Đảm bảo tuân thủ pháp luật trong hoạt động quản trị nguồn nhân lực.

>>> Xem thêm: Nhân sự là làm gì? Có gì thú vị xoay quanh nghề Nhân sự

KPI của HR Manager có gì?

Mỗi vị trí ngành nghề đều có những hệ KPI riêng phù hợp với năng lực của mỗi người. Cùng TopDev điểm qua đâu là những hệ KPI chủ yếu mà một HR Manager cần phải theo dõi và bám sát.

  • Tổng số lượng CV theo từng đợt tuyển dụng định kỳ (có thể có đợt bổ sung)
  • Tỷ lệ ứng viên đạt yêu cầu theo JD nhà tuyển dụng
  • Chỉ số hiệu quả quảng cáo tuyển dụng (chiếm phần trăm khá nhiều)
  • Tổng thời gian trung bình để tuyển các ứng viên
  • % ứng viên/phí tuyển dụng
  • Hệ chỉ số về hiệu quả tuyển dụng

HR Manager cần những yếu cầu nào về công việc? Đâu là những năng lực liên quan?

HR Manager là gì
HR Manager là gì

Yêu câu công việc

  • Là người có kinh nghiệm từ 2 năm trở lên từng làm vị trí trưởng phòng Nhân sự hoặc tương đương.
  • Có khả năng làm việc với con người, hiểu và nắm bắt xu hướng phát triển về tâm lý, hành vi con người là một lợi thế.
  • Kỹ năng  lắng nghe, thấu hiểu, đàm phán, thuyết phục, phân tích phải xuất sắc.
  • Có kỹ năng truyền tải thông điệp, truyền cảm hứng tốt.
  • Khả năng Teamwork lẫn khả năng làm việc độc lập đều tốt.
  • Có những am hiểu chuyên sâu về luật lao động, quyền lợi nhân sự, tính chất ngành nghề và những kinh nghiệm thực tế áp dụng cho quản trị nhân sự tốt.

Tìm hiểu về các năng lực có liên quan

Có những am hiểu từ cơ bản đến nâng cao về chuyên môn nghiệp vụ

– Trình độ giao tiệp ngôn ngữ tốt

– Ngoại ngữ – tiếng Anh có thể ổn hoặc nâng cao ở cả 4 kỹ năng

– Ngoại ngữ khác là một lợi thế (Trung, Hàn, Nhật,…)

– Kỹ năng giao tiếp

– Tư duy chiến lược

– Kỹ năng quản trị phân tích – giải quyết vấn đề, đưa ra quyết định

– Thái độ và lối tư duy cầu tiền

– Luôn tỉ mỉ và cẩn trọng tước mọi quy trình thực hiện công việc.

– Kỹ năng xây dựng và làm việc nhóm hiệu qủa

Bật mí về bộ câu hỏi phỏng vấn

Những câu hỏi phỏng vấn luôn được xem là những thách thức lớn cho mỗi HR Manager. Nó bao gồm cả những bí quyết phỏng vấn, lỗi khi đi phỏng vấngây ấn tượng lúc phỏng vấn những cấm kỵ khi đi phỏng vấn,…

  • Hãy mô tả về cách thức bạn tìm kiếm các ứng viên. Làm cách nào để tiếp cận các ứng viên đó (trên social media và các phương thức khác)
  • Bạn có thể mô tả thử một quy trình tuyển dụng cho nhân viên mới đúng chuẩn cho doanh nghiệp? 
  • Theo bạn, một chiến dịch đào tạo nhân sự tốt cho tổ chức sẽ bao gồm hững yếu tố nào?
  • Chính sách đầu tiên bạn muốn áp dụng/thay đổi tại công ty chúng tôi trong ngày đầu tiên bạn làm việc là gì? Bạn có những ưu tiên nào đặt ra trong chu trình thiết lập và hoàn thiện các chính sách về nhân sự.
  • Cách hiểu của bạn về văn hóa danh nghiệp là như thế nào? Bạn có những cách thức nào để giúp cho văn hóa doanh nghiệp trở nên phát triển hơn? 
  • Là một HR Manager, bạn có giải pháp nào giúp giải quyết những mâu thuẫn giữa nhân viên và quản lý? 
  • Đâu là những cách thức hữu hiệu giúp gia tăng sự hài lòng đối với nhân viên của bạn? Bạn sẽ dùng phương pháp nào để thực hiện điều đó.

Tuyển Dụng Nhân Tài IT Cùng TopDev
Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products

Có thể bạn quan tâm

Xem thêm Top Việc làm Developer trên TopDev

Có cần bằng cấp về khoa học máy tính để được làm việc trong lĩnh vực công nghệ?

khoa học máy tính
Có cần bằng cấp về khoa học máy tính để được làm việc trong lĩnh vực công nghệ?

Tác giả: Dave Gray

Nếu muốn tìm hiểu và gia nhập lĩnh vực công nghệ thông tin, có lẽ không ít người trong số chúng ta đã nghe đến việc cần phải có chứng chỉ hay bằng cấp liên quan đến lĩnh vực này, trong số đó có những loại bằng liên quan đến ngành khoa học máy tính.

Tuy nhiên, có thật sự như vậy không?

khoa học máy tính

1. Những điều bạn cần biết nếu đang xem xét học thêm một tấm bằng

Bạn nên tập trung vào những gì bạn thật sự muốn làm. Lên một kế hoạch cụ thể và biến nó thành hành động để đạt được loại bằng cấp mà mình mong muốn.

Nếu bạn không tập trung vào những gì bạn muốn làm, bạn có thể lãng phí tiền bạc và thời gian (điều này thậm chí còn có giá trị hơn) để tham gia các lớp học mà bạn không hứng thú và tốn rất nhiều tiền bạc. Hãy xác định xem bạn thật sự muốn làm gì?

Tôi học đại học ngay sau khi tốt nghiệp trung học vì bố mẹ tôi nhất quyết không đồng ý cho tôi theo đuổi con đường riêng của mình. Tôi đã kết thúc việc thay đổi chuyên ngành nhiều lần trong 4 năm rưỡi vì tôi thật sự không tìm thấy được đam mê trong chúng. Tôi muốn trở thành một nhạc sĩ trên con đường tương lai với một ban nhạc chứ không phải là một sinh viên. Cha mẹ tôi cần để cho tôi tìm thấy chính mình, tôi nghĩ vậy.

Xem thêm các việc làm tuyển dụng Tester HCM hấp dẫn tại TopDev

2. Khám phá giá trị của bản thân

Tương tự như vậy, tôi nghĩ học đại học để khám phá bản thân và sở thích của bạn thông qua thử và sai là không hợp lý đối với hầu hết mọi người. Hỏi những người bạn biết những người đã hoàn thành một chương trình xem họ có tập trung hoặc thay đổi chuyên ngành một hoặc nhiều lần hay không. Hỏi họ xem họ sẽ làm gì khác bây giờ.

Trước sự thất vọng của cha mẹ, tôi bỏ học đại học và trở thành một nhạc sĩ toàn thời gian. Trong vòng 3 tháng, tôi biết mình muốn đi học lại. Nhưng lần này thật sự khác với những lần trước đó. Vì đây là quyết định của tôi. Điểm của tôi được cải thiện. Bây giờ tôi đã có mong muốn học hỏi.

  Tóm tắt lịch sử phát triển máy tính đến hiện nay
  Bill Gates và Mark Zuckerberg lo lắng trước sự phát triển của máy móc và AI

khoa học máy tính

3. Hãy tự lựa chọn con đường đi cho riêng mình

Nếu bạn tập trung và biết mình muốn trở thành một web developer hoặc một kỹ sư phần mềm, thì nền giáo dục truyền thống có thể vẫn không phù hợp với bạn.

Bạn đã học cách tập trung và rèn luyện tính kỷ luật như thế nào?

Một nền giáo dục truyền thống cung cấp một lộ trình học tập cho bạn cũng như một lịch trình nghiêm ngặt. Một số học sinh cần có trách nhiệm giải trình này để luôn đi đúng hướng. Một số cũng phải vật lộn với việc học từ xa hơn những người khác. Nó thực sự là về việc xác định những gì giúp bạn học và thành công khi còn là một sinh viên.

Bằng cấp sẽ mở ra một số cánh cửa và giúp bạn được cân nhắc cho một số vị trí? Đúng!

Nhưng có bắt buộc phải có bằng cấp để làm việc trong lĩnh vực công nghệ thông tin không? Không!

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

4. Những điều cần biết nếu bạn đang có ý định nhảy việc sang vị trí mới

Tôi không học chuyên ngành khoa học máy tính. Ngành nghề này không tồn tại khi tôi học. Tôi đã học được các kỹ năng cần thiết cho công việc thông qua việc tự học.

Tôi đủ điều kiện để giảng dạy các khóa học đại học do có kinh nghiệm đáng kể trong lĩnh vực này và có bằng cấp cao hơn. Tôi đã tiếp tục học hỏi qua mỗi ngày, mỗi năm. Bây giờ tôi đang tiếp tục kế hoạch học tập để lấy bằng Tiến sĩ về Hệ thống Thông tin, đây cũng là điều mà tôi muốn chia sẻ với bạn:

Muốn thành công, bạn phải là một người học hỏi suốt đời. Những ngày duy trì một công việc cho toàn bộ sự nghiệp của bạn hầu như không còn nữa. Các nhà phát triển không ngừng học hỏi các kỹ năng mới, đặc biệt là về khoa học máy tính và phát triển web, để bắt kịp với tốc độ của ngành.

Xem thêm các việc làm tuyển dụng Tester chưa có kinh nghiệp hấp dẫn tại TopDev

Đây là những điều tôi vẫn đánh giá cao nhất với tư cách là người hướng dẫn. Tôi đã kết bạn với những đồng nghiệp từ hai phía khác nhau của thế giới. Tôi đã dạy các sinh viên từ khắp nơi trên thế giới đã tự lập nghiệp. Bây giờ tôi cũng coi trọng tình bạn và mối quan hệ của họ.

Thoát ra khỏi vùng an toàn của bạn và không ngừng phát triển mạng lưới của bạn. Vậy bạn nên làm gì?

Điều này hoàn toàn tùy thuộc vào bạn! Nếu bạn có tập trung, kỷ luật và mong muốn trở thành một kỹ sư phần mềm hoặc nhà phát triển, bạn sẽ thành công cho dù bạn chọn con đường nào.

Hi vọng rằng bạn sẽ gặp được những điều tốt nhất trong lựa chọn của mình!

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

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

Xem thêm việc làm tuyển dụng Tester hấp dẫn tại TopDev

Hiểu sâu về trí tuệ nhân tạo & Machine Learning tại Apple

machine learning

Nhiều khả năng, thước đo chính xác nhất cho sự tiến bộ của Machine Learning tại Apple đến từ cộng cuộc mua lại AI quan trọng nhất từ trước đến nay, Siri. Nguồn gốc của Siri chính là chương trình DARPA tham vọng liên quan đến các trợ lý thông minh.

Sau đó, 1 số scientists đã thành lập công ty riêng, sử dụng chương trình DARPA để phát triển thành ứng dụng. Steve Jobs đã tự mình thuyết phục những người sáng lập bán DARPA lại cho Apple vào năm 2010 và trực tiếp đưa Siri vào hệ thống điều hành. Sau đó, màn ra mắt của Siri chính là điểm nhấn trong sự kiện công bố iPhone 4S (10/2011).

Giờ đây, cách thức hoạt động của Siri đã tiên tiến đến nỗi users không cần phải kích hoạt nó bằng nút home hay thậm chí không cần nói “Hey, Siri” (1 tính năng tận dụng công nghệ Machine Learning, giúp iPhone nghe ngóng được thông tin mà không hao tốn pin). Trí thông minh của Siri đã được tích hợp vào Apple Brain và tự hoạt động dù users không trực tiếp mở lời ra lệnh.

Eddy Cute chỉ ra 4 yếu tố cốt lõi của Siri chính là: nhận diện giọng nói (để hiểu được thời điểm nào bạn nói chuyện với Siri), khả năng hiểu ngôn ngữ tự nhiên (để nắm bắt những gì bạn đang nói), execution (để thực hiện truy vấn hoặc request) và phản hồi (để trả lời lại với bạn). “Machine Learning có sức ảnh hưởng đáng kể đến tất cả các yếu tố đó” – Eddy Cue nói.

Tom Gruber – người đến với Apple thông qua thương vụ xác nhập trên (các đồng sáng lập cùng thời với Gruber rời đi sau năm 2011) cho rằng thậm chí trước khi Apple áp dụng neural nets vào Siri thì quy mô user base của Apple đã cung cấp nguồn dữ liệu dùng để “huấn luyện” các nets về sau.

“Steve Jobs nói rằng tôi đang có 1 bước ngoặt lớn, từ 1 người đi đầu, 1 ứng dụng đến với hàng trăm triệu users mà không hề sở hữu 1 chương trình beta nào. Cứ thế, bạn đột nhiên sở hữu rất nhiều users. Users sẽ nói với bạn cách mọi người bàn tán về những gì phù hợp với ứng dụng của bạn. Đây chính là bước phát triển đầu tiên. Và sau đó, neural networks đã xuất hiện”

Quá trình chuyển đổi sang neural net xử lý nhận diện giọng nói của Siri được thực hiện khi rất nhiều chuyên gia AI gia nhập Apple, trong đó có Alex Acero. Acero đã bắt đầu sự nghiệp với nhận diện giọng nói tại Apple trong những năm đầu 90 và sau đó dành nhiều năm làm việc tại Microsoft Research.

“Tôi rất yêu thích công việc đó và đã xuất bản nhiều bài viết. Nhưng khi Siri ra đời, tôi nhận ra: Đây là cơ hội để biến các deep neural networks thành hiện thực, không phải là thứ hàng trăm người sẽ đọc, mà là thứ được hàng triệu người sử dụng”. Nói cách khác, Alex Acero là 1 kiểu scientist mà Apple đang tìm kiếm – tối ưu hóa sản phẩm hơn là tập trung vào publishing.

Khi Acero đến “nhà táo” cách đây 3 năm, Apple vẫn đang cấp giấy phép cho hầu hết công nghệ giọng nói cho Siri từ bên thứ 3. Federighi bảo đây là 1 pattern mà Apple nghiên cứu liên tục.

“Khi 1 lĩnh vực công nghệ có đóng góp quan trọng cho sản phẩm trong thời gian dài, chúng tôi sẽ xây dựng đội ngũ in-house để truyền tải được kinh nghiệm mà user muốn. Để tạo ra 1 sản phẩm tuyệt vời, chúng tôi muốn sở hữu và đổi mới công nghệ đó hơn nữa bằng nguồn lực nội bộ. Speech là 1 ví dụ ngoại lệ khi chúng tôi áp dụng các tài nguyên bên ngoài có sẵn, nhờ đó đạt được hiệu quả tốt ngay từ đầu”

Từ đây, team bắt đầu huấn luyện neural net để thay thế nguyên bản của Siri. “Chúng tôi có GPU (graphics processing unit microprocessor – 1 bộ vi xử lý chuyên dụng nhận nhiệm vụ tăng tốc, xử lý đồ họa cho bộ vi xử lý trung tâm CPU) lớn nhất và tệ nhất… Và rất nhiều dữ liệu”. Lần ra mắt của Siri vào 7/2014 đã cho thấy tất cả hoạt động đó không hề vô ích.

“Tỷ lệ mắc lỗi của Siri giảm… Hầu hết là nhờ deep learning và cách chúng tôi tối ưu deep learning – không chỉ nhờ chính thuật toán mà còn nhờ context của toàn bộ sản phẩm end-to-end”

Nói về “end-to-end”, Apple không phải là công ty đầu tiên sử dụng DNNs trong nhận diện giọng nói. Nhưng bằng cách kiểm soát toàn bộ hệ thống delivery, Apple lại có lợi thế riêng. Vì Apple tự tạo chips riêng nên Acero có thể làm việc trực tiếp với đội ngũ thiết kế silicon và các kĩ sư viết firmware cho các thiết bị để tối ưu hiệu suất của neural net. Nhu cầu của Siri team thậm chí còn ảnh hưởng đến thiết kế của iPhone.

“Không chỉ là silicon” – Federighi chia sẻ – “Đó chính số lượng những microphones chúng tôi đặt trong thiết bị, là nơi chúng tôi đặt microphones. Cách chúng tôi điều chỉnh hardware, những mics đó và software stack xử lý audio. Chúng trở thành những mảnh ghép gắn kết với nhau – 1 lợi thế không tưởng so với các doanh nghiệp phải xây dựng 1 vài phần mềm nào đó, và chỉ biết ngồi xem chuyện sẽ xảy đến”.

Một khía cạnh khác: Khi 1 Apple neural net hoạt động trong 1 sản phẩm, nó có thể trở thành 1 công nghệ cốt lõi sử dụng cho những mục đích khác. Vì thế, khi Machine Learning hỗ trợ Siri thấu hiểu user, Machine Learning đã trở thành công cụ dùng để xử lý chính tả thay thế cho typing. Hệ quả là, users nhận ra thông điệp và emails của họ trở nên mạch lạc hơn nếu họ không sử dụng bàn phím mềm; dần dần, users sẽ nhấn vào microphone key và nói chuyện nhiều hơn.

Yếu tố thứ 2 của Siri mà Eddy Cue đề cập chính là khả năng hiểu được ngôn ngữ tự nhiên (natural language understanding). Siri bắt đầu sử dụng Machine Learning để hiểu được nguyện vọng của người dùng kể từ tháng 11/2014 và ra mắt 1 phiên bản học sâu hơn 1 năm sau đó.

Thời điểm Siri sở hữu tính năng nhận diện giọng nói thì Machine Learning đã có kinh nghiệm trong việc phiên dịch các dòng lệnh linh hoạt hơn. Eddy lấy iPhone của mình ra, kích hoạt Siri làm ví dụ. “Thông qu ứng dụng Square Cash, gửi đến Jane 20 dollars”. Màn hình lúc này sẽ phản ánh toàn bộ request của Cue. Eddy Cue thử 1 lần nữa, nhưng thay đổi ngôn từ 1 chút. “Bắn 20 bucks đến vợ của tôi”. Kết quả vẫn tương tự.

Nếu không có các tiến bộ về Siri, Apple sẽ không thể liên tục ra mắt Apple TV – thiết bị nổi bật với tính năng quản lý giọng nói tân tiến. Tuy các phiên bản trước đây của Siri yêu cầu bạn nói 1 cách hạn chế thì phiên bản supercharged-nhờ-deep-learning không chỉ mang đến những lựa chọn chuyên biệt từ rất nhiều catalog về movies và bài hát, mà còn giải quyết các concepts như: Hãy cho tôi 1 bộ phim kinh dị có Tom Hanks (Nếu Siri thật sự thông minh, nó sẽ trả về kết quả The Da Vinci Code). “Trước khi có công nghệ supercharged-nhờ-deep-learning, bạn sẽ không thể cung cấp được tính năng này” – Federighi đề cập.

Với iOS 10, được ra mắt vào mùa thu năm nay, giọng nói của Siri đã trở thành yếu tố cuối cùng trong 4 yếu tổ được chuyển đổi bởi machine learning. Về bản chất, dấu ấn của Siri đến từ database gồm các bản ghi âm thu thập được tại voice center; mỗi câu nói là sự chắp vá từ các bản ghi âm này. Theo Gruber, Machine Learning khiến mọi thứ trở nên mượt mà hơn và giúp âm thanh Siri giống người thực hơn.

Acero đã thực hiện 1 phiên bản demo đâu tiên tương tự giọng của Siri với các yếu tố robot quen thuộc. Phiên bản này sẽ hỏi bạn bằng 1 chất giọng quyến rũ lưu loát: “Hi, tôi có thể làm được gì cho bạn?”. Điểm khác biệt ở đây là gì? Chính deep learning!

Mặc dù chỉ là 1 chi tiết nhỏ, nhưng khi sở hữu 1 giọng nói tự nhiên hơn, Siri có thể đem đến những khác biệt lớn. “Mọi người sẽ thấy tin tưởng hơn nếu giọng nói có chất lượng cao hơn. Giọng nói càng thu hút người dùng thì càng khiến users sử dụng nhiều, góp phần tăng hiệu ứng hồi lại (return effect)”

Việc sử dụng Siri cũng như thực hiện những cải tiến trên Machine Learning của Apple càng có nhiều ý nghĩa hơn khi cuối cùng, Apple cũng mở Siri cho lập trình viên. Tuy nhiên với các chuyên gia thì quy trình này vẫn xảy ra quá muộn vì số lượng đối tác Siri bên thứ 3 mà Apple sở hữu chỉ dừng lại vài chục, trong khi Alexa của Amazon đã có hơn 1000 “kỹ năng” được cung cấp bởi các lập trình viên bên ngoài.

Apple lại cho rằng điều này không kéo dài vì users của Amazon phải sử dụng ngôn ngữ riêng để tiếp cận các kĩ năng đó. Theo Apple, Siri sẽ tích hợp những thứ như SquareCash hoặc Uber 1 cách tự nhiên hơn (1 đối thủ khác, Viv - được 1 vị đồng sáng lập Siri tạo nên – cũng hứa hẹn quy trình tích hợp chặt chẽ dù chưa công bố ngày ra mắt cụ thể)

Cùng lúc đó, Apple cũng thông báo rằng những cải tiến của Siri đang dần tạo ra sự khác biệt nhờ vào những tính năng mới hoặc thu được các kết quả tốt hơn từ những truy vấn quen thuộc. “Số lượng requests vẫn đang tăng và tăng. Tôi nghĩ Apple đang thực hiện tốt hơn công việc truyền thông tất cả những gì chúng tôi làm. Ví dụ, tôi thích thể thao và bạn có thể hỏi Siri ai là người mà nó nghĩ sẽ chiến thắng trận bóng, nó sẽ trả lại cho bạn 1 đáp án. Tôi còn không biết là Apple có thể làm được điều đó nữa cơ!” – Eddy Cue chia sẻ.

Có thể vấn đề lớn nhất khi Apple chấp nhận Machine Learning chính là cách để đạt được thành công dù vẫn cam kết những nguyên tắc bảo mật người dùng. Apple đã mã hóa thông tin users để không ai, kể cả các luật sư của Apple có thể đọc được (kể cả FBI dù có lệnh khám xét từ tòa án). Apple cũng không hề thu thập thông tin người dùng nhằm mục đích quảng cáo.

Tất nhiên đứng từ góc độ người dùng thì rất đáng khen ngợi nhưng sự nghiêm túc quá mức của Apple với vấn đề bảo mật này vẫn chưa mang lại hiệu quả trong việc lôi kéo các tài năng AI về với công ty. “Tất cả những gì mà các chuyên gia Machine Learning mong muốn đó chính là dữ liệu” – 1 nhân viên cũ của Apple, hiện đang làm cho công ty về AI cho biết – “Nhưng vì lập trường bảo mật mà Apple thường âm thầm làm mọi thứ. Bạn có thể sẽ tự hỏi liệu đó có phải là điều đúng đắn nhưng cũng chính điều đó khiến Apple trở nên nổi tiếng vì đã không trở thành những kẻ chạy đua theo công nghệ AI”

Quan điểm này bị các nhà điều hành của Apple tranh cãi rất nhiều vì họ cho rằng: vẫn có thể lấy được tất cả các dữ liệu và tận dụng mạnh mẽ công cụ Machine Learning mà không cần phải giữ thông tin cá nhân của users trên cloud, thậm chí cũng không cần lưu lại hành vì của user để huấn luyện cho neural nets

Tham khảo thêm: Các vị trí tuyển dụng machine learning tại Topdev

Có 2 vấn đề ở đây

Thứ nhất, chính là việc xử lý thông tin cá nhân trong các hệ thống dựa trên Machine Learning. Khi thông tin chi tiết về 1 user được lượm lặt qua hệ thống xử lý neural-net, chuyện gì sẽ xảy ra với thông tin đó? Thứ hai, việc thu thập thông tin đòi hỏi phải huấn luyện các neural-nets nhận diện hành vi. Nhưng làm thế nào để làm được điều đó mà không thu thập thông tin cá nhân của users?

Apple đã có câu trả lời cho cả 2 vấn đề. “Một số người nhận thức được chúng tôi không thể thực hiện những điều này với AI vì chúng tôi không có data. Nhưng chúng tôi đã tìm ra cách để lấy dữ liệu mà chúng tôi cần nhưng vẫn giữ được tính bảo mật. Đó chính là điểm mấu chốt”

Apple đã giải quyết vấn đề đầu tiên – bảo vệ sở thích và thông tin cá nhân mà neural nets đã nhận diện được – bằng cách tận dụng khả năng quản lý cả phần mềm và phần cứng độc quyền. Nói 1 cách đơn giản, đó chính là Apple Brain. “Chúng ta giữ lại 1 vài thông tin nhạy cảm nhất khi Machine Learning quét qua toàn bộ thiết bị” – Federighi nói.

Ví dụ, Federighi dẫn chứng các suggestions ứng dụng, icons xuất hiện khi bạn quét sang phải cũng chính những ứng dụng mà bạn định sẽ mở ra tiếp theo. Các dự đoán như thế được hình thành dựa trên rất nhiều yếu tố và rất nhiều trong số chúng liên quan đến hành vi của riêng người dùng. Theo Federighi, 90% thời gian con người dùng để tìm những gì họ muốn nhờ các những suggestions.

Thông tin khác mà Apple lưu trữ trên các thiết bị có thể là dữ liệu mang tính cá nhân nhất mà Apple thu thập được: những từ ngữ mà users gõ bằng bàn phím iPhone QuickType standard. Nhờ có hệ thống neural network theo dõi thời điểm bạn gõ chữ, Apple sẽ phát hiện được các events và items chính như thông tin chuyến bay, số liên lạc và lịch hẹn – nhưng các thông tin đó lại nằm trong điện thoại của bạn.

Thậm chí trong các backups lưu trên cloud của Apple, thông tin được chắt lọc để backup không thể đụng đến. “Chúng tôi không muốn thông tin đó được lưu trữ trong servers của Apple. Một tổ chức như Apple không có nhu cầu tìm hiểu về thói quen của bạn hay địa điểm bạn sẽ đến”

Apple cũng cố gắng giảm số lượng thông tin được giữ lại. Federighi đề cập đến ví dụ như sau: khi bạn có 1 cuộc hội thoại và ai đó nói đến 1 thuật ngữ có thể trở thành từ khóa tìm kiếm tiềm năng, các doanh nghiệp khác sẽ phải phân tích toàn bộ cuộc hội thoại trong cloud để nhận diện những thuật ngữ đó nhưng 1 thiết bị Apple có thể nhận diện được chúng mà không cần phải lấy data ra khỏi quyền sở hữu của người dùng. Hệ thống của Apple sẽ liên tục tìm kiếm các kết quả phù hợp theo knowledge base (thông tin chung) trong điện thoại (1 phần của “brain” 200 megabyte)

“Thao tác này rất gọn nhẹ nhưng được thực hiện xuyên suốt knowledge basse, với hàng trăm ngàn locations và entities….” Tất cả ứng dụng của Apple đều sử dụng knowledge base (thông tin chung) như app tìm kiếm Spotlight, Maps và Safari. Knowledge base còn hỗ trợ cả auto-correct.

Nhưng liệu những quy định bảo mật nghiêm ngặt của Apple có gây trở ngại cho các thuật toán neural net hay không – đó chính là vấn đề thứ 2 đã được đề cập trước. Neural nets cần 1 lượng lớn dữ liệu để được train đầy đủ, chính xác.

Nếu Apple không can thiệp vào hành vi của tất cả người dùng, vậy làm sao để lấy được dữ liệu đó? Như nhiều công ty khác đã làm, Apple huấn luyện nets của mình trên các tập thông tin công khai có sẵn (ví dụ như bộ thông tin gồm các stock images để nhận diện hình ảnh).

Nhưng thỉnh thoảng, nó cần nhiều thông tin chi tiết hơn hoặc cập nhật hơn, mà những thông tin này chỉ có thể đến từ user base. Apple đã cố gắng lấy thông tin này mà không cần biết đến users đó là ai; Apple ẩn dữ liệu, gắn nó với các mã nhận diện ngẫu nhiên không liên kết với Apple IDs.

Bắt đầu từ iOS 10, Apple dự định sẽ tuyển chọn 1 công nghệ khá mới tên là Differential Privacy. Công nghệ này dựa vào thông tin của đám đông và không nhận diện bất cứ cá nhân nào.

Chẳng hạn Diffential Privacy sẽ tìm các từ khóa nổi tiếng mới nhất không có trong knowledge base của Apple hoặc từ điển của Apple, thường xuất hiện bất ngờ dựa trên rất nhiều đáp án liên quan đến các truy vấn hoặc lượt sử dụng các emojis nào đó tăng cao.

“Cách thức truyền thống mà giới công nghệ giải quyết vấn đề này chính là gửi đi mọi từ, mọi kí tự mà bạn gõ lên servers, sau đó sẽ rà soát tất cả và phát hiện những thông tin thú vị” – Federighi trình bày. “Nhờ thực hiện mã hóa end-to-end, chúng tôi sẽ không làm theo cách thức truyền thống đó”. Dù Differential Privacy được phát triển trong cộng đồng research, Apple đang dần dần áp dụng nó trên diện rộng. “Chúng tôi đang thực hiện khảo sát trên 1 tỷ users” – Eddy Cue chia sẻ.

“Chúng tôi đã bắt đầu nghiên cứu công nghệ này từ nhiều năm trước và đã hoàn thành nhiều sản phẩm hay, có tính thực tiễn. Mức độ bảo mật của nó thực rất đáng kinh ngạc” – Federighi (sau đó anh ấy mô tả 1 hệ thống liên quan đến các protocols mã hóa và tung đồng xu ảo mà tôi không theo dõi kịp.

Về cơ bản, công nghệ này liên quan đến việc thêm công cụ toán học vào những phần nào đó của dữ liệu để Apple có thể phát hiện các usage patterns dù không nhận diện các users cá nhân). Anh cũng đề cập đóng góp của Apple rất có giá trị đối với thế giới vì nó cho phép các scientists làm việc với quy trình implementation, từ đó có thể xuất bản bài viết về công trình cá nhân.

Rõ ràng, Machine Learning đã thay đổi các sản phẩm của Apple nhưng liệu Machine Learning có đang thay đổi Apple hay không?. Ở khía cạnh nào đó, mindset về Machine Learning dường như khác biệt với các tập quán xưa nay của Apple.

Apple là 1 công ty kiểm soát cẩn thận trải nghiệm người dùng, kể cả các cảm biến dự đoán thao tác quét của users. Mọi thứ được thiết kế trước và được xây dựng các đoạn code 1 cách chính xác. Nhưng khi các kĩ sư áp dụng Machine Learning, họ phải lùi lại, để chính phần mềm tự khám phá các hướng giải quyết. Liệu Apple có chấp nhận thực tế là các hệ thống Machine Learning có thể tiếp cận đến thiết kế sản phẩm?

“Thiết kế sản phẩm là cội nguồn của rất nhiều cuộc tranh luận nội bộ. Chúng tôi thường mang đến các trải nghiệm đã được lên kế hoạch & giám sát chu đáo, từ đó chúng tôi cs thể quản lý tất cả các hướng đi mà hệ thống đang dự định tương tác với người dùng. Khi bạn bắt đầu huấn luyện 1 hệ thống dựa trên lượng dữ liệu hành vi người dùng lớn, [các kết quả xuất hiện] không nhất thiết là những gì mà 1 Apple designer chỉ định. Chúng là những gì xuất hiện từ dữ liệu”

Nhưng với Schiller, “Tuy những công nghệ này ảnh hưởng lớn đến cách thiết kế nhưng đến cuối cùng, chúng tôi mới là người sử dụng những công nghệ này vì chúng có thể giúp chúng tôi đem đến 1 sản phẩm chất lượng hơn”

Và đây là kết luận: Apple có thể không nói rõ về những gì họ đang với Machine Learning nhưng công ty sẽ tận dụng Machine Learning nhiều nhất có thể nhằm cải thiện các sản phẩm của mình. Bằng chứng chính là “bộ não” bên trong điện thoại của bạn.

“Khách hàng bình thường đang trải nghiệm deep learning mỗi ngày [và đây chính là ví dụ] cho thấy tại sao bạn lại yêu mến 1 sản phẩm nào đó của Apple. [Ví dụ] thú vị nhất chính là deep learning khôn khéo đến nỗi bạn thậm chí còn không biết về nó cho đến lần thứ 3 khi thấy nó, bạn sẽ dừng lại và tự hỏi: Điều gì đang xảy ra?”

Tác giả: Steven LevyBài viết gốc được đăng tải tại Backchannel

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

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

Những kiến thức UX hữu ích mà lập trình viên cần phải biết

Những kiến thức UX hữu ích mà lập trình viên cần phải biết

AMA (Ask Me Anything), một sự kiện Q&A ( Hỏi đáp trực tiếp ) diễn ra đều đặn trên fanpage của TopDev. Trong chương trình vừa rồi, anh Nguyễn Thanh Tùng đã có những chia sẻ hết mình với những thành viên trên cộng đồng lập trình.

Hiện anh đang đảm nhiệm vai trò là trưởng bộ phận phát triển sản phẩm Web – app thuộc công ty cổ phần Thế Giới Di Động. Anh có trên 10 năm kinh nghiệm làm Product Management và UI/UX, cộng thêm anh đã kinh qua rất nhiều dự án ở các công ty lớn như Baamboo MP3 (VCcorp), Anhso.net (Moorecorp),Thegioididong.com, Dienmayxanh.com, Ứng dụng TGDD. Hãy cũng xem qua những chia sẻ của anh với bạn đọc trong tuần qua.

Chào anh Tùng, anh cho em hỏi là nếu học UX có cần phải biết kỹ thuật không anh? Em muốn nghiên cứu UX thì nên bắt đầu từ đâu ạ?
Muốn làm UX designer không nhất thiết cần phải biết lập trình, nhưng nên rèn cho mình để có engineering/hacker mindset + trang bị cho mình kỹ năng Research thông tin khi gặp vấn đề (cần tiếng Anh tốt). Anh lấy một ví dụ cụ thể về Hacker mindset giúp ích thế nào cho việc gia tăng trải nghiệm UX (case study này của Instagram): xem link tại đây

thegioididong.com, Product Manager kiêm luôn vai trò UX và nhiều vấn đề về trải nghiệm người dùng cần được giải quyết bằng lập trình thì PM có thể research và đưa ra giải pháp cho Dev triển khai luôn (vì ko phải Dev nào cũng có kỹ năng research hay nhạy về UX). Ví dụ đợt rồi để tối ưu trải nghiệm loading app cho nhanh, anh là người đưa ra một số hướng đi kỹ thuật cho bên Dev tối ưu (dù anh xuất thân là dân Ngoại thương, học UI)

Em là iOS Dev. Mặc dù nhiều năm làm mobile nhưgn k có nhiều kiến thức về UX cũng như làm sao để tối ưu quy trình làm app của bản thân, vì nhiều khi k hiểu dc ý đồ của UX design lai đâm ra khó chịu không hợp lí. Với dev, nên bắt đầu học và hiểu UX từ nền tảng nào? Cảm ơn anh Tùng.

Ở thegioididong đã có lúc anh gặp vấn đề tương tự với team IT, và anh có làm một buổi chia sẻ với họ về việc vì sao IT nên biết UX và nên trang bị gì, em có thể tham khảo ở đây nhé

Xem thêm: Tuyển ui ux designer lương cao

Cái này có hơi kì 1 tí nhưng anh có thể chia sẻ với em cách để thuyết phục sếp duyệt UX của mình là gì ạ? Mặc dù mình tin là cái UX này sẽ work nhưng các sếp thì lại không thì làm sao anh?

UX tốt ko phải do em hay sếp em quyết định, mà do user sử dụng sp đó quyết định. Cách tốt nhất là sau khi thiết kế hãy mang sp ra ngoài cho user trải nghiệm thử (kỹ thuật thì nhiều: gửi survey hàng loạt, phỏng vấn ngẫu nhiên 5 user, gọi điện khách hàng cũ mời họ tham gia focus group testing). Ở tgdd, sau khi thiết kế xong bọn anh hay dựng prototype và mang nó cho một số user sử dụng thử, kết quả mang về thảo luận với team. Sếp mà sai thì cũng loại 🙂

Em muốn hỏi về con đường trở thành UX design của anh như thế nào ạ? hiện tại em đang muốn trở thành 1 UX designer nhưng chưa biết phải bắt đầu từ đâu ạ?

Quá trình học UX design của anh đến từ 2 nguồn:

– Học từ thực tế: em có thể xem qua con đường công việc mà anh đã làm. Trong đó trải nghiệm UX sâu sắc nhất là khi làm ở Thegioididong (5 năm). Các bài học truyền cảm hứng nhất về UX lại đến từ những người không ở trong lĩnh vực chuyên môn của mình mà đến từ những người “ngoại đạo”, họ cho mình thấy một điều là “UX bắt nguồn từ cuộc sống” và người làm UX nên ra ngoài trải nghiệm thực tế nhiều hơn là chỉ đọc và nghiên cứu. Quan điểm thiết kế UX của anh hiện tại là “tối giản” và “lúa hoá”. Anh có chia sẻ lúc trước ở đây:

– Tự học: anh đọc tài liệu, các bài viết về UI/UX mỗi ngày (nguồn chính giờ là medium.com, quora.com), tham gia trao đổi ở một số nhóm về UI/UX/Product Management trên Slack (group VN thì team Marquee, nước ngoài thì có https://www.productmanagerhq.com), kết nối và follow một số UI/UX designer + PM nổi tiếng trên thế giới ở Facebook, medium.com.

Anh có thể giới thiệu một số các UX designs từng truyền cảm hứng cho anh với em được không ạ?

Đây là một số UX design story mà anh ấn tượng thời gian gần đây – một case stuty chi tiết về quá trình thiết kế UX/UI của một ứng dụng giả định Google Hobbies
– Thiết kế lại trải nghiệm Uber theo hướng “lúa” và dễ sử dụng cho người già
– Thiết kế trải nghiệm nghe nhạc trên Spotify, anh rất ngạc nhiên khi biết cách thuật toán của spotify thông minh thế nào và làm sao mà họ có thể gợi ý nhạc đúng gu mình như vậy
-Phân tích về flow User onboard của các web/app nổi tiếng. Cũng học được nhiều về UX và cách làm UX audit

Em chào anh. Khó khăn lớn nhất trong 10 năm giữ vị trí PM của anh là gì? Cách anh vượt qua khó khăn đó ạ? Thêm nữa, tố chất để trở thành 1 PM giỏi là gì vậy anh? Cảm ơn anh.

Có 2 thách thức lớn nhất với anh sau 10 năm làm PM

– Năng lực quản trị và triển khai dự án: Làm sao để sản phẩm mà mình ấp ủ ra mắt ĐÚNG TIẾN ĐỘ, ĐÚNG THIẾT KẾ. Một số vấn đề mà các team thường hay gặp: Dev code xấu, ko như thiết kế; Dev ko đưa ra được giải pháp kỹ thuật để giải quyết vấn đề mình nêu hoặc chỉ được 50% kỳ vọng; Content long lanh như thiết kế lấy ai viết; quy trình giao hàng 30 phút ai làm được; …. Rất nhiều yếu tố chi phối đến kết quả của dự án và người PM giỏi phải có power và sự quyết liệt, cầu toàn để đưa mọi thứ về đích
– Thường thì khi em làm 10 năm trong một lĩnh vực, em sẽ có nhiều kinh nghiệm và các kinh nghiệm đó sẽ dần chuyển hoá thành các quan điểm, triết lý của em, điều này đôi khi sẽ khiến em khó tiếp thu các luồng suy nghĩ trái chiều hay các góc nhìn mới. Một người PM/UX designer nên giữ một thái độ cởi mở với mọi luận điểm, anh có chia sẻ ý đó trong slide này hoặc em đọc bài này.

Em có thể đọc series bài viết của chị này (Product Director của Facebook), chị ấy chia sẻ rất nhiều điều thú vị để trở thành một PM giỏi: https://medium.com/@joulee Còn muốn đọc sâu hơn để chuẩn bị làm một PM thì có nguồn này rất đầy đủ.

Dự án UI/UX mà anh tâm đắc nhất & những gì anh học được từ dự án đó? Em với team đang ấp ủ 1 dự án game chạy trên nền tảng di động, anh có kinh nghiệm UI/UX đối với dự án kiểu này không? Rất mong được nghe anh chia sẻ.

Mỗi nămthegioididong.com và Điện Máy Xanh (dienmayxanh.com) sẽ có một lần thay đổi UI/UX lớn để phục vụ cho việc bán hàng và phục vụ user tốt hơn, và sau mỗi dự án (khoảng 3-4 tháng) thì anh và team đều rút ra những bài học mới. Một số điều anh cho là quan trọng khi quản trị một dự án:
– Chọn một mô hình quản lý dự án hiệu quả: ở tgdd bọn anh dùng scrum
– Giao tiếp team minh bạch, rõ ràng, liên tục và thường xuyên là yếu tố mấu chốt quyết định thành công cho dự án
– Huy động nguồn lực từ nhiều bộ phận vào quá trình làm UX: trong quá trình làm, để sản phẩm có UX tốt nhất nhiều khi em sẽ đụng đến các team khác như content, logistics, call center. Đặt khách hàng làm trọng tâm, em sẽ thấy có nhiều thứ cần tác động đến các bộ phận để sản phảm có một UX flow tốt.

Xin cảm ơn anh Tùng về những chia sẻ của mình!

Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev

Để học lập trình hiệu quả: Hãy tiếp cận tất cả những gì có thể!

học lập trình
Để học lập trình hiệu quả: Hãy tiếp cận tất cả những gì có thể!

Tác giả: Endy Austin

Bạn có thể dành hàng tháng trời để đến phòng tập thể dục mà vẫn không thấy kết quả gì vì cách bạn tập luyện không đúng. Hầu hết chúng ta đều biết điều này. Và điều này cũng hoàn toàn đúng khi học lập trình. Bạn có thể dành hàng tháng trời để học, thử những thứ khác nhau, xem qua các hướng dẫn và vẫn cảm thấy như bạn là người mới bắt đầu.

Vậy làm thế nào để học lập trình hiệu quả hơn?

học lập trình
Học lập trình bằng cách nào để nhanh đạt được kế hoạch đặt ra?

Học lập trình với mẹo 2 phút

Nếu tôi nói với bạn rằng có một hướng dẫn dài 2 phút giúp bạn thành thạo JavaScript ngay lập tức, bạn có xem thử không? Dù bạn trả lời “có” hay “không”, điều đó không quan trọng. Nghĩa là, với điều kiện bạn hiểu sâu xa rằng chỉ một hướng dẫn ngắn thôi đã đi ngược lại nguyên tắc làm chủ bất kỳ miền nào.

Tóm lại, đây là cách làm việc hiệu quả mà bạn nên tuân theo: Bắt đầu với một đống thông tin khổng lồ. So sánh kiến ​​thức mới với những gì bạn đã biết trước đây. Liệt kê những điểm khác nhau mà thông tin mới và cũ mang lại. Kiểm tra bản thân bằng cách tạo ra các kiến ​​thức của bạn từ đầu. Và cuối cùng, hãy hướng dẫn lại cho người khác.

  10 câu nói cực hay về lập trình
  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java

Vì vậy, lần tới khi bạn nhìn thấy một hướng dẫn duy nhất trong đời hứa hẹn bạn sẽ thành thạo chỉ trong một lần xem, hãy nhớ rằng tốt nhất nó chỉ là cung cấp cho bạn kết xuất thông tin.

Hãy cố gắng ghi nhớ điều này và làm theo, kiến thức sẽ dần dần “đeo đuổi” bạn đó.

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

Làm thế nào để ứng phó với nỗi sợ mang tên “phấn đấu”?

Tôi đã thấy mọi người bỏ lập trình vì họ không muốn vật lộn với bug. Điều đó chẳng khác gì với việc bạn ghét phòng tập thể dục vì không muốn quá trình tập luyện của mình bị tổn thương. Nhưng thực tế là thế này: bạn không chạy trốn khỏi bug – bạn chỉ là đang tự cố gắng để tìm ra chúng nhanh hơn.

Bởi vì một lập trình viên thành thạo chỉ đơn giản là một người dò bug hiệu quả.

Mỗi khi bạn cảm thấy thất vọng vì có bug xuất hiện, hãy nhớ rằng đây cũng là cách giúp bạn mở mang cơ hội học tập và nâng cao chuyên môn. Nghiên cứu khoa học thần kinh khẳng định rằng luyện tập không chỉ đơn giản là làm cho bạn trở nên hoàn hảo – đó là luyện tập có chủ đích để cải thiện trong một nhiệm vụ cụ thể giúp bạn tốt hơn.

Và thực hành có chủ ý của một lập trình viên liên quan đến việc đấu tranh với bug. Vì vậy, bạn đừng nên kỳ vọng rằng mình sẽ lập trình mà không có bug. Hãy biết sửa sai để làm tốt hơn. Bạn càng nắm bắt được điều này sớm thì việc học của bạn càng trở nên hiệu quả hơn.

học lập trình
Học lập trình hiệu quả bằng cách nắm bắt đúng các kỹ năng

Bạn không kém cỏi, chỉ là bạn chưa học đúng trình độ

Hãy tưởng tượng bạn đang học ngôn ngữ tiếng Anh. Bạn bắt đầu với một hướng dẫn thúc đẩy bạn học đánh vần những từ lớn như ELEPHANT. Nhưng nó không hoàn toàn chính xác. Sau khi vật lộn với việc học trong một thời gian dài, bạn quyết định đi đến một hướng dẫn thấp hơn và học cách đánh vần các từ nhỏ hơn như ANT chẳng hạn. Nhưng rồi dù phải bỏ nhiều thời gian vẫn không đạt được kết quả mà bạn mong muốn.

Nhiều người cũng đã học viết code theo cách như thế.

“Tôi đã hoàn thành việc học viết code. Nhưng điều này rõ ràng không dành cho tôi”.

Xem thêm các việc làm tuyển dụng Tester HCM hấp dẫn tại TopDev

Ngay cả các khóa học giới thiệu cũng có thể được nâng cao bởi vì tư duy của bạn chưa được thiết kế để lập trình nói chung. Tôi thấy điều này không đủ được đề xuất, nhưng nếu bạn đang gặp khó khăn với các khóa học giới thiệu, bạn nên xem xét Giới thiệu về lập trình cho học sinh. Không có gì xấu hổ khi tìm kiếm thứ gì đó thấp hơn các khóa học giới thiệu và bắt đầu từ đó để xây dựng.

Họ sẽ cung cấp cho bạn phần giới thiệu mềm rất cần thiết, có ý nghĩa và giúp bạn hứng thú với việc lập trình. Một lần nữa, điều này không liên quan gì đến bản ngã. Đó là hành trình học tập của bạn. Bạn sẽ học hiệu quả hơn nếu bạn học ở cấp độ phù hợp.

  10 nguyên tắc lập trình nền tảng mà lập trình viên nào cũng cần biết

Động lực cũng giống như tắm bằng nước nóng

Khoa học đã chứng minh rằng tắm nước nóng sẽ khiến chúng ta cảm thấy tâm trạng tốt hơn. Bạn nên làm theo điều này. Vậy chẳng may bị mất nước nóng trong 2 tuần, bạn sẽ không tắm nữa?

Câu hỏi nghe thật nực cười.

Vậy nên dù tốt cũng không có nghĩa là ngày nào cũng thực hiện. Hãy cố gắng tạo động lực cho bản thân và luyện tập nhiều hơn vào những ngày bạn tràn đầy năng lượng và động lực làm việc.

Có rất nhiều ngày thú vị, phù hợp với việc viết code nhưng cũng sẽ có những ngày đen tối, không còn động lực làm việc. Thành thật mà nói, điều này không chỉ với lập trình mà bất kể là công việc gì mỗi ngày cũng đều như vậy. Nhưng bạn phải rèn luyện bản thân để xuất hiện không chỉ khi cảm thấy quá hứng khởi, mà còn cả vào những ngày buồn chán.

Xem thêm các việc làm tuyển dụng Tester chưa có kinh nghiệp hấp dẫn tại TopDev

Vào những ngày bạn cảm thấy có nhiều động lực, hãy sử dụng động lực để nhanh chóng cam kết thực hiện một điều gì đó lớn lao giúp bạn có trách nhiệm khi động lực cạn kiệt. Hãy viết những chương trình mà bạn còn tồn đọng và cảm thấy khó khăn với nó.

Bạn sử dụng những khoảnh khắc khi bạn lạc quan để cam kết tương lai cho khi bạn không còn động lực. Sử dụng kỹ thuật này và bạn sẽ duy trì được bản thân trong một khoảng thời gian dài hơn.

Học tập là một hành trình dài. Đừng để bản thân trở nên yếu kém khi bạn luôn có thể áp dụng những mẹo hữu ích này cho công việc mỗi ngày của mình, trong đó có công việc của một lập trình viên.

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

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

Xem thêm việc làm tuyển dụng Tester hấp dẫn tại TopDev

Giới thiệu bản thân khi phỏng vấn – Bật mí bí quyết ghi điểm tuyệt đối

giới thiệu bản thân khi phỏng vấn
giới thiệu bản thân khi phỏng vấn

Giới thiệu bản thân khi phỏng vấn được xem là một cách thức tạo dấu ấn khá quan trọng đối với bất kỳ một ứng viên nào. Có thể nói, việc giới thiệu bản thân khi phỏng vấn là một thách thức mà nhà tuyển dụng đặt ra cho mỗi ứng viên. Thoạt nghĩ, chúng ta tưởng chừng đây là một việc hết sức dẽ dàng. Tuy nhiên, để giới thiệu bản thân khi phỏng vấn hiệu quả lại là điều hoàn toàn không đơn giản. Cùng TopDev tìm hiểu bài viết sau đây để nắm bắt được bí quyết giúp ghi điểm tuyệt đối với nhà tuyển dụng.

Mỗi phát ngôn, mỗi lời kể – tường thuật lại trong buổi phỏng vấn của bạn đều thể hiện là bạn đang giao tiếp với nhà tuyển dụng. Do vậy, bạn cảm thấy đắn đo trong việc truyền tải những suy nghĩ? Bạn cởi mở hay giao tiếp một cách e dè; lo lắng khi giao tiếp? Hãy cùng điểm qua những bí quyết thực tế nhằm giúp các ứng viên ghi điểm tuyệt với nhà tuyển dụng; thiết lập xây dựng một quy trình giới thiệu bản thân khi phỏng vấn một cách hiểu quả và thiế thhực 

Cấu trúc của một lời giới thiệu bản thân khi phỏng vấn

Bên cạnh những thông tin cơ bản như tên, tuổi, ngành học, một lời giới thiệu bản thân khi phỏng vấn tìm việc nên đảm bảo những đặc điểm sau:

Hãy thể hiện rằng bạn là người có năng lực và tiềm năng phát triển tốt trong việc sắp xếp, tổ chức và thực hiện công việc.

Nhà tuyển dụng luôn muốn khai thác khả năng; tiềm năng của bạn khi thực hiện công việc. Vì vậy, hãy làm nổi bật những kinh nghiệm, kỹ năng và thành tích học thuật khoa học -xã hội liên quan đến vị trí ứng tuyển (nếu bạn là người có nhiều kinh nghiệm – dù hay ít); hoặc các chương trình thực tập, trao đổi sinh viên, thủ lĩnh; các sở thích, các hoạt động tình nguyện hay khóa học thực tế ứng dụng liên quan đến công việc (nếu bạn là sinh viên mới ra trường).

Hãy nhấn mạnh rằng bạn là người có khả năng thích ứng nhanh với mọi môi trường làm việc. Bạn sẽ rất phù hợp với văn hóa công ty và có thể tạo ra sự gắn kết với mọi người. Hầu hết các nhà tuyển dụng rất muốn làm việc với những cá nhân ứng thích nghi tốt với văn hóa doanh nghiệp.

Nếu bạn đã được một nhân viên công ty giới thiệu, hãy chia sẻ rằng chính người giới thiệu cũng có nhận định rằng bạn hoàn toàn phù hợp với môi trường ở đây. 

Bật mí các bước giúp giới thiệu bản thân thật ấn tượng

Điều đầu tiên chính là xác định các kỹ năng quan trọng nhất mà bạn sở hữu. Tất nhiên, đó phải là những kỹ năng mà nhà tuyển dụng đang tìm kiếm. Điều này sẽ khiến bạn tạo dấu ấn mạnh mẽ cho nhà tuyển dụng ngay từ ban đầu. Đồng thời thể hiện bạn là người phù hợp với công việc.  

giới thiệu bản thân khi phỏng vấn
giới thiệu bản thân khi phỏng vấn
  Những câu trả lời cấm kỵ khi đi phỏng vấn

Hãy suy nghĩ về những gì họ có thể muốn nghe. Biết đâu trong quá trình bạn chia sẻ, nhà tuyển dụng sẽ thấy hứng thú và bổ sung, đưa ra các đánh giá trực tiếp. Đó không phải là một cuộc giao tiếp hiệu quả hay sao khi có sự tương tác qua lại. Và đồng thời, bạn lại còn được học được nhiều kiến thức hơn nữa. 

Không những thế, bạn còn có thể:

Tự đặt ra cho mình một số câu hỏi: Bạn là ai? Tại sao bạn lại lựa chọn và đồng hành cùng doanh nghiệp này? Những kỹ năng và kinh nghiệm chuyên môn nào khiến bạn đạt đủ những tiêu chí của doanh nghiệp/tổ chức này. Những mong muốn nào bạn thật sự mong đợi tại công ty.

Viết ra nội dung và chỉnh sửa: Viết phần giới thiệu của bạn ra giấy bắt đầu bằng các chi tiết cơ bản về bản thân. Sau đó chuyển sang kỹ năng và kinh nghiệm chuyên môn và kết thúc bằng các mục tiêu nghề nghiệp chính. Trong khi thực hiện, nhớ viết một cách ngắn gọn lời giới thiệu bởi nhà tuyển dụng đánh giá một cách tổng quan những gì bạn thể hiện. 

Sự luyện tập: Mọi sự luyện tập luôn luôn là cần thiết để giúp cho phần giới thiệu bản thân khi phỏng vấn trở nên thú vị và háp dẫn hơn. Để nhớ các ý chính, bạn có thể viết chúng trong cuốn sổ tay và đem theo bên mình. Trong cuộc phỏng vấn, nó sẽ giúp bạn an tâm hơn. Điều này đồng thời cũng thể hiện bạn là một người chỉn chu và chuyên nghiệp.

Triển khai việc giới thiệu về bản thân

Từng bước giới thiệu chung. Hãy cho nhà tuyển dụng biết bạn là ai một cách chuyên nghiệp. Chẳng hạn, “Tôi là một trong những kỹ sư khoa học máy tính với 10 năm kinh nghiệm quản lý vận hành; phát triển các phần mềm ứng dụng máy tính trong các mô hình công ty vừa và nhỏ”. 

  Kỹ năng giao tiếp? Làm thế nào để cải thiện giao tiếp hiệu quả?
giới thiệu bản thân khi phỏng vấn
giới thiệu bản thân khi phỏng vấn

Nói về các minh chứng có liên quan đến kinh nghiệm học thuật – trải nghiệm nghiên cứu của bạn. Đặc biệt, hãy thông mình và linh hoạt trong việc đưa ra các kinh nghiệm. Không nên kể một loại mà hãy chọn lọc những kỹ năng tốt nhất, phù hợp nhất.

Chia sẻ về lý do bạn gửi đơn dự tuyển hồ sơ. Có thể nhà tuyển dụng rất quan tâm đến lý do của bạn. Hãy chia sẻ thẳng thắn lý do. Nếu là người tinh tế, bạn hãy lồng ghép các thông tin về những hiểu biết của mình về tổ chức/doanh nghiệp. Nó là mấu chốt giúp tạo ra dấu ấn đặc biệt nhé!.

Cách thể hiện bản thân cũng là một nghệ thuật

Một nụ cười thân thiện với đối phương sẽ tạo ra một cảm giác gần gũi; thể hiện rõ bạn là người mong muốn trao đổi; lắng nghe một cách chân thành. Hãy thật sự thoải mái và đừng quá gò bó trong cuộc phỏng vấn của mình. Bạn chỉ cần mỉm cười và là chính mình. Đừng lo lắng về việc thảo luận các kỹ năng của bạn.

Giao tiếp bằng mắt rất quan trọng trong việc giao tiếp. Và nó cũng được xem là một kỹ năng giap tiếp quan trọng. Vì thế, bạn cần phát huy tối việc giao tiếp bằng mắt để thể hiện sự tự tin. Đừng để việc thiếu tự tin là rào cản ngăn cản bạn. Vì nó sẽ khiến bạn bị đánh giá thấp trong quy trình tuyển chọn của họ.

Một điểm cần đặc biệt lưu ý là bạn đừng quá lan man. Hãy tập trung vào các khía cạnh trọng tâm. Đừng thêm bất cứ điều gì quá xa những nội dung bạn đã lên kế hoạch chia sẻ từ trước. Vì nó có thể khiến lạc đề và giảm hiệu quả tương tác trong cuộc phỏng vấn. Điều này vô tình làm cho phần giới thiệu bản thân khi phỏng vấn trở của bạn trở nên thât bại.

Quan trọng hơn hết, bạn cần giữ một thái độ lạc quan. Đồng thời sẵn sàng cho những phát sinh khó khăn ngoài ý muốn. Bình tĩnh xử lý vì đó có thể là các thách thức của nhà tuyển dụng dành cho bạn.

Đừng đánh giá thấp bản thân, cũng đừng quả tự tin và thể hiện quá nhiều. Thay vào đó hãy tập trung vào những gì mà bạn đã làm tốt.

Thách thức khi giới thiệu bản thân khi đi phỏng vấn

Nhiều thách thức được đặt ra trong chính quá trình giới thiệu bản thân khi phỏng vấn. Việc của ứng viên là cần bình tĩnh để xử lý các thách thức. Bạn không nên hoang mang để rồi cảm thấy bị bế tắc trong chính những thách thức ấy. Hãy có cách ứng xử thông mình, hiệu quả phỏng vấn hầu như đạt mức tuyệt đối. Tuy nhiên, nhiều câu trả lời dường như chỉ tập trung vào việc đào sâu các vấn đề nhạy cảm liên quan đến công việc. Cụ thể, nhiều ứng viên sẽ đề cập đến mức lươngcác chế độ thuộc về mặt quyền lợi của nhân viên. Từ đây, các ý kiến khác nhau được bàn luận. Hãy cẩn trọng để không phải mắc phải cấm kỵ khi đi phỏng vấn nhé! 

Bạn muốn mình là ai và như thế nào trong 5 năm tới?

Nhiều ứng viên đã trình bày các kế hoạch không một tí liên quan gì đến công việc như: mua nhà, đi du lịch, kinh doanh,…

Hoặc thậm chí, ứng viên bộc lộ nhiều sự cường điệu trong cách dẫn dắt câu chuyện. Chẳng hạn như việc chia sẻ rằng họ sẽ là một người có đam mê với công việc nhiều nhất; làm việc chăm chỉ nhất. Tồi tệ hơn là có nhiều ứng viên chỉ cười trừ vì không biết phải trả lời như thế nào. Vậy đâu là lỗi khi đi phỏng vấn, gây ấn tượng lúc phỏng vấn

Bạn phải thật sự cẩn trọng trong cách trả lời của mình. Nếu không, bạn sẽ thất bại về vấn đề tri nhận các yêu cầu phản hồi thông điệp. Dù bạn cố tình hay vô tình (thiếu sự trải nghiệm), bạn cũng không nên khiến mình thiếu chuyên nghiệp.

Em mong muốn mức lương bao nhiêu? Theo em tự đánh giá, với năng lực hiện tại thì mức lương cụ thể nào phù hợp với em? 

giới thiệu bản thân khi phỏng vấn
giới thiệu bản thân khi phỏng vấn

Nhiều ứng viên đã đánh giá về mức lương. Họ chê mức lương hoặc đề nghị một mức lương cao hơn. Tất nhiên, câu chuyện về quyền lợi thì bất cứ ứng viên nào cũng đều quan tâm. Nhưng họ cần biết, nếu là một ứng viên thông minh và nhạy bén, ít ai lại “cò kèo” lương với nhà tuyển dụng. Vậy đâu là lỗi khi đi phỏng vấn, gây ấn tượng lúc phỏng vấn

Một cách phản hồi cấm kỵ khi đi phỏng vấn nữa đó là ng viên than vãn hoặc đòi hỏi quá nhiều về “giấc mơ doanh nghiệp”. Ví dụ họ muốn có một môi trường làm việc tốt, một người sếp biết quan tâm, các kế hoạch cho sự thăng tiến,… Đây mới thật sự là những gì họ quan tâm.

Tham khảo thêm:

Đừng lặp lại những thông tin trong CV

Chắc chắn nhà tuyển dụng sẽ không hề mong muốn nghe lại những chia sẻ của bạn suy quanh chiếc CV. Đơn giản vì họ đã nghe xem xét và nắm bắt những thông tin chung quanh bạn rồi. Bạn có thể đề cập đến thời gian bắt đầu sự nghiệp; một số công việc đã trải nghiệm và vai trò gần đây nhất của bạn. Nhưng việc lặp lại các khía cạnh sâu như những gì họ thấy trong CV là một điều hoàn toàn không nên.

Tạo CV hấp dẫn cho dân IT

Mẫu giới thiệu bản thân khi phỏng vấn xin việc

Tôi là…, tôi vừa tốt nghiệp tại…. Tôi là… đến từ… Tôi tốt nghiệp ngành… năm…

Tôi đã từng có kinh nghiệm làm việc tại…. và một số trải nghiệm có liên quan khác như… Đây là công việc tôi đam mê và định hướng tương lai, tôi muốn trở thành….

Và tôi hy vọng môi trường ở đây sẽ giúp tôi phát huy hết năng lực của mình một cách tốt nhất. Tôi là một người có tính cách…

Tôi hy vọng với những gì mình chia sẻ, mình có thể may mắn trở thành một mảnh ghép của công ty.

Dựa trên những mẫu giới thiệu bản thân bằng tiếng Việt này, bạn có thể chỉnh sửa để phù hợp hơn với hoàn cảnh và công việc ứng tuyển để tạo sự thuyết phục với nhà tuyển dụng.

Mẫu giới thiệu bản thân tiếng Anh

Nếu tham gia ứng tuyển vào các vị trí thuộc các tập đoàn đa quốc gia; các công ty lớn đòi hỏi vốn anh ngữ, các bạn có thể tham khảo mẫu giới thiệu dưới đây:

Hi good morning. My name is… I’ve been working as a Marketing Staff for 3,5 years. At my current job in planning, developing and implementing effective marketing communication campaigns. I also write content for all marketing collateral, including brochures, letters, emails and websites.

Xin chào. Tôi tên là… Tôi đã làm nhân viên Marketing được 3 năm. Tại công việc của tôi là lênkế hoạch, phát triển và thực hiện các chiến dịch truyền thông tiếp thị hiệu quả. Tôi cũng viết nội dung cho tất cả các bài quảng cáo, email marketing và các trang web. 

I’m known as a detail-oriented and good communicator employee. I never miss deadlines and can take multiple tasks at once. My supervisor aslo appreciates my enthusiasm for the job.

Tôi được đánh giá mà một người có khả năng giao tiếp và chú ý đến chi tiết. Tôi không bao giờ trễ hạn và có thể làm việc đa nhiệm cùng lúc. Người quản lý cũng đánh giá cao sự nhiệt tình của tôi đối với công việc.

“With my experience, I’m looking for an opportunity to take you an open job. I hope to work for an organization like yours; and contribute to improve the environment, which is something I’m interested in.

Với các kinh nghiệm đã có được, tôi đã ứng tuyển vào vị trí… Tôi hi vọng sẽ được hợp tác với công ty và góp phần đưa công ty ngày càng phát triển tốt hơn.

Lời kết

Giới thiệu bản thân khi phỏng vấn là rất cần thiết và không phải ai cũng có thể ghi điểm tuyệt đối với nhà tuyển dụng. Vấn đề giới thiệu bản thân cho thấy tầm quan trọng lớn của kỹ năng giao tiếp. Vì vậy, bạn hãy thật sự chú tâm đến việc rèn luyện kỹ năng này.

Có thế, quá trình tạo dấu ấn thông qua việc giới thiệu bản thân khi phỏng vấn sẽ đạt thành công hơn. TopDev hi vọng thông qua bài viết, các bạn sẽ có những thông tin bổ ích; bổ sung hành trang chắc chắn hơn trong việc ghi điểm trong lòng nhà tuyển dụng trong buổi đầu chạm mặt. Chúc các bạn sẽ chính phục những nhà tuyển dụng một cách thành công.

Có thể bạn quan tâm

Xem thêm Top Việc làm Developer trên TopDev

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

Bài viết được sự cho phép của tác giả Tô Thị Vân Anh

Chúng ta đều biết rằng, trong mỗi môi trường phát triển phần mềm, dữ liệu là một phần không thể thiếu. Khi phát triển, chúng ta thường lưu trữ dữ liệu trực tiếp trong các file chương trình, mỗi khi có sự thay đổi nào đó liên quan trực tiếp đến dữ liệu trong các file đó thì bắt buộc phải thực hiện biên dịch code và kiểm tra lại các kết quả biên dịch đó.

  Các kiểu “đợi chờ” trong Selenium Webdriver: Implicit wait, Explicit wait và Fluent wait
  Selenium là gì? Giới thiệu chi tiết về Selenium Automation Testing

Vậy thì vấn đề đặt ra ở đây là, nếu như dữ liệu cần phải thay đổi nhiều lần, liên tục và hàng ngày thì chúng ta sẽ thực hiện thay đổi từng phần theo mỗi lần thay đổi đó và rồi lại biên dịch lại? Chỉ nghĩ thôi đã thấy khá là mệt mỏi rồi, chưa kể đến việc biên dịch lỗi và ngồi mần lại thì đúng là ác mộng.

Thế nên trải qua rất nhiều kinh nghiệm xương máu, người ta và người tây đã rút ra được rằng, việc phát triển code tốt nhất là nên tách rời với phần dữ liệu để khi hoạt động chúng không ảnh hưởng đến nhau đến các file chương trình. Đưa dữ liệu ra ngoài các file code của chương trình chính là cách duy nhất để làm việc đó, chúng ta có thể đưa dữ liệu vào trong các file excel, property file, config file, Json file, hay các XML file…

1. Về Apache POI

Apache POI giúp Java/ các công nghệ liên quan đến Java có thể đọc và ghi các file excel trên nhiều nền tảng khác nhau. Sử dụng Apache POI chúng ta có thể thực hiện các thao tác đọc, ghi trên cả định dạng file .xls hay .xlsx. Apache POI là một công cụ mã nguồn mở được cung cấp bởi apache.

Apache POI sẽ rất hữu ích khi thực hiện sửa đổi một lượng lớn nội dung dữ liệu. Dưới đây là các bước thực hiện download và sử dụng Apache POI nhé.

Các bước thực hiện download Apache POI

1. Truy cập link: https://poi.apache.org/download.html

2. Click vào link theo thứ tự như các hình phía dưới:

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

3. Lưu file zip về máy tính, sau đó giải nén ta được một folder và các thông tin tương tự như hình dưới:

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

Vậy là xong bước download bộ thư viện Apache POI.

Nếu bạn sử dụng Maven thì có thể sử dụng đoạn mã dưới này, thêm vào trong nội dung file POM là được nhé:

<dependency>
         <groupId>org.apache.poi</groupId>
         <artifactId>poi</artifactId>
         <version>4.0.0</version>
</dependency>

2. Tích hợp Apache POI và Selenium Webdriver

Chúng ta có thể sử dụng tích hợp Apache POI trong Selennium Webdriver để thực hiện đọc và ghi file excel và tạo một data drivent framework.

Các bước để thực hiện tích hợp Apache POI với project Selenium webdriver:

1. Mở project selenium webdriver trên Eclipse

2. Nhấn chuột phải vào tên project và chọn Properties > Java build path 

3. Nhấn vào nút Add External jars

4. Thực hiện điều hướng đến thư mục chứa Apache POI vừa giản nén, chọn các file jars trong thư mục chính, các file jar trong thư mục lib, và trong thư mục ooxml-lib:

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

5. Nhấn nút OK > Hoàn tất việc thêm Apache POI vào trong project.

6. Để kiểm tra việc thêm này đã thành công hay chưa, ta có thể gõ thử từ khóa Workbook sau đó nhấn tổ hợp Ctrl + Space để xem gợi ý, nếu nó hiển thị tương tự như hình phía dưới thì bạn có thể sử dụng thoải mái nhé! 😀

Sử dụng Apache POI để đọc, ghi dữ liệu từ file Excel trong Selenium

3. Một số thuật ngữ quan trọng thường dùng trong Apache POI

Thư viện của Apache POI xoay quanh 4 từ khóa quen thuộc trong một file excel:

Workbook: 1 workbook đại diện cho 1 file excel

Sheet: 1 workbook có thể bao gồm nhiều sheet, chúng ta có thể truy cập vào các sheet này dựa theo tên hoặc chỉ số (index) của sheet đó trong workbook.

Row: như tên gọi của nó, đại diện cho một hàng của 1 sheet.

Cell: một cell sẽ đại diện cho một ô trong sheet.

4. Đọc dữ liệu file excel với Apache POI

Trước tiên chúng ta sẽ cùng thực hiện đọc dữ liệu từ 1 file excel và in ra màn hình nội dung đó.

1. Tạo project, và class trong Eclipse

2. Tạo 1 file excel có tên là testData.xlsx, có 1 sheet tên là Sheet1 và nội dung của ô A1 = Hello. Lưu lại trong một thư mục ở máy tính của bạn.

3. Tạo một đối tượng cho FileInputStream chứa đường dẫn đến nơi lưu trữ file data excel:

FileInputStream fis = new FileInputStream("C:\\pathX\\data.xlsx");

4. Tạo đối tượng workbook bằng cách sử dụng method  create() trong WorkbookFactory class và truyền vào đó tham số đầu vào là đối tượng fis file excel ta vừa tạo ở bước 3:

Workbook wb = WorkbookFactory.create(fis);

5. Tạo đối tượng sheet từ đối tượng workbook (wb) vừa tạo ở bước 4, ở đây ta sẽ truyền tham số đầu vào chính xác tên của sheet trong file excel ta đã chuẩn bị ở bước 2 là Sheet1: 

Sheet sheet = wb.getSheet("Sheet1");

6. Tạo đối tượng Row từ sheet vừa có ở bước 5, tham số đầu vào là chỉ số hàng – bắt đầu từ 0

Row row = sheet.getRow(0);

7. Ta cũng có thể tạo 1 đối tượng cell từ đối tượng row ở bước 6, tham số đầu vào ở đây cũng là chỉ số cell:

Cell cell = row.getCell(0);

8. Để lấy ra giá trị của ô trong file excel ta có thể gọi method getStringCellValue() trong cell class:

System.out.println(cell.getStringCellValue());

5. Ghi dữ liệu vào file excel trong Selenium Webdriver

Ta cũng thực hiện các bước 1, 2, 3, 4, 5, 6 tương tự như thao tác đọc dữ liệu để khởi tạo đầu vào file excel liên quan đến: Workbook, sheet, row.

FileInputStream fis = new FileInputStream("C:\\pathX\\data-write.xlsx");
Workbook wb = WorkbookFactory.create(fis);
Sheet sheet = wb.getSheet("Sheet1");
Row row = sheet.getRow(0);

7. Tạo một cell thuộc row với tham số đầu vào là chỉ số của cell muốn thêm:

Cell cell = row.createCell(0);

8. Thực hiện gán giá trị cho cell đó bằng cách sử dụng method setCellValue() trong Cell Class:

cell.setCellValue("Written by apache poi");

9. Tạo đối tượng để lưu thông tin file output với FileOutputStream :

FileOutputStream fos = new FileOutputStream("C:\\pathX\\data-write.xlsx");

10. Method write() sẽ giúp chúng ta thực hiện lưu thông tin giá trị vừa gán vào trong file với đối tượng fos:

wb.write(fos);

Vậy là xong rồi đó :D, ngoài ra các bạn cũng có thể tham khảo thêm tại đây nhé.

Trên đây là mấy bước và mấy hàm cơ bản để chúng ta làm quen với Apache POI và Excel trong Selnium. Và tất nhiên với những bài toán cụ thể thì nó sẽ chẳng thể nào đơn giản từng dòng, từng chữ như ví dụ trên này được. Nó có thể có rất nhiều các dòng, cột dữ liệu, yêu cầu ta cần phải xử lý tỉ mỉ, chi tiết hơn rất nhiều. 😀

Để đọc thì đơn giản là ta sẽ cần sử dụng vòng lặp for với biến i,j tương ứng cho hàng và cột cứ thế thì sẽ ra thôi. Kaka. Nói thì dễ nhưng làm rồi mới thấy dễ hơn =)))

Thông thường, đọc và ghi dữ liệu file excel mình sẽ viết thành một hàm và cho nó vào 1 file common nào đó, khi nào cần thì sẽ gọi ra và dùng thôi.

Các bạn có thể tham khảo đoạn phía dưới này về hàm đọc và ghi dữ liệu excel của mình, nếu có vấn đề gì cần trao đổi hay góp ý các bạn thoải mái để lại phía dưới bình luận nhé!

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelCommon_POI {
	private static XSSFSheet ExcelWSheet;
	private static XSSFWorkbook ExcelWBook;
	private static XSSFCell Cell;
		
	public static XSSFSheet setExcelFile(String Path, String SheetName) throws Exception {
		try {
			FileInputStream ExcelFile = new FileInputStream(Path);
			ExcelWBook = new XSSFWorkbook(ExcelFile);
			ExcelWSheet = ExcelWBook.getSheet(SheetName);
		} catch (Exception e) {
			throw (e);
		}
		return ExcelWSheet;
	}
	public static String getCellData(int RowNum, int ColNum, XSSFSheet excelWSheet) throws Exception {
		try {
			Cell = excelWSheet.getRow(RowNum).getCell(ColNum);
			String CellData = Cell.getStringCellValue();
			return CellData;
		} catch (Exception e) {
			return "";
		}
	}
	public static void writeDataToExcel(int rowcount, int columncount, String filepath, String Sheetname, String value) {
		try {
			FileInputStream input = new FileInputStream(filepath);
			XSSFWorkbook wb = new XSSFWorkbook(input);
			XSSFSheet sh = wb.getSheet(Sheetname);
			XSSFRow row = sh.getRow(rowcount);
			FileOutputStream webdata = new FileOutputStream(filepath);
			row.createCell(columncount).setCellValue(value);
			wb.write(webdata);
		} catch (Exception e) {			
		}	    
	}
}
Bài viết gốc được đăng tải tại vananhtooo.wordpress.com
Có thể bạn quan tâm:
Xem thêm Việc làm Developer hấp dẫn trên TopDev

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Khi nói đến hệ điều hành dành cho máy tính, nhiều người sẽ nghĩ ngay tới Windows – nó như là một suy nghĩ mặc định trong đầu vậy.

Mặc dù được bán với giá khá cao so với thu nhập bình quân của nhiều Quốc gia, nhưng Windows lại đang là hệ điều hành phổ biến nhất thế giới, ít nhất là đối với người dùng cơ bản.

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Còn Linux thì sao, trái ngược hoàn toàn với Windows, Linux hướng tới người dùng hơi nâng cao hơn một tí, kho ứng dụng khổng lồ, cộng đồng hỗ trợ luôn có mặt trên toàn thế giới, và hơn hết, nó miễn phí 100%.

  10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows
  6 câu lệnh linux hay dùng trong phân tích log

Đây là một cuộc chiến không hồi kết đối với 2 hệ điều hành nổi tiếng này trong việc “lôi kéo” người dùng. Vậy có gì khác biệt giữa 2 hệ điều hành này? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này nhé.

#1. Về lịch sử phát triển

Linux được bắt đầu như một dự án cá nhân của một sinh viên người Phần Lan tên là Linus Torvalds, mục đích ban đầu là để tạo ra một nhân hệ điều hành miễn phí hoàn toàn.

Linux miễn phí và là mã nguồn mở ngay từ khi mới ra đời – năm 1991. Linux bắt đầu như một dự án “chỉ làm cho vui”, nhưng nó đã nhanh chóng trở thành một trong những dự án mã nguồn mở lớn nhất từ ​​trước đến nay.

Ban đầu, Linux theo giấy phép riêng của nó có hạn chế về hoạt động thương mại. Sau đó, dự án đã thông qua GPLv2. Tìm hiểu thêm về loại giấy phép này trên Wikipedia tại đây !

Còn đối với Windows, phiên bản Windows 1.0 của Microsoft được phát hành vào năm 1985 và không giống như Linux, nó là một sản phẩm mã nguồn đóng hoàn toàn được Microsoft bán theo chương trình cấp phép.

#2. Về xử lý, can thiệp vào mã nguồn

Có lẽ, điểm khác biệt lớn nhất của 2 mã nguồn này là khả năng truy cập và chỉnh sửa mã nguồn. Bạn có thể chỉnh sửa, thay đổi các tính năng đối với Linux, nhưng với Windows thì không.

Linux được cấp phép GNU Public License nên nó cho phép người dùng truy cập mã nguồn đến tận lõi của hệ điều hành.

Theo Wikipedia thì: GNU General Public License, viết tắt GNU GPL hay chỉ GPL) là giấy phép phần mềm tự do được sử dụng rộng rãi, đảm bảo cho người dùng cuối tự do chạy, nghiên cứu, sửa đổi và chia sẻ phần mềm.

Còn đối với hệ điều hành Windows thì chắc chắn là không rồi, chỉ trừ khi bạn là kỹ sư trong nhóm phát triển hệ điều hành Windows, còn không thì bạn không có quyền truy cập vào mã nguồn này. Nó được bảo mật vô cùng cẩn thận !

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Tính mở của Linux có cả ưu điểm và nhược điểm, một mặt nó cho phép người dùng chỉnh sửa, nâng cấp các phần mềm và hệ điều hành nhanh hơn.

Nhưng mặt khác, nó cũng cho phép các nhà phát triển truy cập vào mã nguồn, nhiều kẻ xấu sẽ tìm kiếm và lợi dụng các lỗ hổng để phát tán các phần mềm độc hại đến người dùng.

Trên Windows, điều này là không thể, nhưng không có nghĩa là nó an toàn 100% nhé. Một lần nữa, với một người sử dụng bình thường thì họ thường không quan tâm đến việc liệu họ có xem được mã nguồn tạo nên hệ điều hành mà họ đang sử dụng hay không.

Mà quan trọng nhất đối với họ vẫn là trải nghiệm sau khi đã hoàn tất việc cài đặt tất tần tật, tít tìn tịt các chương trình, phần mềm… mà hỗ trợ cho công việc của họ thôi. Có đúng không ạ.

#3. Về vấn đề bản quyền

Như mình đã đề cập ở trên, Linux cực kỳ dễ tiếp cận từ góc độ nhà phát triển, trong khi Windows thì nghiễm nhiên là không.

Nhưng để có quyền truy cập mã nguồn Linux thì phải được cấp phép. Cấp phép nghĩa là phần mềm sẽ có quyền được phân phối.

Với giấy phép GPL của Linux, bạn có thể tự do sửa đổi OS đó, tái xuất bản nó và thậm chí bạn có thể thương mại nó, miễn là bạn cung cấp mã nguồn của nó, không giữ bí mật cho riêng mình.

Với giấy phép GPL, bạn cũng có thể tải xuống bản sao của Linux và cài đặt nó trên bao nhiêu máy tùy ý. Giấy phép này là gì thì mình đã để link đến Wikipedia ở phần #1 của bài viết này rồi nhé. Nếu thích bạn có thể tham khảo qua.

Còn giấy phép của Microsoft thì sẽ rất khác với giấy phép này, tức là bạn không thể sửa đổi mã nguồn vì Microsoft không bao giờ công bố mã nguồn của hệ điều hành này cả. Cần câu cơm của họ mà.

Thứ hai nữa, khi bạn  mua bản quyền Windows (đối với các cá nhân) thì bạn chỉ sử dụng giấy phép đó cho cho một máy tính duy nhất. Còn các giấy phép dành cho máy doanh nghiệp thì khác, bạn có thể sử dụng 1 key để kích hoạt cho nhiều máy tính. Nhưng tất nhiên loại giấy phép này sẽ đắt hơn rất nhiều.

#4. Về ứng dụng – phần mềm

Với hầu hết các bản phối của hệ điều hành Linux, bạn có một trung tâm để cài đặt các ứng dụng. Điều này giúp bạn dễ dàng thêm các ứng dụng mới và xóa chúng đi khi không còn dùng đến.

Tính năng quản lý gói của Linux cực kỳ hữu ích vì bạn có thể tìm kiếm và cài đặt ứng dụng trực tiếp mà không cần phải dò tìm trên mạng. Và tất nhiên, tất cả đều miễn phí 100%.

Trước đây, Windows không có kho ứng dụng của riêng mình. Với Windows, bạn phải lên Google và tìm kiếm những phần mềm của bên thứ 3 để cài đặt.

Sau đó đến quá trình tải về máy rồi chạy file thực thi *.exe để tiến hành cài đặt. Sau khi ứng dụng đã được cài đặt, bạn cũng không biết nó đã thay đổi bao nhiêu tập tin hệ thống.

Vì đâu phải phần mềm nào cũng an toàn đâu, với nhiều người dùng không có kinh nghiệm, họ rất dễ cài phải các phần mềm rác, phần mềm độc hại…

Tuy nhiên, kể từ phiên bản Windows 8.x, Microsoft đã có kho ứng dụng riêng của mình – nó mang tên Windows Store, mặc dù còn hạn chế so với Linux nhưng nói chung là nó cũng cung cấp khá nhiều phần mềm (cả miễn phí và trả phí), đáp ứng nhu cầu cơ bản của người dùng.

À, còn một điều nữa mà mình muốn chia sẻ với các bạn:

Đối với Windows thì Registry như là xương sống của con người vậy. Nó là một cơ sở dữ liệu chủ cho toàn bộ các thiết lập của người dùng nằm trên máy tính. Registry nắm giữ thông tin ứng dụng, mật khẩu người dùng, thông tin thiết bị… và rất rất nhiều thứ khác nữa.

Còn đối với Linux thì không, Linux không có Registry. Vâng, các bạn không nghe nhầm đâu.

Các ứng dụng trên Linux sẽ lưu thiết lập trên cơ sở chương trình, dưới sự phân cấp người dùng. Điều này cũng có nghĩa là những cấu hình của Linux sẽ ở dạng mô đun. Bên dưới là cây hệ thống file trên Linux !

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

#5. Về đối tượng sử dụng

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Đối tượng sử dụng của các hệ điều hành này là ai?

Mình không thiên vị hay có ý chê bai nhé, nhưng Linux chủ yếu dành cho những người dùng máy tính thành thạo, những người biết họ đang làm gì.

Cũng đúng thôi, vì đa số hacker trên thế giới đều dùng hệ điều hành nhân Linux mà 😀 [Bạn có biết] Hacker họ thường dùng hệ điều hành (OS) nào ?

Người dùng Linux trung thành với nền tảng của họ đến mức họ có xu hướng trở thành những fan trung thành của nền tảng này ◔◡◔

Điều này chủ yếu là do bạn có toàn quyền kiểm soát hệ thống của mình và một khi bạn đã sử dụng quen Linux thì bạn sẽ muốn chuyển sang hệ điều hành Windows nữa.

Đối với người dùng bình thường, họ chỉ muốn duyệt web, xem video và viết email,… Tất cả đều có thể được thực hiện trên Windows mà không cần phải có kiến ​​thức sâu về xử lý hệ điều hành.

Thành thật mà nói, nếu một người dùng bình thường chuyển từ hệ điều hành Windows sang Linux, khả năng cao là họ sẽ bị lạc lối, choáng ngợp và muốn quay về Windows ngay lập tức.

Vâng, đó là điểm khác biệt lớn giữa một người dùng máy tính phổ thông và một người dùng máy tính chuyên nghiệp…

Nhưng nói gì thì nói, Microsoft đã quá khôn khéo để lôi kéo người dùng. Một phần là vì giao diện đồ họa rất dễ tiếp cận, mọi thao tác, mọi hành động đều hiện sờ sờ trước mắt.

Một phần nữa là họ có vẻ như cố tình để người dùng cá nhân sử dụng chùa Windows thì phải. Chứ mình nghĩ nếu muốn quản lý chặt vấn đề bản quyền thì họ đủ khả năng để làm mạnh tay hơn.

Mục đích của việc này thì có lẽ các bạn đã thừa biết, nó giúp tạo ra một cộng đồng người dùng Windows đông đảo. Mà một khi đã có một cộng đồng lớn mạnh rồi thì làm cái gì cũng dễ. Microsoft chủ yếu thu tiền từ các doanh nghiệp, các cơ quan.. là chủ yếu.

#6. Về khả năng tương thích phần cứng

Vâng, khoảng thời gian từ năm 2005 trở về trước thì Linux đúng là không có cửa gì để so sánh với Windows cả.

Bằng chứng rõ ràng nhất là các nhà sản xuất chỉ coi Linux là một lựa chọn bổ sung thêm mà thôi, có nghĩa là việc bạn cài đặt driver để hỗ trợ cho các phần cứng trên Linux là rất khó khăn.

Nhưng bây giờ tình thế đã khác rồi, cộng đồng LinuxOS đã rất lớn mạnh và đã có thể cạnh tranh sòng phẳng với Windows. Và các nhà phát triển cũng đã đặt vị thế của Linux ngang hàng với Windows.

#7. Về bảo mật

Vâng, một kiến trúc đóng hoàn toàn và được phát triển bởi một công ty phần mềm hàng đầu thế giới – Windows thực sự là một hệ điều hành rất bảo mật.

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Nếu bạn kết hợp với một số phần mềm bảo mật bản quyền của bên thứ 3 khác nữa như Kaspersky, ESET, BIT… thì thực sự là rất tuyệt vời.

Tuy nhiên, vì Windows là quá phổ biến nên nó sẽ là mục tiêu hàng đâu của các hacker. Và một điều nữa là do trình độ của người dùng, nhiều người dùng rất chủ quan trong việc sử dụng máy tính, thường xuyên sử dụng các phần mềm lậu, Windows bẻ khóa thì chả bị hack… trách ai bây giờ 😀

Đọc thêm: Lý do bạn nên hạn chế sử dụng phần mềm Crack và bẻ khóa phần mềm ?

=> Nói tóm lại thì mình vẫn đánh giá rất cao sự bảo mật của hệ điều hành Windows.

Còn Linux thì sao nhỉ?

Vâng, mặc dù là một hệ điều hành mã nguồn mở nhưng tính bảo mật của Linux là không thể bàn cãi. Bạn có thể tham khảo qua bài viết bên dưới đây, đã có một bài viết về vấn đề này rồi.

Linux hiện tại đang được các tổ chức doanh nghiệp sử dụng để làm máy chủ và hệ điều hành cho mục đích bảo mật tại các tập đoàn công nghệ như Google, Facebook, Twitter… trong khi đó, Windows chủ yếu được sử dụng bởi các người dùng cá nhân, các doanh nghiệp, hay là game thủ…

Đọc thêm bài viết: Windows, Linux hay macOS: đâu là HĐH an toàn nhất?

=> Nói ngắn gọn thì Linux cũng rất bảo mật !

#8. Về khả năng hỗ trợ

Sự khác biệt giữa Windows và Linux – Cuộc chiến khốc liệt

Mặc dù mọi người có thể nghĩ rằng Linux không có đường dây hỗ trợ riêng, nhưng vì nó có một cộng đồng người dùng lớn nên bạn có thể dễ dàng tìm thấy giải pháp cho mọi vấn đề của mình thông qua các diễn đàn, tìm kiếm trên Google và nhiều trang web chuyên về Linux.

Và nếu bạn là một doanh nghiệp phụ thuộc nhiều vào Linux thì bạn cũng có thể nhận được hợp đồng từ các công ty như Red Hat hay là Novell.

Nhưng nói gì thì nói, khâu hỗ trợ vẫn là một điểm yếu chí mạng của Linux. Vì bạn cứ thử hình dung mà xem, với người dùng cá nhân thì OK, không sao cả. Nay không sửa được thì mai sửa, vội đi đâu.

Nhưng với doanh nghiệp thì khác, họ cần ngay lập tức, họ không đủ thời gian để chờ đợi. Làm thế có mà sập tiệm sớm..

Còn Windows là một sản phẩm thương mại hoàn toàn nên chắc chắn về khâu support sẽ tốt hơn, họ cung cấp cho bạn sự hỗ trợ tận tình đến tận răng. Tất nhiên điều này chỉ xảy ra khi bạn mua giấy phép bản quyền từ họ. Còn bạn xài Windows lậu thì ráng mà chịu đi  ᵔᴥᵔ

#9. Về khả năng hỗ trợ game

Vâng, tính đến năm 2018 thì theo số lượng thống kê. Tổng số lượng game hỗ trợ cho Windows mà nền tảng phân phối game Steam có được là hơn 20.000 tựa game.

Trong khi đó, Linux chỉ hỗ trợ gần 5000 game và đang tăng lên từng ngày.

=> Vâng, nói chung về khoản chơi game thì rõ ràng rồi, Linux xách dép cho Windows. Chấm hết ^^

#10. Kết luận

Nhìn chung, nếu bạn chỉ là một người dùng bình thường, không quan tâm đến cách hoạt động bên trong của hệ điều hành thì Windows là một sự lựa chọn phù hợp nhất dành cho bạn.

Còn nếu bạn là một kỹ sư hoặc là một người dùng máy tính chuyên nghiệp thực thụ, thậm chí là một người đam mê với các dòng lệnh, muốn toàn quyền kiểm soát hệ thống thì Linux là một lựa chọn tuyệt vời dành cho bạn.

Okay, trên đây là những góc nhìn rất khách quan của mình về Windows và Linux. Còn bạn thì sao, bạn thấy điểm khác biệt lớn nhất giữa Windows và Linux là gì? bạn thích Windows hay Linux?

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

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

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

Giới thiệu Appium

Giới thiệu Appium

Bài viết được sự cho phép của vntesters.com

Appium là gì?

Appium là một công cụ kiểm thử tự động cho các ứng dụng UI trên thiết bị di động. Appium cho phép kiểm thử các ứng dụng Native, Hybrid hay Web, trên các thiết bị vật lý thực (physical device) và cả thiết bị ảo (simulator/emulator). 

Appium được phát triển từ nền tảng hệ thống Selenium (kế thừa các đối tượng, cấu trúc và cú pháp) nên Appium có khả năng làm việc với nhiều nền tảng khác nhau, iOS và Android, trên cùng một mã kiểm thử (cross-platforms). 

  'Toát mồ hôi' phỏng vấn tuyển dụng vào Apple
  3 tools giúp bạn tăng hiệu năng của React App một cách bất ngờ

Khả năng cross-platforms của Appium đến từ việc sử dụng các thư viện của Appium, thông qua một chương trình server, chuyển các câu lệnh sử dụng trong mã kiểm thử thành các lệnh UIAutomation (với iOS) hay UIAutomator (với Android) để tương tác với thiết bị. 

Các thành phần của Appium 

  • Chương trình máy chủ Appium – Appium Server: là một chương trình tạo lập một máy chủ Java, dùng để chuyển các lệnh trong mã kiểm thử thành các lệnh có thể tương tác với thiết bị: UIAutomation với iOS hay UIAutomator với Android. 
  • Hệ thống thư viện Appium: Cũng như Selenium, Appium có một hệ thống thư viện dùng để nhận diện và tương tác với các đối tượng UI trên ứng dụng di động. Hệ thống thư viện Appium được cung cấp cho nhiều ngôn ngữ lập trình khác nhau như C#, Java, Python… để kỹ sư kiểm thử tự động có thể chọn ngôn ngữ lập trình quen thuộc cho việc tự động hóa kiểm thử. 

Kết nối thiết bị Android với máy tính

Để kết nối thiết bị di động Android với máy tính để thực thi kiểm thử với Appium, chúng ta cần phải thiết lập thiết bị di động ở trạng thái dành cho nhà phát triển: Developer options.

Kiểm tra Developer Options trên thiết bị di động

Chúng ta có thể vào phần Settings của thiết bị, nếu có mục Developer options thì có nghĩa thiết bị đã được thiết lập trạng thái dành cho nhà phát triển.

Giới thiệu Appium

Trường hợp nếu không có mục Developer options, chúng ta có thể theo các bước sau để thiết lập trạng thái nhà phát triển:

  1. Vào phần Settings > About Phone
  2. Tìm và nhấn vào mục Build Number vài lần
  3. Trở lại phần Settings để kiểm tra mục Developer options đã được thêm vào.

Thiết lập thiết bị ảo Android – Android Virtual Device (AVD)

Hiện tại, vì Android SDK đã được tích hợp sâu vào trong Android Studio, trang chủ chính thức của Andoird DSK đã không cho tải về bản SDK Stand-alone với màn hình giao diện GUI, mọi người có thể tải bản SDK Stand-alone ở đây.

Cài đặt Appium

  1. Tải chương trình Appium ở đây
  2. Chạy chương trình cài đặt
  3. Khởi động Appium
  4. Giữ các giá trị cấu hình mặc định và kiểm tra Appium Server hoạt động

https://www.youtube.com/watch?v=pSFwvC_X6Vc?autoplay=1

Ví dụ về sử dụng Appium

Ở đây, mình sử dụng Appium cho việc tự động chơi một game đơn giản trên Android. Game này yêu cầu người chơi tính toán nhanh trong vòng 2 giây và chọn câu trả lời “đúng” hay “sai” dựa trên kết quả.

Link game: https://play.google.com/store/apps/details?id=com.tran.pat.mathpluser

https://www.youtube.com/watch?v=BdVvjex0C2U?autoplay=1

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

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

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

Athenz là gì?

Athenz là gì?

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Athenz là open source tập hợp các dịch vụ và thư viện hỗ trợ ủy quyền dựa trên vai trò (RBAC) cho các trường hợp sử dụng và cấu hình (ủy quyền tập trung) cũng như các trường hợp sử dụng / cấp phép (phân quyền). Và được cung cấp LICENSE-2.0 bởi Yahoo Inc từ 2016.

  ## trong SQL (2 dấu thăng) nghĩa là gì?
  .NET – Strong Named Assembly là gì?

Hệ thống ủy quyền của Athenz sử dụng hai loại token: Principal  Token (N-Tokens) và RoleTokens (Z-Tokens).

Tên “Athenz” có nguồn gốc từ “Auth” và các thẻ “N” và “Z”.

Website: http://www.athenz.io/

Open source: http://www.github.com/yahoo/athenz

Athenz là gì?

Những điểm nổi bật

Athenz cung cấp cả chức năng của một hệ thống tập trung và một chứng chỉ và hệ thống phân tán dựa trên IP để xử lý việc thực thi trên hộp.

Bạn nhận được những lợi thế sau đây bằng cách sử dụng Athenz:

  • Hồ sơ bảo mật dựa trên dịch vụ: Định nghĩa bảo mật tự động chuyển xuống các máy chủ trong dịch vụ.
  • Cung cấp động: Quy mô nhanh hoặc di chuyển khối lượng công việc xung quanh mà không cần sự can thiệp thủ công (không cấu hình IP).
  • Nguồn chứng thực duy nhất: Hồ sơ dịch vụ hợp nhất phục vụ các triển khai bảo mật khác nhau, bao gồm hỗ trợ cho các thực thể không phải người dùng.
  • Tự phục vụ: Cấu hình thời gian thực và thực thi kiểm soát truy cập dựa trên tài nguyên (khả năng quản lý động).

Quan trọng hơn, các kỹ sư sử dụng Athenz và không xây dựng hệ thống kiểm soát truy cập dựa trên vai trò riêng của họ mà không có cửa hàng trung tâm và thường dựa vào ACL mạng và cập nhật thủ công.

Tài liệu được cung cấp

Hỗ trợ

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

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

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

Viết blog đem lại những kỹ năng gì?

Viết blog đem lại những kỹ năng gì?

Bài viết được sự cho phép của vntesters.com

Viết blog không những giúp bạn thoả đam mê viết lách, chia sẻ mà còn đem lại cho các bạn những kỹ năng (skills) giúp ích rất nhiều trong cuộc sống.

  • Kỹ năng viết
  • Kỹ năng đọc và tổng hợp
  • Kỹ năng trình bày, bố cục văn bản
  • Kỹ năng liên kết, ngoại giao
  • Kỹ năng sử dụng máy tính, Internet
  • Ngoại Ngữ
  25 blogger IT nổi tiếng mà dân lập trình ai cũng phải biết
  Câu chuyện về cái comment tại một blog nọ

Như vậy có thể thấy viết blog đã đem lại khá nhiều kỹ năng hữu ích đấy chứ. Vậy còn bạn, viết blog đã đem lại cho bạn những kỹ năng gì?

viết blog

Kỹ năng viết: việc sử dụng câu chữ thế nào, dấu chấm, dấu phẩy của người viết sẽ được cải thiện rõ rệt qua thời gian dài viết bài (với điều kiện là các bạn viết một cách nghiêm túc). Nó thể hiện sự chuyên nghiệp cũng như tôn trọng người đọc của tác giả.

Kỹ năng đọc và tổng hợp: Đây cũng là một trong những kỹ năng quan trọng mà bạn sẽ thu được nhờ viết blog. Chắc chắn rằng bạn sẽ phải chép từ chỗ này một chút chỗ kia một chút cũng như tham khảo các nguồi tại liệu khác nhau để lấy ý tưởng, cuối cùng là kết hợp tất cả chúng lại với nhau để có một bài viết hoặc ý tưởng hay. Ngoài ra để có thể đọc được nhanh mà vẫn nắm bắt được nội dung chính của một bài viết, bạn sẽ dần hoàn thiện kỹ năng đọc của mình.

Kỹ năng trình bày, bố cục văn bản: một điều khá quan trọng đó là nếu nội dung bài viết rất hay nhưng trình bày, bố cục không hấp dẫn thì cũng không thể thu hút người đọc được. Do vậy, kỹ năng trình bày, bố cục văn bản để nâng cao chất lượng bài viết của bạn sẽ được nâng cao. Không ai muốn bài viết của mình mặc dù không tệ nhưng lại chẳng ma nào thèm đọc cả, đúng không?

Kỹ năng liên kết, ngoại giao: sau khi viết xong bạn sẽ có nhu cầu chia sẻ với người khác, một cách đơn giản để bạn mở rộng các mối quan hệ và bạn nhận được sự tôn trọng, nể phục từ những người đọc bài viết của bạn.

Kỹ năng sử dụng máy tính, Internet: cái này thì khỏi phải nói rồi, để có 1 bài viết hay thông tin đáng tin cậy bạn sẽ phải tìm hiểu vấn đề từ những nguồn khác nhau.

Ngoại Ngữ: Việc tham khảo, đọc, xem các tài liệu/video bằng tiếng Anh sẽ cải thiện kỹ năng đọc (Reading Skills) và nghe (Listening Skills) khá nhiều

Nguồn:  Blog Mr Thắng
Bài viết gốc được đăng tải tại vntesters.com
Có thể bạn quan tâm:
Xem thêm Việc làm Developer hấp dẫn trên TopDev

Tổng hợp những câu lệnh SQL cơ bản

Tổng hợp những câu lệnh SQL cơ bản

Bài viết được sự cho phép của tác giả Lê Chí Dũng

1) Trên cơ sở dữ liệu (database)

Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,..

Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..

Các loại tập tin của SQL Server: data file (primary, secondary), log file

Các loại cơ sở dữ liệu của SQL Server: system database, user database

create database: tạo cơ sở dữ liệu

create database HoSoSinhViencreate database HoSoSinhVien
on (name=’HSSV_data’, filename=’c:HSSV_data.mdf’)
log on (name=’HSSV_log’, filename=’c:HSSV_log.ldf’)

drop database: xóa cơ sở dữ liệu

drop database HoSoSinhVien

alter database: sửa các thông tin của cơ sở dữ liệu

alter database HoSoSinhVienmodify name = HSSV

exec sp_dboption: sửa các thông tin của cơ sở dữ liệu

exec sp_dboption HoSoSinhVien, ‘read only’, ‘true’exec sp_dboption HoSoSinhVien, ‘autoshrink’, ‘true’
exec sp_dboption HoSoSinhVien, ‘single_user’

dbcc: điều khiển cơ sở dữ liệu

dbcc shrinkdatabase(HoSoSinhVien, 10)
  ## trong SQL (2 dấu thăng) nghĩa là gì?
  Cài đặt MySQL Community Server trên macOS
2) Trên bảng (table)

Nhớ các kiểu số liệu: text, binary, numberic, money, datetime, bit, variant

Nhớ các các ràng buộc: default, check, unique, foreign, primary

Nhớ các kiểu toàn vẹn: entity, domain, referential, user

Nhớ các thuộc tính bổ trợ: identity, null

create table: tạo bảng

  • Tạo bảng với các cột
create table SinhVien (MaSV int,TenSV nchar(50))
  • Tạo với các ràng buộc
create table SinhVien (MaSV int primary key,TenSV nvarchar(50) not null,QueQuan int references DiaPhuong(MaDP))

drop table: xóa bảng

drop table SinhVien

alter table..add: thêm cột

Thêm cột bằng cách dùng lệnh alter table

alter table SinhVienadd QueQuan int

alter table..drop column: xóa cột

alter table SinhVien drop column QueQuan

alter table..alter column: thêm thuộc tính not null

alter table SinhVienalter column TenSV nchar(50) not null

alter table..add primary key: thêm khóa chính

Thêm ràng buộc khóa chính cần phải biến một cột null thành not null trước khi thêm. Nếu để lệnh chuyển đổi thuộc tính not null ngay cạnh lệnh thêm khóa chính thì phải chèn từ khóa go vào vì có thể lệnh trên chưa được thực hiện do đó lệnh dưới báo lỗi

alter table SinhVienalter column MaSV int not null

go

alter table SinhVien

add primary key (MaSV)

alter table..add foreign key: thêm ràng buộc khóa ngoài

alter table SinhVien add foreign key (QueQuan) references DiaPhuong(MaDP)

alter table..add default: thêm ràng buộc mặc định

alter table SinhVien add default 'khong ten' for TenSV

exec sp_help: xem thông tin bảng

exec sp_help SinhVien

Tham khảo các vị trí tuyển dụng SQL lương cao tại Topdev.

3) Trên bản ghi (record)

Nhớ thêm phần biểu thức điều kiện

Nhớ thêm phần ký tự thay thế

insert..values: thêm các bản ghi vào bảng

insert into SinhVien (MaSV, TenSV, QueQuan)values (1, N’Nguyễn Văn A’, 1)

insert..select: thêm các bản ghi từ bảng khác vào bảng

insert into DocGiaselect MaSV, TenSV, QueQuan from SinhVien

insert into DocGia

select MaGV, TenGV, QueQuan from GiaoVien

select..into: đưa kết quả lựa chọn vào bảng mới

select MaSV, TenSV, Dieminto SinhVienKha

from SinhVien

where Diem > 7.0

delete: xóa các bản ghi từ bảng

delete from SinhViendelete from SinhVien where MaSV=1234

truncate: xóa toàn bộ bản ghi của bảng

truncate table SinhVien

update: sửa các bản ghi trong bảng

update SinhVienset NhomTruong = 1

where MaSV < 4

update SinhVien

set NhomTruong = 4

where (MaSV > 3 and MaSV < 8)

4) Truy vấn (query)

Hỗ trợ truy vấn: distinct, top, as, identity

Phép toán tập hợp: in, like, between

Các hàm tổng nhóm: sum, max, min, avg

4.1) Truy vấn đơn giản

select *: Hiện tất cả bảng

select *from SinhVien

select: Hiện một số cột

select TenSV, DiemTBfrom SinhVien

select..where: Hiện một số dòng / bản ghi

select TenSV, DiemTBfrom SinhVien

where DiemTB > 6.0

select..order by: Hiện và sắp xếp theo điểm rồi theo tên

select TenSV, DiemTBfrom SinhVien

order by DiemTB desc, TenSV asc // asc sắp sếp tăng dần, desc là giảm dần

select..distinct: Hiện danh sách giá trị không trùng lặp

select distinct QueQuanfrom SinhVien

select..top: Hiện các dòng đầu tiên trong bảng

select top 3 TenSV, DiemTBfrom SinhVien
order by DiemTB desc, TenSV asc

4.2) Truy vấn lồng nhau (nested query)

select..where (select)

Hiện tất cả những người trong bảng nhân viên có lương bằng lương lớn nhất của những người có trong công ty:

select TenNV, Luongfrom NhanVien
where Luong = (select max(Luong) from NhanVien)

select..where (in)

Hiện tất cả những người trong bảng nhân viên có lương lớn nhất hoặc lớn nhì của những người có trong công ty:

select TenNV, Luongfrom NhanVien
where Luong in (select top 2 Luong from NhanVien order by Luong)

Câu lệnh select trong sẽ tạo ra một tập hai giá trị (top 2) đó là lương lớn nhất và lương lớn nhì. Và câu lệnh select thứ nhất sẽ chọn ra những người mà lương nằm trong tập lớn nhất và lớn nhì

select..where (in sub)

Hiện ra tất cả những người có lương lớn nhất phòng của anh ta (không phải lớn nhất trong công ty mà lớn nhất trong phòng hoặc đơn vị mà anh ta thuộc về)

select nv1.TenNV, nv1.Luongfrom NhanVien as nv1
where nv1.Luong = (select max(Luong) from NhanVien where Phong=nv1.Phong)

Câu lệnh select trong sẽ trả về giá trị lương lớn nhất nhưng không phải lớn nhất trong toàn công ty mà lớn nhất trong phòng của nv1. Sau đó câu lệnh select ngoài cùng sẽ xác định xem nv1 có được chọn không bằng cách kiểm tra lương anh ta với lương lớn nhất của phòng anh ta.

4.3) Truy vấn tổng nhóm (subtotal query / grouping query)

select..group by: Thống kê theo tiêu chí

Hiện ra số lượng các nhân viên ứng với từng quê

select QueQuan, count(*)from NhanVien
group by QueQuan

Đếm số nam và số nữ trong công ty

select GioiTinh, count(*)from NhanVien
group by GioiTinh

Tính tổng thu nhập theo từng phòng

select Phong, sum(Luong)from NhanVien
group by Phong

select..having: Hiện ra một số nhóm phù hợp

Chỉ đếm số lượng người ở Hải Phòng và số lượng người ở Hà nội

select QueQuan, count(*)from NhanVien
group by QueQuan
having (QueQuan = ‘HP’, QueQuan = ‘HN’)

Chỉ hiện ra những phòng nào có tổng thu nhập lớn hơn 500000

select Phong, sum(Luong)from NhanVien
group by Phong
having sum(Luong) > 5000000

Chỉ hiện ra những tỉnh nào có số lượng người lớn hơn 10

select QueQuan, count(*)from NhanVien
group by QueQuan
having count(*) > 10

4.4) Truy vấn liên bảng (cross table query / joining query)

select..inner join: ghép các cặp bản ghi thỏa mãn điều kiện

Ghép bảng nhân viên và hiện ra tên nhân viên và tên địa phương

select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien 
inner join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP

select..left outer join: lấy tất cả phía trái và ghép (nếu có) với phải

Lấy tất cả những nhân viên kể cả những nhân viên có quê quán không hợp lệ (nghĩa là mã quê quán không có trong bảng địa phương)

select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien 
left outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP

select..right outer join: lấy tất cả phía phải và ghép (nếu có) với phía trái

Lấy tất cả những địa phương ghép với nhân viên, các địa phương không hợp lệ sẽ được ghép với bộ dữ liệu rỗng. Không hiện ra các nhân viên không có mã quê quán phù hợp

select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien 
right outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP

select..full outer join: lấy từ hai phía và ghép nếu có

Lấy tất cả những nhân viên (nếu không có quê quán phù hợp thì ghép với bộ dữ liệu rỗng) và tất cả những địa phương kể cả không có nhân viên.

select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien 
right outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP

select..cross join: trả về tất cả các cặp có thể ghép

Ghép từng nhân viên với tất cả các địa phương. Như vậy nếu có m nhân viên và có n địa phương thì bảng đích sẽ có m*n dòng. n dòng đầu cho nhân viên thứ nhất ghép với các địa phương. n dòng sau cho nhân viên thứ hai ghép với các địa phương. và tiếp tục như thế tới nhân viên thứ m.

select NhanVien.TenNV, DiaPhuong.TenDP
from NhanVien 
cross join DiaPhuong

ref: Tham khảo thêm một số lệnh

Xem tất cả các CƠ SỞ DỮ LIỆU người dùng trong MÁY CHỦ

Mỗi khi một cơ sở dữ liệu được tạo ra, bảng sysdatabase trong cơ sở dữ liệu master sẽ chứa thông tin về bảng mới tạo ra đó. Do vậy chúng ta có thể liệt kê tất cả các cơ sở dữ liệu trong một máy chủ bằng cách liệt kê các bản ghi trong bảng sysdatabase

select *
from master.dbo.sysdatabases
where sid <> 1

Xem tất cả các BẢNG người dùng trong CƠ SỞ DỮ LIỆU

Mỗi khi một bảng được tạo ra trong một cơ sở dữ liệu, thông tin về bảng đó sẽ được chứa trong bảng sysobjects của chính cơ sở dữ liệu chứa bảng vừa tạo. Vì vậy chúng ta có thể xem danh sách các bảng trong cơ sở dữ liệu bằng cách truy vấn bảng sysobjects. Các bảng do người dùng tạo có kiểu là ‘U’

select *
from Northwind.dbo.sysobjects
where xtype='U'

Trong ví dụ này, chúng ta lấy tất cả các bản ghi bảng sysobjects của cơ sở dữ liệu Northwind nhưng chỉ lấy những bảng người dùng, nghĩa là những bảng có xtype là ‘U’

Xem tất cả các CỘT thuộc về một BẢNG

Mỗi khi một cột trong bảng được tạo, bảng syscolumns trong cơ sở dữ liệu sẽ chứa thông tin về cột vừa tạo. Thuộc tính id của cột sẽ chứa định danh của bảng mà cột đó thuộc về. Vì vậy để xem các cột trong một bảng dữ liệu, chúng ta có thể truy vấn bảng syscolumns

declare @x intset @x = (select id from sysobjects where name='Employees')
select * from syscolumns where id = @x

Trong ví dụ này, ta khai báo biến @x kiểu int, sau đó lấy id của bảng Employees vào biến @x, rồi ta lấy tất cả các cột trong bảng syscolumns mà có id bằng @x, cũng có nghĩa là id của bảng Employees. Do vậy ta sẽ liệt kê được tất cả các cột trong bảng Employees

Sử dụng bảng tạm

Khai báo bảng, cập nhật bảng, và hiện bảng

declare @x table(MaSV int, TenSV nvarchar(20))
insert into @x values(1, N'Thưởng')
insert into @x values(2, N'Yến')
select * from @x

Khai báo bảng, tải bảng khác từ trong cơ sở dữ liệu lên bảng vừa khai báo, và hiện bảng

declare @x table(MaSV int, TenSV nvarchar(20))
insert into @x

select EmployeeID, firstname
from Northwind.dbo.Employees
select * from @x

Sử dụng biến tạm

declare @t moneyset @t = (select max(UnitPrice) from Northwind.dbo.products)

select * from Northwind.dbo.products where UnitPrice >= @t

ref: Các khái niệm cơ bản của cơ sở dữ liệu

Các mô hình dữ liệu (data model)

+ Mô hình thứ bậc (hierarchical)

+ Mô hình mạng lưới (network)

+ Mô hình quan hệ (relational)

Các vấn đề của lưu trữ

+ Sự dư thừa (redundance)

+ Sự nhất quán (consistence)

+ Tính toàn vẹn (integrity)

+ Sự an toàn (security)

+ Sự chia sẻ (sharing)

Các khái niệm cơ bản

+ Cơ sở dữ liệu (database)

+ Bảng (table) hoặc quan hệ (relation)

+ Bản ghi (record) hoặc dòng (row) hoặc bộ (tuple)

+ Trường (field) hoặc cột (column)

+ Mối quan hệ (relationship) được biểu hiện bằng bảng (table) hoặc khóa (key)

Mối quan hệ giữa các

+ Tại sao phải lưu mối quan hệ

+ Phương pháp lưu các mối quan hệ (dùng khóa, dùng bảng)

+ Khóa chính (primary key) và khóa ngoài (foreign key)

+ Vấn đề toàn vẹn tham chiếu (referential integrity)

Ngôn ngữ định nghĩa và xử lý dữ liệu

+ Thao tác trên các đối tượng như cơ sở dữ liệu, bảng, cột

+ Phần định nghĩa cơ sở dữ liệu và bảng: create, drop, alter

+ Phần cập nhật dữ liệu: insert, delete, update

+ Phần truy vấn dữ liệu: join, union, projection, selection, sort, group

+ Phần lập trình và thao tác: declare, set, use, go

ref: Liên quan tới định nghĩa bảng

Các vấn đề về toàn vẹn dữ liệu

+ Toàn vẹn thực thể (entity integrity): primary key, unique, identity

+ Toàn vẹn tham chiếu (referential integrity): foreign key, check

+ Toàn vẹn miền dữ liệu (domain integrity): default, foreign key, check, not null

+ Toàn vẹn người dùng (user integrity): rules, stored procedures, triggers

Các hỗ trợ với toàn vẹn

+ Ràng buộc kiểm tra (check constraint): phải thỏa mãn điều kiện nào đó

+ Ràng buộc mặc định (default constraint): phải có một giá trị mặc định

+ Ràng buộc duy nhất (unique constraint): các giá trị trong cột không được trùng lặp

+ Ràng buộc khóa ngoài (foreign key constraint): các giá trị phải hợp lệ với cột khóa chính tương ứng

+ Ràng buộc khóa chính (primary key constraint): phải duy nhất và không trống

+ Thuộc tính định danh (identity property): có thể được tăng tự động

+ Thuộc tính không trống (not null property): không được phép để trống

Các kiểu dữ liệu

Giá trị nhị phân: bit

Các số nguyên: bigint, int, smallint, tinyint

Các số thực xấp xỉ: float, real

Giá trị số thực chính xác: decimal, numberic

Giá trị tiền tệ: money, smallmoney

Giá trị hời gian: datetime, smalldatetime

Các chuỗi: char, varchar, text, nchar, nvarchar, ntext,

Các chuỗi nhị phân: binary, varbinary, image

Các kiểu khác: cursor, table, variant, timestamp, uniqueidentifier

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

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

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

Kỹ năng cụ thể

kỹ năng cụ thể

Bài viết được sự cho phép của BBT Tạp chí Lập trình

Việc có kiến thức không đồng nghĩa với việc có kỹ năng và khả năng thực tế để áp dụng kiến thức đó vào việc tạo ra các ứng dụng phần mềm. Đây là lý do nghề thủ công trở lên quan trọng.
—Pete McBreen, Software Craftsmanship

Bối cảnh

Bạn đang tìm kiếm vị trí làm việc trong đội ngũ thợ lành nghề giỏi nơi mang đến cho bạn những cơ hội học tập tốt hơn những gì bạn đang có.

  10 Kỹ năng quan trọng cần có của Front-end để tìm công việc dễ dàng hơn
  13 mẹo có thể giúp bạn rút ngắn thời gian phát triển kỹ năng lập trình

Vấn đề

Thật không may, nhóm này không có lý do gì để liều lĩnh thuê một người có thể không trực tiếp đóng góp vào việc xử lý khối lượng công việc của nhóm. Họ cũng có thể sẽ phải đối mặt với khả năng bạn không đủ sức để gián tiếp đóng góp, chẳng hạn như bằng cách tự động hoá một số công việc thủ công đơn giản.

Giải pháp

Hãy sở hữu và duy trì những kĩ năng cụ thể. Mặc dù một thợ học việc có thể hứa với nhóm rằng mình có khả năng học hỏi nhanh chóng, nhưng nếu bạn sở hữu khả năng cụ thể và nhìn thấy được về việc sử dụng các công nghệ và công cụ nhất định, thì nhóm có nhiều lí do hơn để tin rằng bạn đủ khả năng để đóng góp gián tiếp trước khi trưởng thành hơn.

Bạn sẽ cần nhiều hơn một chút so với số kỹ năng cụ thể mà trước đó bạn chuẩn bị cho các cuộc phỏng vấn với các bộ phận nhân sự và các quản lý trong các công ty. Những người khác sẽ trấn an thành viên trong nhóm rằng bạn hữu dụng và họ sẽ không cần “day care” (Patterns of Agile Software Development, trang 88). Một số ví dụ về các kỹ năng cụ thể là khả năng viết các file build cho một số ngôn ngữ thông dụng, hiểu biết về một số framework mã nguồn mở như Hibernate và Struts, kỹ năng thiết kế web cơ bản, JavaScript và các thư viện cơ bản trong ngôn ngữ bạn chọn.

Vấn đề là bạn sẽ thường yêu cầu các nhà quản lý – người đang thuê bạn – phải đánh cược vào việc chọn bạn. Các kỹ năng cụ thể (những cũng vừa đủ đơn giản để bạn có thể mang một ứng dụng nhỏ đến cho cuộc phỏng vấn) cho phép bạn thỏa hiệp với họ. Các kỹ năng cụ thể chính là câu trả lời của bạn cho câu hỏi: “Nếu hôm nay chúng tôi thuê bạn, bạn có thể làm gì vào sáng Thứ Hai nhằm mang lại lợi ích cho chúng tôi?”. Bằng việc hiểu rõ Ngôn Ngữ Đầu Tiên bạn sẽ tạo sự tín nhiệm và chứng minh cho nhóm của mình rằng bạn cực kì hữu dụng.

Khi bạn bắt đầu chuyển đổi sang vai trò của một nhân viên, bạn sẽ ít phụ thuộc vào những kỹ năng này, bởi vì khi đó bạn bắt đầu được thuê dựa trên danh tiếng, danh mục công việc của bạn và những phẩm chất quan trọng hơn hơn mà bạn mang đến cho một nhóm. Nhưng trước khi đến thời điểm đó, bạn cần làm nổi bật hơn các đức tính tốt của mình.

Dave lấp đầy khoảng trống

Giống như hầu hết những ai chuyển sang công việc lập chương trình “muộn màng”, tôi có nhiều trải nghiệm sống, nhiều hơn con số 6 tháng kinh nghiệm trung bình của các lập trình viên. Trong quá trình làm việc trước đây, tôi đã phát triển tất cả các kĩ năng giao tiếp và hiểu biết tâm lý. Khi tôi cố gắng trở thành lập trình viên, tôi gặp những người quá thích thú về những gì tôi đã làm, điều này khiến tôi thỉnh thoảng đánh giá quá cao các kĩ năng mềm này và nói quá nhiều về những chủ đề không phải chuyên môn. Chắc chắn là các kĩ năng này giúp tôi rất nhiều trong nhiều tình huống; tuy nhiên, tôi phải giảm những kĩ năng này đi để tập trung nhiều hơn vào việc phát triển các kĩ năng chuyên môn mà tôi còn thiếu. Tôi không thay đổi nghề của mình để có thể trở thành người trị liệu cho các lập trình viên, tôi thay đổi nghề nghiệp bởi tôi thích việc tạo ra phần mềm.
-David H. Hoover

Hành động

Hãy thu thập những CV của những người có kĩ năng mà bạn trân trọng. Bạn có thể hỏi xin họ một bản sao hoặc tải CV từ trang web của họ. Với mỗi người, bạn cần xác định năm kỹ năng riêng biệt mà họ đề cập trong CV và tiến hành xác định những kĩ năng nào trong số đó ngay lập tức có ích cho nhóm mà bạn muốn tham gia. Soạn một kế hoạch và một dự án nhỏ để chứng minh rằng bạn đã có được những kỹ năng này. Thực hiện kế hoạch.
Tập thói quen thường xuyên soát kĩ CV của mình. Khi đó, hãy viết các kĩ năng cụ thể dưới dạng một danh sách riêng biệt. Bạn nghĩ sao nếu biết rằng nhiều nhà quản lý chỉ nhìn vào những điểm bạn nêu trong danh sách này thay vì tất cả kinh nghiệm mà bạn có?

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

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

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

Promise Memoization

Promise Memoization

Bài viết được sự cho phép của tác giả Lưu Bình An

Chúng ta sẽ hiện thực caching với promise bằng cách dùng Promise Memoization

Ví dụ gọi một API để lấy thông tin của một userId

const getUserById = async (userId: string): Promise<User> => {
  const user = await request.get(`https://users-service/${userId}`);
  return user;
};

Nếu users-service hơi chậm, việc lưu lại giá trị trước đó đã get được là một ý tưởng thường thấy

const usersCache = new Map<string, User>();

const getUserById = async (userId: string): Promise<User> => {
  if (!usersCache.has(userId)) {
    const user = await request.get(`https://users-service/${userId}`);
    usersCache.set(userId, user);
  }

  return usersCache.get(userId);
};

Chúng ta lưu giá trị đó xuống in-memory (bộ nhớ RAM ấy), cách này cũng ok nhưng khá amater.

Nếu chúng ta không cache result trả về từ await mà cache luôn cái Promise?

const userPromisesCache = new Map<string, Promise<User>>();

const getUserById = (userId: string): Promise<User> => {
  if (!userPromisesCache.has(userId)) {
    const userPromise = request.get(`https://users-service/v1/${userId}`);
    userPromisesCache.set(userId, userPromise);
  }

  return userPromisesCache.get(userId)!;
};

Nó cũng na ná như ở trên nhưng chúng ta không còn await vào câu request, chúng ta cũng không cần dùng async function. Nếu bạn cảm thấy hơi hại não chổ này, thì nên làm thử cái demo nhỏ nhỏ này

Cách làm này có một cái tên khá ghê là Singleton Promise – chỉ dùng một promise duy nhất. Bởi vì chúng ta sẽ dùng cùng một Promise với cùng một userId nên khi có một race condition như cách viết bên dưới

await Promise.all([
    getUserById('user1'),
  	getUserById('user1')
])

chúng ta không gặp bất cứ vấn đề gì.

Đó là khi bạn có tinh thần em yêu khoa học, còn đơn giản nhất, đỡ tốn công nhất, bạn có thể dùng những lodash.memoize

import _ from 'lodash';

const getUserById = _.memoize(async (userId: string): Promise<User> => {
  const user = await request.get(`https://users-service/${userId}`);
  return user;
});

Advanced Promise Patterns: Promise Memoization

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

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

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

Phát triển ứng dụng thuần mây với nền tảng Dapr

nền tảng dapr
Phát triển ứng dụng thuần mây với nền tảng Dapr

Dapr là gì?
Việc xây dựng hệ thống ứng dụng phân tán ngày nay được xem là một trong những vấn đề rất phức tạp, nhất là với các dự án vừa và lớn. Trong quá trình vận hành, ứng dụng sẽ được bỏ vào Docker container để đóng gói, chạy và cũng cần các hệ thống để vận hành theo hướng cloud-native. Một trong những nền tảng hỗ trợ tốt vấn đề này là Kubernetes trên nền tảng Dapr.

nền tảng dapr
Dapr hỗ trợ đắc lực trong việc đơn giản hóa quy trình làm việc với các dự án

Tại sao lại cần đến nền tảng Dapr?

Dapr là viết tắt của Distributed Application Runtime. Thông qua buổi nói chuyện hôm nay, mỗi khái niệm sẽ được làm sáng tỏ và giải thích cặn kẽ các vấn đề liên quan đến hệ thống phân tán, các vấn đề của nó và cách Dapr giúp đơn giản hóa các vấn đề khó khăn này.

Distributed

Như đã biết, các ứng dụng ngày nay đều mang tính Resiliency và Scalability. Đây là những vấn đề rất khó vậy mình phải làm như thế nào để giải quyết vấn đề này? Việc scale một ứng dụng ổn định, phân tán và scale-out các ứng dụng khi vận hành là một quá trình rất phức tạp.

Khi phát triển ứng dụng, nhất là với các ứng dụng phân tán, hệ thống sẽ kết hợp rất nhiều các bộ phận với nhau (văn hóa DevOps), các Developer, IT và DevOps phải phối hợp làm việc với nhau để phân phối được ứng dụng một cách thành công. Và khi phát triển ứng dụng mới như hiện giờ với Docker và Kubernetes thì các yêu cầu này càng khó và đòi hỏi cao sự chính xác hơn.

  Dịch vụ Thị trường Điện toán đám mây và lưu trữ web Landscape 2023
  Chuyện mấy con Consumer

Nếu lúc trước có Docker đã khá khó thì giờ có Kubernetes còn khó và đa dạng hơn nên nó đòi hỏi phải có nhiều kiến thức ở các lĩnh vực như IT, networking, lập trình ứng dụng (kết hợp lại). Service Mesh còn gây bối rối hơn nữa vì một ứng dụng vừa có Kubernetes vừa có Service Mesh thì tính phức tạp sẽ còn tăng cao hơn nhiều.

Khi thiết kế ứng dụng chúng ta còn phải nghĩ đến việc chia các subnet cho network của ứng dụng như thế nào? Những câu hỏi đặt ra cần giải quyết là chúng ta phải chia subnet, vnet cho từng môi trường như thế nào, để làm sao hệ thống có thể chạy được trên nhiều nền tảng khác nhau và phân hoạch để đảm bảo tính bảo mật cho toàn hệ thống?

Application

Hiện nay khi xây dựng hệ thống doanh nghiệp, mọi người đều nghĩ về việc làm sao để một hệ thống “nói chuyện” với một hệ thống khác thông qua cơ chế event. Rồi đến việc phải sử dụng Actor-Model như thế nào, vì xây dựng ứng dụng doanh nghiệp thì một ứng dụng cần có và lưu trữ trạng thái (như thiết kế một hệ thống về payment chẳng hạn, theo dõi các đơn hàng đã checkout…), phải nghĩ đến các long running task để chạy tự động khi không có tương tác trực tiếp từ người dùng chẳng hạn. Và để tiết kiệm chi phí thì serverless cũng đang được nhiều doanh nghiệp cân nhắc.

Tất cả mọi vấn đề vừa đặt ra ngăn cản rất nhiều mô hình phát triển enterprise application vì chưa được hệ thống hóa một cách triệt để. Một điểm khác nữa là dù chúng ta làm việc trên hệ thống mới thì cũng không nên bỏ quên hệ thống cũ, vì việc làm sao đưa một hệ thống cũ (vẫn đang chạy tốt và tạo ra doanh thu cho doanh nghiệp) vào hệ thống mới cũng là yếu tố vô cùng quan trọng và mang tính sống còn.

Trong buổi nói chuyện này, Phương và Thắng cũng muốn khai thác và chia sẻ thêm các kinh nghiệm thực tế khi làm các dự án ở Nashtech để người đọc dễ dàng hiểu rõ hơn. Đó là khi tích hợp hệ thống cũ vào hệ thống mới sẽ rất khó, đòi hỏi nhiều kinh nghiệm trên nền yêu cầu chức năng và kiến thức của hệ thống cũ để hoàn thiện quy trình tích hợp. Vì những công nghệ hiện giờ chưa được build-in sẵn để hỗ trợ việc intercommunication, state management, pub/sub, event bindings,… Và sau khi xây dựng và tích hợp hệ thống xong, điều quan trọng là phải vận hành được nó. Bên cạnh đó, bảo mật cũng là một vấn đề quan trọng. Khi làm việc với các hệ thống của châu Âu thì có thêm loại bảo mật rất nổi trội chính là GDPR.

Xem thêm 20 trường hợp sử dụng lệnh Docker cho developer

Runtime

Đa phần khi làm việc với các ứng dụng ngày nay, các developer sẽ nghĩ đến việc tìm một package để sử dụng cho ngôn ngữ đang làm việc, chẳng hạn như 1 node package để gửi email chẳng hạn. Sau đó cài vào ứng dụng của mình để viết code và cấu hình thêm những yếu tố cần thiết khác để tạo nên một chức năng có thể chạy được.

Vấn đề lúc này là một ứng dụng thực tế sẽ không chỉ xài một thư viện mà sẽ cần rất nhiều thư viện và cũng có rất nhiều providers trên thị trường, ví dụ như SendGrid, local mail server… Và thực tế ta phải rẽ nhánh trong code ứng dụng để thỏa mãn việc sử dụng nhiều loại provider cho nhiều môi trường triển khai. Trong khi lẽ ra mình nên tập trung vào việc giải quyết vấn đề của business thì bây giờ, nếu sản phẩm bị bug sẽ phải giải quyết thêm vấn đề của các thư viện kết nối với các dịch vụ từ xa. Trong phát triển phần mềm gọi là vấn đề vendor-locking.

Một vấn đề khác nữa là quản lý versioning, đôi khi chúng ta muốn upgrade version nhưng lại bị ảnh hưởng lên các thư viện khiến việc upgrade trở nên khó khăn hơn. Lại nói tiếp về Portability trong việc xây dựng ứng dụng, hiện nay có 2 vấn đề cần phải giải quyết:

Khi làm việc với môi trường phân tán và đám mây thì làm sao để chạy được trên local có Docker hay không có Docker và làm sao để hệ thống chạy được trên Kubernetes trên local và trên đám mây? Rõ ràng rằng việc được cái này phải chấp nhận mất cái kia là điều không tránh được. Sẽ phải thỏa mãn rất nhiều thứ phức tạp khiến các developer gặp khó khăn trong việc xây dựng ứng dụng hiện nay. Vậy giải pháp cho những vấn đề này như thế nào? Dapr sẽ giải quyết vấn đề này.

Nền tảng Dapr giúp gì trong quá trình làm việc?

Dapr là tập hợp có thể giải quyết các vấn đề khó khăn mà chúng ta vừa kể trên, cô đọng lại vào các khối nền dùng chung (building blocks) có sẵn và chỉ cần đưa vào ứng dụng rồi sử dụng nó mà thôi. Có thể hiểu building blocks như một platform ở dưới làm nền tảng để phát triển các ứng dụng phía trên theo hướng cloud-native. Khi muốn build một hệ thống có nhiều ngôn ngữ (polyglot languages) như .NET, Java, Nodejs, Go… thì độ phức tạp do việc phải bảo trì cùng lúc nhiều ngôn ngữ lập trình và các stack ngôn ngữ của nhóm phát triển dự án sẽ tăng lên. Nghĩa là trong nhóm phải có một người có thể làm nhiều ngôn ngữ hay một người có thể làm nhiều framework khác nhau (fullstack và cross-stack).

Tuy nhiên vấn đề khó khăn ở đây là, chúng ta không thể dùng ngôn ngữ đó để giải quyết vấn đề kinh doanh vì phải tập trung quá nhiều vấn đề kỹ thuật và đơn thuần chỉ là kỹ thuật. May mắn Dapr khắc phục được vấn đề đó qua các khối building-blocks, mô hình độc lập nền tảng và các stack ngôn ngữ (agnostic platform và programming languages). Khi làm việc với Dapr, chúng ta chỉ phải tập trung giải quyết code business của ứng dụng, còn những phần khác Dapr sẽ giúp chúng ta. Vậy nên khi phát triển một ứng dụng với Dapr thì việc có thể tận dụng nhiều ngôn ngữ khác nhau, nhiều framework khác nhau là chuyện hoàn toàn có thể làm được.

Sự hỗ trợ nhiều từ cộng đồng cũng là một điểm mạnh của Dapr. Ý tưởng này được phát triển đầu tiên bởi CTO và các thành viên chủ chốt của Microsoft, sau đó trở thành open-source. Đến bây giờ thì không chỉ có Microsoft mà các cộng đồng ở những công ty khác cũng có thể đóng góp thêm nhiều ý tưởng và xây dựng cộng đồng rộng lớn không chỉ chạy trên Azure cloud mà còn các dịch vụ của Google Cloud, AWS hay Alibaba cloud. Cộng đồng này rất biết cách lắng nghe, khi có ý tưởng hay bạn có thể đệ trình lên nơi lưu trữ của Dapr trên Github hoặc cũng có thể tạo các pull-request để đóng góp ngược lại vào Dapr cho các phiên bản release tiếp theo.

nền tảng dapr
Dapr hỗ trợ đa ngôn ngữ và framework

Để mọi thứ hoạt động trơn tru hơn trên nhiều nền tảng hay nhà cung cấp đám mây khác nhau, thì Dapr phải tuân theo và yêu cầu các Developer tuân thủ các chuẩn của công nghệ phần mềm cho các phần như communication, Rest API,… Về Open APIs, Dapr xây dựng trên nền có sẵn của Kubernetes, và bản thân Kubernetes có bộ API cho riêng nó phía trên và cho phép thao tác từ bên ngoài vào thông qua các CLI hoặc Rest API để thao tác trực tiếp vào những thành phần (Dapr gọi nó là Component) hiện sẵn có trong nền tảng Dapr.

Điểm hay nhất ở đây là có thể chạy ở bất kỳ nền tảng nào (on-prem hoặc on-cloud và thậm chí trong các thiết bị IoT). Vì Dapr có thể mở rộng (extensible) và và có thể gắn thêm (plugable) nên chúng ta có thể sử dụng rất nhiều Component từ phía nhà phát triển Dapr hoặc cộng đồng phát triển. Hiện nay, 3 công ty điện toán đám mây lớn trên thế giới (AWS, Azure, Google Cloud) đều đang đóng góp cho Dapr và họ đã viết những Component mềm dẻo cho các dịch vụ đám mây của họ để có thể gắn kết vào Dapr.

Việc của các Developer là tải về, cấu hình và thay đổi các thông tin cấu hình theo các thông tin các nhân của từng người sử dụng đám mây cho các service đó là có thể sử dụng ngay lập tức.

Micro Service Building Blocks

Dapr sinh ra để giải quyết vấn đề mà hiện tại đang khiến mọi người rất đau đầu trong việc giải quyết bài toán hệ thống phân tán: Đó là với Microservice, nếu không có Kubernetes và Dapr, chúng ta phải có 1 cơ chế Service Discovery để trừu tượng hóa các địa chỉ IP và Port của các service (Dapr gọi là app); Còn với Kubernetes và Dapr thì đơn giản hơn rất nhiều, bạn chỉ cần biết tên của service (app), giống như một khi tìm một nhà nào đó thì mình chỉ cần biết được địa chỉ của nhà đó rồi đến mà thôi chứ không quan tâm đến các chi tiết bên trong ngôi nhà.

Kubernetes Service chỉ quan tâm đến traffic từ bên ngoài vào và đó là lý do nó chỉ quan tâm đến service name. Dapr thừa hưởng các đặc tính này Kubernetes.

  Kubernetes là gì? Cùng tìm hiểu cách hoạt động của K8s

1. State Management

Với Dapr, chúng ta được tiếp cận với một khái niệm gọi là state-management. Cho đến nay khi xây dựng 1 ứng dụng, chúng ta thường có 2 dạng là stateless và stateful. Chúng khá nhập nhằng khiến các Developer không phân biệt được rõ ràng. Dapr thống nhất 2 khái niệm này với nhau, việc khi nào ứng dụng có trạng thái hoặc khi nào không có trạng thái, mình sẽ đọc tài liệu và code dựa trên 1 public API thống nhất cho phần state management rồi cấu hình để nó hoạt động mà thôi. Dapr không bị vendor-locking nên nó cho phép mình thay đổi dựa trên các môi trường.

Khi chúng ta làm việc với hệ thống phân tán, nếu muốn 1 hệ thống có high throughput và low latency thì nên cân nhắc sử dụng các cơ chế event-based. Dapr có các building-blocks sẵn có cho việc giúp chúng ta dễ tiếp cận với các kiểu publish/subscribe, send/receive message. Các message tuân thủ chuẩn cloud-event nên có thể được consume dễ dàng trên các nền tảng đám mây khác nhau hoặc on-prem (nếu có), và vì được chuẩn hóa nên nó đa dạng cho nhiều lại message brokers và các hệ thống message khác nhau điển hình như Kafka.

2. Resource binding và trigger

Resource binding và trigger là một vấn đề khá hay. Trong hệ thống phần mềm phức tạp, ta luôn có rất nhiều thành phần cần tính theo thời gian (trigger). Lấy ví dụ, Dapr trừu tượng hóa cả việc làm sao một cái tệp tin được bỏ vào Blob Storage, và bắt các sự kiện để trigger ra ngoài để các hệ thống/function khác nhận lấy và thực thi các hoạt động mở rộng trên cơ thế tệp tin. Chẳng hạn như sẽ gửi mail cho những người liên quan khi có các thao tác cập nhật nội dung tệp tin.

Dapr giải quyết chuyện này bằng khái niệm input và output. Input là event đi tới và output là trigger các sự kiện cho các hệ thống khác xử lý tiếp theo. Hiện tại được sử dụng khá nhiều cho các cơ chế của các thiết bị IoT, việc phân tích dữ liệu nâng cao,… Và đó là là resource bindings.

3. Actors Model

Actors Model với từng ngôn ngữ lập trình sẽ có các thư viện và cách sử dụng khác nhau, chẳng hạn như Akka, Orleans, Actix,… Sẽ có rất nhiều dạng ứng dụng trong thực tế sử dụng mô hình actors, nhóm phát triển Dapr cũng nghĩ thế và trừu tượng hóa nó thành 1 cách sử dụng dễ dàng nhưng cũng vô cùng mạnh mẽ. Việc sử dụng Actors Model trên Dapr giúp việc scale ứng dụng trên mô hình phân tán đơn giản hơn.

nền tảng dapr
Micro Service Building Blocks là hệ thống của Dapr với nhiều thế mạnh

4. Security với nền tảng Dapr

Quản lý những thông tin bí mật như password của database, các secret keys cũng là thế mạnh của Dapr. Với bài toán thường, sẽ phải sử dụng những file cấu hình hoặc biến môi trường để mô tả theo từng môi trường riêng rẽ. Dapr đưa ra một chuẩn riêng với các key value, sử dụng với sản phẩm và cấu hình phù hợp. Điểm hay là tất cả các cấu hình này có thể chạy được trên các môi trường độc lập khác nhau và không cần phải kiểm thử lại.

5. Extensible

Dapr hỗ trợ mở rộng trong trường hợp mình muốn có thêm các Components và các behavior mới trong ứng dụng. Dapr hỗ trợ phát triển ứng dụng rất tốt nhưng nó lại độc lập với ứng dụng đang làm việc nên câu hỏi đặt ra là khi sử dụng với các ngôn ngữ .NET, Java, Nodejs, Python, Go, và Rust thì có cần cài đặt Dapr vào trong ứng dụng hay không?

Câu trả lời là thật sự chúng ta không cần cài đặt bất cứ Dapr nào vào ứng dụng của mình hết.

Vậy nền tảng Dapr sẽ giải quyết vấn đề như thế nào?

Sidecar và Component Architecture

Với quá trình làm việc này, service productcatalog lấy thông tin của product và service shoppingcartapp là thông tin trên giỏ hàng, bài toán cần giải quyết là khi thêm các items vào giỏ hàng, Dapr hoạt động trên mô hình này như thế nào?

Nếu làm theo cách cũ, catalogproductapp service sẽ call API của shoppingcartapp service, tuy nhiên với Dapr nó không cần call trực tiếp mà sẽ thông qua một Dapr Sidecar. Mỗi service sẽ có Dapr Sidecar đứng kế bên. Trong trường hợp này, Dapr Sidecar của productcatalogapp sẽ call đến Dapr Sidecar của shoppingcartapp để lấy dữ liệu, khi đó Dapr Sidecar của shoppingcartapp sẽ gọi vô internal API của shoppingcartapp để lấy và trả dữ liệu về cho Dapr Sidecar của productcatalogapp.

Sau đó Dapr Sidecar của productcatalogapp sẽ trả dữ liệu này vào service bên trong. Mô hình này làm việc như một dạng thông dịch và chạy độc lập không phụ thuộc các ngôn ngữ lập trình, miễn là bạn có Sidecar cho từng service.

Xem thêm Share data giữa Docker Container bằng Docker Volume

Nhờ mô hình làm việc này nên Dapr sẽ có rất nhiều thông tin về logs, metrics để chuyển về trung tâm. Đó là lý do chúng ta không cần cài đặt Dapr cho ứng dụng vì ứng dụng chỉ biết rằng Dapr đang cung cấp một chuẩn API và call chuẩn API đó mà thôi. Đây là được xem là “nét đẹp” của Dapr.

Và kể cả nếu chạy trên Kubernetes cũng không cần thay đổi mô hình hoạt động này. Vì thật ra nó chỉ là những cấu hình nên khi chúng ta muốn thay bằng các Component khác thì chỉ phải đổi Component trong thư mục Components của Dapr mà thôi, nhờ về việc tránh vendor-locking như đề cập ở trên.

Để Kubernetes hiểu được các cấu hình, thông số thì chắc chắn phải sử dụng Helm chart. Trong Dapr sẽ có các components, core components là thành phần chính để Dapr đọc, nạp và vận hành được. Đối với tất cả các ứng dụng sẽ có ít nhất 2 container, 1 container là ứng dụng application code và 1 container nữa là Dapr Sidecar. Ngoài ra, các components chính là những service bên ngoài. Chúng ta có thể dùng Dapr thông qua các file cấu hình như thế.

Bài viết được trích dẫn từ phần trình bày của anh Phương Lê và Thắng Chung tại sự kiện Vietnam Web Summit 2020 LIVE do TopDev tổ chức


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

Xem thêm các việc làm Developer hấp dẫn tại TopDev

10 bài tập tăng cường khả năng tập trung

10 BÀI TẬP TĂNG CƯỜNG KHẢ NĂNG TẬP TRUNG

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Bạn sẽ không bao giờ có cơ bắp to khỏe nếu chỉ ngồi trên sô pha suốt ngày, và cũng không thể phát huy những sức mạnh tuyệt vời của sự tập trung nếu chỉ đọc Buzzfeed và xem ti-vi. Cũng như các cơ bắp vật lý, cơ bắp tinh thần cần có tính bền bỉ; nó cần những thử thách vượt quá giới hạn để hình thành những “sợi cơ” tập trung. Bên dưới, tôi xin liệt kê những bài tập giúp tăng cường khả năng tập trung để bạn có thể bắt đầu xử lý những công việc đòi hỏi sự tập trung cao hơn.

  Focus - tập trung tuyệt đối trong công việc của Designer
  React Pattern: Tập trung PropTypes

1. TĂNG SỨC TẬP TRUNG MỘT CÁCH TỪ TỪ

Nếu bạn quyết định muốn có thân hình cân đối nhưng chỉ vừa mới bắt đầu, bạn không nên dấn thân vào chương trình luyện tập cường độ cao vì điều đó sẽ làm bạn bị chấn thương, nản chí hoặc cả hai, và bạn sẽ bỏ cuộc ngay cả trước khi thật sự bắt đầu.

Tương tự, nếu hiện tại bạn tập trung không được lâu, tốt nhất bạn nên từ từ gia tăng thời lượng mà bạn muốn tập trung. Tôi đề xuất “Phương pháp Pomodoro”, theo đó bạn tập trung trong 45 phút liền và cho bản thân nghỉ ngơi 15 phút. Nhưng đối với nhiều người thì có lẽ 45 phút giống như một chặng đua đường dài của tâm trí!

Vậy hãy bắt đầu với một mục tiêu khá đơn giản và từ đó nâng cao hơn. Hãy đặt đồng hồ hẹn giờ trong 5 phút và hoàn toàn tập trung vào công việc trong khoảng thời gian này. Sau đó, hãy nghỉ ngơi 2 phút trước khi tập trung thêm 5 phút nữa. Mỗi ngày, bạn hãy tăng thời gian tập trung thêm 5 phút, đồng thời cộng thêm thêm 2 phút vào thời gian nghỉ ngơi. Trong 9 ngày, chắc hẳn bạn có thể làm việc liên tục trong 45 phút rồi nghỉ ngơi trong 18 phút. Một khi đã quen với phương thức này, bạn có thể cố gắng kéo dài những khoảng thời gian tập trung hơn một chút và rút ngắn những khoảng nghỉ ngơi lại.

2. GHI LẠI NHỮNG VIỆC GÂY PHÂN TÂM VÀ XỬ LÝ SAU

Bởi internet giúp ta có thể truy cập tức thì bất kỳ thông tin nào, mỗi khi nghĩ ra điều gì đó, ta có xu hướng muốn tra cứu nó ngay. “Không biết thời tiết ngày mai thế nào nhỉ?” “Bộ phim đó đã ra mắt vào năm nào?” “Không biết Facebook của mình có cập nhật gì mới không?” Do đó, ngay khi có những suy nghĩ hoặc câu hỏi như vậy, ta sẽ ngừng tập trung vào công việc đang làm. Vấn đề là một khi bị xao lãng, ta phải mất trung bình 25 phút để quay trở lại công việc ban đầu. Thêm vào đó, việc chuyển đổi sự chú ý từ việc này sang việc khác cũng làm suy giảm sức tập trung của ta.

Vì vậy hãy tiếp tục làm công việc; bất cứ khi nào chợt nghĩ đến một điều mà bạn muốn kiểm tra, hãy viết nó ra một tờ giấy bên cạnh (hoặc ghi chú vào ứng dụng Evernote), và tự hứa với bản thân rằng sau khi hết thời gian tập trung và đến lúc giải lao, bạn sẽ quay lại kiểm tra.

Khi bị xao lãng, bạn phải mất trung bình 25 phút để quay trở lại công việc ban đầu!

3. XÂY DỰNG Ý CHÍ

Sự tập trung có chủ ý và ý chí gắn liền với nhau. Ý chí cho phép ta bỏ qua có ý thức những yếu tố gây xao lãng trong khi vẫn tập trung vào công việc đang làm.

4. THIỀN ĐỊNH

Thiền định không chỉ giúp bạn giữ bình tĩnh, thanh thản và tự chủ, các nghiên cứu còn nhiều lần cho thấy rằng thiền chính niệm có thể giúp bạn tập trung lâu hơn đáng kể.

Trong một nghiên cứu, 140 tình nguyện viên tham gia một khóa tập thiền 8 tuần. Sau khoảng thời gian đó, thời gian tập trung cũng như những chức năng nhận thức quan trọng khác của tất cả tình nguyện viên đều được cải thiện rõ rệt .

Bạn không phải dành cả ngày đến một thiền viện để ngồi thiền nhằm tận dụng sức mạnh gia tăng sự tập trung của nơi đó. Nghiên cứu cho thấy chỉ cần ngồi thiền 10 đến 20 phút mỗi ngàycũng cho kết quả như mong đợi. Hơn nữa, thậm chí bạn còn thấy khả năng tập trung của mình được cải thiện chỉ sau 4 ngày.

Vì vậy, nếu bạn muốn tập trung học một lúc nhiều giờ liền, hãy bắt đầu buổi sáng bằng việc tập trung vào hơi thở.

5. THỰC HÀNH CHÍNH NIỆM XUYÊN SUỐT MỘT NGÀY

Bên cạnh việc dành 10 đến 20 phút mỗi ngày để thiền chính niệm, các chuyên gia về khả năng tập trung khuyên ta nên tìm cơ hội thực hành chính niệm xuyên suốt một ngày. Chính niệm đơn giản là tập trung trọn vẹn vào việc bạn đang làm, suy nghĩ chậm lại, và quan sát tất cả những cảm nhận về cơ thể và tinh thần mà bạn đang trải nghiệm vào lúc đó. Bạn cũng có thể thực hành chính niệm khi ăn bằng cách nhai chậm và tập trung vào mùi vị cũng như kết cấu của thức ăn.

Việc đưa những khoảng thời gian thực hành chính niệm vào suốt một ngày sẽ giúp bạn củng cố sự tập trung và tập trung lâu hơn những khi bạn thật sự cần.

Chính niệm cũng có thể giúp chống lại các yếu tố gây xao lãng khi nó xuất hiện. Nếu bạn đang làm việc nhưng lại cảm thấy rất muốn đứng dậy làm gì đó khác, hãy tự nhủ,“Ngồi yên tại đây nào.” Vào lúc đó, hãy chú ý đến cơ thể và hơi thở của bạn. Sau vài giây tập trung vào hơi thở, bạn sẽ nhận thấy yếu tố gây xao lãng biến mất và giờ thì bạn sẵn sàng quay lại với công việc.

Thiền định và thực hành chánh niệm cũng là cách cải thiện khả năng tập trung.

6. TẬP THỂ DỤC

Bạn không chỉ có thể so sánh việc rèn luyện tâm trí với rèn luyện cơ thể, mà việc rèn luyện cơ thể còn thật sự mang đến những lợi ích cho tâm trí một cách trực tiếp. Các nhà nghiên cứu phát hiện ra rằng những học sinh tập thể dục ở cường độ vừa phải trước khi kiểm tra khả năng tập trung đạt kết quả tốt hơn những học sinh không tập. Các nhà nghiên cứu nhận thấy việc tập thể dục chủ yếu giúp não bộ phớt lờ các yếu tố gây xao lãng, mặc dù họ chưa tìm được lý do chính xác. Tôi xin nói rằng việc kỷ luật bản thân để chịu đựng sự vất vả của một buổi tập giúp củng cố lượng ý chí tương đương với khi ta phớt lờ các yếu tố gây xao lãng để tiếp tục làm việc/tập trung.

7. TẬP GHI NHỚ

Đây không những là một mẹo hay để tạo ấn tượng mà còn là một cách tuyệt vời để rèn luyện cơ bắp tinh thần. Hãy đặt ra mục tiêu học thuộc một bài thơ hoặc một đoạn văn mỗi tuần.

8. ĐỌC NHỮNG NỘI DUNG DÀI MỘT CÁCH CHẬM RÃI

Với sự phát triển của máy tính bảng, máy đọc sách và điện thoại thông minh, một số nghiên cứu chỉ ra rằng việc đọc các nội dung điện tử nói chung đã tăng đến gần 40%. Chắc hẳn bạn nghĩ đó là một điều tốt, nhưng tạp chí Slate gần đây đã thực hiện một số nghiên cứu với sự giúp đỡ của công ty phân tích trang web Chartbeat. Kết quả cho thấy chỉ vỏn vẹn 5% người đọc một bài báo điện tử thật sự đọc đến hết bài. Ngoài ra, 38% người đọc không bao giờ đọc nhiều hơn vài đoạn đầu. Vì vậy, việc nói rằng mọi người đọc nhiều hơn là chưa đúng. Điều chúng ta đang làm thật sự chỉ là cuộn lên cuộn xuống nhiều hơn và ít đọc hơn.

Đồng thời, chúng ta cũng đọc ít sách hơn; một nghiên cứu gần đây cho thấy 25% người Mỹ không đọc một quyển sách nào trong năm vừa qua.

Đây thật sự là điều đáng xấu hổ. Tuy dài không hẳn đồng nghĩa với chất lượng cao hơn, nhưng có những ý tưởng phức tạp nhất định không thể nào được gói gọn trong một bài viết ngắn mà phải được viết thành một quyển sách (hoặc vài quyển) để làm rõ. Bỏ qua một nội dung nào đó chỉ vì nó dài là bỏ lỡ cả một kho kiến thức mà chỉ những người sẵn lòng tìm hiểu sâu hơn mới tiếp cận được. Nhất định có một nơi dành cho việc đọc lướt và học một phần nhỏ kiến thức, nhưng bạn cũng nên dành thời gian đọc thấu đáo một vài chủ đề nào đó.

Nếu lâu rồi bạn không đọc sách, tôi thách thức bạn đọc một quyển tối nay. Hãy thật sự tập trung đọc quyển sách đó. Hãy học cách đọc sách sao cho hợp lý, và thói quen đó sẽ thay đổi cuộc đời bạn.

Bên cạnh những quyển sách, hãy cố gắng đọc một hoặc hai bài viết dài mỗi tuần.

Hãy cố gắng đọc sách hoặc những nội dung dài một cách chậm rãi.

9. HÃY HIẾU KỲ

Càng hiếu kỳ, sức mạnh tập trung của bạn càng cao. William James gợi ý một thí nghiệm đơn giản để xem việc hiếu kỳ về một chủ đề bạn quan tâm có thể giúp bạn tập trung vào chủ đề đó lâu hơn đến mức nào:

“Hãy cố gắng nhìn chằm chằm vào một cái chấm trên tờ giấy hoặc trên tường. Bây giờ bạn sẽ phát hiện một trong hai chuyện sau xảy ra: hoặc tầm nhìn của bạn mờ đi nên giờ bạn không thấy rõ gì cả, hoặc bạn vô tình không còn nhìn chằm chằm vào cái chấm đó nữa mà đang nhìn thứ khác. Nhưng nếu bạn liên tục hỏi bản thân về cái chấm đó, như nó to cỡ nào, cách bạn bao xa, có hình dạng và màu sắc ra sao, v.v…; nói cách khác, nếu bạn xem xét nó, nghĩ đến nó theo nhiều cách khác nhau, cùng với những kiểu liên hệ khác nhau – bạn có thể tập trung vào nó trong một thời gian tương đối dài. Đây là điều mà các thiên tài vốn làm, họ tìm hiểu một đề tài đến nơi đến chốn và phát triển nó.”

Charles Darwin là bậc thầy về khái niệm này. Những người cùng thời trầm trồ trước khả năng dành cả ngày quan sát động vật và thực vật của ông. Bí quyết của Darwin là không bao giờ thôi hiếu kỳ – ông có thể khám phá ngày càng nhiều hơn về một vật thể đơn lẻ bằng cách tập trung vào các chi tiết khác nhau, xem xét theo nhiều cách và đặt những câu hỏi mới. Ông khám phá nó từng chút một.

10. THỰC HÀNH LẮNG NGHE CHỦ ĐỘNG

Tập trung không chỉ hữu ích cho những công việc trí óc, nó cũng là kỹ năng thiết yếu để giao tiếp. Khả năng hiện diện trọn vẹn bên một người thân yêu hay bạn bè giúp bạn xây dựng mối quan hệ, sự thân thiết và tin tưởng giữa bạn và họ. Đồng thời, việc cố gắng tập trung hết sức để lắng nghe người khác giúp toàn bộ cơ bắp tập trung của bạn mạnh lên. Đây là một việc có lợi cho cả hai bên. Vì vậy lần sau khi nói chuyện với người bạn yêu thương nhất, hãy đặt điện thoại sang một bên và chú ý lắng nghe hết sức có thể.

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

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

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

TOP 5 bí quyết học tập thượng hạng cho coder

TOP 5 bí quyết học tập thượng hạng cho coder

Bài viết được sự cho phép của BBT Tạp chí Lập trình

Dù bạn là người đang học code hay đã có thâm niên coding vài năm thì những cuộc “cách mạng” công nghệ hiện nay vẫn có thể khiến bạn tụt hậu nhanh chóng nếu không giắt túi vài bí kíp tự học hiệu quả  để luôn học những điều mới mẻ, và nâng cấp những năng lực sẵn có trong người.

  "Mẹo bỏ túi" cho dân coder mới vào nghề
  5 tips để trở thành một coder giỏi hơn mỗi ngày!

Có những bí kíp thuần kinh nghiệm, có vài bí kíp nghe thì hay nhưng hên xui, và cũng có những bí kíp đã được khoa học kiểm chứng về tính hiệu quả. Bài này chia sẻ vài cách thức được đúc rút từ các nghiên cứu khoa học về việc học tập hiệu quả, hoặc của những cao thủ trong nghề viết mã.

1. Hãy luyện tập phân bổ, đừng học cuốn chiếu, và thật có chủ đích.

Theo một nghiên cứu của nhiều nhà khoa học đăng trên tập san “Psychological Science in the Public Interest ”, bạn không nên học kiểu dồn ép và cuốn chiếu mà nên phân bổ kiến thức ra. Ví dụ, khi bạn học một ngôn ngữ mới (ví dụ Java), thì đừng vội đặt mục tiêu “làm chủ Java trong 7 ngày” rồi bỏ hết tất cả các việc khác để dồn 100% công lực vào học Java trong vòng 7 ngày. Điều đó nghe rất hấp dẫn nhưng không khả thi, bạn sẽ không thu hoạch được nhiều sau 7 ngày. Và đặc biệt, nếu sau 7 ngày đó bạn coi như đã “xong việc” thì đảm bảo là bộ nhớ của bạn sẽ chẳng còn bao nhiêu sau một thời gian ngắn.

Thay vào đó, hãy rải việc học ra mỗi tuần một ít, có chủ đích lặp đi lặp lại để “luyện cơ” và khắc sâu kiến thức vào bộ nhớ trong đầu bạn.
Ví dụ: Tuần 1 bạn học căn bản về ngôn ngữ Java, các khối điều khiển, cách tổ chức chương trình
Tuần 2 bạn có thể tập cách tổ chức một trang web đơn giản, vận dụng các kiến thức về cấu trúc chương trình, hàm/cấu trúc điều khiển trước đó.
Tuần 3 bạn nâng cấp trang web đó dưới dạng kiến trúc MVC, có liên hệ hay dở với cách thức tổ chức chương trình kiểu cũ.

Cứ thế cứ thế, kiến thức sẽ được xây dựng vững chắc từng khối từng khối một.

Ở đây có ba từ khoá: phân bổ, cuốn chiếu và chú tâm. Luyện tập phân bổ nghĩa là tách các kĩ năng ra để làm chủ từ từ, đừng dồn lại một lúc. Cuốn chiếu chính là cách học [không hiệu quả] được các sách dạng tutorial quảng cáo (thật đáng tiếc là một số trường học vẫn đang dạy lập trình cuốn chiếu kiểu này). Còn có chủ đích là cái mà cao thủ Peter Norvig đã đề cập (đọc thêm bài “Luyện code như luyện cơ”): “ Điều quan trọng là bàn về phương pháp thực hành: không chỉ là việc lặp đi lặp lại đơn thuần, mà còn thử thách chính mình bằng những nhiệm vụ như vượt qua khả năng hiện tại của bản thân, cố gắng, phân tích hiệu xuất của mình trong và sau quá trình rèn luyện, và sửa chữa bất kỳ sai lầm nào. Cứ như vậy, lặp đi lặp lại.”.

2. Hãy thư giãn, và ngủ đủ

Coder rất hay dán mắt vào màn hình trong nhiều giờ, kể cả khi làm việc cũng như khi chơi game. Điều này gia tăng sức ép lên não bộ, khiến nó mệt mỏi và khó hoạt động hiệu quả.

Theo nghiên cứu của nhà khoa học thần kinh John Medina ghi trong sách “Luật trí não”, não bộ chúng ta hoạt động theo một chu kì 10 phút tập trung rồi sau đó là sao nhãng.

Mẹo hay: Hãy dùng đồng hồ bấm giờ và sử dụng phương pháp Pomodoro để áp dụng hài hòa cơ chế tập trung-thư giãn khi làm việc.

Theo hai chuyên gia khác về học tập và thần kinh học Gs. Barbara Oakley và Gs. Terence Sejnowski, thì chúng ta nên kết hợp tập trung và thư giãn để giúp não bộ làm việc hiệu quả. Khi bạn thư giãn, không có nghĩa là não ngừng hoạt động, mà nó hoạt động ở cơ chế “khuếch tán” (diffused). Nhiều ý tưởng hay, nhiều sáng tạo quan trọng được phát sinh trong lúc thư giãn ấy chứ không phải tập trung hết cỡ để học tập hay giải quyết vấn đề.

Lời khuyên cực kì quan trọng khác là chúng ta nên ngủ đủ. Lời khuyên này tầm thường như cân đường hộp sữa nên dễ bị bỏ qua. Các coder thường kháo nhau về trình độ của một tay nào đó “làm việc 3 ngày liền không cần ngủ”, nghe rất “ngầu”. Thực ra, nếu bạn muốn năng suất giảm sút gấp đôi, và rước bệnh vào thân thì cứ việc “OT” liên tục, “over night” liên tục. Chúc bạn may mắn.

3. Hãy đọc thật nhiều code

Bill Gates từng tâm sự, thời học code, cậu bé tò mò tọc mạch Bill Gates đã lục tung code của các chương trình máy tính sẵn có. Nhờ đó mà học cách viết code. Nhiều người cũng học code bằng cách đọc code của người khác, bao gồm cả người viết bài này.

Bạn được lợi gì từ việc đọc code? Thứ nhất là có thể biết được cách các cao thủ tổ chức mã lệnh thế nào, từ đó mà bắt chước được phần nào đấy.  Thứ nhì là mở rộng khả năng “hiểu” code. Bản thân code là một văn bản. Mặc dù code viết ra để cho máy nó chạy, nhưng một “người viết code tốt là người viết ra để con người hiểu được”, “còn viết code chỉ để máy hiểu được thì là code bình thường”. Đọc hiểu được code cũng giúp bạn phần nào trong việc viết ra những đoạn code mà người khác đọc được. Tất nhiên, nếu là người mới học, hãy bắt đầu từ đọc những chương trình nhỏ, đừng vội xông ngay vào mã nguồn của Linux nếu bạn không muốn ngất trên bàn phím.

4. Hãy kiến tạo

Ý tôi là, hãy viết gì đó dùng được. Vui thôi cũng được. Học không gì hay bằng tự làm ra sản phẩm. Học mà làm, làm thì học.

Khi học Android chẳng hạn, một trong những cách học hay nhất là làm một cái app nào đó giải quyết vấn đề nào đó của chính mình và người xung quanh. Càng cụ thể và “nhỏ bé” càng tốt. Vì bạn sẽ có những “chiến thắng nhỏ” của riêng mình. Điều đó chính là liều doping cực mạnh để thúc đẩy bạn viết những chương trình lớn hơn, vươn lên những mục tiêu mới.

Hơn chục năm trước, tôi cũng từng làm một cái app Java (J2ME) có tên rất buồn cười là “Mama tổng quản”, cài lên máy Sony Ericson của người thân để theo dõi chi tiêu khi đi chợ.  Nghe ngớ ngẩn phải không? Nhưng tôi của dạo ấy thì vui lắm, vì có thể dùng những dòng code của mình vào những việc hữu ích hằng ngày.

5. Hãy tự đánh giá

Tự đánh giá là một trong những cách học tốt nhất theo nghiên cứu đã dẫn ở bên trên. Nó vừa giúp ta khắc sâu kiến thức, vừa giúp ta tránh những hiểu nhầm. Đó vừa là cơ hội củng cố kiến thức, nhớ dai hơn, nhưng cũng là cơ hội để sửa sai, tránh tình trạng “ảo tưởng sức mạnh”.

Có nhiều hình thức tự đánh giá. Bạn có thể dùng các bài tập, câu hỏi ôn tập, danh mục kiểm tra ở cuối chương và tự làm lấy rồi so kết quả, hoặc tự kiểm tra sản phẩm làm ra. Nếu tham gia một lớp học, hãy yêu cầu giảng viên cung cấp các câu hỏi nhanh (quiz), rubrics, checklist. Đó sẽ là những công cụ tuyệt vời để bạn tự kiểm tra kiến thức của mình.

Đôi khi tự mình viết ra những tóm tắt và suy tư (reflection) về bài học, hoặc tự thuyết trình kiến thức học được cho người khác cũng là một cách tự kiểm tra, xem mình đã thực sự lĩnh hội được mấy phần kiến thức.

Tự học luôn là một hành trình đầy thú vị. Hy vọng năm chiến thuật trên đây giúp bạn đi nhanh hơn và thu hoạch tốt hơn trên hành trình ấy. 

Dương Trọng Tấn.

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

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

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