Home Blog Page 156

CSS Box Model – Các cách hiển thị element với thuộc tính display

CSS Box Model - Các cách hiển thị element với thuộc tính display

Bài viết được sự cho phép của tác giả Lương Văn Phúc

Đây là bài viết cuối trong series về CSS Box Model của mình. Nếu như các bài viết trước tập trung phân tích sâu về một element và các thuộc tính của nó, thì bài viết này sẽ giúp bạn có cái nhìn bao quát hơn về mối quan hệ giữa các element trên trang web, chúng đẩy nhau hay hút lại với nhau như thế nào, từ đó giúp bạn có thể layout được các element tới những vị trí một cách chính xác nhất.

Bạn có thể theo dõi bài viết phần 1 và 2 tại đây:

Block và Inline

Có lẽ hầu hết các bạn đều đã quen với 2 loại box cơ bản này rồi: block và inline. Nếu bạn nào không nhận ra chúng, thì có thể các bạn sẽ nhận ra dòng CSS ví dụ như display: block và display: inline

Vậy block và inline nó khác nhau thế nào, một thẻ p nó khác gì một thẻ span? Hãy cùng nhau phân tích một chút lý thuyết để hiểu rõ hơn nhé.

Nếu một element có thuộc tính display là block, thì nó sẽ:

  • Element sẽ rớt xuống một dòng mới.
  • Element sẽ tự nở rộng ra tối đa, cho đến khi nào lấp đầy khoảng trống của container đang chứa nó. Thông thường chúng ta sẽ thấy kết quả là element sẽ có chiều rộng bằng với container cha của nó.
  • Các thuộc tính width và height đều có tác dụng lên element (tất nhiên là để thay đổi chiều rộng và cao của nó).
  • Padding, margin và border (nếu có) của element sẽ đẩy các element xung quanh ra xa nó.

Có nhiều thẻ mặc định đã là block rồi, ví dụ như ph1h2div, nên mặc định các thẻ đó sẽ biểu hiện với các tính chất như mô tả bên trên. Đương nhiên khi chúng ta gọi là “mặc định”, điều đó có nghĩa là chúng ta có thể thay đổi.

Tiếp theo, nếu một element có thuộc tính display là inline, thì nó sẽ:

  • Element sẽ không rớt xuống dòng mới trên trang.
  • Các thuộc tính width và height sẽ không có tác dụng, nên nếu bạn cố gắng gán kích thước cho các inline element thì sẽ vô ích thôi.
  • Padding, margin, border ở hướng dọc (top và bottom) vẫn có tác dụng nhưng sẽ không làm đẩy các inline element khác ra xa nó.
  • Padding, margin, border ở hướng ngang (left và right) vẫn có tác dụng và vẫn sẽ đẩy các inline box khác ra xa nó.

Một ví dụ đơn giản là dễ thấy nhất:

Block direction và Inline direction

Nếu nói về block và inline mà không nói về hướng mà chúng được sắp đặt thì hơi thiếu sót. Tuy nhiên vấn đề này cũng có nhiều thứ để bàn (nằm ngoài mục đích của bài viết), nên mình chỉ nêu vài ý cơ bản ở đây.

Mặc định khi bạn vào một trang web, thì hầu hết chúng có writing-mode là horizontal-tb, có nghĩa là content sẽ được sắp xếp từ trái sang phải (horizontal) và từ trên xuống dưới (tb: top bottom). Thường thì chúng ta ít để ý đến điều này, vì ngôn ngữ tiếng Việt và tiếng Anh đều đi theo hướng như vậy.

Với block direction, các block sẽ được sắp xếp chồng lên nhau chiều dọc (element sau nằm dưới element trên). Còn với inline direction, các element sẽ được sắp xếp cạnh nhau theo hàng ngang.

CSS Box Model - Các cách hiển thị element với thuộc tính display
Hướng sắp xếp của các box khi writing-mode là horizontal (chiều ngang)

Bổ sung với mục đích tham khảo: với writing-mode là vertical thì hướng của các block sẽ đi theo chiều ngang. Tuy nhiên bản chất cách hoạt động của nó cũng không thay đổi.

CSS Box Model - Các cách hiển thị element với thuộc tính display
Hướng sắp xếp của các box khi writing-mode là vertical (chiều dọc)

Thuộc tính hiển thị bên trong (inner) và ngoài (outer)

Bạn có biết một element tồn tại 2 loại thuộc tính hiển thị là bên trong và bên ngoài không? Khi bạn viết display: block;, có 2 thứ sẽ diễn ra:

  • Outer: bạn đang khai báo rằng element của bạn là một block khi tương tác với các element xung quanh.
  • Inner: bạn đang khai báo rằng các element con trực tiếp của nó sẽ được layout theo cách bình thường như mô tả ở trên (gọi là normal flow)

Bạn có thấy lạ lẫm không? Một ví dụ khác, khi bạn viết display: flex;, cũng có 2 thứ sẽ diễn ra:

  • Outer: bạn đang khai báo rằng element của bạn là một block khi tương tác với các element xung quanh.
  • Inner: bạn đang khai báo rằng các element con trực tiếp của nó sẽ trở thành các flex item và được layout dựa trên các quy tắc của flexbox.
  Câu hỏi phỏng vấn mẹo về React: Component hay element được render trong browser?
  Cách đặt tên class của element trong HTML sao cho phù hợp?

Ví dụ

Hãy cùng xem qua một ví dụ đơn giản sau nhé:

CSS Box Model - Các cách hiển thị element với thuộc tính display
Một element với thuộc tính display là inline.
<p>Lorem ipsum dolor sit amet, <span class="child">consectetur adipiscing</span> elit. Integer sed pellentesque justo...</p>
<p>Aliquam nulla nisl, rutrum id lacus quis, tempor efficitur magna...</p>
.child {
  background-color: lightblue;
  width: 100px;
  height: 100px;
  padding: 50px;
  margin: 50px 0;
}

Ở ví dụ trên, thẻ span mặc định là một inline box, vì thế:

  • Nó nằm cùng dòng với các content khác
  • Width và height hoàn toàn bị bỏ qua. Lưu ý code CSS không lỗi trong trường hợp này, nó chỉ không có tác dụng mà thôi.
  • Với padding là 50px, bạn thấy nó đẩy các chữ xung quanh ra xa theo chiều ngang, nhưng chiều dọc thì không đẩy, mặc dù nó vẫn tồn tại (bằng chứng là màu nền của nó)
  • Với margin top và bottom là 100px, nó hoàn toàn bị bỏ qua.

Tiếp theo, chúng ta thử chuyển nó về block xem sao:

CSS Box Model - Các cách hiển thị element với thuộc tính display
Một element với thuộc tính display là block.
.child {
  display: block; /* <= thêm dòng này */
  background-color: lightblue;
  width: 100px;
  height: 100px;
  padding: 50px;
  margin: 50px 0;
}
  • Vì là block nên nó tự rớt xuống một dòng mới.
  • Width và height lúc này có tác dụng.
  • Với padding là 50px, bạn thấy nó đẩy các chữ xung quanh ra xa theo cả chiều ngang lẫn chiều dọc
  • Margin lúc này đã có tác dụng.

display: inline-block

Trong một số trường hợp, bạn sẽ muốn dung hòa các hiệu ứng của block và inline. Chẳng hạn như bạn vẫn muốn tùy chỉnh kích thước của element với width và height, nhưng bạn vẫn muốn nó nằm inline với các element khác. Với display: inline-block, bạn sẽ giúp element có một số tính chất của cả block và inline.

CSS Box Model - Các cách hiển thị element với thuộc tính display
Một element với thuộc tính display là inline-block.

Kết luận

Bài viết cũng khá dài rồi nên mình không muốn trình bày thêm những vấn đề liên quan khác ví dụ như “Margin collapsing”. Như bạn đã thấy, kiến thức cơ bản về layout thật ra rất đơn giản nhưng có thể vì không được dạy ở trường đại học (thời của mình) nên rất ít bạn có thể hiểu và áp dụng một cách đúng đắn. Tuy nhiên nó cũng khá đơn giản thôi nên các bạn hãy dành thời gian để hiểu rõ về nó nhé.

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

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

Xem thêm TOP tuyển dụng lập trình IT mới nhất tại TopDev

Dự thi Quiz 04 của Kambria Code Challenge với tổng giải thưởng lên đến 700$

Code Challenge

Đăng ký dự thi Quiz 04 của Kambria Code Challenge ngay hôm nay với tổng giải thưởng lên đến $700 cùng nhiều cơ hội nghề nghiệp.

👉 Đăng ký Quiz 04: https://bit.ly/Standard-Quiz-04-Bounty

Các coder tham gia Quiz 04 Kambria Code Challenge sẽ có cơ hội đạt giải thưởng với tổng trị giá ~$700.

Giải thưởng của Standard Quiz 04 Bounty:

🔹Giải quán quân: $75 + 79.000 KAT

🔹1 x Giải Á quân 1: $50 + 52.000 KAT

🔹2 x Giải Á quân 2: $25 + 26.000 KAT

Giải thưởng của Special Quiz 04 Bounty:

🔹Giải quán quân: $125 + 85,000 KAT

KAT là token sử dụng trên nền tảng của Kambria – Blockchain ủy quyền đầu tiên trên thế giới cung cấp mã nguồn mở robot và hệ sinh thái AI.

Ngoài ra, khi tham gia Quiz 04, các bạn sẽ được:

1️⃣ Kiểm tra kiến thức của bạn về AI

2️⃣ Luyện tập. Chứng minh. Nhận thưởng!

3️⃣ Kết nối với các đối tác của Kambria

4️⃣ Cơ hội nghề nghiệp

5️⃣ Thử thách bản thân

Quiz 04 tập trung vào chủ đề: “Reinforcement learning (Học Tăng Cường)” – một lĩnh vực con của học máy. Cuộc thi sẽ bắt đầu vào lúc 14:00, thứ 7 ngày 22/08/2020.

Tháp nhu cầu Maslow và ứng dụng trong quản lý nhân sự

Maslow

Ảnh hưởng từ đại dịch toàn cầu Covid -19, nhu cầu tuyển dụng nhân sự ngày được quan tâm hơn. Đặc biệt, sự cạnh tranh không chỉ đến từ phía ứng viên, mà các doanh nghiệp cũng cần có nhiều giải pháp hiệu quả trong quá trình tuyển dụng nhân sự. Trong số đó, việc ứng dụng tháp nhu cầu Maslow trong chiến lược nhân sự được đánh giá là cách thức hiệu quả trong việc tuyển dụng, thu hút và giữ chân nhân tài. 

Cùng TopDev phân tích những điều thú vị xoay quanh tháp nhu cầu Maslow qua bài viết dưới đây. 

Tháp nhu cầu Maslow là gì?

Tháp nhu cầu Maslow là một lý thuyết nền tảng quan trọng. Thuyết Maslow nhà tâm lý học Abraham Maslow thiết lập dựa trên hình thức phân tầng các cấp bậc. Việc phát triển và hoàn thiện các nội dung dưới dạng phân tầng tạo ra sự thuận lợi trong việc tiếp thu và vận dụng lý thuyết trong thực tiễn. 

Maslow

Maslow là lý thuyết nền tảng có giá trị nhất dưới góc nhìn tâm lý học. Đồng thời, việc ứng dụng tháp nhu cầu Maslow trong quản trị nhân sự có ý nghĩa lớn vì nó trở thành một công cụ đầy giá trị giúp nhà quản lý khai thác, sử dụng nguồn nhân lực một cách hiệu quả nhất.

Cấu trúc về hệ giá trị phân lập của tháp nhu cầu Maslow

Dựa trên những nhu cầu khác nhau, tháp Maslow được phân thành 5 mức độ cụ thể tương ứng từ thấp đến cao. Những nhu cầu cao hơn được thỏa mãn khi nhu cầu thấp hơn được đáp ứng.

1. Các giá trị mức thấp:

Nhu cầu sinh lý (Physiological Needs): Những hoạt động thuộc về tâm lý, hoạt động, trạng thái,… làm con người có thể tồn tại như: Ăn, uống, ngủ nghỉ, đi lại,…

Nhu cầu về an toàn, an ninh (Safe/Security Needs): An toàn sức khỏe, tài sản, trí tuệ, tâm lý,…

2. Các giá trị mức cao:

Nhu cầu xã hội (Belonging Needs): Nhu cầu về những mong muốn được gắn bó và quan tâm. Biểu hiện là các giao tiếp cộng đồng, người thân, bạn bè, mối quan hệ đồng nghiệp,..

Nhu cầu tôn trọng (Esteem Needs): Nhu cầu nhận được sự nể trọng từ những người cùng tổ chức, xã hội,…

Nhu cầu thể hiện bản thân (Self-actualization): Đây được đánh giá là nhu cầu đỉnh cao của thang nhu cầu Maslow. Đó là mong muốn được thể hiện và khẳng định giá trị của bản thân mình trong cuộc sống.

Mỗi người trong chúng ta đều tồn tại 5 nhu cầu này. Muốn thay đổi về hành vi con người thì nhất thiết phải tác động vào nhu cầu cá nhân trước.

Ứng dụng tháp nhu cầu Maslow trong tuyển dụng nhân sự

Để áp dụng tháp Maslow trong quản trị nhân sự, việc nghiên cứu và xác định rõ các nhu cầu của nhân viên rất quan trọng. Vì chỉ khi nắm bắt được tâm lý con người và những chuyển biến phức tạp trong phạm trù đó, bạn mới có thể thiết lập một chiến lược thành công nhất.

Nhu cầu về sinh lý

Nhà quản lý nhân sự cần nắm bắt được những mong muốn của nhân viên trong công việc. Cụ thể, lương thưởng và phúc lợi là vấn đề đầu tiên mà ứng viên quan tâm. Nó quyết định khả năng ứng viên có duy trì được cuộc sống được hay không? 

Maslow

Nhà quản lý hoàn toàn có thể giải quyết vấn đề này bằng cách cách đưa ra chính sách lương tốt, chế độ đãi ngộ công bằng – minh bạch dựa trên các tiêu chí khác nhau như: Chỉ số đo lường hiệu suất làm việc – KPI, thái độ làm  việc và những mối quan hệ xã hội. 

Xem thêm: KPI là gì? Kinh nghiệm triển khai KPI hiệu quả

Ngoài ra, nhà quản lý nên đáp ứng nhu cầu cơ bản của nhân viên bằng cách đảm bảo phúc lợi như: Thưởng sáng kiến, thưởng doanh số, lương tháng 13, chương trình chăm sóc sức khỏe nhân viên, du lịch hàng năm…và cung cấp các miễn phí các bữa ăn trưa hoặc ăn giữa ca, party từng quý cho nhân viên.

Nhu cầu về sự an toàn, an ninh

Maslow

Nhu cầu về sự an toàn, muốn được bảo vệ của nhân viên thường sẽ xảy đến trong một khoảng thời gian. Tất nhiên những gì nhân viên muốn thấy là sự rõ ràng về hợp đồng lao động cũng như các chế độ y tế bảo hiểm. 

Để đáp ứng nhu cầu này, một số giải pháp mà nhà quản lý có thể lựa chọn như:

– Tạo lập không gian làm việc tự nhiên, an toàn với đầy đủ những tiện nghi cần thiết.

– Đồng bộ các quy chế về tăng ca, chế độ lương thưởng hợp lý nếu có OT

– Tuân thủ và đáp ứng đúng với các tiêu chuẩn nhằm bảo vệ an toàn lao động. Cụ thể như trang bị đồng phục bảo hộ lao động, xây dựng hệ thống chữa cháy khẩn cấp, các thiết bị hỗ trợ khi thực hiện các công việc nguy hiểm

– Đảm bảo lượng khối lượng về các đầu công việc, có sự công bằng xét trên khía cạnh sự nỗ lực.

– Thiết lập không gian phát triển về thể chất, tâm lý cho nhân viên; tạo điều kiện giúp nhân viên thư giãn, rèn luyện thể dục thể thao.

Nhu cầu xã hội 

Maslow

Nhu cầu xã hội là những mong muốn về sự thuộc về. Có thể hiểu sự giao tiếp xã hội, những mong muốn về tình cảm, sự gắn bó,Vậy làm thế nào để đáp ứng được nhu cầu xã hội? Mấu chốt của vấn đề thành công trong việc phát triển nhu cầu xã hội chính là sự tương tác.

  • Tạo điều kiện để nhân viên mở rộng giao lưu giữa các bộ phận thông qua các hoạt động.
  • Cho nhân viên cơ hội bày tỏ những suy nghĩ từ các buổi review trong các quý.
  • Tạo môi trường tương tác hiệu quả thông qua các dịp lễ. Ví dụ: 8/3, ngày Phụ Nữ Việt Nam, sinh nhật nhân viên,…

Nhu cầu được tôn trọng

Khi đã gắn bó đủ lâu tại một doanh nghiệp, nhân viên họ mong muốn được chia sẻ, trình bày, góp tiếng nói của mình cho sự phát triển chung. Đồng thời, sự công nhận về năng lực, sự đề bạt và thăng tiến trở thành một nhu cầu lớn của nhân viên. Vì họ luôn mong rằng những nỗ lực của mình sẽ được ghi nhận. 

Maslow

Xem thêm: Đồng hành và gắn bó với một công ty, bao lâu là đủ?

Để đáp ứng nhu cầu này, nhà quản lý nên :

  • Quan tâm đến việc xây dựng lộ trình phát triển cho nhân viên phụ ứng với khả năng của họ. Tạo cơ hội để họ khẳng định, cạnh tranh công bằng để chứng minh giá trị bản thân.
  • Thiết lập chính sách đánh giá, nhận xét nhân viên theo khung tiêu chí: chuyên môn, kỹ năng, thái độ,… 
  • Hoàn thiện các chính sách tuyên dương khen ngợi cho những nhân viên có thành tích nổi bật.

Nhu cầu được thể hiện bản thân

Lương bổng là thứ quan trọng. Tuy nhiên, đến một thời điểm nào đó, nó không phải thứ giữ chân một nhân viên lâu dài. Vào thời điểm chín muồi của sự nghiệp, điều họ muốn chính là niềm vui trong công việc. Đây cũng chính là thời điểm quan trọng của việc sống vì những đam mê.

Maslow

Thế đâu là những cách thức giúp đáp ứng nhu cầu thể hiện bản thân của nhân viên:

  • Tạo cơ hội cho các nhân viên phát triển khả năng, vận dụng sáng tạo vào công việc. Những dự án nên được giao cho từng nhân viên phù hợp với năng lực của họ. Trên hết, họ rất cần sự dẫn dắt, hỗ trợ từ những người giàu kinh nghiệm hơn.
  • Khuyến khích họ đưa ra những đóng góp vào quá trình phát triển các hoạt động của tổ chức 
  • Tạo điều kiện bộc lộ tiềm năng, thể hiện các lý tưởng dưới các hình thức khác nhau: ổn định, giao quyền.

Lời kết

Tâm lý nhân sự là một vấn đề khá thú vị. TopDev không qua phân tích sâu vào vấn đề tâm lý mà chỉ tri nhận nó dưới một khía cạnh nhỏ trong chuyên môn tâm lý – Tháp nhu cầu/thang nhu cầu Maslow.

Thang Maslow giúp cho nhà quản lý nhận ra được các nhu cầu tâm lý và mức độ của nó. Vì thế, không quá khó để họ xây dựng các chiến lược phù hợp cho từng nhân viên. Nhờ thuyết Maslow, người lãnh đạo đã hiểu rõ hơn về mong muốn của nhân viên của mìnH. Đồng thời, giúp họ phát triển bản thân toàn diện hơn trên con đường chinh phục đỉnh cao sự nghiệp.

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

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

Tin tức CSS tháng 8, 2022 có gì mới

tin-tuc-css-thang-8-2020-co-gi-moi

Bài viết được sự cho phép của tác giả Lương Văn Phúc

Frontend nói chung và CSS nói riêng vẫn đang được phát triển liên tục. Ngoài những kiến thức cơ bản, bạn cũng nên cập nhật những kĩ thuật/tin tức mới nhất để không bị đi sau thị trường nhé. Nếu bạn là một người mong muốn cập nhật liên tục những kĩ thuật mới nhất, tin tức mới nhất về CSS, thì bài viết này dành cho bạn.

Trong bài viết này, hãy cùng mình điểm qua một vài kĩ thuật CSS mới đang được phát triển. Lưu ý là những kĩ thuật này đang được phát triển, nghĩa là chúng chỉ mới trong giai đoạn beta (thử nghiệm) nên chưa được hỗ trợ bởi các browser hiện tại đâu nhé.

Flexbox Gaps

Điều này có lạ lẫm với bạn không? Với mình thì nó thật sự lạ lẫm nhưng cũng không ngạc nhiên lắm. Từ trước đến nay, CSS luôn có những cái gọi là “trick” được truyền tay nhau để giúp thỏa mãn được các thiết kế từ các bạn designer, và CSS luôn cố gắng tạo ra những thuộc tính native để thay thế cho các trick đó. “Gap” là một trong số chúng.

Mà “Gap” là gì vậy? Thật ra nó chỉ đơn giản là một vùng trống giữa các element mà thôi, chả có gì đặc biệt đúng không nào.

Tin tức CSS tháng 8
Gap là khoảng trống giữa các element

