Home Blog Page 172

50 keywords mà mọi JAVA developer nên biết

java dev

Java hiện là ngôn ngữ lập trình phổ biến hàng đầu tại Việt Nam và rất nhiều sinh viên CNTT muốn theo đuổi ngôn ngữ này để phát triển sự nghiệp của mình. Có không ít khó khăn bạn cần phải vượt qua để làm chủ ngôn ngữ đầy rắc rối ấy và việc đầu tiên là hiểu những keywords – những từ khóa trong lập trình java. Việc này sẽ làm tiền đề giúp bạn trong việc tự học, tự trải nghiệm thách thức từ java.

Xem thêm cơ hội việc làm java developer tốt nhất thị trường

  5 điều lập trình viên Java Developer chắc chắn sẽ thích ở Kotlin
  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java

Abstract: Khai báo lớp, phương thức và interface trừu tượng không có thể hiện (instance) cụ thể

Assert: Kiểm tra điều kiện đúng hay sai (hay dùng trong Unit Test)

Boolean: Khai báo biến kiểu logic với hai giá trị: True or False

Break: Lệnh switch-case hoặc dùng để thoát khỏi vòng lặp

Byte: Các giá trị nguyên chiếm 8 bit (1byte)

Case: Trường hợp được chọn theo Switch (chỉ dùng khi được đi kèm Switch)

Catch: Dùng để bắt ngoại lệ, dùng kèm với try để xử lý những ngoại lệ nảy sinh trong chương trình

Char: Là kiểu ký tự Unicode, mỗi ký tự có 16 bit (2 byte)

Class: Dùng để định nghĩa class

Const: Không thể dùng trong java bởi nó chưa được sử dụng

Continue: Được dùng để dừng chu trình (interation) lặp hiện tại và bắt đầu chu trình kế tiếp

Tham khảo các job đang được global cybersoft tuyển dụng

Default: Mặc định được thực thi nếu không có case nào trả về giá trị True – được dùng trong Switch case.

Do: Dùng ở  vòng lặp While

Double: Là kiểu số thực có các giá trị được biểu diển bởi dấu phẩy động 64 bit (8byte)

Else: Rẽ nhánh điều kiện ngược với If

Enum: Kiểu dữ liệu Enum – tương đối giống với kiểu dữ liệu mảng. Khác biệt ở chỗ các phần tử của kiểu này có thể bổ sung thêm các phương thức.

Extends: Dùng để định nghĩa lớp con kế thừa những thuộc tính và phương thức từ lớp cha.

Final: Dùng để chỉ ra các biến – phương thức không thay đổi sau khi đã được định nghĩa. Những phương thức final không được kế thừa và override.

Finally: Thực hiện một khối lệnh đến cùng, bỏ qua các ngoại lệ – dùng trong Try-cactch.

Float: Kiểu số thực – Các giá trị được biểu diện bởi dạng dấu phẩy động 32 bit.

For: Dùng trong vòng lặp for – Các bước lặp đã xác định từ trước.

Goto: Chưa được sử dụng

If: Là lệnh chọn theo điều kiện logic

Implements: Xây dựng 1 lớp mới cài đặt những phương thức từ interface xác định trước

Import: Dùng để yêu cầu 1 hay 1 vài lớp ở các gói chỉ định cần nhập vào để sử dụng trong ứng dụng hiện thời

Long: Là kiểu số nguyên lớn – Các giá trị chiếm 64 bit (8 byte)

Native: Sử dụng khi lập trình viên muốn dùng code bằng ngôn ngữ khác

New: Khởi tạo đối tượng

Package: Sử dụng khi xác định 1 gói sẽ chứa một số lớp trong file mã nguồn

Private: Khai báo biến dữ liệu, phương thức riêng trong từng lớp và chỉ cho phép truy cập trong lớp đó.

Protected: Dùng để khai báo biến dữ liệu – Chỉ được truy cập ở lớp cha và những lớp con của lớp đó.

Public: Dùng để khai báo biến dữ liệu, lớp – Phương thức công khai có thể tự truy cập ở mọi hệ thống.

Return: Kết thúc phương thức, trả về giá trị cho phương thức.

Short: Kiểu số nguyên ngẵn – giá trị chiếm 16 bit (2byte)

Static: Định nghĩa biến, phương thức của một lớp có thể được truy cập trực tiếp từ lớp mà không thông qua khởi tạo đối tượng của lớp.

Super: Biến chỉ tới đối tượng ở lớp cha

Switch: Sử dụng trong câu lệnh điều khiển Switch case

Synchronized: Chỉ ra là ở mõi thời điểm chỉ có 1 đối tượng hay 1 lớp có thể truy nhập đến biến dữ liệu hoặc phương thức loại đó – Thường được sử dụng trong lập trình đa luồng (multithreading).

This: Biến chỉ tới đối tượng hiện thời

Throw: Tạo một đối tượng Exception nhằm chỉ định 1 trường hợp ngoại lệ xảy ra

Throw: Chỉ định cho qua ngoại lệ nếu exception xảy ra

Transient: Chỉ định rằng nếu một đối tượng được Serialized, giá trị của biến sẽ không cần được lưu trữ

Try: Thử thực hiện cho đến khi xảy ra 1 ngoại lệ

Void: chỉ định 1 phương thức không trả về giá trị

Volatile: Báo cho chương trình dịch biết là biến khai báo volatile có thể thay đổi tùy ý trong các luồng (thread)

While: Sử dụng trong lệnh điều khiển While

TopDev via SmartJob

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

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

Những công việc trong ngành công nghệ phần mềm

Tác giả: Đoàn Văn Tuyển

Sinh viên CNTT thường hay thắc mắc ra trường sẽ làm gì, thực ra CNTT rất rộng có đến hàng trăm công việc khác nhau. Nếu xét riêng về công nghệ phần mềm thì cũng đã có rất nhiều công việc liên quan rồi. Mình xin nêu ra một số công việc liên quan trong ngành Công nghệ Phần Mềm (Software Engineering). Mình xin nêu ra một số những vị trí và kỹ năng cần có.

Chú ý rằng trông một công ty nhỏ thì một người có thể kiêm nhiều vai trò khác nhau bên dưới, trong công ty lớn thì việc phân biệt rõ ràng hơn. Mình cũng nói qua về những kỹ năng cần thiết cho mỗi vị trí, nó ko chỉ cần những kỹ năng đó, nhưng đó là kỹ năng quan trọng nhất.

Người viết: Tuyền Đoàn

– Lập trình — Programmer/Developer 

(tất nhiên ai cũng nghĩ đến đầu tiên): Riêng lập trình các bạn có thể chọn hàng chục ngôn ngữ khác nhau như Java, .Net, PHP, Python, Swift, Kolin, NodeJS, GoLang, JavaScript… Ngoài ra các bạn cũng có những vị trí lập trình khác nhau như backend, frond-end, data engineering, database programming…. Ở VN mọi người thường nghĩ đến việc chỉ lập trình đến năm 30 tuổi sau đó thì làm quản lý. Thực tế trên thế giới nghề lập trình có thể làm đến già, những người làm càng lâu càng biết sâu và trở thành chuyên gia trong lĩnh vực của họ. Thực tế rất nhiều CTO (Giám đốc Công nghệ) vẫn phải đảm nhận những công việc lập trình khó. Ví trí này thông thường cần kỹ năng giải quyết vấn đề, ngoài ra khả năng trừu tượng hoá cũng là cái cần có của một Developer.

Thiết kế phần mềm hay thiết kế hệ thống (System Architect):

Thông thường ở VN thì công việc này thường kiêm nhiệm (có thể CTO hoặc Tech Lead kiêm nhiệm luôn vị trí này). Ở vị trí này yêu cầu hiểu biết sâu về lập trình, database, server và product development. Hiểu được những vấn đề ngắn hạn và dài hạn có thể gặp phải khi phát triển, cũng phải hiểu tính chất, điểm yếu điểm mạnh của từng thứ ngôn ngữ lập trình, DB, Server… Nói chung phải là người có trí tưởng tượng tốt để hình dung ra những vấn đề gặp phải sau này. Vừa là kiến trúc sư phần mềm, cũng vừa hiểu những thực tế của việc phát triển phần mềm. Vị trí này cần nhất kỹ năng strategic & planning.

Kết quả hình ảnh cho Programmer

UX designer:

Là vị trí hiểu được những thứ người dùng sử dụng. Họ phải mô tả được cho team việc phần mềm sau khi làm ra thì có những thành phần nào tham gia, họ sẽ tiếp cận sản phẩm như thế nào… (tìm hiểu khái niệm customer Jouney Mapping). Ngoài ra họ cũng phải mô tả được về những thứ nhìn thấy như giao diện, những màn hình cần có, các thành phần được bố trí thế nào, các luồng màn hình thế nào (click vào cái gì thì đi đâu)… Cũng giống như system Architect, UX Designer ở VN thường cũng là vị trí kiêm nhiệm của Product Manager hoặc UI Designer… Đối với UX Designer thì sự tỷ mỉ chi tiết, và khả năng tưởng tượng là những thứ cần thiết nhất.

Business Analysis (BA), Product Owner:

Là người chịu trách nhiệm về yêu cầu công việc. Thông thường sẽ là vị trí trung gian làm cầu nối giữa một bên là những vị trí phi kỹ thuật như Marketing, Sale, CEO… với những vị trí kỹ thuật như bên trên. Họ có thể nói được cả 2 tiếng nói cả kỹ thuật và phi kỹ thuật. Họ phải làm sao để mô tả những yêu cầu của các team khác dưới ngôn ngữ kỹ thuật, UX Designer, Developer… có thể triển khai được những thứ team khác mong muốn. BA/PO đôi khi cũng phải là người nghĩ ra những hướng đi cho dự án. Kỹ năng cần thiết nhất của BA/PO là kỹ năng phân tích và đánh giá nhu cầu của các thành phần liên quan.

Tham khảo các vị trí tuyển dụng product owner cho SV mới ra trường

Quản lý dự án Project Manager / Scrum Master 

(cái này ko biết dịch sao): là vị trí liên quan nhiều đến quản lý, bố trí ai làm việc gì, là người chịu trách nhiệm làm sao để team đi đúng hướng. Họ phải hiểu điểm mạnh, điểm yếu của từng người để bố trí. Họ là người biến những thứ mong muốn của BA/PO trở thành hiện thực thông qua việc làm việc với những thành viên khác. PM đôi khi đảm nhận cả vai trò của BA/PO (PM truyền thống), thậm chí cả System Architect + UX Designer cũng được PM kiêm luôn. Tuy nhiên cách làm này thường hay khiến team bị bottleneck ở vị trí của PM, khiến cho team bị chậm. Ở VN thì PM thường được coi là “sếp”, nhưng thực tế PM cũng chỉ là 1 vị trí trong team chứ ko phải là sếp hay gì. Trong đó PM thì cần nhất khả năng giao tiếp và trao quyền, kỹ năng lập kế hoạch cũng quan trọng không kém.

Xem thêm các vị trí tuyển IT Project Manager, tuyển dụng lập trình viên Scrum Master

Tester/QA/QC:

Là vị trí đảm bảo những gì Developer làm ra đúng với yêu cầu của BA/PO. Tester/QA thường là những người Executive, những người kiểm tra trực tiếp sản phẩm, đảm bảo những gì làm dev làm ra là đúng và…hợp lý. QC là người kiểm soát về quy trình, đảm bảo quy trình được thực thi đúng. Khi quy trình đúng thì gián tiếp đảm bảo chất lượng sản phẩm. Đối với QA thì quan trọng nhất là sự tỷ mỉ và cẩn thận.

Tìm hiểu thêm các vị trí tuyển dụng QA, tuyển dụng QC tại Topdev.

Quản trị hệ thống (System Administrator) / Dev-op:

Là những người đảm bảo môi trường phát triển cho team. Là những người thực hiện việc cài cắm server, Backup, thiết lập môi trường, thiết lập môi trường phát triển, vận hành hệ thống… Đối với những người non-tech thì đây là ông chuyên đi cài Win với Restart modem khi cần. Quản trị hệ thống thì việc kỹ năng ra quyết định, sự cẩn thận là những thứ quan trọng nhất.

Tham khảo thêm vị trí tuyển dụng System Admin lương cao

Kỹ sư dữ liệu (Data Engineering) / Data Analysis / Data Scientist:

Ở VN vị trí này tương đối mới mẻ, thực tế có lẽ chưa có trường nào đào tạo. 3 vị trí này có điểm chung là cùng làm việc với dữ liệu, tuy nhiên có sự khác nhau như sau: Data Engineering là người biết lập trình vừa hiểu cách phân tích data, biết viết những chương trình phầm mềm để xử lý data đưa ra báo cáo gì đó. Data Analysis là người sử dụng công cụ hoặc kết quả làm ra của Data Engineering để đưa ra được hành động hoặc kết luận phục vụ cho những vị trí khác về bussiness. Data Scientist là người ở tấng cao hơn, trừu tượng hơn so với Data Engineering, họ có thể ko biết lập trình, ko hiểu data như DA, tuy nhiên họ hiểu thuật toán xử lý dữ liệu và hướng dẫn Data Engineering xử lý được Data theo thuật toán mà họ hướng dẫn. Đối với những vị trí trên thì sự hiểu data và khả năng phân tích dữ liệu để đưa ra đánh giá là những thứ cần thiết nhất (Nhất là với DA/DE)

Tham khảo các vị trí tuyển dụng Data Engineer, lập trình Data Analyst, tuyển Data Science

Product Manager:

Vị trí này tương đối giống với Project Manager. Tuy nhiên Product Manager thường nói đến vị trí để ý nhiều hơn đến sản phẩm, ít chú ý đến việc quản lý. Vị trí Product Manager yêu cầu kinh nghiệm rất đa dạng. Thông thường phải có kiến thức của tất cả các phần trên, đặc biệt là phải có kinh nghiệm của một UX Designer, BA, System Architect, Developer và cả về Business nữa. Nói chung để đảm nhận về vị trí Product Manager thường yêu cầu kinh nghiệm khá toàn diện. Vị trí Product Manager cần rất nhiề u kỹ năng, kỹ năng phân tích, tư duy chiến lược cần có nhưng sự tỷ mỉ chi tiết cũng cần luôn. Nói chung đây là vị trí rất khỏ cấn có nhiều kỹ năng để có thể làm được.

Kết quả hình ảnh cho Programmer

Bên trên là những vị trí chính trong ngành CNPM, có rất nhiều những vị trí khác nữa, tuỳ thuộc vào từng công ty vị trí trên có thể được chia nhỏ hoặc phát sinh những vị trí mới. Trên đây là tóm tắt theo kinh nghiệm bản thân, có thể có những chỗ chưa đúng, mong mọi người góp ý.

24 code ES6 tân tiến để khắc phục các lỗi thực hành JavaScript

24 code ES6 tân tiến để khắc phục các lỗi thực hành JavaScript

Tôi đích thân tự chọn vài trích đoạn những code hữu ích nhất từ trang ‘30secondsofcode’, vốn đã là 1 nguồn tài nguyên tuyệt vời. Và bạn cũng đừng ngại chi mà hãy ủng hộ nó hết mình nhé.

Trong đề tài này tôi đã cố sắp xếp dựa theo cách sử dụng các thực hành của chúng. Và trả lời các câu hỏi thường gặp mà bạn có thể phải đối mặt trong dự án của mình:

  Học Javascript 1: Syntax Parser, Execution Context, Lexical Environment là gì

  Những thứ kỳ quặc của Javascript?

1. Cách để ẩn hết các yếu tố quy định?

const hide = (...el) => [...el].forEach(e => (e.style.display = 'none'));

// Example
hide(document.querySelectorAll('img')); // Hides all <img> elements on the page

2. Làm thế nào để kiểm tra nếu yếu tố đó có lớp quy định?

const hasClass = (el, className) => el.classList.contains(className);

// Example
hasClass(document.querySelector('p.special'), 'special'); // true

3. Cách để chuyển đổi 1 lớp cho 1 yếu tố?

const toggleClass = (el, className) => el.classList.toggle(className);

// Example
toggleClass(document.querySelector('p.special'), 'special'); 
// The paragraph will not have the 'special' class anymore

4. Làm thế nào để lấy vị trí cuộn của trang hiện tại?

const getScrollPosition = (el = window) => ({
  x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
  y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
});

// Example
getScrollPosition(); // {x: 0, y: 200}

5. Cách để cuộn-mượt hơn tới đầu trang?

const scrollToTop = () => {
  const c = document.documentElement.scrollTop || document.body.scrollTop;
  if (c > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, c - c / 8);
  }
};

// Example
scrollToTop();

6. Làm thế nào để kiểm tra nếu yếu tố ‘parent’ đang mang yếu tố ‘child’?

const elementContains = (parent, child) => parent !== child && parent.contains(child);

// Examples
elementContains(document.querySelector('head'), document.querySelector('title')); 
// true
elementContains(document.querySelector('body'), document.querySelector('body')); // false

7. Cách để kiểm tra nếu yếu tố quy định có thể hiển thị trong viewport?

const elementIsVisibleInViewport = (el, partiallyVisible = false) => {
  const { top, left, bottom, right } = el.getBoundingClientRect();
  const { innerHeight, innerWidth } = window;
  return partiallyVisible
    ? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
        ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
    : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
};

// Examples
elementIsVisibleInViewport(el); // (not fully visible)
elementIsVisibleInViewport(el, true); // (partially visible)

8. Làm thế nào nạp tất cả hình ảnh vào trong 1 yếu tố?

const getImages = (el, includeDuplicates = false) => {
  const images = [...el.getElementsByTagName('img')].map(img => img.getAttribute('src'));
  return includeDuplicates ? images : [...new Set(images)];
};

// Examples
getImages(document, true); // ['image1.jpg', 'image2.png', 'image1.png', '...']
getImages(document, false); // ['image1.jpg', 'image2.png', '...']

9. Cách để nhận dạng 1 thiết bị di động hay 1 máy bàn/ laptop?

const detectDeviceType = () =>
  /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
    ? 'Mobile'
    : 'Desktop';

// Example
detectDeviceType(); // "Mobile" or "Desktop"

10. Làm thế nào để lấy URL hiện tại? 

const currentURL = () => window.location.href;

// Example
currentURL(); // 'https://google.com'

11. Cách để tạo 1 object chứa thông số của URL hiện tại?

const getURLParameters = url =>
  (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
    (a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a),
    {}
  );

// Examples
getURLParameters('http://url.com/page?n=Adam&s=Smith'); // {n: 'Adam', s: 'Smith'}
getURLParameters('google.com'); // {}

12. Làm thế nào để mã hóa 1 set các yếu tố hình thức như 1 object?

const formToObject = form =>
  Array.from(new FormData(form)).reduce(
    (acc, [key, value]) => ({
      ...acc,
      [key]: value
    }),
    {}
  );

// Example
formToObject(document.querySelector('#form')); // { email: 'test@email.com', name: 'Test Name' }
13. Cách để lấy lại 1 set các thuộc tính được chỉ định bởi các selector đã cho từ 1 vật thể?
const get = (from, ...selectors) =>
  [...selectors].map(s =>
    s
      .replace(/\[([^\[\]]*)\]/g, '.$1.')
      .split('.')
      .filter(t => t !== '')
      .reduce((prev, cur) => prev && prev[cur], from)
  );
const obj = { selector: { to: { val: 'val to select' } }, target: [1, 2, { a: 'test' }] };

// Example
get(obj, 'selector.to.val', 'target[0]', 'target[2].a'); // ['val to select', 1, 'test']

14. Làm thế nào để gọi chức năng đã cung cấp sau khi chờ (đơn vị mili-giây)?

const delay = (fn, wait, ...args) => setTimeout(fn, wait, ...args);
delay(
  function(text) {
    console.log(text);
  },
  1000,
  'later'
); 

// Logs 'later' after one second.

15. Cách để kích hoạt 1 sự kiện cụ thể trong yếu tố cho đi, tùy chọn chuyển dữ liệu tùy chỉnh?

const triggerEvent = (el, eventType, detail) =>
  el.dispatchEvent(new CustomEvent(eventType, { detail }));

// Examples
triggerEvent(document.getElementById('myId'), 'click');
triggerEvent(document.getElementById('myId'), 'click', { username: 'bob' });

16. Làm thế nào gỡ bỏ 1 event listener từ 1 yếu tố?

const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts);

const fn = () => console.log('!');
document.body.addEventListener('click', fn);
off(document.body, 'click', fn); // no longer logs '!' upon clicking on the page

17. Cách để lấy định dạng có thể đọc được của số ml giây đã cho?

const formatDuration = ms => {
  if (ms < 0) ms = -ms;
  const time = {
    day: Math.floor(ms / 86400000),
    hour: Math.floor(ms / 3600000) % 24,
    minute: Math.floor(ms / 60000) % 60,
    second: Math.floor(ms / 1000) % 60,
    millisecond: Math.floor(ms) % 1000
  };
  return Object.entries(time)
    .filter(val => val[1] !== 0)
    .map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)
    .join(', ');
};

// Examples
formatDuration(1001); // '1 second, 1 millisecond'
formatDuration(34325055574); // '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'

18. Làm thế nào để lấy sự khác biệt (đơn vị ngày) giữa 2 date?

const getDaysDiffBetweenDates = (dateInitial, dateFinal) =>
  (dateFinal - dateInitial) / (1000 * 3600 * 24);

// Example
getDaysDiffBetweenDates(new Date('2017-12-13'), new Date('2017-12-22')); // 9

19. Cách để tạo 1 yêu cầu ‘GET’ tới URL đã thông?

const httpGet = (url, callback, err = console.error) => {
  const request = new XMLHttpRequest();
  request.open('GET', url, true);
  request.onload = () => callback(request.responseText);
  request.onerror = () => err(request);
  request.send();
};

httpGet(
  'https://jsonplaceholder.typicode.com/posts/1',
  console.log
); 

// Logs: {"userId": 1, "id": 1, "title": "sample title", "body": "my text"}
20. Làm thế nào để tạo 1 yêu cầu ‘POST’ tới URL đã thông qua?
const httpPost = (url, data, callback, err = console.error) => {
  const request = new XMLHttpRequest();
  request.open('POST', url, true);
  request.setRequestHeader('Content-type', 'application/json; charset=utf-8');
  request.onload = () => callback(request.responseText);
  request.onerror = () => err(request);
  request.send(data);
};

const newPost = {
  userId: 1,
  id: 1337,
  title: 'Foo',
  body: 'bar bar bar'
};
const data = JSON.stringify(newPost);
httpPost(
  'https://jsonplaceholder.typicode.com/posts',
  data,
  console.log
); 

// Logs: {"userId": 1, "id": 1337, "title": "Foo", "body": "bar bar bar"}

21. Cách để tạo ra 1 counter với phạm vi, bước và độ dài nhất định cho selector được chỉ định?

const counter = (selector, start, end, step = 1, duration = 2000) => {
  let current = start,
    _step = (end - start) * step < 0 ? -step : step,
    timer = setInterval(() => {
      current += _step;
      document.querySelector(selector).innerHTML = current;
      if (current >= end) document.querySelector(selector).innerHTML = end;
      if (current >= end) clearInterval(timer);
    }, Math.abs(Math.floor(duration / (end - start))));
  return timer;
};

