Home Blog Page 160

Lập trình viên đánh đổi gì khi theo ngành lập trình

lập trình viên

Bài viết này sẽ liệt kê ra những khó khăn mà một lập trình viên sẽ gặp phải, giúp bạn đọc sẽ có một cái nhìn thực tế hơn về ngành từ đó có thể đưa ra quyết định sáng suốt là có nên đánh đổi để theo nghề lập trình viên này hay không nha!

Ngành công nghệ ngày càng phát triển, đồng thời cũng kéo theo nhu cầu tuyển dụng lập trình viên ở các công ty lớn nhỏ. Chính vì thế, ngành lập trình hiện nay được xem là một ngành hot với mức thu nhập trung bình khá cao.

Nghề lập trình viên ở thời điểm hiện tại cũng là ngành xã hội đang cần và được nhiều bạn trẻ hứng thú và muốn tìm hiểu thêm về nó. Tuy nhiên, ngành nào cũng vậy, cũng sẽ có những mặt tối, những khó khăn riêng mà chỉ người trong ngành mới biết. Đằng sau những ánh hào nhoáng là những đánh đổi, trả giá mà ai trong ngành cũng biết điều ấy cả.

Những khó khăn có thể sẽ làm giảm hứng thú của bạn với nghề, nhưng nếu bạn chấp nhận những trả giá và đánh đổi nó để theo nghề lập trình viên thì TopDev tin chắc rằng bạn sẽ trở thành một lập trình viên giỏi trong tương lai không xa!

Khó khăn I: Cần phải học nhiều, dễ bị đào thải, tuổi nghề thấp

Lập trình viên là nghề ăn, ngủ và làm việc với công nghệ mà công nghệ thì thường xuyên thay đổi và cập nhật những thứ mới mẻ hơn. Chính vì thế, người làm thiên về công nghệ phải luôn học hỏi liên tục những cái mới nếu không sẽ rất dễ bị tuột lại phía sau và bị đào thải.

Như các bạn cũng biết, cách đây chưa đến 10 năm, khi nền công nghệ di động còn chưa phát triển mạnh mẽ như hiện tại, đồng thời cũng chưa có sự xuất hiện của iOS, Android… thì nghề lập trình app tại thời điểm đó khá mờ nhạt, và chỉ có những app nhỏ, không có nhiều tính năng trên điện thoại. Bởi thế, nếu các bạn không học hỏi và cập nhật những kiến thức công nghệ mới thì chắc hẳn sau từ 3-4 năm các bạn sẽ bị ‘outgame’.

lập trình viên

Biết đâu 5-10 năm nữa sẽ có thêm những ngành nghề mới hoặc những ngành nào sẽ bị loại bỏ và biến mất. Mấy năm trước, Flash được xem là một trong những nền tảng nổi tiếng, nhưng hiện tại nó hầu như đã biến mất trên thị trường và không còn ai sử dụng Flash nữa, dĩ nhiên những người làm ngành đấy thì không tìm được việc nữa. Nên là làm ngành này, các bạn không thể giữ cái tư tưởng học bao nhiêu đó kiến thức trong trường là đủ rồi. Ra đi làm, làm đúng đủ kiến thức đó tới lúc về già luôn là không được. Với đống kiến thức hiện tại của bạn bây giờ các bạn đủ để xài được 3-4 năm, nhưng sau đó những kiến thức đó có thể đã mai một và các đã tới lúc bạn phải học thêm kiến thức mới rồi.

Những người đã từng học Angular hiện tại đã chuyển qua dùng Angular 2 trở lên. Chưa kể ngôn ngữ lập trình các bạn dùng cũng sẽ đổi mới trong tương lai, chắc chắn ngôn ngữ Framework mà bạn hiện tại bạn đang dùng sau vài năm nó cũng biến đổi, nâng cấp hơn. React thì cập nhật lên thành React Hooks, nó là 1 cách viết khá là mới mà cách bạn phải học lại từ đầu. Do vậy sự học là bất tận, khi đã theo ngành lập trình viên là phải luôn học, không học là sẽ bị đào thải.

Bên cạnh việc lo sợ việc bị đào thải thì tuổi nghề của ngành cũng là một vấn đề nhiều bạn quan tâm. Bất cứ ngành nghề nào cũng vậy cả, chỉ khi bạn có đam mê thì bạn sẽ không bị đào thải. Có nhiều lập trình viên 3-40 tuổi thậm chí lên đến 50 là bình thường, tuổi nghề như thế nào không quan trọng bằng con người của bạn. Tuổi nghề của bạn sẽ ngắn nếu bạn là một người an phận và luôn thấy ‘như vậy là đủ rồi’, bạn không chịu cập nhật công nghệ liên tục, bạn dựa vào kinh nghiệm làm việc 5 năm, 10 năm của bạn để offer mức lương cao đủ để chăm lo cho gia đình, bạn vì bận chuyện gia đình, con cái nên không thể OT (làm ngoài giờ), không còn nhanh nhẹn để nắm bắt xu thế công nghệ mới như giới trẻ hiện nay thì bạn sẽ có tuổi nghề ngắn.

Ngược lại, có những lập trình viên theo nghề vì đam mê, luôn học hỏi cập nhật những thứ mới trong ngành thì sẽ trở thành ‘gừng càng già càng cay’. Thậm chí có những lập trình làm lâu có kinh nghiệm nhiều và đa dạng, họ có thể kiêm vị trí của 1 lập trình viên đa năng từ Systems Admin cho tới OS, Network database… những người như vậy thường có mức lương rất cao và không có chuyện họ bị đào thải.

Khó khăn II: Công việc áp lực và thường xuyên phải làm ngoài giờ

Công việc áp lực

Nghề lập trình viên này đa phần làm theo dự án là chính, khi đang trong dự án nào đó cần sản phẩm gấp chắc chắn 100% các bạn phải làm ngoài giờ. Ở các công ty Startup, khi phải ra mắt sản phẩm thì thường các lập trình viên sẽ phải tăng ca kể cả thứ 7, Chủ nhật hay lễ. Nhiều công ty sẽ chấp nhận trả lương khi bạn làm ngoài giờ, một số thì không và xem đó là 1 phần trong công việc.

Vì phải tăng ca như thế này đôi khi lập trình viên sẽ phải gặp vấn đề về các mối quan hệ vì không có thời gian dành cho gia đình, bạn bè, tình cảm… Lập trình viên không phải là một ngành nhàn hạ, thoải mái, ngành này áp lực nhiều hơn các bạn nghĩ rất nhiều đấy!

Khó khăn III: Gặp rào cản và bị ‘ngáo’ trong các mối quan hệ

Đa phần dân lập trình là những người có lối suy nghĩ logic, lập trình càng giỏi thì lại càng cần sự logic. Trong thế giới lập trình 1 là 1, 2 là 2 và đặc biệt lập trình viên đa số chỉ làm việc với máy tính và hệ thống, trong thế giới đó chỉ có đúng, sai. Tuy nhiên, quan hệ giữa con người với con người thì lại không như vậy, trong thế giới con người có tồn tại thứ gọi là tình cảm nên không thể phân biệt rạch ròi cái gì đúng hay sai.

Giữa dân lập trình với nhau, nếu các bạn nói chuyện liên quan đến kỹ thuật thì khi bạn đúng, team sẽ làm theo nhưng khi các bạn làm việc với team khác ngoài team lập trình thì nên cẩn thận nhé vì không phải cứ đúng logic và có thể giải quyết vấn đề là họ sẽ làm theo đâu mà bạn còn phải có kỹ năng nói chuyện khéo léo nữa kìa. Bởi vì môi trường làm việc xung quanh bạn chỉ toàn là dân lập trình nên đôi khi bạn sẽ bị ảnh hưởng cộng đồng, vừa khó để học hỏi được kỹ năng quan sát sắc mặt người khác, kỹ năng giao tiếp mà còn có thể trở nên ‘cục súc’ giống nhau.

Thực tế, công việc của các lập trình viên không cần phải có kỹ năng giao tiếp cao siêu gì cả nhưng kỹ năng giao tiếp là một kỹ năng rất quan trọng trong xã hội và trong các mối quan hệ con người với nhau. Cách để có thể nâng cao khả năng giao tiếp, tránh tình trạng trở nên ‘cục súc’ khi làm lập trình là các bạn đừng nên chỉ sinh hoạt chung với mỗi phòng ban của mình mà hãy giao lưu với những team khác nữa ví dụ như team marketing, design, sale…để học hỏi thêm.

  Lập trình viên làm gì khi Corona hoành hành: ở nhà học tiếng Anh lập trình theo phong cách "fast and furious"

  7 sự thật mình bỏ lỡ khi còn là lập trình viên junior

Khó khăn IV: Lập trình viên lương cao nhưng khó để làm giàu

Lập trình viên lương cao

Bạn đừng quá hy vọng nghề lập trình sẽ giúp bạn trở nên giàu xụ, mặt bằng chung lương của lập trình viên khá cao so với những ngành khác, lương 4-50tr là bình thường nhưng đó chỉ là lương tháng. Có nhiều lập trình viên theo nghề đã lâu, lương cũng cao nhưng đó không thể gọi là làm giàu được. Lập trình viên cũng chỉ là nhân viên, đi làm rồi nhận lương, nếu có bạn nào nuôi mộng làm giàu thì hãy tìm hiểu thêm về kinh doanh, mở công ty riêng.

Khó khăn V: Công việc buồn chán, dễ bị đau lưng

Các bạn trẻ mới bước vào nghề lập trình viên đôi khi sẽ không thể tránh khỏi những mộng mơ về ngành. Không phải Coder nào cũng có cơ hội để code ra Window, Facebook hoặc làm ra một app to như Grab. Đôi khi công việc của bạn chỉ là viết một chương trình nhỏ để nhận dữ liệu từ DB sau đó xuất thành file Excel với quy mô người dùng tầm 4-5 người…hoặc có thể chỉ là tạo ra BD, sau đó tạo thêm form, suốt ngày chỉ quanh quẩn với việc thêm form và xóa form, sửa trường này trường kia…công việc sẽ khá là nhàn hoặc có thể nói là nhàm chán, nó có thể bào mòn ý chí và mộng mơ của bạn. 

Lời khuyên để có thể đối mặt với khó khăn này chính là bạn hãy tìm ra sự đam mê, thú vị trong công việc và tận hưởng nó. Nếu các bạn đam mê một cái gì đó thì dù nó có tẻ nhạt ra sao thì bạn vẫn sẽ cảm thấy vui vẻ khi làm nó. Ví dụ: nếu công việc của bạn chỉ là viết ra một chương trình nhỏ để nhận dữ liệu từ DB rồi xuất thành file Excel thì bạn sẽ làm công việc của bạn trở nên thú vị hơn bằng cách cải thiện sao cho form đó xử lý thật nhanh, làm sao để sử dụng tiện hơn…

  Những góc khuất "đeo bám" người làm nghề lập trình

Ngoài ra các bạn cũng cần phải làm quen với việc công sức làm việc cực lực của bạn sẽ bị đem ‘đổ sông đổ biển’. Trong ngành này, việc 1 dự án đã tiến hành được 3-6 tháng mà vẫn bị hủy, dự án mà bạn ròng rã viết trong 6 tháng trời bỗng nhiên bị tạm dừng là điều hết sức thường xuyên xảy ra và đó cũng là thực trạng hiện nay trong nghề lập trình viên.

Bên cạnh đó, vì tính chất công việc nên nghề lập trình viên hầu hết ai cũng sẽ ngồi cả ngày nên sẽ dễ bị đau lưng, béo phì, thoái hóa cột sống…

Tóm lại nếu sau khi các bạn đọc bài viết này mà vẫn còn đam mê, có nghĩa là bạn đã sẵn sàng để dấn thân vào nghề lập trình rồi đấy. Bạn sẽ thấy việc học thêm về kiến thức công nghệ không có gì là ghê gớm, bạn sẽ thấy công việc áp lực là niềm vui, bạn sẽ thấy mức lương cao so với mặt bằng chung, bạn sẽ thấy việc nói chuyện với team, nói chuyện với máy tính là niềm vui chứ không phải sự tù túng. Chúc các bạn tìm được công việc phù hợp tại TopDev, vào link …. để có thể tham khảo thêm nhiều vị trí trong nghề lập trình nha!

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

TopDev tổng hợp

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

Những mã xấu mà Java 8 có thể khử

nhung-ma-xau-ma-java-8-co-the-khu

Bài viết được sự cho phép của Nguyễn Bình Sơn

Tới hiện tại, Java 8 đã được sử dụng trên hầu hết các ứng dụng chạy trên JVM, nhưng điều đó không có nghĩa là những gì tối tân của phiên bản này đã được khai thác triệt để. Dưới đây là một số cách viết mã già cỗi nên được cập nhật.

  10 câu hỏi JavaScript để tăng cường kỹ năng của bạn
  Giới thiệu về Reactive Programing trong javascript

1. Inner class vô danh

Bất cứ khi nào bạn gặp một inner class vô danh, bạn nên cân nhắc sử dụng biểu thức lambda. Lấy ví dụ:

list.sort(new Comparator()
  public int compare (String o1, String o2) {
    return o1.length() - o2.length();
  }
});

…chuyển thành như sau ngắn gọn hơn nhiều:

[java]list.sort((o1,o2) -> o1.length() - o2.length());

Dù vậy, mã ở đây vẫn không quá dễ đọc, chúng ta sẽ tiếp tục xem xét về Comparator.

2. Comparators

Comparator trong Java 8 không chỉ tối tân ở sự tương thích với các biểu thức lambda. Nó có những phương thức kết hợp với các tham chiếu phương thức, giúp cho mã trong sáng hơn rất nhiều:

[java]list.sort((o1,o2) -> o1.length() - o2.length());

Một ví dụ khác, bạn thậm chí có thể lấy các kết quả theo thứ tự ngược lại, tất cả chỉ bằng cách sử dụng thêm một phương thức hỗ trợ khác:

[java]list.sort((o1,o2) -> o1.length() - o2.length());

3. Các class không trạng thái

Thường thì bạn sẽ hay gặp các lớp không có gì khác ngoài các phương thức tĩnh (chúng thường được đặt tên được tận cùng là “Util” hay “Helper”), chúng có nhiệm vụ gom nhóm các phương thức lại trong một không gian tên duy nhất. Không ai cần phải tạo đối tượng của các class này, và kể cả khi có làm việc đó thì các đối tượng này cũng không lưu giữ bất cứ dữ liệu riêng nào, do đó các class này được gọi là class không trạng thái (stateless).

Với Java 8, các interface có khả năng chứa các phương thức tĩnh, và trở thành lựa chọn tốt hơn so với class, bởi chúng ta không phải lo có ai đó tạo đối tượng của interface. Ví dụ kinh điển lần nữa lại là Comparator – với các phương thức tĩnh hữu dụng và mạnh mẽ của nó.

Tương tự như thế, nếu bạn gặp một class trừu tượng không trạng thái, chỉ có duy nhất những phương thức trừu tượng được thiết kế để ghi đè, lớp đó có thể được chuyển đổi thành những FunctionalInterface và sau đó được implement bằng biểu thức lambda, như Runnable chẳng hạn:

Trước Java 8:

new Thread(new Runnable() {
    @Override
public void run() { 
      System.out.println("New thread created"); 
    } 
  }).start();

Java 8:

new Thread(() -> {
    System.out.println("New thread created");
}).start();

Một ví dụ khác để thử xem xét cách triển khai, sử dụng annotation @FunctionalInterface cho interface:

@FunctionalInterface
interface Square {
  int calculate(int x);
}

… và implement bằng biểu thức lambda:

int a = 5;
Square s = (x) -> x * x;
int ans = s.calculate(a);
System.out.println(ans);

4. Các chỉ dẫn lặp và rẽ nhánh lồng nhau

Chúng ta có bộ API Streams được thiết kế để truy cập các collection theo cách vô cùng uyển chuyển. Khi gặp mã nguồn như dưới đây:

List<Field> validFields = new ArrayList<Field>();
for (Field field : fields) {
  if (meetsCriteria(field)) {
    validFields.add(field);
  }
}
return validFields;

…bạn phải nghĩ tới việc thay thế bằng mã sử dụng Streams. Ở đây ta dùng filter và collect:

return fields.stream()
  .filter(this::meetsCriteria)
  .collect(Collectors.toList());

Đôi khi, các vòng lặp với một lệnh rẽ nhánh ở trong có thể được tái cấu trúc thành anyMatch hay findFirst:

for (String current : strings) {
  if (current.equals(wanted)) {
    return true;
  }
}
return false;

…có thể được thay thế bởi:

return strings.stream()
  .anyMatch(current -> current.equals(wanted));


Và:

for (String current : strings) {
  if (current.equals(wanted)) {
    return current;
  }
}
return null;

…có thể sửa thành:

return strings.stream()
    .filter(current -> current.equals(wanted))
    .findFirst()
    .orElse(null);

Lưu ý rằng orElse(null) thực tế là một mã xấu, chúng ta sẽ nói đến sau.

5. Đa thao tác trên collection

Mặc dù đã cố gắng tối ưu hóa, nhưng chúng ta vẫn thường xuyên gặp trường hợp một chuỗi các thao tác được thực hiện trên một hay nhiều collection để có được kết quả mong muốn. Xem xét ví dụ dưới đây:

// collect messages for logging
List<LogLine> lines = new ArrayList<>();
for (Message message : messages) {
  lines.add(new LogLine(message));
}
// sort
Collections.sort(lines);
// log them
for (LogLine line : lines) {
  line.log(LOG);
}

Chia để trị đã giúp cho mã được rõ ràng, nhưng chưa nói tới việc phải sử dụng tới comment để làm rõ ý, thì lời gọi Collections.sort vẫn gợi ý rằng chúng ta có thể sử dụng Streams tại đây. Trong thực tế, toàn bộ đoạn mã trên có thể được gộp vào một stream duy nhất:

messages.stream()
    .map(LogLine::new)
    .sorted()
    .forEach(logLine -> logLine.log(LOG));

Tái cấu trúc này không chỉ giúp mã dễ đọc hơn hay ít lại một biến trung gian, mà thực tế còn có hiệu năng cao hơn.

6. Duyệt để xóa bỏ các phần tử

Mã trước-Java-8 có thể có những đoạn mã như sau:

Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()) {
  String current = iterator.next();
  if (current.endsWith("foo bar")) {
    iterator.remove();
  }
}

Giờ đây đoạn mã trên có thể được rút ngắn còn một dòng:

[java]list.sort((o1,o2) -> o1.length() - o2.length());[java]list.sort((o1,o2) -> o1.length() - o2.length());

Ngắn hơn, dễ đọc hơn, và cũng nhanh hơn!

7. Kiểm Null

NullPointerExceptions là điểm chí tử của các nhà phát triển Java, và bạn sẽ không lấy làm lạ khi các phép kiểm null nằm rải rác trong mã. Java 8 cho chúng ta API Optional giúp chúng ta mô tả kết quả trả về tốt hơn nhiều cũng như loại bỏ các kiểm null không cần thiết. Hãy quay lại với orElse mà chúng ta có ở tái cấu trúc số 4:

public static String findString (String wanted){
  List<String> strings = new ArrayList<>();
  return strings.stream()
      .filter(current -> current.equals(wanted))
      .findFirst()
      .orElse(null);
}

Bất kỳ lời gọi findString nào cũng sẽ phải kiểm null cho giá trị nhận được, và nếu an toàn thì làm một thao tác nào đó:

String foundString = findString(wantedString);
if (foundString == null) {
  return "Did not find value" + wantedString;
} else {
  return foundString;
}

Mã này xấu, dễ lặp và tẻ nhạt. Nếu cập nhật phương thức findString thành sử dụng Optional:

public static Optional<String> findString(String wanted) {
  List<String> strings = new ArrayList<>();
  return strings.stream()
      .filter(current -> current.equals(wanted))
      .findFirst();
}

…thì chúng ta có thể thoát khỏi trường hợp không có giá trị một cách thanh nhã hơn nhiều:

[java]list.sort((o1,o2) -> o1.length() - o2.length());

Bài viết gốc được đăng tải tại Tạp Chí Lập Trình

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

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

CTO là gì – Những sự thật cần biết về Chief Technology Officer 

cto-la-gi

CTO là gì? Luôn là một câu hỏi mà rất nhiều người trong giới lập trình hiện đang quan tâm. Michel Krieger (Instagram), Werner Hans Peter Vogels (Amazon) hay David Hasson (founder của Ruby on Rail) đều là những CTO tiêu biểu, những người tiên phong trong việc thay đổi thế giới bằng những ý tưởng công nghệ tiến bộ.

Lê Hồng Việt (FPT), Thái Trí Hùng (MoMo), Nguyễn Sơn Tùng (Việc Có) cũng là những Giám đốc công nghệ có tên tuổi tại Việt Nam, tạo nên sự đột phá công nghệ, đưa sản phẩm trong công ty họ lên một tầm cao mới.

Có thể thấy, với sự phát triển liên tục của ngành công nghệ thông tin trong những năm vừa qua, CTO không còn là vị trí quá mới lạ đối với cộng đồng IT. Thậm chí thuật ngữ này đã xuất hiện hơn chục năm rồi, vậy mà chúng ta vẫn còn bị nhầm lẫn với các chức vụ khác vì chưa thực sự hiểu rõ trách nhiệm của một CTO.

CTO không chỉ là “IT Director”

Chief Technology Officer – CTO là gì? 

Đôi khi, chúng ta hiểu nhầm rằng CTO chính là chức danh của anh chàng “lập trình viên sáng giá nhất phòng”. Tuy nhiên, sự thật thì bên cạnh giỏi về coding, CTO cũng phải nâng cao kỹ năng quản trị cũng như tầm hiểu biết sâu sắc về doanh nghiệp để tạo nên sợi dây liên kết bền vững với hội đồng quản trị.

5 Qualities of a Great CTO - ITChronicles

Bằng cách sử dụng công nghệ để giảm việc chi tiêu liên tục, tối ưu hóa quy trình, phân tích xu hướng thị trường và dự báo lợi nhuận, CTO đóng vai trò thiết yếu, giúp công ty giữ được lợi thế cạnh tranh và duy trì, phát triển công nghệ, kỹ thuật, hỗ trợ gia tăng doanh số. 

Đối với các startup, bạn cũng sẽ khó tìm thấy dòng mô tả công việc chính xác cho một CTO. Điều duy nhất bạn có thể chắc chắn là nhiệm vụ chính của CTO là cho phép công ty đạt được các chỉ tiêu doanh thu và marketing một cách tối ưu nhất thông qua việc sử dụng công nghệ tiên tiến.

Chia sẻ kinh nghiệm xương máu của một CTO nổi tiếng tại Việt Nam

Thời kỳ công nghiệp 4.0 tạo nên xu hướng kinh doanh đi kèm công nghệ thông tin, thúc đẩy mạnh mẽ nhu cầu tìm kiếm một CTO có năng lực cao. Trong năm 2020, mức lương cho vị trí này trên toàn cầu là khoảng 159,920 $ / năm, riêng các công ty blue chip như IBM và Boston Dynamics đề nghị mức lương trung bình hàng năm lên đến 200,000$.

Phân biệt CTO và CIO 

Vai trò giữa giám đốc thông tin (CIO) và giám đốc công nghệ (CTO) thường bị nhầm lẫn.Trước kia, CIO sẽ là người đảm nhận công việc của CTO nhưng vì công nghệ phát triển với tốc độ chóng mặt, số lượng công việc ngày càng tăng cao, nên vai trò của CTO và CIO được tách biệt để đảm bảo hiệu quả cho các hoạt động của công ty và CTO sẽ chỉ có một mối bận tâm duy nhất là phụ trách các vấn đề về mảng kỹ thuật cũng như công nghệ.

cto la gi

Đặc điểm giúp chúng ta dễ dàng phân biệt được nhất là CIO thường làm việc với nội bộ, tức cải thiện các quy trình trong công ty và là người quản lý cơ sở hạ tầng công nghệ hàng đầu.Trong khi đó, một CTO sẽ điều hành nhóm kỹ sư, đảm bảo chiến lược công nghệ của công ty phù hợp với các mục tiêu và yêu cầu đặt ra. Đặc biệt, vị giám đốc này còn là gương mặt đại diện của công ty tại các hội nghị, sự kiện thương mại để củng cố hình ảnh thương hiệu, truyền tải những cải tiến đột phá của sản phẩm/ dịch vụ đến công chúng. CTO thường báo cáo cho CIO, trong khi CIO báo cáo cho Giám đốc điều hành (CEO).

Một ngày làm việc của CTO

Có một thực tế là trách nhiệm của CTO trong công ty còn tùy thuộc vào nhiều yếu tố như phạm vi hoạt động, lĩnh vực hoạt động, chính sách phát triển kinh doanh, số lượng của nhân viên tại nơi làm việc hay nhân lực outsource, và nhiều yếu tố khác nữa. CTO có thể đảm nhiệm nhiều trách nhiệm khác nhau, không giống như các giám đốc điều hành cấp lãnh đạo khác như CEO hay CFO.