Tuy nhiên ngày xưa, và cả hiện tại nữa, để tạo ra các gap như vậy, chúng ta thường dùng margin. Có thể bạn sẽ thắc mắc rằng “margin mà gọi là trick à”, thì bạn đã đúng nhé, margin không phải là trick nhé. Tuy nhiên nếu dùng margin (ví dụ mỗi item sẽ có margin-right và margin-bottom), bạn thường sẽ phải clear margin của item cuối cùng, nếu bạn không muốn có một vùng margin thừa ở cuối (còn rất nhiều cách khác để xử lý margin của item cuối). Và lúc này, giá như có một thuộc tính định nghĩa ra khoảng cách giữa các item thì tốt biết mấy nhỉ.

.container {
  display: inline-flex;
}

.item {
  width: 113px;
  height: 74px;
  margin-right: 20px;
  background-color: #F7B500;
  border-radius: 8px;
}
Tin tức CSS tháng 8
Gap sử dụng margin

CSS Grid ra đời để giải quyết các vấn đề về tạo grid chỉ với CSS, kèm theo là các thuộc tính gapcolumn-gaprow-gap. Tên thuộc tính rất rõ rồi đúng không nào, mình sẽ không nói thêm về nó, vì nó đã tồn tại được một thời gian rồi chứ không còn mới mẻ gì.

Nhưng, đó là những thuộc tính của CSS Grid nhé, còn với Flexbox thì không, bạn vẫn phải dùng margin (hoặc các cách khác) để tạo gap. Tin vui là thuộc tính gap sẽ được áp dụng cho Flexbox trong tương lai gần nhé. Bạn tham khảo danh sách các browser đã support Flexbox gap tại đây: Can I Use

.container {
  display: inline-flex;
  gap: 20px;
}

.item {
  width: 113px;
  height: 74px;
  background-color: #F7B500;
  border-radius: 8px;
}
Tin tức CSS tháng 8, 2020 có gì mới

Aspect Ratio Unit

Một câu hỏi nhỏ dành cho bạn như sau: bạn hãy tạo ra một thẻ div với kích thước 100×100 px. Đơn giản phải không nào

.item {
  width: 100px;
  height: 100px;
}

Hãy nâng cấp câu hỏi trên khó hơn một tí: với thẻ div 100×100 px trên, bạn hãy biến nó thành 200×200 px, nhưng chỉ được thay đổi chiều rộng mà không được thay đổi chiều cao. Hay nói cách khác, bất kể width là bao nhiêu, hãy làm height của nó bằng với width. Khó hơn rồi đúng không nào.

Để làm được điều đó, chúng ta thường sử dụng trick theo đúng nghĩa đen luôn là padding hack.

.item {
  width: 200px;
}

.item::after {
  content: '';
  display: block;
  padding-top: 100%;
}

Và thuộc tính aspect-ratio ra đời để giải quyết vấn đề này.

.item {
  width: 200px;
  aspect-ratio: 1 / 1;
}
Tin tức CSS tháng 8, 2020 có gì mới
Aspect Ratio

Thuộc tính này hiện chưa được support chính thức bởi browser, vì thế các bạn hãy cẩn thận trước khi sử dụng cho production nhé. Để thử nghiệm cho biết (như hình chụp của mình ở trên), bạn có thể bật cờ “Experimental Web Platform features” của Chrome để thử các tính năng mới.

Tin tức CSS tháng 8, 2020 có gì mới
Experimental Web Platform features

  5 điều phiền toái nhất của CSS

  7 đơn vị CSS có thể bạn không biết

Native Masonry

Tin tức CSS tháng 8, 2020 có gì mới
Pinterest Masonry layout

Bạn đã từng dựng layout như vầy chưa. Nó được gọi là Masonry layout. Với CSS đơn thuần, sẽ rất khó để bạn có thể dựng được layout như vầy, nhưng không hẳn là không thể, chỉ là bạn sẽ mất khá nhiều công sức thôi, bạn tham khảo các cách sau:

  • Phân trang web ra hẳn 3 column, rồi tính toán để phân chia các tấm ảnh vào từng column
  • Tính toán trước ở backend (hoặc hardcode) kích thước các tấm ảnh theo một quy tắc của bạn. Sau đó sử dụng position absolute + một tí javascript
  • Tự viết javascript thuần để tính toán và sắp xếp các tấm ảnh
  • Sử dụng thư viện hỗ trợ như https://masonry.desandro.com/

Với sự ra đời của CSS Grid, việc tạo Masonry layout đã đơn giản hơn, tuy nhiên nó cũng không phải là giải pháp “native”. Bản chất CSS Grid là để tạo grid, chứ không phải tạo ra Masonry layout.

Tuy nhiên, team Firefox đang thử nghiệm tính năng tạo Masonry layout chính thức với CSS Grid. Bạn có thể thử nghiệm với Firefox Nightly, bật cờ layout.css.grid-template-masonry-value.enabled lên.

::marker

Tin tức CSS tháng 8
Marker

Bạn đã bao giờ nhận task đổi màu cho marker chưa? Nếu dùng color, bạn sẽ đổi màu cho cả marker và text bên trong.

Task trên cũng khá đơn giản, và có rất nhiều trick để làm được việc đó như tạo marker giả với ::before chẳng hạn. Hoặc dùng icon và cho position: absolute

Giờ đây bạn có thể style cho marker dễ dàng hơn với ::marker

li::marker {
  color: blue;
}

li:last-child::marker {
  content: "😋";
}
Tin tức CSS tháng 8
Marker đã có thể được target với CSS selector

Kết bài

Tin tức CSS tháng 8, 2020 có gì mới
Nguồn: Commitstrip

CSS ngày càng phát triển không ngừng, những tính năng mới vẫn liên tục được cập nhật (và vứt vào sọt rác). Vì vậy bạn hãy cẩn thận trước khi quyết định sử dụng nó nhé.

Thêm nữa, một trang web gối đầu giường dành cho bất kì frontend developer nào là trang Can I Use. Nếu bạn chưa biết đến trang này, thì hãy bookmark nó ngay nhé.

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

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

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

CSS Box Model và box-sizing: border-box là gì vậy?

css-box-model-va-box-sizing-border-box-la-gi-vay

Bài viết được sự cho phép của tác giả Lương Văn Phúc

Bài viết này là phần 2 của series về box model của mình. Bạn có thể theo dõi phần 1 và phần 3 (cuối) tại:

Phần 1: CSS Box Model – Cơ bản dành cho người mới bắt đầu

Phần 3: CSS Box Model – Các cách hiển thị element với thuộc tính display

Lý do mình chọn viết về CSS Box Model

Trong thế giới của CSS hay web layout nói chung, có rất nhiều thứ cơ bản mà một lập trình viên giao diện cần nắm vững. Nhưng mình chọn Box Model để giới thiệu đầu tiên vì nó rất cơ bản nhưng lại vô cùng quan trọng trong việc layout. Mình từng thấy các bạn junior khác chỉ layout kiểu đối phó (thử sai), viết css theo bản năng hoặc kinh nghiệm cá nhân, miễn sao kết quả giống design hoặc chạy được là được.

Việc này có rất nhiều tác hại:

  • Các bạn sẽ tự hình thành các kinh nghiệm sai và sử dụng nhiều lần về sau.
  • Sẽ có những bug layout tiềm ẩn và chỉ đợi 1 viên gạch bị vỡ, cả layout sẽ vỡ; bạn sẽ loay hoay không biết nên fix từ đâu hoặc chỉ cố gắng tìm cách lấp vá layout.
  • Code của bạn sẽ rất khó maintain sau này, đặc biệt là khi có người mới vào.
  • Code của bạn sẽ bị audit (nếu có) và được đánh giá kém nếu có một bên thứ 3 nhìn vào.
  • Kiến thức không vững cũng rất dễ bị vặn vẹo trong các buổi phỏng vấn.

Trong các bài tiếp theo, mình sẽ viết về những chủ đề cơ bản và cũng rất quan trọng khác của CSS như Inheritance, Cascade, Specificity, BFC, Flexbox, Grid…

  5 điều phiền toái nhất của CSS
  CSS Framework có thật sự cần thiết như chúng ta nghĩ?

Bài viết này dành cho ai?

Bạn hãy tưởng tượng mình đang tham gia một buổi phỏng vấn và được hỏi câu “Box model trong CSS là gì?”. Nếu bạn cảm giác không tự tin trả lời câu hỏi này, hoặc chỉ trả lời kiểu cụt ngủn “nó nói về padding, margin, border của mấy cái element trên trang web”, thì bài viết này là dành cho bạn.

Mình mặc định bạn đã có chút kiến thức cơ bản về CSS nên sẽ không giải thích chi tiết những phần ngoài phạm vi bài viết.

CSS Box Model là gì?

Có một điều nếu bạn luôn phải nhớ là bất kì element nào trên trang web đều là một khối hình chữ nhật, kể cả các hình tròn, hình oval, hay các đoạn text dài ngắn khác nhau:

CSS Box Model và box-sizing: border-box là gì vậy?Tất cả element trên trang web đều là các khối hình chữ nhật.

Vậy để giúp browser biết được một element rộng/cao bao nhiêu để render cho chính xác và đúng ý của developer, box model là thứ mà browser dựa vào để tính toán. Nói lý thuyết hơn, box model trong CSS chỉ đơn giản là một tập các quy tắc và công thức cộng trừ để giúp browser xác định được chiều rộng, cao (và một số thứ khác) của một element.

Các thành phần của Box Model

Như mình chia sẻ ở trên, bất kì element nào cũng là một khối hình chữ nhật, và nó bao gồm 4 thành phần: content, padding, border, và margin (tốt nhất là không nên Việt hóa những từ này 😃 ). Mỗi thành phần đều có một đường biên bên ngoài tương ứng: content edge, padding edge, border edge, margin edge.

  • content: là vùng chứa nội dung của một element, với chiều rộng/cao được xác định qua thuộc tính width và height. Vùng này thường chứa text, hình ảnh, video…
  • padding: cho biết độ rộng của vùng padding bao quanh vùng content
  • border: cho biết độ rộng (và style) của border bao quanh vùng padding
  • margin: cho biết độ rộng của vùng margin bao quanh vùng border

Là một developer, bạn có thể dễ dàng xem được các thuộc tính này của các element rất trực quan thông qua DevTools của browser.

Công thức tính đơn giản mặc định:

  • Chiều rộng của một element = chiều rộng content width + padding trái + padding phải + border trái + border phải
  • Chiều cao của một element = chiều cao content height + padding trên + padding dưới + border trên + border dưới

Các thuộc tính css tương ứng:

  • Chiều rộng/cao của content: widthheight
  • Paddingpaddingpadding-leftpadding-rightpadding-toppadding-bottom
  • Borderborderborder-leftborder-rightborder-topborder-bottom
.element {
  width: 80px;
  height: 100px;
  padding: 30px 20px 40px;
  margin: 30px auto;
  border: 1px solid black;
}
CSS Box Model và box-sizing: border-box là gì vậy?
Các thuộc tính cơ bản của box model

Có thể bạn để ý mình không liệt kê margin trong công thức. Mặc dù margin là một phần của box model và đi kèm với element, nhưng nó không được tính vào chiều rộng/cao của element.

Có bạn từng hỏi mình margin và padding khác nhau thế nào. Mình sẽ có một bài viết phân biệt chi tiết sau, nhưng nói đơn giản thì margin là vùng ở bên ngoài border, còn padding là vùng bên trong border, và khi nào dùng margin/padding cũng là một điều căn bản mà các bạn developer cần nắm vững (bạn có thể google để biết thêm về sự khác nhau giữa chúng).

Tất cả chỉ là quá khứ, hãy cùng quay về hiện tại:

Vấn đề từng gây khó chịu 1:

Khi layout một trang web, chắc chắn sẽ có những lúc bạn tăng giảm padding của một element, hay thêm border cho nó đẹp hơn (theo thiết kế mới của designer chẳng hạn). Vấn đề phát sinh là khi bạn thực hiện các thay đổi trên, tổng chiều rộng của element sẽ thay đổi và làm cả layout bị xê dịch vì những thay đổi đó.

Ví dụ cho dễ hiểu:

Element (chiều rộng) = 200px (content) + 40px (padding) = 240px

Khi bạn tăng padding lên 60px, chiều rộng của element sẽ tăng lên 260px, và sẽ đẩy những thứ xung quanh làm thay đổi layout. Để sửa lỗi này, bạn phải giảm chiều rộng của content còn 180px, để đảm bảo tổng chiều rộng vẫn là 240px. Giá như content nó tự co giãn để đảm bảo tổng chiều rộng không đổi thì tốt biết mấy.

CSS Box Model và box-sizing: border-box là gì vậy?
Thay đổi padding làm thay đổi layout tổng
CSS Box Model và box-sizing: border-box là gì vậy?
Thêm border làm thay đổi layout tổng

Vấn đề từng gây khó chịu 2:

Một lỗi layout thường gặp khác là chiều rộng của element con bị tràn ra khỏi cha

.parent {
  width: 300px;
  height: 300px;
  padding: 20px;
  border: 2px solid greenyellow;
}

.child {
  width: 300px;
  height: 200px;
  padding: 30px;
  color: #ffffff;
  background-color: steelblue;
}
CSS Box Model và box-sizing: border-box là gì vậy?
Lỗi layout thường gặp khi element con tràn ra khỏi cha

Giải pháp hiện tại

Box model được nâng cấp (rất lâu rồi) với thuộc tính box-sizing, 2 value chính là: content-box và border-box

  • content-box: tất cả element đều được gán mặc định là content-box, và cũng là những gì mình phân tích ở trên. Lưu ý lại, thuộc tính width và height là để định nghĩa chiều rộng/cao của phần content mà thôi nhé.
  • border-box: thuộc tính width và height sẽ tự động bao gồm luôn content, padding và border, còn chiều rộng của content sẽ tự động co giãn tương ứng nếu chúng ta thay đổi padding và border, đảm bảo kích thước của cả element sẽ không thay đổi, đồng nghĩa với việc layout tổng sẽ không thay đổi.

Và khi box-sizing ra đời, “rất hiếm” developer nào (quan điểm cá nhân) muốn quay lại quá khứ và sử dụng box-sizing với value là content-box nữa trừ những trường hợp đặc biệt của project (Cho mình biết nếu bạn có trường hợp nào cần dùng content-box nhé)

Công thức tính theo box-sizing: border-box:

  • Chiều rộng của một element = width = chiều rộng content (auto) + padding trái + padding phải + border trái + border phải
  • Chiều cao của một element = height = chiều cao content (auto) + padding trên + padding dưới + border trên + border dưới
CSS Box Model và box-sizing: border-box là gì vậy?
box-sizing: border-box
 giải quyết các vấn đề về layout rất tốt

Trang web có cả nghìn element, liệu việc thêm thuộc tính box-sizing vào từng element có khả thi?

Tất nhiên là chúng ta sẽ không phải thêm thủ công vào từng element, với sự giúp đỡ của Universal selector *, chúng ta chỉ cần một dòng CSS đơn giản:

* {
  box-sizing: border-box;
}

/* Hoặc cẩn thận hơn */
*, *::before, *::after {
  box-sizing: border-box;
}

Với đoạn code trên, tất cả element sẽ được canh chỉnh theo border-box, và đương nhiên bạn vẫn có thể dễ dàng override cho từng element cụ thể mà bạn muốn

.content-element {
  box-sizing: content-box;
}

Lưu ý

Để không làm bài viết phức tạp hơn, mình cố gắng trình bày những trường hợp đơn giản và điển hình nhất và bỏ qua một số chi tiết khác. Ví dụ: Chiều rộng/cao của element còn bị ảnh hưởng bởi nhiều yếu tố khác như min-widthmax-widthmin-heightmax-height, các hiệu ứng của flexbox…

Lời kết

Cảm ơn bạn vì đã đọc đến tận cuối bài. Hi vọng bài viết đã bổ sung thêm phần nào kiến thức về CSS Box model cho bạn.

Box model là nội dung khá cơ bản và được sử dụng hầu như mỗi ngày của bất kì frontend developer nào. Vì thế nếu bạn chưa nắm vững nó thì hãy dành thời gian tìm hiểu thêm nhé.

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

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

Xem thêm các vị trí tuyển dụng it lương cao tại TopDev

Dịch vụ thị trường Trí tuệ nhân tạo AI Landscape

thị trường Trí tuệ nhân tạo AI 2020

Thị trường Trí tuệ nhân tạo AI so với những quốc gia trên thế giới nói chung và Đông Nam Á nói riêng thì thị trường Trí tuệ nhân tạo AI được xem là khá “lạc hậu” so với các nước bạn.

Để có thể biết thêm chi tiết tốc độ tăng trưởng của thị trường Trí tuệ nhân tạo AI, TopDev xin gửi đến bạn đọc bảng báo cáo về Thị trường Trí tuệ nhân tạo Landscape 2020 với đầy đủ các số liệu cụ thể.

Trong bài viết dưới đây, TopDev sẽ phân tích tình hình thị trường Trí tuệ nhân tạo AI 2020 đã bị giúp ích như thế nào trong giai đoạn dịch Covid-19.

Xu hướng thị trường Trí tuệ nhân tạo AI 2020

Trong vài chục năm trở lại đây, Việt Nam đã cố gắng phát triển vươn lên và đã đạt được những thành tựu nhất định trong ngành.

Tuy không đạt được nhiều thành tựu lớn như nước bạn nhưng ngành Trí tuệ nhân tạo ở Việt Nam cũng đã có những bước phát triển nhanh vượt bậc trong cuộc cách mạng công nghệ.

Trong những năm tiếp theo, dự báo vẫn sẽ là những năm tập trung nguồn lực để phát triển AI. AI ngày nay đang dần đi vào trong cuộc sống của mỗi người, thay thế con người làm được nhiều hoạt động sản xuất.

thị trường Trí tuệ nhân tạo AI 2020

Xem thêm báo cáo về Thị trường Trí tuệ nhân tạo Landscape 2020

Trong thời gian qua chính phủ đã có nhiều sự tập trung vào loại công nghệ này, đặc biệt là ở lĩnh vực ứng dụng AI vào việc chuyển giọng nói thành văn bản. Hiện tại, trí tuệ nhân tạo được đưa vào danh mục công nghệ cao ưu tiên đầu tư phát triển của chính phủ trong cuộc cách mạng 4.0, ứng dụng rộng rãi ở các lĩnh vực đa dạng hơn. 

Góp sức cùng những nỗ lực của Nhà nước, các ông lớn công nghệ tại Việt Nam như FPT, Viettel cũng nghiên cứu để ứng dụng AI trong đa dạng lĩnh vực, mà trong đó có thể kể đến y tế, giao thông, hay thương mại điện tử.

Ngành học AI được trường Đại học Bách khoa Hà Nội thành lập và tuyển sinh từ năm 2019 (với điểm xét tuyển trên 27) nhằm đảm bảo nguồn nhân lực được đào tạo bài bản, và chất lượng.

Hệ sinh thái AI tại Việt Nam cũng ngày càng phong phú với các cộng đồng trong nước, nổi bật là Liên hiệp các cộng đồng AI Việt Nam với các thành viên tiêu biểu: Câu lạc bộ  khoa – trường – viện công nghệ thông tin – truyền thông Việt Nam FISU; Cộng đồng nghiên cứu, triển khai và ứng dụng trí tuệ nhân tạo AI4Life; Cộng đồng chuyển đổi số – Digital Transformation; Cộng đồng Machine Learning cơ bản; Cộng đồng Google Developer; Cộng đồng Business Intelligence; Cộng đồng VietAI – trí tuệ nhân tạo Việt.

Ngoài ra, trong giai đoạn dịch bệnh bùng nổ, nhờ có công nghệ AI mà rất nhiều ứng dụng đã được ra đời để hỗ trợ cho công tác thông tin, báo cáo và công tác phòng ngừa dịch bệnh như ứng dụng Bluezone vừa được Chính phủ Việt Nam ra mắt hay đơn cử là web thông báo thời gian trực tiếp lượng người nhiễm bệnh, tử vong tại các nước trên thế giới như Kompa…

Vai trò của AI đối với thế giới được xem là vai trò chính cho sự phát triển của kinh tế, còn tại Việt Nam, vai trò của AI được nhà nước nhận định là công cụ công nghệ sẽ tạo ra sự đột phá, là công cụ chính cần được lưu tâm phát triển để thúc đẩy phát triển kinh tế, ứng dụng hiện đại. 

Đến bây giờ có một số người vẫn hiểu sai về Trí tuệ nhân tạo AI, Ai không chỉ đơn thuần là công nghệ và nó còn liên quan đến nhiều lĩnh vực khác nhau như tâm lý học, khoa học, toán học, điều khiển học, kinh tế, ngôn ngữ học, triết học.

Các nhà khoa học nổi tiếng cho rằng lợi ích của AI là việc nó có thể mô tả, phân tích và lập lại chính xác các vấn đề. AI được phát triển để có tư duy, trí tuệ cơ bản như:

  • Có khả năng học hỏi kinh nghiệm và áp dụng tri thức
  • Có khả năng xác định và chọn các đặc trưng quan trọng của đối tượng hay sự kiện hoặc quá trình
  • Ứng xử, xử lý tình huống từ đơn giản đến phức tạp
  • Có cung phản xạ và phản ứng nhanh chóng và chính xác đối với các tình huống mới
  • Có khả năng nhận dạng hình ảnh và hiểu được ngữ nghĩa
  • Có thể xử lý thông tin dạng ký hiệu và thao tác với chúng
  • Có khả năng sáng tạo ra cái mới và có trí tưởng tượng