// Example
counter('#my-id', 1, 1000, 5, 2000); // Creates a 2-second timer for the element with id="my-id"

22. Làm thế nào để copy 1 string tới clipboard? 

const listener = (e: ClipboardEvent) => {
  e.clipboardData.setData('text/plain', text);
  e.preventDefault();
};

document.addEventListener('copy', listener);
document.execCommand('copy');
document.removeEventListener('copy', listener);

23. Cách để nhận biết nếu tab trình duyệt của trang được focus?

const isBrowserTabFocused = () => !document.hidden;

// Example
isBrowserTabFocused(); // true

24. Làm thế nào để tạo 1 danh mục, nếu nó không tồn tại?

const fs = require('fs');
const createDirIfNotExists = dir => (!fs.existsSync(dir) ? fs.mkdirSync(dir) : undefined);

// Example
createDirIfNotExists('test'); // creates the directory 'test', if it doesn't exist

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

Đừng quên xem thêm các bài viết về JavaScript: 

Cơ hội việc làm javascript Developers hấp dẫn tại TopDev đang chờ bạn!

5 dự án React buộc phải có trong porfolio của bạn

5 dự án react buộc phải có cho portfolio của bạn

Trước khi bắt đầu với dự án React, bạn đã vun trồng cho công việc của mình khá nhiều. Và giờ bạn đã có kiến thức khá vững vàng về thư viện React. 

Trên hết, bạn đã có kiến thức về JavaScript và đặt những ‘feature’ hữu ích nhất để đưa vào sử dụng cho code React của mình.

Bạn đã tự thỏa thuận để thúc đẩy bản thân.. nhưng tới bây giờ bạn đã làm được gì rồi ?

Làm cách nào để bạn lấp đầy những lỗ hổng giữa việc thấu hiểu nền tảng React. Và trở thành 1 Lập trình viên chuyên nghiệp ?

Rất nhiều lập trình viên gặp phải vấn đề này khi họ đã đạt tới giai đoạn trung cấp về việc học React hay với bất kỳ thư viện JavaScript nào. Bản thân họ đều biết rõ hầu hết thư viện cũng như về JavaScript để dùng 1 cách hiệu quả. Nhưng họ đều không biết phải làm gì sau đó. 

Tìm kiếm cơ hội việc làm React hấp dẫn các công ty HOT

Tại sao bạn nên dựng app

Sau khi đã học phần cơ bản của React, bạn nên dựng các app dễ chịu với các kĩ năng mà bạn có. Bài thực hành này nằm ngay phần trọng tâm về việc trở thành 1 lập trình viên React hiệu quả. Và là để biết cách tự làm nên các app cũng như sử dụng bộ công cụ phù hợp trong ecosystem của React để dựng nó. 

Nhưng những ứng dụng nào bạn nên làm với React để nâng cấp khả năng của bạn như 1 lập trình viên ?

Trong bài viết này, chúng ta sẽ đi qua 5 loại ứng dụng khác nhau mà bạn nên xem để tạo thử sau các ứng dụng cơ bản trước đó. Ưu điểm tuyệt vời nhất của việc dựng nên các ứng dụng chính là 1 khi đã triển khai, nó có thể liên kết với portfolio của bạn theo 1 cách mạnh mẽ, trực tiếp để cho các nhà tuyển dụng nhìn thấy chuyên môn của bạn.

Cho mỗi loại ứng dụng, mình sẽ cover lại các ví dụ phổ biến để bạn có thể dùng nó như nguồn cảm hứng, các bộ công cụ mình gợi ý để tạo từng feature cho ứng dụng, kèm theo demo ngắn cho mỗi cái mà mình đã cá nhân làm khi dùng React.

  ReactJS: Props và State
  React Native hoạt động như thế nào?

Cách bắt đầu dựng app với React 

Không giống như việc học React, nơi bạn có thể tìm thấy hàng tá các bài viết để lặn sâu vào bất cứ ý tưởng liên quan nào, quá trình tạo ra 1 ứng dụng là 1 hoạt động định hướng cho bản thân mà không cần phải được chỉ dẫn nhiều.

Nếu bạn đang bắt đầu tạo các ứng dụng của riêng mình, mình sẽ gợi ý bạn nghiên cứu các bài viết dạy cho bạn phần cơ bản của việc tạo ra 1 ứng dụng và nhúng nó vào source code ứng dụng mà chúng cung cấp. Ngay cả quá trình đọc code cũng sẽ làm bạn thành 1 nhà lập trình tốt hơn. 

Vì những ví dụ này làm bạn cảm thấy khá chán nản khi phải dựng 1 mình, hãy ghi nhớ rằng những gì 1 lập trình viên React phải biết – là để chia các ứng dụng thành các thành phần có thể tổng hợp. Mỗi ứng dụng phải được dựng theo kiểu ‘mảnh theo mảnh’, ‘thành phần theo thành phần’.

Hãy tập trung vào việc tạo ra feature vào đúng thời điểm. Với các bài thực hành bạn sẽ có cảm nhận tốt hơn về những bộ công cụ bạn sẽ cần cho những feature cũng như các mô hình phổ biến đằng sau việc dựng ứng dụng nói chung.

Ghi chú: Có 1 quan niệm sai lầm của tôi cho rằng khi tạo ra ứng dụng thật sự như vậy thì tôi phải tự dựng hoàn toàn phần backend / API với Node hay Python để có được chức năng mà mình cần. Nhưng bạn không cần phải làm thế.
Hãy nhìn vào các công nghệ không-server (serverless) mạnh mẽ như Firebase, AWS Amplify hay Hasura và chúng sẽ mang cho bạn trọn vẹn phần backend nằm sẵn trong hộp mà không cần phải tạo và khai triển cái của riêng bạn. Khai thác vào các bộ công cụ sẽ làm bạn năng suất hơn và tiết kiệm thời gian. 

Dựng App Truyền thông Xã hội

Nếu như mình chỉ được gợi ý 1 app duy nhất cho bạn để thêm vào portfolio, thì nó chính là app về truyền thông xã hội (social media). Twitter, Facebook và Instagram khá là tinh vi, bao gồm số lượng feature ngày càng tăng để giữ tương tác với người dùng. Trên hết, chúng là loại app mà bạn có thể biết tốt nhất về cách nó nên hoạt động.

Có 1 số lượng các feature phổ biến trong hầu hết các app truyền thông xã hội: 

    • Cho người dùng có khả năng để tạo post với văn bản (text) và/hay tệp tin media,
    • Nguồn cung cấp dữ liệu trực tiếp (live feed) cho các bài đăng đó,
    • Cho phép người dùng khác để ‘Thích’ và ‘Bình luận’ trên bài đăng,
    • Cũng như xác thực người dùng (user authentication)

Và khi bạn đã làm xong những việc này, bạn có thể thêm profile cho mỗi người dùng. Nơi họ có thể cả nhân hóa tài khoản của mình cũng như quản lý những người theo dõi họ. 

5 dự án react buộc phải có cho portfolio của bạn

Các ví dụ App: Instagram, Twitter, Snapchat, Reddit 

Các công nghệ nên dùng:

    • Tạo app React hay Next.js để làm UI sinh động cho các bài đăng, lượt thích và tin nhắn 
    • Firebase, AWS Amplify hay Hasura (hãy dùng GraphQL với ‘Đăng ký’) cho data thời gian thực
    • Các chức năng không máy chủ như AWS Lambda hay Các chức năng Firebase cho tính năng thông báo 
    • Bộ lưu trữ Cloudinary hay Firebase cho đăng tải hình ảnh và video

Dựng App Thương mại điện tử (E-Commerce)

Hãy chọn vài web yêu thích của bạn và tôi đảm bảo ít nhất 1 trong số chúng có 1 app e-commerce đã được nhúng sẵn trong đó. Dù nó chỉ là storefront nhỏ. Các app E-commerce khá phổ cập. Và tôi cá rằng bạn sẽ được yêu cầu để tạo chúng 1 lúc nào đó trong sự nghiệp lập trình viên của mình. 

Khá là hấp dẫn để dựng 1 nền tảng e-commerce ấn tượng và quy mô lớn như Amazon, nhưng tôi sẽ khuyên bạn nên làm 1 cái nhỏ và cụ thể hơn. 

Thay vì 1 thị trường cung cấp tất cả mọi thứ cho tất cả mọi người, hãy chọn ngành công nghiệp nào gây hứng thú với bạn. Ví dụ: nếu bạn thích các sản phẩm gia đình, bạn nên xem thử những gì Crate & Barrel hay Williams-Sonoma đã dựng cho các website của họ. 

Bên cạnh sản phẩm, các app e-commerce có thể cung cấp 1 dịch vụ đến khách hàng. Nếu nó là dạng dịch vụ tự cung cấp, 1 map tương tác có thể được thêm vào app để cung cấp cho người cung cấp dịch vụ. Và đó là để họ biết được địa điểm của nhau. Các app giao đồ ăn như UberEats và Doordash, đều yêu cầu vị trí của người đặt thức ăn. 

Bất kể những gì được bán, dù là vật thật (physical) hay vật ảo (virtual), mỗi app e-commerce sẽ bao gồm vài ‘storefront’ với sản phẩm hay chi tiết dịch vụ. Nếu người dùng có thể trả tiền nhiều sản phẩm cùng lúc, thì nó nên có 1 ‘xe đẩy shopping’. Vì đó là nơi người dùng có thể quản lý các sản phẩm họ muốn mua.
Cuối cùng, mỗi app e-commerce cần 1 quá trình kiểm tra nơi người dùng có thể mua sản phẩm của họ ẩn danh hoặc một khi chúng được xác thực.

5 dự án react buộc phải có cho portfolio của bạn

Những ví dụ phổ biến: Airbnb, Uber, UberEats, Doordash, Etsy, Udemy

Các công nghệ nên dùng: 

    • Tạo app React hay Gatsby cho storefront và hiển thị sản phẩm
    • Vạch với gói ‘yếu tố-vạch-react’ để lo liệu quá trình thanh toán
    • Chức năng không máy chủ như Netlify / AWS Lambda để lo liệu quá trình kiểm tra thanh toán
    • Algolia cho việc tìm kiếm sản phẩm nhanh-như-chớp 
    • Snipcart cho việc tạo xe shopping dễ dàng và quản lý các sản phẩm trong đó

Dựng App Giải trí

Đây chính là phần rộng nhất trong tất cả các hạng mục. Ý tôi là gì khi nói về giải trí? 1 app tập trung vào 1 thứ nhất định của truyền thông. Nó có thể là những phim màn bạc, podcast, hay âm nhạc, v..v..
1 số ví dụ điển hình của nó, tương ứng với từng hạng mục, như Netflix, Audible và Soundcloud hay Spotify. Nếu bạn sẽ bao gồm nghệ thuật hay thiết kế trong hạng mục này. Bạn sẽ phải thêm những trang như Behance hay Dribble vào danh sách. 

Điều làm mục này thú vị là vì nhiều ứng dụng giải trí được giáp trên các ứng dụng truyền thông xã hội. Ví dụ: 1 app như Tiktok, với các video mang đặc tính ngắn, dễ hình dung, được thúc đẩy bởi lượng tương tác khủng của người dùng. Những app khác như Youtube nằm trung tâm giữa các tương tác người dùng như ‘lượt thích’ , ‘bình luận’ và ‘đăng ký’.

Hãy nghĩ về dạng truyền thông hay giải trí làm bạn thích thú nhất và xem nếu bạn có thể xây dựng 1 nền tảng đơn giản quanh nó. Nơi người dùng có thể đăng nhập và lưu các nội dung mà họ thích. Sau đó, hãy nhìn vào việc thêm các yếu tố xã hội và làm nó khả dụng việc thêm bình luận vào nội dụng, ‘thích’ nó và ‘chia sẻ’ nó với các người dùng trên nền tảng đó. 

5 dự án react buộc phải có cho portfolio của bạn

Các ví dụ điển hình: Youtube, Netflix, Audible, Spotify, Tiktok 

Các công nghệ nên dùng: 

    • Tạo app React, Next.js hay Gatsby để tạo app UI
    • Gói npm ‘react-player’ cho các ‘playing-media’
    • Bộ lưu trữ Cloundiary hay Firebase cho đăng tải media
    • Algolia cho việc tìm kiếm media theo tên (như là audiotrack, video, movie, v..v..)

Dựng App Nhắn tin

App nhắn tin khá là quan trọng. Dường như bạn sẽ phải có dịch vụ tin nhắn miễn phí như WhatsApp hay Viber như 1 app trên điện thoại của bạn. Hay là 1 cái được dựng vào nền tảng truyền thông xã hội của bạn, như Facebook Messenger. Các dịch vụ như Intercom với tin nhắn trực tiếp cũng khả dụng cho các app web. Vì thế các công ty có thể cung cấp hỗ trợ khách hàng ngay lập tức tới các người dùng của họ.

Bất cứ app nhắn tin nào cũng se bao gồm 1 đoạn hội thoại với 2 hay nhiều người hơn nơi tin nhắn được gửi đi trong thời gian thực. Tương tự như app truyền thông xã hội, tôi sẽ khuyên bạn bạn 1 dịch vụ như Firebase hay Hasura mà có thể chuyển data qua WebSockets để hiển thị các tin nhắn ngay lập tức trong cuộc hội thoại.

Đa số các app nhắn tin đều trên thiết bị di động hay máy tính bảng. Nếu đây không phải là app clone đầu tiên của bạn, thì bạn sẽ có cơ hội tuyệt với để vượt qua trang web và dựng 1 app di động với React Native. Tốt hơn hết, bạn có thể dựng 1 trang web và app tin nhắn di động được giả lập với 1 gói như là React Native Web. 

5 dự án react buộc phải có cho portfolio của bạn

Các ví dụ điển hình: WhatsApp, Viber, Discord, Messenger, Slack

Các công nghệ nên dùng:

    • React Native hay React Native Web để dựng như 1 app di động hay 1 app hỗn hợp (web + di động)
    • Firebase, AWS Amplify, hay Hasura (dùng GraphQL subscription) để gửi tin nhắn thời gian thật
    • Bộ lưu trữ Cloudinary or Firebase cho việc gửi tin nhắn chứa nội dung hình ảnh hay video
    • Gói npm ‘emoji-mart’ cho lựa chọn emoji như cho một công cụ chọn emoji giống như Slack để người dùng đưa vào tin nhắn của họ 

Dựng App Năng suất

Đây chắc hằn là loại app dễ nhất để bắt đầu, mình xem xét và thấy rất nhiều hướng dẫn về các ứng dụng năng suất cơ bản ngoài kia. Khi nói về các app Năng suất, tôi đang liên tưởng tới các app ghi chép, app để quản lý team và danh sách công việc. Nói chung, bất cứ gì có thể giúp bạn hoàn thành 1 công việc nhất định hay để tăng năng suất hơn. 

Điều tuyệt vời đầu tiên về việc dựng app năng suất chính là cho bạn 1 lời giới thiệu tốt để dựng app. Bởi vì sự đơn giản tương đối của nhiều tính năng. Bạn có thể bắt đầu với cái gì đó đơn giản. Như là ‘text editor’ để dễ dàng viết các văn bản được định dạng với markdown, sau đó mở rộng theo nó. Sau đó thêm khả năng lưu văn bản như những tệp độc lập trên máy tính của bạn. Sau đó, 1 tính năng để xuất markdown đó như HTML để viết các email được định dạng. 

Để bắt đầu dựng 1 app năng suất, hãy hỏi các tính năng nào mà 1 app có thể làm cho kế hoạch hàng ngày của bạn dễ dàng hơn và bắt đầu từ đó.

5 dự án react buộc phải có cho portfolio của bạn

Những ví dụ điển hình: Todoist, Notion, Things, v..v..

Các công nghệ nên dùng: 

    • Tạo app React cho web hay React Native cho mobile
    • Gói npm react-markdown để hiển thị markdown trong UI app của bạn
    • Gói npm react-codemirror2 cho việc viết code trong note của bạn
    • và Gói npm react-draggable cho việc sắp xếp lại nội dung danh sách bởi việc ‘nhấp và kéo’

Tiếp theo sẽ là gì?

Nếu bạn đang hỏi bản thân, “Tại sao tôi phải tự làm điều này? Tại sao không có hướng dẫn nào tốt hơn ngoài kia cho cách dựng các app React như vầy?”

Thì bây giờ chính là lúc. 

Tôi rất hào hứng để thông báo 1 serie hoàn toàn mới cho các khóa siêu thực hành, nhập vai có tên là React12

Mỗi tháng trong năm, chúng tôi đều từng bước làm lại việc dựng 1 app clone thế giới-thật hoàn chỉnh. Với React mà cách nhìn và hoạt động của nó như 1 app thật sự. 

Nếu bạn theo con đường này 1 cách đầy đủ, bạn sẽ thấy cách để tạo 12 dự án tuyệt vời từ sơ khai đến lúc triển khai. 

Nó sẽ có tính năng của tất cả các app yêu thích của bạn (gợi ý: nhiều trong số chúng đều nằm trong bài viết này), bao gồm Instagram, Twitter, và Youtube, thêm 9 cái tên khác nữa. 

Bạn có thể bắt đầu ngay tại React12.io

Tuy nhiên, hãy hành động nhanh. Khóa tiếp theo sẽ bắt đầu sớm thôi!

Chúc may mắn với hành trình tạo ra app của bạn và hẹn gặp lại trong bài viết tiếp theo.

Topdev via codeartistry.io

Đừng bỏ lỡ bài viết hay về React:

Những concept JavaScript bạn cần biết trước khi học React

Cách tôi viết document cho react component

 React: Thử làm ứng dụng đổi tỷ giá

Xem thêm Tuyển dụng ngành CNTT hấp dẫn tại TopDev

3 công cụ ngon bổ rẻ cho Front-End developer

Front-end, như chúng ta đã biết, là bộ mặt của một web hay app, giao diện đẹp, bắt mắt sẽ dễ gây thiện cảm và thích thú với nhiều người hơn, developer chính là người sẽ tạo nên bộ mặt đó, nhưng việc đó là không dễ dàng. Là developer đã khổ rồi, 3 công cụ dưới đây sẽ khiến dân trong nghề “dễ thở” hơn trong việc tìm kiếm các giải pháp front-end cho mình. 

1. Lunar Popup 

3 công cụ ngon bổ rẻ cho Front-End developer

Đây là một thư viện cung cấp cho dev bộ popup, không những với thiết kế đẹp cực xịn mà còn có animation vô cùng mượt, và quan trọng nhất là hoàn toàn miễn phí. 

Cách sử dụng cực kỳ đơn giản, chỉ với 3 bước phía dưới, dev đã có thể sử dụng các source, design template và animation xịn xò, đẹp đẽ cho website của mình. 