Ngoài ra CTO cũng có một số khó khăn nhất định mà không phải ai cũng hiểu 

Lựa chọn platform và thiết kế kỹ thuật

CTO luôn tham dự một cách trực tiếp hoặc gián tiếp vào toàn bộ các dự án liên quan đến kỹ thuật của công ty. CTO sẽ phụ trách cho việc lên kế hoạch, chiến lược, và chịu trách nhiệm triển khai ý tưởng trở thành hiện thực, đảm bảo duy trì tiến độ và năng suất cho dự án. Trong các công ty startup nhỏ, founder thường sẽ kiêm luôn công việc của CTO và tại các tập đoàn lớn, CTO sẽ điều hành một số team lập trình viên bao gồm những nhóm phục vụ nhu cầu công nghệ cho công ty.

Đôi khi, CTO có thể được gọi là một PM – Product Manager với mục tiêu chính là quản lý team kỹ thuật và đưa ra các quyết định quan trọng trong thực thi dự án như lập kế hoạch thiết kế công nghệ, bố trí kiến trúc sản phẩm và lựa chọn nền tảng phát triển.

Trong trường hợp team tech không có đủ kiến thức hoặc tài nguyên để hoàn thành task, thì CTO sẽ phải là người tìm ra giải pháp. Chính vì thế, họ phải là người có được nhiều kỹ năng đa dạng về công nghệ cũng như các kỹ năng mềm để xây dựng team mạnh.

Năm 2020, cũng giống như những người làm nhiệm vụ kỹ thuật, giám sát công nghệ và quản lý dự án, CTO với vai trò dịch vụ cũng được tăng mạnh khi các công ty chọn phương án outsource để tiết kiệm chi phí ngân sách cho các dự án.

Tham khảo thêm: Tuyển dụng việc làm CTO lương cao trong Developer.

Các vấn đề về MVP và DevOps

MVP với tên đầy đủ là Minimum Viable Product hay sản phẩm khả thi tối thiểu, là một sản phẩm có tính tăng thiết yếu được tạo ra để kiểm tra các giả thuyết marketing và phân tích phản hồi thực tế của người dùng. Có sự khác biệt khá lớn giữa vai trò và trách nhiệm của một CTO trong doanh nghiệp nhỏ và tập đoàn lớn về việc phát triển MVP.

Trong khi CTO của một doanh nghiệp đa quốc gia sẽ thuộc các cấp quản lý khác xa với việc chăm sóc kỹ thuật hàng ngày, CTO trong một công ty nhỏ cần phải lo liệu các tác vụ về tech thường sẽ lo luôn về phần iteration của sản phẩm đầu tiên. Backup quy trình công nghệ cũng rơi vào phần công việc của CTO, ngay cả khi họ có ngân sách lớn và có thể thuê thêm executive để thực thi các tác vụ liên quan đến phần MVP. 

Có thể thấy, trách nhiệm của một CTO có chút mơ hồ. Nhiệm vụ của kỹ sư DevOps cũng nằm trong danh sách công việc của họ. Đôi khi, họ còn phải xây dựng luôn phần tech của sản phẩm ngay từ lúc bắt đầu bao gồm các tính năng, tương tác máy chủ, script, map giai đoạn triển khai và SSH.

Tuyển dụng và quản lý sự tăng trưởng team

CTO có nhiệm vụ phỏng vấn và quyết định tuyển thêm người mới cũng như là quản lý team để tạo ra năng suất tối đa. Trong năm 2020, nhiệm vụ ngày càng trở nên khó khăn hơn cho các startup, cũng như thị trường nghề nghiệp dần được thắt chặt, các công ty kỹ thuật số tiếp tục tăng trưởng và yêu cầu nhiều nhân viên hơn. Các chuyên gia IT có xu hướng sẽ muốn chuyên về lĩnh vực mà họ cảm thấy thích hợp, trong khi các startup thường cần các người đa năng hơn trong mọi vấn đề mà công ty cần giải quyết.

  Lời khuyên từ Việt Trần - CTO DOF Hunt “Cách quản trị tốt nhất chính là không quản trị”

Một vai trò khác của CTO là lựa chọn lập trình viên – các team mate phù hợp.  Họ sẽ tiến hành giám sát quá trình onboarding để chọn lựa các ứng viên thích hợp. Chính vì thế, tìm hiểu thêm về các chiến lược tuyển dụng cũng được các CTO ngày nay quan tâm.

Trong những công ty lớn hơn, mô tả công việc CTO có thể bao gồm cả việc tổ chức các hoạt động đào tạo cho bộ phận công nghệ, hỗ trợ việc tự học và giám sát đội ngũ. Đó là lý do tại sao kinh nghiệm về quản lý sự kiện hay kỹ năng tư vấn, và có mối quan hệ rộng là một lợi thế khác biệt lớn trên CV của một CTO.

An ninh mạng

CTO sẽ làm gì bên cạnh việc quản lý bộ phận kỹ thuật? An ninh mạng là một vấn đề nữa mà họ phải chịu trách nhiệm. Các lỗ hổng bảo mật có thể xảy ra trong cơ sở dữ liệu của công ty, trong các trang web, hay bất kỳ tôl kỹ thuật số nào mà các team sử dụng. Các sản phẩm đang được phát triển bởi công ty cũng có thể yêu cầu các thuật toán bảo mật để giữ dữ liệu người dùng được riêng tư và mã hóa.

CTO sẽ là người phụ trách phát triển phương thức bảo mật, phát triển thuật toán, thực hiện kiểm toán cẩn cấp và nhiều hơn nữa. Các coder phải làm việc theo chỉ thị của CTO đặt ra.

  Big data là gì? Trò chuyện cùng CTO của Datamart Solutions để hiểu hơn về data

QA và thử nghiệm sản phẩm

Có chút khác biệt giữa mô tả công việc và nghĩa vụ của một CTO tại công ty startup. Các startup hiếm khi có một bộ phận đảm bảo chất lượng riêng biệt, có nghĩa là việc kiểm tra sản phẩm nên được phân chia giữa các lập trình viên và các thành viên khác của team. Trách nhiệm của CTO là quyết định ai sẽ là người chịu trách nhiệm cho quá trình debug. Và khi một bug kỹ thuật được tìm thấy, thường thì nó sẽ được chuyển tiếp tới CTO, người sau đó cần quyết định cách để giải quyết vấn đề đó. Công việc mà CTO có liên quan tới cũng có thể bao gồm các hướng dẫn được ghi chép cho việc fix bug cụ thể.

cto la gi

Trong các công ty tầm trung, CTO phải phát triển một hệ thống thử nghiệm các bản cập nhật và công cụ sắp tới để quan sát tiến trình. Hãy nhớ rằng CTO là một người vừa phải lo phần công nghệ vừa phải đảm nhiệm các lĩnh vực kinh doanh khác, nên hầu hết các câu hỏi liên quan tới việc quản lý QA và ngân sách kỹ thuật thường sẽ được gửi trực tiếp cho họ.

Lộ trình tăng trưởng và sự đổi mới sáng tạo

Vậy một CTO sẽ làm gì? Nói đơn giản, CTO nghĩ về tương lai, vạch ra nó, và rồi thực hiện kế hoạch theo từng bước. Trong giai đoạn khám phá dự án, CTO sẽ dựng lộ trình tăng trưởng, cân nhắc để các mục tiêu và chiến lược đó có thể hoạt động hiệu quả cùng nhau. CTO còn làm thủ công với nhiều khía cạnh khác nhau của một sản phẩm kỹ thuật số như lập trình, UX, bảo mật, ngân sách, quy trình vận hành và điều phối nhóm.

Bên cạnh việc triển khai MVP, CTO còn chịu trách nhiệm lên kế hoạch cho phiên bản sản phẩm tiếp theo và cập nhật công nghệ. Thông thường, họ sẽ hoàn tất các vai trò ngân sách liên quan với việc tái xây dựng MVP, nghiên cứu các phản hồi từ người dùng, hợp tác với các nhà khoa học dữ liệu và lấp vào các khoảng trống về phần tài nguyên. một chuyên gia với level này cần hiểu rõ với việc xử lý dữ liệu và bảo mật lưu trữ dữ liệu.

Trách nhiệm của CTO sẽ thay đổi ra sao với sự tăng trưởng của công ty?

Như các bạn đã thấy, CTO cần phải linh hoạt. Công ty càng lớn thì khả năng quản lý càng đòi hỏi cao hơn, vừa là người đứng đầu về kỹ thuật và đôi khi tự mình thực thi các tác vụ kỹ thuật.

Nhưng trách nhiệm chính của CTO vẫn là chăm lo cho mục tiêu thương mại của công ty bằng một đội kỹ thuật. Nói cách khác, một người ở vị trí này phải biết dự đoán tương lai và lên kế hoạch . CTO sẽ lên kế hoạch phát triển sản phẩm, tính toán ngân sách, quản lý team, triển khai sản phẩm, và đặt ra các quy trình làm việc khi xem xét việc update sản phẩm.

Nếu một CTO tại startup nhỏ làm tốt công việc của mình, công ty có thể phát triển nhanh chóng và vai trò của CTO sẽ thay đổi rõ rệt.

“Trình” thế nào thì có thể thành CTO?

Có một sự thật là công ty có quy mô càng lớn thì càng đòi hỏi CTO phải có nhiều kỹ năng mềm và kinh nghiệm quản lý dày dặn. Và sau đây là một số kỹ năng cần thiết dành cho một CTO:

Kỹ năng giao tiếp tốt

CTO phải lãnh đạo team code, phỏng vấn và quyết định ứng tuyển thêm newbie, cũng như khích lệ đồng đội cập nhật công nghệ mới và làm việc bằng các phương pháp mới. Đồng thời, CTO sẽ giao tiếp với các bộ phận khác như HR, các giám đốc cấp cao khác và đôi khi là cả khách hàng nữa.

Sáng tạo và nhanh nhạy trong giải quyết vấn đề

Khi công việc phát sinh vấn đề, CTO sẽ là người thông báo và đứng ra giải quyết. Nói cách khác, người đứng đầu kỹ thuật được kỳ vọng để phát triển và đưa ra các giải pháp như fix bug, thực thi tác vụ, hỗ trợ kỹ thuật. Mặt khác, họ cũng phải là những chuyên gia xử lý các vấn đề kỹ thuật mà không cần phải có sự hỗ trợ từ bên ngoài.

Khả năng lãnh đạo và cố vấn

Một CTO giỏi là người có thể ‘bán’ các ý tưởng chiến lược phát triển hoàn toàn mới, được vận hành bởi các công nghệ hiện đại và họ biết cách biến chúng trở thành hiện thực. Để tạo nên thành tựu thực tiễn, họ cần có khả năng truyền cảm hứng và thuyết phục mọi người về tính khả thi và những lợi thế. Người đứng đầu kỹ thuật cũng sẽ biết cách thúc đẩy sự phát triển của đồng đội – các tài năng có sẵn, săn được hay outsource.

Tự trau dồi kiến thức không ngừng

CTO ở các công ty vừa và nhỏ thường là những chuyên gia có kỹ năng về kỹ thuật tốt nhất trong team. Quy tắc này có thể thay đổi đối với các công ty hay tập đoàn lớn, nơi các CTO có nhiều nhiệm vụ liên quan tới việc quản lý hơn và ít nghĩa vụ tác nghiệp liên quan tới kỹ thuật hơn.

Tuy nhiên, có một điểm chung dù một CTO có làm ở bất kỳ đâu thì họ vẫn luôn là người có tầm nhìn kỹ thuật tốt nhất trong một công ty. Để duy trì trong ngành công nghiệp, họ cần phải khám phá các công nghệ, thậm chí là tạo ra những đột phá mới mẻ và cảm thấy thoải mái trong một môi trường chuyên nghiệp cấp cao.

Kỹ năng cập nhật xu hướng công nghệ

Tất nhiên, CTO cần phải cập nhật kiến thức chuyên môn liên tục nhằm đuổi kịp xu hướng công nghệ hiện đại. Xây dựng kiến trúc sản phẩm kỹ thuật số, MVP và lập trình API và test, quản trị hệ thống công nghệ cao của công ty, các kỹ năng DevOps – tất cả kỹ năng này bạn có thể tìm thấy khi đọc bảng mô tả công việc CTO trong nhiều công ty khác nhau. Bộ kỹ năng này sẽ được yêu cầu tùy vào quy mô và đặc thù công nghệ của mỗi công ty.

Có tầm nhìn và tư duy chiến lược

CTO phải dẫn đầu và lên kế hoạch cho phần tech full-stack. Họ phải tiếp cận để phát triển, có quy trình làm việc khoa học, và lập kế hoạch hay kiểm tra ngân sách dự án cùng với những người quản lý dự án cấp cao khác. Ngoài ra, một yếu tố quan trọng mà CTO cần có là quan sát được toàn bộ bức tranh ở nhiều cấp độ khác nhau: dự án, bộ phận, công ty để có thể xác định chiến lược công nghệ của công ty và đường lối phát triển. 

cto là gì

Kết luận

Như bạn đã thấy, trách nhiệm của CTO khó mà xác định được chỉ trong vài dòng chữ. Khá mà khó xác định chính xác rằng vị trí của người đứng đầu về công nghệ sẽ nằm ở đâu giữa thực hiện kỹ thuật và quản lý quá trình hoạt động.

“ Một CTO được kỳ vọng là người có các kỹ năng mềm và kỹ năng cứng vượt trội, cùng khả năng nắm bắt khoa học công nghệ thông tin xuất sắc.”

Bạn đã sẵn sàng để trở thành một CTO? – Một người tiên phong công nghệ trong tất cả các khía cạnh của doanh nghiệp, cân bằng nhu cầu của nhân viên, người dùng (hay khách hàng) và các bên liên quan có chung lợi ích. Tùy vào đặc thù của từng công ty, nhiệm vụ của CTO sẽ thay đổi. Xây dựng chiến lược tech, vấn đề an ninh, cố vấn cho các thành viên trong team, kiểm tra chất lượng, khám phá các xu hướng công nghệ mới và triển khai, nghiên cứu phản hồi, launching MVP, và tìm ra các giải pháp hiệu quả cho các khó khăn về phần kỹ thuật, v…v… chỉ là một số ví dụ phổ biến.

Nếu bạn có kế hoạch để ứng tuyển vị trí CTO cho bất kỳ công ty nào, hãy chuẩn bị một CV tập trung chính vào chuyên môn kỹ thuật và kỹ năng quản lý quy trình vận hành thật tốt.

Nếu công ty của bạn đang săn lùng một CTO tiềm năng, hãy đánh giá nhu cầu công nghệ hiện tại và tương lai của doanh nghiệp bạn.

TopDev tổng hợp.

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

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

Những áp lực lớn mà lập trình viên phải trải qua

ap-luc-cua-lap-trinh-vien

Bất kỳ ngành nghề nào, đặc biệt là nghề lập trình viên luôn có áp lực riêng mà ít ai hiểu được. Nếu bạn có nhiều trăn trở. Bài viết này sẽ chia sẻ chi tiết về những áp lực mà lập trình viên sẽ gặp phải khi theo ngành.

Áp lực từ sếp

Sếp là người đánh giá kết quả công việc và đồng thời cũng là người giao việc cho mình, do vậy áp lực từ sếp là rất lớn. Nếu may mắn gặp được những người sếp tốt, biết được trình độ mình đến đâu, thích làm việc gì, mình có điểm mạnh điểm yếu nào thì công việc của bạn sẽ rất nhẹ nhàng. Tuy nhiên, nếu các bạn gặp phải những người sếp khắt khe thì công việc sẽ rất mệt mỏi, có khi họ sẽ giao cho bạn công việc bạn không biết làm gì cả và bắt bạn tự học hoặc giao cho bạn một công việc bạn cực kì ghét.

Trong những trường hợp như vậy, các bạn không thể nào lơ sếp hoặc không nghe sếp được vì họ là sếp của mình, họ là người sẽ trả lương cho mình và đánh giá chất lượng công việc của mình. Vì vậy, trong trường hợp các bạn bị áp lực từ sếp thì nghỉ việc là cách đơn giản nhất, hoặc là trao đổi trực tiếp với họ hoặc trao đổi với những người sếp ở vị trí cao hơn để tìm ra cách giải quyết áp lực của mình.

Áp lực từ đồng nghiệp

Trong nghề lập trình, có 2 dạng áp lực từ đồng nghiệp:

lập trình viên

Dạng 1: Đồng nghiệp quá giỏi

Dạng này thường thấy ở các bạn nhân viên mới đi làm, trong quá trình làm các bạn nhận thấy đồng nghiệp trong công ty làm việc ‘quá nhanh, quá nguy hiểm’, họ rất giỏi và làm việc năng suất cao, họ biết nhiều thứ trong khi bạn không biết gì. Chính những lý do đó vô hình chung tạo thành áp lực cho bạn trong lúc làm việc.

Thực ra bạn không cần lo lắng quá nhiều vì dạng áp lực này, có thể không phải họ giỏi hơn bạn, chẳng qua họ đã có kinh nghiệm làm việc lâu hơn, họ nắm vững được công nghệ của dự án họ đang theo, nắm rõ những vấn đề trong dự án như thế nào. Có thể nói, họ giỏi là vì họ làm nhiều quen tay, lời khuyên tốt nhất ở đây chính là đừng bao giờ đem bản thân mình ra so sánh với người khác. Nếu bạn muốn trở nên giỏi như họ, bạn chỉ cần làm lâu như họ, nhận nhiều dự án làm giống họ, giao tiếp với họ…thì áp lực sẽ giảm đi nhiều lắm đấy!

Dạng 2: Xảy ra xung đột với đồng nghiệp

Mâu thuẫn trong chỗ làm là điều không thể tránh khỏi khi đi làm, đặc biệt, đối với những lập trình viên thì sự mâu thuẫn này càng gây gắt hơn. Nguyên nhân là do hầu hết những người theo ngành lập trình đều là con trai, do vậy khi các phương án giải quyết được đưa ra, họ luôn nghĩ mình là người đúng, ở họ có sự tự tin ngất trời và cái tôi cao. Do vậy khi làm việc chung với nhau rất dễ xảy ra mâu thuẫn dẫn đến cãi nhau, nghiêm trọng hơn có thể dẫn đến xung đột tay chân…

Lập trình viên mà cãi nhau thì không ai nhường ai cả, ai cũng nhận là mình đúng, do vậy chuyện xảy ra xung đột là không thể tránh khỏi. Đôi khi nguyên nhân dẫn đến xung đột chỉ là một vấn đề nhỏ nhưng cứ để trong lòng tích tụ theo từng ngày thì sự bất mãn sẽ trở nên to lớn dẫn đến việc mâu thuẫn không đáng có và cạch mặt nhau. Trong trường hợp các bạn làm chung với những đồng nghiệp ‘hổ báo’, giỏi mà không khiêm tốn hoặc là dở mà không biết khiêm tốn thì chắc hẳn các bạn sẽ gặp áp lực rất nhiều khi làm việc với những người như thế.

Developer là gì? Những kỹ năng cần có của một Developer
Lập trình viên

 

Lời khuyên trong trường hợp này là nghỉ việc hoặc đổi team, nhưng trong trường hợp bạn không muốn dễ dàng bỏ cuộc và xin nghỉ như vậy được thì cách tốt nhất vẫn là nhờ sếp vào cuộc hoặc là có 1 buổi nói chuyện ‘thân mật’ với nhau trên bàn nhậu. Emily và Bigdaddy có Hit ‘mượn rượu tỏ tình’ thì bạn cũng tranh thủ mượn rượu giãn hòa với đồng nghiệp đi nhé! Chỉ cần anh em rủ nhau đi nhậu, có gì ức chế thì mượn bia rượu nói hết ra là giải quyết xong ngay. Thực ra dân Dev có ưu điểm là không thù dai, nếu đã có người mở lời thì mâu thuẫn sẽ biến mất ngay thôi.

  "Mẹo bỏ túi" cho dân coder mới vào nghề
  Nghe Coder tâm sự chuyện tình buồn
  5 ví dụ chứng minh dân coder là những anh chàng vui tính nhất thế giới

Áp lực để theo kịp công nghệ

Loại áp lực thứ 3 mà nhiều bạn sẽ gặp phải đó là áp lực để theo kịp công nghệ, theo kịp ngành. Đối với ngành lập trình này thì kiến thức và công nghệ thay đổi liên tục, do vậy những ai không cập nhật công nghệ mới rất dễ bị đào thải khỏi ngành. Trước đây, Library rất hot nhưng giờ đây cũng ngày càng ít người dùng, họ chuyển qua các thư viện, các Framework khác hiện đại, tiện dụng hơn.

Chắc hẳn những việc này sẽ tạo thành áp lực cho các lập trình viên vì nếu không tự nâng cấp bản thân, cập nhật thông tin công nghệ thì kiến thức sẽ bị mai một. Cơ hội thăng tiến, cơ hội apply vào một công ty khác cũng theo đó mà biến mất là đều chắc chắn.Lời khuyên ở đây chỉ có 1, đó là tự thân vận động, nỗ lực tìm tòi học hỏi thêm nhiều kiến thức khi có nền công nghệ mới nào ra đời bằng cách lên các trang web công nghệ để đọc thêm thông tin sau đó thực hành, áp dụng thử 1 vài công nghệ mới trong một dự án nho nhỏ tự phát 1 mình hoặc cùng hội bạn lập trình.

lập trình viên

Bạn cũng có thể tự trang bị cho mình thêm những thứ nền tảng cơ bản khác…Chỉ có như vậy bạn mới không còn cảm thấy việc theo kịp công nghệ là gánh nặng, áp lực mà nó sẽ trở thành 1 thú vui và chỉ khi các bạn đã học vững kiến thức, vững nền tảng thì các bạn không còn sợ công nghệ mới nữa.

  CEO TopDev ra mắt công nghệ AI/Computer Vision trợ giúp kết nối doanh nghiệp với người mất việc vì Covid
  GraphQL - Công nghệ mới cho web developer

Áp lực từ dự án và công việc của lập trình viên

Áp lực cuối cùng đó là áp lực từ dự án và công việc mà mình gặp, đây là áp lực 100% lập trình viên nào cũng sẽ gặp phải. Khi các bạn tham gia vào một dự án mới, đôi khi các bạn sẽ gặp những vấn đề kiểu như ‘công nghệ này xa lạ quá mình không biết gì cả’, ‘dự án này phức tạp quá mình không làm được gì cả’ và đôi khi áp lực sẽ đến từ vấn đề deadline.

Những việc này tạo thành áp lực rất lớn vì khi deadline thì sếp sẽ là người hối thúc, bắt các bạn tăng ca làm việc đến 9-10h, thức đêm thức hôm và loại áp lực này sẽ không bao giờ giải quyết được trừ khi bạn hoàn thành được dự án. Do vậy, đối với trường hợp gặp áp lực như thế này thì chỉ còn cách ‘sống chung với lũ” thôi.

Tóm lại trong nghề lập trình viên này, áp lực loại nào rồi bạn cũng sẽ gặp, nhưng bạn cứ yên tâm rằng mọi chuyện rồi sẽ ổn thôi. Sau một thời gian dài làm việc bạn cũng sẽ có thêm kinh nghiệm và sẽ trở nên quen thuộc với các loại áp lực này, lúc đó bạn sẽ không còn sợ hãi nữa. Điều quan trọng nhất là bạn phải giữ gìn sức khỏe, đừng cảm thấy áp lực, bị stress rồi bỏ bê sức khỏe của mình nhé!

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

TopDev tổng hợp

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

5 kinh nghiệm khi viết arrow function

5-kinh-nghiem-khi-viet-arrow-function
Bài viết được sự cho phép của tác giả Lưu Bình An
Sử dụng arrow function đã quá phổ biến, ai cũng biết nó là gì, không cần một bài giới thiệu vài dòng nữa, bài viết này chia sẻ 5 kinh nghiệm để bạn làm việc với arrow function thêm mượt mà
  5 điểm khác nhau giữa function thường và arrow function
  Design Patterns là gì? Design patterns với Javascript thì có gì khác?

Gán tên cho arrow function

arrow function trong javascript là một anonymous (hàm không có tên), nếu gọi vào name của nó chúng ta sẽ nhận được một chuỗi rỗng

(number => number + 1).name; // => ''

Trong lúc debug hoặc phân tích call stack, hàm dạng anonymous rất khó chịu vì không biết đang chạy cái gì

Bên cột call stack có 2 function anonymous, không có bất kỳ thông tin nào được trích xuất ra cho chúng ta ở đây.

Nhưng nếu chúng ta khai báo một biến nắm giữ arrow function, Javascript lúc này lại ngầm hiểu nó là tên cho function đó (các đặc tính khác của arrow function không đổi)