công nghệ AI 2020

Tổng quan thị trường Trí tuệ nhân tạo AI 2020

Trong năm 2018, thị trường Trí tuệ nhân tạo AI có mức độ tăng trưởng 70% so với cùng kỳ năm trước đó là năm 2017, thu về doanh thu 200 tỷ USD, với sự phát triển này, Bộ trưởng Bộ Kế hoạch và Đầu tư – ông Nguyễn Chí Dũng nhận định rằng chúng ta cần thúc đẩy và phát triển công nghệ Trí tuệ nhân tạo mạnh mẽ hơn bao giờ hết để có thể thành công đột phá công nghệ trong 10 năm tiếp theo.

Ông cũng đồng thời nhận thông tin đến mọi người rằng: “Việt Nam xác định công nghệ AI là một trong các công nghệ đột phá, mũi nhọn. Để thúc đẩy phát triển AI, Chính phủ giao Bộ Kế hoạch và Đầu tư xây dựng Chiến lược quốc gia về Cuộc cách mạng công nghiệp 4.0”.

Theo ông, thị trường Trí tuệ nhân tạo AI 2020 thuộc nhóm ngành công nghệ được ưu tiên tập trung thúc đẩy phát triển. Để có thể đạt được những thành tựu mới trong ngành, chúng ta cần tập trung hơn trong việc đào tạo nhân lực, chủ yếu là:

  • Nâng cao trình độ đội ngũ giảng viên, người hướng dẫn
  • Nâng cao cơ sở hạ tầng, phòng thí nghiệm
  • Đầu tư thêm nhiều tổ chức, trung tâm đào tạo công nghệ mới
  • Lập quỹ đầu tư, hỗ trợ khoa học – kỹ thuật, Trí tuệ nhân tạo
  • Mở rộng thêm nguồn nhân lực có đam mê với công nghệ

  Một số lời khuyên nhanh để tiếp cận Trí tuệ nhân tạo

Ông Vũ Đức Đam, ông là Phó Thủ tướng Chính phủ Việt Nam cũng đã lên tiếng khẳng định rằng thị trường Trí tuệ nhân tạo AI là mối liên kết chặt chẽ giữa những thành tố trong thế giới hiện đại thu nhỏ mang tên Trí tuệ nhân tạo của cả nước.

Ông một lần nữa cho thấy tầm nhìn về thị trường Trí tuệ nhân tạo AI 2020, ông cho rằng bản chất tồn tại thật sự của Trí tuệ nhân tạo AI là để cùng nhau phát triển một xã hội trở nên văn minh, phát triển và an toàn hơn. 

Những dự án Trí tuệ nhân tạo hiện đang được ứng dụng tại các thành phố lớn ví dụ cụ thể là chúng đã được ứng dụng trong việc vận chuyển, kiểm tra an ninh, bảo mật nhiều loại thông tin riêng tư…

Có thể nói, ứng dụng của Trí tuệ nhân tạo không còn nằm bó buộc trong mức độ của những người yêu khoa học kỹ thuật nữa mà giờ nó đã trở thành vấn đề về việc phát triển đất nước.

Trí tuệ nhân tạo AI sẽ tạo ra cơ hội cho Việt Nam bứt phá, phát triển mạnh hơn, nó sẽ giúp kết nối giữa con người với máy móc, doanh nghiệp, Chính phủ, trường đào tạo…

Ứng dụng thực tế của Trí tuệ nhân tạo AI tại Việt Nam trong các lĩnh vực như giáo dục, giao thông, thương mại điện tử, y tế, ngân hàng, mạng xã hội… Có thể nói Trí tuệ nhân tạo AI có thể ứng dụng lên tất cả các ngành nghề, dịch vụ khác nhau không giới hạn phạm vi hoạt động, chính điều này tạo nên sự bùng nổ.

công nghệ AI 2020

Các ngành nghề có thể ứng dụng Trí tuệ nhân tạo để tăng năng suất, lợi nhuận, doanh thu, trải nghiệm khách hàng… đây là một bước tiến mới cực kỳ có lợi cho các ngành nghề khác giúp phát triển kinh tế.

Ở các nước phát triển như Đức, AI cũng được ưu tiên phát triển như ngành cốt lõi của đất nước. Deep learning –  được xem là cội nguồn của AI trên nền tảng Big Data, có thể giúp người dùng tận dụng nguồn dữ liệu có sẵn trong Big Data để làm việc hiệu quả hơn, phân tích hành vi người dùng chính xác hơn.

Tầm nhìn phát triển Trí tuệ nhân tạo AI

Công nghệ trí thông minh nhân tạo AI chắc chắn sẽ là 1 trong những công nghệ cần đặt nặng trách nhiệm và tập trung phát triển hết mình trong kế hoạch 10 năm tiếp theo của Việt Nam vì nếu phát triển đúng hướng và tận dụng tốt công nghệ AI thì chắc hẳn sẽ có sợ tiến bộ vượt bậc.

Về phía nước Đức, ông Ulli Waltinger, Giám đốc công nghệ Siemens cho rằng thị trường Trí tuệ nhân tạo AI đang từng bước tác động ngày càng mạnh mẽ đến sự phát triển của xã hội – kinh tế. Cũng như Việt Nam, tại Đức, công nghệ AI cũng được xem là yếu tố cốt lõi cần được tập trung phát triển mạnh để có thể gây được bước tiến lớn cho đất nước. C

ó hẳn 250 chuyên gia AI tại Siemens được đầu tư tạo môi trường tốt thoải mái nghiên cứu. Tập đoàn Siemens chỉ có một số nguyên tắc cần các chuyên gia phải tuân theo đó là phải tuyệt đối giữ kín bí mật công nghệ, chia sẻ kiến thức, có trách nhiệm trong việc phát triển AI.

Việc làm kỹ sư AI lương cao

Các quốc gia trên thế giới đầu tư vào thị trường AI

  AI đi vào thực tiễn (Phần 2): Trí tuệ nhân tạo đang xâm nhập và định hình tương lai

  AI-Powered Future: Data drive product - Trí tuệ nhân tạo vận hành Thế giới

Mỹ

Vào 4 năm trước, năm 2016, OSTP (Văn phòng Tổng thống về khoa học và công nghệ) của Mỹ gửi đến Chính phủ Mỹ 23 khuyến nghị về việc phát triển Trí tuệ nhân tạo AI. Bên cạnh đó, Hội đồng khoa học và công nghệ quốc gia Mỹ cũng đã đưa ra 1 số chiến lược để giúp Mỹ có hướng đi đúng đắn trong việc phát triển công nghệ AI. Các chiến lược đó là:

  1.  Đầu tư lâu dài cho việc nghiên cứu thị trường Trí tuệ nhân tạo AI 
  2. Triển khai và phát triển các phương pháp hiệu quả  sao cho có sự hài hòa trong công việc giữa con người với công nghệ AI 
  3. Hiểu rõ các vấn đề khi phát sinh sự việc về pháp lý, đạo đức có thể gây ảnh hưởng đến xã hội của AI và giải quyết nó.
  4. Cam kết việc đảm bảo an ninh và an toàn khi sử dụng các hệ thống AI
  5. Tiếp tục tìm tòi các nhóm dữ liệu lớn được chia sẻ và phát triển môi trường phù hợp để huấn luyện và kiểm nghiệm AI
  6. Tập trung đo lường và đánh giá chuẩn xác kết quả của các dự án công nghệ AI thông qua các tiêu chuẩn đã đặt ra từ trước
  7. Nắm vững nhu cầu nhân lực của việc nghiên cứu và phát triển Trí tuệ nhân tạo AI

thị trường Trí tuệ nhân tạo AI 2020

Trung Quốc

Trung là một trong những nước có nguồn vốn đầu tư vào ngành Trí tuệ nhân tạo AI lớn nhất. Chiến dịch phát triển công nghệ AI của Trung Quốc được phân chia theo 3 giai đoạn:

Giai đoạn 1: Được tiến hành vào năm 2020, trong năm nay Trung quốc chủ trương theo sát và bắt kịp nền công nghệ AI của các nước phát triển như Mỹ, Nhật với nguồn vốn đầu tư lên đến 150,8 tỷ USD.

Giai đoạn 2: Được lên kế hoạch tiến hành vào năm 2025, mục tiêu là trở thành quốc gia đứng đầu trong ngành công nghệ AI.

Giai đoạn 3: Từ năm 2030 trở đi, mục tiêu trở thành người đi đầu chủ chốt trong ngành AI đối với thế giới.

Anh

Nước Anh chú trọng đến việc đào tạo chất lượng nhân lực cho ngành AI, họ sẵn sàn kêu gọi đầu tư từ Châu Âu, Nhât và Mỹ, các tập đoàn tư nhân để có nguồn vốn dồi dào đào tạo hơn 1.000 tiến sĩ, 8.000 chuyên gia chuyên về công nghệ AI tại 2 trường đại học hàng đầu.

Khối EU

Để tránh việc chảy máu chất xám giữa các nước thì quỹ “EU Horizon 2020” và Ủy ban châu Âu đã đầu tư ít nhất 24 tỷ USD cho việc nghiên cứu AI. Vào cuối tháng 3 năm 2018, báo cáo của Pháp đánh giá Mỹ và Trung đang là 2 quốc gia phát triển đứng đầu trong công nghệ AI. Chính vì vậy, Pháp đã đầu tư 1,8 tỷ USD vào nền phát triển AI từ giờ cho đến 2022, mục tiêu của pháp là trở thành AI hub của khối.

Nhật Bản

Nhật là nước có thị trường Trí tuệ nhân tạo AI phát triển bậc nhất hiện nay, mục tiêu hiện nay của Nhật không còn gói gọn trong cụm từ công nghiệp 4.0 nữa mà là “xã hội 5.0”. Nhật là nước có nền công nghệ rất tiến bộ, họ đã ứng dụng công nghệ AI trong mọi khía cạnh cuộc sống từ xã hội, kinh tế, sản xuất cho đến đời sống… 

Ngoài ra, Nhật cho hay, chiến lược phát triển AI của Nhật sẽ ưu tiên phát triển trong linh vực y tế, chăm sóc sức khỏe và giao thông….hơn hết. Cụ thể là sẽ phát triển AI với mục đích hỗ lái xe không người lái, y tế… Để nói về các khoản đầu tư vào AI của Nhật thì ngân sách ít hơn hẳn so với mức đầu tư của Mỹ và Trung.

Hàn Quốc

Kể từ sau năm 2016, Hàn Quốc mới được Chính phủ ủng hộ trong việc phát triển Trí tuệ nhân tạo AI, vì trước đó Hàn có chủ trương quản lý chặt chẽ thông tin cá nhân nên Big Data tại Hàn không được dồi dào, làm ảnh hưởng đến sự phát triển của AI – đạt 3,2% thị phần AI trên toàn thế giới.

Nhưng kể từ năm 2016 trở đi thì Chính phủ đã chủ động trong việc phát triển AI hơn, cụ thể là Chính phủ đã đầu tư ~ 863 triệu USD (1.000 tỷ Won) cho việc nghiên cứu phát triển công nghệ Trí tuệ nhân tạo AI.

Mở ra một trung tâm nghiên cứu quốc gia có sự góp mặt của các công ty công nghệ lớn như LG, Samsung, Naver, Hyundai… các công ty này đều được đầu tư tàm khoản 3 tỷ Won cho viện nghiên cứu này. Chính phủ sẽ ưu tiên hỗ trợ nguồn lực, tài chính cho các dự án từ viện nghiên cứu.

thị trường Trí tuệ nhân tạo AI 2020

Tổng kết

Hầu như các nước trên thế giới bao gồm cả Việt Nam đều có sự nhận định và mục tiêu chung là xem thị trường Trí tuệ nhân tạo AI là công nghệ quan trọng, mang tính cốt lõi trong thời đại công nghệ 4.0. Có rất nhiều quốc gia đã “nhanh chân” ứng dụng công nghệ AI trong sản xuất, công việc và đời sống.

Tất cả các nước đều phải thừa nhận về những lợi ích mà Trí tuệ nhân tạo AI đã đem tới, AI làm thay đổi thói quen sống của con người, giúp ích cho kinh tế, y tế, quân sự và cả chính trị.

Chính vì những lợi ích đó nên xã hội loài người càng cần phải tập trung đầu tư chất xám, nguồn vốn để có thể phát triển mạnh công nghệ AI. Ngoài ra, các nước cũng nên có phương án, giải pháp phù hợp cho quy trình chuyển đổi hài hòa giữa con người và AI. 

Dự đoán thị trường Trí tuệ nhân tạo AI 2020 và trong tương lai sẽ có sự đầu tư lớn hơn lên đến chục tỷ USD. Vào năm 2022, công nghệ AI sẽ có những tác động, ảnh hưởng đến nhiều xã hội loài người trong tất cả các ngành hàng.

Nó sẽ giúp tối ưu hóa hiệu quả, thời gian, tăng năng suất và giúp phân tích dữ liệu dựa trên các thông tin, cơ sở khoa học với xác suất hiệu quả cao hơn cả con người.

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

  "Ở Việt Nam, cơ hội để thực sự làm về Trí tuệ nhân tạo còn quá ít, trong khi những thứ mang hình thù và dáng dấp AI thì quá nhiều"

  21 nghề nghiệp "đắt giá" trong tương lai, triển vọng và khó bị thay thế bởi trí tuệ nhân tạo

Xem thêm Top công việc IT tại TopDev!

Trải nghiệm khóa học nâng cao Machine Learning với VietAI

Machine Learning

Theo báo cáo mới nhất về những việc làm triển vọng của Linkedin năm 2020, kỹ sư Học Máy (Machine Learning) và kỹ sư Trí Tuệ Nhân Tạo (Artificial Intelligence) đứng đầu bảng với nhu cầu tuyển dụng tăng trưởng 74% mỗi năm trong 4 năm gần với mức lương cao mơ ước.

Trong khi đó, nguồn nhân lực chỉ đáp ứng được 10% nhu cầu thị trường Việt Nam. Nhận thấy được vấn đề này, đội ngũ những chuyên gia hàng đầu về AI từ Việt Nam và thung lũng Silicon của VietAI đã tạo nên khóa học trực tuyến Machine Learning (Học Máy) cơ bản vào tháng 8-2020.

Machine Learning

Khóa học Machine Learning tại VietAI có gì đặc biệt

Khóa học này được thiết kế dựa trên những kiến thức toán và lập trình nền tảng mà mọi người từ sinh viên cho đến những kỹ sư ở các lĩnh vực khác nhau đều có thể học được. Thông qua hình thức học trực tuyến, học viên có thể học ở bất cứ đâu và bất kỳ lúc nào. Không chỉ dừng lại ở việc học bằng cách xem những video được ghi hình sẵn, học viên còn được trực tiếp gặp gỡ, học hỏi và trao đổi với Giảng Viên, trợ giảng thông qua Webinar định kỳ trong suốt khóa học.

Chuẩn hóa về nội dụng học tập

Nội dung chương trình học được cập nhật bởi những kiến thức mới nhất từ trung tâm Công nghệ Trí tuệ nhân tạo – thung lũng Silicon (Mỹ) –  nhưng được chuẩn hóa và áp dụng vào trong bối cảnh Việt Nam, với những vấn đề gần gũi trong cuộc sống hằng ngày như bài thực hành lập trình thuật toán để phân loại xe gắn máy, quần áo thời trang hàng ngày v.v.

Khóa học này của VietAI còn đặc biệt bổ sung thêm những bài giảng về chủ đề về Reinforcement Learning (Học Tăng Cường) và tầm quan trọng của công nghệ này ở nhiều khía cạnh khác nhau. Do đó, học viên có thể xây dựng nền móng cho những lớp học chuyên sâu hơn như lớp Deep Learning (Học Sâu) cơ bản và nâng cao của VietAI.

Dàn cố vấn giàu chuyên môn từ các chuyên gia hàng đầu

Ban cố vấn của khóa học có sự góp mặt của TS. Lương Minh Thắng (Senior Research Scientist tại Google Brain), TS. Vũ Duy Thức (CEO kiêm Co-founder của Ohmnilabs và Kambria), PGS.TS Trần Minh Triết (Phó hiệu trưởng Trường Đại Học Khoa học Tự nhiên kiêm Viện trưởng Viện John von Neumann). Thêm vào đó, đội ngũ giảng viên khách mời gồm có Vũ Thùy Ngân (Research Scientist tại Deepmind) và Nguyễn Phong (Visiting Researcher tại Mila – Quebec Artificial Intelligence Institute). Ngoài ra, khóa học còn đặc biệt nhận được sự tài trợ bởi Google và FPT AI.

Machine Learning

Ngoài những tiện ích về hình thức học, học viên còn có thể học hỏi và xây dựng mối quan hệ với những chuyên gia hàng đầu về AI đến từ Việt Nam và thung lũng Silicon, qua đó học viên sẽ có thêm nhiều cơ hội được giới thiệu đến những cơ hội việc làm tại các công ty công nghệ hàng đầu ở trong và ngoài nước.

Kiến tạo những giá trị thực cho cộng đồng Trí Tuệ

Trải nghiệm thực tế  Machine Learning từ những người trong cuộc

Những cựu học viên của VietAI đều đạt được những thành tựu nổi bật trong lĩnh vực Trí Tuệ Nhân Tạo. Trong đó, VietAI được biết đến với việc đã đào tạo thành công hai Google Developer Experts trong lĩnh vực Machine Learning (Học Máy) đầu tiên tại Việt Nam, đó chính là anh Nguyễn Bá Ngọc và anh Nguyễn Thái Bình. Hơn nữa, chị Nguyễn Thanh Hòa, một trong những cựu học viên xuất sắc của VietAI, đã theo đuổi thành công đam mê của mình trên con đường nghiên cứu với vị trí Research Engineer tại Pasteur Institute, Pháp. 

Những khóa học của VietAI đều được đánh giá rất cao về chất lượng chương trình cũng như đội ngũ giảng dạy. Chương Huỳnh, cựu học viên của VietAI và hiện đang nghiên cứu Trí Tuệ Nhân Tạo tại VinAI, cho hay “VietAI đưa mình tới những kiến thức nền móng về Trí Tuệ Nhân Tạo qua những bài giảng súc tích dễ hiểu, những bài luyện tập đầy thực tiễn, và những câu chuyện nghề từ đội ngũ giảng viên đầy kinh nghiệm. Trải qua ba tháng, mình đã có thêm tự tin để tiếp tục theo đuổi con đường nghiên cứu chuyên sâu về Trí Tuệ Nhân Tạo cũng như định hướng rõ ràng hơn về công việc cho những năm sắp tới.”

Khao khát kiến tạo những giá trị mới

Hơn nữa, VietAI còn rất quan tâm đến việc xây dựng và đóng góp cho cộng đồng Trí Tuệ Nhân Tạo tại Việt Nam. Với mong muốn tạo thêm cơ hội và khuyến khích nhiều bạn tiếp cận nguồn kiến thức và theo đuổi lĩnh vực này, VietAI sẽ hỗ trợ thêm những phần học bổng cho khóa học, đặc biệt là học bổng cho phụ nữ.

Khóa học hiện đã mở đơn nhận học viên, hãy cùng VietAI đón đầu công nghệ và đăng ký khóa học trực tuyến Machine Learning (Học Máy) cơ bản ngay hôm nay! Mọi thông tin chi tiết về khóa học đều có thể tìm thấy ở đây: https://ml.vietai.org/.

Tham khảo thêm: Tuyển dụng lập trình Machine Learning lương cao tại Topdev

Viết cho tuổi 20

viet-cho-tuoi-20

Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm

“Are you happy in your life?”

Tui có thói quen soi gương mỗi sáng. Không hẳn vì tui là một kẻ ái kỷ, mà cảm giác được thức dậy, được tiếp tục sống, nó rất tuyệt. Có ai đó từng nói rằng: “Every day you wake up is a beautiful day!”.

  Đồng hành và gắn bó với một công ty, bao lâu là đủ?

  Sớm đòi hỏi nhưng thiếu nỗ lực, khuynh hướng làm việc của người trẻ?

Lúc 20 tuổi nhìn vào trong gương, tui tự nhủ 30 tuổi mình sẽ thế nào. Tui sẽ làm gì? Có giàu không? Tui sẽ gánh vác xã hội hay xã hội sẽ gánh vác tui? Tui có tìm được một nửa của cuộc đời, hay vẫn tiếp tục forever alone?

Và nếu lúc đó, nhân loại phát minh được cỗ máy thời gian, phiên bản 30 tuổi của tui quay lại, ổng sẽ nói gì với tui?

Thời gian nhanh như chó chạy, thấm thoát 10 năm trôi qua y như phim. Cỗ máy thời gian thì vẫn chưa có. Nhưng nghĩ lại … tui nợ thằng nhóc đó một câu trả lời.

Thôi thì viết tạm ở đây, khi nào 30 tuổi tự khắc nó sẽ đọc.

Tuổi đôi mươi

Thường thì người ta chỉ nên kể về bản thân khi đã thành công, và tui thì không nghĩ tui thành công hay có gì hơn người cả. Tuy nhiên blog của tui, tui thích thì tui viết thôi .

