Vì sao những ngôn ngữ như Java đòi hỏi phải code nhiều hơn Python khi thực hiện cùng một công việc?
“Code dài hơn hơn khi thực hiện cùng một công việc”
def getCustomer(id):
public CustomerRecord getCustomer(CustomerID id){
Vì sao những ngôn ngữ như Java đòi hỏi phải code nhiều hơn Python khi thực hiện cùng một công việc?
def getCustomer(id):
public CustomerRecord getCustomer(CustomerID id){
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
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:
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
(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.
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.


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.
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
(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
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.
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
Ở 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
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.


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 ý.
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:
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();
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', '...']
const detectDeviceType = () =>
/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)
? 'Mobile'
: 'Desktop';
// Example
detectDeviceType(); // "Mobile" or "Desktop"
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' }
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"}
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!
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
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.
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.
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:
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ọ.


Các ví dụ App: Instagram, Twitter, Snapchat, Reddit
Các công nghệ nên dùng:
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.


Những ví dụ phổ biến: Airbnb, Uber, UberEats, Doordash, Etsy, Udemy
Các công nghệ nên dùng:
Đâ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 đó.


Các ví dụ điển hình: Youtube, Netflix, Audible, Spotify, Tiktok
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.


Các ví dụ điển hình: WhatsApp, Viber, Discord, Messenger, Slack
Đâ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ừ đó.


Những ví dụ điển hình: Todoist, Notion, Things, v..v..
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
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.


Đâ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.






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


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.
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
Author: Giaosucan
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).
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ệ.


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à
Typescriptngoà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,Typescriptcũ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.
Một chút chuyện web server: https://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
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.
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.04cho 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.04cho 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.
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
DockervàDocker Swarmcho vấn đề triển khai này nhé. Sẽ nói vềDocker swarmdành cho những bạn chưa đụng tớiDockerở đoạn sau nhé. Nhưng ngay lúc này bạn có thể search vềDocker SwarmvàKurbeneteslà gì, và nó khác nhau như thể nào?
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 build, triể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 collaborators, 10GB per project. Hiện tại các dự án trên công ty mình cũng sử dụng gitlab đóa.
.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:
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
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ư Angular, Vue 3, Aurelia…
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á là 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
npm install -g typescript
tsc index.ts // Chạy file typescript
Các bạn có thể xem thêm về tsconfig.json: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
let isDone: boolean = false;
Các loại dữ liệu cơ bản được support trong
Typescriptlànumber,string,Date,boolean, ngoài ra còn các loại ít được xài hơn như lànull,undefined…
Tham khảo: https://www.typescriptlang.org/docs/handbook/basic-types.html
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
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 IHouseAnimal. 

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 Tselect: 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 Ujoin: 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 SleftJoin: 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 SCó 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ệu, kiểu trả về,… cho Javascript 😇
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:
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 objectcòninterfacethì 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
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ì?


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.


Đâ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
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.


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 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 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 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
Author: Khoa Nguyen
Thực sự, bạn không cần biết những khái niệm như Syntax Parser, Execution Context, Lexical 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 Parser, Execution Context, Lexical Environment là gì trước.
Tuyển dụng lập trình viên Javascript tại đây
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.


Syntax Parser 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ư:
Rồi từ 2 cái này lại đẻ ra:
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ư:
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
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’.
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.
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!");
}
}
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!”
Đâ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
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 đượ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
Đâ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");
}
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 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
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!";;
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!")
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!"
.
1 nỗ lực để làm JavaScript dễ dàng sử dụng hơn.
console.log "Hello, World!"
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 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 đã 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;
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
Đượ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").
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!"
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!")
Đượ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 đượ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")
}
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"
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!"
Đượ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;
Đ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 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!");
Đượ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")
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
Đ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 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
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"]
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
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";
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
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;
}
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 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 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";
Đượ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!"
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")
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")
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;
Đượ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!'
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!");
}
Đượ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!")
}
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))
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!
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.
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!'.
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.
Đượ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!"
Đượ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:
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.
Viết một class, EventEmitter có ba phương thức: on, emit và removeListener.
on ("eventName", callbackFn) – là hàm lấy eventName và callbackFn, 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 eventName và callbackFn, 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
Đâ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 = {}
}
}
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
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.
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
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.


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ì?
Việc làm data analytics hấp dẫn cho bạn


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ố?
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:
==
** 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
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 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.
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é.








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ề:
Xem thêm việc làm Web Developer – lập trình viên Web hấn dẫn tại TopDev
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”
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.
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….


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.
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).


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
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 và 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.”
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:
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ụ:
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.
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ư:
Các công cụ phổ biến nhất là Axe và WAVE. 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.
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.
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:
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:
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.
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:
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à:
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ỏ:
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.
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ò:
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 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.










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ậ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:
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.
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.
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.


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.
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.
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:
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.
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.
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ọ.
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.


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.
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:
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!
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.
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