const increaseNumber = number => number + 1;

increaseNumber.name; // => 'increaseNumber'

Lúc debug, nó đã hiện nguyên hình

Inline khi nào có thể

Thay vì phải viết một cách dài dòng

const array = [1, 2, 3];

array.map(number => {
  return number * 2;
});

Chúng ta có thể bỏ hẳn {} và return, ở dạng một expression

const array = [1, 2, 3];

array.map(number => number * 2);

Sử dụng với phép so sánh

Các phép so sánh <=>= nhiều khi dễ gây nhầm lẫn khi đứng chung với =>

const negativeToZero = number => (number <= 0 ? 0 : number);

Để không đánh đố người đọc, bọc nó lại trong dấu ngoặc đơn ()

const negativeToZero = number => (number <= 0 ? 0 : number);

//hoặc một cách tường minh
const negativeToZero = number => {
  return number <= 0 ? 0 : number;
};

Sử dụng với object literal

Nếu viết object literal như bên dưới chắc chắn bạn bị báo lỗi

const array = [1, 2, 3];

// throws SyntaxError!
array.map(number => { 'number': number });

Đừng quên thêm ngoặc đơn cho nó

const array = [1, 2, 3];

// Works!
array.map(number => ({ 'number': number }));

// có nhiều property
array.map(number => ({
  'number': number
  'propA': 'value A',
  'propB': 'value B'
}));

Hạn chế lồng nhiều arrow function

Thí dụ có một button, sau khi click chúng ta request lên server, sau khi nhận được giá trị, log xuống trình duyệt

myButton.addEventListener('click', () => {
  fetch('/items.json')
    .then(response => response.json());
    .then(json => {
      json.forEach(item => {
        console.log(item.name);
      });
    });
});

Viết vậy, thiên hạ chê khó đọc. Cân nhắc cách viết sau

const readItemsJson = json => {
  json.forEach(item => console.log(item.name));
};

const handleButtonClick = () => {
  fetch('/items.json')
    .then(response => response.json());
    .then(readItemsJson);
};

myButton.addEventListener('click', handleButtonClick);

Muốn ngon hơn là dùng async/await

const handleButtonClick = async () => {
  const response = await fetch("/items.json");
  const json = await response.json();
  json.forEach(item => console.log(item.name));
};

myButton.addEventListener("click", handleButtonClick);

Giới thiệu về Reactive Programing trong javascript

gioi-thieu-ve-reactive-programing-trong-javascript
Bài viết được sự cho phép của tác giả Lưu Bình An
Reactive programing là khái niệm khá trừu tượng và khó tiếp cận với người mới bắt đầu, chuẩn bị tinh thần đọc bài này vài lần trong vài ngày thì mới mong thẩm thấu hết.

Reactive programing là gì?

Reactive programming is programming with asynchronous data streams

Tạm dịch: Reactive programming là lập trình xử lý với dữ liệu không tuần tự (async) như stream

Có khái niệm mới stream

Muốn hiểu được reactive programing, bạn cần biết khái niệm stream

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

Stream là gì?

Có thể hình dung stream như là một array đặc biệt, chứa một tập các phần tử đặc biệt, các phần tử này có thể emit: 1. value, 2. error, 3. complete, các phần tử trong stream cũng không có hết ngay từ đầu, mà sẽ xuất hiện ở một thời điểm ko xác định trong tương lai.

Giới thiệu về Reactive Programing trong javascript

Về sau, mình dùng kiểu viết này để mô tả stream

--a---b-c---d---X---|->

a, b, c, d là các value được emit
X error
| completed signal
---> dòng thời gian

Tuân theo Observer Design Pattern, việc lắng nghe stream gọi là subscribe, những gì được emit, chúng ta viết các function để xử lý cho 3 trường hợp, các function này gọi là observer

Ví dụ, trên giao diện, chuỗi các event click trên một trang có thể được xem là một stream

Giới thiệu về Reactive Programing trong javascript

Trên stream click ban đầu, chúng ta thực hiện một số thao tác, nếu click trong khoảng 250ms gộp lại thành 1, filter để chỉ lấy các data lớn hơn 2. Những hàm để xử lý các data stream như vậy gọi là operator

Có rất nhiều thứ có thể xem là async data stream. Ví dụ: một cái form đăng ký với các input username, password, email, nút submit, nguyên quá trình user nhập giá trị các field này đến lúc submit, là một async data stream. Một giao diện counter, có duy nhất một button ấn để tăng counter, thì suốt quá trình ấn counter được xem là async data stream.

Để làm việc với Reactive Programing, 100% bạn cần dùng đến thư viện (siêu nhân có thể tự viết), tùy theo ngôn ngữ (ko chỉ có javascript mới có nhé), nó sẽ có một số hàm để bạn chuyển đổi một data bình thường thành một data stream (data stream là phải có thể emit 3 cái đã nói), một số hàm để bạn mergeflattenfilter các data stream này lại.

  JavaScript Arrays và Objects thật ra không khác gì sách và báo

Tại sao chúng ta cần Stream + Reactive Programing

Có thể thấy ngay Reactive programing khá trừu tượng, nhưng do thay vì implement những ràng buộc một cách chi tiết, những ràng buộc này được gắn vào từng data gửi đi trên stream, code nó sẽ gọn gàng hơn.

Kiểu viết này sẽ mang phong cách declarative hơn là imperative, chúng ta không khai báo từng bước tuần tự cần làm gì, chúng ta chỉ khai báo mối quan hệ giữa các stream với nhau.

Giới thiệu về Reactive Programing trong javascript

10 năm trước, mọi việc chỉ đơn giản là submit toàn bộ giá trị các field lên backend xử lý, rồi đơn thuần hiển thị kết quả trả về, bây giờ user thích real-time feedback, bấm “like” một phát là đầu bên kia thấy được liền.

Những event real-time như thế, user khoái, chúng ta cần có một công cụ lập trình để làm việc đó, Reactive Program ra đời cũng từ yêu cầu của user.

  JavaScript Executor trong Selenium Webdriver

Implement hộp thoại “Who to follow” của twitter

Mình sẽ sử dụng RxJS trong ví dụ, vì mình chỉ biết javascript thôi các bạn.

Giới thiệu về Reactive Programing trong javascript

Tính năng chính của hộp thoại này

  • Vừa mở lên, load data từ API, hiển thị 3 tài khoản
  • Click “Refresh”, hiển thị 3 tài khoản khác
  • Khi click “x”, xóa tài khoản đó khỏi danh sách, hiển thị một tài khoản khác.

Chúng ta tiếp cận với vấn đề này như thế nào, gần như mọi thứ có thể xem là stream.

Load dữ liệu lúc đầu

Bắt đầu với tính năng đơn giản nhất “Mới vào, load 3 account từ API”. (1) gửi 1 request (2) nhận response (3) render kết quả

Lúc bắt đầu chúng ta chỉ có 1 request, mọi thứ rất đơn giản, yên tâm là nó sẽ phức tạp dần lên khi có nhiều request. Mô phỏng nó như data stream, stream này chỉ có 1 emit value.

——a——-|—>

Khi có một event request xảy ra, nó báo 2 việc: khi nào và cái gì. Khi nào event này được emit và cái gì chính là value được emit (url string)

Trong Rx, bà con gọi stream là Observable, mình thích gọi là stream hơn

var requestStream = Rx.Observable.just('https://api.github.com/users');

Khi emit value, chúng ta subscribe để thực thi một hành động tiếp theo

requestStream.subscribe( requestUrl => {
// execute the request
  jQuery.getJSON(requestUrl, function(responseData) {
    // ...
  });
}

Cái response của request cũng là một dạng stream, dữ liệu sẽ đến tại một thời điểm không xác định trong tương lai

requestStream.subscribe(function(requestUrl) {
  // execute the request
  var responseStream = Rx.Observable.create(function (observer) {
    jQuery.getJSON(requestUrl)
    .done(function(response) { observer.onNext(response); })
    .fail(function(jqXHR, status, error) { observer.onError(error); })
    .always(function() { observer.onCompleted(); });
  });
  
  responseStream.subscribe(function(response) {
    // do something with the response
  });
}

Rx.Observable.create() sẽ tạo ra những stream mới, qua việc thông báo cho các observer đang subscriber các sự kiện onNext()onError().

Nó giống cách chạy của Promise lắm đúng không? Vâng Observable là một dạng Promise++, phiên bản mở rộng.

Chúng ta có 1 subscribe bên trong 1 subscribe khác, nó giống như callback hell. Thêm nữa việc tạo responseStream hoàn toàn độc lập với requestStream. Trong Rx chúng ta có một cách đơn giản để transform và tạo một stream mới từ những thằng khác

Hàm map(f), sẽ lấy từng giá trị của stream A, gọi function f(), và trả về giá trị cho stream B. Tạo một stream này từ stream khác, y như hàm map của array thôi mà.

var responseMetastream = requestStream
  .map(function(requestUrl) {
    return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
  });

Sau đó chúng ta tạo một stream của stream metastream. Bắt đầu phức tạp rồi đó. Metastream là 1 stream mà mỗi cái value được emit sẽ trỏ ra 1 stream khác. Trong ví dụ, mỗi URL request, được trỏ đến một stream promise chứa response

stream của stream - metastream

Với responseStream, chúng ta chỉ một đơn giản một stream chứa response, nên việc tạo một metastream cho response sẽ rối và không cần. Mỗi giá trị được emit của response sẽ là một object JSON, không phải một Promise của object JSON. Sử dụng .flatMap() để gộp tất cả response thành 1 stream, .flatMap là operator để xử lý dữ liệu async trong Rx

var responseStream = requestStream
  .flatMap(function(requestUrl) {
    return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
  });

flatMap để giảm số chiều của stream

responseStream được khai báo bởi requestStream, nếu sau này có thêm các sự kiện trên requestStream, chúng ta sẽ có một event response tương ứng trên responseStream

requestStream:  --a-----b--c------------|->
responseStream: -----A--------B-----C---|->

Sau khi có được responseStream, chúng ta render thôi

responseStream.subscribe(function(response) {
  // render `response` to the DOM however you wish
});

Toàn bộ bode bây giờ

var requestStream = Rx.Observable.just('https://api.github.com/users');

var responseStream = requestStream
  .flatMap(function(requestUrl) {
    return Rx.Observable.fromPromise(jQuery.getJSON(requestUrl));
  });

responseStream.subscribe(function(response) {
  // render `response` to the DOM however you wish
});

Nút refresh

JSON trả về từ API sẽ có 100 user, nó chỉ cho thêm offset, không cho set page size, chúng ta chỉ cần 3 user, lãng phí hết 97 user. Tạm thời không quan tâm phần này, chúng ta sẽ cache lại cái response sau.

Khi click nút refresh, requestStream sẽ emit một URL mới, sau đó chúng ta nhận được một response mới. Chúng ta cần 2 thứ:

  • 1 stream cho sự kiện click -> refreshStream
  • cập nhập lại requestStream để nó phụ thuộc vào refreshStream

RxJS có hàm để chuyển event thành stream

var refreshButton = document.querySelector('.refresh');
var refreshClickStream = Rx.Observable.fromEvent(refreshButton, 'click');

Click refresh nó không có URL kèm theo, chúng ta phải nhét cái URL bằng code. Map vào URL với giá trị offset ngẫu nhiên

var requestStream = refreshClickStream
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  });

Tới đây, chắc chắn mở app lên không thấy gì cả, không có request nào được gửi đi, chỉ click refresh thì mới thấy.

Phải tách stream này ra riêng

var requestOnRefreshStream = refreshClickStream
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  });
  
var startupRequestStream = Rx.Observable.just('https://api.github.com/users');

Sau đó mới .merge() lại

stream A: ---a--------e-----o----->
stream B: -----B---C-----D-------->
          vvvvvvvvv merge vvvvvvvvv
          ---a-B---C--e--D--o----->
var requestOnRefreshStream = refreshClickStream
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  });
  
var startupRequestStream = Rx.Observable.just('https://api.github.com/users');

var requestStream = Rx.Observable.merge(
  requestOnRefreshStream, startupRequestStream
);

Có cách gọn hơn, không cần đến một stream trung gian

var requestStream = refreshClickStream
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  })
  .merge(Rx.Observable.just('https://api.github.com/users'));

Thậm chí gọn hơn nữa

var requestStream = refreshClickStream
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  })
  .startWith('https://api.github.com/users');

Chủ ý nãy giờ là giải thích .startWith() đó. Tuy nhiên là còn có thể tốt hơn nếu chúng ta không lặp lại URL. Làm việc đó bằng cách dời thằng startWith() ngay sau refreshClickStream, để giả lập sự kiện refresh khi vừa mới mở

var requestStream = refreshClickStream.startWith('startup click')
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  });

Khi click nút refresh, chúng ta cũng sẽ remove 3 thằng user đang hiển thị, như vậy chúng ta sẽ subscribe trên refreshClickStream

refreshClickStream.subscribe(() => {
  // clear 3 sugesstion
})

Tuy nhiên, responseStream cũng đang có 1 subscribe ảnh hướng đến việc render, như vậy việc render này cũng tạo thêm 1 stream (có 2 sự kiện emit value để render)

var suggestion1Stream = responseStream
  .map(function(listUsers) {
    // get one random user from the list
    return listUsers[Math.floor(Math.random()*listUsers.length)];
  });

Chúng ta cũng sẽ có suggestion2Streamsuggestion3StreamsuggestionNStream hoàn toàn giống với suggestion1Stream, nhưng mình sẽ để các bạn tự suy nghĩ cách giải quyết. Ví dụ này chỉ đề cập đến suggestion1Stream

Thay vì render trên subscribe của responseStream

suggestion1Stream.subscribe(function(suggestion) {
  // render the 1st suggestion to the DOM
});

Quay lại vấn đề “click refresh, xóa suggestion”, chúng ta đưa vào sugesstion1Stream giá trị null khi refresh

var suggestion1Stream = responseStream
  .map(function(listUsers) {
    // get one random user from the list
    return listUsers[Math.floor(Math.random()*listUsers.length)];
  })
  .merge(
    refreshClickStream.map(function(){ return null; })
  );

Với trường hợp null, đơn giản render thông báo

suggestion1Stream.subscribe(function(suggestion) {
  if (suggestion === null) {
    // hide the first suggestion DOM element
  }
  else {
    // show the first suggestion DOM element
    // and render the data
  }
});

Hình dung quá trình này như sau, trong đó N là giá trị null

refreshClickStream: ----------o--------o---->
     requestStream: -r--------r--------r---->
    responseStream: ----R---------R------R-->   
 suggestion1Stream: ----s-----N---s----N-s-->
 suggestion2Stream: ----q-----N---q----N-q-->
 suggestion3Stream: ----t-----N---t----N-t-->

Click đóng một suggestion

Khi user click vào nút “x”, chúng ta sẽ load 1 user khác vào. Cách chúng ta nghĩ đến đầu tiên, tạo một request mới khi click vào nút “x”

var close1Button = document.querySelector('.close1');
var close1ClickStream = Rx.Observable.fromEvent(close1Button, 'click');

var requestStream = refreshClickStream.startWith('startup click')
  .merge(close1ClickStream) // merge với close stream
  .map(function(){
    var randomOffset = Math.floor(Math.random()*500);
    var 'https://api.github.com/users?since=' + randomOffset;
  })

Không chạy, nó sẽ remove user và tải mới 3 suggestion luôn. Vì cái API của chúng ta xài nó load 1 lần 100 user, nên giờ chúng ta chỉ lấy các user nào chưa hiển thị luôn, không cần refresh mới.

Suy nghĩ theo hướng stream, khi event close1 xuất hiện, chúng ta lấy emit response mới nhất trên responseStream, rồi lấy ngẫu nhiên 1 user

  requestStream: --r--------------->
   responseStream: ------R----------->
close1ClickStream: ------------c----->
suggestion1Stream: ------s-----s----->

Operator là combineLatest sẽ nhận vào 2 stream A, B, khi 1 trong 2 stream có emit value, combineLatest sẽ join 2 value emit gần nhất ab rồi trả về c = f(x, y), trong đó f là function chúng ta khai báo

stream A: --a-----------e--------i-------->
stream B: -----b----c--------d-------q---->
          vvvvvvvv combineLatest(f) vvvvvvv
          ----AB---AC--EC---ED--ID--IQ---->

Chúng ta có thể áp dụng combineLatest() cho close1ClickStream và responseStream, như vậy khi click nút close, nó sẽ lấy kết quả mới nhất từ response rồi trả về một giá trị mới cho suggestion1Stream

var suggestionStream = close1ClickStream
  .combineLatest(responseStream, function(click, listUsers) {
    return listUsers[Math.floor(Math.random()*listUsers.length)];
  })
  .merge(
    refreshClickStream.map(function() {return null;})
  )
  .startWith(null);

Còn vấn đề nhỏ xíu nữa là, combineLatest chỉ chạy khi cả 2 stream đã có giá trị, nếu 1 trong 2 stream chưa emit value nào hết, thì nó không chạy. Để giải quyết vấn đề này, chúng tả giả lập click close1 khi vừa mở app

var suggestion1Stream = close1ClickStream.startWith('startup click') // we added this
  .combineLatest(responseStream,             
    function(click, listUsers) {l
      return listUsers[Math.floor(Math.random()*listUsers.length)];
    }
  )
  .merge(
    refreshClickStream.map(function(){ return null; })
  )
  .startWith(null);

Tổng kết

Toàn bộ code

var refreshButton = document.querySelector('.refresh');
var refreshClickStream = Rx.Observable.fromEvent(refreshButton, 'click');

var closeButton1 = document.querySelector('.close1');
var close1ClickStream = Rx.Observable.fromEvent(closeButton1, 'click');
// and the same logic for close2 and close3

var requestStream = refreshClickStream.startWith('startup click')
  .map(function() {
    var randomOffset = Math.floor(Math.random()*500);
    return 'https://api.github.com/users?since=' + randomOffset;
  });

var responseStream = requestStream
  .flatMap(function (requestUrl) {
    return Rx.Observable.fromPromise($.ajax({url: requestUrl}));
  });

var suggestion1Stream = close1ClickStream.startWith('startup click')
  .combineLatest(responseStream,             
    function(click, listUsers) {
      return listUsers[Math.floor(Math.random()*listUsers.length)];
    }
  )
  .merge(
    refreshClickStream.map(function(){ return null; })
  )
  .startWith(null);
// and the same logic for suggestion2Stream and suggestion3Stream

suggestion1Stream.subscribe(function(suggestion) {
  if (suggestion === null) {
    // hide the first suggestion DOM element
  }
  else {
    // show the first suggestion DOM element
    // and render the data
  }
});

Sample có thể vọc ở http://jsfiddle.net/staltz/8jFJH/48/

https://gist.github.com/staltz

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

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

Cập nhật thông tin tuyển dụng IT – Lập trình viên tháng 7/2021

Dev cần làm gì để được săn đón

Hậu công cuộc dịch bệnh đã hầu như được kiểm soát tại Việt Nam và các công ty đã có thể khởi động lại các dự án của mình. Tuy nhiên, một trong những hệ lụy lớn và cũng được xem là vấn đề nan giải đối các công ty chính là sự thiếu hụt về nguồn nhân lực một cách trầm trọng. Vậy làm cách nào để các tổ chức/ doanh nghiệp có thể tái hoạt động tuyển dụng IT sau Covid? Cùng TopDev theo dõi các thông tin Tuyển dụng mới nhất tháng 7/2021.

Ra mắt gói Tuyển IT giá ưu đãi cho doanh nghiệp vừa & nhỏ kết hợp Đánh giá ứng viên IT

Mới đây nền tảng tuyển dụng IT TopDev (Top Developers) vừa cho ra mắt các gói tuyển dụng IT – Tuyển dụng lập trình viên chỉ từ 3.590.000 – giá tối ưu nhất trong năm 2020, với các ưu đãi và quyền lợi như sau:

tuyển dụng IT tuyển dụng IT tuyển dụng IT cấp tốc tuyển dụng IT topdev

ĐĂNG TUYỂN GÓI TÌM ỨNG VIÊN TẠI ĐÂY

Chưa kể mới đây, TopDev vừa tích hợp cùng hệ thống đánh giá ứng viên hàng đầu trên thế giới mang tên HackerRank – Nền tảng testing code lớn nhất thế giới với hơn 11 triệu coder toàn thế giới đang thực hành code và kiểm thử bởi các công ty công nghệ hàng đầu trên thế giới.

  • Bằng cách cho phép các nhà tuyển dụng mảng công nghệ và các nhà quản lý tuyển dụng đánh giá khách quan các nhân tài ở mọi giai đoạn của quy trình tuyển dụng, HackerRank giúp các công ty tìm kiếm các lập trình viên lành nghề và giúp họ đổi mới nhanh hơn. 
  • Đơn vị nổi tiếng với việc kết hợp các lập trình viên với các công ty tuyệt vời và hữu ích cho cả công ty và nhân viên, với hơn 7 triệu lập trình viên tham gia trang web này. 

Với đặc thù tuyển dụng khó khăn của ngành IT, chúng ta đều hiểu rằng cách tốt nhất để tìm được ứng viên mới đó là phải trực tiếp test kỹ năng quan trọng nhất của vị trí đó, chưa kể là thông qua những phần kiến thức cơ bản để giúp nhà quản lý nhanh chóng biết được ứng viên có phù hợp và đủ khả năng làm việc cho doanh nghiệp của mình hay không, giảm thiểu được rủi ro tối đa trong quá trình sàng lọc ứng viên.

tuyển dụng IT topdev

Tìm hiểu về TopDev X HackerRank – Hệ thống tích hợp Tuyển dụng và Đánh giá ứng viên IT đầu tiên tại Việt Nam

Đừng bỏ lỡ: Hoàn thiện quy trình đánh giá ứng viên IT cho nhà tuyển dụng 2020

Khi câu chuyện tuyển dụng IT không chỉ còn ở “Thông báo tuyển dụng”

Có thể ứng viên thấy mẫu tin đăng của bạn trên MXH, thế nhưng bạn đâu chỉ là duy nhất. Cả trăm ngàn cái doanh nghiệp IT khác cũng đang chạy nước rút trong cuộc đua tìm kỹ sư – người tài về đội IT.

Cái mà nhận sự IT và doanh nghiệp đang hướng đến lúc này đó là “để lại dấu ấn riêng trong cộng đồng kỹ sư – lập trình viên“.

Có thể các lập trình viên sẽ biết đến công ty qua một bài Facebook post, sau đó sẽ gặp chúng ta tại buổi Career talk hoặc workshop sharing, hoặc họ nghe một video bài nói chia sẻ của một Manager / Senior Developer của công ty bạn trên các kênh sharing và công nghệ (TopDev blog, Tech talk..) và sau đó tìm kiếm thông tin về chúng ta qua chính website tuyển dụng của công ty hoặc các trang đăng tin tuyển dụng IT nói chung. TopDev hiện sở hữu và liên kết với hơn 80% các kênh ngách dành cho lập trình viên, giúp các nhà tuyển dụng có thể phủ truyền thông một cách hiệu quả nhất.

  Các nguyên tắc 5W1H – 5W2H – 5W1H2C5M

Bên cạnh gói tuyển dụng giá rẻ SME, TopDev còn cho ra mắt gói tuyển dụng Enterprise với ưu đãi duy nhất trong tháng 7 như sau:

Lợi ích đăng tin

  • Nhận nguồn CV tự nhiên từ website TopDev & các website công nghệ liên kết của TopDev
  • Nhận nguồn CV giới thiệu từ TopDev
  • Được làm mới mỗi 10 ngày
  • Tin đăng được tô đỏ

Lợi ích Employer Branding

  • Email marketing đến 7.500 data đúng đối tượng
  • Ưu tiên hiển thị trong các kết quả tìm kiếm liên quan
  • Logo công ty được ưu tiên hiển thị tại mục Highlight Companies trên trang chủ TopDev
  • Đặc biệt, trải nghiệm gói HackerRank đánh giá ứng viên trị giá $100/ gói

tuyển dụng IT giá rẻ

DUY NHẤT TRONG THÁNG 7 – ĐĂNG KÝ NHẬN ƯU ĐÃI NGAY

Ở thời điểm hiện nay, có hơn 450 công ty đã cùng TopDev thực hiện Employer branding theo cách thức nêu trên, các Tech leads sẽ tham gia vào các sự kiện cộng đồng do TopDev tổ chức, hay xuất hiện trên những bài viết chuyên sâu được TopDev đăng tải trên các kênh ngách của ngành lập trình. Từ đó, các nội dung, hình ảnh, video này sẽ giúp các công ty lập trình viên hiểu hơn về các công nghệ, và tăng tỷ lệ apply một cách đáng kể.