3 công cụ ngon bổ rẻ cho Front-End developerNhưng khoan, đừng vội mừng, các bạn sẽ hoang mang khi click nút download lại bị chuyển vào trang gumroad rồi sẽ tự thắc mắc “ủa sao kêu miễn phí mà giờ lại bắt mua?”. Đừng lo, chỉ cần nhập con số như hình phía dưới xong cứ mạnh mẽ nhấn nút “I want this” để download nha (các bạn cũng đừng hỏi mình lý do vì sao vì chính mình cũng không biết lý do.

3 công cụ ngon bổ rẻ cho Front-End developer

  9 dự án mới nhất giúp bạn thành trùm Frontend trong năm 2024

2. Fancy Border Radius 

3 công cụ ngon bổ rẻ cho Front-End developer

Chắc ai cũng ám ảnh vụ vẽ sharp bằng CSS lắm, ngồi canh border-radius mất cả nửa ngày trời. Từ khi phát hiện ra cái tool này, mình hạnh phúc vô bờ bến, nắm kéo chỉnh chỉnh, vừa mắt thì copy paste thông số vào phần border-radius của CSS, không cần mất thời gian ngồi mò mẫm, canh chỉnh nữa, tiết kiệm được mớ thời gian làm các việc “quan trọng” khác.

Front-end tuyển dụng lương cao trên TopDev 

3. Fly-brid

3 công cụ ngon bổ rẻ cho Front-End developer

Một trang nguồn siêu hay cho ai mới bắt đầu làm email HTML. Đặc thù email HTML khó hơn HTML web rất nhiều. Việc build các template, layout đã đủ làm khốn khổ thôi rồi, có khi phải mất một ngày mới build xong. Bây giờ fly-brid sẽ giúp bạn bước đó, nhanh gọn nhẹ hơn, ngại gì không hốt. Mình đã thử responsive email source cũng kha khá, và mình chốt thấy cái này thuộc hàng chuẩn, dễ xài nhất.

  Nguồn tự học web front-end và web configuration ngon bổ rẻ

Thật ra anh em trong nghành tự code không cần source sẵn này chẳng sao cả, nhưng dù sao tiết kiệm thời gian và công sức được bao nhiêu hay bấy nhiêu nhỉ. Suốt ngày code cũng mệt mỏi lắm chứ, Topdev tụi mình chia sẻ một số source để mọi người có nhiều thời gian hơn làm những việc khác, cho bản thân chẳng hạn. Mọi người có source nào hay ho thì chia sẻ với cộng đồng anh em dev nhé! Thân ái chào quyết thắng !

TopDev tổng hợp 

Xem thêm những nội dung được nhiều người xem nhất về Front-end:

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

Xây dựng hệ thống Jenkins với hàng chục nghìn job

SPN là công ty top unicorn ở Silicon Valley, họ phát triển một communication tool tương tự như Skype, Slack. Tuy nhiên bằng cách mua lại một công ty về security là Perzoinc, họ đã tích hợp được thuật toán mã hóa của Perzoinc vào sản phẩm. Giúp Jenkins có độ bảo mật cực kì cao, được các doanh nghiệp tài chính, ngân hàng như HSBC, Citi Bank ưa chuộng và sử dụng.

Author: Giaosucan

Để đảm bảo sản phẩm được release liên tục nhanh chóng, do đó công ty đã có kế hoạch xây dựng một hệ thống CICD sử dụng Jenkins. Tuy nhiên họ gặp phải nhiều thử thách sau đây:
  • Có 4 môi trường dev, qa, uat, prod, ngoài ra còn nhiều team như qa performance, mobile… Mỗi team muốn có một Jenkins riêng để sử dụng để tránh conflict.
  • Số lượng nhân viên công ty, outsource lên tới cả ngàn, số lượng job chạy tính ra cũng hàng chục ngàn, làm thế nào để Jenkins chạy ổn định.
  • Không thể build Jenkins này theo cách manual, cần build tự động để đảm bảo provision infra một cách nhanh chóng, giảm thiểu human mistake.
  • Cần monitor hệ thống Jenkins để đảm bảo performance, xử lý issue kịp thời.
Các kĩ sư của SPN để tạo một project gọi là WarpDrive. Tên một loại động cơ trong phim khoa học viễn tưởng, có khả năng “kéo không gian” khiến phi thuyền có thể bay với vận tốc cực lớn.
Để giải quyết khả năng high availably and scale. Jenkins được build trên nền K8S thành các cluster. Mỗi team muốn có CICD pipeline riêng sẽ được tạo cluster riêng.
Bằng các setting trong RBAC (Role base access control), mỗi member trong 1 team được cấp quyền nhất định như Admin, User, Mod.
1 cluster bao gồm 1 master node và nhiều minion, nơi các agent được deploy.
Khi job Jenkins start, Jenkins master sẽ launch 1 con Jenkins agent (1 pod trong k8s), Jenkins agent sẽ chạy job, sau khi hoàn thành agent sẽ tự động bị destroy. Jenkins agent này run dưới dạng container, docker file được tạo và build riêng cho Jenkins agent, image up lên Google Cloud Registry
Khi job start, master sẽ launch 1 con agent (1 pod trong k8s), agent sẽ chạy job, sau khi hoàn thành agent sẽ tự động bị destroy. agent này run dưới dạng container, docker file được tạo và build riêng cho agent, image up lên Google Cloud Registry.
Để đảm bảo master có thể launch, destroy agent. Các kĩ sư cài đặt 1 K8s jenkins plugin, config để Jenkins có thể sử dụng docker images ở trên.
Tương tự Jenkins master cũng được build thành image từ dockerfile và up lên Google Registry. Các plugin của Jenkins cũng không cài đặt bằng tay, mà được định nghĩa trong 1 file txt, khi build image thì các plugin được tải và cài đặt. Cách đóng gói Jenkins master, slave thành docker tạo ra sự cơ động, portable, reusable
Tương tự master cũng được build thành image từ dockerfile và up lên Google Registry. Các plugin của Jenkins cũng không cài đặt bằng tay, mà được định nghĩa trong 1 file txt, khi build image thì các plugin được tải và cài đặt. Cách đóng gói master, slave thành docker tạo ra sự cơ động, portable, reusable.
Điều quan trọng là việc build up và deploy Jenkins được thực hiện hoàn toàn bằng code, (Infra as Code), sử dụng các công cụ như DSL, Helm, Terraform.
Điều quan trọng là việc build up và deploy Jenkins được thực hiện hoàn toàn bằng code, (Infra as Code), sử dụng các công cụ như DSL, Helm, Terraform.
Nhờ provision infra tự động bằng code, SPN đã giảm thiểu được human mistake, deploy Jenkins rất nhanh chóng và có thể clone ra nhiều cluster khác nhau.
Khi đã deploy thành công thì việc tiếp theo là monitoring, để biết họ dùng công nghệ gì để monitoring, đón xem phần tiếp theo.

Học và cả thiện kiến thức lập trình từ các dự án cá nhân (Pet Project)

Cách tốt nhất để học bất cứ thứ gì liên quan đến lập trình, đó là chúng ta dự định làm ra cái gì linh tinh để rồi trong quá trình làm ra sản phẩm đó chúng ta nhận ra những thứ chúng ta còn mơ hồ và lấn cấn, sau đó thì chỉ việc tìm hiểu tập trung những thứ này thôi. Đó cũng là một cách học những thứ mới mẻ, hoặc tìm hiểu những công nghệ xu hướng, mà người ta hay gọi là đú trend đấy

Bài này mình sẽ note lại những thứ trong quá trình làm ra một dự án pet project, và mình nghĩ nó sẽ hoàn toàn bổ ích cho những bạn muốn có cái nhìn toàn cảnh về việc làm nên một sản phẩm linh tinh từ đầu đến cuối để thỏa mãn dục vọng bản thân của một lập trình viên :D.

Trong quá trình hoàn thành dự án linh tinh này, mình sẽ hold lại và tìm hiểu cũng như giải thích những kiến thức mà bản thân mình còn chưa thật hiểu rõ. Theo shark tank thì khách hàng tiềm năng của bài là các thanh niên mới chập chững vào nghề hoặc là làm vài năm mà vẫn mông lung như một trò đùa (như mềnh :D).

Đầu tiên, nghĩ ra requirement cho pet project

Chắc chắn cái việc viết ra một dự án thú cưng thì đầu tiền nó phải thỏa mãn cái nhu cầu của chính người viết ra cái đã. Ở đây là mình, hoặc các bạn đọc ở đây, không cần quan tâm trên thị trường đã có sản phẩm nào tồn tại để cạnh tranh hay chưa vì chúng ta thường chỉ có kinh phí là 1 buổi sáng hoặc 1 ly cafe không thôi à, nên tập trung vào làm ngay và luôn là tốt nhắt.

Quay lại vấn đề requirement, chắc hẳn các bạn cũng biết cảm giác khi đau bụng (nhất là buổi sáng, sau khi vào công ty) là một khoảng thời gian riêng tư vô cung quý giá, mà trong đó chúng ta có thể làm mọi thứ mà không có cảm giác tội lỗi, mà 3G hay 4G trong toilet thì các bạn biết rồi đấy, các cụ hay bảo là “nhanh như rùa bò” ấy. Vào toilet mà không có gì xem hay đọc là một khoảng thời gian rất phí phạm của cuộc đời này, ở nhà còn có dầu gội dầu xả thế lọ thể chai để xem xuất xứ, thành phần này nọ chứ ở công ty, toilet của chung thì làm gì có gì mà coi, mà có thì coi 1 lần chứ đâu có coi quài được.

Từ những lý do ở trên của bản thân, mình quyết định sẽ lập trình 1 website đọc tin tức tối ưu hóa băng thông, hạn chế đến mức thấp nhất băng thông gửi từ server gửi xuống. Khoảng ~2kb cho trang chủ, và ~4kb cho list tin tức, còn nội dung thì tùy từ tin gốc nhưng ở khoảng ~10kb là đẹp. Vậy là đủ cho những nơi 3g thấp hoặc khi điện thoại bị hết băng thông rộng.

Xong phần requirement, bước kế tiếp là đến phần lựa chọn stack công nghệ.

Lựa chọn stack công nghệ

1 phần trong stack của AirBnB1 phần trong stack của AirBnB

  • Server và client: Do hạn chế băng thông cho client nên tốt nhất là dưới client chúng ta không nên sử dụng bất cứ một thứ gì cả, client chỉ việc lấy html và render ra là xong, tốt nhất là loại bỏ luôn file Javascript.
  • Backend technology: Nhanh gọn lẹ tốc độ, ăn liền nhất có lẽ Nodejs là một sự lựa chọn đúng đắn nhất, khởi tạo nhanh, lập trình nhanh, cũng như có rất nhiều host/ platform hỗ trợ việc deployment gọn lẹ như Heroku chẳn hạn. Còn về framework web với nodejs thì có lẽ expressjs là phổ thông và cũng là một framework tương đối đã trưởng thành.

    Kèm đó là Typescript ngoài các lợi ích của nó thì nó giúp code chúng ta tường mình hơn với việc hỗ trợ kiểu dữ liệu. Đương nhiên không công nghệ nào là thần thánh và hoàn toán không có khuyết điểm, Typescript cũng vậy nhưng với môi trường server thì nó ít bị tác dụng phụ hơn so với client(SPA) app. Mình không chuyên backend với nodejs, nên mình sẽ chọn những gì mình thấy là dễ dàng nhất (với bản thân mình, hoặc với đa số mọi người) để tiếp cận.

  • Web server: Nginx, một web server sinh sau đẻ muộn nhưng hiệu năng và độ thân thiện, với mình là khá hoàn thiện ngoài những bản plus thêm tính phí 😀

    Một chút chuyện web serverhttps://www.rootusers.com/linux-vs-windows-web-server-benchmarks/, dựa theo bài so sánh này, chúng ta có thể thấy là IIS có performace rất tốt trải dài từ 1~8 CPU core(s), nên không có nghĩa chúng ta không chọn IIS vì hiệu năng kém hay bất cứ lý do gì về vấn đề hiệu năng, mà với bản thân mình lý do không chọn IIS là vì:

    - Ứng dụng không bắt buộc chạy trên windows server
    - Windows server khá đắt đỏ so với linux
    - Server vs GUI rất nặng nề
    - (Có thể) dễ dàng bị tấn công hơn, dù điều đó phụ thuộc vào system administrator, theo mình thì đa số sa của linux hiểu rõ hệ điều hành của mình hơn
    - Cộng đồng hẹp, lợi thế riêng cho các ứng dụng phát triển bằng Microsoft technology
    
  • Server provider: Mình sẽ không sử dụng platform như Heroku để host ứng dụng này mà sẽ sử dụng 1 cloud vps, theo mình nó sẽ có nhiều điều để nói hơn. Okay, bất cứ providers nào mà bạn thân thuộc từ AWS (free tier 1 year), GCP (free 300$ năm đầu tiên cho new user), Azure (free 1 tháng đầu 200$ thì phải), DigitalOcean (free 10$ new user), Vultr(free 25$ new user)…

    Ở đây mình sẽ chọn Vultr nhé vì nó có gói 3.5$ cho 512RAM vs 2.2Ghz 1 core CPU. Khá đủ cho các pet/site project của chúng ta. Các bạn register ở link đây nhé: https://www.vultr.com/products/cloud-compute/, ref từ tài khoản của mình, hình như mình đc 10$ nếu bạn paid cho dịch vụ thì phải.

  • Server OS: Chắc chắn là Linux rồi, nếu ứng dụng của bạn không phải chạy bằng .Net Framework và dựa quá nhiều vào Windows API thì ko cần thiết phải cần đến một IIS server đắt đỏ. Nếu ứng dụng của bạn hiện tại đang được lập trình bằng .net core thì chúng ta cũng thoải mái deploy trên môi trường linux nhé.

    Mình sẽ chọn ubuntu 16.04 cho server nhé, nó là một distro của linux được sử dụng rất phổ biến trên thế giới, theo mình thì nó mạnh mẽ, cộng đồng rộng lớn, dễ sử dụng cho người mới bắt đầu (me) hay là cả system adminitrator nhiều kinh nghiệm.

    Theo mình không nên sử dụng ubutu 18.04 cho server nhé, hiện tại theo mình thấy có khá nhiều vấn đề về chuyện tương thích, có lẽ nó cần thêm thời gian để hoàn thiện hơn.

  • Containerize: Okay, container container everywhere mà, không cần công nghệ containerize thì chúng ta vẫn triển khai từ trước đến nay thôi, nhưng không thể chối bỏ việc Docker hay công nghệ containerize (gọi là công nghệ cũng không thật chính xác lắm, gọi là 1 philosophy thì chính xác hơn) đã giúp chúng ta rất nhiều trong việc lập trình, triển khai, scale up… Nói không ngoa containerize hay Docker đang là con cưng của giới công nghệ hiện tại :D. Mình cũng chỉ mới tiếp cận và sử dụng Docker khoảng vài tháng lại đây, thật sự mà nói nó giúp ích cho mình rất nhiều trong việc triển khai một ứng dụng.

    Chúng ta sẽ sử dụng Docker và Docker Swarm cho vấn đề triển khai này nhé. Sẽ nói về Docker swarm dành cho những bạn chưa đụng tới Docker ở đoạn sau nhé. Nhưng ngay lúc này bạn có thể search về Docker Swarm và Kurbenetes là gì, và nó khác nhau như thể nào?

  • Source control và CI/CD: có lẽ chúng ta nghĩ ngay tới github nhưng, pet project thì pet project chứ, nhiều khi nó lại là product triệu đô thì sao nhỉ ahihi, đùa chứ với một pet project thì github là nơi tuyệt vời để chúng ta lưu trữ dự án rồi, nhưng ở đây mình sẽ sử dụng gitlab để lưu trữ.

    Ngoài những thứ github có, thì nó còn đi kèm rất nhiều thứ để chúng ta hoàn toàn có thể phát triển phần mềm từ đầu đến cuối như: lưu trữpipeline buildtriển khải mà nó còn support private registry cho Docker image… và điều cuối cùng quan trọng là nó hỗ trợ chúng ta private dự án, cũng như unlimited collaborators10GB per project. Hiện tại các dự án trên công ty mình cũng sử dụng gitlab đóa.

  • Chuyện domain: domain thì chúng ta cứ GoDaddy và Namecheap và triển thôi, hai nhà cung cấp này có khuyển mãi tầm 1$ cho doamin .com cho người dùng mới trong năm đầu tiền, hoặc các bạn cũng có thể mua những domain giá khoảng 1$ với đuổi như .xyz.online… gì đấy, còn muốn hàng free thì cứ https://www.freenom.com.

Còn gì nữa không nhỉ?? Chắc không còn gì nữa nhỉ, ngoài các implement chi tiết hơn trong các phần tương ứng. Tổng kết lại stack của chúng ta nào:

  • Server side rendering only
  • Nodejs
    • Express
    • Typescript
  • Nginx web server
  • Vultr cloud vps
  • Linux ubuntu 16.04
  • Docker and Swarm
  • Gitlab for Source Control, CI/CD

Các bạn cũng có thể lên https://stackshare.io/news để xem các stack công nghệ của các công ty, cũng như mức độ phổ biến, điểm mạnh, điểm yếu của công nghệ đó. Và đừng ngại chia sẽ stack của mình đang áp dụng cho cộng đồng nhé.

Tới đây bài cũng khá dài, viết một lần chắc draft miết luôn quá. Nên thôi mình sẽ cố gắng chia bài này ra khoảng 2 đến 3 bài cho ngắn. Bài sau sẽ đi vào chi tiết việc implement và giải thích, tìm hiểu những kiến thức lập trình đi kèm. Hy vọng bài viết bổ ích cho các bạn nào chưa có cái nhìn tổng quan về việc lựa chọn công nghệ, và triển khai một ứng dụng từ con số 0 đến khi lên sản phẩm.

Tốt nhất trong tất cả các lựa chọn chúng ta nên dành thêm thời gian tìm hiểu thêm trên internet, nếu có những đồng nghiệp hay tiền bối có kinh nghiệm hơn đừng ngại hỏi họ nhé. Không ngại hỏi thì chúng ta cũng đừng ngại cám ơn nhé.

Author: DINH DUONG

TypeScript thoáng qua

Khi mình viết bài này rõ ràng thì TypeScript không còn là một thư viện đang nổi lên nữa. mà nó đã là thư viện đứng đầu về strong typing cho JavaScript. Hiện giờ nó và Flow của Facebook là 2 thư viện nổi tiếng nhất về strong typing cho Javascript. Nhưng có lẽ Microsoft với kinh nghiệm cùng ngôn ngữ ‘C#’,cái ngôn ngữ mà với mình nó là một ngôn ngữ đẹp, mạnh mẽ và khá chặt chẽ đã đem lại thành công cho TypeScript. Hiện nay rất nhiều thư viện đã và đang được viết mới hoặc viết lại bằng TypeScript như AngularVue 3Aurelia

Mặc dù Javascript là một ecosystem thay đổi chóng mặt, các chuẩn thay đổi liên tục, sóng sau sô sóng trước, cộng đồng hoạt động rất sôi nổi, rất nhiều concept được liên tục đưa ra, cũng như rất nhiều thư viên hỗ trợ cho nó nhưng tương lai là của nó vẫn là bất định 😅, thật sự tiếp cận và làm việc với Javascript khá là hứng thú cũng như tương đối là dễ dàng, nhưng cũng đã có những dự án đi xa được với nó, cũng có những anh tài đã dừng lại khi project thực sự trở nên quá lớn (nguồn: đọc tùm tà la bài của người ta). Có nghĩa dạo đầu thì dễ, còn sau sau thì khá là khó.

Nhưng có lẽ với TypeSript thì Javascript ít nhất cũng đã tốt hơn khá khá  nhiều.

Nhưng TypeScript cuối cùng cũng chỉ là một thư viện superset của Javascript nên bài này sẽ điểm qua các syntax của TypeScript cũng như giải thích đơn giản đi kèm theo kinh nghiệm của bản thân mình.

Các bạn có thể tham khảo chi tiết thêm từ trang chủ của TypeScript: https://www.typescriptlang.org/docs/home.html

Cài đặt

npm install -g typescript
tsc index.ts // Chạy file typescript

Các bạn có thể xem thêm về tsconfig.jsonhttps://www.typescriptlang.org/docs/handbook/tsconfig-json.html

Syntax

Kiểu dữ liệu

let isDone: boolean = false;

Các loại dữ liệu cơ bản được support trong Typescript là numberstringDateboolean, ngoài ra còn các loại ít được xài hơn như là nullundefined

Tham khảo: https://www.typescriptlang.org/docs/handbook/basic-types.html

Khai báo biến

Tương tự như javascript nhưng kèm theo kiểu dữ liệu. Cũng như ES6 Typescript suggest sử dụng let và const để khai báo, và quên đi kiểu var huyền thoại 😅

Tham khảo: https://www.typescriptlang.org/docs/handbook/variable-declarations.html

Interface

Có lẽ đây là phần mình sẽ nói nhiều nhất, vì slogan của Typescript là Typescript – Javacript that scale 🤗

Khá tương tự như trong C# và Java

export interface IAnimal {
    sound(): string; // Tiếng nói
    go(): string;// Tiếng đi
    name: string;
}
export class Dog implements IAnimal {
    name: string;
    sound(){
        return "Gau gau"; // Chó sủa gâu gâu
    }
    go() {
        return "Kit kit";
    }
    constructor(name: string){
        this.name = name;
    }
}
export class Horse implements IAnimal {
    name: string;
    sound(){
        return "Hihi"; // Ngựa hí hí hí      
    }
    go(){
        return "Kaloc kaloc";
    }
    constructor(name: string){
        this.name = name;
    }
}

Source javascript sau khi compiler:

var Dog = /** @class */ (function () {
    function Dog(name) {
        this.name = name;
    }
    Dog.prototype.sound = function () {
        return "Gau gau"; // Chó sủa gâu gâu
    };
    Dog.prototype.go = function () {
        return "Kit kit";
    };
    return Dog;
}());
var Horse = /** @class */ (function () {
    function Horse(name) {
        this.name = name;
    }
    Horse.prototype.sound = function () {
        return "Hihi"; // Ngựa hí hí hí      
    };
    Horse.prototype.go = function () {
        return "Kaloc kaloc";
    };
    return Horse;
}());

💯 Điểm cộng thứ nhất rõ ràng là với typescript code của chúng ta đẹp đẽ và dễ đọc hơn rất nhiều.

Chúng ta cũng có thể vừa implements từ 1 hoặc nhiều interface và extends từ 1 class khác

export interface IHouseAnimal {
    isGuardHouse(): boolean;
}
class Chihuahua extends Dog implements IAnimal, IHouseAnimal {
    isGuardHouse() {
        return false; // Không thể canh nhà 😗
    }
    sound() {
        return "Goeo goeo";
    }
} 

Với extends chúng ta có thể sử dụng hoặc thay thế các hàm đã được implement bởi lớp cha, và do lớp IAnimal đã được implements đầy đủ phương thức ở lớp cha, nên Typescript chỉ warning là cần khai bao hàm isGuardHouse() ở lớp IHouseAnimalThông báo lỗi của typescriptThông báo lỗi của typescript

Generic trong interface

Có 2 thấy mình thấy tâm đắc nhất khi sử dụng Typescript đó là ngoài vấn đề code đẹp, dễ đọc, dễ bảo trì thì đó chính là kiểu Generic, một kiểu khá nổi tiếng bên ngôn ngữ C# được Microsoft đem qua Typescript, nó đem lại một ngôn ngữ hoàn toàn typing để viết code Javascript. Với những dự án lớn và làm việc nhiều team với nhau đây quả là một cải thiện to lớn 🤑.

Ví dụ chúng ta có một interface mà sẽ implements các phương thức của các hàm trong Iqueryable trong .net (C#), nếu bạn nào không làm C# trước đây thì cứ coi nó nhưng các hàm query data bình thường với một array thông thường.

interface IQueryable<T> {
    where<T>(iterator: (entity: T) => boolean): IQueryable<T>;
    select<U>(iterator: (entity: T) => U): IQueryable<U>;
    join<S>(source: S[] | Promise<S[]>, iterator: (aEntity: T, bEntity: S) => boolean): IQueryable<{ x: T, y: S }>;
    leftJoin<S, U extends T & S>(source: S[] | Promise<S[]>, iterator: (aEntity: T, bEntity: S) => boolean): IQueryable<U>;
}
  • where: Nhận vào 1 object kiểu T và trả về IQueryable cũng kiểu T
  • select: Nhận vào 1 object kiểu T nhưng trả về IQueryable với 1 kiểu mới sau khi select là kiểu U
  • join: Nhận vào 1 mảng data kiểu S và 2 object kiểu T, kiểu S nhưng trả về 1 object có hai thuộc tính mới là x và y, với x là kiểu T và y là kiểu S
  • leftJoin: Nhận vào 1 mảng data kiểu S và 2 object kiểu T, kiểu S nhưng trả về 1 object có kiểu U có những thuộc tính thuộc cả T lẫn S

Có thể thấy với Generic thì Typescript đã đem lại khá nhiều lợi ích cho việc định nghĩa các kiểu dữ liệukiểu trả về,… cho Javascript 😇

Vài thứ bên lề

Theo gợi ý của Typescript thì nên sử dụng interface để làm một type class thay cho việc sử dụng class thông thường:

Type class

interface LoginModel {
    username: string;
    password: string;
    rememberMe: string;
}

class LoginModelClass{
    username: string;
    password: string;
    remember: string;
}

let model = {} as LoginModel;
let modelClass = {} as LoginModelClass;
var LoginModelClass = /** @class */ (function () {
    function LoginModelClass() {
    }
    return LoginModelClass;
}());
var model = {};
var modelClass = {};
}());

Chúng ta thấy class sẽ được biên dịch thành một function object còn interface thì không. Từ đó nó hạn chế được số lượng source code mà chúng ta sinh ra và từ đó giảm thiểu dung lượng ứng dụng 🤪