Những năm đầu của tuổi 20 trôi qua nhẹ nhàng không để lại quá nhiều dấu vết. Loay hoay cũng chỉ có ăn, ngủ với học. Học nửa chừng thì có thằng bạn rủ đi kinh doanh. Công việc nhẹ nhàng, không cần bằng cấp, chỉ cần biết chém gió và hô khẩu hiệu thiệt to. Nhỏ lớn cứ nghĩ đi làm được trả tiền là định lý bất di bất dịch rồi. Ai dè ngược đời mới ngày đầu đã tốn mợ 100k tiền tài liệu. Định xin má thêm chút tiền mua sách “dạy con làm giàu” thì bả tán vào mồm biểu nghỉ. Con bả bả dạy chứ sách siếc gì. Mà cũng may hồi đó chưa có trò ra phố đi bộ tuyên bố hùng hồn này kia. Thà mất tiền thì được chứ mất mặt thì nonono.

Ra trường may mắn tìm được việc ngay. Công việc thợ IT cắt template Joomla, lương 4 triệu/tháng không bao ăn ở. Công ty cấp cho một cái ghế nhựa Đại Đồng Tiến có cái lỗ tròn tròn ở giữa. Ngồi được 2 bữa ê mông chịu không nổi đành phải nghỉ. Lỗ mất 2 ngày công -___-. Mà kệ cha nó, mình còn trẻ, có gì đâu mà căng ¯\_(ツ)_/¯.

Sau đó, tui được nhận vào làm ở công ty Fu. Tính chất công việc không khác lắm nhưng được cái ghế ngồi thoải mái nên làm được tới 3 năm. Chắc tại mình lùn trắng thơm nên sếp tạo nhiều cơ hội thăng tiến. Đi làm vui cũng nhiều, nuối tiếc cũng không ít nhưng không tiện kể ra. Cơ mà có cái tip cho bạn nào định/đang build team nè: mua cái ghế càng xịn thì nhân viên gắn bó càng lâu.

Rồi tui xin nghỉ ở Fu để nhảy sang start-up I với mức lương thấp hơn và khối lượng công việc nhiều hơn. Tui nghĩ rằng họ có thể cho tui mức growth cao hơn. Mắc dịch cái sau khi pass probation ở I thì tui … nhận lời mời làm Engineering Manager cho start-up D. Offer không thể chối từ nên đành cáo lỗi cùng sếp I. Để rồi sau 8 tháng, start-up thành ra fucked-up. Công ty hết tiền. Anh em ra đường. Hên là lúc đầu công ty cấp Macbook nên thanh lý cũng được giá, trang trải được lương cho anh em. Cấp cái khác là anh em đói meo rồi. Tip nữa nè: có điều kiện thì mua Mac đi, lỡ công ty có cúp lương còn thanh lý cấn lương được.

Sáng đầu tiên thất nghiệp, tui nhìn vào gương, tự hỏi: “Cái quần què gì đang diễn ra vậy ta?”. Tui nghĩ rằng mình cần một khoảng thời gian off để tìm lại cân bằng. Sau đó, tui đi du lịch, làm shipper, giữ xe, tham gia meet-up, dự conference. Nói chung là không code cái quần gì cả. Không ngờ xả hơi cái đi tong 9 tháng. Hên là trước đó có dành dụm được chút tiền.

Không ngày nào trong 9 tháng đó tui không tự dằn vặt bản thân rằng mình đã sai ở chỗ nào. Sao không chịu ở yên mà nhảy việc làm chi? Để rồi tui nhận ra trong vòng một năm qua tui đã học được nhiều thứ hơn so với 3 năm trước. Vậy thì … đúng chứ đâu có sai!! Tốn con mợ nó 9 tháng để suy ngẫm vớ va vớ vẩn. Cơ mà tui lĩnh ngộ được cách để tiến bộ nhanh nhất là bước ra khỏi vùng an toàn của bản thân.

Thế là tui nhảy ra khỏi vùng an toàn thêm lần nữa, gia nhập công ty Fo ở một đất nước lạnh lẽo, một châu lục xa xôi.

Tui nghĩ đó là quyết định sáng suốt. Ở Fo tui được tôi luyện về công việc: từ cách định hình sản phẩm, cách làm việc nhóm, đến cách xây dựng hệ thống; học hỏi từ nhiều đồng nghiệp xịn: từ cách họ suy nghĩ, cách họ thuyết phục, đến cách họ giải quyết những bài toán cụ thể. Ngoài ra, bắt đầu cuộc sống mới ở một nơi xa lạ, tui học được cách tự lập, cách ứng phó với môi trường hoàn toàn mới: từ việc mùa đông mặc áo gì, khai thuế ra làm sao, đến cách cà khịa với tụi Tây như thế nào?

Đến tháng 9 năm ngoái, vợ chồng tui đã đón chào đứa con đầu lòng, đánh dấu kết không quá tệ cho tuổi 20.

Are you happy “in” your life?

Đọc đến đây hẳn bạn đọc cũng đứng ngồi không yên: lòng vòng nãy giờ, rốt cục thằng cha này định nói gì vậy?

Trước khi vào chủ đề chính, để tui dắt bạn đi thêm một vòng nữa. Số là vài tháng trước, tui có đọc một cuốn tiểu thuyết sci-fi tên là Dark Matter của Blake Crouch…

Chuyện kể rằng anh J là một giáo sư vật lý quèn, có 1 vợ 1 con gia đình hạnh phúc. Cơ mà ảnh có một sự nuối tiếc lớn trong cuộc đời. Số là ngày xưa anh J từng đứng trước cơ hội trở thành một khoa học gia ngôi sao nhưng ảnh đã từ chối để xây dựng gia đình nhỏ bên cô vợ D. Mặc dù cảm thấy hạnh phúc, nhưng lâu lâu anh J vẫn ngậm ngùi: “Nếu ngày ấy tiếp tục nghiên cứu, biết đâu giờ mình nhận giải Nobel rồi nhỉ?”.

Rồi một bữa ảnh ra quán bar để dự tiệc ăn mừng giải thưởng vật lý của một người bạn. Không ngờ đó trở thành chuyến đi định mệnh. Một người lạ mặt xuất hiện bắt cóc anh. Hắn đã hỏi anh một câu hỏi đầy chất “thiền” trước khi đánh ngất anh thêm một lần nữa:

Are you happy “in” your life?

Sau câu hỏi đó, cuộc đời anh quay ngoắt 180 độ. Khi tỉnh lại, anh J thấy mình vẫn ở nơi cũ nhưng không còn ai bên cạnh. Anh trở về nhà, nhưng dường như mọi thứ đã thay đổi. Vợ của anh không còn là vợ của anh nữa. Con anh thì chưa bao giờ ra đời. Những chuyện li kì liên tiếp xuất hiện.

Truyện diễn tiến tiếp ra sao chắc tui để bạn tự đọc. Cơ mà chủ đề lớn của Dark Matter thì khá đơn giản. Cuộc đời là vô số lần ta phải đứng trước những lựa chọn khác nhau. Mỗi quyết định sẽ rẽ đời ta theo một hướng nào đó. Tất nhiên ta sẽ phải sống tiếp với quyết định của mình. Nhưng nhiều lúc ta bâng quơ suy nghĩ, ở một thế giới khác, nơi mà ta đưa ra một quyết định khác, biết đâu ta hạnh phúc hơn bây giờ? Và, giá như được chọn lại, ta sẽ quyết định như thế nào?

Qua câu chuyện, thông điệp mà Dark Matter muốn truyền tải đó là: Đôi khi thay vì tập trung quá nhiều vào “việc làm lại”, ta có thể tìm kiếm sự trân trọng vào hiện tại, từ đó hy vọng tới tương lai.

Hồi nhỏ, má tui hay lèm bèm về “tri túc giả, nhân thường lạc” (tạm dịch: người biết hài lòng thì thường hạnh phúc). Mặc dù không dám cãi nhưng lúc đó tui cũng băn khoăn. Lúc nào cũng hài lòng thì sao thế giới phát triển. Nếu Newton hài lòng vì không tốn công hái mà táo vẫn rụng, sao ta có 3 định luật mang tên ông? Nếu Mã Vân hài lòng với nghề giáo viên anh văn thì sao ổng luyện thành công Đô La Thần Chưởng, trở thành cao thủ võ lâm?

Đương nhiên càng lớn thì càng ngộ ra thêm. Tui nhận ra mấu chốt không nằm ở “tri túc” mà nằm ở “thường lạc”. Nếu “thường lạc” là một cảnh giới mà ta muốn đạt tới (khúc này bác Nguyên Vũ nhập), thì biết hài lòng là một phương thức giúp ta tìm kiếm sự bình yên trong lòng. Tri túc không hẳn là dậm chân tại chỗ, hài lòng cũng không có nghĩa là cam lòng. Tri túc là một tâm thế giúp bạn thấy được “big picture” của đời mình. Từ đó, bạn biết mình có cái gì, và khi theo đuổi những thứ mà bạn mong muốn, bạn biết được mình phải đánh đổi bằng cái gì. Nói cách khác, tri túc giúp bạn sắp sếp các ưu tiên trong cuộc sống và nhận ra mức cân bằng của bản thân.

Từng có người dạy tui rằng: Sống là một quá trình mà bạn không ngừng tìm kiếm “trạng thái cân bằng” trong các mối quan hệ. Nếu bạn có chơi game The Sims, tui nghĩ bạn sẽ biết câu đó định nói gì. Trong game bạn được giao một nhân vật. Ứng với tính cách đã chọn, bạn cố gắng cân bằng các Sims bars của nhân vật: đáp ứng nhu cầu về ăn uống, năng lượng, quan hệ (xã hội), công việc, vv của chúng. Khi bạn bắt nhân vật vùi đầu vào công việc và học tập nhưng không dành thời gian nói chuyện với vợ/chồng, họ sẽ bỏ nhà ra đi. Hoặc bạn có thể cho nhân vật party chơi bời, nhưng họ sẽ không có tiền (ừa, trừ phi bạn biết cheat code).

Ngoài đời thì không có cheat code, cũng chẳng có mấy cây Sims bar để chỉ cho bạn biết rằng bạn đang thiếu cái gì cả. Bạn chỉ có thể tự canh chỉnh mức happiness của bản thân: biết mình có gì, thiếu gì và cần gì. Sau đó thì hài lòng với nó, và tìm cách cân bằng nó.

Đoạn kết

Trong thế giới mà ta đang sống, nơi mà chủ nghĩa tiêu thụ được tôn sùng tới mức bệnh hoạn thì thật khó để mà tri túc. Mọi thứ xung quanh đều được tối ưu để truyền thông điệp rằng: bạn cần đi nhanh hơn, sống gấp gáp hơn, kiếm nhiều tiền hơn, bạn sẽ mua được nhiều hàng hơn, trở nên hạnh phúc hơn. Người ta cho rằng: cái gì không mua được bằng tiền thì mua được bằng rất nhiều tiền.

Thật ra, tui nghĩ, nếu bạn chịu khó lâu lâu dừng lại một chút. Dừng hẳn. Chỉ một vài giây thôi. Bạn hít thở thật sâu. Nhìn xung quanh. Bạn thấy vợ con bạn đang ôm nhau ngủ khì khì. Bạn đang mải mê viết blog. Bạn viết dở như hạch, y chang như cái sự nghiệp của bạn vậy. Bạn chỉ là một Averge Joe không hơn không kém. Nhìn lên trên thì chả bằng ai, nhìn xuống dưới thì bạn cũng chẳng hơn mấy người. Bạn biết mình cần phải tiếp tục cố gắng. Tuy vậy bạn vẫn mỉm cười hài lòng. Vì bạn biết rằng: À thật ra thì … mình cũng có ai đó.

Đôi khi, hạnh phúc không đắt đến thế đâu…

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

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

Xem thêm các Jobs Fresher Developer hấp dẫn tại TopDev

Dịch vụ thị trường Fintech – Công nghệ Tài chính Landscape 2020

thị trường fintech 2020

Thị trường fintech tuy là một thị trường còn mới mẻ và non nớt ở thị trường Việt Nam nhưng sức ảnh hưởng của thị trường này khá lớn. Thậm chí nó còn làm thay đổi cả hành vi người dùng trong ngành Tài chính.

Theo báo cáo Thị trường Fintech Landscape nhận định rằng dịch vụ thanh toán trực tiếp lại nằm ngoài danh sách chịu ảnh hưởng của Covid-19. Vào cuối năm 2016 từ con số 40 công ty nay đã tăng gần bốn lần lên 140 ở thời điểm hiện tại trên nhiều lĩnh vực khác nhau (Trong đó, 32 đơn vị trung gian thanh toán được NHNN cấp phép đủ điều kiện kinh doanh).

Theo ý kiến các chuyên gia ngân hàng, để phát triển mạnh Fintech thì rất cần vốn đầu tư, từ công nghệ, thị trường cho đến nhân lực và cả người dùng, vì dù cho có bước phát triển mạnh mẽ, song Fintech vẫn là lĩnh vực mới ở Việt Nam và còn rất non trẻ nếu so sánh với mức độ phát triển trên thế giới.

Khái niệm Fintech là gì?

Financial Technology có nghĩa là Công nghệ Tài chính, gọi tắt là Fintech được hiểu nôm na là sử dụng công nghệ trong tất cả các hoạt động thuộc về dịch vụ tài chính thì được gọi là Fintech.

  10 bí kíp để startup và FinTech startup thành công đột phá
  CHINH PHỤC ĐƯỜNG ĐUA CÔNG NGHỆ CÙNG MOMO - ỨNG DỤNG FINTECH SỐ 1 VIỆT NAM

Cụm từ Fintech còn được sử dụng phổ biến chung cho các công ty sử dụng các công nghệ tiên tiến làm chủ đạo cho mục đích kinh doanh, nâng cao hiệu quả cho các hoạt động đầu tư, các hoạt động ngân hàng… bằng công nghệ internet, điện thoại thông minh, các phần mềm mã nguồn nói chung hoặc thậm chí là công nghệ đám mây…

thị trường fintech 2020

Xem thêm báo cáo về Thị trường Fintech Landscape 2020

Theo khía cạnh cắt nghĩa đầy đủ hơn, Fintech được tờ Huffington Post của Mỹ định nghĩa là một ngành nghề mới, đó là ngành công nghiệp tài chính đem áp dụng công nghệ tiên tiến để có thể tăng năng suất, nâng cao hiệu quả công việc trong lĩnh vực hoạt động tài chính. Nó ứng dụng công nghệ mạng internet vào các công quy trình, sản phẩm, ứng dụng, mô hình kinh doanh, và chỉ hoạt động được khi có sự can thiệp của công nghệ.

Chức năng của Fintech

Ngành Fintech có 2 chức năng chính phù hợp cho 2 nhóm đối tượng sử dụng, đó là các công ty chuyên về phục vụ, hỗ trợ người tiêu dùng và công ty hỗ trợ hoạt động công nghệ cho các định chế tài chính chủ chốt (back-office).

Nhóm đối tượng Công ty phục vụ người tiêu dùng:

Nhóm này sẽ cung cấp người dùng các ứng dụng, app mobile, sản phẩm thuộc về kỹ thuật số, công nghệ để cải thiện phương thức quản lý tiền bạc, tài chính cho người dùng, ngoài ra còn có thể cải thiện các trường hợp cá nhân khách hàng vay mượn, tài trợ vốn cho các startup nhỏ và vừa.

Nhóm đối tượng Công ty hỗ trợ hoạt động công nghệ:

Nhóm này là nhóm các công ty chuyên về “hậu cần” back-office, chuyên hỗ trợ tất tần tật các hoạt động công nghệ trong Fintech. Không chỉ thể, nhóm này còn hỗ trợ cho các định chế tài chính trong ngành Fintech.

Bất kỳ tổ chức/doanh nghiệp nào có phát sinh giao dịch về cho vay, nhận tiền, cho thuê tiền mua tài sản/tài chính, chuyển tiền, phát hành các phương thức thanh toán , bảo lãnh, cam kết tài chính, các công việc liên quan thị trường tiền tệ, chứng khoán, ngoại hối….. đều được gọi chung 1 cái tên là ‘định chế tài chính’. Ví dụ như ngân hàng là một định chế tài chính phổ biến.

Có thể hiểu, Fintech bao gồm những dịch vụ cơ bản về tiền tệ như thanh toán tiền, cho vay, chuyển tiền, gửi tiền thì nó còn có vai trò to lớn hơn, cao cả hơn đó chính là:

  • Crowd-Funding – Gọi vốn cộng đồng
  • Peer to peer lending – Cho vay đồng cấp
  • Personal Finance – Tư vấn tài chính cá nhân
  • Insur-Tech – Công nghệ bảo hiểm
  • Crypto Blockchain – Tiền tệ số hóa
  • Data Management – Quản lý dữ liệu

Tầm ảnh hưởng của ngành Fintech theo báo cáo của Landscape

Fintech có một ảnh hưởng khá mạnh đến ngành tài chính, có thể nói, ngành này mạnh đến mức đủ khả năng tái định hình lại ngành tài chính hiện tại. Nó tác động, ảnh hưởng mạnh mẽ đến từng thành phần chi tiết của ngành tài chính.

thị trường fintech 2020

Ở các công ty P2P (Peer to Peer Lending – kết nối người đi vay và người cho vay thông qua Internet) – các công ty cho vay hiện nay hoạt động khá hiệu quả nhờ vào Fintech. Fintech không những giúp giảm bớt nguồn nhân sự tư vấn mà còn giúp giảm bớt thời gian phê duyệt các khoản vay từ người dùng xuống chỉ còn trong vòng vài giờ.

Lược bỏ được các khâu giấy tờ phức tạp nhưng vẫn có tính hiệu quả và đảm bảo cao, an toàn, chính vì vậy làm tăng năng suất hiệu quả và khách hàng sử dụng.

Các chuyên gia của ngân hàng đầu tư tài chính lớn nhất thế giới Morgan Stanley đã dự đoán rằng, dù 5 năm trước, năm 2015, các khoản vay thông qua internet ở Mỹ có con số khá khiêm tốn là 20 tỷ USD. Nhưng 5 năm sau con số này sẽ tăng trưởng nhanh, và đạt kỷ lục lên đến 120 tỷ USD trong cuối năm 2020.

Trong lĩnh vực quản lý và đầu tư, thậm chí các quỹ đầu tư lớn như Vanguard và BlackRock đã đầu tư hẳn ‘robo adviser’ để tự động điều chỉnh hóa các danh mục đầu tư match với mức độ rủi ro khi đầu tư theo nhu cầu của khách hàng.

Có 1 vài quỹ đầu tư khác cũng đang cho thử nghiệm hình thức điều chỉnh tự động hóa mức độ rủi ro sao cho phù hợp với khách hàng bằng cách cho robot học các thuật toán cao cấp hơn.

Bên cạnh đó có 1 vài Startup và ngân hàng đầu tư đa quốc gia hay cả NHTW Anh đã cho ra mắt các loại tiền ảo (tương tự bitcoin) dùng để thay thế tiền mặt, có thể dùng để chuyển tiền…

Ngoài ra, top 5 xu hướng về Fintech đáng chú ý được thị trường fintech 2020 tìm hiểu và tổng hợp chính là: big data và AI, RPA – tự động hóa quá trình robot, giao diện đàm thoại, blockchain, thanh toán di động. Trong tương lai chắc hẳn 5 xu hướng này sẽ bùng nổ tại thị trường fintech 2020.

Các ảnh hưởng lớn như:

  • Thay đổi thói quen sử dụng dịch vụ của người dùng

Thấy rõ nhất ở các dịch vụ ngân hàng, Trong những năm trở lại đây, mỗi lần xuất hiện giao dịch, các khách hàng thay vì phải đứng xếp hàng đợi ngoài ngân hàng làm đủ thứ giấy tờ thủ tục như trước thì nay chỉ cần mở app của ngân hàng đó hoặc lên website là đã được hỗ trợ giao dịch.

Hiện nay hầu hết các ngân hàng tại Việt Nam đều phát triển cùng 1 lộ trình đó là phát triển website, ứng dụng ngân hàng, ngân hàng kỹ thuật số, mobile banking, tablet banking, giao dịch không giấy tờ….

  • Hỗ trợ phân tích khách hàng

thị trường fintech 2020

Cùng với các kỹ thuật công nghệ cao và hiện đại, ứng dụng kỹ thuật Big Data, thị trường fintech 2020 đã phân tích hàng ngàn hành vi khách hàng sử dụng giúp cho các ngân hàng, định chế tài chính thu thập thêm nhu cầu của khách hàng từ đó có thể cho ra những chiến lược kinh doanh, chế độ hậu đãi mới thu hút khách hàng hiệu quả hơn.

Đặc biệt, nhờ ứng dụng kỹ thuật Big Data này, các định chế tài chính cũng sẽ dễ dàng phác họa được con đường phát triển, giảm thiểu chi phí nhưng chất lượng vẫn được nâng cao, gia tăng trải nghiệm khách hàng.

Giao dịch không dùng giấy

Đây là xu hướng mới nối tiếp xu hướng “thanh toán không tiền mặt” mà trong bài báo cáo Dịch vụ thị trường thanh toán điện tử Landscape 2020 đã đề cập qua. “Giao dịch không dùng giấy” sẽ trở thành xu hướng mới ngày này, nhằm giảm thiểu chi phí giấy tờ không cần thiết, bảo vệ môi trường…