Các chương trình của TopDev đã và đang làm sẽ giúp cho đội ngũ nhân sự hoạch định chiến lược quảng bá và xây dựng hình ảnh một cách chuyên nghiệp và đúng angle mà chỉ có những người trong ngành mới hiểu, từ đó giúp công ty quảng bá văn hoá Employer Branding của mình một cách dễ hiểu và trực quan nhất đến với các bạn lập trình viên. Với nhiều khách hàng lớn TopDev từng làm việc như FE Credit, VNG, KMS, v.v… tỷ lệ chuyển đổi và apply của họ tăng mạnh thậm chỉ là 200% nếu làm đúng cách và đúng thời điểm, giúp các anh chị HR hoàn thành sớm KPI tuyển dụng của năm.

Về nền tảng kênh tuyển IT TopDev – Top Developer :

cộng đồng it

Hệ sinh thái TopDev.vn

Sau gần 5 năm hoạt động, TopDev đã trở thành:

  • Nền tảng tuyển dụng CNTT hàng đầu tại Việt Nam với hơn 2.000 khách hàng và hơn 300.000 hồ sơ Developer.
  • Đơn vị duy nhất tại Việt Nam giúp xây dựng Thương hiệu Nhà tuyển dụng cho hàng trăm công ty CNTT tại Việt Nam.
  • Đơn vị uy tín nhất xuất bản các phân tích và báo cáo thị trường CNTT & nhân lực IT tại Việt Nam.
  • Đơn vị tổ chức của hai sự kiện Công nghệ có ảnh hưởng nhất tại Việt Nam: Vietnam Mobile Day & Vietnam Web Summit

Trong thời điểm chuyển giao nửa năm còn lại, doanh nghiệp nào cũng cần kết nối và nhanh chóng đưa hình ảnh một IT Employer lành mạnh đến với cộng đồng Lập trình viên Việt Nam và hỗ trợ ứng viên IT trên con đường phát triển sự nghiệp.

Hệ sinh thái TopDev gồm các chuyên trang website và Facebook fanpage hiện phủ khắp cộng đồng IT Việt Nam với gần 95% Lập trình viên đang sử dụng một sản phẩm của TopDev.

Để làm được điều đó không thể thiếu sự đồng hành của hơn 2.000 khách hàng –  là các công ty tập đoàn công nghệ hàng đầu tại thị trường Việt Nam như VNG, Tiki, Sendo, KMS Technology,… đều cũng chung 1 sứ mệnh – tìm được nhân tài IT đồng hành cùng các sản phẩm công nghệ Việt.

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

  Bí quyết phát triển hoạt động nhân sự qua email (Email Marketing) hiệu quả - Bạn đã biết?

  Tái tuyển dụng IT hiệu quả? Thách thức và cơ hội cho các công ty hậu Covid-19

OKR là gì? Kinh nghiệm xây dựng OKR hiệu quả

OKR

OKR là gì? OKR (Objectives and Key Results), thuật ngữ này được chuyển dịch với tên gọi Quản trị theo Mục tiêu và Kết quả then chốt. OKR được xem là một phương pháp quản trị giúp doanh nghiệp gắn kết mục tiêu cụ thể với kết quả chung của một tổ chức, tập thể lớn.

Với khả năng ứng dụng cao và quá trình hợp thức đơn giản phù hợp với xu hướng phát triển mới, OKR được nhiều tập đoàn, doanh nghiệp lớn sử dụng vào hệ thống quản lý của mình đặc biệt là các công ty về công nghệ: Spotify, Twitter, LinkedIn,… Thế nhưng, phạm vi hoạt động của OKR còn được mở rộng hơn nhờ sự tin dùng của các công ty từ nhiều lĩnh vực khác nhau: Walmart, The Guardian, ING Bank,…

Việc áp dụng OKR mang lại lợi ích gì cho doanh nghiệp?

Để áp dụng OKR hiệu quả, doanh nghiệp cần phải có một định hướng rõ ràng về những gì cần phải thực hiện. Hệ thống Quản trị này bao gồm 1 mục tiêu (Objective) – tức thứ doanh nghiệp cần đạt được và 5 kết quả cụ thể (Key result) – các kết quả này có thể được xác định và đo lường nhằm đạt được mục tiêu đề ra.          

OKR

Điều gì khiến OKR trở nên nổi bật?

OKR tập trung vào vấn đề tạo sự liên kết trong tổ chức và đó là lợi ích được người sử dụng đánh giá cao. Ngoài ra, một điểm cộng hoàn hảo là OKR đảm bảo tất cả mọi người đi cùng một hướng, với các ưu tiên rõ ràng, tạo sự nhịp nhàng cho quá trình diễn tiến hoạt động, từ đó gia tăng tính hiệu quả về chất lượng công việc.

Lợi ích của phương pháp này là giúp nhân viên trong công ty xác định đâu là ưu tiên cần thực hiện, từ đó tập trung sức lao động vào những mục tiêu có thể đo lường được, không sa đà vào những công việc không có giá trị, giúp giảm thiểu những rào cản trong vấn đề quản lý hiệu suất lao động. Tỷ lệ để đánh giá mức độ thành công của 1 OKR không nhất thiết phải đạt tới 100% trong ngắn hạn. Việc đạt được phần lớn mục tiêu (khoảng 70 – 80%) đã được coi là thành công.

Cụ thể, OKR mang lại cho doanh nghiệp những giá trị như sau:

  • Định hình chiến lược giúp quản lý hiệu suất lao động: OKR là thước đo chuẩn xác nhất giúp nhà quản trị định hướng mục tiêu, vạch ra những bước đi cụ thể trong việc định hình và phát triển chiến lược, Đồng thời, nhiều nghiên cứu đã chỉ ra rằng: Nhóm nhân viên áp dụng OKR trong công việc đem về cho doanh nghiệp lợi nhuận cao hơn, có hiệu suất lao động tốt hơn nhóm không áp dụng. Trên thực tế, nhiều nhân viên mong muốn doanh nghiệp mình sử dụng OKR trong tương lai.
  • Tác động tích cực làm “thay màu” văn hóa doanh nghiệp: Lợi ích lớn nhất của OKR là sự tác động mạnh mẽ vào văn hóa của doanh nghiệp, có tác động làm dịch chuyển lối tư duy từ quản trị thông qua KPI thuần túy sang việc hoàn thành mục tiêu trong công việc. Việc đề cao tính chuyên môn, sáng tạo dựa trên sự minh bạch chính là kim chỉ nam quan trọng mà OKR 
  •  Sự gắn kết: OKR ngày càng được nhiều doanh nghiệp lựa chọn vì không chỉ đảm bảo về hiệu quả quản trị mà còn giúp tạo ra một sự gắn kết giữa các nhân viên với chính doanh nghiệp của mình. Bản chất OKR là một mô hình quản trị vừa tác động đến sự vận hành hoạt động, vừa giúp nhân viên nhận ra mọi điều mình làm đều hàm chứa một ý nghĩa nhất định đối với sự phát triển chung của tổ chức.

  4 cách thúc đẩy sự phát triển nhân viên tại công ty

Các bước áp dụng OKR trong doanh nghiệp

OKR

Trước khi bắt tay vào việc áp dụng OKR vào quản trị doanh nghiệp, bạn cần phải có cái nhìn chính xác về những khó khăn mà mình đang mắc phải. Nó cách khác, bạn đang muốn doanh nghiệp mình đạt được mục tiêu gì trong tương lai.

Bạn có thể coi OKR là một trường phái với một hiệu suất quản lý hiệu quả. Có 2 bước hay 2 giai đoạn cần phải quan tâm: Giai đoạn đầu chuẩn bị chiến lược, sau đó là áp dụng thực tế.

Thiết lập cơ cấu quản trị OKR trong doanh nghiệp

Thông thường, người ta thường thiết lập chương trình OKR theo 2 nhóm đối tượng độc lập, phân mốc thời gian riêng biệt theo năm và theo quý. Mục tiêu doanh nghiệp có thể thực hiện hàng năm để thuận lợi cho việc đánh giá mức độ hiệu quả.

Với mỗi phòng ban, mục tiêu có thể được review theo từng quý để linh hoạt thay đổi chiến lược sao cho phù hợp với mục tiêu tổng thể của doanh nghiệp.

Bắt tay xây dựng chiến lược OKR

  • Xây dựng tầm nhìn và sứ mệnh: Một lời khuyên hữu ích cho mọi doanh nghiệp là cần xác định rõ 2 khái niệm tầm nhìn và sứ mệnh, tránh mơ hồ hoặc nhầm lẫn với nhau. Lưu ý, tầm nhìn và sứ mệnh phải đảm bảo được tính dài hạn. Điều này cho thấy khả năng lãnh đạo của những người đứng đầu doanh nghiệp. 
  • Xác định OKR cụ thể: Để xác định OKR cho toàn thể doanh nghiệp, bạn nên tổ chức một buổi họp nơi mọi ý kiến của nhân viên đều được thu thập và tôn trọng. Những ý tưởng khả thi nhất sẽ được lựa chọn, số lượng OKR lý tưởng của các công ty có thể áp dụng vào thực tế nên rơi vào tầm từ 3 đến 5 OKR.

Triển khai thực hiện OKR thế nào để đạt hiệu quả?

Như chia sẻ vào đầu bài viết, OKR là Quản trị theo Mục tiêu và Kết quả then chốt. Vì vậy, ta cần thiết lập các mục tiêu và các kết quả theo chốt để OKR được triển khai một cách hiệu quả.

Mục tiêu là những mô tả định tính về những điều doanh nghiệp muốn đạt được, các mục tiêu này giúp doanh nghiệp đi đúng hướng để đạt được kết quả mong muốn. Và đặc biệt, đây phải là những mục tiêu thực tế, có tính khả thi. Việc đặt ra thời gian hoàn thành mục tiêu để dễ dàng kiểm soát tiến độ cũng là một điều quan trọng. Hãy đặt câu hỏi như: “Ưu tiên quan trọng nhất hiện tại của doanh nghiệp là gì?” để khai thác điều doanh nghiệp mong muốn tìm kiếm hoặc còn thiếu sót, từ đó bắt đầu đề ra những mục tiêu cụ thể hơn. 

Các kết quả then chốt sẽ đi kèm với các mục tiêu đã chọn. Mỗi mục tiêu nên có từ 3 đến 4 kết quả then chốt để hỗ trợ đo lường quá trình hoàn thành các mục tiêu. Ví dụ trong việc đo lường hiệu quả năng suất lập trình, việc đưa ra các kết quả gắn với mỗi mục tiêu là điều rất quan trọng. Điểm quan trọng nhất của các kết quả then chốt chính là đảm bảo chúng là các mục tiêu định lượng, hoặc là những kết quả có thể đo lường được qua số liệu. Key result là những yếu tố giúp xác định sự thành công hoặc thất bại trong việc hoàn thành các mục tiêu đã đặt ra. 

Hãy giả sử một mô tả sau đây để lý giải quá trình. Nếu xem mục tiêu là điểm đến, tức mục tiêu cần đạt được, kết quả then chốt là con đường, thì cách triển khai là phương tiện để chúng ta có thể đi đến đích đến cuối cùng.

Bảng tổng hợp sau đây sẽ cho thấy những tính chất cần có trong mỗi thành tố: 

Mục tiêu Kết quả then chốt Cách thức
Tính chỉ dẫn v
Sự sắp xếp để đi đúng hướng v
Sự tác động mạnh v v
Tham vọng v
Đo lường được v v
Sự truyền cảm hứng v
Sự rõ ràng v
Sự cụ thể v v
Trong tầm kiểm soát v
Trong phạm vi ảnh hưởng của bạn v v v
Đúng trong khoảng thời gian giới hạn v v v
Số lượng 1-4 1-5 tối thiểu 1

Cuối cùng, bạn cần nhớ rằng việc triển khai OKR sao cho hiệu quả không chỉ phụ thuộc vào hệ thống quản trị mục tiêu mà còn cần đến kỹ năng lãnh đạo xuất sắc từ nhà quản lý. Đó không những là việc giỏi chuyên môn, quản trị mục tiêu và kết quả kỳ vọng tốt… mà còn là việc truyền cảm hứng và định hướng cho đội ngũ của mình bằng cách áp dụng các khía cạnh của trí tuệ cảm xúc (EQ).

>>> Xem thêm: Điều gì làm nên một nhà lãnh đạo thực thụ trong quản lý dự án?

Ví dụ cụ thể về OKR – bài toán xác lập hệ giá trị quan trọng trong Quản trị

Bước đặt mục tiêu – Objective

  • Trở thành doanh nghiệp dẫn đầu thị trường về tuyển dụng Nhân sự IT.
  • Ra mắt thành công giải pháp phỏng vấn video giúp xử lý hàng trăm ứng viên mỗi ngày.
  • Tạo ra nhiều doanh thu hơn so với cùng kỳ năm ngoái.

Lập kết quả then chốt – Key result

  • Test hiệu quả của dòng sản phẩm ứng dụng đạt 99% tiêu chí đề ra.
  • Giá trị của doanh nghiệp đạt ở mức cao.
  • Chốt được 3 – 5 hợp đồng lớn từ các đối tác là các tổ chức/doanh nghiệp cần nguồn cung ứng nhân sự IT phù hợp.
  • Phát triển thành công giá trị thương hiệu của doanh nghiệp bằng cách có từ 2 – 3 tờ báo lớn thông tin về tổ chức thông qua kế hoạch truyền thông.

Mô tả về cách thức cần phải triển khai thực hiện

  • Thuê nhân sự phụ trách quản lý vấn đề phát triển ứng dụng giải pháp phỏng vấn video.
  • Chạy các chiến dịch PR, social tùy vào mục tiêu đề ra
  • Xây dựng kịch bản liên hệ các khách hàng, đối tác liên doanh.

Lời kết

OKR là một phương pháp hữu hiệu và ngày càng được nhiều tổ chức/doamh nghiệp áp dụng vào mô hình hoạt động nhân sự và vận hành hoạt động của mình. Tùy vào quy mô và tuổi đời của từng doanh nghiệp, các nhà quản lý nhân sự cần có cách thức ứng dụng sao cho phù hợp nhằm hướng đến hiệu quả cao nhất.

Việc triển khai OKRs cần có sự tham gia, căn chỉnh giữa các cấp quản trị và nhân viên một cách đồng bộ. Một trong những cách giúp các nhà lãnh đạo, nhà quản trị nhân sự có kiến thức chuyên sâu trong việc thiết lập, triển khai OKR là tham gia khóa học OKR uy tín. Từ đó, doanh nghiệp có thể áp dụng thành công OKR vào thực tiễn và nhận được những giá trị từ phương pháp này.

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

Xem thêm việc làm it lương cao hàng đầu tại TopDev

Bí quyết tuyển lập trình viên – ứng viên IT thành công trong nửa cuối năm

tuyển dụng lập trình viên

Theo thông tin được cập nhật về thị trường IT mới nhất của TopDev, hiện nay có đến 62% ứng viên IT bị động, gấp gần 5 lần số lượng ứng viên chủ động tìm việc chỉ với 14%. Xu hướng này đã gây ra nhiều trở ngại cho các HR khi tuyển lập trình viên, đòi hỏi họ phải ngày một chủ động hơn trong việc tìm kiếm nhân tài. Chủ động hơn đồng nghĩa với việc các nhà tuyển dụng phải nỗ lực hơn, đầu tư nhiều thời gian để tìm kiếm và thu hút kiểu ứng viên này.

Nào hãy cùng TopDev tìm hiểu kĩ về ứng viên IT bị động, các ưu khuyết điểm, cũng như các biện pháp thực tiễn và chi tiết để cải thiện các vấn đề phát sinh từ kiểu ứng viên khó nhằn này nhé!

Ứng viên IT bị động là gì?

Ứng viên IT bị động – nôm na là những ứng viên IT không chủ động tìm việc nhưng được các nhà tuyển dụng chủ động tìm kiếm để lấp đầy cho các vị trí trống. Nói cách khác, họ không hề chủ động nộp CV ứng tuyển, mà chính những người tuyển lập trình viên mới là người tìm kiếm thông tin liên lạc và trực tiếp mời họ ứng tuyển.

Như bạn có thể thấy hiện nay có hơn 2/3 ứng viên IT khảo sát là ứng viên bị động, trong khi ứng viên chủ động chỉ dừng lại ở con số hạn chế 14%. Nói tới đây, bạn có thể thắc mắc kiểu ứng viên này có gì đặc biệt khiến cho mọi đội ngũ tuyển dụng phải “cuống cuồng” lên tìm kiếm? Cùng TopDev tìm hiểu kĩ hơn về điểm mạnh yếu của ứng viên IT bị động nhé!

Tại sao nên nhắm vào ứng viên IT bị động?

Nguồn ứng viên đếm không xuể

Hiển nhiên là số người không quan tâm vị trí công việc của bạn gấp nhiều lần người quan tâm, tỉ lệ này cũng na ná khi bạn đăng một ảnh lên Instagram, số người like chắc chắn sẽ thấp hơn nhiều số người theo dõi bạn! Hãy nhớ rằng bất kì ai trong độ tuổi lao động ngoài kia đều có thể là những nhân tài tiềm năng góp phần không hề nhỏ cho doanh nghiệp.

Quan trọng hơn là để việc vận hành doanh nghiệp lâu dài, tiếp cận những ứng viên IT bị động là không thể tránh được, như số liệu TopDev đề cập ở trên, chỉ với 14% ứng viên trong thị trường là chủ động tìm đến những HR tuyển lập trình viên, theo dõi website của bạn thường xuyên, thì liệu nguồn ứng viên này có đủ để lấp đầy vị trí trống mỗi lúc một nhiều trong thời kì mật độ nhảy việc cao như hiện nay?

Giảm bớt căng thẳng về mặt thời gian

Một trong những ưu điểm cực lớn mà các nhà tuyển dụng thường hay bỏ qua khi nhắc tới khi tuyển lập trình viên bị động là họ bớt thấy áp lực hơn trong tình huống phải ra quyết định tức thời.

  Vì sao lương khủng, đãi ngộ tốt vẫn khó tuyển IT?

TopDev sẽ giúp bạn rõ hơn với so sánh nhỏ sau. Với ứng viên chủ động tìm việc, có khả năng rất cao họ đang ứng tuyển cho nhiều công ty khác nhau. Nếu quá trình tuyển dụng của bạn không tinh gọn và mất nhiều thời gian, ứng viên đó đã có thể chấp nhận làm ở một công ty khác. Và cho dù bạn có tăng độ hấp dẫn cho offer ngay từ đầu, họ vẫn chờ xem những công ty khác sẽ offer cho họ những gì. Kết quả là bạn sẽ đứng ngay ranh giới giữa sắp để mất một nhân tài và tăng chi phí cho doanh nghiệp.

tuyển lập trình viên

Ứng viên IT bị động – ngược lại, thường sẽ không ứng tuyển cho nhiều công ty đơn giản vì họ đâu có chủ động tìm việc! Nếu quá trình tuyển lập trình viên của bạn khá dài và rườm rà, bạn cũng không phải lo lắng ứng viên sẽ được mời gọi offer hấp dẫn hơn.

Thẳng thắn, khách quan và công bằng

Do ứng viên IT bị động không tìm kiếm việc làm, có khi là họ đã có chỗ làm ổn thỏa, nên bạn không phải sợ việc bị ứng viên nói dối, phóng đại khả năng bản thân, làm mọi cách để được chấp nhận vào công ty. Chỉ đơn giản là bạn tiếp cận họ, nêu rõ những gì bạn cần, bạn cho họ, họ cân nhắc và chấp nhận ứng tuyển mà thôi. Vừa tiết kiệm thời gian cho cả hai, mà quyền lợi của 2 bên cũng dễ dàng thống nhất và đảm bảo hơn.

Ứng viên tiềm năng trong tương lai

Điều hiển nhiên là không phải ứng viên nào bạn tiếp cận cũng chấp nhận làm cho bạn ngay lúc đó. Bạn có thể không nhận được phản hồi nào từ cái email đầu tiên, nhưng đừng bỏ cuộc. Bây giờ họ không chấp nhận không có nghĩa là vài tháng sau họ vẫn thế.

Thay vì bỏ cuộc hoặc theo đuổi họ đến cùng (càng khiến họ thấy hoảng sợ hơn với doanh nghiệp của bạn) thì TopDev khuyên là bạn nên giữ liên lạc với họ với mật độ ổn định, 1 lần/tháng chẳng hạn, vừa duy trì được mối liên hệ về lâu dài, vừa có thể thuyết phục họ ứng tuyển trong tương lai.

  4 bí kíp đẩy mạnh tuyển dụng IT trên Facebook ít người biết

  Cập nhật xu hướng Employer Branding Event cho nhà tuyển dụng IT

Làm sao để thu hút & tuyển lập trình viên – ứng viên IT

Một cách cơ bản cũng như quan trọng nhất mà TopDev thường hay nhấn mạnh trong các bài blog của mình là bạn phải đẩy mạnh “Thương hiệu tuyển dụng”. TopDev sẽ gợi ý cho bạn 2 cách để thu hút, tuyển lập trình viên bị động bằng qua việc thúc đẩy Employer Branding nhé.

Cách 1: Thương hiệu tuyển dụng gián tiếp qua Digital Channels

1. Bài đăng trên các trang Blog: Trên hệ thống Tuyển dụng của TopDev, có đến 70% ứng viên cập nhật kiến thức qua Tech blog, điều đó chứng tỏ rằng bạn có thể gia tăng mức độ nhận diện cho doanh nghiệp mình bằng việc đăng tải các bài blog với kiến thức hữu dụng, thông tin cần thiết để ứng viên dễ dàng tiếp cận.

Bạn có thể tận dụng trang Blog của doanh nghiệp bạn với vài nội dung như:

– Kiến thức lập trình hữu dụng

– Case studies thực tế từ công ty

– Chia sẻ kỹ thuật chuyên sâu từ team dev cũng như về môi trường và văn hóa làm việc…

Bên dưới là một số dữ liệu mà TopDev đã tiếp cận các dev để để tìm hiểu sâu hơn về thị hiếu, xu hướng cập nhật thông tin IT và học ngôn ngữ lập trình mới. Bạn có thể tham khảo và cân nhắc áp dụng vào xây dựng thương hiệu tuyển dụng cho doanh nghiệp mình nhé:

Tuy nhiên, nếu việc đó mất nhiều thời gian hay chưa thành công như mong đợi thì đừng quên là TopDev có cung cấp các bài viết xây dựng thương hiệu qua Techtalk.vn và Blog Topdev.vn nhé. Techtalk là chuyên trang tin tức và thông tin công nghệ hàng đầu Việt Nam với 1.500.000 lượt truy cập mỗi tháng. Bên cạnh đăng bài qua Techtalk, TopDev còn chia sẻ lên các Fanpage công nghệ với cộng đồng IT dày đặc như như TopDev, Hội những Dev vui tính, Tech Talk, Lập Trình Viên Confession, Anh Lập Trình Viên … giúp việc xây dựng thương hiệu đơn giản hơn rất nhiều.

TopDev Ecosystem traffic

2. Banner Hiển thị: Hiển thị banner trên các website công nghệ lớn (như Techtalk, TopDev.vn). Như đã đề cập ở trên, Techtalk có gần 1.500.000 truy cập/tháng và đến 99% đối tượng là lập trình viên, đây là những người thường xuyên truy cập Techtalk để cập nhật thông tin, dĩ nhiên là khi banner của bạn được đặt ở những web có lượng traffic cao như thế, bạn đang dần cải thiện mức độ nhận diện và khơi gợi sự tò mò từ những ứng viên tiềm năng về doanh nghiệp bạn đó.

3. Email Marketing: Một cách vô cùng quen thuộc để tiếp cận ứng viên bị động là trực tiếp gửi email quảng bá về doanh nghiệp, những vị trí còn trống cũng như những điều thú vị về công ty. Tuy nhiên vấn đề là làm sao để có database ứng viên IT dồi dào và sáng tạo được nội dung cực kì thu hút? Cả 2 điều kiện cần trên là cực kì thiết yếu để một chiến dịch Email Marketing hiệu quả. Thiếu yếu tố đầu thì sẽ không ai có động lực mở email bạn cả, nếu không có yếu tố 2 thì bạn đã bỏ lỡ quá nhiều ứng viên bị động bên ngoài kia.

TopDev có thể giúp kế hoạch Email Marketing hiệu quả hơn với kho dữ liệu 300.000 ứng viên IT, tỉ lệ mở trung bình lên đến 20% và tỉ lệ chuyển đổi cực ấn tượng.

Cách 2: Thương hiệu tuyển dụng trực tiếp qua Event

4. Tech Event/Workshop

Không gì bàn cãi khi các event chuyên ngành là nơi hội tụ những ứng viên tiềm năng đến tham gia và tìm hiểu thêm về IT, tuyển lập trình viên, đây là cơ hội cực kì lớn để bạn đẩy mạnh thương hiệu tuyển dụng của mình. Có thể nói đây là cách tốt nhất để branding và tiếp cận trực tiếp với ứng viên ngay tại event.