Bài viết xin tạm dừng tại đây, vì Typescript cũng có khá là nhiều thứ hay ho, nhưng tóm gọn lại nó nằm trong khuôn khổ syntax nên các bạn có thể lên đây tham khảo (https://www.typescriptlang.org/docs/handbook/basic-types.html) thêm những như chi tiết hơn của nó.

Các bài tới nếu về Typescript mình sẽ chia sẽ về những thứ linh tinh, hay ho về Typescript chứ không phải là giới thiệu về nó nữa.

Author: DINH DUONG

“Luyện” gì để trở thành Software Engineer xịn?

“Luyện” gì để trở thành Software Engineer xịn?

Có thể nói, Software Engineer là level “trùm cuối” mà dân công nghệ nào cũng ao ước với tới. Trước khi biết cần trang bị gì để chinh phục level này thì cần hiểu được Software Engineer là gì? 

Thế nào là Software Engineer?

 

“Luyện” gì để trở thành Software Engineer xịn?

Computer Scientist + Application Developer = Software Engineer, Software Engineer là sự giao thoa giữa hai level Computer Scientist và Application Developer, là người có cái nhìn tổng quát về mọi thứ; vừa có kiến thức chuyên sâu rất tốt, tư duy problem solving cao; vừa có khả năng lập trình cực tốt. Đây là loại mà các công ty phần mềm như Google, Facebook, Twitter, …. luôn muốn tuyển vào.

Computer scientist mạnh về kiến thức khoa học máy tính và kỹ năng research; nhưng lại thiếu kỹ năng về phát triển phần mềm; trong khi application developer lại ngược hoàn toàn. Level nào cũng có điểm mạnh, điểm yếu riêng và Software Engineer hội tụ các điểm mạnh của 2 level, và bạn ngày càng dày công tu luyện thì ngày càng sẽ lên trình thôi. 

Cần gì để trở thành Software Engineer? 

 

“Luyện” gì để trở thành Software Engineer xịn?

Đây là sơ đồ đơn giản mô tả những mảng kiến thức (knowledge areas) được tổng hợp bới IEEE Computer Society, một tổ chức quy tụ những kỹ sư giàu kinh nghiệm làm việc trong ngành Software.

Đồng thời, những mảng kiến thức này cũng mang tính khái quát rất cao, nên để viết một website, để làm một mobile app, bạn không nhất thiết phải nắm tất cả những mảng kiến thức trong này vẫn có thể làm tốt. Nhưng để định vị bản thân trở thành một software engineer chuyên nghiệp, hướng tới việc xây dựng những hệ thống software ngày càng hoàn thiện, chất lượng cao, cũng như quy mô ngày càng lớn thì việc vận dụng những kiến thức nền tảng như thế này là cần thiết.

Từ sơ đồ trên mình tập trung vào 4 mảng chính cần có để trở thành Software Engineer nhé, đó là: programming languages, software requirements, software design, software constructions.

Tham khảo thêm các vị trí tuyển dụng Software Engineer tại Topdev

Programming language 

Một Software Engineer không nhất thiết phải biết và sử dụng tất cả các loại ngôn ngữ lập trình, bạn không phải là thần thánh, nhưng ít nhất cũng cần nên biết một số ngôn ngữ lập trình phổ biến. 

Một cuộc khảo sát cho thấy có rất nhiều ngôn ngữ lập trình, và mức độ sử dụng của từng loại cũng khác nhau. 

“Luyện” gì để trở thành Software Engineer xịn?

Bạn lựa chọn học loại ngôn ngữ mà nhiều người sử dụng, hay bạn lựa chọn học loại ngôn ngữ mình thích, tất cả lựa chọn ở bạn thôi. Nhưng dù bạn lựa chọn như thế nào thì hãy tìm hiểu sâu về một loại ngôn ngữ, còn các loại ngôn ngữ khác, cũng nên tìm hiểu thêm nó một chút để ta không bị lạc hậu trong ngành. 

Software Requirements

Software Requirements tập hợp những chủ đề (Topics) liên quan đến việc thu thập, đánh giá, phân tích, mô tả yêu cầu phần mềm (software requirements).

Một bản requirement rõ ràng sẽ giúp team phát triển sản phẩm tạo đúng sản phẩm như yêu cầu. Và nó cũng giúp đặt nền tảng cho việc phát triển sản phẩm. Để tạo ra một bản requirement cần có 5 bước: tạo outline, xác định mục đích của sản phẩm, mô tả bạn xây dựng nó ra sao, chi tiết các requirement, và cuối cùng requirements đó được phê duyệt. Thêm vào đó, 3 điều tối thiểu cần phải có trong requirement, đó là: mục đích, mô tả tổng thể, và những yêu cầu cần chú ý. 

Dù công ty của bạn làm outsource với requirements được mô tả cụ thể và chi tiết từ đầu, hay công ty của bạn làm product, với requirements được mô tả khái quát và dần dần định hình sau mỗi vòng lặp phát triển (sprint) thì những topic trên đều rất cần thiết.

Một số topic trong mảng này có thể kể đến như: Requirements Classification, Conceptual Modeling, Formal Analysis, System Requirement Specifications, Model Validation, …

Software Design

Software design là bước đầu tiên trong software design life cycle, nó sẽ chuyển hóa từ ý tưởng thành hiện thực, và cố gắng thực hiên các yêu cầu được đề cập trong requirement. Software Design được định nghĩa là quá trình xác định kiến trúc (architecture), thành phần (components), giao diện (interfaces), và những yếu tố khác làm thành hệ thống phần mềm. Trong software design có 3 level: architectural design, high-level design, và detailed design.

Một số chủ đề con của mảng kiến thức về Software design mà bạn có thể tham khảo: Architectural Styles, Architectural Structures and Viewpoints, Distribution of Components, Control and Handling of Events, Concurrency, Security, …

Software Constructions 

“Luyện” gì để trở thành Software Engineer xịn?
What Is Software Construction?

Software Construction là việc tạo dựng phần mềm thông qua code, launch sản phẩm, testing và debug. Construction sử dụng các output từ quá trình design để build up phần mềm. Do đó, design, construction, testing quan hệ chặt chẽ với nhau.

Thực tế khi làm software, giai đoạn gây hứng thú nhất chính là lúc bắt tay vào “code”, hiện thực hóa những yêu cầu, những ý tưởng trong đầu thành code cụ thể. Tuy nhiên, để code hiệu quả và sạch đẹp cũng có nhiều thứ bạn cần phải cân nhắc: các dòng code sắp xếp ra sao, add function như thế nào, identation sao cho hợp lý…, tất cả những điều này hợp lại, tạo construction sạch đẹp sẽ giúp bạn rất nhiều. 

Mảng kiến thức về Software Constructions bao hàm một số quy tắc, kỹ thuật, … mà bạn có thể vận dụng trong quá trình hiện thực hóa phần mềm của mình như: Concurrency, Middleware, Construction Methods for Distributed Software, Construction Methods for Heterogeneous Systems, Performance Analysis and Tuning, State-Based and Table-Driven Construction Techniques, …

Công nghệ ở Việt Nam phát triển vượt bậc nhưng Software Engineer lại khá ít. Trên đây là một số chia sẻ nho nhỏ của mình, để đi vào chi tiết thì vô vàn và đa dạng. Các bạn hãy cùng Topdev mở rộng con đường này bằng cách chia sẻ thêm những kiến thức về ngành nghề này ! 

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

Học Javascript 1: Syntax Parser, Execution Context, Lexical Environment là gì

Học Javascript 1: Syntax Parser, Execution Context, Lexical Environment là gì

Author: Khoa Nguyen

Tại sao cần biết những thuật ngữ này

Thực sự, bạn không cần biết những khái niệm như Syntax ParserExecution ContextLexical Environment trong JavaScript là gì vẫn được. Tuy nhiên, nếu bạn muốn hiểu rõ chính xác điều gì đang diễn ra khi code bạn chạy (đương nhiên vẫn dễ hiểu hơn mã máy nha) thì bạn cần phải giải thích được những thuật ngữ khô khan này.

Ngoài ra, những thuật ngữ nền tảng này sẽ theo bạn xuyên suốt quá trình học và làm việc với Javascript sau này. Để hiểu những khái niệm khác như: hoisting trong Javascript (Creation Phase vs. Execution Phase), từ khóa this, array functions thì bạn nên hiểu Syntax ParserExecution ContextLexical Environment  là gì trước.

Tuyển dụng lập trình viên Javascript tại đây

Syntax Parser là gì?

Ngôn ngữ lập trình cũng có nhiều loại. Mình sẽ không phân loại ở bài viết này. Nhưng bạn sẽ thường thấy cụm từ “ngôn ngữ lập trình cấp cao” high level programming language. Javascipt là một trong số đó, vì thế cú pháp (syntax) của nó khá giống ngôn ngữ tự nhiên.

Ví dụ muốn viết một hàm thì:

function greet(){ var a = “hello world”; }

Thực chất Synax Parser cũng chỉ là một chương trình được các lập trình viên khác viết ra mà thôi. Syntax Parser trong Javascript sẽ dịch đoạn code này sang mã máy vì mã máy quá phức tạp và khó, không phải ai cũng học được.

Học Javascript 1: Syntax Parser, Execution Context, Lexical Environment là gì

Syntax Parser là gì

Lexical Environment là gì?

Lexical Environment là nơi chúng ta viết code của mình (đặt biến, hằng, hàm ở đâu?) Và điều này rất quan trọng.

Như đã nói ở Syntax Parser, code ta viết sẽ được dịch sang mã máy, vì thế nhìn code là có thể biết được biến, hàm chúng được tạo như thế nào trong bộ nhớ máy tính, chúng tương tác với nhay như thế nào.

Để hiểu rõ hơn, mình lấy ví dụ đoạn code sau:

function greet(){ var a = “hello world” }

Lexical Environment tức là bạn đặt biến a trong hàm greet(). (Đã trả lời cho cây hỏi: Nơi đặt biến a?)

Một số trang sẽ nói là Lexical Environment là Scope hay Lexical Scope. Các anh hùng vẫn tranh cãi về vấn đề này trên StackOverFlow.

Còn đây là định nghĩa gốc chính chủ:

Lexical Environment  is the place where “the association of Identifiers to specific variables and functions based upon the lexical nesting structure of ECMAScript code” is stored.

Từ định nghĩa này, bạn sẽ thấy một loạt từ chuyên môn (Jargon) khác như:

  1. Association of Identifiers
  2. Lexical Structure

Rồi từ 2 cái này lại đẻ ra:

  • environment record
  • reference to the outer environment
  • Declarative environment record
  • Object environment record

Execution Context là gì?

Một lần nữa mình xin nhắn lại code ta viết sẽ được dịch sang mã máy. Vì thế trong quá trình dịch này sẽ có nhiều thứ xảy ra, một trong số đó là Execution Context.

Mình lấy ví dụ đoạn code sau:

function greet(){ var a = “hello world” function shakeHands(){ var count = 5; } }

Thì Execution Context sẽ quyết định tạo biến a trước hay biến count trước. Rồi chương trình sẽ chạy greet() trước hay shakeHands() trước.

Sẽ có một loạt thuật ngữ chúng ta cần hiểu liên quan đến Execution Context như:

  • Global code
  • Function code
  • Eval Code
  • Execution Context Stack
  • Creation Stage
  • Code Execution Stage

Kết luận

Có thể bạn nghĩ tại sao phải hiểu mấy cái khỉ này làm gì, có ích gì cho đời đâu. Nhưng hãy tin mình đi, đây là nền tảng để bạn có thể hiểu rõ Javascript trong tương lại. Bài này chỉ mục đích giới thiệu, ở những bài sau, chúng ta sẽ  tìm hiểu chi tiết hơn. Còn rất nhiều cái quái đản trong Javascript đang chờ đón bạn!

Tham khảo các vị trí tuyển nhân viên IT tại Hà Nội, Đà Nẵng, HCM cho bạn

Cách viết “Hello World” với 28 Ngôn ngữ Lập trình

Cách viết

Bọn máy tính khá là thực dụng – Nó chỉ làm những gì được yêu cầu thôi. Vậy làm thế nào để báo máy tính cần phải làm gì? Bạn sẽ phải “nói” thông qua Ngôn ngữ Lập trình. Và 1 trong những việc đầu tiên bạn cần làm khi học 1 ngôn ngữ lập trình mới chính là làm cho máy tính hiển thị “Hello, World”.

Không có ngôn ngữ lập trình nào là hoàn hảo cả, chúng đều có những đặc điểm khác nhau. Và mỗi ngày có hàng trăm ngôn ngữ mới được tạo ra. 

Dưới đây là danh sách các ngôn ngữ lập trình mà mình muốn giới thiệu và hầu hết chúng đều đã được ghi danh trên ‘bảng vàng’ của ngành lập trình. Ngày nay chúng vẫn đang được sử dụng và đóng góp thêm cho ‘nghệ thuật của các ngôn ngữ máy tính’. 

ANGOL

Cùng đương thời với các ngôn ngữ lập trình FORTRAN, Lisp, và COBOL vào đầu những năm 1950. Nó đã trở thành cách quy chuẩn để diễn tả các thuật toán học thuật trong hơn 30 năm, và đã tác động ảnh hưởng tới nhiều syntax của các ngôn ngữ lập trình khác, C là 1 cái tên tiêu biểu trong số đó.

BEGIN DISPLAY("HELLO WORLD!") END.

ASPECTJ

Tiêu chuẩn thực tế cho phong cách lập trình, hay còn được gọi là ‘Aspect Oriented Programming’ (AOP). AOP không phổ biến cho lắm, nhưng khá được yêu thích bởi 1 số người và khái niệm đặc biệt của AOP đã giúp nó tìm được con đường riêng của mình tới các thư viện và ngôn ngữ khác. AspectJ sử dụng các syntax khá giống Java. 

// HelloWorld.java
public class HelloWorld {
    public static void say(String message) {
        System.out.println(message);
    }

    public static void sayToPerson(String message, String name) {
        System.out.println(name + ", " + message);
    }
}

// MannersAspect.java
public aspect MannersAspect {
    pointcut callSayMessage() : call(public static void HelloWorld.say*(..));
    before() : callSayMessage() {
        System.out.println("Good day!");
    }
    after() : callSayMessage() {
        System.out.println("Thank you!");
    }
}

APPLESCRIPT

Nếu bạn đang sử dụng máy Mac, bạn có thể dùng cái này để tự động hoá và tuỳ chỉnh các ứng dụng của mình. 

say “Hello, world!”

ASSEMBLY LANGUAGE

Đây chính là ngôn ngữ sẽ giúp bạn tạo ra 1 phần mềm có hiệu năng và hiệu quả cao nhất mà bạn vẫn có thể đọc được. Thật sự Assembly rất khó để viết nên thường nó chỉ được dùng trong các phần nhỏ mang tính ‘performance-sensitive’ của chương trình. Bạn sẽ tìm thấy chúng trong các hệ điều hành và các bộ máy game 3D. 

    global  _main
    extern  _printf

    section .text
_main:
    push    message
    call    _printf
    add     esp, 4
    ret
message:
    db  'Hello, World', 10, 0

BASH (UNIX SHELL)

Từng được dùng để quản lý và tương tác các dòng lệnh với hệ thống Linux & Unix. 

#!/bin/bash
STR="Hello World!"
echo $STR

BASIC

Basic được ra mắt vào năm 1964 và vươn lên thời hoàng kim vào đầu những năm 80, khi mà máy vi tính bắt đầu thâm nhập vào các văn phòng nhỏ và hộ gia đình. Bạn mong đợi để viết riêng phần mềm của mình và phần lớn các máy tính được gửi kèm với một số phiên bản của BASIC. Nó tiếp cận đến được nhiều người nhờ việc dễ học và vừa đủ để chạy trên các phần cứng không mạnh lắm này. 

Số lượng các biến thể của BASIC là vô cùng lớn, Visual Basic là 1 biến thể khá phổ biến trên Windows trong những năm 90. Sau đó nó được thay thế bởi Visual Basic .NET (bây giờ chỉ còn gọi là Visual Basic) nhưng khá là khác biệt so với phiên bản trước đó. Visual Basic hiện vẫn được sử dụng rộng rãi.

10 PRINT "Hello, World!"
20 END

C

Đây chính là ngôn ngữ phổ biến nhất trên thế giới. Là ngôn ngữ viết ra các hệ điều hành nổi tiếng như Windows, MacOS, iOS và Android, cũng như các trình duyệt và engineer game 3D. Syntax của nó đã ảnh hưởng đến vô số các ngôn ngữ lập trình khác.

Các map của C khá gần giống như Assembly Language nhưng bạn có thể viết nhiều chương trình phức tạp với nó. Nếu bạn cần hiệu năng cao nhất có thể mà không muốn bị quả tải thì C chính là thứ dành cho bạn.

C còn là ngôn ngữ làm phổ biến nên khái niệm “Hello, World”.

#include <stdio.h>

int main(void)
{
    printf("hello, world\n");
}

C++

Hiệu suất của C++ gần giống như C và được sử dụng trong các dự án quan trọng như Chrome browser. C++ là kết quả của nỗ lực để tạo nên 1 ngôn ngữ giúp dễ dàng build nên các dự án lớn trong khi vẫn giữ được hiệu suất và tốc độ nhanh. 

#include <iostream>

int main()
{
    std::cout << "Hello, world!\n";
    return 0;
}

Tham khảo thêm các vị trí tuyển lập trình C++ tại Topdev

C#

Được tạo ra khi Microsoft dựng nên .Net virtual machine. Và C# đã trở thành ngôn ngữ lập trình hàng đầu của Microsoft. 

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, world!");
    }
}

Tham khảo ngay các vị trí tuyển dụng C# mới nhất từ các công ty HOT

CAML (OCAML)

Một ngôn ngữ lập trình tập trung chức năng trong họ ngôn ngữ ML. Được dùng cho 1 số dự án nhỏ trên Facebook. Compiler cho ngôn ngữ Facebook’s Hack được viết bởi OCaml.

print_endline "Hello, world!";;

CLOJURE (CLOJURESCRIPT)

Một ngôn ngữ lập trình chức năng có dự định để thành 1 bước tiến mới trên Lisp. Nó được chạy trên virtual machine của Java hay compile xuống JavaScript. 

(println "Hello world!")

COBOL

1 thời rất nổi tiếng trong thời đại máy tính mainframe. Hiện giờ thì nó đã khá lu mờ và nhiều chương trình COBOL đang được chuyển thể sang các ngôn ngữ khác. 

       IDENTIFICATION DIVISION.
       PROGRAM-ID. hello-world.
       PROCEDURE DIVISION.
           DISPLAY "Hello, world!"
           .

COFFEESCRIPT

1 nỗ lực để làm JavaScript dễ dàng sử dụng hơn.

console.log "Hello, World!"

DART

1 ngôn ngữ cho các phần mềm xây dựng theo hướng khách hàng và có thể chạy trên điện thoại và trình duyệt. Google đang sử dụng Dart cho 1 số dự án quan trọng. 

main() {
  print('Hello World!');
}

DBASE (FOXPRO)

dBase là bộ sưu tập các công cụ: ngôn ngữ lập trình,  database, các form. Trong thời của riêng mình, dBase đã từng khá phổ biến hơn hiện tại nhiều. 1 clone khá nổi khác của nó là FoxPro. 

? "Hello World"

DELPHI (OBJECT PASCAL)

Delphi đã từng là 1 công cụ phát triển ứng dụng nhanh chóng (Rapid Application Development – RAD) bởi sử dụng ngôn ngữ Object Pascal. Trong những năm giữa đến cuối thập niên 90, nó khá được yêu thích bởi các lập trình viên cho việc viết các chương trình Windows. Dù không còn được sử dụng nhưng nó vẫn là 1 trong những ngôn ngữ được yêu thích.

procedure TForm1.ShowAMessage;
begin
  ShowMessage('Hello World!');
end;

EIFFEL

Ngôn ngữ đi đôi với phương pháp viết phần mềm có tên là Eiffel Method. Eiffel đã giới thiệu khái niệm về “Design by contract” (Design by contract trong Eiffel: một phương pháp làm nâng cao tính tin cậy phần mềm và cung cấp nền tảng cho việc đặc tả, làm tài liệu và kiểm nghiệm phần mềm), và đến giờ đã được sử dụng trong các ngôn ngữ khác. 

class
    HELLO_WORLD
create
    make
feature
    make
        do
            print ("Hello, world!%N")
        end
end

ERLANG

Được thiết kế để cung cấp thông tin xử lý thời gian-thực và tính khả dụng cao theo một cách có phân phối. Nó phổ biến trong các hệ điều hành điện thoại nhưng ít được biết đến cho tới khi nó được dùng cho CouchDB, dự án đã làm ‘chất xúc tác’ cho phong trào NoSQL.

 -module(hello).
 -export([hello_world/0]).

 hello_world() -> io:fwrite("hello, world\n").

ELIXIR 

Trong khi Erlang khá tuyệt vời tại cấp độ kỹ thuật, thì các lập trình viên lại cảm thấy khó khi làm việc cùng nó. Elixir sử dụng công nghệ của Erlang trong khi cung cấp trải nghiệm dễ dàng hơn cho các lập trình viên. 

IO.puts "Hello World!"

F#

1 ngôn ngữ lập trình chỉ tập trung vào các chức năng, chạy trên .NET framework. 

open System
Console.WriteLine("Hello World!")

FORTRAN

Được tạo ra vào những năm 1950 để chạy trên máy tính mainframe, nó khá phù hợp cho công việc khoa học và số. Fortran đã trở thành tiêu chuẩn trong thế giới khoa học nơi mà nó vẫn còn được sử dụng đến ngày nay. 

program helloworld
     print *, "Hello world!"
end program helloworld

GO

Go được tạo ra và sử dụng tại Google. Là 1 ngôn ngữ luyện tập mà chỉ tập trung vào năng suất của lập trình viên với 1 cộng đồng chỉ tập trung vào hiệu năng và độ trễ thấp (low latency).

package main

import "fmt"

func main() {
    fmt.Println("Hello, World")
}

GROOVY (RUBY)

1 ngôn ngữ dạng dynamic typing, được chạy trong runtime của Java. Hầu hết các code Java sẽ đều chạy như code Groovy nhưng code Groovy có thể gọn nhẹ hơn vì nó không yêu cầu mọi thứ như Java. 

println "Hello World"

HASKELL

Thuộc loại hạng nặng, ngôn ngữ lập trình chức năng thuần túy. 

module Main where

main :: IO ()
main = putStrLn "Hello, World!"

IBM RPG 

Được ra mắt lần đầu vào năm 1959, được tạo ra bởi IBM để chạy trên phần cứng của họ. Là 1 trong những ngôn ngữ ít ỏi được thiết kế cho các loại thẻ đục lỗ (punch card) mà vẫn còn dùng ngày nay. 

dcl-s wait char(1);

dsply ( 'Hello World!') ' ' wait;

*inlr = *on;

JAVA 

Điều làm cho Java đặc biệt là việc nó được thiết kế để các lập trình viên chỉ cần viết code 1 lần và cho phép nó chạy trên mọi hệ điều hành. Java là ngôn ngữ phổ biến nhất trên thế giới. Nó được dùng để dạy lập trình cho học sinh và trong các công ty lớn. Tất cả các ứng dụng Android đều được viết bằng Java. 

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Prints the string to the console.
    }
}

JAVASCRIPT (ECMASCRIPT) 

JavaScript là ngôn ngữ lập trình phổ biến nhất trên thế giới. Lý do chính là vì nó được yêu cầu để có thể chạy trên mọi trình duyệt web. JavaScript giúp cho web sống động và dễ tương tác hơn. Nó được tiêu chuẩn hóa dưới cái tên ECMAScript. 

console.log("Hello World!");

LISP

Được thiết kế 1 năm sau Fortran, Lisp là ngôn ngữ lập trình cấp cao lâu đời thứ 2 trên thế giới mà vẫn còn được sử dụng rộng rãi. Lisp có thể đặt yêu cầu đối với nhiều ngôn ngữ lập trình trước, và bây giờ có thể được coi là một họ ngôn ngữ cũng như là bản thân nó cũng là 1 ngôn ngữ. Được phổ biến trong giai đoạn những năm 70 cho việc nghiên cứu AI. Dù độ phổ biến của nó dường như đã phai dần vào những năm 90 nhưng giờ đây nó đã lấy lại được sự phổ biến nhờ vào vài phương ngữ mới. 