Các chi nhánh lớn nhỏ của ngân hàng không cần cạnh tranh nhau mọc lên như nấm để đáp ứng nhu cầu giao dịch nữa mà thay vào đó khách hàng sẽ làm điều đó trên app hoặc web. Giảm thiểu được rất nhiều loại chi phí vận hành hoạt động, thay vào đó sẽ đổ nhiều vốn và công sức hơn vào việc phát triển cũng như duy trì chất lượng công nghệ.

Tạo ra sân chơi chung – chia thị phần cho công ty Fintech

Để có thẻ duy trì được sự cân bằng của đôi bên, ‘nước lên thì thuyền lên’ các định chế tài chính sẵn sàng chia lại thị phần của mình cho các công ty Fintech tạo ra một sân chơi chung công bằng và cùng nhau phát triển.

Biến động ở các thị trường nhân sự

Thị trường fintech 2020 phát triển cũng làm các ngành khác ảnh hưởng theo, ví dụ như hậu quả của việc công nghệ phát triển đó là làm dư ra lượng người lao động ở các ngân hàng, công ty tài chính, chứng khoán, bảo hiểm…

Tuy là một ngành còn khá trẻ nhưng Fintech có tương lai khá sáng sủa. Các cơ quan, công ty, doanh nghiệp tài chính thế giới nói chung và tài chính Việt Nam nói riêng đều mong đợi Fintech sẽ mang đến làn sóng mới làm bùng nổ thị trường tài chính trong tương lai. 

Với những lợi ích mà Fintech đã đem đến như giúp giảm tải nhiều loại chi phí, minh bạch, giao dịch đơn giản tiện lợi thì chủ tịch Cục dự trữ liên bang Mỹ – ngài Janet Yellen đã nhận định rằng “nền công nghệ tiền ảo sẽ giúp nâng cấp hệ thống thanh toán quốc tế đã cũ kỹ”

Ngài Mark Carney – Thống đốc NHTW Anh đã nêu lên cái nhìn của ngài về Fintech và tin rằng ngành này có thể làm thay đổi nhận thức, cách thức làm việc của các ngân hàng hiện tại, đồng thời cũng sẽ ảnh hưởng tích cực đến các công ty và người dùng đang quản lý và tiết kiệm tiền bạc.

Tuy nhiên, ngài vẫn còn đắn đo về tính an toàn và mức độ chính xác của hệ thống tài chính và ngài hy vọng sẽ cải thiện được vấn đề này trong tương lai.

  VNG đồng hành cùng sinh viên thời đại mới khám phá công nghệ Fintech
  FE CREDIT TECHSPEC – TRẢI NGHIỆM LẬP TRÌNH VÀ LÀM VIỆC TẠI MÔI TRƯỜNG FINTECH HÀNG ĐẦU VIỆT NAM

Quy mô của Fintech trên thế giới

Vào năm 2016, rất nhiều công ty đầu tư mạo hiểm trên thế giới đã đầu tư tổng cộng 17 tỷ USD vào các Startup Fintech, tỷ lệ góp vốn này tăng gấp 6 lần năm 2012. 

Ở một đất nước tuy ít dân số nhưng lại có tiềm lực mạnh như Singapore thì đã có hơn 100 Startup về Fintech. Vì sự phát triển quá mạnh mẽ này mà rất nhiều ngân hàng truyền thông quan ngại rằng Fintech sẽ dần chiếm lấy thị trường của họ.

Để tránh bị Fintech vượt mặt, các ngân hàng cũng đã cố gắng lấn sân vào Fintech. Họ dùng chính thương hiệu lớn mạnh có sẵn của họ kết hợp công nghệ tiên tiến để thử nghiệm người dùng.

Tuy nhiên, điểm bất cập ở đây là hơn 90% hệ thống quản trị, quản lý tại các ngân hàng là “hàng lỗi thời”, do đó quá trình chuyển giao thử nghiệm từ ngân hàng truyền thống sang ngân hàng Fintech khá mất thời gian và tiền bạc vì họ phải nâng cấp toàn bộ hệ thống và training nhân viên sao cho có đủ tiêu chuẩn, kiến thức hỗ trợ được khách hàng của họ.

Một trong những ngành kinh tế thu hút nhân sự trẻ và đang hot hiện nay đó là ngành Tài chính – Ngân hàng.

Chính vì lượng khách hàng mới mỗi năm ngày càng có xu hướng hiện đại hóa và sử dụng công nghệ nhiều hơn nên các ứng dụng công nghệ Fintech cũng ngày càng được nâng cấp và cho ra đời những ứng dụng với chức năng mở rộng, hiện đại hơn… thế chỗ cho hầu hết các phương thức vận hành lỗi thời của các dịch vụ tài chính đã tồn tại từ rất lâu tại các ngân hàng hoặc các định chế tài chính.

topdev

Fintech tác động đến những ai?

Mặc dù ngành Fintech chỉ có 2 nhóm đối tượng sử dụng, là các định chế tài chính (công ty đầu tư, bảo hiểm, chứng khoán, tài chính, ngân hàng…) và khách hàng, tuy nhiên về mức độ tác động, ảnh hưởng thì bài báo cáo thị trường fintech sẽ chia làm 3 loại đối tượng bị Fintech ảnh hưởng trực tiếp và nhiều nhất. Đó là:

Định chế tài chính

Các định chế tài chính được xem là gốc rễ của Fintech, nó sử dụng ‘công cụ phát triển’ là Fintech để nâng cấp tất cả các hoạt động dịch vụ trong định chế tài chính để thu hút và giữ chân khách hàng. Vì nhận thấy tầm quan trọng của Fintech trong ngành Tài chính – ngân hàng tiên tiến này nên họ cũng đã đầu tư không ít vào các công ty phát triển Fintech.

Công ty Fintech

Đây là những công ty chuyên về cung cấp và phát triển công nghệ, cập nhật ứng dụng, phần mềm phù hợp cho từng mô hình định chế tài chính khác nhau. Có thể nói, họ là đội ngũ kỹ thuật công nghệ đứng sau các công ty định chế tài chính (một vài định chế tài chính lớn mạnh cũng có thể tự mình đảm nhiệm vị trí của các công ty Fintech và ngược lại)

52 Công Ty về Fintech đang chờ đón bạn

Khách hàng

Đây là nhóm đối tượng đơn giản nhất nhưng lại có sức ảnh hưởng lớn nhất. Nhóm đối tượng này là những người sử dụng sản phẩm, dịch vụ của các định chế tài chính. Khách hàng là nhóm đối tượng đứng giữa và hưởng lợi (chế độ, hậu đãi thành viên, công nghệ hiện đại)  từ các công ty định chế tài chính khi họ cạnh tranh với nhau.

Khuyết điểm của ngành Fintech

Dù được đánh giá cao là thế, nhưng Fintech vẫn mang các khuyết điểm cần được giải quyết dứt điểm. Các công ty Fintech cung cấp khá nhiều hình thức dịch vụ tài chính khác nhau, từ các loại tài khoản nghỉ hưu cho người lớn tuổi đến các khoản vay nợ, thế chấp… trực tuyến.

Vì tính đa dạng cũng như như tính đơn giản nên đã có khá nhiều người tham gia vào Fintech, tuy nhiên số lượng người sử dụng lại không thật sự hiểu rõ về bản chất của ngành và cả những nghĩa vụ và quyền hạn mà họ phải chấp nhận.

Các cá nhân có thu nhập thấp, hoặc các cá nhân không có cơ hội tiếp cận với Internet đều không thể sử dụng Fintech được và họ lo sợ rằng, Fintech sẽ thay thế hình thức ngân hàng truyền thống lâu nay.

Để bảo vệ người dùng và toàn hộ hệ thống Fintech mà không làm ảnh hưởng đến sự phát triển mạnh mẽ của nó, Mỹ cho biết họ sẽ hỗ trợ về luật về việc ban hành giấy phép chính thức cho các công ty Fintech kèm theo điều kiện nhất định.

Khi đó, các công ty Fintech này buộc phải tuân theo luật lệ, điều khoản khi hoạt động trong ngành Fintech. Chính điều này đồng thời sẽ giúp bảo vệ cả người dùng và các công ty Fintech mà không làm ảnh hưởng đến tiến độ phát triển của nó.

Bên cạnh những rủi ro có thể xảy ra đó, thì những lợi ích mà ngành Fintech đem đến là không thể phủ nhận. Thị trường fintech ngày càng phát triển mạnh mẽ, kéo theo sự phát triển kinh tế của thế giới về mặt tích cực.

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

Xem thêm Top công việc IT tại TopDev!

Các mức độ kiểm thử được sử dụng trong kiểm thử chức năng của một phần mềm

Các mức độ kiểm thử được sử dụng trong kiểm thử chức năng của một phần mềm

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

Trong vòng tròn phát triển sản phẩm, kiểm thử phần mềm là bước cuối cùng trước khi sản phẩm đến tay khách hàng. Có rất nhiều mức độ khác nhau trong quá trình kiểm thử. Mỗi mức độ sẽ gồm nhiều phương pháp khác nhau có thể được sử dụng trong quá trình tiến hành kiểm thử. Hai mức độ kiểm thử chính sẽ là : kiểm thử chức năng và kiểm thử phi chức năng.

  Unit Test là gì? Khái niệm và vai trò
  Hướng dẫn viết unit test trong React

Trong bài viết này chúng ta sẽ tìm hiểu các phương pháp kiểm thử trong kiểm thử chức năng. Mỗi phương pháp kiểm thử có một mục đích cụ thể và cung cấp giá trị cho vòng đời phát triển phần mềm.

Kiểm thử chức năng là một loại của kiểm thử hộp đen, dựa trên các mô tả của phần mềm đã được kiểm thử. Ứng dụng sẽ được kiểm tra bằng việc cung cấp đầu vào và sau đó được kiểm tra xem đã đúng mục đích chức năng được thiết kế chưa. Kiểm thử chức năng được tiến hành khi mà phần phềm đã hoàn thành, tích hợp vào hệ thống để đánh giá xem đã đúng như mô tả chưa.

Đây là 5 bước liên tiếp trong khi kiểm thử chức năng một ứng dụng

  • Xác định chức năng liên quan của ứng dụng định kiểm thử
  • Tạo dữ liệu test dựa trên yêu cầu của sản phẩm
  • Xác định đầu ra dựa trên dữ liệu test và yêu cầu của ứng dụng
  • Viết kịch bản và chạy các test case
  • So sánh kết quả thực tế và kết quả dựa trên các test case đã viết

Một kiểm thử hiệu quả sẽ áp dụng những bước ở trên cho tất cả các chức năng và nó sẽ đảm bảo nghiêm ngặt các yêu cầu về tiêu chuẩn khi nói đến chất lượng phần mềm

Kiểm thử đơn vị (Unit Testing)

Loại kiểm thử này được chạy bởi developer trước khi cài đặt để chuyển giao cho đội kiểm thử thực hiện những test case chính thống. Unit test được developer chạy tương ứng cho từng đơn vị mã nguồn. Developer sử dụng bộ dữ liệu kiểm thử từ test case để đảm bảo chất lượng.
Mục đích của unit test là cô lập từng phần của chương trình và kiểm tra các bộ phận độc lập đấy đã hoạt động chính xác theo yêu cầu hay chưa.

Kiểm thử theo phương pháp này không thể tìm được mọi lỗi của ứng dụng. Không thể đánh giá mọi tình huống có thể xảy ra trong chương trình. Nó bị giới hạn bởi các tình huống và bộ dữ liệu test mà developer sử dụng để kiểm thử chương trình.

Kiểm thử tích hợp (Integration Testing)

Tích hợp có nghĩa là kết hợp. Ví dụ, trong giai đoạn kiểm thử này, các module phần mềm khác nhau được kết hợp và kiểm tra thành một nhóm để đảm bảo rằng hệ thống tích hợp đã sẵn sàng để kiểm thử hệ thống.

Kiểm thử tích hợp kiểm tra luồng dữ liệu từ một module này đến một module khác. Loại kiểm thử này được thực hiện bởi những tester.

Có hai kiểu : Tích hợp từ dưới đi lên (Bottom-up integration) và tích hợp đi trên đi xuống (Top-down integration)

Tích hợp từ dưới đi lên:

Việc kiểm thử được bắt đầu bằng unit test, sau đó sẽ đi đến mức cao hơn, đó là kết hợp các thành phần và chức năng của hệ thống.

Tích hợp từ trên đi xuống:

Những module cấp cao nhất được thử nghiệm đầu tiên rồi đến các module thấp hơn được thử nghiệm.

Trong một môi trường phát triển phần mềm hiện đại,  kiểm thử từ dưới lên thường được thực hiện đầu tiên và sau đó là kiểm thử từ trên xuống. Quá trình này được kết thúc sau nhiều vòng kiểm thử trên ứng dụng hoàn chỉnh, tốt nhất là sử dụng các kịch bản kiểm thử dựa trên các tình huống thực tế.

Kiểm thử hệ thống (System Testing)

Kiểm thử hệ thống được thực hiện trên một hệ thống hoàn chỉnh, tích hợp. Nó cho phép kiểm tra sự tuân thủ của hệ thống theo yêu cầu. Loại kiểm thử này kiểm tra sự tương tác tổng thể của các thành phần. Nó liên quan đến tải, hiệu suất, độ tin cậy và kiểm tra bảo mật.

Kiểm thử hệ thống thường xuyên nhất là kiểm tra cuối cùng để xác minh rằng hệ thống đáp ứng các đặc điểm kỹ thuật. Nó đánh giá cả nhu cầu chức năng và phi chức năng để thử nghiệm.

Đây là bước đầu tiên trong vòng đời phát triển phần mềm nơi mà ứng dụng sẽ được kiểm tra toàn bộ. Ứng dụng sẽ được kiểm thử kĩ để xác minh xem nó có đáp ứng các mô tả về chức năng và kĩ thuật không.

Ứng dụng được kiểm thử trong môi trường gần giống với môi trường thực tế nơi mà sản phẩm sẽ được cài đặt.

Kiểm thử chấp nhận (Acceptance Testing)

Kiểm thử chấp nhận là kiểm thử được tiến hành để tìm xem các yêu cầu của đặc điểm kỹ thuật hoặc hợp đồng có được đáp ứng với những yêu cầu của khách hàng hay không. Kiểm thử chấp nhận về cơ bản được thực hiện bởi người dùng hoặc khách hàng.

Đây là loại kiểm thử quan trọng vì nó được thực hiện bởi đội QA đánh giá xem liệu ứng dụng có đáp ứng các thông số kĩ thuật và yêu cầu của khách hàng. Đội QA sẽ tập hợp các kịch bản trước và các test case đó sẽ được sử dụng để kiểm thử ứng dụng.

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

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

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

 

5 sai lầm thường thấy khi viết react component

5-sai-lam-thuong-thay-khi-viet-react-component

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

Tổng hợp những lỗi thường thấy khi bạn viết react component, và làm sao để khắc phục

Đây cũng chẳng phải là những lỗi bắt buộc phải sửa, thoạt nhìn bạn cũng sẽ ko biết được nó có bị sai gì không, cũng không ảnh hưởng đến performance hay gì. Tuy nhiên mỗi người sẽ có ý kiến khác nhau trên một vấn đề, có người sẽ bắt fix, người thì cho là ko cần thiết, rất mong các bạn bổ sung cho quan điểm của mình.

  8 quyết định quan trọng về React Component
  Cách tôi viết document cho react component

Sử dụng useState khi không thực sự cần thiết

Đôi khi chúng ta sử dụng useState trong nhiều trường hợp không cần thiết, đưa những giá trị vào state không thực sự ảnh hưởng đến việc cập nhập component.

Ví dụ, trong ta có 2 cái nút: Counter và Submit, nút counter tăng giá trị count, nút submit sẽ gửi giá trị count lên API. Lưu ý là không có hiển thị giá trị count trên giao diện

function ClickButton(props) {
  const [count, setCount] = useState(0);

  const onClickCount = () => {
    setCount((c) => c + 1);
  };

  const onClickRequest = () => {
    apiCall(count);
  };

  return (
    <div>
      <button onClick={onClickCount}>Counter</button>
      <button onClick={onClickRequest}>Submit</button>
    </div>
  );
}

Nhìn chung code này cũng sẽ ko có lỗi gì đâu, chỉ là nếu để ý bạn sẽ thấy khi state thay đổi, component re-render, nhưng rõ ràng việc re-render cũng chẳng thay đổi gì, vì chúng ta không hiển thị giá trị count ra giao diện

✅ Cách làm đề nghị như sau

function ClickButton(props) {
  const count = useRef(0);

  const onClickCount = () => {
    count.current++;
  };

  const onClickRequest = () => {
    apiCall(count.current);
  };

  return (
    <div>
      <button onClick={onClickCount}>Counter</button>
      <button onClick={onClickRequest}>Submit</button>
    </div>
  );
}

Ở đây chúng ta dùng useRef, giá trị của useRef dù có thay đổi cũng không ảnh hưởng đến việc re-render.

Ví dụ nếu chúng ta muốn navigate đến một trang nào đó khi user click vào❌

function ClickButton(props) {
  const history = useHistory();

  const onClick = () => {
    history.push('/next-page');
  };

  return <button onClick={onClick}>Go to next page</button>;
}

Vấn đề là nếu làm như vậy, làm sau user có thể mở ra một tab mới?, các trình screen reader cũng sẽ ko hiểu được nó là một link (accessibility không tốt).

✅ Cách làm đề nghị như sau

function ClickButton(props) {
  return (
    <Link to="/next-page">
      <span>Go to next page</span>
    </Link>
  );
}

Handle action bằng useEffect

useEffect là một trong những hook tốt nhất, và tốn nhiều giấy mực nhất của react. Mặc dù cũng hữu ích đấy nhưng cũng không ít lúc phải mệt mỏi với nó.

Thí dụ có một cái component fetch một danh sách dữ liệu, rồi render ra

function DataList({ onSuccess }) {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [data, setData] = useState(null);

  const fetchData = () => {
    setLoading(true);
    callApi()
      .then((res) => setData(res))
      .catch((err) => setError(err))
      .finally(() => setLoading(false));
  };

  useEffect(() => {
    fetchData();
  }, []);

  useEffect(() => {
    if (!loading && !error && data) {
      onSuccess();
    }
  }, [loading, error, data, onSuccess]);

  return <div>Data: {data}</div>;
}

Ở đây chúng ta setup 2 hook useEffect, cái đầu để load dữ liệu lần đầu tiên, cái thứ 2 để gọi onSuccess khi có thay đổi về dữ liệu.

Vấn đề là nó làm mất quan hệ 1-1 giữa action và function cần gọi. Nói một cách dễ hiểu hơn là việc onSuccess không đảm bảo chỉ được gọi khi get dữ liệu thành công, đâu đó trong code bạn vẫn có thể có những cách khác để gọi onSuccess.

✅ Cách làm đề nghị như sau

function DataList({ onSuccess }) {
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);
  const [data, setData] = useState(null);

  const fetchData = () => {
    setLoading(true);
    callApi()
      .then((fetchedData) => {
        setData(fetchedData);
        onSuccess();
      })
      .catch((err) => setError(err))
      .finally(() => setLoading(false));
  };

  useEffect(() => {
    fetchData();
  }, []);

  return <div>{data}</div>;
}

Mỗi component một nhiệm vụ

Compose nhiều component nói chúng là khó, khó ở chỗ khi nào tách thì hợp lý. Lấy ví dụ như cái header sẽ xuất hiện một nút burger trên mobile và tab trên desktop❌

function Header({ menuItems }) {
  return (
    <header>
      <HeaderInner menuItems={menuItems} />
    </header>
  );
}

function HeaderInner({ menuItems }) {
  return isMobile() ? <BurgerButton menuItems={menuItems} /> : <Tabs tabData={menuItems} />;
}

Vấn để ở đây là với logic isMobile như vậy, chúng ta có thực sự cần thiết tách HeaderInner ra không?

✅ Cách làm đề nghị như sau

function Header(props) {
  return (
    <header>{isMobile() ? <BurgerButton menuItems={menuItems} /> : <Tabs tabData={menuItems} />}</header>
  );
}

Chỉ một công việc thực hiện trong useEffect

Nếu không cẩn thận việc sử dụng useEffect lắm lúc cũng giống như cơn ác mộng với componentWillReceivedProps và componentDidUpdate một thời. Tưởng tượng chúng ta có một component fetch dữ liệu từ backend, hiển thị breadcrumb tùy theo vị trí hiện tại ❌

function Example(props) {
  const location = useLocation();

  const fetchData = () => {
    /*  Calling the api */
  };

  const updateBreadcrumbs = () => {
    /* Updating the breadcrumbs*/
  };

  useEffect(() => {
    fetchData();
    updateBreadcrumbs();
  }, [location.pathname]);

  return (
    <div>
      <BreadCrumbs />
    </div>
  );
}

Chúng ta đang chạy 2 effect khác nhau: 1 là fetch dữ liệu, 2 là update breadcrumb trên giá trị location (nếu có thay đổi). Rõ ràng là đôi khi location có change thật nhưng chúng ta đâu cần fetchData chạy