Bạn có thể tổ chức event với nội dung như: chia sẻ những bài toán kĩ thuật khó nhằn và cách xử lý mà doanh nghiệp bạn đã áp dụng thành công; câu chuyện có thật từ những người đứng đầu công ty hay từ 1 anh dev tiêu biểu chẳng hạn,..bất kì nội dung hấp dẫn nào để thu hút các ứng viên IT tham gia. Tuy nhiên, việc xây dựng nội dung hấp dẫn không quyết định 100% sự thành công trong tuyển dụng của bạn, bạn và doanh nghiệp phải nỗ lực nhằm tạo cho ứng viên cảm giác gần gũi, thân thiện, nắm rõ hơn về công ty bạn cũng như những tiềm năng cơ hội phát triển mà bạn mang lại cho họ.

Nếu như việc tự tổ chức mất nhiều chi phí và thời gian, TopDev có thể là trợ thủ đắc lực cho doanh nghiệp của bạn từ khâu lên nội dung, truyền thông, logistics, vận hành sự kiện và tuyển lập trình viên. Với năng lực tổ chức nhiều sự kiện lớn trong năm và tần suất hơn 15 sự kiện mỗi tháng, doanh nghiệp cũng có thể tận dụng xuất hiện thương hiệu tuyển dụng của mình tại các kỳ sự kiện này, với nội dung phong phú với các chủ đề từ Mobile, Database tới hot trend như Machine Learning, AI,… Tìm hiểu thêm tại đây nhé!

5. Tham gia các sự kiện công nghệ lớn

Bên cạnh các Tech event/Workshop đề cập bên trên, TopDev sẽ gợi ý 1 vài event lớn thường niên để bạn cân nhắc tham gia nhé:

  • Forbes Vietnam’s Tech Summit: hội nghị về công nghệ với diễn giả là các nhà đầu tư mạo hiểm, doanh nhân công nghệ tầm cỡ thế giới cùng chia sẻ tầm nhìn, tư duy về xu hướng công nghệ, thúc đẩy doanh nghiệp khởi nghiệp và mở ra khả năng phát triển mới.
  • Techfest Vietnam:còn gọi “Ngày hội Khởi nghiệp đổi mới sáng tạo”được tổ chức vào ngày 4-6/12 năm nay. Mục tiêu là nhằm quy tụ hệ sinh thái khởi nghiệp sáng tạo, kết nối đầu tư trong nước và quốc tế cũng như đề xuất cơ chế chính sách phục vụ Khởi nghiệp.
  • Vietnam Mobile Day: tập trung vào lĩnh vực ứng dụng di động, hơn 100 chủ đề chuyên sâu cùng đối tượng đa dạng như developer, marketer và designer. Ngoài ra đây cũng là nơi để triển lãm các sản phẩm, tiếp cận ứng viên tiềm năng phục vụ cho việc tuyển lập trình viên hiệu quả.
  • Vietnam Web Summit: sự kiện IT lớn và qui mô nhất Việt Nam tập trung về Công nghệ với diễn giả gồm quản lí cấp cao và chuyên gia hàng đầu. Điều quan trọng hơn đây là cơ hội lớn không được bỏ lỡ khi bạn muốn thu hút ứng viên IT bị động bởi có gần 10.000 người tham gia và hơn 3 triệu online reach. Ngày hội tuyển lập trình viên được tổ chức vào ngày 6,13/12 lần lượt tại HCM và Hà Nội với dự kiến hơn 10.000 người tham gia.

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

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

TopDev tổng hợp

  TOP 20 thách thức tuyển dụng nhân sự IT năm 2024 (Phần 1)

  Cập nhật thông tin tuyển dụng IT - Lập trình viên tháng 7/2021

Cách thiết lập và duy trì mối quan hệ (networking) hiệu quả

networking

Tạo dựng và duy trì mối quan hệ (Networking) là phương pháp tiếp thị hiệu quả cho mọi cá nhân nhằm nâng cao chất lượng hoạt động của công việc. Thực tế cho thấy, nhiều người vẫn chưa hiểu rõ về cách thức thực hiện của networking vì thế dẫn đến tình trạng hiệu quả còn nhiều hạn chế. Với bài viết sau đây, TopDev sẽ bật mí với bạn cách làm thế nào để xây dựng và duy trì mối quan hệ một cách tối ưu.

Đâu là những nguồn networking hiệu quả?

Nền tảng networking từ việc học tập

networking

Việc học tập có thể nói là ưu tiên hàng đầu của bất cứ ai khi mong muốn xây dựng những nền tảng ban đầu về networking. Nếu còn là sinh viên thì bạn nên kết hợp việc tiếp thu kiến thức với việc bắt đầu thiết lập các mối quan hệ. Không một sinh viên xuất sắc nào mà lại không có những networking từ giảng viên cả. Việc duy trì mối quan hệ với thầy cô sẽ có giá trị lớn đối với bạn trong việc thực hiện các đề tài nghiên cứu, công trình khoa học, đồ án, kế hoạch thực tập, học bổng,.. 

Trải nghiệm và xây dựng networking từ hội thảo, chương trình hợp tác

Ngược lại, nếu là một người đã đi làm, bạn vẫn có thể dễ dàng xây dựng và duy trì mối quan hệ bằng cách tham gia các khóa học về kỹ năng sống, chương trình nghiệp vụ, ngoại khoá. Chúng là sự lựa chọn khá hoàn hảo để bạn gặp gỡ những người có kinh nghiệm trong các lĩnh vực có liên quan đến vị trí công việc của bạn. 

Có được networking tốt với họ là cơ hội để bạn bước đầu phát triển thêm về chuyên môn đồng thời là bước đệm hỗ trợ lâu dài cho việc chinh phục mục tiêu của bạn trong tương lai. Một bí quyết nhỏ cho bạn đó là hãy chủ động tìm hiểu trước về chủ đề và nội dung để thuận lợi hơn trong việc kết nối với các diễn giả hoặc những người tham dự tiềm năng nhé.

Tham khảo thêm việc làm it network lương cao lên đến 3000 USD

Làm thế nào để có thể thiết lập và duy trì networking hiệu quả?

Tính chuyên nghiệp được đặt lên hàng đầu

Tính chuyên nghiệp rất quan trọng vì nó chi phối đến hiệu quả của việc xây dựng và phát triển networking.

networking

Hãy xuất hiện một cách chỉn chu nhất. Sự chỉn chu được thể hiện qua trang phục lịch sự, thái độ và phong cách giao tiếp chuyên nghiệp.

Hãy là chính mình, đừng cố gượng gạo. Bạn có thể mở đầu bằng cách nở một nụ cười thật tươi, hay trao cho họ những lời hỏi thăm. Tiếp đến thì một cuộc hội thoại ngắn sơ bộ về thông tin cá nhân, không quá rườm rà nhưng đủ tạo điểm nhấn để người đối diện nhớ về bạn là điều bạn nên lưu tâm và thực hiện. Để kết lại cho lần chạm mặt đầu tiên một cách chuyên nghiệp nhất, hãy gửi cho họ một tấm danh thiếp của bạn. Danh thiếp được xem là một chiếc vé giúp bạn đến gần hơn với đối tác. Việc họ nhớ đến bạn và liên hệ lại hay không còn phụ thuộc nhiều yếu tố, tuy nhiên hãy là một người chuyên nghiệp từ những hành động, ứng xử nhỏ nhất.

Không ngừng thúc đẩy và nuôi dưỡng các mối quan hệ

Việc duy trì networking cũng giống như việc phát triển công tác về nhân sự trong tổ chức của bạn. Nhà quản lý nhân sự về IT sẽ luôn đặt ra những mối quan tâm lớn về việc làm thế nào để giữ chân và đồng hành cùng nhân viên của mình một cách lâu dài nhất. Đó là lý do họ vạch ra rõ những đường hướng, lộ trình phù hợp cho mỗi nhân viên thông qua các chính sách, phúc lợi,… Bạn cũng vậy, việc bạn duy trì networking với các đối tác rất cần sự thúc đẩy và nuôi dưỡng. Hãy cho phép đôi bên hiểu rõ về nhau thông qua những cuộc gặp mặt. 

  4 cách thúc đẩy sự phát triển nhân viên tại công ty

networking

Cụ thể, bạn có thể đặt câu hỏi và lắng nghe họ. Bạn không cần phải nói quá nhiều về những gì mình đã làm để truyền thông hay quảng cáo cho bản thân. Thay vào đó, hãy thảo luận với những người bạn gặp về công việc của họ, lắng nghe để nắm bắt thông tin và tiếp nhận những phản hồi. Đồng thời, hãy tìm kiếm những điểm tương đồng mà bạn có thể đưa vào cuộc trò chuyện để gia tăng sự tương tác. 

Hoạt động trên nền tảng sự thấu hiểu và tính thích nghi là nước cờ đúng đắn. Bạn và đối tác có thể chia sẻ về những khó khăn, thách thức riêng để tìm thấy sự phụ ứng từ đó mở ra nhiều cơ hội hợp tác với nhau hơn.

Thông minh và chủ động để tìm kiếm và duy trì networking 

Đừng giữ mãi quan niệm thiết lập được càng nhiều networking càng tốt. Chất lượng vẫn hơn số lượng. Vì thế mỗi lần có cơ hội trải nghiệm, tham gia các sự kiện, hoạt động lớn nào đó, bạn hãy thông minh trong việc tiếp cận trao đổi với đối tượng. Dù cho đó chỉ là 2-3 người nhưng với mỗi cá nhân, bạn có thể có đủ thời gian và sự đầu tư nghiêm túc cho cuộc thoại của mình trở nên đáng nhớ và hấp dẫn các đối tác tiềm năng. Một cuộc giao tiếp dài và sâu thay vì diễn ra chớp nhoáng là minh chứng cho tính hiệu quả trong việc tạo lập và duy trì mối quan hệ.

  Kỹ năng giao tiếp? Làm thế nào để cải thiện giao tiếp hiệu quả?

networking

Ngoài ra tính chủ động cũng rất quan trọng để giúp bạn khai thác tốt các networking. Chủ động liên hệ và tương tác với những người có tên tuổi, có thâm niên về bể đay hoạt động. Dành một ít thời gian để phân bố tìm hiểu thông tin về họ, tạo ra các cơ hội gặp gỡ và trao đổi cụ thể về những điều thú vị hay những vấn đề xoay quanh hội thảo đã diễn ra cũng là một phương án không tồi tí nào

Tuy nhiên, bạn nên sẵn sàng cho những trường hợp tiêu cực có thể xảy đến. Hãy giữ một tâm thế thoải mái và cởi mở hơn. Đừng quá đặt nặng mục tiêu là buộc mình phải trở thành thợ săn network; giảm bớt những mong đợi tìm kiếm các mối quan hệ lớn vì thực tế đôi khi khác xa những gì bạn kỳ vọng.

Lời kết

Networking là một quá trình, không phải là sự kiện chỉ diễn ra duy nhất một lần. Tất nhiên, mục tiêu xây dựng và duy trì networking đang là mối quan tâm lớn đối với mọi doanh nghiệp. Tuy nhiên, điều bạn cần làm là dành cho nó một sự đầu tư nghiêm túc nhất để nó có thể phát triển. Hãy tự tin và vững bước trước những áp lực. 

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

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

UX là gì? UX Designer thì làm những gì?

ux-la-gi-ux-designer-thi-lam-nhung-gi

UX là gì? – Theo báo cáo gần đây nhất của TopDev, mức lương trung bình của vị trí UX/UI Designer đạt 22 triệu đồng/tháng ($954 USD). Chắc chắn một điều, khi ngày càng nhiều sản phẩm công nghệ xuất hiện trên thị trường, điều khách hàng quan tâm không chỉ đến từ chức năng hay chất lượng của sản phẩm. Có nhiều yếu tố cấu thành nên sự thành công của phần mềm/website, và trong đó không thể thiếu yếu tố UX/UI.

Vậy UX là gì? Và liệu Developer có nên quan tâm đến UX/UI design?

UX là gì?

Viết tắt từ User Experience – trải nghiệm người dùng, UX là quá trình tạo ra sản phẩm cung cấp trải nghiệm có ý nghĩa liên quan tới người dùng (hay khách hàng), bao gồm toàn bộ quá trình ứng dụng và tích hợp sản phẩm kết hợp nhiều khía cạnh như: branding (thương hiệu), design (thiết kế), usability (khả năng sử dụng) và function (chức năng).

Có thể nói, mọi thứ đều có một UX của riêng nó. Và công việc của UX Designer không phải là tạo ra UX, mà chính là tối ưu nó. Và thế nào là một UX “đủ tốt”? Liệu có phải làm làm cho người dùng vui vẻ chính là một “trải nghiệm người dùng” tốt? Tuy nhiên đích đến của UX không nằm ở việc làm cho người dùng vui vẻ, mục tiêu mà một UX Design cần đạt chính là làm cho người dùng hiệu quả. Và thực ra trải nghiệm người dùng chỉ là bề nổi của cả tảng băng.

Nhiều người lầm tưởng rằng UX chỉ bao quanh user’s experience mà quên mất khái niệm thật sự của UX là gì, thực chất nó bao gồm cả một quá trình User Experience Design – Thiết kế trải nghiệm người dùng. Một trải nghiệm của một cá thể người dùng nào đó, là cảm giác hay ý kiến chủ quan của họ lên app hay web của bạn. Có thể feedback từ người dùng khá là quan trọng, nhưng đôi khi UX Designer có nhiều thứ để làm hơn thế.

Thực hiện UX: Thiết kế UX (UXD) là quá trình cũng tương tự như làm khoa học vậy: tạo research để hiểu người dùng, triển khai các ý tưởng để giải quyết nhu cầu của người dùng – nhu cầu của kinh doanh – và cả xây dựng, đo lường những giải pháp thực tế để xem chúng có thực sự hiệu quả hay không.

5 nguyên liệu quan trọng trong món ăn UX

Tâm lý (Psychology)

Tâm lý người dùng khá là phức tạp. Nhưng bản thân bạn cũng như thế. Tuy nhiên đây cũng là lý do mà UXD phải gạt bỏ những định kiến và ý kiến của bản thân. Để làm được điều này, hãy tự hỏi:

  1. Đâu là lý do người dùng ở trang này lần đầu tiên?
  2. Việc này khiến họ cảm thấy như thế nào?
  3. Người dùng phải làm bao nhiêu hành động để có thứ họ muốn
  4. Nếu họ làm việc này lặp đi lặp lại thì sẽ tạo ra thói quen nào?
  5. Họ mong đợi gì khi click vào chỗ này>
  6. Bạn có cho rằng họ đã biết điều mà họ chưa từng học qua?
  7. Đây có phải hành động mà họ muốn làm lại lần nữa? Tại sao? Bao lâu một lần?
  8. Bạn có cân nhắc về nhu cầu và mong đợi của user, hay là của bạn?

Tính khả dụng (Usability)

Nếu tâm lý người dùng thuộc về tiềm thức thì tính khả dụng lại nghiêng nhiều hơn về ý thức, từ đó mang tính chủ quan hơn. Tính khả dụng đuợc tối ưu sẽ cho phép user thực hiện thao tác nhanh chóng, dễ dàng hơn.

Thiết kế (Design)

Tất nhiên là khái niệm “thiết kế” trong UXD thì sẽ không bay bổng so với designer khác. Với UX thì design là thiết kế nguyên lý hoạt động chứ không liên quan nhiều tới “phong cách” của designer.

  • User thấy nó như thế nào? Họ có tin tưởng ngay lập tức không?
  • Nó có chuyển giao được mục đích và chức năng mà không cần phải giải thích?
  • Nó có đại diện cho thương hiệu? Tổng thể mọi thứ có liên quan đến nhau?
  • Thiết kế này có huớng mắt người dùng tới đúng nơi chưa? Và làm sao bạn biết điều đó?
  • Các màu sắc, hình dáng, kiểu chữ giúp người dùng tìm thấy thứ họ muốn và cải thiện tính khả dụng của các chi tiết không?
  • Liệu những thứ click-được trông khác với những thứ không-click?
  Điều gì nói một trang web có UX tốt trên mobile

Copywriting

Sự thật là giữa nội sáng tạo nội dung (copywrite) cho thương hiệu với nội dung của UX thì hoàn toàn khác nhau. Nội dung của thương hiệu phục vụ cho hình ảnh và giá trị của công ty, còn UX thì cần phải rõ ràng, trực quan và đơn giản nhất có thể.

Phân tích (Analysis)

Theo mình, phân tích là điểm yếu của hầu hết UX Designer. Nhưng điều đó có thể cải thiện được. Phân tích là điều kiện chính để phân biệt giữa thiết kế UX với các thiết kế khác và là điểm mạnh riêng của ngành UX. Cho nên:

  • Bạn có đang sử dụng dữ liệu để chứng minh ý kiến mình đúng, hay rút ra kinh nghiệm cho bản thân mình
  • Bạn đang tìm kiếm ý kiến chủ quan hay sự thật chủ quan?
  • Bạn đã thu thập đủ thông tin để trả lời các câu hỏi trên chưa?
  • Bạn có biết vì sao người dùng làm vậy hay chỉ đang mô phỏng hành vi của họ?
  • Bạn sẽ đo luờng như thế nào? Bạn có đo lường đúng “đối tượng”?
  • Bạn có đang mong chờ một kết quả xấu luôn không? Tại sao không?
  • Bạn sẽ dùng những phân tích này để cải thiện chúng như thế nào?

Công việc của một UX Designer

Vai trò của một nhà thiết kế UX khá phức tạp và thử thách. Tùy vào công ty mà trách nhiệm của một UX designer cũng khác, tuy nhiên một team UX sẽ tập trung vào việc thiết kế và mô phỏng nên trải nghiệm người dùng thông qua informative architecture (cấu trúc thông tin), interaction design (thiết kế tương tác), information design (thiết kế thông tin) và visual design (thiết kế trực quan).

Một UX Designer sẽ “kinh” qua 6 công việc như sau:

Nghiên cứu sản phẩm (Product research)

Quá trình research sản phẩm sẽ bao gồm luôn việc nghiên cứu người dùng và nghiên cứu thị trường. Một thiết kế tuyệt hảo sẽ không thể thiếu buớc này vì chính nó sẽ giúp designer “né” những quan điểm cá nhân và đưa ra các quyết định dựa trên thông tin.

Product research sẽ giúp:

  • UX designers hiểu về người dùng: hành vi, mục đích, động lực và nhu cầu của họ.
  • UX designer có cái nhìn về các tiêu chuẩn trong ngành cũng như xác định cơ hội cho sản phẩm trong khu vực.

Tạo chân dung và kịch bản (Creating Personas and Scenarios)

Dựa trên kết quả của product research, bước tiếp theo chính là xác định nhóm key user và tạo nên chân dung đại diện.

ux là gì

Personas không phải là cái người dùng muốn mà là cái mà họ có. Personas tuy không có thật nhưng sẽ đại diện cho một nhóm có thật và những hành vi của họ.

Khi đã xác định được personas, việc tiếp theo là viết kịch bản, mô tả một ngày bình thuờng của một “persona”, tất nhiên sẽ bao gồm những website và app họ thuờng xuyên sữ dụng. Dù bạn đang thiết kế app hay website, bạn đang thiết kế sản phẩm mới hay build lại một sản phẩm sẵn có, cũng nên c6n nhắc những bước mà một user sẽ thực hiện khi tương tác với sản phẩm đó.

Kiến trúc thông tin (Information Architecture)

Sau khi hoàn thành research và tạo persona, tiếp theo bạn sẽ định hình Information Architecture – IA. IA có thể hiểu là cấu trúc của website, app hay các product cho phép người dùng biết họ đang ở đâu và các thông họ cần dựa trên vị trí hiện tại của họ. IA sẽ dẫn đến sự xuất hiện của navigation (điều huớng), hierachies () và categorization. Ví dụ như bạn phác thảo top-level meny giúp người dùng hiểu họ đang ở đâu trên 1 site, thì đó chính là IA.

Tạo bản phác thảo (Creating Wireframes)

Wireframe là phần thiết kế quen thuộc nhất đối với UX Designers, hiển thị từng bước hay màn hình ứng với mỗi tương tác của người dùng với sản phẩm. Các đặc điểm của wireframe có thể kể tới:

  • Là xương sống của một thiết kế sản phẩm – thường là huớng dẫn sử dụng khi quá trình development (phát triển) bắt đầu và hiển thị các phần quan trọng của sản phẩm cuối cùng.
  • Nên được dựng nhanh – có thể hiển thị các UI objects cơ bản thôi.
  • Ít khi được dùng trong quá trình kiểm thử sản phẩm.

Mô phỏng (Prototyping)

Dù chức năng nghe có vẻ tương đồng nhưng prototype và wireframe thực ra khác nhau vì chuyển tải nội dung và phục vụ mục đích khác nhua. Wireframe tương tự như dựng bản kiến trúc, còn prototype thì sẽ là bản mô tả chính xác của thành phẩm cuối cùng. Prototype thì sẽ:

  • Cho cảm giác thực nhất khi tương tác với sản phẩm.
  • Có thể dùng để user testing, cho phép người dùng trải nghiệm nội dung và thử nghiệm các loại tương tác giống với sản phẩm cuối cùng.

Thử nghiệm sản phẩm (Product Testing)

Testing là bước giúp designer tìm ra các vấn đề mà người dùng gặp phải khi tương tác với sản phẩm. Một trong những cách phổ biến nhất là designer có thể observe quá trình sử dụng của user, sau đó thu thập và phân tích các feedback và tạo ra UX tốt hơn.

Xem thêm 5 bước phát triển UX từ ý tưởng thành sản phẩm

Làm sao để trở thành UX Designer/UX Roadmap?

Bức hình dưới đây tổng hợp chi tiết những kỹ năng mà một newbie cần trau dồi để trở thành designer chuyên nghiệp. (Save về máy sau đó zoom in nhé)

UX là gì

ux là gì

Có 2 con đường dẫn đến cái đích là UX Designer:

  • Từ Graphic Designer: khác với các sản phẩm của graphic design, các sản phẩm UX không đòi hỏi sự sáng tạo quá nhiều. Với khả năng của mình, các graphic designer hoàn toàn có thể trau dồi thêm các kỹ năng thiết kế web, thiết kế app. Tuy nhiên, theo ý kiến của anh Lê Anh Quang (Head of UX/UI tại Be), các bạn có nền tảng graphic designer cũng cần trau dồi hơn kỹ năng lắng nghe, từ đó bỏ bớt cái tôi và đẩy cái ta lên.
  • Từ Developer: với lợi thế có sẵn, các bạn developer đã có khả năng phân tích vấn đề và đưa ra giải pháp. Song, cũng theo anh Quang, vì tính chất công việc nên các coder khá “hướng nội” nên một bạn developer sẽ cần trau dồi kỹ năng lắng nghe, vượt qua trở ngại “sống trong thế giới riêng” và trở nên hòa nhập hơn.

Tìm hiểu thêm những lời khuyên từ anh Quang tại đây.

Tài liệu hướng dẫn UX

  • 101 design ingredients to solve big tech problems của tác giả Eewei Chen

ux là gì

  • Lean UX: Applying Lean Principles to Improve User Experience của tác giả Jeff Gothelkf và Josh Seiden

UX là gì

  • Mapping Experience của tác giả James Kalbach

ux là gì

  • UX for beginners: A Crash Course in 100 Short Lesson của tác giả Joel Marsh

ux là gì

TopDev tổng hợp

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

Xem thêm các vị trí UX Designer hấp dẫn tại TopDev 

Big data là gì? Trò chuyện cùng CTO của Datamart Solutions để hiểu hơn về data

Big data là gì

Big data là gì? – Thực chất Big data có phải chỉ là câu chuyện của data? Trong mục chuyên gia nói kỳ này, cùng TopDev tìm hiểu về khái niệm Big data đã quá phổ biến trong làng công nghệ, và những công việc xung quanh một data scientist. 

Về khách mời Phạm Hoàng Việt

Người trả lời phỏng vấn là anh Phạm Hoàng Việt – CTO/CIO tại Datamart Solutions:

  • Founder của Datamart Solutions – một startup đã đoạt giải Quán quân startup Việt 2018 với giải pháp bán hàng đa kênh tự động PowerSell
  • Dành khoảng thời gian dài làm việc tại các tổ chức, trường đại học lớn tại Châu Âu.
  • Sau đó trở về Việt Nam và làm việc tại Lazada ở vị trí Data Scientist.

Việc làm tuyển Data Analytics nhiều ngành hấp dẫn

Anh có thể giới thiệu sơ về bản thân và công việc hằng ngày của mình tại Datamart Solutions được không?

Xin chào, mình là Việt, đồng sáng lập của Datamart Solutions, cùng với 3 người bạn nữa, trong đó có anh CEO là Bùi Hải Nam thì các bạn đã biết rồi. Hiện tại mình đang phụ trách mảng kiến trúc và định hướng công nghệ cho tổ chức.