(print "Hello world")

LOGO 

Với mục đích sử dụng cho giáo dục, Logo có mối liên hệ chặt chẽ với việc dạy các khái niệm đồ họa. Phổ biến trong những năm 80, học sinh sẽ điều hướng 1 “chú rùa” trên màn hình để vẽ những đường kẻ. 1 số học sinh may mắn sẽ có 1 chú rùa máy thật sự để vẽ những đường nét này trên giấy thật. 

TO HELLO
        PRINT [Hello world]
        END

LUA

Điều làm cho Lua trở nên tuyệt vời là vì cách nó nhúng dễ dàng vào phần mềm.

print("Hello World!")

MACHINE CODE

Machine code là chỉ dẫn cấp độ thấp nhất bạn có thể gửi tới 1 CPU. Machine code thường khó đọc được bởi con người và con người chỉ có thể làm những việc nhỏ nhặt với nó. Nhưng tất cả phần mềm cuối cùng đều được chuyển thành Machine code trước khi nó được gửi đến CPU. 

b8    21 0a 00 00   #moving "!\n" into eax
a3    0c 10 00 06   #moving eax into first memory location
b8    6f 72 6c 64   #moving "orld" into eax
a3    08 10 00 06   #moving eax into next memory location
b8    6f 2c 20 57   #moving "o, W" into eax
a3    04 10 00 06   #moving eax into next memory location
b8    48 65 6c 6c   #moving "Hell" into eax
a3    00 10 00 06   #moving eax into next memory location
b9    00 10 00 06   #moving pointer to start of memory location into ecx
ba    10 00 00 00   #moving string size into edx
bb    01 00 00 00   #moving "stdout" number to ebx
b8    04 00 00 00   #moving "print out" syscall number to eax
cd    80            #calling the linux kernel to execute our print to stdout
b8    01 00 00 00   #moving "sys_exit" call number to eax
cd    80            #executing it via linux sys_call

MATHEMATICA (WOLFRAM LANGUAGE)

Một chương trình với ngôn ngữ lập trình chuyên dụng, phổ biến trong giới khoa học và toán học để thực hiện các phép tính phức tạp. 

CloudDeploy["Hello, World"]

MATLAB

Một sự kết hợp của 1 chương trình và 1 ngôn ngữ lập trình. Được sử dụng để phân tích dữ liệu và phát triển các thuật toán. Nó được sử dụng trong giáo dục để dạy đại số tuyến tính và phân tích số. Nó cũng phổ biến với các nhà khoa học làm việc về thao tác hình ảnh.

classdef hello
    methods
        function greet(this)
            disp('Hello, World')
        end
    end
end

ML

Một ngôn ngữ chức năng có nguồn gốc từ Lisp nhưng với một hệ thống hạng nặng.

print "Hello world!\n";

NODE.JS 

Không hẳn là 1 ngôn ngữ (ngôn ngữ được sử dụng là JavaScript) nhưng là 1 môi trường runtime để chạy JavaScript trên các máy chủ so với trình duyệt. Mục đích là để chứng minh rằng lập trình không thực sự đồng bộ tốt hơn cho các CPU ‘multi-core’ hiện đại. Bây giờ nó được sử dụng rất nhiều cho công cụ của các dự án lớn.

console.log("Hello World!");

Tham khảo thêm các vị trí tuyển dụng NodeJS lương cao cho bạn

OBJECTIVE-C

1 bản mở rộng của C và được thêm vào Smalltalk như là phần tin nhắn. Được dùng bởi Apple để viết macOS và iOS. 

main()
{
  puts("Hello World!");
  return 0;
}

PASCAL 

Ngôn ngữ phổ biến những năm 80 và 90 đặc biệt là dành cho việc dạy lập trình. Nó đã phát triển rất nhiều và cũng là ngôn ngữ được sử dụng trong bộ công cụ Delphi RAD.

program HelloWorld(output);
begin
  Write('Hello, world!');
end.

PERL 

Perl rất mạnh để xử lý văn bản. Một sự lựa chọn phổ biến để buils trang web trong những ngày đầu của các trang web động (dynamic webs). 

print "Hello, World!\n";

PHP 

PHP là ngôn ngữ phổ biến nhất để xây dựng phần backend của trang web. Nó còn là ngôn ngữ đã viết nên Facebook và WordPress. Sau đó, Facebook quyết định tạo ra phương ngữ PHP riêng của họ có tên là Hack. 

<?php echo "Hello, World";

POWERSHELL 

Được dùng để tương tác và quản lý hệ điều hành Windows ở mức dòng lệnh. 

Write-Host "Hello, World!"

PYTHON 

Với một cú pháp nhỏ gọn cần ít dòng code hơn các ngôn ngữ khác như Java hoặc C ++. Nó rất phổ biến và được sử dụng cho các trang web cũng như trong việc phát triển Trí tuệ Nhân tạo (AI). 

print("Hello World")

R

1 ngôn ngữ tuyệt vời cho công việc thống kê, và là 1 lựa chọn phổ biến trong thế giới khoa học. 

cat("Hello world\n")

RPG 

1 ngôn ngữ lập trình đã lâu đời mà vẫn còn được dùng bởi sự phát triển không ngừng của nó. Với khởi nguồn trong giai đoạn thẻ đục lỗ (punch card), hiện nó vẫn được tìm thấy trên hầu hết các phần cứng của IBM.

dcl-s wait char(1);

dsply ( 'Hello World!') ' ' wait;

*inlr = *on;

RUBY

Được thiết kế để thành 1 ngôn ngữ vui nhộn và năng suất để sử dụng, nhấn mạnh nhu cầu của con người hơn là nhu cầu máy tính. Web framework Rails được viết cho Ruby và có tác động rất lớn đến thiết kế các Web framework. Ruby vẫn còn là một ngôn ngữ phổ biến để tạo trang web. 

puts 'Hello World!'

RUST 

1 ngôn ngữ mới được dự định để thay thế các ngôn ngữ như C để thực hiện công việc ở cấp hệ thống. Các bộ phận của Firefox đang được thay thế dần bằng Rust. 

fn main() {
    println!("Hello, world!");
}

SCALA 

Được thiết kế để giải quyết một số chỉ trích về Java. Một ngôn ngữ tập trung vào chức năng chạy trên virtual machine của Java. 

 object HelloWorld extends App {
   println("Hello, World!")
 }

SCHEME 

Một trong hai phương ngữ chính của Lisp, cái còn lại là Common List. Scheme đã cố gắng tối giản trong phần thiết kế và cho phép các extension mạnh hơn cho ngôn ngữ.

(let ((hello0 (lambda() (display "Hello world") (newline))))
  (hello0))

SCRATCH 

Một ngôn ngữ lập trình trực quan được thiết kế để cho trẻ em học các kỹ năng bằng cách lập trình. Ngoài ra còn có Scratch Jr. dành cho trẻ từ 5 – 7 tuổi. Cả hai ngôn ngữ được sử dụng bởi hàng triệu người bên trong và ngoài trường học trên toàn thế giới. 

say Hello, World!

SELF

Một phương ngữ của Smalltalk, nó là ngôn ngữ đầu tiên sử dụng lập trình dựa trên nguyên mẫu, thứ mà JavaScript cũng đang sử dụng.

'Hello, World!' print.

SMALLTALK 

Một ngôn ngữ rất quan trọng có ảnh hưởng lớn đến nhiều ngôn ngữ lập trình. Nhiều thứ phổ biến trong ngành lập trình hiện nay đều được thực hiện lần đầu tiên trên Smalltalk.

Transcript show: 'Hello World!'.

SWIFT 

Một ngôn ngữ mới hơn được tạo ra bởi Apple. Nó đang được quảng bá để thay thế Objective-C trên các nền tảng của riêng mình. Swift được thiết kế để trở thành một ngôn ngữ dễ học và dễ sử dụng hơn mà không làm mất hiệu suất của Objective-C.

println("Hello, world!")

Bạn có thể xem thêm các thông tin tuyển dụng Objective C từ các công ty HOT.

TCL 

Được sử dụng kết hợp với tiện ích mở rộng Tk, Tcl / Tk phổ biến để tạo giao diện đồ họa cho người dùng.

puts "Hello World!"

TYPESCRIPT 

Được thiết kế bởi Microsoft, nó mang một phương ngữ JavaScript bổ sung các quy tắc nghiêm ngặt để trợ giúp cho các dự án lớn trong khi vẫn tương thích với JavaScript.

console.log("Hello World!");

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

Giải quyết câu hỏi phỏng vấn Javascript của Google như thế nào

lập trình viên javascript

Javascript – tôi là một kỹ sư phần mềm có hơn 4 năm kinh nghiệm. Với đam mê chia sẻ kiến ​​thức của mình, nhất là trong việc chia sẻ những mẹo và thủ thuật hay nhất khi tham gia một cuộc phỏng vấn nào đó hoặc cách nâng cao khả năng code. Hôm nay tôi sẽ chia sẻ với anh em một bài toán được Google sử dụng để phỏng vấn ứng viên Javascript.

  Những thứ kỳ quặc của Javascript?

Bài toán Javascript

Viết một class, EventEmitter có ba phương thức: on, emitremoveListener.

  • on ("eventName", callbackFn) – là hàm lấy eventNamecallbackFn, sẽ lưu lại callbackFn khi event eventName được emit (phát ra).
  • emit ("eventName", data) – là hàm lấy eventName và đối tượng data, nên hàm callbackFn được liên kết với event đó và truyền cho chúng đối tượng data.
  • removeListener ("eventName", callbackFn) – là hàm lấy eventNamecallbackFn, rồi xóa callbackFn đó khỏi event.

Ví dụ:

let superbowl = new EventEmitter()

const cheer = function (eventData) {
  console.log('RAAAAAHHHH!!!! Go ' + eventData.scoringTeam)
}

const jeer = function (eventData) {
  console.log('BOOOOOO ' + eventData.scoringTeam)
}

superbowl.on('touchdown', cheer)
superbowl.on('touchdown', jeer)

superbowl.emit('touchdown', { scoringTeam: 'Patriots' }) // Both cheer and jeer should have been called with data

superbowl.removeListener('touchdown', jeer)

superbowl.emit('touchdown', { scoringTeam: 'Seahawks' }); // Only cheer should have been called

Giải pháp:

Đây là một cơ hội tuyệt vời để sử dụng các class trong ES6. Trong trường hợp bạn chưa từng sử dụng chúng trước đây, hãy xem cú pháp của chúng dưới đây. Chúng ta sẽ bắt đầu với một cấu trúc cơ bản cho class EventEmitter và khởi tạo nó bằng một đối tượng event mà chúng ta sẽ sử dụng để theo dõi các event của mình.

class EventEmitter {
  constructor () {
    this.events = {}
  }
}

On

Nào ta bắt đầu thôi. Đầu tiên là on. Đây là đoạn code của nó:

on (eventName, callbackFn) {
  if (!this.events[eventName])  {
    this.events[eventName] = []
  }
  this.events[eventName].push(callbackFn)
}

Vì đây là các hàm first class objects trong Javascript, về cơ bản chúng có thể được lưu trữ trong một biến (variable), một đối tượng (object) hoặc một mảng (array), nên chúng ta chỉ có thể đẩy hàm gọi lại (callback) đến một mảng được lưu trữ tại khóa eventName trong event object của chúng ta.

Tham khảo tuyển dụng javascript lương cao trên TopDev

Emit

Bây giờ, tới lượt hàm emit.

emit (eventName, eventData) {
    if (!this.events[eventName]) return
    this.events[eventName].forEach(fn => fn(eventData))  
  }

Giải pháp này tận dụng lợi thế của cái được gọi là closure trong Javascript. Nếu bạn đang viết code bằng Javascript trong cuộc phỏng vấn của mình, việc hiểu về closure có thể rất quan trọng. Closure về cơ bản là khi một hàm có tham chiếu đến các state xung quanh hoặc lexical environment (nơi chúng ta viết code của mình đặt biến, hằng, hàm) của nó. Bạn cũng có thể coi đây là một closure cho phép bạn truy cập vào một hàm cha (outer function) từ bên trong một hàm con (inner function). Sử dụng các biến toàn cục (global variable) là một ví dụ đơn giản tuyệt vời về closure.

Ở đây, có một ví dụ tuyệt vời khác về việc sử dụng closure để theo dõi số lần hàm được gọi.

function tracker (fn) {
  let numTimesCalled = 0
  return function () {
    numTimesCalled++
    console.log('I was called', numTimesCalled)
    return fn()
  }
}

function hello () {
  console.log('hello')
}

const trackedHello = tracker(hello)

Hàm con được trả về trong tracker nằm trong biến numTimesCalled và duy trì một tham chiếu đến nó trong vòng đời của hàm trackedHello. Nhìn ngầu ha.

RemoveListener

Phương thức removeListener có lẽ là dễ nhất trong ba cái này. Đây là hướng giải quyết.

removeListener (eventName, callbackFn) {
  const idx = this.events[eventName].indexOf(callbackFn)
  if (idx === -1) return
  this.events[eventName].splice(idx, 1)
}

Vậy là chúng ta đã xong! Qua đây chúng ta có thể thấy, nếu nắm rõ được các phương thức bổ sung sẽ là cách vượt qua các cuộc phỏng vấn tốt nhất. Chúc các bạn may mắn.

Đừng bỏ lỡ các bài viết hay về Javascript nhé các lập trình viên:

TopDev via Dev.to

Tuyển dụng IT lương cao, xem ngay trên TopDev

Những điều cần biết về nghề Data Analytics và Business Analytics

Những điều cần biết về nghề Data Analytics và Business Analytics

Theo báo cáo Vietnam IT Nation 2020 từ TopDev, mức lương dành cho các vị trí Business Analyst, Data Analyst dao động từ 981 – 2,209 USD đang trở thành các vị trí được săn đón và đầu tư nhiều nhất hiện nay tại các doanh nghiệp số, và lĩnh vực Fintech cũng không ngoại lệ. Thậm chí, Fintech còn đòi hỏi sự chính xác, tính trực quan từ dữ liệu hơn cả những ngành nghề khác.

Với nhiệm vụ là cầu nối và “dịch thuật” giữa các đơn vị nghiệp vụ (Business) và kỹ thuật (IT) thì các vị trí như – hay – phải có những điều kiện “cần và đủ” để xây dựng chiến lược dữ liệu, từ việc phát triển data lake, data warehouse cho đến các công cụ data analytics.

Những điều cần biết về nghề Data Analytics và Business Analytics

Thế nhưng, bạn đã biết những công việc cụ thể mà một DA hay một BA làm là gì?

Hiện tại công việc chính của một DA bao gồm:

  • Làm việc với các đơn vị nghiệp vụ để xác định các bài toán/vấn đề cần được triển khai, và xác định mức độ ưu tiên của từng bài toán. Từ đó phân tích, mô tả các đặc điểm của thuộc tính, các đối tượng.
  • Visualization kết quả phân tích theo “ngôn ngữ của end users”
  • Làm cầu nối giữa đơn vị nghiệp vụ và đơn vị kĩ thuật để “translate” ngôn ngữ nghiệp vụ (business) sang ngôn ngữ kĩ thuật (IT)
  • Tìm hiểu bài toán ( Business Understanding): Phối hợp với team BA để lên các giải pháp cho bài toán
  • Tìm hiểu dữ liệu (Data Understanding): Tìm hiểu ý nghĩa các trường dữ liệu hiện có để đưa làm đầu vào của bài toán.
  • Làm sạch dữ liệu (Data Cleanning): Loại bỏ các phần tử ngoại lại, không cần thiết….
  • Tích hợp dữ liệu (Data integration) : Dữ liệu từ nhiều nguồn do đó có thể bị trùng lặp. Tìm hiểu và loại bỏ trung lặp
  • Biến đổi dữ liệu (Data Transformation): Tổng hợp và biến đổi dữ liệu để đưa ra các thuộc tính mới
  • Phân tích mô tả và trực quan hóa kết quả

Việc làm data analytics hấp dẫn cho bạn

Những điều cần biết về nghề Data Analytics và Business Analytics

Đối với BA (Business Analytics):

  • Requirement Elicitation (Khơi gợi yêu cầu)
  • Requirement and Process Analysis (Yêu cầu và phân tích quy trình)
  • Documentation of requirements (Tài liệu hóa yêu cầu)
  • As-is and To-be analysis (Phân tích hiện tại và tương tự)
  • Cost-Benefit Analysis (Phân tích lợi nhuận)
  • Requirement Verification and Validation (Xác mình và xác nhận yêu cầu)
  • Change Management (Quản lý thay đổi yêu cầu)

Tuyển business analyst lương cao không yêu cầu kinh nghiệm

Từ những dữ liệu thô, các chuyên viên phân tích dữ liệu chuyển đổi chúng trở thành những số liệu trực quan theo “ngôn ngữ của end-users”

Là một nhà phân tích nghiệp vụ chuyên nghiệp, hay một chuyên gia phân tích dữ liệu thế hệ 4.0, những hiểu biết về CNTT là kĩ năng tiên quyết giúp bạn thực hiện tốt vai trò “cầu nối” trong doanh nghiệp của mình. Bạn có sẵn sàng cùng tìm hiểu những công cụ “quyền năng” trong lĩnh vực phân tích nghiệp vụ và dữ liệu tại ngân hàng số?

Những điều cần biết về nghề Data Analytics và Business Analytics

Buổi Techtalk “ ” sẽ đưa ra những định hướng cho các bạn mong muốn phát triển sự nghiệp tại các tổ chức tài chính đang chuyển đổi số! Các chuyên gia từ sẽ hé lộ những phương pháp phân tích nâng cao, lộ trình phát triển sự nghiệp với DA & BA, đăng ký ngay để lắng nghe những topics bổ ích đến từ các chuyên gia bạn nhé https://meetup.vn/e/i8U

Các Topics dự kiến:

  • Advanced Analytics in Banking: Usecases and Technologies
  • Transforming Risk Management using Advanced Analytics

==

** Về đơn vị tổ chức:

Được thành lập từ năm 1993, Ngân hàng thương mại cổ phần Kỹ Thương Việt Nam – hiện là một trong những ngân hàng thương mại cổ phần lớn nhất và dẫn đầu xu hướng công nghệ ở tại Việt Nam. Không chỉ cung cấp các sản phẩm và dịch vụ tài chính đa dạng cho hơn sáu triệu khách hàng cá nhân và doanh nghiệp ở Việt Nam trên với mạng lưới 315 chi nhánh trên toàn quốc cũng như trên kênh ngân hàng internet và ngân hàng số, còn được biết đến là Ngân hàng rất mạnh tay đầu tư cho Công nghệ với việc chi hơn 300 triệu USD để thực hiện quá trình chuyển đổi Công nghệ của mình trong giai đoạn 2017 – 2022.

Trong những năm trở lại đây, liên tiếp giữ vững vị trí “Top 2 Ngân hàng có môi trường làm việc tốt nhất Việt Nam”, khẳng định cam kết luôn tạo điều kiện để mỗi Cán bộ nhân viên có thể “Vượt trội hơn mỗi ngày”.

==

THÔNG TIN CHUNG
⏰ Thời gian: 9:00 – 12:00 ngày 22/02/2020
Địa điểm: BKHUP – UP CoWorking Space: Tầng 3 toà nhà A1-7, 17 Tạ Quang Bửu, Hai Bà Trưng, Hà Nội.
Đăng ký vé: https://meetup.vn/e/i8U (Sự kiện không thu phí)

LIÊN HỆ:
✔ Event team: event@applancer.net | 028 6681 3236
✔ Ms. Thoa | thoa.nguyen@applancer.net | 038 5098 969

Lộ trình cho mọi lập trình viên web trong năm 2023

Lộ trình cho mọi nhà phát triển web trong năm 2020

Bên dưới đây, bạn sẽ thấy 1 set biểu đồ chứng minh các hướng đi mà bạn có thể chọn. Và những công nghệ mà bạn sẽ muốn sử dụng để trở thành 1 front end, backend hay 1 chuyên gia devops để trở thành 1 lập trình viên Web. Mình đã làm những biểu đồ này cho 1 giáo sư cũ của mình. Người đã muốn chia sẻ cái gì đó với các sinh viên đại học của ông để cho họ viễn cảnh, ngoài ra tôi còn chia sẻ chúng ở đây để giúp đỡ cộng đồng.

Mục đích của những Roadmap này

Mục đích của những Roadmap này là để cho bạn 1 ý tưởng về cảnh quan. Và để hướng dẫn nếu bạn đang bối rối về việc phải học gì cho tiếp theo. Mình không khuyến khích bạn chọn những gì đã và đang phổ biến. Bạn nên tìm hiểu thêm về việc tại sao 1 công cụ sẽ phù hợp cho vài trường hợp hơn những cái còn lại. Và ghi nhớ rằng ‘phổ biến’ không có nghĩa là nó luôn tốt nhất cho công việc.

Ghi chú cho Những người mới bắt đầu

Những roadmap này bao gồm mọi thứ để học hỏi cho các hướng đi được ghi bên dưới. Khoan hãy bị choáng ngộp, lúc bắt đầu bạn không cần phải học hết tất cả nếu bạn chỉ mới khởi động. Chúng mình đang làm về các phiên bản người mới bắt đầu cho roadmap này và sẽ xuất bản sớm, chỉ ngay sau khi chúng mình đã xuất bản xong roadmap cho Back-end và DevOps 2022.

Nếu bạn nghĩ có thể cải tiến những điều này, hãy cứ đề xuất nhé. 

Giới thiệu 

Nhà phát triển web

Front-end Roadmap

 Nhà phát triển web

   Top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev
  Cách trở thành 1 Kỹ sư Phần mềm thực tập chỉ với 4 tháng tự học

Back-end Roadmap 

Nhà phát triển web

DevOps Roadmap 

Nhà phát triển web

Nếu bạn nghĩ bất kì roadmap nào có thể phát triển. Cứ thoải mái tranh luận các vấn đề về nó. 

TopDev via GitHub và roadmap.sh

Đừng bỏ lỡ các bài viết hay về: 

  7 Hướng đi đáng giá cho mọi Lập trình viên web trong năm 2024
  25 thuật ngữ bạn nhất định phải biết khi lập trình web

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

 

Báo cáo thị trường IT 2020: Việt Nam sẽ trở thành quốc gia IT với nhiều chỉ số trong top thế giới

Báo cáo thị trường IT 2020

Trong hội thảo công nghệ toàn quốc Vietnam Web Summit 2019 gần đây, Ông Nguyễn Hữu Bình, CEO TopDev từng chia sẻ: “Hiện nay, đang có một xu hướng đầu tư mạnh mẽ về CNTT tại Việt Nam, những đối tác TopDev đã và đang làm việc là những công ty công nghệ hàng đầu đến từ Ấn Độ, Hàn Quốc, Nhật Bản, Mỹ hiện đang làm việc với chúng tôi để triển khai những dự án CNTT rất lớn, chúng tôi nhận thấy rõ được nhu cầu của họ trong việc thu hút nguồn lực trẻ tại Việt Nam. Có lẽ đây là lúc Việt Nam nên nắm bắt cơ hội để trở thành quốc gia mũi nhọn trong khu vực để đi đầu về lĩnh vực IT”