Nên tách ra mỗi effect chỉ làm 1 việc thôi.

✅ Cách làm đề nghị như sau

function Example(props) {
  const location = useLocation();

  const updateBreadcrumbs = () => {
    /* Updating the breadcrumbs*/
  };

  useEffect(() => {
    updateBreadcrumbs();
  }, [location.pathname]);

  const fetchData = () => {
    /*  Calling the api */
  };

  useEffect(() => {
    fetchData();
  }, []);

  return (
    <div>
      <BreadCrumbs />
    </div>
  );
}

Không biết còn trường hợp nào chúng ta vẫn hay mắc phải không, các bạn có thể chia sẻ thêm.

Five common mistakes writing react components (with hooks) in 2020

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

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

Xem thêm các việc làm lập trình React hấp dẫn tại TopDev

Tìm đồng nghiệp thật khó

Tìm đồng nghiệp thật khó

Gần đây tôi tham gia phỏng vấn tuyển dụng cho team mình (lẫn cho công ty) khá nhiều. Càng làm tôi càng thấy tìm được một đồng nghiệp tốt đã khó, tìm ra một đồng nghiệp hoàn hảo gần như là không thể.

Phỏng vấn tuyển dụng là một qui trình khá căng thẳng, cho cả hai phía. Bạn có thể coi tuyển dụng cũng như kết hôn, khi hai người không hợp nhau nằm chung giường, thì dĩ nhiên sẽ khó có đứa trẻ nào được sinh ra.

Để tìm được bạn đồng nghiệp đáng yêu mà bạn muốn làm việc cùng hàng ngày, tương tự như tìm vợ, yếu tố lớn nhất là “may mắn”. Tuy nhiên khi đã may mắn, để gặp được người phù hợp, bạn nên làm thế nào để họ về chung một nhà, cũng như ngược lại khi gặp một người cố tình tán bạn nhưng lại thực sự không phù hợp, làm thế nào để không bị nhìn nhầm.

Nếu so sánh 2 nguy cơ: loại mất đồng nghiệp tốt (false positive), và phải làm việc cùng đồng nghiệp tồi (false negative) thì nguy cơ thứ hai gây ra hậu quả trầm trọng hơn rất nhiều.

Vậy làm thế nào để giảm nguy cơ thứ hai xuống tối thiểu?

Câu trả lời là không có câu trả lời! Ah mà thực ra là có câu trả lời nhưng nó giống như NP problem vậy. Tuy nhiên cá nhân tôi có đúc rút được một số cách để giảm thiểu nguy cơ thứ 2 (loại đồng nghiệp xấu).

Cách 1: Structured interview

Tìm đồng nghiệp

Tôi biết khá nhiều công ty, có khi phải lên đến 90% các công ty tôi biết là phỏng vấn theo phong cách giáo sư xoay, hay còn gọi là ngẫu hứng. Riêng định nghĩa của từ “ngẫu hứng” đã có tính chất bất định. Structured interview đơn giản là một bộ câu hỏi có chuẩn bị trước. Độ sâu của câu hỏi tất nhiên sẽ tuỳ vào kiến thức của ứng viên, nhưng việc nó có cấu trúc sẽ giúp rất nhiều vào việc không bỏ sót nhưng điểm nhỏ mà đến lúc làm việc cùng bạn mới nhận ra.

Ngoài ra có một ưu điểm quan trọng của cách này là, nó giúp tránh các thiên kiến. Là engineer bạn sẽ có rất nhiều sở thích, nhưng không có nghĩa bạn đem sở thích đó vào phỏng vấn. Việc bạn thích compiler hay low level programming rất dễ dẫn đến xu hương đem các vấn đề đó vào phỏng vấn, cũng như dễ làm bạn có thiện cảm với người có kiến thức sâu về các mảng này, mặc dù không chắc mảng đó có liên quan đến công việc hiện tại.

  13 điều giúp ứng viên... rớt phỏng vấn xin việc

Cách 2: Chú trọng system design test hơn algorithm test

Tìm đồng nghiệp

Tôi nghĩ algorithm test là một qui trình rất quan trọng để kiểm chứng 2 điểm: một là bạn có “biết code” hay không, hai là bạn có biết cách giải thích các suy nghĩ của mình một cách dễ hiểu không. Cả 2 điểm đều quan trọng, với tôi thì điểm thứ 2 (communication) quan trọng hơn.

Tuy nhiên algorithm test không khó để luyện tập, có rất nhiều tài liệu trên mạng mà bạn có thể dễ dàng tìm thấy. Ở một số nước như India hày US thì các practice về algorithm test hầu như ai cũng nắm rõ. Tất cả những ứng viên tôi phỏng vấn đến từ 2 nước này đều dễ dàng pass algorithm test với các câu trả lời “đẹp như sách” (tất nhiên lý do có thể bao gồm algorithm test của công ty tôi chưa đủ khó nữa).

Vì vậy cá nhân tôi thấy algorithm test chỉ nên chiếm tỉ trọng 10~15% trong việc quyết định hire/no hire. Thay vào đó các câu hỏi liên quan đến system design nên được tăng tỉ trọng thêm. Các câu hỏi liên quan đến system design nên gần gũi với các project hàng ngày của team bạn, thay vì dùng các mẫu câu hỏi tìm được trên mạng. Nếu bạn đang làm ecommerce thì nên hỏi cách thiết kế payment gateway, nếu bạn đang làm storage team thì nên hỏi về cách làm một database đơn giản.

Cách 3: Tìm người có thể thay đổi tình trạng hiện tại thay vì tìm người để giao việc

Tuỳ vào từng giai đoạn của công ty bạn có thể có nhu cầu tìm người khác nhau. Khi công ty ở giai đoạn prototyping có thể bạn sẽ nghĩ rằng chỉ cần một lập trình viên làng nhàng có thể hoàn thành feature sớm nhất có thể. Cách nghĩ đó là hoàn toàn sai lầm. Bạn có thể tuyển một bạn sinh viên mới ra trường, chưa có kĩ năng nhưng có tiềm năng lớn hơn là tuyển một bạn “senior” kinh nghiệm 10×1 năm. (10 năm làm cùng 1 công việc).

Nói thì dễ nhưng việc nhìn ra “tiềm năng” từ một người khó vô cùng. Cá nhân tôi, định nghĩa “tiềm năng” chính là việc người đó có khả năng “thay đổi”. Dù tình trạng hiện tại có tồi tệ đến đâu, luôn luôn có những thứ có thể làm cho tốt hơn. Khả năng thay đổi mọi thứ có thể ví giống như “Midas gold touch”. Một người không thoả mãn với hiện tại, và có khả năng thực thi để thay đổi hiện tại luôn là một người bạn muốn có mặt trong team mình. Chính vì vậy một câu hỏi ưa thích của tôi khi phỏng vấn là “bạn đã làm gì để cải tiến team của mình” và “bạn tự hào nhất với project nào của mình”.

Cách 4: Xoá bỏ các định kiến (bias)

Tìm đồng nghiệp

Con gái không biết code đc, ứng viên đến từ Sillicon Valley là hoàn hảo… là hàng loạt các định kiến mà hầu hết các công ty công nghệ đếu có. Bạn có thể không nói rõ các định kiến đó ra miệng, nhưng chắc hẳn nó sẽ vẫn đâu đó có trong đầu bạn. Structure Interview chính là cách tốt nhất để xoá bỏ định kiến. Ngoài ra việc bạn biết là bạn đang mang các định kiến cũng là một bước đầu tiên rất tốt. Hãy lập một list những điều bạn cảm thấy vừa lòng với đồng nghiệp hiện tại, và tạo nên một bộ câu hỏi dựa trên đó.

TL;DR

Tìm đồng nghiệp rất khó, thậm chí nhiều team còn chả có cơ hội thử thực hiện những điều tôi nói ở trên vì họ còn chả có hồ sơ đến! Tuy nhiên cá nhân tôi thấy nếu bạn đang ở vị trí ngược lại (người đi tìm việc chứ không phải nhà tuyển dụng), có một vài điểm có thể có ích với bạn:

  • Luôn cố gắng thay đổi tình trạng hiện tại. Bạn đang vướng trong một đống shit code, shit architecture, hãy vẽ nên một bức tranh mới tốt đẹp hơn và vẽ ra từng bước để thay đổi nó. Cá nhân tôi là một người ám ảnh bởi việc luôn làm mọi thứ tốt hơn, và tôi nghĩ cách nghĩ đó đã giúp tôi rất nhiều, kể cả việc thăng tiến trong công ty lẫn cả ngoài xã hội.
  • Tìm dự án nào mà khiến bạn tự hào là đã từng làm nó để ghi vào CV. Kĩ năng “tìm dự án ngon” là một kĩ năng thiết yếu mà tôi nghĩ bạn sẽ lãng phí thời gian lẫn năng lực cá nhân nếu không có kĩ năng này.
  • Khi không làm được hai điều trên ở team hiện tại (có thể vì chính trị công ty, vì công ty quá … lởm), hãy tìm việc mới ngay khi có thể.

TopDev via huydx.com

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

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

Quiz 04 gồm 2 Bounty có cấp độ với tổng giải thưởng lên đến $700

Quiz04

Quiz 04 bao gồm 2 bounty với cấp độ & giải thưởng khác nhau:

Bạn chỉ có thể tham gia 1 trong 2 bounty:

Quiz04

💎Standard Quiz 04 Bounty: tất cả mọi người đều có thể đăng ký tham gia. Bounty này có tổng cộng 15 câu hỏi với độ khó tương đương với các Quiz trước đây của Kambria Code Challenge.

👉Tìm hiểu thêm: https://bit.ly/Standard-Quiz-04-Bounty

Quiz04

💎Special Quiz 04 Bounty: chỉ những thí sinh đã tham gia ít nhất 2 Quiz của Kambria Code Challenge mới được tham gia Special Bounty. Special Bounty có tổng cộng 20 câu hỏi với độ khó cao hơn, cùng với giải thưởng lớn hơn.

Nếu bạn đủ điều kiện để tham gia Special Quiz 04 Bounty, hãy chú ý kiểm tra email thường xuyên. Kambria sẽ gửi email để hướng dẫn bạn tham gia vòng thi đặc biệt này.

Giải thưởng của Standard Quiz 04 Bounty:

🔹Giải quán quân: $75 + 79.000 KAT

🔹1 x Giải Á quân 1: $50 + 52.000 KAT

🔹2 x Giải Á quân 2: $25 + 26.000 KAT

Giải thưởng của Special Quiz 04 Bounty:

🔹Giải quán quân: $125 + 85,000 KAT

👉Đăng ký Standard Bounty: https://bit.ly/Standard-Quiz-04-Bounty

Quiz 04 là vòng cuối cùng của chương trình Kambria Code Challenge. Kambria Code Challenge là chuỗi các bài thi và hackathon trực tuyến liên quan đến lĩnh vực Trí tuệ nhân tạo (AI) và đã thu hút được sự tham gia của các lập trình viên xuất sắc tại Việt Nam và trên nhiều nước khác nhau. Ngoài ra, các lập trình viên có điểm số cao nhất sẽ được giới thiệu với các đối tác của Kambria, cung cấp các cơ hội việc làm mới.

Chương Trình Tích Lũy Điểm Thưởng

Các thí sinh tham gia và hoàn thành bài thi Quiz 04 sẽ được nhận Kambria Credit. Kambria Credit là chương trình tích lũy điểm thưởng, được sử dụng để thanh toán cho các dịch vụ trên nền tảng Kambria. Tìm hiểu thêm về Kambria Credit.

KAT là token sử dụng trên nền tảng của Kambria – Blockchain ủy quyền đầu tiên trên thế giới cung cấp mã nguồn mở robot và hệ sinh thái AI.

Thông tin cuộc thi:

Website: App.kambria.io/bounty

Kết hợp công nghệ vào Logistic thế nào là tối ưu?

Kết hợp công nghệ vào Logistic thế nào là tối ưu?

Được mệnh danh là “Uber xe tải”, với mục tiêu “số hóa” ngành Logistic – công nghiệp vận tải đường bộ, Logivan là một nền tảng kết nối giữa các chủ xe và chủ hàng một cách nhanh chóng và đúng thời điểm, đồng thời giải quyết bài toán xe rỗng chiều về, từ đó giảm chi phí cho logistics đi nhiều lần. Bài toán mà Logivan cần giải chính là: Làm thế nào để xe về mà không rỗng thùng?

Trong chuyên mục Chuyên gia nói lần này, cùng tìm hiểu cách nhà Logivan áp dụng công nghệ vào Logistic và những thử thách của họ với phần chia sẻ từ CTO của họ, anh Lê Văn Giáp.

Về khách mời Lê Văn Giáp:

  • Hiện tại anh đang đảm nhận vị trí giám đốc công nghệ của Logivan – một công ty về công nghệ vận tải ở Việt Nam.
  • Xuất thân là dân thuần tech – thuần công nghệ và có khoảng 15 năm làm việc trong ngành software development.
  • Đã từng startup 1 vài công ty công nghệ trong khoảng năm 2012 – 2015.
  • 5 – 7 năm gần đây nhất anh bắt đầu công việc về software cụ thể là Fullstack Dev và Solution Active Tech.

Anh có thể chia sẻ một chút về công việc hằng ngày với vai trò là 1 CTO được không?

Thật ra nhiều người cứ nghĩ CTO là vị trí ở trên cao, chỉ việc ngồi chỉ tay 5 ngón cho mọi người làm thôi nhưng mà thực tế thì không phải như vậy, CTO cũng phải đảm nhiệm rất nhiều việc, họp với các managers, trưởng bộ phận của các dự án và dịch vụ, suy nghĩ tìm ra các giải pháp công nghệ để tối ưu các sản phẩm, dịch vụ ở hiện tại và trong tương lai. Hơn nữa xuất thân là dân công nghệ và trong môi trường startup, Giáp luôn muốn mình sẵn sàng xắn tay vào cùng các bạn Dev như một coder có nhiều kinh nghiệm để giải quyết các bài toán khó.

Đối với anh, 1 CTO cần sử dụng thời gian của mình như thế nào cho hiệu quả?

Thật ra đối với CTO ở tập đoàn lớn thì có thể họ sẽ có một timeline và các thời gian biểu hơi khác, còn đối với CTO của một startup thì Giáp nghĩ là mình nên sẵn sàng để join vào bất cứ trường hợp nào thật sự cần đến mình. Tất nhiên một là mình chủ động join vào, hai là mình lắng nghe để biết khi nào các team, các dự án, sản phẩm khi nào cần đến mình thì mình sẵn sàng luôn.

Thật ra để nói công việc nào mình nên xắn tay vào và công việc nào không nên thì rất khó, vì công việc của một startup sẽ thay đổi liên tục, sản phẩm cũng phải tùy chỉnh để thích ứng với thị trường, phải làm sao để thử nhanh, làm nhanh nhất, phải thử nhiều cái sai để tìm ra cái đúng mà đi. Startup không có nhiều điều kiện về nguồn lực, về con người nên mọi công việc sẽ phụ thuộc vào tình hình thực tế. Về cơ bản thì Giáp không muốn áp đặt các quan điểm của mình mà luôn sẵn sàng tham gia vào những phần định hướng, thiết lập ý tưởng, đi với team khi bắt đầu giai đoạn design sản phẩm, áp dụng công nghệ. Sau đó mình sẽ dùng các công cụ quản lý để làm việc nhưng hoàn toàn flexible chứ mình không cưỡng ép mọi người, không quá sát sao, quá chi tiết, tuy nhiên cũng phụ thuộc vào từng tình huống. Mình nghĩ đó chính là cách một CTO trong startup còn nhiều thay đổi và không ổn định.

Theo anh đâu là kỹ năng & tố chất cần thiết của 1 CTO của công ty về công nghệ?

Thật ra những kỹ năng mặc định mà một CTO cần có đó là hiểu biết sâu sắc về technical, vì CTO là người phụ trách về công nghệ của công ty. CTO khác với Technical manager, đã lên C – level thì cần có mindset về business, mình cần tư duy của một doanh nhân, bên cạnh đó đã là CTO của startup thì cần có strong power, sự máu lửa để sẵn sàng đối mặt với những challenge, vì startup luôn có rất nhiều challenge, luôn luôn thay đổi và không ổn định, thậm chí là challenge đến từ các đối thủ cạnh tranh. Giáp nghĩ đấy là những yếu tố cần của một CTO có thể giúp công ty lớn mạnh về mặt công nghệ và có những sản phẩm khác.

Ứng tuyển ngay việc làm Technical Manager hấp dẫn

Về Logistic và sự kết hợp giữa Tech x Logistic

Đâu là những cơ hội và thách thức mà anh thấy trong ngành logistic Việt Nam?

Logistic là một ngành rất thú vị, nó là mạch máu, huyết mạch kinh tế của bất cứ quốc gia nào, một khi logistic bị trục trặc nào đó hoặc ngừng hoạt động thì nó ảnh hưởng ngay đến nền kinh tế.

Logis là gì? Đó là vận chuyển hàng hóa, mà nó ngưng thì chúng ta sẽ bị ảnh hưởng cả về mặt tiêu dùng, nhập khẩu, xuất khẩu,… Thị trường logistic ở Việt Nam có tổng volume khoảng 40 tỷ đô, trong đó phần dành cho tracking – vận tải bằng xe tải chiếm khoảng 27 tỷ đô, vô cùng lớn và tiềm năng. Hiện tại đây cũng chính là mảng mà Logivan focus vào khai thác, áp dụng công nghệ vào để tối ưu vận chuyển bằng tracking.

Ngoài ra thì cũng có một thách thức nữa, cái gì mà mọi người nhìn thấy được như Uber, Grab,… các công ty nước ngoài tham gia vào thị trường logistic của chúng ta khá lâu rồi, thách thức đặt ra là làm sao một công ty công nghệ có thể sử dụng công nghệ để giải quyết các vấn đề truyền thống. Bình thường khi chưa có công nghệ áp dụng vào thì các công ty vận tải đều sử dụng rất manual để vận hành hệ thống vận tải. Nhiệm vụ của Logivan nói riêng và các doanh nghiệp vận tải nói chung đều muốn xây dựng các giải pháp bằng công nghệ giúp tự động hóa, tối ưu quy trình sản xuất, đánh giá tất cả các khâu trong quy trình logistic để nâng cao hiệu suất, giúp cho các doanh nghiệp có được lợi nhuận tốt nhất.

Vậy anh có thể chia sẻ solution làm sao để xe về mà không có thùng rỗng?

Thật ra trước đây đã có những công ty tài xế, doanh nghiệp tài xế, có những công ty vận tải, doanh nghiệp vận tải, doanh nghiệp nhỏ, xí nghiệp vận tải, thậm chí là các tài xế hoạt động độc lập theo cách rất truyền thống, như là gọi điện, truyền miệng để booking shipment, chuyển từ điểm A đến điểm B thôi, nội thành hay liên tỉnh gì đó. Ít khi người ta biết được chiều về thì lấy hàng đâu ra để về, mà làm sao tính toán được để nó khớp thời gian ví dụ mình đi hết một ngày thì lúc về làm sao để có hàng, không ai biết được tài xế đi từ điểm A đến điểm B và về khi nào cả.

Nên solution mà Logivan đưa ra là xây dựng một hệ thống. Một tài xế hoặc 1 doanh nghiệp tham gia vào thì tất cả các activities của họ sẽ được hiển thị trên hệ thống. Lúc đó thì mình hoàn toàn có thể biết được là khi nào họ đi từ điểm A đến điểm B và các đối tác, khách hàng của mình người ta cũng biết được là thời điểm nào có thể chuyển hàng quay ngược lại. Vì biết trước được tất cả mọi thứ nên họ có thể bắt nhịp được order đó hoàn toàn bằng công nghệ. Và chúng tôi cũng có sử dụng các hệ thống AI để optimize giá cả để có thể phù hợp nhất với nhu cầu.

Các bạn lập trình viên khi join vào team của LOGIVAN thì sẽ gặp những khó khăn gì và học được những gì?

Ngành nghề nào cũng đều thú vị cả nhưng logistic có một điểm rất đặc biệt là khi release một giải pháp xong nó sẽ trực tiếp ảnh hưởng đến khách hàng ngay lập tức, vì ngày nào cũng có hàng trăm nghìn shipment, nên chỉ cần mình update version là nó ảnh hưởng luôn đến tài xế do họ sử dụng những giải pháp, ứng dụng của mình. Đó là điều thú vị mà rất nhiều các bạn trẻ khi join vào Logivan sẽ thực hiện các mission đó.

Tại Logivan, mission được đề cao nhất đó là sẽ không chuyến xe tải nào phải chạy thùng rỗng về và tất cả các bạn tham gia đều rất thích thú với vấn đề đó. Sau khi tham gia vào team rồi còn có rất nhiều các bài toán khác nữa, sử dụng AI, sử dụng big data, xây dựng các app trên mobile app, trên web. Còn về việc sẽ học được những gì thì ở bất kỳ lĩnh vực nào, chỉ cần bạn tham gia vào thì sẽ học được những thứ cần thiết.