Đó là về mặt chức danh. Còn công việc hàng ngày của mình thì không hoàn toàn theo chức danh này, mà nó theo một cái vai trò khác: nhà đồng sáng lập. Nó khác nhau ở chỗ là mình phải suy nghĩ khá nhiều về việc hôm nay phải làm gì để mang lại giá trị tốt nhất cho tổ chức, tất nhiên trong giới hạn về năng lực. Chính vì thế mà mỗi ngày của mình thì đều có thể khác nhau rất nhiều: lúc thì mình code, lúc thì thiết kế, lúc thì test, lúc thì vận hành monitor, lúc thì làm sản phẩm, lúc thì làm chiến lược.

Anh hãy chia sẻ thêm về hành trình của mình từ khi tốt nghiệp đến hiện tại?

Mình tốt nghiệp cuối 2014, và từ đó đến nay thì mình chỉ làm 2 công ty, là Lazada và công ty hiện tại. Thực ra là bọn mình đã có ý tưởng về Datamart từ trước đó, tuy nhiên khi tốt nghiệp ra thì bọn mình cũng cảm thấy chưa đủ năng lực cũng như thời cơ để khởi nghiệp nên quyết định đầu quân vào một môi trường khởi nghiệp hết sức mạnh mẽ như Lazada để học hỏi cũng như là tìm kiếm các cơ hội. Đến cuối 2016 thì cơ hội đến và bọn mình rời Lazada để lập ra Datamart, và một trong những khách hàng đầu tiên của bọn mình lại chính là Lazada. Và rồi sau đó khoảng 1 năm thì bọn mình chuyển hướng sang xây dựng Powersell, là một nền tảng giải pháp cho tập khách hàng vừa và nhỏ, tuy nhiên lại có nhiều tiềm năng hơn, và đó là các nhà bán hàng hàng trên thương mại điện tử và các trang mạng xã hội như Facebook hay Instagram. Hành trình đó bắt đầu từ giữa 2017 và đã trải qua vài phiên bản, hiện tại là v5.

Những chia sẻ thực tế về data tại Datamart

Trước đây anh là một CIO và hiện tại là CTO. Theo anh, công việc của 2 vị trí này khác nhau như thế nào tại một công ty chuyên về làm về data?

Như mình đã nói ở trên công việc chính của mình nó không phụ thuộc vào cái chức danh. Còn nói về sự khác nhau giữa CIO đối với CTO tuỳ thuộc rất nhiều vào hoàn cảnh mỗi tổ chức. Thông thường CIO tập trung vào xây dựng và vận hành các hệ thống thông tin nội bộ, còn CTO thì có 3 điểm chính. Thứ nhất về mặt đối ngoại là người phát ngôn về năng lực công nghệ của một tổ chức. Về mặt đối nội thì là người có tiếng nói quyết định về các chủ đề công nghệ bên trong tổ chức. Và điểm thứ ba, là nội tâm, tức là luôn luôn đặt câu hỏi cho bản thân về việc tìm kiếm những năng lực công nghệ có thể mang lại được giá trị giúp cho sự bền vững và phát triển của tổ chức. Và những cái này thì bất kể là công ty có làm về data hay không.

Datamart Solutions là gì? Những giải pháp đặc biệt của Datamart Solutions có thể kể đến?

    • Datamart là công ty cung cấp các giải pháp cho hệ sinh thái thương mại điện tử dựa trên nền tảng thu thập, lưu trữ và phân tích dữ liệu thị trường.
    • Thời kỳ đầu, đối tượng khách hàng của Datamart là bản thân các sàn thương mại điện tử. Họ cần một đối tác cho họ bức tranh toàn cảnh được cập nhật liên tục về thị trường, để có thể đưa ra những quyết định mang tính chiến lược về marketing và sales.
    • Sau đó, Datamart xây dựng giải pháp PowerSell để giúp đỡ các nhà bán hàng trên TMĐT (đặc biệt các nhà bán hàng trên đa kênh) có thể vận hành các gian hàng của họ một cách hiệu quả, nhanh chóng, và kinh tế.
    • Datamart cũng đang phát triển các giải pháp cho Brand, trong đó brand intelligence phân tích không những tình hình bên ngoài thị trường, như xu hướng tiêu dùng, mức độ cạnh tranh, mà còn tình hình nội tại, như hành vi khách hàng, các chỉ số kinh doanh của brand. Dữ liệu đến từ cả nguồn nội bộ lẫn dữ liệu public.

Anh hãy chia sẻ điều thú vị trong quá trình giải quyết bài toán của khách hàng.

big data là gì

Đôi khi những giải pháp ngờ nghệch và thô sơ lại làm nên kết quả tốt hơn là những suy nghĩ phức tạp. Đó là bài học về sự cân bằng giữa theo đuổi mục tiêu công nghệ và mục tiêu kinh doanh.

Liệu anh có thể chia sẻ một số sự thật thú vị về thị trường thương mại điện tử thông qua quá trình tiếp cận rất nhiều data? Lượng dữ liệu hiện có của Datamart Solution đã “nói” cho anh điều gì mà mọi người vẫn đang lầm tưởng về E-commerce?

    • Thực ra ngược lại, phần lớn kết quả phân tích lại có thể được lý giải bởi các sự kiện diễn ra trong xã hội.
    • Ví dụ như đợt COVID này, nhiều người nghĩ là trong khi cách ly thì mua sắm qua TMĐT sẽ tăng. Trên thực tế thì đúng là như vậy, bình thường thì mức tăng trưởng của TMĐT mỗi tháng là tầm 6-7%, tuy nhiên trong đợt COVID này thì mức tăng trưởng là tầm 14-15% một tháng. Mặc dù vậy thì nó cũng vẫn chưa được cao như mức kỳ vọng của nhiều người.
    • Ngoài ra thì trong đợt này thì lượng đặt hàng mua webcam tăng chóng mặt, thì có thể lý giải là do nhu cầu làm việc ở nhà. Tương tự như vậy là nhu cầu bao cao su.

Theo quan điểm của anh, Data là một nghề hay là kỹ năng? 

    • Mình không có quan điểm về việc data là nghề hay kĩ năng, vì đó là suy nghĩ mang tính áp đặt, gượng ép.
    • Data là một loại sở hữu có giá trị
    • Các công việc liên quan đến data trong cuộc sống hàng ngày của mình là một kĩ năng. Data chưa bao giờ là nghề của mình.

Liệu có vấn đề gì mà anh nhận thấy mọi người, đặc biệt là các bên truyền thông đang hiểu sai về data/big data hay không?

    • Có. Sự thật là big data thực ra không phải nói về data, mà là nói về cái thứ đằng sau nó, tức là công nghệ big data. Cụm từ này ám chỉ một xu hướng công nghệ mới có thể đáp ứng được tầm nhìn về việc xử lý một lượng dữ liệu, mà có thể lúc bắt đầu thì không đáng kể, như nó có tốc độ tăng trưởng bùng nổ mỗi ngày.
    • Sự bùng nổ này được thể hiện rõ ràng khi nhìn vào bản đồ công nghệ big data, chỉ trong hơn 15 năm đổ lại, đã có hàng trăm công nghệ big data mới ra đời. Chúng chủ yếu được phát triển song song bởi các tổ chức có nhu cầu xử lý dữ liệu, mà các công nghệ hiện có ở thời điểm đó không đáp ứng được.

big data

Những tranh cãi xung quanh khái niệm “Big data”

Quá trình từ việc khai thác data cho đến khi có thể đưa ra quyết định (decision-making) diễn ra như thế nào? Bao gồm những bước gì?

Chuẩn bị dữ liệu: vấn đề gì? Lĩnh vực nào? Cụ thể loại dữ liệu nào? Lấy từ đâu? Làm thế nào lấy?

    • Tổ chức dữ liệu: lưu trữ như thế nào? Loại bỏ những gì, giữ lại những gì? Sắp xếp thứ tự ra sao?
    • Phân tích và thể hiện dữ liệu: chuyện gì đã xảy ra trong quá khứ, đang xảy ra trong hiện tại, có thể xảy ra trong tương lai?
    • Make decision: thực hiện hành động gì? Thay đổi định hướng/chiến lược ra sao?

Theo anh thấy, những vấn đề và thách thức khi làm việc với data là gì?

    • Chủ yếu đến từ việc thiếu kiểm soát đối với nguồn cung cấp dữ liệu:
      • Nguồn cung không ổn định
      • Dữ liệu sai, thiếu, rác (do vô tình hay chủ đích)
    • Tính an toàn và riêng tư của đối tượng gắn với dữ liệu

Có rất nhiều tranh cãi về việc data thế nào mới có thể gọi là “big” (tầm cỡ Google, Facebook hay chính phủ Trung Quốc mới là đang sở hữu Big Data), vậy quan điểm của anh là như thế nào?

Nếu coi sở hữu là khả năng thu thập dữ liệu thì bất cứ business nào cũng có khả năng sở hữu big data. Còn nếu coi sở hữu là tạo ra dữ liệu từ nội tại, thì thông thường chỉ có các business nào phục vụ trực tiếp người tiêu dùng phổ thông, hoặc các tổ chức nghiên cứu các hiện tượng trong tự nhiên như vật lý, sinh học, thì mới tạo ra nhiều dữ liệu đến mức cần các công nghệ về big data. Nhưng dù là hiểu theo cách nào, thì không phải chỉ lớn cỡ Google, FB, hay các chính phủ mới sở hữu Big Data.

  Tổng hợp Cheat Sheets cho AI, Neural Networks, Machine Learning, Deep Learning và Big Data
  Những điều cần biết về nghề Data Analytics và Business Analytics

Theo anh liệu việc các startup sở hữu big data là “có khả thi” hay không?

Theo như cách hiểu của mình về big data như giải thích ở trên thì việc startup sử dụng big data là điều hết sức bình thường. Ví dụ: Datamart có giai đoạn thu thập đến trên 300 triệu mảnh dữ liệu mỗi ngày để xây dựng bức tranh toàn cảnh về thị trường, với tần suất cập nhật rất cao để phục vụ nhu cầu khách hàng lớn. Trên thực tế thì nhà đầu tư thường ít bác bỏ về câu chuyện sử dụng big data. Họ hay bác bỏ câu chuyện startup sử dụng AI hơn, và thực tế thì đúng là như vậy, vì hầu hết mọi người hiểu sai về AI, và đánh đồng nó với các phương pháp phân tích dữ liệu. (có thể giải thích thêm nếu cần).

Theo anh những ngành nào (như Ecommerce, fintech, banking…) và những nền tảng nào (như Facebook, Google,…) có tiềm năng khai thác được nhiều data giá trị nhất tại Việt Nam và trên thế giới thời điểm hiện tại?

Gần như bất cứ lĩnh vực nào bây giờ cũng sẽ hưởng lợi từ big data, vì đây là thời kỳ số hóa và bùng nổ về thông tin. Điều này đặc biệt đúng đối với các ngành phục vụ số đông, như bán lẻ, sức khỏe, du lịch, viễn thông, tài chính. Ngoài ra thì còn có một xu hướng nữa giữa các nền tảng sở hữu dữ liệu, đó là xu hướng hợp tác kết nối dữ liệu để tạo ra cái gọi là “customer 360”, tức là một bản thông tin hoàn chỉnh về một khách hàng, đến từ nhiều nguồn dữ liệu khác nhau thuộc nhiều lĩnh vực khác nhau có tương tác với khách hàng đó. Như vậy giá trị của dữ liệu càng được nâng cao, vì hiểu biết về khách hàng trở nên rõ ràng và chuẩn xác hơn, do được tổng hợp từ nhiều góc nhìn khác nhau.

big data là gì

Việc xây dựng một cấu trúc dữ liệu ở quy mô lớn và với tốc độ tăng trưởng nhanh sẽ có những khó khăn gì và đòi hỏi những khả năng gì để quản lý?

    • Về mặt kỹ thuật thì có thể dễ dàng tìm ra một số những quy chuẩn về nguyên tắc thiết kế một hệ thống như vậy. Ví dụ:
      • Đảm bảo không có tình trạng thắt cổ chai
      • Đối với các business hoạt động dựa trên các giao dịch, thì cần đảm bảo một số các tiêu chuẩn an toàn cho giao dịch như ACID. Những tiêu chuẩn này thì đã được thiết lập trên các CSDL riêng lẻ, nhưng khi nhìn toàn bộ hệ thống như 1 khối, thì đòi hỏi đội ngũ kỹ thuật phải tự thiết lập tiêu chuẩn này.
      • Giảm thiểu tối đa độ trễ trong truy xuất. Các hệ thống dữ liệu lớn thì thường có kiến trúc tương đối phức tạp (vì họ có nhiều cách sử dụng dữ liệu), với các tương tác đi qua nhiều modules, nên nếu không chặt chẽ về mặt kiến trúc thì sẽ dẫn đến độ trễ cao.
      • Các vấn đề về tính toàn vẹn của dữ liệu. Đối với dữ liệu lớn, bất cứ một thao tác backup hay recover, hay sửa chữa dữ liệu cũng có thể tốn hàng ngày, thậm chí hàng tuần.
    • Tuy nhiên vấn đề khó khăn nhất thực ra không phải là kĩ thuật, mà là tiền và thời gian. Đây thường là 2 yếu tố cản trở tầm nhìn của một hệ thống với quy mô lớn và tăng trưởng nhanh trong thời gian dài.

Làm thế nào để quản lý và phân loại để biết được những dữ liệu nào là bị “out-of-date”?

    • Bản thân dữ liệu thì không có sự lỗi thời hay không lỗi thời, mà sự lỗi thời nó chỉ xuất hiện khi dữ liệu được dùng để trả lời một câu hỏi/vấn đề cụ thể. Và muốn biết thì dựa trên sự thay đổi của câu trả lời theo thời gian.
    • Các hệ thống làm việc với dữ liệu gắn với thời gian thì thường có cơ chế archiving dữ liệu theo khoảng thời gian, để khi cần thì có thể lấy ra xử lý một cách hiệu quả.

Đối với dữ liệu phi cấu trúc (unstructured data) nói chung thì những khó khăn về mặt kỹ thuật thường gặp phải là gì?

    • Nhiều dữ liệu nên tốn chỗ chứa
    • Nhiều dữ liệu nên cơ chế post-processing sẽ chậm
    • Khó phân tích, phải sử dụng các phương pháp tách lọc phức tạp.

Developer lên trình về big data như thế nào?

Để theo đuổi các công việc về data thì theo anh cần có tố chất và kỹ năng như thế nào? Nên học những kiến thức nền tảng nào?

    • Hứng thú với số liệu
    • Khả năng xâu chuỗi và lập luận logic
    • Khả năng tìm kiếm thông tin trong dữ liệu
    • Về việc học, thì nói chung là có 2 kiểu học:
      • Học kiểu “ăn xổi”: tức là cứ nhè các công nghệ và công cụ phổ biến mà học. Kiểu này thì làm được việc ngay, đặc biệt là các vị trí fresh hoặc junior, hoặc trên đó một chút.
      • Học kiểu nền tảng:
        • Data engineer: học về cấu trúc dữ liệu, về các thuật toán lưu trữ, về hệ điều hành, về lập trình, về tối ưu hoá hệ thống. Nói chung cơ bản về khoa học máy tính. Sau đó mới học đến các công nghệ thịnh hành.
        • Data analyst thì học về kinh doanh, kinh tế, cơ bản về xác suất, thống kê. Sau đó thì học cách sử dụng các công cụ trình bày dữ liệu như Excel hay PowerBI
        • Data scientist thì học chuyên sâu về toán (giải tích và đại số tuyến tính hoặc phi tuyến tính), xác suất thống kê, machine learning. Sau đó thì học cách sử dụng các công nghệ, công cụ phân tích và hiển thị dữ liệu. Xu hướng hiện nay có khá nhiều bạn học làm data scientist theo hướng này nhưng chỉ chú trọng vào những thứ thời thượng như deep-learning. Đây cũng là một lựa chọn, tuy nhiên các bạn này về sau sẽ thiếu hẳn một kỹ năng, là tóm tắt và truyền tải thông điệp từ dữ liệu ra ngôn ngữ kinh doanh. Năng lực này thường có ở những người giỏi về xác suất thống kê và một số các thuật toán machine learning cổ điển.

Làm về data có rất nhiều vị trí và chuyên môn khác nhau, các vị trí liên quan đến ngành data và các giai đoạn phát triển của từng vị trí là gì? 

Về giai đoạn phát triển thì mình không đủ kinh nghiệm để chia sẻ. Tuy nhiên mình có lời khuyên là không nên đóng khung mình vào một con đường phát triển sự nghiệp nào cả, vì nó sẽ trở thành gánh nặng cản trở. Thế giới thay đổi từng ngày, cơ hội mới đến, cơ hội cũ ra đi liên tục. Chỉ cần luôn có tinh thần học hỏi, cầu tiến, và có sự cân bằng giữa năng lực và sở thích/đam mê, thì sự nghiệp tự nó sẽ phát triển.

Cảm ơn anh Việt đã mang đến những chia sẻ mới mẻ và đa dạng về khía cạnh Big Data. Hy vọng qua bài phỏng vấn này, các bạn độc giả sẽ hiểu hơn cái thú vị khi làm việc với dữ liệu, cũng như thu thập cho mình một số kinh nghiệm, lời khuyên khi theo đuổi công việc Data Engineer.

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

Xem thêm cơ hội việc làm IT hấp dẫn tại TopDev

5 trang web, nguồn học thuật toán chất lượng để bạn luyện “lên cơ”

web frontend

Yêu thì cần phải nói, cũng như đói cần phải ăn, muốn giỏi lập trình thì nên biết về thuật toán, đơn giản thế thôi các bạn ạ! Bài viết này gửi đến các bạn 5 trang web, nguồn học thuật toán hữu ích để luyện trong lúc hơi rảnh rỗi như này.

  Thuật toán, tính chất và ý nghĩa đặc biệt của thuật toán

Tiêu chí mình sắp xếp trang web đi từ lý thuyết đến thực hành

Exercism.io

nguồn học thuật toán

Exercism.io là bước khởi đầu để bạn học thuật toán, trang không chuyên về thuật toán nhưng chuyên về cách dùng ngôn ngữ lập trình. Đây là một nguồn học thuật toán khá thú vị để bạn học thêm một ngôn ngữ mới. Bạn cũng có thể vừa làm vừa xem bài giải của người khác nhưng hãy vững tâm không để “sách giải” làm sa ngã nhé

Sau khi thành thạo về ngôn ngữ lập trình thì mình đến với muc tiêu chính của bải viết này, học thuật toán.

Geekforgeeks

Giới thiệu với các bạn trang web Geekforgeeks chuyên về thuật toán đây, trong đây có ty tỷ bài tập. Không chỉ có bài tập để luyện mà mỗi bài tập lại gồm nhiều cách giải khác nhau, đi kèm với độ phức tạp của mỗi người giải, tuy rất hay và bổ ích nhưng bạn hãy tỉnh táo, đừng bơi trong đây nhé! Có một điểm trừ nhỏ là bài tập không phân loại nên bạn sẽ phải chịu khó tìm kiếm bài tập phù hợp với mục tiêu của mình.

Bên cạnh đó, cũng có một trang để bạn vừa học lý thuyết, vừa thực hành về thuật toán, nhưng theo mình đánh giá thì luyên trang này sẽ giúp bạn “lên cơ” về thuật toán hơn.

Leetcode

web học thuật toán

Leetcode cũng như Geekforgeek vậy, nhưng có ưu điểm hơm là được phân hóa rõ ràng về mức đọ, có 3 mức độ khó dễ khác nhau. Có chuyện ngộ nghĩnh, tuy là easy nhưng lâu lâu cũng gặp phải bài khó nhai lắm :))

Trang web này cũng được những ông lớn công nghệ lựa chọn để test trình độ ứng viên, chịu khó làm những bài tập trong này biết đâu được khi apply, bạn trúng tủ.

Trang web này cũng có một điểm cộng là nó đo performance/runtime code của bạn, rồi so sánh với người khác, đánh giá xem code của bạn có optimize được không hay chưa tối ưu chỗ nào. Tính ra cứ như đường đua ấy nhỉ, việc so sánh này có thể lúc đầu bạn sẽ cảm thấy hơi khó chịu, nhưng mình thấy nó cũng có lợi lắm, giúp mình yếu chỗ nào để cải thiện hơn, và “chạy nhanh hơn”.

Học hành thì 3 trang web trên đã giải quyết cho các bạn, nhưng biết đâu được một ngày các bạn hết hứng không học nữa thì trang web tiếp theo sẽ giúp nhắc nhở các bạn luyện tiếp.

Daily Coding Problem

Tên gọi Daily Coding Problem cũng đã miêu tả đầy đủ chức năng của trang web này rồi. Khác với những trang trên, trang này không có danh sách bài tập, bạn đăng kí email và mỗi ngày trang web sẽ gửi bạn 1 bài, nên dù bạn có lỡ lười thì bạn cũng không trốn đi được :))). Khi bạn dùng gói premium thì sẽ được gửi kèm lời giải.

Hackerrank 

web hoc thuật toán

Trùm cuối xuất hiện đây, lý do mình để Hackerrank cuối cùng là vì nơi đây bạn có thể tìm kiếm nhà tuyển dụng mơ ước. Trang này chắc không ai mà không biết nhỉ, từ junior cho đến senior, từ developer cho đến tuyển dụng.

  HackerRank là gì? Lời khuyên khi tham gia HackerRank

Trang này cũng chia mức đô easy/medium/hard. Có cái rất tiện của trang này đó là bạn viết code, cho chạy trực tiếp và xem kết quả được luôn, nếu giải không được, không biết fix sao thì có mục dicussion, bạn vào đó xem lời giải. Trang này cũng được các nhà tuyển dụng lấy làm công cụ test trình độ ứng viên đó!

Thế là mình đã đi qua 5 trang web giúp các bạn luyện thuật toán. Đây là source mình hay dùng, các bạn có trang nào hay và hữu ích thì góp vui cùng TopDev tụi mình nha!

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

Xem thêm việc làm developer tại TopDev

Bí quyết phát triển hoạt động nhân sự qua email (Email Marketing) hiệu quả – Bạn đã biết?

Email Marketing

Trong nghiên cứu thị trường Nhân sự, nhiều nhà quản lý cho rằng tuy việc thu hút các khách hàng tiềm năng là điều quan trọng với doanh nghiệp, nhưng trên thực tế, việc giữ chân người tiếp cận lâu hơn lại có ý nghĩa lớn đối với sự phát triển chung của tổ chức. Trong nghiên cứu mới nhất từ trang Emaketer, 80% nhà cung cấp các dịch vụ cho rằng tiếp thị qua email (Email Marketing) là một chiến lược tốt nhất để giữ chân khách hàng, đồng thời xem xét nó với tư cách là một phương tiện truyền thông xã hội giúp định hình và phát triển các chiến lược quan trọng. Cùng TopDev tìm hiểu những bí quyết giúp tối ưu hóa quy trình hoạt động của doanh nghiệp thông qua Email Marketing.

“Cá nhân hóa” email & Xác định đúng phân khúc thị trường  

Không giống như một tấm bảng quảng cáo đơn thuần được trưng diện cho người tiếp cận, email marketing là một chiến lược quan trọng và vì thế, nó cần phải đạt mục tiêu khi đã được đề ra. Email Marketing

Với đặc điểm này, email marketing hoàn toàn phù hợp, là sự lựa chọn hoàn hảo cho phân khúc tiếp thị. Nói một cách dễ hiểu, tức là bạn có thể điều chỉnh thông điệp của mình theo đối tượng.

Email Marketing cho phép tạo ra sự đột phá trong tiếp cận các đối tượng chuyên môn tùy thuộc vào nguồn dữ liệu và những hiểu biết của bạn về nguồn dữ liệu đó.” Chính hiểu biết về dữ liệu, lấy ví dụ về nguồn dữ liệu của một nhóm người thuộc lĩnh vực nhân sự, bạn nắm bắt được những thông số, đặc tính, sự tương tác theo các quỹ thời gian của họ. Chính sự hiểu biết đó sẽ giúp bạn xác định rõ phân khúc đối tượng đồng thời tối ưu hóa những thông điệp truyền tải một cách phù hợp nhất, đúng thời điểm nhất.”

Tiêu chí phân khúc bổ sung có thể được đánh giá dựa trên vị trí địa lý, độ tuổi, trình độ học vấn, chức năng công việc, khả năng chuyên môn, tính cách và sự tương tác với các chiến dịch nhân sự trong quá khứ. Nắm bắt rõ những yếu tố này, bạn sẽ dễ dàng trong cách phân đoạn danh sách email. Tuy nhiên, điều này còn phụ thuộc nhiều vào nhu cầu doanh nghiệp hoặc chính yêu cầu của các đối tượng cụ thể trong ngành nhân sự.