Nhiều chỉ số top thế giới nhưng vẫn còn nhiều thách thức 

Việt Nam đã tăng thêm ba bậc trên Bảng xếp hạng Chỉ số đổi mới toàn cầu 2019 (GII) để xếp thứ 42 trên tổng số 129 các nền kinh tế toàn cầu. Bảng xếp hạng mới nhất được Tổ chức Sở hữu trí tuệ thế giới (WIPO) công bố tại New Delhi, Ấn Độ vào thứ Tư. Trong 9 tháng vừa qua của năm 2019, Việt Nam đã thu hút 26,16B $ vốn FDI – theo báo cáo của US News & World về các chuyển đổi mới tại Việt Nam, đã đưa Việt Nam lên vị trí thứ 8 trong số 20 quốc gia tốt nhất để đầu tư theo báo cáo của US News & World Report. Việt Nam cũng đứng thứ 48 trong số 157 quốc gia về chỉ số vốn nhân lực (HCI), đứng thứ hai chỉ sau Singapore trong khu vực ASEAN.

Theo báo cáo tổng kết năm 2019 và định hướng năm 2020 của Bộ Thông Tin & Truyền Thông, tổng doanh thu lĩnh vực công nghiệp ICT 2019 ước đạt 112,350 tỷ USD, trong đó xuất khẩu ICT chiếm 81,5%. Cũng theo đó, Bộ TT&TT cũng công bố rằng, doanh thu công nghiệp phần mềm đạt 5 tỷ USD, tăng 500 triệu USD so với năm 2018. Tổng số tiền nộp ngân sách nhà nước từ công nghiệp ICT năm 2019 là 54.000 tỷ đồng, tăng 2000 tỷ so với năm 2018. Tuy nhiên, với ngành công nghiệp nội dung số, hiện doanh thu của nó chỉ đang chiếm một phần rất nhỏ trong doanh thu ngành CNTT (chiếm 0,76% doanh thu ngành CNTT).

Trong bài phát biểu của mình, Bộ trưởng TT&TT Nguyễn Mạnh Hùng cho biết: Năm 2020 ngành TT&TT xác định là năm chuyển đổi số quốc gia, là năm khởi động mạnh mẽ để tiến tới một Việt Nam số. Đây sẽ là một sự chuyển đổi sâu sắc và toàn diện, mà đầu tiên là sự chuyển đổi về phương thức, quy trình vận hành, về cách làm việc trong mọi lĩnh vực. Đây cũng được xem là một dấu hiệu đáng mừng, giúp Việt Nam tiến gần hơn đến việc trở thành một quốc gia IT có tầm vóc trong khu vực.

Hiện tại thị trường nhân lực tại Việt Nam rất cần các nhân lực chủ lực chất lượng cao, nhưng lượng cung luôn ít hơn cầu. Chiếc chìa khóa duy nhất để giải quyết vấn đề nan giải này chính là nằm ở đào tạo. Hiện tại, các trung tâm đào tạo tại Việt Nam vẫn chưa đáp ứng đủ nhu cầu của doanh nghiệp về nhân sự. Chỉ có 30% trong số 50,000 sinh viên CNTT đáp ứng nhu cầu của doanh nghiệp. 

Việt Nam điểm đến của những gã khổng lồ công nghệ

Theo một báo cáo mới nhất về Nền kinh tế số Đông Nam Á năm 2019, dự kiến nền kinh tế số của khu vực sẽ vượt mức 100 tỷ USD trong năm nay và sẽ sớm tăng gấp ba vào năm 2025. Đông Nam Á có khả năng trở thành một trong những thị trường phát triển nhanh nhất về thương mại điện tử nhờ dân số am hiểu công nghệ, đặc biệt là sử dụng smartphone ngày càng gia tăng. Theo khảo sát của TopDev, trong năm 2020, thị trường tại Việt Nam có sự phản hồi tốt và phát triển mạnh trong 12 lĩnh vực chính như: E-commerce, Fintech, Gọi xe/thức ăn, Edtech, Healthcare, v.v….

Báo cáo thị trường IT 2020

Trong thời gian sắp tới, Việt Nam sẽ là điểm đến của nhiều công ty tập đoàn công nghệ lớn trên thế giới. Ông Roxy Sexton – Phó chủ tịch phụ trách chuỗi cung ứng của Apple, cho biết Apple sẵn sàng gặp gỡ, tìm hiểu cơ hội hợp tác với các doanh nghiệp ICT Việt Nam có mong muốn tham gia chuỗi cung ứng của Apple. Ngoài Samsung là một trong những tập đoàn vốn nước ngoài giúp đẩy mạnh nền kinh tế của Việt Nam, sự tham gia của Apple trong thời gian tới có thể sẽ còn tiếp thêm sức mạnh cho làn sóng đầu tư nước ngoài tại Việt Nam trong năm 2020. Riêng Samsung trong năm 2020, họ cho biết sẽ đầu tư thêm 300 triệu đô tiền đầu tư vào R&D tại khu vực Hà Nội, cần thêm 4,000 nhân lực cho lĩnh vực công nghệ trong thời gian tới. 

Hindustan Computers Limited (HCL), một trong 3 công ty IT lớn nhất Ấn Độ (Top 5 công ty outsource trên thế giới) đã phát triển trung tâm của mình tại TP.HCM, cần thêm 10,000 kỹ sư trong 5 năm nữa. Công ty Axon Enterprise, một trong những công ty phát triển công nghệ cho việc hành pháp hàng đầu tại Mỹ cũng đã tập trung cơ sở phát triển công nghệ của mình tại TP.HCM Việt Nam. 

Mức lương lên đến 130 triệu nhưng chưa chắc tuyển được người, IT là một trong 4 ngành có tỷ lệ nhảy việc cao nhất

Vị trí Tech Management (nắm giữ vai trò CTO hay CIO của một công ty) có mức lương lên đến $5,700 USD (tương đương 132,291,000 đồng), và $1,329 (tương đương 30,8 triệu đồng) là mức lương trung bình doanh nghiệp sẵn sàng trả cho người có kinh nghiệm và tỉ lệ tăng lương sau 1 năm làm việc đạt 12 – 18%. Với mức lương khoảng 38,165,000 đồng/tháng, TensorFlows hiện là công nghệ được trả lương cao nhất, theo sau là Kubernetes và Go (33,577,000/ tháng với 28,270,000 đồng/tháng).

Báo cáo thị trường IT 2020

Machine Learning/ AI Engineer vẫn giữ vị trí đầu bảng trong các vị trí triển vọng nhất với mức lương khá cao, liên tiếp là 51 triệu đồng/tháng và 44 triệu đồng/tháng. Với sự khan hiếm nhân lực cũng như những yêu cầu gắt gao, mức lương của cấp quản lý trên 5 năm quản lý không thấp hơn 31 triệu đồng/tháng nhưng các nhà tuyển dụng cũng sẽ “đốt đuốc” tìm người với những yêu cầu không chỉ về lương mà còn các yêu cầu khác trong công việc để đảm bảo cân bằng cuộc sống.

 

Tìm kiếm nhân tài là một chuyện, giữ chân nhân tài là bài toán khó giải khác dành cho doanh nghiệp khi IT là 1 trong 4 ngành có tỷ lệ nghỉ việc cao nhất, với 20 tháng là thời gian trung bình cho một lập trình viên “nhảy” việc, và tỷ lệ nghỉ việc đạt mốc 24% trong năm 2020. Lý giải cho những con số này, báo cáo IT của TopDev phân tích câu trả lời không nằm ở mức lương, bởi khi được trao công việc mới, mức lương của lập trình viên chỉ tăng 15%, mà giá trị họ nhận lại nằm ở những điều kiện khác nhau, đứng đầu là nhu cầu được đào tạo bài bản (43.2%) và lộ trình phát triển sự nghiệp rõ ràng (38.4%), ….

Các vị trí tuyển nhân viên it hấp dẫn cho bạn tại đây

Đâu là giải pháp cho việc thiếu hụt nhân lực trong 5 năm vừa qua?

Theo báo cáo IT của TopDev, năm 2020 Việt Nam sẽ cần hơn 400,000 nhân lực ngành IT, và con số này sẽ tăng lên đến 500,000 vào năm 2021. Nguyên nhân dẫn đến sự thiếu hụt này nằm ở nhiều phương diện, mà chủ yếu đến từ chương trình đào tạo thiếu định hướng khi chưa đúng trọng tâm mà doanh nghiệp tìm kiếm, hay lớp sinh viên ra trường đang thiếu những kỹ năng cần thiết cùng trình độ sử dụng tiếng Anh chưa thành thạo.

Trong thời gian tới có lẽ các trung tâm cơ sở đào tạo CNTT cần chú trọng nhiều hơn về chất lượng hơn là số lượng. Hiện tại, chính phủ cũng đã có kế hoạch đầu tư thêm cho 20 trường lớp hiện đang giảng dạy CNTT tại Việt Nam. Từ đó, chính phủ sẽ cùng phối hợp với doanh nghiệp để mở ra thêm các khóa đào tạo ngắn hạn để các bạn trẻ có thể tiệm cận với những nhu cầu thực tế và bắt kịp các công nghệ mới. Thực tế cho thấy, nhiều công ty hiện nay đã có chương trình tập sự là cơ hội tốt nhất cho sinh viên rèn luyện. Việc đi làm thêm cũng giúp cho họ rất nhiều trong việc tích lũy kinh nghiệm, quy trình và các phương thức giải quyết vấn đề trong công việc tương lai. Bên cạnh đó, ngoại ngữ cũng như những kỹ năng tương tác xã hội cũng cần được chú trọng đào tạo hơn là chỉ tập trung vào kỹ năng và kiến thức. 

Mặt khác, ở thời đại tuyển dụng đa thế hệ, các doanh nghiệp cũng gặp thách thức trong việc giữ người cũng như tuyển dụng nhân sự mới, một phần cũng do văn hóa làm việc của thế hệ mới đã thay đổi. Doanh nghiệp nên chú trọng nhiều hơn về việc tạo sự cân bằng trong công việc và cuộc sống, cũng như cải thiện môi trường công ty năng động hơn, giúp các ứng viên có thể dễ dàng hòa nhập, và cùng đóng góp ý tưởng, phát triển sản phẩm của công ty. Hiện tại cũng có rất nhiều doanh nghiệp lớn đang áp dụng mô hình khởi nghiệp ngay trong chính công ty của mình nhằm giúp nhân viên có động lực cống hiến hơn trong công việc. 

Tuy nhân lực IT Việt Nam ngày càng được đánh giá cao nhờ khả năng tự học, tìm tòi và hòa nhập với doanh nghiệp nước ngoài, để mà nói công nghệ trong nước có thể sánh ngang với quốc gia trong khu vực thì chưa đủ khi bài toán nhân lực chưa được khai thác đủ tầm và lực để đảm bảo về số lượng chất lượng. Ông Nguyễn Hữu Bình, chia sẻ thêm:

“Xét cho cùng, nếu muốn vươn lên để đạt được sự tiến bộ như các quốc gia tiên tiến khác, Việt Nam cần phải bức tốc về mặt năng suất lao động, Cuộc đối đầu giữa các mô hình phát triển trên thế giới cuối cùng cũng nằm ở chỗ mô hình nào tạo ra năng suất lao động cao hơn. Đó cũng là lý do chúng ta thấy được các cường quốc hiện nay chiến đấu với nhau chính yếu không phải về thương mại, mà là về công nghệ. Vì vậy công nghệ chính là con đường giúp Việt Nam từ bỏ những lối mòn để bắt lấy con sóng khơi xa. Ước mơ Việt Nam trở thành quốc gia IT sẽ thành hiện thực vào một ngày không xa.”

DOWNLOAD

7 Hướng đi đáng giá cho mọi Lập trình viên web trong năm 2024

7 hướng đi đáng giá cho mọi lập trình viên web trong năm 2020

Bắt đầu 1 năm mới thường là lúc nhìn lại bản thân và đặt mục tiêu mới, và nếu bạn đang build các ứng dụng web trong hay ngoài công việc, thì mình có 7 đề mục tiêu mà bạn có thể xem xét. 

Những mục tiêu dễ đạt thành tựu này sẽ giúp bạn vào guồng tiếp cận tới việc phát triển web, đặt những xem xét cốt lõi về khả năng tiếp cận của nó. 

7 “đầu mục” phấn đấu cho bạn sẽ nêu trong bài này: 

  1. Nâng cấp lint của bạn bằng một plugin a11y
  2. Chọn một extension (tiện ích mở rộng) để thường xuyên kiểm tra code của bạn trên trình duyệt
  3. “Làm bạn” với trình đọc màn hình của bạn và học thêm ít nhất 3 kỹ năng 
  4. Tạm ngưng dùng chuột/ trackpad một thời gian
  5. Kiểm tra các heading của bạn 
  6. Làm quen với các thách thức do Single Page Applications đưa ra 
  7. Thay đổi định nghĩa của bạn về việc “đã hoàn thành”

1. Tích hợp A11y-Linting vào dự án của bạn

Nếu bạn đang làm việc về front-end, có thể bạn đã sử dụng ESLint trong dự án của mình rồi. Đây là công cụ tuyệt vời để đảm bảo các error thông thường được phát hiện sớm nhất có thể, và trước khi chúng được đưa ra vận hành. 

Các plugin bổ sung có thể tìm quét lỗi (lint) cho các vấn đề truy cập, và 1 trong những công cụ tốt là elsint-plugin-jsx-a11y. Điều này sẽ kiểm tra các vấn đề truy cập mà có thể được phát hiện bởi 1 linter, ví dụ: 

  •  Đảm bảo form input có những nhãn (label) và ID thích hợp
  •  Thuộc tính ‘alt’ thích hợp cho các hình ảnh, bao gồm kiểm tra các vấn đề chất lượng chung trong văn bản ‘alt’ (như sử dụng dư thừa các từ như “Hình ảnh của …”) 
  •  Việc sử dụng tabIndex không phù hợp 

Dùng plugin ‘jsx-ally’ giúp bạn giới thiệu 1 trang net an toàn, nắm bắt các vấn đề code trước cả khi nhìn vào trình duyệt. Cùng với các nguyên tắc ESLint khác, bạn còn có thể cài đặt thất bại CI pipeline của mình nếu các vấn đề không chỉ ra được. Và nó giúp mình tiết kiệm thời gian tìm kiếm những loại error trong phần review code.

2. Chọn extension (tiện ích mở rộng) để kiểm tra Code của bạn trong trình duyệt

Rất nhiều vấn đề truy cập có thể được tìm ra bởi các tiện ích mở rộng trình duyệt, và nó không chỉ highlight vấn đề rõ ràng trên trang, chúng còn đề xuất hướng giải quyết cho bạn. Những công cụ này khá tuyệt cho các vấn đề truy cập như:

  • Đảm bảo đủ độ tương phản màu
  • Đảm bảo tất cả hình ảnh đều có thuộc tính ‘alt’
  • Xác minh các heading và các semantic HTML đã được sử dụng phù hợp

Các công cụ phổ biến nhất là AxeWAVE. Cả 2 đều trên cả tuyệt vời – hãy thử cả 2 và xem bạn hợp cái nào hơn
Sử dụng chúng trước khi đưa bất kỳ code nào cho review. Và từ đó các thao tác kiểm tra truy cập sẽ trở thành một phần không thể thiếu trong quy trình làm việc của bạn.

3. Làm bạn với Screen Reader của mình

Hãy thoải mái với cách screen reader của bạn làm việc. Và cách người dùng thường lướt web với nó là điều cần thiết để xem xét khả năng truy cập đúng cách trong phương pháp lập trình chung của bạn.

Screen Reader nào thì phù hợp? 

Dựa trên Khảo sát Người dùng Screen Reader của WebAIM, các option miễn phí này sẽ hoạt động khá ổn: 

  • Người dùng Mac có thể đơn giản dùng built-in VoiceOver (chuyển Bật và Tắt với ‘cmd’ + ‘F5’)
  • Người dùng Windows có thể tải về và dùng NVDA

Các điều căn bản cần học 

Như là điểm bắt đầu cơ bản nhất, hãy học những thứ sau đây với screen reader bạn chọn: 

  • Đọc và lướt qua một trang nội dung – điều này sẽ giúp bạn kiểm tra các phần của trang và cách chúng được thông báo đến người dùng screen reader
  • Quét qua các heading – đây là điều cần thiết do phần lớn người dùng screen reader sẽ “quét” nội dung của bạn theo cách này trước khi vào một phần nhất định
  • Tab vào các mục tương tác – đây là phần điều hướng bàn phím tiêu chuẩn, nhưng hãy thoải mái thực hiện việc này với trình đọc màn hình được bật và tương tác với các mục đó khi bạn làm như vậy (ví dụ: nhấp vào nút và liên kết)

Hãy thoải mái hơn khi dùng screen reader của bạn. Và kiểm tra code thường xuyên với nó giúp bạn tự nhiên xem xét “Cách nó sẽ hoạt động với screen reader?” khi chọn 1 phần của công việc. 

4. Tạm ngưng dùng chuột/ trackpad một thời gian 

Tương tự như Bước 3, hãy thoải mái với cách người dùng điều hướng web với bàn phím. Vài điều quan trọng cần biết: 

  • Bạn cần đảm bảo sao cho usersẽ có thể di chuyển qua tất cả các mục tương tác trên trang (nút, liên kết, form input, v..v..) bằng việc chỉ sử dụng nút ‘tab’
  • Mục hiện đang được hiển thị chính phải có chỉ báo trực quan rõ ràng (ví dụ: viền màu xanh)
  • Các mục không tương tác sẽ không bao giờ nhận được thông báo định hướng bằng phím tab
  • Thứ tự hiển thị khi tab trên trang nên hợp lý. Thông thường, điều này có nghĩa là nó tuân theo thứ tự bạn mong đợi như một người dùng được quan sát (ví dụ: từ trên xuống dưới) và không nhảy ngẫu nhiên

Kiểm tra đều đặn công việc của bạn bằng cách chỉ dùng điều hướng bàn phím sẽ giúp đánh dấu các vấn đề truy cập như là: 

  • Các phần tử HTML được khai báo theo thứ tự hợp lý (khiến thứ tự tab không nhảy theo tiến trình bạn muốn)
  • Những mục tương tác không nhận được focus (ví dụ: một thành phần tùy chỉnh như Thẻ mà người dùng sẽ có thể nhấp vào)
  • Đa trạng thái focus mặc định bị xóa vì lý do thương hiệu / thiết kế, nhưng không bao giờ bị thay thế’

5. Kiểm tra các cấp heading 

Như đã nêu trong Bước 3, các người dùng screen reader sử dụng các cấp heading để có thể quét và đọc lướt nội dung của bạn. Theo cách rất giống với cách người dùng quan sát. Việc kiểm tra nhanh các cấp heading của bạn có thể tạo ra sự khác biệt lớn và giúp hiển thị nội dung hữu ích cho nhiều người dùng hơn. 

Một số quy tắc nhỏ:

  • Mỗi trang nên có một yếu tố ‘h1’ mô tả rõ ràng mục đích của trang
  • Các cấp heading sau đó chỉ nên tăng từng cái một, ví dụ: h2 → h3, đừng nhảy vọt

6. Thấy được những vấn đề có thể phát sinh trên Single Page Applications (Ứng dụng trang đơn)

Bản thân nó đã là 1 chủ đề lớn. Nhưng nếu bạn làm việc với framework tối ưu hoá render về client-side như React hoặc Vue. Việc làm quen với những cạm bẫy tiềm tàng này sẽ mang lại lợi ích rất lớn cho khả năng truy cập các ứng dụng web của bạn.

Những cạm bẫy tiềm năng và nguồn tài nguyên cho nó

Thay đổi route:

  • Khi route thay đổi trong ứng dụng do khách hàng render. Thường người dùng screen reader không biết nội dung trang đã thay đổi và có thể đã “mất”
  • Nếu người dùng nhấp vào một liên kết dẫn đến thay đổi route do khách hàng render. Thì thường phần focus sẽ được để lại trên liên kết dù không còn hiển thị nữa. Vốn nó có thể gây khó hiểu!

Tiêu đề trang:

  • Trong Single Page Application, tựa đề trang không bao giờ thay đổi trừ khi nó được quản lý rõ ràng. Điều này không giúp ích cho lắm với người dùng screen reader. Người có thể mở vài tab hay cửa sổ và muốn biết họ đang ở trang nào.

7. Thay đổi định nghĩa về việc “Hoàn thành” 

Bước cuối này có lẽ là bước quan trọng nhất – trước khi bạn review code trước khi ra lò:  

  • Đăng ký bằng ESLint của bạn, được định cấu hình để kiểm tra a11y và sửa bất kỳ lỗi nào
  • Chạy project thông qua một trong những công cụ xác minh trong trình duyệt được đề cập ở trên. Và xem có bất kỳ vấn đề nào cần khắc phục không?
  • Bật trình screen reader của bạn và cung cấp cho nó một cách nhanh chóng. Bao gồm quét theo cấp heading 
  • Tab thông qua nội dung bạn vừa tạo – liệu nó có hoạt động như mong đợi?
  • Nếu công việc của bạn là để kích hoạt thay đổi route trong Single Page Application. Hãy kiểm tra kỹ xem các thay đổi route đã được xử lý với khả năng truy cập chưa

Nếu bạn hoàn thành các bước này thường xuyên nhất có thể trong công việc của mình. Bạn sẽ đi đúng hướng để tạo các ứng dụng web có thể truy cập vào năm 2024!

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

Bài này được đăng gốc qua ‘Ladies of Code Advent Calendar’

Tìm việc IT lương cao, đãi ngộ tốt trên TopDev ngay!

Giải thích Machine Learning cho con nít 5 tuổi