Đối với lĩnh vực logistic, các bạn cần phải có được những cảm xúc và tư duy nó hơi đặc biệt một chút do nó ảnh hưởng đến khách hàng ngay lập tức và nhìn thấy kết quả ngay. Đặc biệt là nó cần tư duy nhiều hơn, ví dụ như một bạn làm quản lý hay dev mới vào Logivan sẽ được đi một chuyến để trực tiếp trải nghiệm cùng các tài xế để cảm nhận được chuyến vận chuyển đó thực tế nó như thế nào. Khi hiểu được điều đó thì mình sẽ hiểu được cung – cầu, hiểu được vấn đề thì mình làm sản phẩm mới sát được vấn đề, mới giải quyết được bài toán.

Ngoài ra, còn điều gì thu hút ứng viên join vào team mình?

Công ty nào cũng muốn tạo điều kiện tốt nhất cho các nhân viên của mình, ở Logivan cũng vậy. Với Logivan thì việc đầu tiên thu hút nhân tài chính là mission để giải quyết bài toán logistic. Còn khi đã vào rồi thì sẽ có các điều kiện như sau: Thứ nhất là môi trường rất năng động, trẻ trung và rất nhiệt huyết, vì thường thì các bạn đã chọn cái ngành rất đặc biệt này đều rất yêu thích, vì thích nên mới vào, cho nên các bạn làm việc rất nhiệt huyết luôn, làm không kể thời gian.

Thứ 2 nữa là có những bài toán khó để làm, nhất là với các bạn dev vào mà không thấy có bài tập khó sẽ cảm thấy nhàm chán nhưng mà anh make sure luôn là logistic sẽ có rất nhiều bài toán khó để làm. Và các phúc lợi khác cũng rất cạnh tranh, đặc biệt là có một CTO điển trai, vui tính và rất nhiệt huyết, máu lửa với những kinh nghiệm của mình.

Theo anh dự đoán thì trong vòng 5 năm tới, ngành nghề nào sẽ chiếm ưu thế?

Thật ra trong lĩnh vực công nghệ thông tin thì những ngành hiện tại đã nổi lên rồi và trong 5 năm tới thì mình nghĩ AI và Internet of Things là 2 cái chiếm ưu thế lớn nhất, thị trường có nhu cầu cao nhất về nguồn nhân lực. Sau đó là đến những thứ như fintech cũng nằm trong top 3 những ngành nghề mà các bạn trẻ nên để ý.

Thậm chí ngay cả những bạn CTO muốn định hướng lại nghề nghiệp của mình cũng có thể để ý tương lai của 3 ngành này, nên có sự chuẩn bị ngay từ bây giờ. Mình cảm thấy mình thích cái gì, thiếu cái gì để tập trung trau dồi, học hỏi những kỹ năng cần thiết để có cơ hội làm việc, nếu không thì càng về sau sự cạnh tranh của nguồn nhân lực sẽ càng lớn.

Anh nghĩ như thế nào về việc một số startups công nghệ khẳng định ứng dụng AI, IoT trong sản phẩm của mình?

Không chỉ startup mà mình nghĩ công ty nào cũng muốn áp dụng những công nghệ hiện đại vào trong quản lý để tối ưu vận hành, riêng với startup công nghệ thì mình có lời khuyên chân thành như thế này: Nếu như startup đang ở giai đoạn thắt chặt về chi phí, chưa có nguồn lực dồi dào mà chỉ tập trung vào sản phẩm thì mình nghĩ chưa cần theo đuổi những công nghệ quá tốn kém về mặt chi phí, AI, IoT, Cloud… tất cả đều tốn kém.

Nhưng trong 3 cái này thì mình thấy Cloud cũng không phải quá tốn kém nên có thể xem xét áp dụng được, những sponsor từ các công ty công nghệ lớn như Google, họ có thể tài trợ cho mình những gói miễn phí để hỗ trợ setup thì mình nên cố gắng tận dụng cái đó. Vì khi mình tự tin áp dụng AI hay Cloud vào quy trình quản lý nếu áp dụng hiệu quả thì chắc chắn sẽ giúp chúng ta vận hành thông minh hơn, tự động hơn thì sẽ giảm chi phí về mặt con người, tăng thời gian vận hành.

Khi mình có nguồn vốn đầu tư rồi thì cứ mạnh dạn đầu tư vào AI, IoT và cả Cloud luôn. AI giúp chúng ta sử dụng trí tuệ nhân tạo để quản lý, vận hành và phát triển sản phẩm được thông minh hơn. IoT thì nó liên quan về hardware, giải pháp giúp mọi thứ vận hành ổn định hơn. Đơn giản như bài toán xây dựng hệ thống chấm công tự động bằng nhận diện gương mặt, nếu các startup áp dụng được sẽ giúp tối giản quy trình chấm công hiện tại. Nó đem lại sự hứng thú cho nhân viên vì dù sao thì chúng ra cũng là một công ty công nghệ. Cloud hiện tại được sử dụng để đảm bảo các dữ liệu của mình được bảo vệ và không tốn nhiều nguồn lực về mặt con người.

Anh có thể chia sẻ những thử thách mà LOGIVAN đang gặp phải khi bắt đầu sử dụng AI cho sản phẩm không?

Bất cứ công ty nào cũng vậy khi bắt đầu đưa AI vào thì khó khăn nhất là data, làm sao đủ để đưa ra những dự toán đúng nhất. Khó khăn nhất của Logivan chính là cần nhiều dữ liệu vận hành và củng cố những data quan trọng của khách hàng, viết những thuật toán chuyên nghiệp nhất, làm việc với những dữ liệu ít hơn so với mong muốn một cách tương đối. Hiện tại các dữ liệu của Logivan khá nhiều, khá đa dạng, mô hình AI của Logivan cũng khá là ổn.

Lời khuyên đến từ chuyên gia Logistic

Anh có lời khuyên nào dành cho các bạn kỹ sư trong việc định hướng nghề nghiệp sau này không?

Nhất là các bạn vừa mới ra trường và các bạn ra trường được 1, 2 năm, Giáp cảm thấy các bạn bị vướng vấn đề về định hướng nên nhân tiện đây Giáp cũng chia sẻ luôn là các bạn đừng quá quan trọng nó. Khi chúng ta còn trẻ, cứ thoải mái mà lựa chọn chứ đừng quá cân nhắc là à cái này nó có thật sự hay không, banking có hay hay không, financial thật sự có ổn không hay là logistic thì nó có gì thú vị không? Khi chúng ta cứ mãi băn khoăn suy nghĩ thì cơ hội nghề nghiệp nó đã rơi vào tay người khác rồi nên hãy quyết định thật nhanh và đừng có đắn đo để chúng ta trải nghiệm.

Sau 1 năm, 3 năm khi các bạn đã trải nghiệm đủ rồi thì sẽ có các mindset khác, cách nhìn khác đến lúc đấy các bạn sẽ chọn đúng cái mà mình thích. Ví dụ có bạn sau 3, 4 năm cảm thấy mình chỉ thích mỗi logistic thôi thì các bạn join vào, các bạn khác thì thích làm về financial, fintech,… mỗi người sẽ có một lựa chọn khác nhau. Cho nên là khi còn trẻ mình cứ thoải mái đi, có cơ hội thì cứ join vào để trải nghiệm.

Đối với các doanh nghiệp, startups Việt thì anh có lời khuyên nào không?

Đối với startup thì việc định hướng cho sản phẩm rất quan trọng nhưng cũng đừng quá quan trọng nó lên. Trong vòng 2 – 3 năm đầu hầu hết các startup đều loay hoay với việc buildup sản phẩm, thậm chí chúng ta phải làm đi làm lại, sai rất nhiều thì cũng đừng ngần ngại việc đó, mình cử thử đi, cứ làm đi, làm 10 lần thì sẽ có một lần mình cảm thấy nó đúng nhất, ổn nhất, fix với tưởng tượng nhất thì mình focus vào.

Mình thấy có nhiều startup cứ cố bảo vệ quan điểm ngay từ đầu là chúng ta chỉ làm đúng với sản phẩm mà mình đề ra từ đầu thôi và không chịu thay đổi, thậm chí là bảo thủ trong việc thay đổi. Như vậy thì rõ ràng chúng ta sẽ bị đào thải vì bạn cứ giữ khăng khăng một cái ý tưởng ban đầu, sợ không dám thay đổi và cứ bảo thủ với quan điểm của mình thì chắc chắn sẽ bị đào thải vì sản phẩm nó không fix với môi trường đó.

Và đối với startup công nghệ có một điều rất quan trọng và rõ ràng là chúng ta phải tập trung vào công nghệ, có nhiều startup xuất thân là công nghệ nhưng khi quay cuồng với bài toán về business, về doanh thu, về lợi nhuận thì các bạn bỏ quên mất công nghệ là cốt lõi giúp các bạn tạo ra được sản phẩm tốt, tạo ra dịch vụ tốt giúp đem về lợi nhuận cho công ty.

Thêm nữa là startup thì nên có tầm nhìn, tất nhiên là nó không quá xa vì mình biết bản thân startup là không ổn định. Nhưng mình phải có tầm nhìn xa một chút để định hướng về mặt sản phẩm, thị trường. Hơn nữa định hướng đó sẽ cho bạn một kế hoạch rõ ràng hơn, các bạn sẽ cần nhân sự như thế nào, cần tổ chức về con người làm sao, phát triển theo mô hình nào, sẽ có những công cụ giải pháp gì. Các startup luôn bảo là mình cứ làm một cách thoải mái, tự do đi, đến đâu thì đến mà quên mất là mình có những công cụ rất đắc lực có sẵn, thậm chí là miễn phí, như các bạn có thể dùng các công cụ quản lý về công việc, rồi chúng ta có thể áp dụng các opensource về AI, sử dụng AI chúng ta có thể tối ưu bài toán business của mình lên, tối ưu về mặt quản trị, các tool về management, sử dụng các mô hình phát triển sản phẩm đang rất phổ biến.

Một vấn đề cuối cùng là quản lý tài chính, cần phải biết là giai đoạn nào mình cần tuyển bao nhiêu người, nên cân nhắc điều đó để startup có thể đi dài dài một chút, có thể đạt được thành công.

Cá nhân anh thường trau dồi kỹ năng và kiến thức từ những nguồn nào?

Muốn đi xa hơn trong lĩnh vực công nghệ thì phải liên tục học hỏi, học từ môi trường làm việc, học từ môi trường internet và từ sự chủ động học tập của bản thân, đọc sách về công nghệ, về business. Bây giờ đã là thế giới phẳng, chúng ta có thể search Google, Youtube có rất nhiều thứ để mình học, quan trọng là chúng ta có thích và chủ động làm điều đó hay không, chúng ta dành thời gian bao nhiêu một ngày để làm điều đó. Riêng bản thân Giáp ngày nào cũng liên tục học tập, có thể xem 1, 2 clip trên Youtube về ngôn ngữ lập trình, solution rất hay, hay những clip giới thiệu về các clip mới nhất của Google, Facebook, Microsoft mình cũng nên tham khảo. Ngoài ra có một keypoint đó là practice, đọc nhiều, nghe nhiều cũng không bằng dành thời gian để làm dự án, bài tập. Khi tự làm thì mình sẽ tìm ra được những phương pháp tốt nhất để trau dồi và giải quyết các dự án khó sau này.

Xin cảm ơn những chia sẻ rất bổ ích từ anh Lê Văn Giáp. Hy vọng với những công nghệ từ các doanh nghiệp, ngành Logistic của Việt Nam sẽ ngày càng tối ưu về cả chất lượng và chi phí. Đón chờ những số tiếp theo tại TopDev TV để học hỏi những kinh nghiệm từ các chuyên gia trong ngành.

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

 

Yaml cho web developer

Yaml cho web developer

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

Dạo gần đây, nếu bạn là Front End developer chắc sẽ gặp nhiều đến file có đuôi .yml ( ví dụ như .gitlab-ci.yml). Nếu bạn chưa biết kiểu file này, thì bài này mình sẽ giới thiệu túm lược để bạn làm quen.

File này được dùng khá nhiều cho việc thiết đặt và cấu hình. Mà nhiều nhất là dùng cho các thiết đặt CI/CD. Ngày xưa, khi chưa có Yaml, sau khi quá mệt mỏi với việc mỗi người mỗi ý trong việc viết file cấu hình, nổ ra cái ý tưởng hồi năm 2001

Giờ sao chúng ta không tạo ra một file cấu hình giống như chỉ dẫn nấu ăn, chữ thôi, cực kỳ dễ hiểu?

  • Yaml cũng là một dạng superset của người anh em JSON.
  • Superset là một ngôn ngữ chứa tất cả feature của một ngôn ngữ, rồi mở rộng thêm một số thứ nữa

Ví dụ như TypeScript là superset của Javascript