Những cách thức tiếp cận giúp phát triển phân khúc thị trường

Email Marketing

Câu hỏi của người đăng ký: Câu hỏi được xem là một công cụ tạo ra sự tương tác với những người tiếp cận tiềm năng. Chúng cũng là một cách dễ dàng để người đăng ký của bạn xác định những gì họ quan tâm nhất.

Phân khúc hành vi: Phân khúc hành vi hoạt động theo cùng một cách, nhưng theo cách có thể mở rộng và có giá trị cho doanh nghiệp của bạn. Để thực hiện điều này một cách hiệu quả, bạn sẽ cần tích hợp dịch vụ tiếp thị email của bạn với trang web hoặc nền tảng các sản phẩm về nhân sự có liên quan đến doanh nghiệp. Có thể sau những thử nghiệm ban đầu, bạn sẽ biết được họ yêu thích những bài viết có cấu trúc và hình thức truyền tải như thế nào cho phù hợp. Tiếp đến là tập trung đến những biểu hiện về hoạt động, tương tác hành vi của người tiếp cận, xem xét lựa chọn nội dung và những thời điểm thích hợp để tạo ra số lương quan tâm lớn.

Khảo sát chọn tham gia: Bạn có muốn biết những người đăng ký email của bạn đam mê hoặc tò mò về điều gì không? Chỉ cần hỏi họ. Khi bạn cung cấp một món quà chọn tham gia, thật dễ dàng để thêm một bản khảo sát ngắn cho phép người đăng ký cho bạn biết thêm một chút về bản thân họ. Ngay cả một câu hỏi đơn giản như “Bạn đam mê điều gì nhất?” có thể mang lại vô số thông tin.

Quản lý phân tích thông điệp cần truyền tải

Việc quản trị nội dung thông điệp là điều rất quan trọng. Nó bao gồm nhiều yếu tố như quản trị về cách trình bày email, nội dung thông điệp cần truyền tải, thời gian tạo và gửi thông điệp.

Email Marketing

Trong đó, trước hết phải kể đến chủ đề email. Hãy chú trọng vào nó vì chủ đề là cái quyết định cảm nhận đầu tiên của người xem. Tất nhiên, một email với chủ đề tạo ra sự tò mò chắc chắn sẽ khiến họ thích thú để đọc email của doanh nghiệp bạn. Ngoài ra, thông điệp email cũng rất quan trọng. Một email tinh tế và dễ tiếp cận là một email không quá nhiều thông tin, không rườm rà và thiếu logic trong cách sắp xếp nội dung theo trình tự. 

Đừng làm phức tạp email của bạn. Hãy thông tin một cách ngắn gọn, súc tích nhưng vẫn phải đảm bảo độ chính xác những gì bạn muốn nói theo cách sẽ thu hút độc giả. 

““Thay vì bao gồm một số bài viết dài sẽ khiến độc giả mất nhiều thời gian để đọc qua, hãy viết ngắn gọn và thông minh, khéo léo hơn khi chèn thêm một liên kết đến blog của bạn, nơi họ có thể đọc thêm. Đồng thời bà cũng nhấn mạnh, một nguyên tắc nhỏ là nếu email của bạn phải mất nhiều hơn hai đến ba phút để đọc thì chúng dường như bị lãng quên.”

Chia sẻ của Emily Sidley, Giám đốc tiếp thị và PR của Three Girls Media Inc.

Thời gian tốt nhất để gửi email tiếp thị phụ thuộc vào đối tượng của bạn. Bạn phải dự đoán hoặc có một vài cuộc thử nghiệm về email để có thể đưa ra những dự đoán tương đối về những thời điểm này có thể sẽ mang lại hiệu quả cao về kết quả. Tuy nhiên, để có kết quả tối ưu, vẫn rất cần nghiên cứu danh sách email và phân tích chiến dịch một cách cụ thể. 

Lời kết cho Email Marketing

Email Marketing giúp doanh nghiệp tối ưu hóa hiệu quả tiếp cận, có vai trò lớn trong việc đưa thông điệp của doanh nghiệp đến gần hơn với những đối tượng phù hợp. Không còn đơn thuần là chú tâm đến một cái nhấp chuột, việc quản trị tiếp thị qua email giờ đã được tích hợp nhiều tính năng khác do sự hội nhập trong thời đại kỹ thuật số. Đây được xem là tín hiệu đáng mừng và tùy vào từng tổ chức, email marketing sẽ được thể hiện nhiều hình thức khác nhau.

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

Xem thêm việc làm Developers hàng đầu tại TopDev

10 câu hỏi javascript để nâng cao trình độ

10-cau-hoi-javascript-nang-cao-trinh-do
Bài viết được sự cho phép của tác giả Lưu Bình An
10 câu hỏi javascript lắc léo sau đây sẽ giúp bạn ôn luyện kiến thức ngôn ngữ “lâu năm” này đấy. Đừng coi thường nhé! 10 câu hỏi javascript này sẽ cho bạn thấy nền tảng về Java của bạn đến đâu và giúp bạn nâng cao trình độ hiện tại đây!
Bắt đầu cho 10 câu hỏi javascript “siêu đỉnh” nào:

1. So sánh sort của Array

Bạn đã biết Array là gì? Array được hiểu là mảng – là tập hợp những phần tử có cùng 1 loại dữ liệu (có thể khác giá trị) và phải có địa chỉ nối tiếp nhau trong Memory. Lưu ý, kích cỡ của Array là cố định, người dùng không thể thay đổi lớn nhỏ kích thước Array.

Giá trị log ra là gì

const arr1 = ['a', 'b', 'c'];
const arr2 = ['b', 'c', 'a'];

console.log(
    arr1.sort() === arr1
    arr2.sort() == arr2
    arr1.sort() === arr2.sort()
);

Trước tiên chúng ta cần biết hàm sort nó làm cái gì, nó sắp xếp lại các phần tử, hiển nhiên, sau đó trả về cho tham chiếu ban đầu, không thay đổi tham chiếu gốc.

Đáp án: true, true, false

  6 Javascript destructuring tricks
  1001 cách tạo Array trong Javascript (Phần 1)

2. Set của các Object

Nếu có một Set bao gồm các object sau, giá trị log ra là gì

const mySet = new Set([{ a: 1 }, { a: 1 }]);
const result = [...mySet];
console.log(result);

Khi tạo một object Set nó sẽ xóa các giá trị trùng nhau, tuy nhiên { a: 1} # { a: 1}, dù là giá trị trùng nhau, nhưng nó vẫn tham chiếu khác nhau. Chỉ khi chúng ta viết như bên dưới nó mới tự xóa giá trị trùng

const obj = { a: 1 };
new Set([obj, obj]);

Đáp án [{a: 1}, {a: 1}]

3. Mutate một object

Với đoạn code sau, kết quả log ra sẽ được gì

const user = {
  name: 'Joe',
  age: 25,
  pet: {
    type: 'dog',
    name: 'kitty kitty'
  }
};
Object.freeze(user);
user.pet.name = 'meo meo';

console.log(user.pet.name);

Object.freeze chỉ thực hiện freeze level 1 của object, nếu có mutate những level thấp hơn, vẫn được như thường.

Đáp án: meo meo

4. Prototype inheritance

Chúng ta có một constructor function Dog. Giá trị log sẽ là gì

function Dog(name) {
  this.name = name;
  this.speak = function() {
    return 'woof';
  };
}

const dog = new Dog('Pogo');

Dog.prototype.speak = function() {
  return 'chihuahua';
};

console.log(dog.speak());

Khi chúng ta new Dog, chúng ta đã gán giá trị cho speak là một function trả về woof. Phương thức speak bên dưới sẽ không bao giờ được gọi.

Đáp án: woof

  Câu chuyện xử lý bất đồng bộ trong Javascript (phần 2)
  Giới thiệu typeof trong Javascript cho người mới bắt đầu

5. Thứ tự resolve Promise.all

Chúng ta có một hàm timer trả về một Promise sẽ được resolve sau một khoảng thời gian ngẫu nhiên. Chúng ta dùng Promise.all để resolve toàn bộ array timer. Giá trị log ra là gì, hay là giá trị ngẫu nhiên?

const timer = (a) => {
  return new Promise((res) =>
    setTimeout(() => {
      res(a);
    }, Math.random() * 100)
  );
};

const all = Promise.all([timer('first'), timer('second')]).then((data) =>
  console.log(data)
);

Thứ tự resolve không quan trọng với Promise.all, chúng ta có thể hoàn toàn tin tưởng thứ tự trả về sẽ đúng với thứ tự chúng ta khai báo.

Đáp án: first, second

6. Tính toán với reduce

Giá trị log ra sẽ là?

const arr = [(x) => x * 1, (x) => x * 2, (x) => x * 3, (x) => x * 4];

console.log(arr.reduce((agg, el) => agg + el(agg), 1));

Với Array.reduce được truyền vào giá trị khởi tạo là 1 (cho biến agg), chúng ta loop qua các hàm trong mảng theo thứ tự

1 + 1 * 1 = 2
2 + 2 * 2 = 6
6 + 6 * 3 = 24
24 + 24 * 4 = 120

Đáp án: 120

7. Điều kiện rút rọn (short-circuit)

Kết quả log ra là…

const notifications = 1;
console.log(
  `You have ${notifications} notifications${notifications !== 1 && 's'}`
);

Cầu điều kiện rút gọn notifications !== 1 && 's' sẽ return false (dạng chuỗi). Chúng ta phải viết là notifications !== 1 ? '' : 's'

Đáp án: You have 1 notificationfalse

8. Spread và Rename

Chuyện gì xảy ra khi chúng ta spread mảng ra và thay đổi giá trị của object đầu tiên

const arr1 = [{ firstName: 'luckyluu' }];
const arr2 = [...arr1];
arr2[0].firstName = 'vuilaptrinh';

console.log(arr1);

Spread chỉ tạo một shallow copy, nghĩa là object bên trong mảng ban đầu cũng chỉ tham chiếu đến arr1, nên thay đổi giá trị này từ arr2 sẽ ảnh hưởng đến arr1

Đáp án: vuilaptrinh

9. Binding cho phương thức Array

Kết quả log ra là gì

const map = ['a', 'b', 'c'].map.bind([1, 2, 3]);
map((el) => console.log(el));

Khi gọi ['a','b','c'].map nó sẽ gọi Array.prototype.map với giá trị this là ['a','b','c']. Tuy nhiên khi sử dụng như một tham chiếu, thay vì gọi, nó trỏ đến Array.prototype.mapbind sẽ đặt giá trị this này thành [1,2,3]

Đáp án: 1 2 3

10. Đặt Unique và sắp xếp ( câu hỏi cuối trong list 10 câu hỏi javascript)

Trong code ở dưới chúng ta dùng object Set và spread để tạo một mảng mới. Giá trị log ra là gì ( những phần tử có bị force thành unique? chúng có được sắp xếp không?)

const arr = [...new Set([3, 1, 2, 3, 4])];
console.log(arr.length, arr[2]);

Set sẽ force các phần tử thành unique, trung nhau sẽ bị bỏ qua, nhưng không thay đổi thứ tự. arr sẽ có giá trị [3, 1, 2, 4]

Đáp án: 4 2

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

Có thể bạn muốn xem thêm:

Xem thêm việc làm Javascript tại TopDev!

Này, lập trình viên, bạn đã có Vịt cao su chưa?

nay-lap-trinh-vien-ban-da-co-vit-cao-su-chua

Liệu bạn có biết rằng, ngày nay, Vịt cao su là một phương  pháp debug hữu hiệu và thời thượng dành cho giới lập trình trên toàn thế giới. Điều thú vị ở chỗ, đây hoàn toàn không phải là một câu chuyện đùa. Cùng đọc tiếp nhé 😉

 

Lần đầu tiên khái niệm “Rubber Duck Debugging” xuất hiện là ở trong cuốn “The Pragmatic Programmer” của Andy Hunt and David Thomas. Cụ thể là như thế này:

Bản chất của phương pháp Debugging với Vịt cao su là bạn mua (hoặc thuê) một chú Vịt cao su về, để trên bàn ở nơi trang trọng nhất, và giải thích một cách ngắn gọn và dễ hiểu từng dòng một trong đoạn code của mình với nó. Và rồi BOOM!, điều kì diệu sẽ xảy ra, mọi vấn đề dường như sáng tỏ và việc debug chỉ nằm trong bàn tay bạn. Nghe tưởng vô lý, nhưng trên thực tế, nó có cả lý giải đầy tính khoa học hẳn hoi.

Lời giải thích cho phương pháp này nằm ở quá trình bạn biểu đạt vấn đề của mình một cách rành mạch, dễ hiểu cho một đối tượng không có chút hiểu biết nào về những việc bạn đang làm. Quan trọng là trong quá trình ấy, bạn sẽ phải huy động mọi giác quan bao gồm: mắt để nhìn, miệng để nói, não bộ để sắp xếp các suy nghĩ trong đầu. Việc này sẽ giúp cho bạn dễ dàng tìm thấy những lỗ hổng trong mạch tư duy mà có thể bạn chưa bao giờ nhìn ra, và tìm được giải pháp đơn giản nhất để giải quyết chúng.

Việc giải thích code cho một chú Vịt cao su, về mặt bản chất, chẳng khác gì việc bạn viết note khi học thuộc lòng, hay giảng bài cho người khác khi muốn củng cố lại kiến thức của mình. Tất cả đều có điểm chung là cố gắng vận dụng nhiều nhất các giác quan có thể để hỗ trợ quá trình tư duy và giải quyết vấn đề.

Nhưng tại sao lại là Vịt cao su? 

Đến đây thì nên nhắc tới tính cách đặc trưng của anh em Dev một chút. Dĩ nhiên, nếu chỉ là tìm một đối tượng không hiểu biết gì về code để áp dụng phương pháp “ồn ào” này, thì đâu có thiếu?

– Một cô nàng ư? – Dev nào mà lại dám ngồi đàm đạo về code với gái cơ chứ?

– Bố mẹ hay bạn bè? – Ai sẽ có thời gian và kiên nhẫn cơ chứ? Liệu họ hỏi lại có phải là mất công để giải thích không?

– Một chú cún? – Quá ồn ào

– Một chú mèo? – Quá thiếu sự tập trung

– Một chú chim? – Quá phiền hà

vân vân và mây mây…

Vậy thì cái gì đáng yêu, tích cực và tập trung tuyệt đối vào những gì mình nói hơn là một chú Vịt cao su xinh xắn nằm gọn ở góc bàn, như một người chiến hữu cơ chứ 😉


Những mẩu chuyện hài hước xung quanh Rubber Duck Debugging:

1. Quack (Overflow)! 

Vào ngày 1.4.2018, trên Stack Overflow xuất hiện một popup của người trợ lý Vịt cao su, luôn luôn lắng nghe, lâu lâu mới hiểu vấn đề mà bạn gặp phải với code của mình. 

Quack Step 2

 

Nó thậm chí còn khuyến khích dev chia sẻ suy nghĩ của mình, lắng nghe rất chăm chú và phản hồi vô cùng tận tâm.

No need of Mic

 

QuackBạn còn chờ đợi gì hơn ở phản hồi từ một chú vịt cao su chứ? :v

2. Mua Debugging Vịt cao su: 

Nếu bạn thật sự nghiêm túc về công việc của mình, hãy thuê/mua những chuyên gia có trình độ “đại học” để tư vấn về code cho mình nhé. Ở đây người ta có bán những chú Vịt cao su với rất nhiều chuyên ngành phong phú cho các anh em lựa chọn.

3. Những chú Vịt Online

Có riêng một trợ lý Vịt dĩ nhiên là rất tốt rồi, nhưng nếu bạn chưa có tiền để thuê chú trợ lý này thì sao? Đừng lo nhé, vẫn có những trợ lý ảo sẵn sàng “Quack! Quack!” vì bạn. 

Vậy thì, sau khi đọc bài viết này, bạn đã sẵn sàng để tậu một chú Vịt cao su chưa? 😉

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

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

TopDev via Spiderum

  Quy tắc 24x3 cho sáng tạo trong lập trình!
  12 nguyên tắc làm lập trình của Joel để tạo nên phần mềm tốt hơn

Khan hiếm lập trình viên làm việc tại Nhật, nhà tuyển dụng chấp nhận tuyển cả IT không biết tiếng Nhật

Khái niệm “hệ thống nhúng” (embedded system) mới “hot” ở Việt Nam một vài năm trở lại đây, và được dự báo sẽ làm nên làn sóng đổi mới thứ ba trong sự phát triển công nghệ thông tin và cơ hội làm việc – tuyển dụng IT đi Nhật cho cộng đồng developer tại Việt Nam.

Theo ước tính của các chuyên gia, đến năm 2020, hệ thống nhúng toàn cầu sẽ đạt doanh số là 8 tỷ đô-la Mỹ. Sự xuất hiện ngày càng nhiều các đối tác lớn trong lĩnh vực này tại Việt Nam, đã mở ra một hướng đi mới cho những ai đi theo con đường học lập trình nhúng. Ngoài ra, cơ hội việc làm IT cho người Việt cũng có thể lên đến gần 200 triệu đồng/ tháng, theo chuyên trang IT Techtalk.

Tuy nhiên, hiện nay tại Việt Nam, có khá ít các trường đại học đào tạo lập trình nhúng, nhưng nhu cầu nhân lực cho ngành này rất lớn và đang thiếu hụt nghiêm trọng.

Trong buổi phỏng phỏng vấn gần đây với TopDev, anh Nguyễn Trường Sơn – Giám đốc nhân sự của NATAES – công ty chuyên cung cấp lập trình viên nhúng cho thị trường Nhật Bản chia sẻ:

“Không như ở lĩnh vực phần mềm đơn thuần, một nhân viên mới vào nghề chỉ cần từ ba đến sáu tháng huấn luyện là đã có thể làm tốt công việc được giao. Còn trong ngành gia công phần mềm cho hệ thống nhúng, một nhân viên mới cần ít nhất sáu tháng đến một năm để có thể bắt đầu làm việc có hiệu quả, và cần tới năm năm mới có thể làm việc thành thạo. Việc tuyển người và đào tạo đã khó, việc giữ người lại càng khó hơn.

Đặc thù của ngành này là đòi hỏi nhân viên phải có sự kiên trì và bền bỉ để nắm bắt những kiến thức cần thiết, đồng thời cần một thời gian khá dài mới có thể thấy được thành quả. Đó là lý do tỷ lệ chuyển và nghỉ việc trong lĩnh vực này là khá cao”.

Xem thêm Các vị trí IT Nhật đang tuyển TẠI ĐÂY

Câu chuyện tuyển dụng IT đi Nhật – Khan hiếm lập trình viên & chấp nhận không có ngôn ngữ

Hệ thống nhúng tại Việt Nam mới chỉ có những bước đi chập chững ban đầu, vì vậy rất hiếm (gần như là không có) sản phẩm nào hoàn toàn “Made in Vietnam” . Đa phần, ở Việt Nam chỉ làm những công việc đơn giản như gia công cho công ty nước ngoài. Một hướng đi khác cho lập trình viên nhúng Việt Nam hiện nay là làm cho các công ty nước ngoài: Mỹ, châu Âu và đặc biệt là Nhật Bản – thị trường đang có nhu cầu lập trình nhúng khá cao, và có nhiều điểm tương đồng về căn hóa với Việt Nam, vì thế không ít nhà tuyển dụng it đi nhật xuất hiện tại thời điểm này.

Trở thành lập trình viên nhúng tại Nhật cần những gì?

Kiến thức lập trình:

  1. Lập trình C, C++ (Xem ngay hướng dẫn tự học C/ C++)
  2. Tiếng anh (Ít nhất bạn phải đọc được tài liệu chuyên ngành kĩ thuật, nhất là datasheet)
  3. Kiến thức về điện tử
  4. Các loại giao tiếp (protocol)
  5. Hệ điều hành: kiến trúc hệ điều hành, kiến trúc máy tính, nhất là hệ điều hành linux.
  6. Cấu trúc dữ liệu và giải thuật:
  7. Memory: NOR, NAND, SRAM, DRAM, vv.
  8. Hệ điều hành thời gian thực (Real time OS).
  Tìm hiểu về HTTP (HyperText Transfer Protocol)
  Học lập trình thế nào để không thất nghiệp?

Kỹ năng mềm:

Theo anh Sơn cho biết: khi làm việc tại Nhật đôi khi yếu tố về kiến thức lập trình chưa phải là yếu tố quyết định, mà còn là về thái độ làm việc :

  • Trung thực : Đánh giá đúng năng lực của mình, và khả năng làm việc được tới đâu
  • Thái độ làm việc: Chuyên nghiệp, đảm bảo đúng kế hoạch đề ra và nổ lực 100% cho công việc
  • Kiên trì: Trong công việc đôi khi không phải là học nhiều có thể làm tốt mà còn cần có thời gian để trải nghiệm và tích lũy kinh nghiệm, đặc biệt trong lĩnh vực khó như lập trình nhúng

Tiếng Nhật:

Làm việc tại Nhật thì yêu cầu tiếng Nhật là điều tất yếu, nhưng khi tuyển dụng it đi nhật với đặc thù thị trường nhân lực lập trình viên lập trình nhúng là rất khó tìm, nên nhiều công ty Nhật chấp nhận cả những lập trình viên không biết tiếng Nhật sang làm việc. Anh Sơn cho biết thêm:

“NATAES với kinh nghiệm nhiều năm tuyển dụng lập trình viên nhúng cho thị trường Nhật Bản, hiện nay nhiều công ty Nhật chấp nhận tuyển cả những lập trình viên mà không cần tiếng Nhật, yêu cầu tiếng Anh cũng chỉ cẩn ở mức giao tiếp được, đọc hiểu được vẫn có cơ hội sang Nhật làm việc và phát triển ở Nhật.”

tuyển dụng it đi nhật

Bên cạnh đó, khi tuyển dụng it đi nhật thì chúng tôi còn nhận ra rằng, lập trình viên Việt Nam khi sang Nhật còn được các công ty đối tác của NATAES hỗ trợ các chi phí thủ tục xuất cảnh, NATAES cũng tổ chức các buổi training về kỹ thuật để hỗ trợ cho các bạn lập trình viên những sự chuẩn bị tốt nhất trước khi sang Nhật. Ngoài ra, vì lập trình viên được ký hợp đồng trực tiếp với bên công ty của Nhật nên gần như mọi chế độ, ưu đãi đều được hưởng như những lập trình viên bản sứ. Anh Sơn cũng nhận định: “Hiện tại thị trường còn đang khan hiếm nguồn nhân lực thì đây là cơ hội lớn cho những lập trình nhúng Việt vươn ra thị trường việc làm tại Nhật Bản.”

Xem thêm các cơ hội việc làm IT tại Nhật tại TopDev

  Những nguyên tắc, định luật của lập trình mà chúng ta nên có sẵn trong đầu
  6 điều tôi vỡ lẻ khi tự học code (P1)

React hook là gì và lợi ích mà React hook đem lại

react-hook-la-gi-va-loi-ich
Bài viết được sự cho phép của tác giả Lưu Bình An
React hook là gì và lợi ích mà react hook đem lại là chi, mà thiên hạ cứ rần rần lên vậy? Qua bài viết này chúng ta sẽ cùng trả lời 2 câu hỏi bạn cần đặt ra khi tiếp cận một đồ chơi mới như React Hook
  1. Tại sao React hook lại tồn tại trên trái đất này?
  2. React hook tồn tại trên trái đất này có lợi ích gì không?

Lịch sử

Tháng 5, 2013

Nếu bạn còn nhớ về cách viết một component trong React bằng React.createClass, chứng tỏ bạn đã là già làng trong React, ngày mới ra đời khi javascript không hề có khai báo class, chúng ta sẽ khai báo component như thế này

const ReposGrid = React.createClass({
  getInitialState () {
    return {      
    }
  },
  componentDidMount () {
  },
  componentDidUpdate (prevProps) {    
  },
  render() {
    return (<div />)
  }
})

Tháng giêng, 2015

Tổ chức Ác ma thế giới công bố chuẩn EcmaScript 2015, còn gọi với tên thân thương ES6. class chính thức có mặt trong javascript. Đội ngũ phát triển của React lúc đó kết luận, chúng ta không cần phát minh lại cái bánh xe (don’t reinvent the wheel), cứ xài theo chuẩn đã có. Thế là từ đó chúng ta khai báo component bằng class extends

class ReposGrid extends React.Component {
  constructor (props) {
    super(props)

    this.state = {
      repos: [],
      loading: true
    }

    this.updateRepos = this.updateRepos.bind(this)
  }
  componentDidMount () {
  }
  componentDidUpdate (prevProps) {
  }

  render() {
    return (<div />)
  }
}