giai-thich-machine-learning-cho-con-nit-5-tuoi
Bài viết đã được sự cho phép của tác giả Đức Mạnh
-Mình vừa thi cuối kì môn Machine Learning đợt giáng sinh vừa rồi. Nghe truyền thông đồn thổi đã lâu, nhưng phải đến khi thực sự bắt tay vào học, mình mới hiểu được bản chất của Machine Learning, thực ra là toán và thuật toán. Đúng, nó vẫn rất thần kỳ, nhưng không phải theo cái cách mà các bài báo lá cải nói về nó cùng những buzzwords như trí tuệ nhân tạo, kỷ nguyên 4.0, máy móc thay thế con người… Vì vậy, mình muốn chia sẻ và giải thích về cách Machine Learning hoạt động cho những ai quan tâm đến nó, theo một cách mà không cần phải biết nhiều kiến thức chuyên sâu về toán hay lập trình, bạn vẫn có thể hiểu được. Tình cờ mình tìm được bài viết này trên Internet, gần như đáp ứng được yêu cầu của mình, đó là giải thích rõ ràng, đi sâu vào bản chất vấn đề, mà sử dụng ngôn ngữ bình dân, ít toánkhông code. Vậy nên, được sự cho phép của tác giả bài viết, mình đã quyết định dịch nó.
– Mình chỉ dịch ý, diễn đạt theo ý hiểu của mình, để đem đến một văn phong gần gũi với người đọc Việt hơn. Đôi chỗ mình sẽ chèn thêm các chú giải cần thiết để bạn không phải tra cứu thêm mà vẫn hiểu hết bài viết (mình hi vọng vậy). Các chú giải sẽ được đặt trong ngoặc, in nghiêng ngay cạnh thuật ngữ, hoặc mình để trong một textbox riêng giống như disclaimer này nếu thấy cần thiết.
– Với các thuật ngữ chuyên ngành, mình sẽ sử dụng linh hoạt cả tiếng Anh và tiếng Việt để tránh lặp từ quá nhiều.
– Hi vọng nhận được sự ủng hộ và góp ý của các bạn! Enjoy!
Machine Learning (học máy, viết tắt là ML) cũng giống như sex trong trường học vậy. Ai cũng nói về nó, một vài người thực sự làm nó, và chỉ có giáo viên của bạn mới dạy nó. Nếu bạn đã từng thử tìm đọc các bài báo trên mạng về Machine Learning, bạn gần như sẽ tìm được hai kiểu bài: một là các bài nghiên cứu học thuật với hàng tá lý thuyết khô khan (tôi thậm chí còn không thể đọc hết nửa bài nữa), hai là những bài giật tít câu view về Artificial Intelligence (trí tuệ nhân tạo, viết tắt là AI), sự thần thông quảng đại của Data Science (khoa học dữ liệu), và các công việc mới xuất hiện trong kỉ nguyên 4.0…
Vậy nên tôi quyết định viết, một bài viết mà tôi ước là nó đã phải tồn tại từ lâu rồi. Một bài giới thiệu đơn giản về Machine Learning cho những ai quan tâm và muốn tìm hiểu về nó. Chỉ có những ví dụ thực tế, những giải pháp thực tế, viết bằng ngôn ngữ bình dân không lý thuyết cao siêu gì cả. Một bài viết dành cho tất cả mọi người. Dù bạn là một lập trình viên hay một nhà quản lý.
 Ok, bắt đầu thôi!
Hai loại bài viết bạn thường gặp nếu tìm kiếm “Machine Learning” trên Google

Học máy – tại sao máy móc lại phải học?

Khá
Đây là Khá. Khá muốn mua một chiếc ô tô. Khá lấy giấy bút ra và tính xem mình sẽ phải tiết kiệm bao nhiêu tiền mỗi tháng để mua được ô tô. Sau khi lướt qua vài cái quảng cáo ô tô trên mạng, Khá biết một chiếc xe mới sẽ có giá khoảng 500 triệu, chiếc nào đã đi được một năm thì khoảng 450 triệu, hai năm thì khoảng 400 triệu, và cứ như thế.
Là một người có khả năng phân tích khá, Khá bắt đầu nhìn ra một quy luật (pattern): giá của một chiếc ô tô phụ thuộc vào số tuổi của xe, và cứ đi được một năm thì giá xe giảm 50 triệu, nhưng sẽ không hạ xuống dưới 100 triệu.
Nói theo cách của Machine Learning, Khá vừa mới phát minh ra regression (tiếng Việt là hồi quy) – anh ấy dự đoán giá ô tô dựa trên dữ liệu trong quá khứ. Chúng ta vẫn thường làm điều đó, khi cần ước lượng giá của một chiếc iPhone like-new trên Chợ Tốt, hoặc khi tính xem cần mua bao nhiêu rau cho một bữa lẩu 5 người. Mỗi người ăn 2 lạng? Hay 3 lạng?
Sẽ thật tuyệt vời nếu như có một công thức đơn giản cho tất cả các bài toán trong thế giới này. Đặc biệt là cho bữa lẩu. Nhưng rất tiếc là không có.
Quay lại vụ mua ô tô. Vấn đề ở đây là, có rất nhiều yếu tố ảnh hưởng đến giá của một chiếc ô tô, ví dụ như hãng sản xuất, thời gian sản xuất khác nhau, các điều kiện kỹ thuật, công nghệ mới… Một người bình thường như Khá không thể nhớ được hết các thông tin đó trong đầu để mà tính ra kết quả được. Và chúng ta cũng vậy.
Con người chúng ta rất ngốc nghếch và lười biếng, vậy nên chúng ta mới cần máy móc làm toán hộ mình. Vậy thử nhờ máy móc xem sao. Hãy thử cho chúng dữ liệu và yêu cầu chúng tìm ra những “quy luật ngầm” (hidden pattenrs) để định giá ô tô.
Ồ, và nó làm được này! May mắn là máy móc xử lý những công việc kiểu này tốt hơn con người rất nhiều, kể cả khi chúng ta xem xét cẩn thận tất cả các mối quan hệ giữa các yếu tố kể trên.
 Và từ đó, Machine Learning ra đời.

Ba “nguyên liệu” chính của Machine Learning

Bỏ qua mọi quảng cáo nhảm nhí về AI, thì mục tiêu duy nhất của ML là dự đoán các kết quả dựa trên dữ liệu đầu vào. Tất cả các nhiệm vụ của ML có thể được diễn giải theo cách đó, nếu không thể thì đó không phải một bài toán giải quyết được bằng ML.
Bạn càng có nhiều mẫu thử (samples, ý nói dữ liệu thực tế) đa dạng, thì máy móc càng dễ để tìm ra các quy luật liên quan và dự đoán kết quả. Do vậy, chúng ta cần 3 nguyên liệu chính để “dạy” máy móc học:
– Dữ liệu: Bạn muốn phát hiện spam? Hãy thu thập các tin nhắn spam trong thực tế. Bạn muốn dự đoán giá cổ phiếu? Hãy thu thập lịch sử giá. Bạn muốn biết người dùng thích gì? Hãy phân tích hành vi của họ trên Facebook (đừng, Mark, dừng ngay việc đó lại đi, quá đủ rồi!). Dữ liệu càng đa dạng, kết quả càng chính xác. Có những trường hợp cần ít nhất là hàng chục nghìn hàng dữ liệu (hàng, cột trong bảng biểu Excel ấy).
Có hai cách để thu thập dữ liệu – thủ công hoặc tự động. Cách thủ công có thể gây ra ít sai sót hơn nhưng lại tốn thời gian, nên nhìn chung thu thập kiểu thủ công khá là tốn kém.
Cách tự động thì rẻ hơn – bạn thu thập tất cả mọi thứ bạn có thể tìm thấy và hi vọng có được kết quả tốt nhất.
Những công ty thông minh như Google tận dụng chính người dùng để dán nhãn dữ liệu miễn phí cho họ. Bạn còn nhớ cái mã captcha mà vợ chồng chị Dậu dùng để bán cái Tí không?  Đùa thôi, cái mà hay hiện lên khi bạn click vào ô download, rồi yêu cầu bạn phải “Chọn những hình vuông chứa biển báo giao thông trong các hình dưới đây” ấy?
Nó đây
Đó chính xác là những gì Google đang làm đấy. Sử dụng lao động miễn phí! Thực ra, nếu ở vị trí của họ, chắc tôi còn bắt bạn xem nhiều mã captcha hơn nữa ấy chứ. Nhưng, từ từ đã…
Rất khó để thu thập được một bộ dữ liệu tốt (theo thuật ngữ chuyên ngành là dataset – hay tập dữ liệu). Chúng quan trọng đến nỗi mà nhiều công ty có thể đồng ý tiết lộ về thuật toán của họ, còn dữ liệu thì không.
– Tiếp đến là các đặc trưng (features): còn được biết đến với tên gọi là tham số (parameters) hoặc các biến (variables).  Chúng giống như các yếu tố mà máy móc cần phải xem xét khi “học” vậy. Ví dụ, không cần tính toán bạn cũng biết là một chiếc ô tô được sử dụng càng nhiều thì khi bán lại càng mất giá, vậy nên giá của một chiếc ô tô cũ phụ thuộc một phần vào số km đã đi được của nó đúng không? Đó chính là một đặc trưng đấy. Các đặc trưng khác có thể kể đến như túi tiền của người ăn với bài toán đi chợ cho bữa lẩu, hay giới tính, với bài toán phân tích sở thích người dùng…
Khi dữ liệu được lưu trữ trong các bảng biểu (bảng Excel là một ví dụ), các đặc trưng đơn giản là tên các cột trong bảng thôi. Nhưng nếu dữ liệu của bạn là 100 Gb ảnh mèo thì sao? Chúng ta không thể coi mỗi pixel ảnh là một đặc trưng được. Đó là lí do tại sao bước chọn lọc ra các đặc trưng thích hợp tốn nhiều thời gian hơn các công việc khác trong một quy trình giải quyết vấn đề bằng học máy. Đó cũng là các nguyên nhân chính gây ra các sai sót trong tính toán. Con người mà, thường rất chủ quan. Chúng ta thường chọn những feature mà mình thích, hoặc mình cho là quan trọng. Vậy nên, bỏ đi đừng làm người.
– Cuối cùng là thuật toán: Tất nhiên rồi. Mỗi bài toán đều có cách giải riêng của nó. Phương pháp bạn chọn sẽ ảnh hưởng đến độ chính xác (precision) , độ hiệu quả (performance), và quy mô của mô hình cuối (final model). Có một điều quan trọng là: nếu dữ liệu của bạn không phù hợp (ví dụ: quá ít, hoặc không đủ đa dạng, hoặc đơn giản là dữ liệu không đủ liên quan đến thứ cần dự đoán)  thì dù là thuật toán tốt nhất cũng vô dụng. Đầu xuôi thì đuôi mới lọt. Vậy nên, đừng quá chú trọng vào độ chính xác, hãy thu thập đủ và đúng dữ liệu trước đã.
Giải thích một chút:
– Thuật toán (Algorithm): hiểu nôm na là các bước mà máy tính, hay con người thực hiện để giải quyết một vấn đề nào đó. Ví dụ, để nấu một bát mì bạn có thể: bước 1: xé vỏ mì -> bước 2: đun nước -> bước 3: thả mì vào nồi -> bước 4: thả rau vào nồi -> bước 5: đợi mì và rau chín -> bước 6: vớt mì ra bát. Vậy là xong một thuật toán để nấu mì. Giờ giả sử bạn hoán đổi thứ tự của bước 3 và bước 4, các bước còn lại giữ nguyên, bạn sẽ thu được một thuật toán khác, vẫn để nấu mì, nhưng kết quả bát mì sẽ khác với việc bạn thực hiện thuật toán ban đầu, có thể là rau sẽ chín kĩ hơn. Với máy tính thì ngoài việc thu được kết quả khác, chúng ta còn quan tâm đến thời gian và tài nguyên tiêu tốn để chạy một thuật toán nữa, cùng để thực hiện một nhiệm vụ, thuật toán A có thể chạy nhanh hơn thuật toán B, nhưng sẽ tốn nhiều bộ nhớ hơn, chẳng hạn.
– Precision và accuracy: cùng là độ chính xác, nhưng trong học máy chúng là hai khái niệm khác nhau. Bạn có thể tìm hiểu thêm ở đây: https://towardsdatascience.com/accuracy-precision-recall-or-f1-331fb37c5cb9
– Mô hình cuối: hiểu nôm na là mô hình mà máy tính đã “học” được để giải quyết bài toán đó, ví dụ với bài toán dự đoán giá ô tô thì 1 mô hình có thể là: giá ô tô = giá mới – 0.2 x tuổi đời của xe – 0.05 x số km đã đi được – 0.01x số vết xước trên xe, chẳng hạn.
Ba “nguyên liệu” để nấu món ML

Học tập và trí thông minh

Có lần tôi đọc được một bài báo với tiêu đề “Liệu mạng neuron có thay thế được học máy không?” trên một trang báo lá cải. Những tay nhà báo thường xuyên gọi thuật toán linear regression (hồi quy tuyến tính – thuật toán cơ bản nhất trong học máy hoặc thống kê học) với một cái tên mỹ miều là trí tuệ nhân tạo, hoặc tệ hơn, SkyNet. Để mị giới thiệu cho mà nghe:
Trí tuệ nhân tạo (Artificial Intelligence): là tên gọi của cả một lĩnh vực nghiên cứu, tương tự như sinh học hay hoá học ấy.
Học máy (Machine Learning): là một phần của trí tuệ nhân tạo. Một phần quan trọng, nhưng không phải tất cả.
Mạng neuron (Neural Networks – NN):  là một trong những nhóm thuật toán học máy. Một anh chàng đẹp trai học giỏi trong lớp học ML đấy, nhưng trong lớp vẫn có những anh chàng khác học giỏi không kém (các mạng neurons sẽ được giải thích kỹ hơn ở các phần sau).
Học sâu (Deep Learning- DL): một phương pháp hiện đại để xây dựng, huấn luyện và ứng dụng các mạng neuron. Cơ bản là, nó là một kiểu kiến trúc mới. Thực tế là không ai tách riêng deep learning với các kiểu network truyền thống cả. Chúng ta thậm chí vẫn sử dụng các thư viện chung cho chúng đấy thôi (trong lập trình, thư viện giống như một nơi chứa các dòng code được viết sẵn để bạn có thể ứng dụng vào sản phẩm của bạn mà không cần code lại vậy, trong học máy cũng có các thư viện được viết riêng để lập trình viên có thể dùng luôn mà không phải code lại các thuật toán phức tạp từ đầu). Để không bị xem là một thằng chỉ biết chém gió, tốt hơn hết hãy gọi đúng tên network và tránh dùng những buzzwords nhé.
Mối quan hệ giữa AI, ML, NN và DL
Một quy tắc chung nữa là: hãy so sánh những thứ ở cùng một cấp độ thôi. Việc hỏi “Liệu mạng neuron có thay thế học máy hay không” cũng giống như việc hỏi “Liệu cái bánh xe có thay thế được ô tô không” vậy. Truyền thông thân mến, điều đó sẽ làm giảm uy tín của các cậu đi nhiều đấy.
Máy móc có thể và không thể làm gì?

Phân loại các mô hình học máy

Hãy bắt đầu với những thứ căn bản. Có bốn hướng chính để giải một bài toán sử dụng học máy:
– Classical ML (học máy cổ điển): sử dụng các thuật toán học máy truyền thống, rất hiệu quả với những bài toán có dữ liệu đơn giản và các feature rõ ràng (ví dụ bài toán định giá ô tô).
– Reinforcement learning (Học củng cố – RL): dùng cho những bài toán mà bạn không có dữ liệu đầu vào, nhưng bạn có một môi trường để thoải mái khám phá (Ví dụ như trong game, sẽ không có dữ liệu từ thực tế, mà chỉ có các quy luật, hệ thống thưởng phạt, và máy tính sẽ học chơi game bằng cách chơi và thất bại nhiều lần, chúng sẽ học được đâu là một bước đi tốt giúp chúng qua cửa và được thưởng điểm, đâu là một bước đi tồi khiến chúng thất bại và phải chơi lại, bị trừ điểm).
– Ensemble learning (mô hình học máy kết hợp): nói nôm na là bạn so sánh nhiều mô hình trên 1 bài toán cụ thể, với cùng một tập dữ liệu đầu vào, để chọn ra mô hình cho độ chính xác cao nhất. Nên sử dụng phương pháp này cho những bài toán mà bạn ưu tiên chất lượng mô hình (tất nhiên bài toán nào cũng quan trọng về chất lượng, nhưng nếu bạn dự đoán ung thư thì hẳn nhiên là sẽ cần độ chính xác cao hơn lọc email spam rồi).
 – Cuối cùng, neural networks và deep learning: hãy sử dụng chúng khi bạn có dữ liệu đầu vào phức tạp (ví dụ như với 100 Gb ảnh mèo ở trên, mỗi tấm có độ phân giải hàng ngàn pixel), những đặc trưng không rõ ràng, và bạn thì tin vào phép màu (nghe có vẻ bí hiểm, nhưng tác giả sẽ giải thích rõ hơn ở các phần sau).
Và đây là tấm bản đồ full hd không che của thế giới Machine Learning:
Nếu bạn lười đọc, hãy xem qua hình trên để có những hiểu biết chung nhé.
Một điều quan trọng cần nhớ là: luôn luôn có nhiều hơn một cách để giải một bài toán trong thế giới của ML. Sẽ luôn có một vài thuật toán phù hợp, và bạn cần chọn xem cái nào phù hợp hơn thôi. Tất cả mọi thứ có thể được giải quyết bằng một mạng neuron đơn giản, tất nhiên rồi, nhưng nếu thế ai sẽ mua những chiếc card GeForces đắt tiền đây? (trong ML, để huấn luyện những mô hình phức tạp, người ta thường dùng card đồ hoạ (GPU) thay cho CPU vì xử lý được nhiều phép toán hơn, nhưng cũng đắt đỏ hơn).
Chú thích: từ mục “Phân loại các mô hình học máy” đến đây, mình có thay đổi thứ tự nội dung một chút so với bài gốc, vì mình nghĩ  trình bày theo thứ tự này sẽ dễ hiểu hơn.
Lời người dịch:
– Có thể đọc đến đây bạn vẫn còn nhiều thắc mắc về cách các phương pháp trong ML hoạt động. Tin vui là trong bài viết gốc, tác giả có giải thích chi tiết từng phương pháp. Tin không vui lắm là mình chưa dịch toàn bộ bài viết được vì quá dài. Vậy nên nếu bạn tò mò muốn biết thì có thể đọc bài gốc luôn, còn nếu bạn kiên nhẫn đợi bài dịch thì mình rất cảm ơn 😀
– Mình cũng là người mới học ML được vài tháng thôi, nên kiến thức và kinh nghiệm cũng chưa nhiều, vì vậy nếu có chỗ nào dịch hoặc viết chưa đúng, mình rất mong được mọi người góp ý :D.
– Phần 2 sẽ nói về các thuật toán học máy cổ điển, mà gần như ai học về ML cũng phải biết, đọc xong phần 2 đảm bảo bạn sẽ tự tin chém gió với bạn bè về cách cái con AI nó hoạt động luôn.
Tham khảo thêm các vị trí tìm việc cho lập trình Machine Learning
TopDev via Spiderum

13 đặc trưng của lập trình viên

Lập trình viên là những người hầu như lúc nào, ngày nào cũng tiếp xúc với các dòng code, họ phải suy nghĩ rất nhiều và não hoạt động rất nhiều, nhiều hơn so với người bình thường. Vì vậy, họ có sự dẻo dai về tinh thần, và để làm được điều đó, biết cách điều chỉnh suy nghĩ và kiểm soát cảm xúc là một trong những nhân tố tạo nên. 

Sau đây là 13 đặc trưng mà chỉ lập trình viên có với sự dẻo dai của tinh thần: 

1. Không lãng phí nhiều thời gian vào việc cảm thấy tội lỗi với những điều đã qua. 

Cảm thấy tội lỗi với bản thân, nuông chiều lòng thương hại là những điều làm lãng phí thời gian, tạo ra cảm xúc tiêu cực và làm ảnh hưởng các mối quan hệ hiện tại. 

Thay vào đó thì họ trân trọng những điều tốt đẹp ở hiện tại, những gì họ đang có và nỗ lực phấn đấu với kế hoạch, mục tiêu trong tương lai. 

2. Không chứng tỏ với mọi người mình là một người thông minh 

Mọi người có xu hướng muốn chứng minh mình là một người thông minh, có kiến thức sâu rộng, bởi vì họ muốn được chú ý và được nhận sự quan tâm. Nhưng đối với lập trình viên, họ biết giá trị bản thân mình ở đâu, và theo dõi các mục tiêu và hướng tới mục tiêu đó để đạt được thành công.       

3. Không ngại thay đổi 

Mặc dù lập trình viên tiếp xúc với màn hình máy tính nhiều hơn “thế giới loài người” nhưng họ là những người cực kỳ linh hoạt. Tuổi thọ tồn tại trong ngành của các lập trình viên không quá dài và nhảy việc là chuyện bình thường như cơm bữa, vì vậy họ nhanh chóng thích nghi và thay đổi để phù hợp với từng môi trường. 

4. Không tập trung vào những thứ không thể kiểm soát 

Cố gắng kiểm soát mọi thứ là một phản ứng đối với sự lo lắng. Thay vì tập trung vào việc cố gắng kiểm soát mọi thứ thì lập trình viên tập trung vào việc kiểm soát chính mình. Điều đó giúp họ giảm đi căng thẳng và tập trung vào con đường họ lựa chọn. 

  10 nguyên tắc lập trình nền tảng mà lập trình viên nào cũng cần biết
  11 Kiểu Lập Trình Viên trên trái đất bạn là ai?

5. Không quan tâm đến việc làm hài lòng người khác

 Chúng ta thường đánh giá bản thân bằng cách xem xét những điều người khác nghĩ gì về mình, điều này rất dễ gây mệt mỏi và thất vọng bản thân. Đối với dân lập trình, họ đã có nhiều thứ phải lo lắng và cần bận tâm, vì vậy, buông bỏ suy nghĩ làm hài lòng mọi người đã giúp họ mạnh mẽ và tự tin hơn. 

6. Không sợ đối diện với những rủi ro 

Mọi người thường sợ chấp nhận rủi ro, cho dù đó là loại rủi ro nào. Còn đối với lập trình viên, thay vì họ lo lắng với những rủi ro đó, thì họ tự hỏi bản thân để phân tích, nhìn nhận rủi ro đó. 

Một số câu hỏi gợi ý như sau:

  • Điều được và mất là gì?
  • Bài học nhận ra từ rủi ro đó? 
  • Rủi ro đó có cần thiết cần quan tâm và giải quyết không?
  • Điều tồi tệ nhất và điều tốt nhất khi giải quyết rủi ro đó?
  • Sẽ như thế nào điều tồi tệ nhất xảy ra? 

7. Không quá chìm đắm trong quá khứ

Quá khứ là quá khứ. Không có cách nào thay đổi được những điều đã qua, và chìm đắm trong quá khứ là cách tự làm hại bản thân, ngăn cản tận hưởng cuộc sống này và các dự định tương lai. Cố gắng sửa chữa sai lầm trong tương lai có thể dẫn tới stress và gây ra trầm cảm. 

Lập trình viên nhận thấy không có một lợi ích nào khi phải chìm đắm trong quá khứ, đau khổ vì những việc đã xảy ra. Thay vào đó, họ xem đó là cơ hội, là bài học kinh nghiệm cho bản thân. 

8. Không phạm phải một lỗi quá nhiều lần

Reflect bản thân là cách các lập trình viên thường xuyên sử dụng để tránh lặp lại lỗi đã phạm phải. Họ nhận ra rằng, điều quan trọng và cần thiết hơn đó là xem xét những việc đã xảy ra, họ có thể làm gì tốt hơn để tránh phạm sai lầm lần nữa trong tương lai. 

9. Không đố kị bởi thành công của người khác