{
  "compilerOptions": {
    "module": "system",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": true,
    "outFile": "../../built/local/tsc.js",
    "sourceMap": false,
    "types": ["node", "lodash", "express"]
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

File JSON không quá khó đọc, tuy nhiên lại vướng một vài hạn chế:

  1. Không dùng biến được
  2. Không dùng biến môi trường được
  3. Không thể override value

YAML sẽ giúp ta làm được những điều chưa làm được ở json

compilerOptions:
  module: system
  noImplicitAny: true
  removeComments: true
  preserveConstEnums: true
  outFile: '../../built/local/tsc.js'
  sourceMap: false
  types:
    - node
    - lodash
    - express
include:
  - src/**/*
exclude:
  - node_modules
  - '**/*.spec.ts'

lưu ý đây chỉ là ví dụ, bạn không thể viết tsconfig bằng YAML, buồn thay

Một số nguyên tắc-cú pháp cần nắm

Thục đầu dòng

Thục đầu dòng rất quan trọng, bạn chỉ được dùng dấu khoảng trắng, không cho phép dùng tab

Viết comment

# I'm a comment
person: # I'm also a comment
  age: 20

Dạng danh sách

Có 2 cách biết, như đã nói là superset của json, nên chúng ta có cách thứ nhất i như json

people: ['Anne', 'John', 'Max']

Khuyến khích cách này hơn

people:
  - Anne
  - John
  - Max

Khai báo giá trị string

Trong JSON bạn chỉ một cách viết giá trị dạng String là đưa nó vào dấu ngoặc kép "", Yaml thì linh động hơn

company: Google # Single words, no quotes
full_name: John Foo Bar Doe # Full sentence, no quotes
name: 'John' # Using single quotes
surname: "Christian Meyer" # Using double quotes

Trong trường hợp bạn có chưa các ký tự đặc biệt, thì nên đưa vào dấu nháy kép.

Số

year: 2019 # Integer
nodeVersion: 10.8 # Float

Con trỏ

Khái niệm con trỏ xem như bạn đã biết nhé, mình không giải thích, cái này các bạn đi học chắc các thầy dạy kỹ lắm rồi.

Ví dụ như bạn đang viết một số config cho môi trường production và staging, tức nhiên là một config là giống nhau thôi, nên chúng ta chỉ cần trỏ nó qua một chỗ

Đây là không trỏ qua mà copy/paste huyền thoại

{
  "production": {
    "node_version": "13.0.0",
    "os": "ubuntu",
    "package_manager": "yarn",
    "run": ["yarn install", "NODE_ENV=${ENVIRONMENT} yarn build"],
    "env": {
      "ENVIRONMENT": "production"
    }
  },
  "staging": {
    "node_version": "13.0.0",
    "os": "ubuntu",
    "package_manager": "yarn",
    "run": ["yarn install", "NODE_ENV=${ENVIRONMENT} yarn build"],
    "env": {
      "ENVIRONMENT": "staging"
    }
  }
}

Để dùng con trỏ, chúng ta tạo trước một cái neo để sau này trỏ vào cái neo này

base-config: &base # tên cái neo
  node_version: 13.0.0
  os: ubuntu
  package_manager: yarn
  run:
    - yarn install
    - NODE_ENV=${ENVIRONMENT} yarn build

Sau đó thực hiện việc trỏ

base-config: &base
  node_version: 13.0.0
  os: ubuntu
  package_manager: yarn
  run:
    - yarn install
    - NODE_ENV=${ENVIRONMENT} yarn build

production:
  # dùng các thiết đặt ở neo tên là base
  <<: *base
  env:
    - ENVIRONMENT: production

staging:
  # dùng các thiết đặt ở neo tên là base
  <<: *base
  env:
    - ENVIRONMENT: staging
  67 tools, libraries và resources giúp Web developer "dễ thở" hơn
  Con đường mình đang đi để trở thành Fullstack Web Developer

Môi trường Shell/Bash

Như đã nói lúc đầu, file .yml rất được ưu dùng đề làm config, đặc biệt là config môi trường CI/CD.

Môi trường CI/CD thường là Linux, và chúng ta cũng có thể truy cập đến các biến môi trường của Linux.

Ví dụ như Github CI, chúng ta có thể chỉ định biến môi trường global nào chúng ta muốn truy cập

variables:
  NODE_IMAGE: node:10

stages:
  - build

test:
  image: $NODE_IMAGE
  stage: build

Cú pháp $ không phải của yaml mà là của shell/bash. Những gì Github CI sẽ làm là đưa toàn bộ những biến bạn đặt trong variables và tạo ra biến trong shell

Một vài hệ thống khác cũng inject các giá trị khác như commit ref, branch name, build time, secret key được đặt bên ngoài file config

variables:
  NODE_IMAGE: node:10

stages:
  - build

test:
  image: $NODE_IMAGE
  stage: build
  artifacts:
    name: $CI_COMMIT_REF_NAME

Ví dụ ở trên, chúng ta sử dụng biến môi trường $CI_COMMIT_REF_NAME của GitLab CI.

Hy vọng các bạn đã hiểu chút đỉnh về YAML và cảm thấy đọc file yaml không quá khó chịu nữa.

Tài liệu tham khảo

https://yaml.org/ https://www.json2yaml.com/ https://learnxinyminutes.com/docs/yaml/

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

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

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

AI: Chìa khóa của những điều con người đang hằng mơ đến

AI
Vào năm 2010, AI chỉ xuất hiện trên các bộ phim khoa học viễn tưởng như một sáng tạo siêu việt của loài người, song thật không thể tin được 1 thập kỷ sau đó, trí tuệ nhân tạo đã được hiện thực hóa và được áp dụng rộng khắp, được tích hợp vào các phương tiện nhằm tối ưu hóa và phục vụ nhu cầu của con người trong cuộc sống.
AI
 
Hiểu được sức mạnh của AI, chúng ta có thể đón đầu những xu hướng công nghệ trong tâm thế sẵn sàng cũng như chủ động vươn mình ra khỏi các khuôn khổ lạc hậu, lỗi thời. Vì lẽ đó, lần đầu tiên tại TPHCM, với tổng giá trị giải thưởng lên tới 400 triệu đồng, một hội thi về trí tuệ nhân tạo:

#AISOCHA2020 – HỘI THI “GIẢI PHÁP ỨNG DỤNG TRÍ TUỆ NHÂN TẠO TRÊN ĐỊA BÀN TP. HỒ CHÍ MINH NĂM 2020” được tổ chức với quy mô toàn quốc nhằm tạo ra không chỉ một sân chơi, đấu trường kiến thức mà còn là một bệ đỡ cho các ý tưởng đột phá được mạnh mẽ bước lên “vũ đài công nghệ” và tỏa sáng

mong muốn đưa hơi thở công nghệ mới đến từng ngóc ngách, đến từng cá nhân trên địa bàn TPHCM nói riêng và toàn quốc nói chung, thu hút các chuyên gia đầu ngành cùng bắt tay giải bài toán thiết thực xuất phát từ thực tiễn nhằm ứng dụng rộng rãi vào đời sống. Bên cạnh đó, tôn vinh các cá nhân, tập thể đã có cống hiến nổi bật trong công tác “thay da đổi thịt” một TPHCM trẻ trung – hội nhập – hiện đại.
 
3.0 đến 4.0 chỉ cách 1 đơn vị nhưng là cả một hành trình dài và chúng ta đang bước những bước đầu tiên cùng nhau trên con đường đó. “ ℎ ”
—————————————–
#AI #AISOCHA2020 #AISOCHA #SOCHA
Thời gian mở đơn: Trước ngày 24/8/2020
Link chi tiết sự kiện: https://bit.ly/3hDq6Fo
Link đăng ký dự thi: http://aichallenge.hochiminhcity.gov.vn/
Đối tượng: Không giới hạn đối tượng dự thi trên toàn quốc.

Tham khảo thêm các vị trí tuyển dụng kỹ sư AI lương cao tại Topdev.

Thêm kiểm tra type trong Javascript với VS Code

them-kiem-tra-type-trong-javascript-voi-vs-code

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

VS Code có một công cụ không thể tuyệt vời hơn cho các bạn viết JS một cách an toàn ko sợ sai type. Túm gọn chỉ bằng một comment thần thánh

  4 lý do để VS Code là Text Editor ưa thích của mọi lập trình viên
  8 extension cần thiết dành cho VS Code

Ví dụ, bạn muốn nghiêm cấm việc thay đổi type của một biến đã gán sẵn giá trị trước đó

var foo = 3;
foo = false;

Tất cả những gì bạn cần làm

// @ts-check
var foo = 3;
foo = false; // indicates error

VS Code sẽ thông báo cho bạn một lỗi rất dễ thương như thế này

Type false is not assignable to type Number

Một vài ví dụ sử dụng để bạn tham khảo

Kiểm tra params của hàm

function add(a, b) {
  return a + b;
}

add(1,2,3);

Code trên vẫn ko sai nhé, mặc dù chúng ta không hề khai báo param thứ 3. Thêm // @ts-check để thông báo khi vô tình truyền nhiều hơn số param cần thiết

Expected 0-2 arguments but got 3

// @ts-check
function add(a, b) {
  return a + b;
}

add(1,2,3); // complains about the `3`

Kiểm tra Object

// @ts-check
let gameObject = {
  x: 0,
  y: 0,
  width: 100,
  height: 100,
  getArea() {
    return this.width * this.height
  }
}

gameObject.z;

Cái này nó sẽ không bắt lỗi, chúng ta vẫn được quyền thêm z sau khi đã khai báo

Vậy sao? Dùng JsDoc

// @ts-check

/** @type {{x: number, y: number, width: number, height: number, getArea: Function }} */
let gameObject = {
  x: 0,
  y: 0,
  width: 100,
  height: 100,
  getArea() {
    return this.width * this.height
  }
}

gameObject.z;

Biến không bắt buộc

Chúng ta có một hàm mà giá trị param truyền vào không bắt buộc lúc nào cùng có

function doSomething(config) {
  if (config && config.shouldRun) {
    // run
  }
}

doSomething();
doSomething({ shouldRun: true })

Chỗ này chúng ta cũng cần sự hỗ trợ của JsDoc như trường hợp trên

// @ts-check

/**
 * @param {{ shouldRun: boolean }} [config] - Somebody's name.
 */
function doSomething(config) {
  if (config && config.shouldRun) {
    // run
  }
}

doSomething({ canRun: false}); // this now indicates an error
doSomething({ shouldRun: true })

Với cách thiết đặt như vậy, chúng ta sẽ nhận được cảnh báo khi truyền vào một object mà không có giá trị shouldRun

Ngoại lệ

Nếu có trường hợp ngoại lệ nào đó bạn muốn bỏ qua việc kiểm tra tính chuẩn mực của type, dùng thần chú //@ts-ignore hoặc //@ts-nocheck

//@ts-ignore
doSomething({ canRun: false});

Sau nhiều năm chinh chiến, mình ngộ ra rằng TypeScript cũng tốt, nhưng nó không dành cho tất cả mọi người, tất cả dự án. Những cái kiểm tra nhỏ nhỏ như vậy đôi khi lại mang khác biệt đủ lớn khi bạn viết code.

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

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

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

Trứng lòng đào và các vấn đề đồng hồ trong lập trình

trung-long-dao-va-cac-van-de-dong-ho-trong-lap-trinh

Bài viết được sự cho phép của tác giả Huỳnh Quán Cẩm

Sáng nay tui luộc trứng. Bỏ trứng vào nồi, bật bếp rồi bỏ ra ngoài chơi game. Liếc nhìn đồng hồ trên lò vi sóng hiển thị 07:36. Dự là sẽ canh đúng 6 phút để có trứng lòng đào hoàn hảo.

07:42, tui vào tắt bếp và bóc trứng. Lòng đỏ nhão nhẹt . Nhìn kĩ mới để ý là đồng hồ trên lò chậm hơn đồng hồ trong game console gần 2 phút .

  "Bách khoa toàn thư" ngôn ngữ lập trình Perl
  "Trên tay" SwiftUI của một lập trình viên mobile

Khi đồng hồ không đáng tin

Đồng hồ pin mà chúng ta xài mỗi ngày sử dụng một bộ dao động Quartz, hoạt động bằng cách đo tần suất dao động của một viên pha lê thạch anh được cấp điện bởi một cục pin.

Trứng lòng đào và các vấn đề đồng hồ trong lập trình

Bạn nào yêu thích tìm hiểu đồng hồ chắc sẽ biết là bộ dao động Quartz, dù cho chính xác cao hơn nhiều so với bộ dao động cơ, vẫn có sai số từ ±10-20s/tháng trong điều kiện bình thường, ngoài ra còn phụ thuộc vào nhiều yếu tố khác như là nhiệt độ.

Có nghĩa sau khi chạy được một khoảng thời gian nào đó, đồng hồ Quartz sẽ chạy lệch so với thời gian của vũ trụ . Hiện tượng này có thuật ngữ là clock drift (tạm dịch: trượt đồng hồ), clock drift có thể trượt về tương lai hoặc quá khứ tùy vào hứng của viên pha lê.

Nó đồng nghĩa với việc thời gian trên cái đồng hồ đôi khi không đáng tin cậy. Vì vậy, đồng hồ cần phải được căn chỉnh đồng bộ thường xuyên. Giống như khi đồng hồ treo trường hết pin hoặc sắp hết pin, nó sẽ không chạy chính xác nữa mà bạn “dòm” nhờ đồng hồ nhà hàng xóm để vặn lại cho đúng.

Nhưng rồi bạn sẽ đặt câu hỏi: “Tui có bao giờ chỉnh đồng hồ trên game console hay smart phone đâu mà nó vẫn chạy đúng thôi?”.

Đó là bởi vì những thiết bị đó luôn tự chỉnh lại thời gian của chính nó, thông qua một giao thức có tên gọi là NTP (Network Time Protocol).

Việc giải thích cách giao thức NTP hoạt động nằm ngoài phạm vi bài viết này, nhưng cơ bản là máy của bạn join vào một mạng lưới bao gồm rất nhiều máy tính “hàng xóm”, nơi mà lâu lâu nó ngó vào đồng hồ của chúng và tự chỉnh sửa lại cho hợp lý dựa trên một công thức phức tạp. Thời gian của mạng lưới này có nguồn từ những atomic clock có độ chính xác gần như tuyệt đối, tính bằng giây/tỉ năm. NTP đảm bảo cho độ sai lệch ở mức vài chục millisecond.

Mặc dù vậy, không có gì đảm bảo đồng hồ trên máy của bạn luôn đúng mặc dù sử dụng NTP, bởi vì không chỉ thời gian, network cũng không đáng tin cậy. Máy tính có thể bị mất kết nối tới NTP server, mất kết nối Internet, hoặc chết đi sống lại sau một thời gian dài, lúc đấy không có gì đảm bảo thời gian của bạn là reliable cả.

Bài toán “trứng lòng đào”

Ta hãy thử mô tả lại bài toán trứng lòng đào dưới con mắt của một lập trình viên.

Ở đây ta có một distributed system, với 2 service (tạm gọi là Kitchen và GameConsole) chạy trên 2 máy tính riêng biệt và có kết nối mạng với nhau. Tui sẽ mô phỏng lại bằng đoạn code Ruby dưới đây, với các lớp giao tiếp networking đã được tối giản.

Kitchen có 2 thao tác boil_eggs và turn_stove_off. Khi bắt đầu nấu trứng, Kitchen sẽ gọi GameConsole nhắc nó tắt bếp sau 6 phút.

class Kitchen
  def boil_eggs()
    turn_stove_on()
    time = Time.now() # `07:36`
    due_time = time + 3_600 # 6 minutes
    GameConsole.remind(self, due_time)
  end

  def turn_stove_off()
    @turn_off = true
  end
end

Phương thức GameConsole.remind chỉ là một vòng lặp vô hạn kiểm tra khi nào thì báo bên kia tắt bếp.

class GameConsole
  def remind(sender, due_time)
    loop do
      if due_time >= Time.now()
        sender.turn_stove_off()
        break
      end
    end
  end
end

Ở đây, ta có một vấn đề “trứng lòng đào”. Nếu thời gian của chúng lệch nhau, như đã nói, bếp sẽ được tắt trước hạn nếu đồng hồ GameConsole chạy nhanh hơn Kitchen hoặc sau hạn nếu ngược lại. Sự đúng đắn của đoạn code này phụ thuộc vào độ đồng bộ thời gian của cả 2 máy tính.

Vậy ta sẽ sửa lại bài toán trên như thế nào? Đương nhiên bạn không thể cập nhật lại đồng hồ định kì bằng cơm, càng không thể cài NTP vào lò vi sóng. Cho dù bạn cài được NTP vào lò vi sóng đi chăng nữa, bạn vẫn không thể đảm bảo đồng hồ của lò luôn luôn chính xác. Bởi vì network là không đáng tin cậy như tui đã đề cập ở trên.

Cơ mà nếu ở ngoài đời thực, ta gần như lập tức nghĩ ra cách dùng đồng hồ bấm giờ.

Hầu hết mọi hệ điều hành đều cung cấp cho ta hai loại đồng hồ để thao tác với thời gian: real-time clock CLOCK_REALTIME và monotonic clock CLOCK_MONOTONIC. Hai loại đồng hồ này được thiết kế để dùng trong những trường hợp khác nhau.

  • real-time clock – còn lại là wall clock (đồng hồ treo tường), thể hiện dự đoán gần đúng nhất của máy tính về thời điểm thực hiện tại. Đồng hồ treo tường này luôn luôn cần được đồng bộ và có thể go backward.
  • monotonic clock – thể hiện thời gian đã trôi qua tính từ một thời điểm cố định bất kì nào đó trong quá khứ. Monotonic clock luôn tăng.

Ta có thể sử dụng monotonic clock cho bài toán trên.

Lúc này thay vì gửi một giá trị tuyệt đối là timestamp đáo hạn cho GameConsoleKitchen chỉ đơn thuần gửi gắm là nó muốn được đáo hạn sau một đơn vị thời gian.

class Kitchen
  def boil_eggs()
    turn_stove_on()
    GameConsole.remind(self, 3_600) # 6 minutes
  end
end

Với GameConsole, khi nhận được tin nhắn, ta sẽ ghi lại start là monotonic time hiện tại trên máy. Sau đó tính elapsed time (thời gian trôi qua) trong mỗi vòng lặp.

class GameConsole
  def remind(sender, due_after)
    start = Process.clock_gettime(Process::CLOCK_MONOTONIC)

    loop do
      elapsed = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start

      if elapsed >= due_after
        sender.turn_stove_off()
        break
      end
    end
  end
end

Vì sao không dùng Time.now()?

Time.now() trong Ruby dùng wall-clock.

Bài viết này sẽ giúp tôi tăng lương như thế nào?

Bài viết này không giúp bạn tăng lương, nhưng tui chắc chắn đọc xong, bạn sẽ biết nấu trứng lòng đào.

Bạn cũng biết rằng bạn KHÔNG nên dùng wall clock khi muốn tính elapsed time.

Bạn cũng nhớ rằng KHÔNG có gì đảm bảo một sự kiện xảy ra sau sẽ hiển thị sau ở hệ thống (causal effect), nếu dùng timestamp từ wall clock để order.

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

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

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

Để thăng tiến, cần phải có chiến lược!

chien-luoc-thang-tien-hoan-hao

Một lộ trình thăng tiến rõ ràng cho sự nghiệp luôn được các nhân viên quan tâm. Đây là lý do quyết định đến sự đồng hành lâu dài của một nhân viên.

Tuy vậy, bạn cũng cần có chiến lược để tỏa sáng theo cách riêng của mình. Môi trường nhân sự chính là sân khấu và là nơi để bạn tạo lập những giá trị nhằm hướng đến thành công. Cùng TopDev khám phá đâu là những chiến lược thăng tiến hiệu quả nhất nhé!

Bộc lộ mong muốn thăng tiến của bản thân

Luôn nỗ lực và không ngại thể hiện 

thăng tiến

Nhiều người đánh đồng việc những khao khát về sự thăng tiến với việc tự ảo tưởng về tương lai là một. Điều này thật sự chưa chính xác. Thật ra, khó có thể trách họ nếu họ nghĩ như vậy. Đơn giản, việc bộc lộ những khao khát chỉ đơn giản là sự thể hiện, bày tỏ những mong muốn cá nhân với công việc. Và tất nhiên, điều đó phải đảm bảo tính khả thi.

Bạn sẽ khó tránh việc tiếp xúc với quá nhiều người có cái tôi quá lớn. Họ suy xét và luôn đưa ra những ý kiến bảo thủ; hãy mặc kệ mọi thứ và chấp nhận vì nó. Nhiệm vụ bạn cần làm là luôn nỗ lực, phát huy hết khả năng để cho họ thấy rằng tôi không nói suông mà những gì tôi nói đều được hiện thực hóa thông qua hành động. 

Tăng giá trị bản thân bằng sự tương tác

Những ánh mắt dèm pha hiện hữu xung quanh bạn vì họ đã sẽ xem bạn là đối thủ cạnh tranh, có thể đe dọa vị trí của họ bất cứ lúc nào. Bạn đừng quá lo lắng mà hãy mở lòng chia sẻ các thông tin. Ghi nhớ điều này vì nó cũng được xem là một tuýp nhỏ cho sự thăng tiến. Tương tác chân thật để tạo được lòng tin và thiện cảm với mọi người rất khó (tất nhiên ngoại trừ những trường hợp hai mặt, lối sống cuốn theo chiều gió).

Quan trọng nhất là hãy cởi mở, hòa đồng và cộng tác gần gũi với các thành viên nhóm của bạn. Loại bỏ những hoài nghi và làm việc, hỗ trợ nhau dựa trên tinh thần trách nhiệm, sự thấu hiểu là bí quyết giúp bạn đang tạo ra một môi trường tốt để phát huy khả năng thể hiện những khao khát về sự thăng tiến.

Chủ động để được phát triển

Giai đoạn đầu khi được giao việc và đảm bảo thực hiện thành công, bạn nên chủ động đưa ra những chia sẻ với sếp của mình. 

Tự tin chia sẻ và chờ phản hồi

Hơn thế nữa, mỗi cuộc gặp mặt và chia sẻ đều là cơ hội, bạn nên trân trọng chúng. Hãy tự tin chia sẻ và chờ phản hồi. Hãy là một nhân viên chủ động trong tư duy lẫn những phát ngôn. Bạn có thể tự nhận xét về năng lực của bản thân sau một quá trình trải nghiệm nhiệm vụ, liệt kê ra những thay đổi tích cực của bản thân đồng thời, ghi nhận lại những thiếu sót cần phải cải thiện. Tất cả đều phải chân thật nhé! Tự tin bày tỏ trong khuôn phép không có gì là xấu hổ cả. Đó là cách để bạn tự tạo ra cơ hội cho bản thân. Nếu nhận thấy mình đủ năng lực, hãy chủ động đề xuất các dự án có quy mô chuyên sâu, đa dạng hơn. 

thăng tiến

Điều này cần được thực hiện theo diễn tiến. Bạn có thể thảo luận với cấp trên/người quản lý của mình về tiến độ công việc. Thời gian có thể từ 2-3 tháng một lần. Chính những buổi trao đổi, bạn sẽ đánh giá được mức độ kỳ vọng của cấp trên dành cho mình; năng lực bản thân đang ở mức nào và những mong tiếp theo bạn muốn đạt được.

Nguyên tắc nào sẽ là “chiến lược” hiệu quả để phát triển sự thăng tiến?

Có một nguyên tắc được nhiều người ghi nhớ và lấy đó làm kim chỉ nam cho mình chính là nguyên tắc Peter, được đặt tên theo vị Tiến sĩ Laurence J. Peter.

Nguyên tắc này là một lý thuyết sâu sắc về việc quản trị năng lực. Một nhân viên sẽ được thăng chức liên tục khi được xem xét phù hợp với các tiêu chí. Tuy nhiên, sự thăng tiến ấy tiếp tục diễn ra và sẽ dừng lại khi nhân viên ấy chưa kịp đáp ứng những nhu cầu thay đổi.

“Chiến lược” quan trọng – Quản trị bản thân

Nguyên tắc này đã tạo ra động lực rất lớn cho các nhân viên. Vì nó giúp họ nhận thức được việc bản thân phải cố gắng mỗi ngày. Điều này không đồng nghĩa bạn như một con thiêu thân mãi lao đầu vào mớ công việc với deadline dày đặc. Ý nghĩa của nguyên tắc này là bạn cần phải quản trị thời gian. Hay nói một cách chuyên gia hơn là quản trị bản thân. Nguyên tắc định hướng con người hiểu và biết cách điều tiết khối lượng công việc sao cho hiệu quả.

“Bạn phải trở thành một phiên bản tốt hơn mỗi ngày”. Nó không có nghĩa là đặt ra áp lực và suy nghĩ quá nhiều về mọi thứ. Đơn giản, khi bạn thực hiện tốt công việc hằng ngày, trải nghiệm hiệu quả, theo dõi; có những đánh giá cụ thể, chi tiết; đưa ra những phản hồi tích cực, thì đó đã là tốt hơn rồi.

Hiệu quả của nguyên tắc Peter còn giúp bạn thúc đẩy sự cố gắng, tự rèn luyện bản thân. Từ đó, giúp bạn khai thác ra những tiềm năng mới. Nguyên tắc hướng bạn đến việc trở thành một nhân viên toàn năng, vượt ra khỏi những khuôn khổ cũ. Chính vì vậy mà nó ý nghĩa lớn đối với chiến lược phát triển lâu dài về sự thăng tiến. Để đảm bảo cho sự thăng tiến, bạn cần nhiều kỹ năng, kiến thức của một nhân viên. Hãy thể hiện sự cố gắng để chứng mình rằng bạn là một nhân viên cần được quan tâm và phát triển.

Lời kết:

Sự thăng tiến luôn là mong muốn của nhiều nhân viên. Đôi lúc tự hỏi: “Có thể êm đềm, cớ sao phải lăn xả trong cuộc chiến “sống còn”? Thế nhưng, thực tế hco thấy, những gì nhìn nhận về sự thăng tiến là có sơ sở. Chỉ là nó có giới hạn nhất định mà thôi. Bỏ qua thời gian, vật chất, các mối quan hệ, bạn vẫn phải có thực lực. Vì vậy, nếu biết nỗ lực và hiểu được hiện trạng thực tại, bạn hoàn toàn có thể chạm đến sự thăng tiến. Hãy phát huy những năng lực và tư duy chiến lược, bạn chắc chắn sẽ thành công.

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

Xem thêm Top vị trí tuyển dụng cntt trên TopDev

Kambria Code Challenge trở lại với Quiz 04 – Chủ đề: Reinforcement Learning

Code Challenge

Kambria Code Challenge là chuỗi các bài thi và hackathon trực tuyến liên quan đến lĩnh vực Trí tuệ nhân tạo (AI) được thiết kế để thu hút sự tham gia của các lập trình viên khắp nơi trên thế giới. Đây là cơ hội để các bạn kiểm tra kiến thức về thuật toán AI, chứng minh các kỹ năng về lập trình của bạn, đồng thời nhận phần thưởng và phát triển cơ hội nghề nghiệp với các công ty công nghệ là đối tác của Kambria.

Quiz 04 là Quiz cuối serie Kambria Code Challenge đầu tiên. Quiz 04 tập trung vào chủ đề: “Reinforcement learning (Học Tăng Cường)” – một lĩnh vực con của học máy. Bounty sẽ bắt đầu vào lúc 14:00, thứ 7 ngày 22/08/2020. Các bạn tìm hiểu chi tiết ở link bên dưới, click vào “Join this Challenge” để tham gia!

👉Kambria Code Challenge – Standard Quiz 04 Bounty: https://bit.ly/Standard-Quiz-04-Bounty

Quiz 04 bao gồm 2 bounty với cấp độ & giải thưởng khác nhau:

Bạn chỉ có thể tham gia 1 trong 2 bounty:

  • Standard Quiz 04 Bounty: tất cả mọi người đều có thể đăng ký tham gia. Bounty này có tổng cộng 15 câu hỏi với độ khó tương đương với các Quiz trước đây của Kambria Code Challenge.
  • Special Quiz 04 Bounty: chỉ những thí sinh đã tham gia ít nhất 2 Quiz của Kambria Code Challenge mới được tham gia Special Bounty. Special Bounty có tổng cộng 20 câu hỏi với độ khó cao hơn, cùng với giải thưởng lớn hơn.

Nếu bạn đủ điều kiện để tham gia Special Quiz 04 Bounty, hãy chú ý kiểm tra email thường xuyên. Kambria sẽ gửi email để hướng dẫn bạn tham gia vòng thi đặc biệt này.

Giải thưởng của Standard Quiz 04 Bounty:

🔹Giải quán quân: $75 + 79.000 KAT

🔹1 x Giải Á quân 1: $50 + 52.000 KAT

🔹2 x Giải Á quân 2: $25 + 26.000 KAT

Giải thưởng của Special Quiz 04 Bounty:

🔹Giải quán quân: $125 + 85,000 KAT

Ngoài ra, các lập trình viên có điểm số cao nhất sẽ được giới thiệu với các đối tác của Kambria, cung cấp các cơ hội việc làm mới.

Chương Trình Tích Lũy Điểm Thưởng

Các thí sinh tham gia và hoàn thành bài thi Quiz 04 sẽ được nhận Kambria Credit. Kambria Credit là chương trình tích lũy điểm thưởng, được sử dụng để thanh toán cho các dịch vụ trên nền tảng Kambria. Tìm hiểu thêm về Kambria Credit.

KAT là token sử dụng trên nền tảng của Kambria – Blockchain ủy quyền đầu tiên trên thế giới cung cấp mã nguồn mở robot và hệ sinh thái AI.

Thông tin cuộc thi:

Thời gian: 14:00 ngày 22/08/2020.

Đăng ký dự thi tại: https://bit.ly/Standard-Quiz-04-Bounty

Thông tin về cuộc thi: https://kambria.io/blog/kambria-code-challenge-quiz-04-reinforcement-learning/

Website: App.kambria.io/bounty