Khi khai báo component bằng class, chúng ta khởi tạo giá trị của state bên trong phương thức constructor và nó sẽ được nhét vào trong this. Tuy nhiên, với cách khai báo đã quốc tế hóa của class, nếu chúng ta extends từ một class, chúng ta phải gọi super() trước khi có thể sử dụng this. Và riêng với React, chúng ta còn phải truyền thêm props vào trong super. Các bạn lập trình viên phát bệnh vì cách viết chướng mắt này.

constructor (props) {
  super(props) // 🤮
}

Ngày xưa khi dùng createClass của React, bên trong hàm đó nó sẽ làm luôn chuyện binding toàn bộ this vào các phương thức cho một instance của component. Tuy nhiên khi viết extends React.Component chuyện đó ko còn tự động xảy ra như phép màu nữa, chúng ta phải đi .bind từng phương thức một trong constructor

constructor (props) {
  this.updateRepos = this.updateRepos.bind(this) // 😭
}

Nếu nhìn vào các bạn sẽ nói, ồ cái này chả to tác gì đâu, chỉ là phải viết thêm mấy dòng ấy mà. Cũng vì lầm đường lạc lối theo class Ác ma mà React bị ko biết bao nhiều lời phàn nàn từ những lập trình viên khắp mọi nơi.

React hook

Hên sao, không lâu sau đó Class Field được thêm vào trong class, chúng ta có thể khai báo một biến bên trong class mà không cần dùng constructor, thay vì .bind chúng ta dùng arrow function

class ReposGrid extends React.Component {
  state = {}  
  updateRepos = (id) => {}
}

Vấn đề tồn đọng trong React hook

Vấn đề đã được giải quyết tương đối ổn thỏa? Tuy nhiên vẫn còn vấn đề khác React team cảm thấy chưa hài lòng lắm phiên bản hiện tại.

Ý tưởng chính của React là để chúng ta có thể quản lý những ứng dụng phức tạp bằng cách chia ra thành từng component nhỏ rồi kết hợp (compose) lại với nhau. Đây là cách làm tạo ra thương hiệu sáng ngời của React. Cách tiếp cận theo kiểu component chả có vấn đề gì, cách hiện thực những component hiện tại đang có vấn đề.

Logic trùng lặp

Trước đây chúng ta thiết kế component dựa rất nhiều vào component lifecycle. Chúng ta đặt để logic vào trong các từng lifecycle này, thí dụ như chúng ta cần phải gọi cùng một hàm bên trong cả 2 phương thức lifecycle componentDidMountcomponentDidUpdate

componentDidMount () {
  this.updateRepos(this.props.id)
}
componentDidUpdate (prevProps) {
  if (prevProps.id !== this.props.id) {
    this.updateRepos(this.props.id)
  }
}
updateRepos = (id) => {
  this.setState({ loading: true })

  fetchRepos(id)
    .then((repos) => this.setState({
      repos,
      loading: false
    }))
}

Để giải quyết vấn đề side effect (hàm fetchRepos làm cái quần gì ở ngoài đường ai mà biết, rõ ràng nó không thuộc phạm vi quản lý của component). Chúng ta cần một cách tiếp cận khác không thể sử dụng lifecycle nữa

Chia sẻ logic của React hook

Khi nghĩ về sự kết hợp giữa các component trong React, chúng ta sẽ nghĩ về cách các đối tượng UI kết hợp với nhau.

view = fn(state)

Trong thực tế, viết một ứng dụng không phải chỉ bao gồm tầng UI, rất nhiều trường hợp chúng ta cần tái sử dụng logic, kết hợp các logic lại với nhau. Trước đây React chưa hề có cách nào đáp ứng được nhu cầu này.

Ví dụ nếu có một component khác, nó cũng cần xài biến state repos và tất cả những logic liên quan, mà những cái đó nó đang nằm bên trong component ReposGrid. Làm sao chúng ta lấy ra xài lại? Cách bình thường là chúng ta copy-paste toàn bộ code bên trong qua một component mới. Cũng nhiều người làm vậy, ai có kinh nghiệm hơn thì dùng Higher-Order Component

function withRepos (Component) {
  return class WithRepos extends React.Component {
    state = {
      repos: [],
      loading: true
    }
    componentDidMount () {
      this.updateRepos(this.props.id)
    }
    componentDidUpdate (prevProps) {
      if (prevProps.id !== this.props.id) {
        this.updateRepos(this.props.id)
      }
    }
    updateRepos = (id) => {
      this.setState({ loading: true })

      fetchRepos(id)
        .then((repos) => this.setState({
          repos,
          loading: false
        }))
    }
    render () {
      return (
        <Component
          {...this.props}
          {...this.state}
        />
      )
    }
  }
}

Rồi giờ có bất kỳ component nào muốn dùng repos thì cứ mẹ-bồng-con thế này

// ReposGrid.js
function ReposGrid ({ loading, repos }) {
  ...
}

export default withRepos(ReposGrid)

// Profile.js
function Profile ({ loading, repos }) {
  ...
}

export default withRepos(Profile)

Hồi xưa chúng ta hay làm vậy, hoặc là dùng Render Props để chia sẻ những logic dùng tới dùng lui. Tuy nhiên, đây là cách tiếp cận không dành cho dân nghiệp dư, vì không phải dễ mà hiểu được cách tụi HOC nó chạy, thứ 2 nếu bạn cho chục mẹ bồng một đứa con thì sẽ sinh ra chuyện wrapper hell giống như callback hell

export default withHover(
  withTheme(
    withAuth(
      withRepos(Profile)
    )
  )
)

Vận động não để hiểu đoạn này chạy kết quả React hook thể nào

<WithHover>
  <WithTheme hovering={false}>
    <WithAuth hovering={false} theme='dark'>
      <WithRepos hovering={false} theme='dark' authed={true}>
        <Profile 
          id='JavaScript'
          loading={true} 
          repos={[]}
          authed={true}
          theme='dark'
          hovering={false}
        />
      </WithRepos>
    </WithAuth>
  <WithTheme>
</WithHover>

Tóm lại những vấn đề trước mặt cần giải quyết là gì

  • gọi super(props) là quá xàm xí đú
  • this là thứ mơ hồ mà không dễ biết cách nó hoạt động, bạn có thể là chuyên gia và biết đấy, nhưng chúng ta tuân thủ nguyên tắc khi code KISS, ngu ngốc nhất có thể, đừng tỏ ra thông minh
  • Tổ chức logic theo các phương thức lifecycle không còn hợp lý hợp tình
  • React chưa có câu trả lời chính thức nào cho việc chia sẻ logic (HOC là từ pattern của javascript, không phải đặc sản nhà React, nên không tính)

React hook

Giải quyết

Từ React 0.14 chúng ta có 2 cách tạo component, dùng class hoặc dùng function. Nếu cần state và các lifecycle thì dùng class, nếu chỉ nhận props rồi trả về UI thì dùng function. Đó là cách chúng ta được dạy.

Bác CTO John Carmack nói, em xin lỗi sửa câu văn của bác chút

Tụi bây dẹp phương thức, class, framework hết dùm tao cái, Dùng hết function đi

React team, chân lý đây rồi, chúng ta tìm cách biến function component đáp ứng được những gì class component làm được đi.

Với function component, chúng ta chả cần quan tâm tới super(props)this chạy thế nào. Chúng ta sẽ bổ sung state, giải quyết lifecycle, chia sẻ logic nữa là xong.

Và thế là các hook của React ra đời: useStateuseEffect, custom hook

Để sử dụng state, chúng ta dùng hook là React.useState

function ReposGrid ({ id }) {
  const [ repos, setRepos ] = React.useState([])
  const [ loading, setLoading ] = React.useState(true)
}
function ReposGrid ({ id }) {
  const [ repos, setRepos ] = React.useState([])
  const [ loading, setLoading ] = React.useState(true)
}

Lifecycle thì có thể bạn sẽ buồn (hoặc vui) khi nghe tin này. Nếu bắt đầu sử dụng React hook, function component, dẹp hết những gì bạn đã từng biết về lifecycle của component đi, quên đi những việc cần làm ở giai đoạn này, giai đoạn kia của component. Bạn hay tiếp cận cách tư duy khác hoàn toàn Đồng bộ hóa

Thử nghĩ những gì bạn làm ở một sự kiện của lifecycle, có thể là đổi state, fetch dữ liệu, cập nhập DOM, tất cả đều gom về một mục đích duy nhất Đồng bộ hóa. Những gì chúng ta cần đồng bộ thường là những thứ nằm ngoài React (gọi API, DOM, đại loại như thế) với những thứ bên trong React (state) hoặc ngược lại.

  Vì sao React Hooks lại được sử dụng nhiều trong các dự án đến thế?
  Làm quen với React Hook bằng ví dụ
  Làm sao để fetch dữ liệu bằng React Hook

Khi tiếp cận theo hướng đồng bộ hóa thay vì lifecycle event, nó cho phép chúng ta gom các logic liên quan lại với nhau. Để làm việc đó React cho chúng ta một Hook gọi là React.useEffect

Theo định nghĩa, useEffect cho phép chúng ta thực hiện side effect bên trong function component. Hàm này sẽ dùng để re-sync (thực hiện đồng bộ hóa các giá trị)

React.useEffect(() => {
  document.title = `Hello, ${username}`
}, [username])

Đoạn code trên sẽ chạy lại bất cứ khi nào giá trị state username có thay đổi

Để gọi lại fetchRepos khi có thay đổi từ state repos ở ví dụ trên

function ReposGrid ({ id }) {
  const [ repos, setRepos ] = React.useState([])
  const [ loading, setLoading ] = React.useState(true)

  React.useEffect(() => {
    setLoading(true)

    fetchRepos(id)
      .then((repos) => {
        setRepos(repos)
        setLoading(false)
      })
  }, [id])

  if (loading === true) {
    return <Loading />
  }

  return (<div />)
}

Như vậy, chúng ta đã có thể nói lời chia tay mãi mãi với React.Componentconstructorsuperthis, lifecycle vì React hook

Còn lại với cuộc chiến chống Higher-Order Component và Render Props. Để dùng lại logic, chúng ta sẽ vẫn dùng Hook, nhưng không phải do React làm sẵn cho xơi, chúng ta phải tự viết những custom Hook

Giờ chúng ta sẽ viết một custom hook useRepos, nó sẽ nhận một id lấy dữ liệu tương ứng.

function useRepos (id) {
  const [ repos, setRepos ] = React.useState([])
  const [ loading, setLoading ] = React.useState(true)

  React.useEffect(() => {
    setLoading(true)

    fetchRepos(id)
      .then((repos) => {
        setRepos(repos)
        setLoading(false)
      })
  }, [id])

  return [ loading, repos ]
}

Điều ngon lành ở đây là tất cả những gì liên quan đến repos điều gói gọn trong hook, ở đây mình muốn nói đến loadingrepos

Sử dụng custom hook này trên các component khác nhau

function ReposGrid ({ id }) {
  const [ loading, repos ] = useRepos(id)

  ...
}
function Profile ({ user }) {
  const [ loading, repos ] = useRepos(user.id)

  ...
}

Thật không thể tin được bạn có thể khai báo và setState bên trong một function bình thường. Chúng ta đã có một React mạnh mẽ với các đặc tính sau

  • Đơn giản hóa
  • Đóng gói
  • Linh động
  • Mở rộng

Không những giải quyết vấn đề đang có, như cách mà các bạn làm marketing cho React tuyên truyền: sử dụng Hook để có state bên trong function component. Thật ra nó còn mang tới những giá trị to lớn khác là tăng khả năng tái sử dụng và kết hợp logic.

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

Có thể bạn muốn xem thêm:

Xem thêm việc làm React tại TopDev!

Tìm hiểu các thông số cấu hình Cron job

Tìm hiểu các thông số cấu hình Cronjob

Vừa rồi, tớ có task phải làm 1 con scheduler xoá dữ liệu rác, 1 tháng chạy 1 lần. Trước giờ tớ chạy cron job bằng công cụ hỗ trợ của server, có UI nên cũng đếch quan tâm cơ chế nó cấu hình như nào, cứ táng đúng ngày-tháng-năm giờ-phút-giây vào đúng ô, click OK là nó tự generate ra cấu hình. That’s all =)).

Tuy nhiên lần này tớ phải động tới cấu hình cho cron job. Tiện tìm hiểu nó nên note lại 1 bài :))

Chức năng của Cron Jo là để thực hiện những lệnh được yêu cầu trong khoảng thời gian được xác đinh từ đầu bởi quản trị viên/ người điều hành Hosting. Nói dễ hiểu, Cron Job là chức năng hỗ trợ lên lịch tự động để thực hiện 1 số thao tác, công việc nào đó.

Cấu trúc cấu hình cron job

Cron job thường có dạng

cron = "X X X X X" (5 kí tự)

hay

cron = "X X X X X X" (6 kí tự)

Đối với 5 kí tự thì đó là:

<phút> <giờ> <ngày trong tháng> <tháng> <ngày trong tuần>

Còn với 6 kí tự thì thêm giây nữa:

<giây> <phút> <giờ> <ngày> <tháng> <ngày trong tuần>

Các kí tự X được thay thế bởi một trong các kí tự sau:

* : bất kì giá trị nào
, : danh sách các giá trị
- : khoảng giá trị
/ : theo bước nhảy

Đầu tiên đọc lướt qua dống này, tớ chợt nghĩ: dễ vkl. Giờ muốn cho nó chạy 2s 1 lần để test cái scheduler thì táng config

cron = "2 * * * * *"

có mẹ gì khó đâu :v. Tuy nhiên thì khi chạy test thì sai “cờ mờ nờ rờ”. Nó chạy 1 phút 1 lần. Đó là giây thứ 2 của mỗi phút, không phải mỗi 2s 1 lần. Như vậy, config của cron chính xác phải là:

<giây trong phút> <phút trong giờ> <giờ trong ngày> <ngày trong tháng> <tháng trong năm> <ngày trong tuần>

Config 2s 1 lần kiểu gì?

Cùng nhìn vào đống kí tự có thể thay thế của X, ta có thể cấu hình chạy 2s 1 lần bằng các cách sau:

Sử dụng “,”

Dấu “,” đại diện cho danh sách các giá trị. Nghĩa là bạn muốn chạy 2s 1 lần thì bạn liệt kê các giá trị giây cách nhau 2s xuất hiện trong một phút.

cron= "0,2,4,6,8,10,12,14,16,18,20.... 58 * * * * *"

Cách này khá là thủ công, chỉ nên dùng khi bạn sử dụng để cấu hình cho 1 vài giá trị đặc biệt, không có quy luật.

  Hướng dẫn sử dụng Cron Job trong Laravel 5.8

Sử dụng “-“

Dấu “-” đại diện cho khoảng giá trị. Ví dụ bạn muốn chạy vào các giây 1,2,3,4,5,6 thì bạn có thể dùng “-” cho ngắn gọn hơn, thay vì “,”. Đó là:

cron="1-6 * * * * *"

Tất nhiên là config này không sử dụng được cho 2s 1 lần. Tiện thì tớ giới thiệu luôn :))

Sử dụng “/”

Dấu “/” đại diện cho bước nhảy của giá trị, tính từ 0. Giả sử với kí tự ở vị trí của giây, tớ config:

*/1 => bước nhảy 1, tính từ 0: 0,1,2,3,4,...,59

*/2 => bước nhảy 2, tính từ 0: 0,2,4,6,8,...,58

*/5 => bước nhảy 5, tính từ 0: 0,5,10,15,...,55

Ngoài ra có thể thay dấu “*” là các vị trí bắt đầu của bước nhảy. Ví dụ

5/1 => bước nhảy 1, tính từ 5: 5,6,7,8,...59

5/8 => bước nhảy 8, tính từ 5: 5,13,21,29

13/4 => bước nhảy 4, tính từ giây thứ 13

blah,blah....

Tuy nhiên đây là “non-standard config”, tức là không phải config tiêu chuẩn nên có thể sẽ không hoạt động trên một số hệ thống cron job.

Như vậy để config 2s/lần thì config “dư lày”:

cron="*/2 * * * * *"

Done :))

Crontab.guru

1 trang web khá hay là https://crontab.guru. Crontab cho phép bạn nhập vào cấu hình và đưa ra kết quả ở dạng giải thích: “At every minute“, “At 00:00“, … khá dễ hiểu.  Ngoài ra bạn có thể click vào “next” như hình để xem 1 vài ví dụ.

Cron job

Giao diện crontab.guru

Bổ sung

Ngoài crontab.guru thì có trang http://www.cronmaker.com/ cũng là 1 tool giúp chúng ta tạo cronjob tốt hơn, với lượng example rộng hơn. Thanks @Jack đã suggest.

Tổng kết về SEO title preview:Cron job

Qua bài này, hi vọng có thể giúp bạn hiểu hơn được về cách cấu hình.

Hãy nhớ: “Cron job failures can be disastrous!”

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

Có thể bạn muốn xem thêm:

Xem thêm việc làm IT tại TopDev!

“Sống chung” với sếp siêu nóng tính, bí kíp nào là khôn ngoan?

sếp

Cảm giác căng thẳng, mệt mỏi luôn ám ảnh bạn trong công việc khi có một người sếp cực kỳ nóng tính? Bạn sợ hãi, mất tập trung dẫn đến việc không kiểm soát được việc phân bổ và thực hiện đúng tiến độ công việc? Bị la mắng, bị phạt khi mắc những sai phạm nên bạn thường khó giữ bình tĩnh và phản ứng tiêu cực? 

Đó không phải là những suy nghĩ, cảm nhận riêng của riêng bạn, vì ai cũng phải đi làm mà. Điều quan trọng là bạn cần nhận ra được những “bẫy cảm xúc” đó, nhẫn nhịn một chút để có cách giải quyết tốt hơn. Với bài viết sau đây, TopDev sẽ bật mí với các bạn những bí kíp hữu ích, chắc chắn sẽ là những “vị cứu tinh” tuyệt vời dành cho bạn.

Nói không với lời “bào chữa”

Việc bạn phạm lỗi trong quá trình thực hiện công việc là điều khó tránh khỏi trong những giai đoạn đầu tiên. Tuy nhiên, dù lỗi nhỏ hay lớn đều gây ra ảnh hưởng đến công việc chung nên bạn khó tránh khỏi việc sếp tức giận và có review không tích cực về bạn. 

sếp

Trong trường hợp này, bạn nên chịu trách nhiệm với những lỗi bạn đã gây ra và đưa ra giải pháp và cách xử lý ngay cho vấn đề hiện tại. Đừng cố viện cớ cho hoàn cảnh, do quên hay một lý do nào đó thiếu chuyên nghiệp. Bạn nên nhớ thái độ quyết định tất cả, vì vậy đừng cố bào chữa một cách thiếu kiểm soát trong cảm xúc. Thay vào đó, hãy đưa ra một chiến lược rõ ràng về cách bạn khắc phục lỗi và cải thiện công việc tốt hơn. Cách hành xử ấy thể hiện bạn là một nhân viên tinh tế, thông minh và hướng đến mục tiêu phát triển chung cho tổ chức/doanh nghiệp.

Tìm nguyên nhân của cơn giận – Tìm đúng “bệnh” – dùng đúng “thuốc”

Khi bạn nhận ra sếp của bạn là một người rất “nóng tính” và thường bộc lộ sự nóng giận ngay khi nhân viên làm sai hoặc mắc lỗi, bạn nên để ý về những trường hợp cụ thể khiến sếp bạn như vậy. Việc này giúp bạn có thể biết được nguyên nhân nào khiến sếp bạn “bốc hỏa”. Từ đó, bạn nắm bắt được những thông tin giúp bạn tự điều chỉnh bản thân để tránh những cơn giận dữ từ sếp đồng thời tìm ra được những cách thức hiệu quả để giải quyết nguồn cơn giận.

  5 biểu hiện của nhân viên cần cân nhắc sa thải

sếp

Khi đã có một quá trình dài làm việc, bạn nên nhận ra được phong cách làm việc của sếp. Cách sếp làm việc, tương tác với bạn như thế nào, nhận xét và đánh giá bạn ra sao? Hãy khéo léo quan sát và so sánh điều này. 

Điều này giúp bạn nhận ra liệu mình có phải là người duy nhất “chịu đựng” nguồn cơn từ sếp hay không? 

Đây được gọi là khai thác đúng “bệnh” và dùng đúng “thuốc”. Ngoài ra, trong trường hợp nếu bạn không tự tin với những cách thức giải quyết của mình, back-up hiệu quả nhất là hãy đề xuất một cuộc trò chuyện riêng với sếp của bạn hoặc nhờ sự trợ giúp của bộ phận nhân sự.

Kiểm soát cảm xúc của bản thân và khôn ngoan khi “đối đáp” với sếp

Sự tức giận là một cảm xúc rất tiêu cực của con người. Và trong 7 loại cảm xúc, bẫy cảm xúc của sự tức giận có phạm vi ảnh hưởng lớn nhất vì sự chi phối của nó đến suy nghĩ, nhận thức và hành vi của một cá nhân là vô hạn. Vì vậy, nếu bạn muốn “dập tắt” cơn giận của sếp thì trước hết, hãy lắng nghe cảm xúc và kiểm soát tốt cảm xúc của mình. 

  Trí tuệ cảm xúc là gì và áp dụng như thế nào trong ngành Nhân sự

sếp

Việc dùng sự tức giận để đáp trả sự tức giận là một điều dại dột, thiếu khôn ngoan. Nó không những không giúp bạn giải quyết được vấn đề mà còn làm cho những mâu thuẫn trở nên nghiêm trọng hơn. Tuy nhiên, điều này không có nghĩa là bạn trở nên thờ ơ trước những cảm xúc của chính mình. Thay vào đó, hãy tự tìm những cách thiết thực để làm dịu cơn giận của chính bạn. Nghe một bản nhạc mà bạn yêu thích, hít một hơi thật sâu để điều hòa nhịp thở, nghỉ giải lao để tạo sự thư giãn và suy nghĩ tích cực hơn… là những gợi ý tuyệt vời giúp bạn lấy lại sự cân bằng trong cảm xúc của mình.

Vậy phải giải quyết thế nào trước cơn giận của sếp? Cách ứng biến khôn khéo nhất là đừng “cãi chày cãi cối” – đừng “vụng chèo khéo chống”. Hãy bình tĩnh và có một lựa chọn thông minh nhất khi đối diện với cơn giận của sếp. 

Trong quá trình làm việc, những mâu thuẫn và bất đồng quan điểm giữa bạn và sếp là điều hoàn toàn bình thường, thậm chí nó còn rất cần thiết trong những trường hợp cần thảo luận, xem xét để đi đến một quyết định chung. Bạn hãy giữ thái độ ôn hòa, cư xử đúng mực để cuộc “đối đầu” không quá căng thẳng. Bạn chấp nhận mình sai với những phát ngôn có đôi chút tự trách móc mình không phải thể hiện bạn giả tạo hay lấy lòng sếp, mà đó là cách bạn xử lý những phát sinh tiêu cực. 

Cái bạn hướng đến thật sự là làm thế nào để tìm kiếm những giải pháp hiệu quả để khắc phục vấn đề, giải quyết các sai phạm còn tồn đọng trong quá trình thực hiện công việc. Vì thế, bạn hãy ưu tiên lợi ích công việc lên hàng đầu, tránh để những cảm xúc lấn át tâm trí của bạn và cả sếp. 

Nhận thức được bản thân và thực hiện tốt công việc được giao

Chiến lược tuyệt vời nhất để “từ chối” sự nóng giận của sếp chính là thực hiện tốt vai trò của mình. Và dù bạn làm công việc gì, bạn cũng nên nắm rõ nhiệm vụ và trách nhiệm của bạn trong các công việc, hoạt động được giao. Điều này giúp bạn xác định được các vấn đề có thể xảy ra mâu thuẫn với sếp hoặc có thể bị sếp la mắng. Từ đó, tìm ra giải pháp để cải thiện nó trong tương lai.

sếp

Khi cố gắng hoàn thành tốt các công việc của mình cũng có nghĩa bạn đang “loại trừ” đi những lý do có thể khiến bạn bị sếp la mắng. Hãy cho sếp thấy, dù sếp không thích bạn nhưng vẫn không có lý do trách cứ bạn. Một điều quan trọng cần nhớ là bạn cũng có thể sử dụng hiệu suất làm việc của mình như một phương tiện bảo vệ chính bản khỏi sự giận dữ từ sếp của bạn. 

Lời kết

“Sống chung” với sếp khó tính thật là một vấn đề khiến chúng ta đau đầu đúng không nào. Song, việc có thể tìm ra những nguồn gốc phát sinh ra cơn giận dữ hay những giải pháp thiết thực là do chính bạn nhận biết và lên kế hoạch thực hiện. Mong rằng với những chia sẻ gần gũi của TopDev, các bạn sẽ có cho mình những cách thức phù hợp để xoa dịu cơn giận của một người sếp khó tính đồng thời giúp bạn thấu hiểu sếp của mình hơn, tạo ra một môi trường làm việc thật sự hiệu quả.

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

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