Mỗi người có một quan điểm về thành công khác nhau. Việc chú ý đến thành công của người khác sẽ khiến lập trình viên mất tập trung vào con đường và mục tiêu của chính họ. Ngay cả khi đã thành công, thì các lập trình viên cũng không bao giờ hài lòng nếu luôn tập trung vào thành công của người khác. Thay vào đó, các lập trình viên tập trung vào khả năng của bản thân, phát huy talents sẵn có và tích lũy để đạt được thành công theo chính họ.  

10. Không bỏ cuộc sau thất bại đầu tiên 

Thành công không phải đạt được ngay lập tức và thất bại hầu như luôn là trở ngại cần phải vượt qua. Mọi người nghĩ thất bại là không thể chấp nhận được hoặc điều đó có nghĩa là không đủ khả năng để đạt được điều gì đó. Nhưng đối với lập trình viên, bật lại sau thất bại sẽ khiến họ mạnh mẽ hơn và làm khiến họ có thêm động lực hơn. 

11. Không sợ cảm giác một mình 

Lập trình viên có xu hướng lựa chọn một không gian riêng chỉ có một mình, việc này sẽ dễ khiến họ tập trung hơn với hàng hà suy nghĩ, đó là lý do vì sao họ luôn sử dụng tai nghe mọi lúc, mọi nơi, để tránh những tiếng ồn xung quanh. 

12. Cập nhật, nắm bắt xu hướng trên thế giới rất nhanh

Ai cũng nghĩ, lập trình viên là những người khô khan, cô lập với thế giới loài người. Nhưng họ là bầu trời kiến thức, họ research và tìm kiếm rất nhiều, với sự phát triển của công nghệ hiện tại, họ phải luôn update kiến thức để bắt kịp sự thay đổi nhanh chóng này và mở rộng kiến thức ngành. 

Tham khảo các ngành IT xu hướng hiện đại:

13. Không mong đợi kết quả ngay lập tức      

Lập trình viên là những người kiên trì, nếu không kiên trì thì họ đã không thể tồn tại trong ngành nghề nhiều sự khác biệt này. Giống như khi lập trình một chương trình nào đó, chẳng thể mong đợi nó chạy ngay lần đầu launching, mà luôn phải được fix, nếu không kiên trì như vậy thì họ chẳng thể thành công được.

Bạn đọc có những đặc trưng gì nữa thì chia sẻ thêm cho TopDev nhé!

Tìm việc IT lương cao, đãi ngộ tốt trên TopDev ngay!

25 thuật ngữ bạn nhất định phải biết khi lập trình web

25 thuật ngữ bạn nhất định phải biết khi lập trình web

Khi mới bắt tay vào lập trình web, chắc hẳn bạn sẽ mơ hồ về những khái niệm về lập trình web và tự đặt ra những câu hỏi “AJAX là gì?”, “API là gì?”. Tuy nhiên không có gì phải ngại, qua bài post này bạn sẽ nắm trong tay 25 khái niệm hay gặp nhất về web.

  1. AJAX: viết tắt cho cụm “Asynchronous JavaScript and XML” (JavaScript và HTML không đồng bộ): công nghệ giúp giúp tạo ra những trang Web động mà không phải reload lại trang, giúp tác vụ chạy mượt và đẹp hơn.
  2. API: viết tắt của cụm từ “Application Programming Interface” (Giao diện lập trình ứng dụng): phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Ngoài ra, API cung cấp khả năng truy xuất đến một tập các hàm hay dùng, từ đó có thể trao đổi dữ liệu giữa các ứng dụng.
  3. Native API: native API là một tính năng tích hợp có sẵn trong môi trường lập trình. Ví dụ: document.querySelector() đuợc gọi là native API để chọn các phần tử HTML (HTML elements)
  4. Browser console: bạn có thể truy cập vào developer toolbox với một số trình duyệt web. Với Firefox và Chrome trên Mac, nhấm tổ hợp phím Command + Option + I, trên Linux (hoặc Windows nếu mình nhớ không nhầm) là phím F12. Sau đó màn hình interactive console có thể gõ và thực hiện lệnh JavaScript. Console này cũng sẽ chỉ ra các lỗi và cảnh báo khác từ chương trình JavaScript.
  5. Debugger: là công cụ được xây dựng giúp dev tìm ra lỗi và chỗ nào chương trình ngưng hoạt động. JavaScript cũng có hướng dẫn debugger dừng đúng ở câu lệnh có lỗi.
  6. Browser API hay Web API: giống như native APIs, Web API là tính năng cụ thể có sẵn trên trình duyệt web, và dev có thể sử dụng ngay lập tức sau vài buớc cài đặt đơn giản. Ví dụ như  setTimeout, setInterval, console.log. Xem thêm full list Web APIs.
  7. ECMAScript: là tên chính thức của JavaScript. JavaScript sau đó vào năm 1996 được tiêu chuẩn hóa bởi ECMA, một tổ chức chuyên về tiêu chuẩn hóa các ngành công nghệ và hệ thống.
  8. ES5: đồng nghĩa với ECMAScript 2009, là phiên bản thứ 5 của JavaScript. Nhằm tránh nhầm lẫn, người ta hay sử dụng cú pháp “ECMAScript + năm” để xác định phiên bản JavaScript mình muốn đề cập.
  9. ES6: viết tắt của ECMAScript 2015, phiên bản thứ 6 của JavaScript. Từ năm 2015, JavaScript committee quyết định sẽ cho ra mắt các tính năng mới hằng năm. Từ đó, ECMAScript 2016, ECMAScript 2017, ECMAScript 2018 lần lượt ra đời.
  10. JavaScript engine: là một phần của browser và có khả năng biên dịch (compile) và phiên dịch (interpret) JavaScript code. JavaScript engine đọc các đoạn code JavaScript rồi chuyển nó sang mã máy để máy tính (hoặc phần mềm máy tính như trình duyệt web, server node.js…) có thể hiểu và chạy được.
  11. JavaScript specification: là bản mô tả chức năng cho ECMAScript. Trong mỗi ấn bản này, người ta định nghĩa các tính năng của ngôn ngữ lập trình ECMAScript theo một cách viết rất hàn lâm, với hàng đống những thuật ngữ khoa học. Loại tài liệu academic này chắc chắn không hợp khẩu vị của đa số JavaScript developer, nhưng lại rất quan trọng đối với các nhóm phát triển web browser và JavaScript engine. Họ sẽ tham khảo đặc tả và lần lượt tích hợp chức năng vào sản phẩm của họ.
  12.  Node.js: là môi trường chạy JavaScript bên ngoài browser, bao gồm JavaScript engine và V8 để compile và execute đoạn code. Nodejs không chạy trên một trình duyệt mà chạy trên Server.
  13. Node package manager: viết tắt là npm, là một công cụ tạo và quản lý các thư viện lập trình Javascript cho Node.js. Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các thư viện với các đoạn code đã thực hiện sẵn một chức năng nào đó. Nó giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các thư viện lập trình hay thậm chí cả các framework.
  14. HTTP request: hay còn gọi là thông báo yêu cầu được gửi từ client đến server, để yêu cầu server làm việc gì đó. Ví dụ như khi bạn đang ở trang web từ trình duyệt. Trang web này ngược lại có thể yêu cầu HTTP request để lấy dữ liệu, hầu hết là về REST APIs. (xem thêm bên dưới).
  15. HTTP error: một số lỗi thường gặp với web services và server trả về các error cùng với các mã số quen thuộc như: 500 (server error), 404 (not found), 403 (forbidden), ..
  16. JSON: viết tắt cho cụm từ JavaScript Object Notation, là một kiểu định dạng dữ liệu tuân theo một quy luật nhất định mà hầu hết các ngôn ngữ lập trình hiện nay đều có thể đọc được. JSON là một tiêu chuẩn mở để trao đổi dữ liệu trên web.
  17. REST API: REST là một dạng chuyển đổi cấu trúc dữ liệu, API là giao diện lập trình ứng dụng giúp tạo ra các phương thức kết nối với các thư viện và ứng dụng khác nhau. REST API là một ứng dụng chuyển đổi cấu trúc dữ liệu có các phương thức để kết nối với các thư viện và ứng dụng khác. REST API không được xem là một công nghệ, nó là một giải pháp để tạo ra các ứng dụng web services thay thế cho các kiểu khác như SOAP, WSDL (Web Service Definition Language),…
  18. Transpiler: những trình duyệt cũ không hỗ trợ cú pháp JavaScript mới từ phiên bản ECMAScript 2015 trở về sau. Lúc này, transpiler sẽ có nhiệm vụ biên dịch cú pháp JavaScript mới thành các phiên bản tương thích (như ECMAScript 2009).
  19. Proposal: sự phát triển JavaScript được thông qua bởi hội đồng TC39. Thành viên từ nhóm này có thể đề xuất proposal để cải thiện hay thêm một số tính năng cho ngôn ngữ này. Proposal là một văn bản đặc tả viết bằng ngôn ngữ học thuật, mô tả những tính năng mới và cách áp dụng trong JavaScript.
  20. Stage N: một bản JavaScript proposal sẽ bắt đầu với Stage 0. Càng nhận được nhiều đồng thuận từ hội đồng TC39, bản proposal càng có nhiều lợi thế ở những giai đoạn sau: 1, 2, 3 và 4. “Stage 1” hay “stage 2” chỉ giai đoạn của bản proposal đó. Nếu bản proposal đang ở “stage 2” thì nó đang tiến triển khá tốt và có khả năng được duyệt vào giai đoạn tiếp theo. Giai đoạn kết thúc là stage 4, đồng nghĩa với việc tính năng mới sẽ được áp dụng vào ngôn ngữ này.
  21. Vanilla JavaScript: là cách gọi của những ứng dụng JavaScript “nguyên thủy”, ví dụ như những ứng dụng không cần đến sự trợ giúp của frontend library như React, Vue hay Angular.
  22. XMLHttpRequest: XMLHttpRequest được thiết kế để đọc nguồn dữ liệu từ URL một cách đồng bộ (synchronous) hoặc không đồng bộ (asynchronous). Đọc dữ liệu một cách không đồng bộ giúp người dùng vẫn có thể thao tác với trình duyệt trong quá trình XMLHttpRequest đang đọc nguồn dữ liệu từ xa. XMLHttpRequest là một phần của “gia phả” AJAX, được sử dụng để thực hiện việc toàn bộ quy trình trao đổi thông tin giữa trình duyệt (máy khách) và máy chủ mà không yêu cầu phải tải lại trang.
  23. FetchAPI: là một API đơn giản cho việc gửi và nhận request bằng js. Với fetch thì việc thực hiện các yêu cầu web và xử lý phản hồi dễ dàng hơn so với XMLHttpRequest cũ, nó khá tương đồng với XMLHttpRequest nhưng cải tiến hơn và được xây dựng dựa trên ECMAScript 2015 Promises.
  24. CORS: viết tắt cho Cross-Origin Resource Sharing, CORS là một cơ chế cho phép nhiều tài nguyên khác nhau (fonts, Javascript, v.v…) của một trang web có thể được truy vấn từ domain khác với domain của trang đó. Xem thêm cách sử dụng CORS tại đây.
  25. WebSocket: là một giao thức giúp truyền dữ liệu hai chiều giữa server-client qua một kết nối TCP duy nhất. Không giống với giao thức HTTP là cần client chủ động gửi yêu cầu cho server, client sẽ chờ đợi để nhận được dữ liệu từ máy chủ. Hay nói cách khác với giao thức Websocket thì server có thể chủ động gửi thông tin đến client mà không cần phải có yêu cầu từ client.

Trên đây là 25 web terms thường gặp nhất. Hy vọng sẽ giúp các bạn có thêm thông tin trong quá trình tìm hiểu về web development nhé.

TopDev via Dev.to

 Top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

Top 10 khóa huấn luyện DevOps cho lập trình viên và nhà phát triển phần mềm

DevOps khá là hot vào lúc này! Có nhiều cơ hội làm việc đang nằm chờ các kỹ sư DevOps xuất sắc cùng chuyên gia trong năm 2020 và những năm tới. Đối với 1 người lập trình Java có kinh nghiệm và muốn trở thành 1 kỹ sư DevOps làm mình nghĩ mình đã đến đúng nơi rồi.

  • Ưu điểm quan trọng nhất của DevOps là nó giúp mình cung cấp phần mềm tốt hơn và cung cấp nhiều quyền kiểm soát hơn đối với quy trình phát triển phần mềm và môi trường của bản thân với sự trợ giúp của các công cụ hiện đại và tự động hóa.

Đó là lý do tại sao đề nghị cho các chuyên gia DevOps ngày càng tăng theo cấp số nhân. Nó còn là 1 trong những công việc có thu nhập cao bên cạnh chuyên gia Data Science và Machine learning.

Các kỹ sư DevOps khắp nơi đang kiếm khoản $105,000 1 năm và trung bình $ 146,000 tại San Francisco, theo Glassdoor. Điều này làm mình nghĩ rằng nếu muốn tăng lương hay kiếm nhiều tiền hơn trong lúc bản thân còn phong độ kèm theo 1 công việc thú vị, nghiên cứu DevOps là 1 sự lựa chọn tốt.

Trước đây, mình đã chia sẻ DevOps Developer RoadMap, thứ cung cấp hướng dẫn đầy đủ và tầm nhìn để trở thành 1 kỹ sư DevOps. Trong bài viết này, mình sẽ chia sẻ vài khóa học online mà bạn cần để trở thành 1 Kỹ sư DevOps.

Ngày nay, việc tìm hiểu về các công cụ tích hợp liên tục như Jenkins và container như Docker (Jenkins là gì?Docker là gì?, hãy click vào đường link để tìm hiểu thêm nhé) cùng với các kỹ năng DevOps chung đang đạt được động lực lớn trong lĩnh vực công nghệ. Tương tự như cách phát triển 1 ứng dụng di động vài năm trước.

  • Các công ty đang mong chờ các nhà phát triển mới quản lý trọn vòng đời các ứng dụng web của họ. Nghĩa là cả phát triển lẫn triển khai các ứng dụng đó. 

Để trở thành Kỹ sư DevOps hiệu quả, mình đã phải mở rộng kiến thức về các công cụ sử dụng trong phát triển phần mềm. Điển hình như là Maven, ANT, và Gradle. Công cụ kiểm tra đơn vị như JUnit và Selenium. Công cụ triển khai như Docker, công cụ giám sát như New Relic. 

Các công cụ tự động hóa cơ sở hạ tầng như Chef và Puppet. Các công cụ kiểm soát nguồn như Git và Github. Và các công cụ tích hợp liên tục như Jenkins và TeamCity. Các khóa học này cung cấp các giới thiệu tốt về công cụ DevOps cần thiết.

  DevOps là gì? Cần học gì để trở thành DevOps

10 khóa huấn luyện DevOps tốt nhất cho các nhà phát triển kinh nghiệm

Không phải mất nhiều thời gian nữa, đây là danh sách của mình về vài khóa tuyệt nhất để học DevOps và công cụ thiết yếu được yêu cầu cho thực hiện tự động hóa trong quá trình phát triển và triển khai phần mềm.

  1. Dự án DevOps: CI/CD với Jenkins Ansible Docker Kubernetes.

Jenkins rõ ràng là công cụ quan trọng nhất cho các kỹ sư DevOps vì cung cấp tích hợp liên tục. 

Cho 1 chuyên gia DevOps, kiến thưc tốt về kiểm tra liên tục, tích hợp liên tục và triển khai liên tục và sự khác biệt giữa chúng là bắt buộc. 

Khóa học này bao gồm tất cả cơ bản về Jenkins và dạy mọi thứ mà mình cần để thiết lập 1 ‘Jenkins build pipeline‘. Bắt đầu với việc kiểm tra liên tục (xây dựng, kiểm tra và phân tích tĩnh) tất cả các cách để triển khai liên tục (triển khai để dàn dựng và sản xuất). 

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

Dự án DevOps: CI/ CD với Jenkins Ansible Docker Kubernetes 

   2. Học DevOps: Khóa Kubernetes hoàn chỉnh

Khi Google bắt đầu chạy container cách đây một thập kỷ, không ai có thể đạt được sự linh hoạt và hiệu quả của cơ sở hạ tầng như vậy. Sử dụng kiến thức này, Google đã phát hành Kubernetes như một dự án nguồn mở và miễn phí. 

Ngày nay Kubernetes được sử dụng bởi các công ty nhỏ và các doanh nghiệp lớn muốn đạt được hiệu quả và vận tốc mà Google có. Khóa học này đã dạy cho mình cách chạy, triển khai, quản lý và duy trì các ứng dụng Docker được đóng gói trên Kubernetes

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

Học DevOps: Khóa Kubernetes hoàn chỉnh 

   3. Học DevOps: Liên tục cung cấp phần mềm tốt hơn

Đây là 1 trong những khóa học đầy đủ nhất về DevOps trên Udemy. Nơi đã hầu hết các công cụ và công nghệ thiết yếu được sử dụng bởi kỹ sư DevOps.

Khóa học nhắm đến các kỹ sư phần mềm và quản trị viên hệ thống muốn cung cấp phần mềm tốt hơn. Giúp mình thành thục trong việc cung cấp và triển khai phần mềm qua Git, Vagrant, Chef, Ansible, Jenkins, Docker, và Kubernetes. 

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

   4. Con đường học tập: DevOps hiện đại 

DevOps nhìn nhận việc phát triển phần mềm 1 cách hoàn toàn mới. Mình đã có thể tự động hóa và dựng cấu hình cho các máy chủ cơ sở hạ tầng và sau đó giải quyết các lĩnh vực tự động hóa, triển khai liên tục, container và giám sát.

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

Git, Docker, và Puppet là những công cụ quan trọng nhất trong thế giới DevOps hiện đại và khóa học này đã dạy mình tất. 

Nói ngắn gọn, 1 khóa giới thiệu tuyệt vời cho bất kỳ ai còn mới với lĩnh vực DevOps như quản trị viên hệ thống, nhà phát triển, chuyên gia IT. Và nó còn cung cấp cái nhìn tổng quát tốt về các công cụ DevOps cần thiết. 

  8 Bước Trong Lộ Trình Trở Thành DevOps Engineer

   5. Công nghệ Docker cho DevOps và các nhà phát triển 

Docker là 1 trong những công nghệ quan trọng cho DevOps. Nó cho phép mình kết hợp các thành phần lại với nhau và triển khai chúng trên container trên bất kỳ nền tảng nào như Linux hoặc Windows. 

Khóa học này bao gồm tất cả các nguyên tắc cơ bản của các container Docker và dạy cho mình mọi thứ cần biết về việc phát triển và triển khai các ứng dụng hiện đại với phần mềm Docker. 

   6. Docker cho khóa DevOps: từ phát triển đến thành phẩm 

Khóa này đã cho mình thấy bản thân có thể dựng gì với Docker cùng cách làm. Mình đã học các phần Docker cơ bản suốt chặn đường dài! 

Cùng nhau chúng mình đã vượt qua phát triển và triển khai một ứng dụng Flask và Ruby on Rails đa dịch vụ. 

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

   7. Tìm Hiểu DevOps: Tự động hóa cơ sở hạ tầng với Terraform 

Tự động hóa cơ sở hạ tầng là một phần lớn của DevOps và các công cụ như Ansible, Chef, Puppet giúp ích rất nhiều nhưng gần đây, Terraform đã trở nên phổ biến và là công cụ mình cần nắm vững nếu mình có ý định sắp hoặc vào vai trò Ops / DevOps.

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

Terraform bắt đầu từ cùng một nguyên tắc, cơ sở hạ tầng như mã, nhưng tập trung vào tự động hóa cơ sở hạ tầng. Toàn bộ cơ sở hạ tầng Đám mây của bạn (phiên bản, khối lượng, mạng, IP) có thể được mô tả ở terraform.

Trong khóa học này, mình đã tìm hiểu về cách tự động hóa cơ sở hạ tầng của bản thân với terraform cùng với AWS, Packer, Docker, ECR, ECS và Jenkins.

  Mẫu bảng mô tả công việc lập trình Devops

   8. DevOps cùng AWS CodePipeline, Jenkins và AWS CodeDeploy 

Đôi lúc mình khó hiểu về tích hợp liên tục (CI), phân phối liên tục và triển khai liên tục (CD) và cách thực hiện DevOps với Dịch vụ web của Amazon như AWS và Jenkins thì đây rõ ràng là khóa học phù hợp với bản thân.  

Trong khóa học này, mình sẽ học các kỹ năng DevOps cần thiết cùng với tích hợp liên tục và phân phối liên tục trong đám mây AWS.

   9. DevOps: CI/CD với Jenkins pipeline, Maven, Gradle

Khóa học DevOps trực tuyến này đãhướng dẫn mình cách xây dựng một đường ống tích hợp liên tục và phân phối liên tục tinh vi bằng cách sử dụng Jenkins và nhiều plugin của nó. Đặc biệt là các plugin đường ống.

top 10 khóa huấn luyện kỹ sư DevOps cho dân Dev

Khóa học này được thiết kế để dạy về ins và outs của Jenkins và thiết lập các DevOps pipeline, ngay cả khi mình không có chút kinh nghiệm nào với nó, để giúp triển khai các thực tiễn DevOps này sẽ hợp lý hóa các quy trình phát triển. 

Nói tóm lại, mình nghĩ đây là một khóa học tuyệt vời để xây dựng tích hợp liên tục, phân phối liên tục và các đường ống DevOps với Java, Gradle, Maven, Artifactory và Sqitch.

   10. Hoàn tất DevOps với Docker, Jenkins, GIT, Vagrant, và Maven 

Đây là một khóa học DevOps thực hành không chỉ giải thích cho bản thân vai trò của kỹ sư DevOps mà còn cung cấp kinh nghiệm thực hành trên các công cụ DevOps cần thiết. 

Nó cung cấp một hướng dẫn đầy đủ về công nghệ DevOps cần thiết. Mình đã học Docker Mastery, Jenkins, GIT, Vagrant và Maven bằng cách làm theo hướng dẫn thực hành.

Đó là tất cả về một số khóa học tốt nhất để học DevOps trong 2019 và trở thành kỹ sư của DevOps. Như mình đã nói, nhu cầu về các kỹ sư và nhà phát triển phần mềm DevOps giỏi đang tăng theo cấp số nhân và không có đủ chuyên gia DevOps trên thị trường để hỗ trợ nhu cầu này.

Điều này có nghĩa là một cơ hội tuyệt vời để học DevOps và chuyển sang công việc có trách nhiệm hơn, lương cao hơn và thú vị hơn này. Các động cơ DevOps đang kiếm trung bình từ 120K USD đến 150K USD. Theo mình nghĩ, để trở thành một kỹ sư DevOps vào năm 2019, những khóa học này là một nơi tuyệt vời để bắt đầu.

Các tài nguyên hữu ích khác để tìm hiểu DevOps

Cảm ơn các bạn vì đã đọc hết bài viết. Nếu bạn thích các Khóa học DevOps này thì xin hãy chia sẻ với bạn bè và đồng môn của bạn. Có thắc mắc hay feedback gì cũng đừng ngại để lại lời nhắn nhé !