Home Blog Page 33

Nên học Front-end hay Back-end trước?

Đây là câu hỏi mà nhiều bạn khi mới bắt đầu học lập trình Web đặt ra và phân vân không biết lựa chọn nào là phù hợp với bản thân cũng như nhu cầu của thị trường tuyển dụng. Bài viết hôm nay chúng ta cùng nhau đi trả lời cho câu hỏi trên nhé.

Trước tiên chúng ta cần hiểu Front-endBack-end là gì?

Nên học Front-end hay Back-end trước?

Đối với một Website, Front-end là phần giao diện mà người dùng nhìn thấy và tương tác với các phần tử trên trang mỗi khi truy cập vào một Website. Để có được những dữ liệu hiển thị lên Website, đồng thời ghi nhận sự tác động của người dùng lên dữ liệu và lưu trữ lại, chúng ta sẽ cần tới Back-end; nơi sẽ xử lý các yêu cầu gửi nhận, cập nhật, thêm mới, xóa các bản ghi dữ liệu.

Back-end cũng là phần mà người dùng không nhìn thấy được như Front-end, hay như chúng ta vẫn hay ví von đấy là phần chìm của tảng băng trôi. Có sự khác biệt rõ ràng giữa ứng dụng tạo ra ở 2 phía:

  • Ứng dụng Front-end chạy trên trình duyệt (browsers), thực hiện việc hiển thị nội dung dữ liệu và xử lý các tương tác của người dùng.
  • Ứng dụng Back-end là ứng dụng chạy ở phía máy chủ (server-side) phục vụ cho mọi yêu cầu được gửi đến từ phía máy khách (client-side). 

Do có sự khác nhau đó và việc tạo ra ứng dụng dành cho Front-end và Back-end là khác nhau, đòi hỏi những ngôn ngữ lập trình và kỹ năng khác nhau.

Ngôn ngữ lập trình sử dụng cho Front-end và Back-end

Nên học Front-end hay Back-end trước?

Để xây dựng ứng dụng cho phía Front-end, 3 ngôn ngữ cơ bản mà chúng ta cần trang bị là HTML, CSSJavaScript.  Khi đã nắm vững được 3 trụ cột trên thì có nhiều các thư viện, framework hỗ trợ lập trình, giúp tổ chức và viết source code tốt hơn như: React, Vue, Angular, Jquery, Bootstrap, …

Trong khi đó thì đối với Back-end, ứng dụng được chạy ở phía server-side, vì thế có sự đa dạng trong việc lựa chọn ngôn ngữ lập trình cũng như nền tảng hệ điều hành sử dụng. Chúng ta có thể sử dụng Java, Python, JavaScript, PHP, C#,… để xây dựng ứng dụng Back-end. Ngoài ra thì để làm được Back-end, lập trình viên cũng phải trang bị thêm các kiến thức liên quan đến việc giao tiếp với Database cũng như các services khác.

Tìm việc làm Backend Intern HCM trên TopDev ngay!

  Lập trình Web nên học ngôn ngữ nào là phù hợp?

  Những Câu Hỏi Phỏng Vấn Front End Thường Xuất Hiện Trong Các Buổi Phỏng Vấn

Nên học Front-end hay Back-end trước?

Như đã đề cập ở trên, có sự khác nhau tương đối rõ rệt giữa việc lập trình Front-end và Back-end; gồm cả về những kỹ năng cần có và ngôn ngữ lập trình cần học. Vì vậy việc lựa chọn học cái nào trước phụ thuộc phần nhiều vào định hướng của bản thân lập trình viên.

Cụ thể hãy cũng xét một số yếu tố bạn nên cân nhắc để trả lời cho câu hỏi trên nhé:

  • Sự yêu thích và đam mê của bạn: đây là yếu tố sẽ giúp bạn dễ dàng lựa chọn hướng đi và gắn bó một cách lâu dài trong bất kỳ ngành nghề nào. 
  • Thế mạnh, kỹ năng bạn sẵn có: làm Front-end sẽ phù hợp với những bạn có chút năng khiếu về UI/UX; ngược lại nếu bạn thích làm việc với dữ liệu, tiếp xúc với cả phần cứng nếu cần thì Back-end sẽ là một lựa chọn tốt hơn.
  • Mức độ phức tạp: nói một cách công bằng thì làm Back-end vẫn sẽ phức tạp, đòi hỏi khả năng logic cũng như yêu cầu tư duy tốt hơn so với làm Front-end. Lập trình viên Back-end cũng sẽ đòi hỏi số năm kinh nghiệm cao hơn để có thể hiểu sâu về hệ thống và xây dựng, lựa chọn công nghệ, dịch vụ phù hợp.
  • Cơ hội việc làm: Front-end dựa trên nền tảng 3 ngôn ngữ chính là HTML, CSS và JavaScript, cũng vì thế mà bạn có nhiều cơ hội tuyển dụng hơn. Back-end yêu cầu một ngôn ngữ lập trình cụ thể; cũng vì thế mà sẽ khá khó khăn nếu bạn có ý định chuyển đổi môi trường và nền tảng.

Xem thêm các việc làm tuyển dụng Front End lương cao trên TopDev

Xu hướng trở thành một Fullstack Developer

Nên học Front-end hay Back-end trước?

Front-end và Back-end luôn phải đi cùng với nhau và không thể thiếu để xây dựng lên một hệ thống Website; vì thế xu hướng hiện nay là trở thành một Fullstack Dev với khả năng làm ở cả 2 phía. Đầu tư học cả HTML, CSS, JavaScript cùng một ngôn ngữ Back-end viết ứng dụng server rõ ràng sẽ tốn thời gian và công sức của chúng ta gấp đôi; nhưng mang lại khả năng làm việc độc lập, đáp ứng nhu cầu tuyển dụng và cơ hội có được mức thu nhập hấp dẫn hơn rất nhiều. Lúc này bạn sẽ không cần phải trả lời câu hỏi nên học gì trước nữa, mà sẽ là việc song song cùng lúc học cả 2 để tự tin làm bất kỳ task nào trong một dự án phát triển Web.

Kết bài

Câu trả lời cuối cùng dành cho các bạn với câu hỏi từ đầu bài chính là học cái nào trước cũng đều tốt cả và học cả 2 cùng một lúc lại càng tốt hơn. Front-end hay Back-end cũng đều đã, đang và sẽ là những vị trí không thể thiếu trong team phát triển dự án; vì thế đừng ngần ngại lựa chọn một hướng theo ý muốn của bản thân và bắt đầu học ngay từ bây giờ. Chúc các bạn sớm lựa chọn được con đường của bản thân trên hành trình trở thành một lập trình viên; hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm: 

Tham khảo ngay việc làm IT mọi cấp độ trên TopDev!

Tất tần tật lộ trình trở thành Javascript Developer chi tiết

Lộ trình trở thành Javascript Developer như thế nào? Bao gồm những bước tuần tự ra sao. Đó là câu hỏi cần trả lời cho những anh em mong muốn trở thành JS developer.

Bài viết này giải thích cụ thể tường tận cho anh em các bước cần học để trở thành JS developer giỏi. Cũng cung cấp thêm các khoá học, các trang web hữu ích cho anh em mới bắt đầu.

lộ trình trở thành Javascript Developer
Thích là nhích mà gì cũng quất

Cùng bắt đầu nhé!

1. Javascript Developer là gì?

A JavaScript Developer is a Software Developer who specialises in the design, testing and implementation of software using the JavaScript programming language

Javascript Developer là lập trình viên phần mềm thành thạo với thiết kế, kiểm thử và hiện thực phần mềm sử dụng ngôn ngữ lập trình Javascript.

Này là định nghĩa trong mơ vì thông thương Javascript là ngôn ngữ nền xây dựng các framework. Với các framework, anh em có thể nhanh chóng, dễ dàng xây dựng website, app, code backend api các kiểu con đà điểu. Chính vì vậy Javascript Developer không chỉ đơn thuần sử dụng JS để code. Bản thân sẽ được trải nghiệm, học hỏi cái framework mới cho FE như Reactjs, Vuejs. Hoặc code BE với nodejs.

Dù làm nhiều và tiếp xúc với nhiều framework khác nhau. Nhưng cái nền vẫn là JS. Tại sao ta lại cần bắt đầu với JS?

2. Tại sao lại bắt đầu với Javascript?

Một số anh em muốn trở thành Frontend developer nhưng lại bay thẳng ngay vào các framework cụ thể mà không có kiến thức nền về JS. Việc bắt đầu mà không có JS thực sự gây ra rất nhiều khó khăn.

Javascript là core của hầu hết các framework frontend phổ biến hiện nay. Cụ thể là Angular, Vue và Reactjs. Nếu không có kiến thức chắc chắn về Javascript, sẽ rất khó để anh em trở thành Frontend developer giỏi.

lộ trình trở thành Javascript Developer
JS không ngáo nha anh em. Cứ yên tâm thành JS developer

Thêm lý do nữa là JS rất dễ để học, sử dụng thì ở khắp mọi nơi. Bàn tới bàn lui hay quay tới quay lui cũng không tránh khỏi việc anh em chạm mặt JS. Từ Frontend web tới Frontend Mobile Apps cho tới Backend.

Chính vì vậy, bắt đầu với Javascript là quyết định khôn ngoan và chính xác.

  Một số cách để viết mã dễ đọc hơn trong JavaScript/Node.js
  Thuật toán tìm kiếm nội suy trong JavaScript

3. Kiến thức nền tảng về JS

Hành trình vạn dặm cũng bắt đầu với 1 bước. Đối với những anh em mới bắt đầu học Javascript, kiến thức nền tảng cơ bản về lập trình là bắt buộc phải có. Cơ bản và basic nhất ở đây có thể hiểu là code viết như thế nào. Các từ như thế nào là từ khoá trong ngôn ngữ lập trình. Nếu anh em nào còn thiếu thì khẩn trương bổ sung phần này. À quên cái IDE, anh em nào quan tâm có thể ghé BEST JavaScript IDE, lựa cho mình 1 cái IDE ưng í để code tới code lui.

lộ trình trở thành Javascript Developer

Quay lại với Javascript Basic. Phần này anh em cần đọc hiểu các kiến thức giới thiệu cơ bản bao gồm:

    • Javascript là gì?
    • Biến trong Javascript (Javascript variable)
    • Mảng trong Javascript (Javascript array methods)
    • Các câu điều kiện (condition statement)
    • Chuỗi (JS string format)

Tất cả những phần này là kiến thức cơ bản, nền tảng cần có cho mọi Javascript Developer. Ngoài ra, ở phần này anh em cũng có thể tìm hiểu thêm kiến thức về Javascript Engines. Engines hoạt động như thế nào? Bằng cách nào tư ngôn ngữ JS có thể chuyển qua machine code để thực thi?

Nhắc tới JS, nếu sử dụng ở phía Frontend và trên browser thì anh em có thể tìm hiểu xem JS có thể làm gì ở trên browser. Cái gì làm được, cái gì không làm được.

Tham khảo việc làm JavaScript tại Hồ Chí Minh trên TopDev

4. Kiến thức nâng cao về JS

Sau khi đã nắm chắc kiến thức cơ bản, tiếp tục với kiến thức nâng cao. Chưa việc gì phải vội framework này hay framework kia nha anh em. Mà cũng đừng khinh JS. Đôi khi chỉ cần JS thôi là đủ. Làm được đủ thứ loằng ngoằng phức tạp ra phết.

Phần kiến thức nâng cao cho JS, anh em sẽ cần tìm hiểu

    • JavaScript Define & Call Functions
    • Cookies trong Javascript
    • OOJS
    • Internal & External JavaScript
    • Javascript Unit Test
    • Typescript và Javascript
    • Java và Javascript sự khác biệt
    • Quicksort trong Javascript
    • Sự khác biệt giữa =, == và ===

lộ trình trở thành Javascript Developer

Ngoài việc tìm hiểu từng kiến thức độc lập, anh em muốn trở thành Javascript Developer giỏi chắc chắn phải đọc sách. Sách viết đầy đủ và sâu hơn các phần anh em đang học. Danh sách 14 cuốn sách hay về JS tui để đây cho anh em JavaScript Books.

Xem việc làm javascript đãi ngộ tốt trên TopDev

5. Các nguồn khác học cho anh em mới bắt đầu

Học lập trình từ xưa đến nay vẫn chú trọng thực hành. Cho dù lý thuyết cực giỏi nhưng không thực hành code thì vẫn không thể code được. Chính vì vậy, anh em cần thực chiến với code. Một số trang web anh em có thể tham khảo

Ngoài ra còn có một kênh có thể học hỏi nhiều hơn là các code base js hoặc framework trên github. Bản thân các codebase đã apply các pattern, thiết kế hoặc dựng codebase chuẩn. Anh em có thể học được rất nhiều.

lộ trình trở thành Javascript Developer

Danh sách một số code base có thể tham khảo:

    • Reactjs có boilerplate này

6. Roadmap cụ thể

Để trở thành Javascript developer giỏi ngoài kiến thức nền tảng còn các kiến thức liên quan hoặc các module khác cần tìm hiểu. Dưới đây là roadmap cụ thể giúp anh em có cái nhìn tổng quan. Như hình dưới đây thì chỉ riêng variable thôi cũng có thêm nhiều topic khác cần xem

    • Variable declarations
    • Hoisting
    • Variable Naming Rules
    • Variable Scopes
    • Block, Function và Global

lộ trình trở thành Javascript Developer

Bản full đầy đủ của roadmap anh em có thể tham khảo tại roadmap.sh

7. Tham khảo

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Xem thêm:

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

Tìm hiểu cấu trúc dữ liệu ArrayMap trong Android

Bài viết được sự cho phép của tác giả Sơn Dương

Trong bài viết này, mình sẽ chỉ cho bạn tại sao và khi nào sử dụng loại dữ liệu ArrayMap để tối ưu hóa hiệu suất ứng dụng Android một cách hiệu quả.

Bất cứ khi nào bạn cần lưu trữ dữ liệu dạng Key => Value, có lẽ HashMap là kiểu dữ liệu đầu tiên bạn nghĩ tới phải không?

Với cấu trúc dữ liệu kiểu HashMap khá là linh hoạt, sử dụng được ở mọi nơi mà chúng ta lại không cần bận tâm quá nhiều về những “tác dụng phụ” của nó.

Nhưng bạn có để ý là mỗi khi sử dụng HashMap, Android Studio lại đưa ra gợi ý rằng bạn nên sử dụng ArrayMap để thay thế Hashmap. Bạn có biết tại sao không? Mình cũng không biết Vậy thì cùng nhau tìm hiểu nhé!

Tối ưu hóa việc sử dụng ArrayMap và SparseArray

Phần này, mình sẽ chỉ cho bạn biết khi nào chúng ta nên sử dụng ArrayMap và cách thức hoạt động của hai kiểu cấu trúc dữ liệu này.

Giới thiệu HashMap và ArrayMap

HashMap nằm trong gói java.utils.HashMap, trong khi ArrayMap nằm trong gói android.support.v4.util.ArrayMap. Do ArrayMap nằm trong gói support.v4 nên nó cũng được hỗ trợ trên các phiên bản Android cũ.

ArrayMap là kiểu dữ liệu cấu trúc dạng generic key => value được thiết kế để tối ưu hóa bộ nhớ hơn so với HashMap truyền thống.

ArrayMap giữ ánh xạ của nó trọng một cấu trúc mảng dữ liệu (là 1 mảng số nguyên là mã băm của mỗi item) và một mảng đối tượng của key -> value. Điều này tránh yêu cầu phải tạo ra thêm Object mỗi khi thêm một entry vào mảng. ArrayMap cũng kiểm soát kích thước của mảng nhanh gọn hơn. Vì chúng ta chỉ cần sao chép các entry trong mảng mà không phải xây dựng lại bảng mã băm.

Lưu ý: không dùng ArrayMap cho cấu trúc dữ liệu có số lượng phần tử lớn. Nhìn chung, nó chậm hơn HashMap truyền thống. Vì ArrayMap dùng thuật toán binary search để tìm kiếm. Thêm mới và xóa phần tử đều yêu cầu phải chèn và xóa các mảng entry.

Với các mảng lưu trữ lên đến hàng trăm phần tử thì sự chênh lệch về hiệu suất dưới 50%. Theo cá nhân mình thì con số này không đáng kể.

  Top 3 phần mềm giả lập Java trên Android tốt nhất

  Android Jetpack là gì? Tại sao nên dùng Android Jetpack?

So tài HashMap với ArrayMap

HashMap

Về cơ bản, Hashmap là một mảng của HashMap.Entry (Entry là lớp bên trong của Hashmap).

Nếu nhìn tổng quan thì một instance của lớp Entry là:

  • 1 non-primitive key
  • 1 non-primitive value
  • Hashcode của một Object
  • trỏ đến Entry tiếp theo

Vậy điều gì sẽ xảy ra khi key => value được chèn vào một HashMap?

  • Mã băm (hashcode) được tính toán và gán giá trị đó cho biến hashCode của EntryClass.
  • Sau đó, sử dụng hashCode để lẩy được index của bucket nơi mà nó lưu trữ.
  • Nếu bucket tồn tại, phần lưu trữ mới sẽ được chèn vào vị trí cuối cùng và được chỉ tới 1 bucket mới tạo thành một danh sách bucket liên kết.
P/s: Bucket là nơi lưu trữ các key có hash gần như nhau. bucket được lưu trong một array nên chi phí truy xuất chỉ là O(1).

bucket

Bây giờ, khi bạn truy xuất HashMap để tìm giá trị của 1 key thì chi phí truy xuất là O(1). Nhưng quan trọng nhất là bộ nhớ càng nhiều, chi phí càng cao.

Tham khảo việc làm Java hấp dẫn trên TopDev

Nhược điểm của HashMap:

  • Autoboxing có nghĩa là mỗi lần chèn sẽ tạo ra đối tượng thừa. Điều này ảnh hưởng đến việc sử dụng bộ nhớ, cũng như thu gom rác.
  • Bản thân HashMap.Entry lại có thêm 1 lớp các đối tượng được tạo ra và thu gom rác (Garbage Collection).
  • Các Buckets được sắp xếp lại mỗi lần HashMap xóa hoặc thêm phần tử. Hoạt động này rất tốn kém tài nguyên, đặc biệt khi số lượng phần tử lớn.

Trong Android, khi nói đến ứng dụng responsive (ứng dụng hiểu thị tương thích với mọi loại màn hình từ phone đến tablet) thì bộ nhớ rất quan trọng. Việc phân bổ và giải phóng bộ nhớ liên tục cùng với việc thu gom rác (Garbage Collection) sẽ làm chậm ứng dụng Android của bạn đáng kể.

Hãy nhớ rằng – trình thu gom rác (Garbage Collection – GC) cũng phải tiêu tốn tài nguyên nhất định.

Khi GC hoạt động, ứng dụng của bạn không thể chạy, dẫn đến ứng dụng bị giật, lag…

ArrayMap

Vậy để tối ưu hóa ứng dụng android thì ArrayMap có gì khác?

ArrayMap sử dụng 2 mảng. Nó sử dụng Object [] mArray để lưu trữ các đối tượng , còn int [] mHashes để lưu trữ mã băm (hashcode).

Khi một cặp key -> value được chèn vào mảng thì:

  • key -> value được autoboxed.
  • Key của đối tượng đựo chèn vào vị trí khả dụng kế tiếp trong mArray[ ].
  • Value của đối tượng được chèn ngay sau vị trí key trong mArray[ ].
  • hashCode của key được tính toán và đặt tại mHashes[ ] tại vị trí tiếp theo.

Khi cần lấy giá trị theo key, bạn cần:

  • Tính mã băm (hashCode) của key.
  • Dùng Binary search để tìm mã hashcode
  • Khi gặp 1 danh sách hash, chúng ta suy ra vị trí của key là 2*index trong mArray và vị trí của value là 2*index+1.

Tại đây, độ phức tạp từ O(1) đã lên tới O(logN).

Một số đề xuất sử dụng cấu trúc dữ liệu thay thế:

  • ArrayMap<K,V> thay cho HashMap<K,V>
  • ArraySet<K,V> thay cho HashSet<K,V>
  • SparseArray<V> thay cho HashMap<Integer,V>
  • SparseBooleanArray thay cho HashMap<Integer,Boolean>
  • SparseIntArray thay cho HashMap<Integer,Integer>
  • SparseLongArray thay cho HashMap<Integer,Long>
  • LongSparseArray<V> thay cho HashMap<Long,V>

Hy vọng qua bài viết trên, bạn có thể áp dụng ngay tối ưu hóa ứng dụng Android một cách thành công. Có điều gì thắc mắc hoặc góp ý thì comment ngay bên dưới nhé!

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

Xem thêm:

Tìm việc làm IT mọi cấp độ tại TopDev

Child process trong Node.js là gì? – Khi nào cần sử dụng fork và spawn?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Có một lời khuyên mà chắc hẳn ai làm việc với Node.js đều phải thuộc lòng đó là “đừng bao giờ chặn vòng lặp sự kiện”. Chặn ở đây có nghĩa là không để cho Event Loop được thực thi chức năng vốn có của nó. Node.js chỉ có một luồng để xử lý mã JavaScript, nếu một công việc chiếm tương đối thời gian để xử lý thì nó sẽ gây ra một cuộc tắc nghẽn nghiêm trọng trong luồng chính. Hay nói cách khác, tất cả cuộc gọi API có thể sẽ không bao giờ được phản hồi cho đến khi công việc đó xong.

Biết được vấn đề, tất nhiên Node.js phải cung cấp cho chúng ta một số cách để giải quyết. Thay vì gọi những hàm đồng bộ thì hãy chuyển qua gọi hàm bất đồng bộ, ví dụ như cùng là đọc file nhưng readFile sẽ được khuyên dùng hơn readFileSync bởi vì readFile là hàm bất đồng bộ. Ngoài ra, nếu công việc đòi hỏi khả năng tính toán cao của CPU như xử lý hình ảnh, video… thì có một giải pháp khác là sử dụng module child_process được tích hợp trong Node.

Có thể nói child_process là giải pháp sớm nhất mà Node.js đưa ra, sau này chúng ta có thêm module worker_threads cũng có khả năng giải quyết được vấn đề chặn vòng lặp sự kiện. Tôi đã có một bài về Worker threads là gì? Bạn đã biết khi nào thì sử dụng Worker threads trong node.js chưa?, bạn đọc có thể tham khảo thêm về khái niệm cũng như cách dùng nó. Nhưng trong phạm vi bài viết này, chúng ta hãy tạm quên đi Worker threads và tập trung vào xem Child process là gì và nó được sử dụng như thế nào nhé.

  Kỹ thuật debug ứng dụng viết bằng Node.js hiệu quả

  Một số cách để viết mã dễ đọc hơn trong JavaScript/Node.js

Child process là gì?

Child process là một module của Node.js cho phép tạo ra các tiến trình con (process) độc lập để thực hiện các tác vụ cụ thể. Nó cho phép Node.js chạy nhiều tác vụ đồng thời và tận dụng tối đa sức mạnh của máy chủ. Khi tạo ra một child process, nó sẽ chạy độc lập với parent process (tiến trình cha) và có thể giao tiếp với cha qua luồng (stream), các sự kiện (event)… Các child process được tạo ra có tài nguyên độc lập, giúp giảm thiểu tác động đến các tiến trình khác khi xử lý tác vụ nặng hoặc chẳng may bị lỗi.

Cho dễ hình dung, một ứng dụng Node.js khi khởi động thì nó là một process với một bộ V8 Engine được tạo ra. Để ngăn vòng lặp sự kiện bị chặn, cách tốt nhất là tạo ra một tiến trình khác để xử lý. Khi đó, nó có thể chạy độc lập với tiến trình cha, xử lý rồi trả lại kết quả cho tiến trình cha thông qua một kênh giao tiếp như đã kể đến ở bên trên.

Tùy thuộc vào cách child process được tạo ra mà nó có cách thực hiện nhiệm vụ khác nhau. Có hai cách phổ biến để tạo ra child process là spawn và fork. Trong khi fork cố gắng tạo ra một “bản sao” của process cha, có nghĩa là “clone” ra một V8 Engine để xử lý tác vụ thì spawn lại chỉ đơn giản là tạo ra một process thực hiện câu lệnh nào đó. Chi tiết hơn, chúng ta hãy đi qua từng phương thức xem chúng thực chất là như thế nào.

Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev

spawn

spawn là một phương thức để tạo ra một child process mới. Khi sử dụng spawn, ta có thể truyền cho child process các tham số, tùy chọn và đối số cần thiết để thực thi lệnh hoặc file thực thi.

child_process.spawn(command[, args][, options])

Khi child process được tạo ra bằng spawn, nó có thể hoạt động độc lập với process cha, và có thể trao đổi dữ liệu với process cha thông qua pipe hoặc stream. Ta cũng có thể quản lý child process bằng cách theo dõi các sự kiện để biết khi nó hoàn thành hoặc gặp lỗi.

Ví dụ về cách sử dụng spawn hết sức đơn giản:

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

Ở dòng số 2 chúng ta đang tạo ra một child process và nó thực hiện câu lệnh ls với các tùy chọn ‘-lh’ và ‘/usr’. Hay nói cách khác, đó là một command:

$ ls -lh /usr

Sau đó, sử dụng on để lắng nghe sự kiện từ child pocess để nhận dữ liệu ở process cha. Trong ví dụ trên, on đang “lắng nghe” trên 3 sự kiện của child process là thành công, thất bại và đóng tiến trình con.

Nếu để ý, có thể thấy trong spawn có thể chạy một lệnh node:

spawn('node', ['index.js']);

Bạn có thể chạy một file .js bằng cách trên trong tiến trình mới, hoặc nhanh hơn là sử dụng fork để đơn giản hóa khả năng sử dụng như trong phần dưới đây.

fork

fork cũng là một phương thức để tạo ra một child process mới, nó là một trường hợp đặc biệt của spawn, hay nói cách khác fork chỉ là một hàm dựa trên spawn. Child process này sẽ chạy một phiên bản độc lập của mã JavaScript được chỉ định. Mã này có thể được đặt trong một file hoặc một function được truyền dưới dạng tham số cho hàm fork.

child_process.fork(modulePath[, args][, options])

Hàm fork sẽ tạo ra một child process mới, được “sao chép” từ process cha (bao gồm những thứ như tạo ra hẳn một bộ V8 engine mới – điều này làm cho fork trở nên tốn kém về mặt tài nguyên), nhưng với một môi trường độc lập và một ID process khác biệt. Child process này có thể thực hiện các nhiệm vụ độc lập với process cha, có thể giao tiếp với process cha thông qua một kênh IPC (Inter-Process Communication) được cung cấp bởi Node.js.

Với fork, ta có thể sử dụng các child process để chia sẻ tải công việc, xử lý các tác vụ nặng, chạy các đoạn mã không đồng bộ mà không ảnh hưởng đến performance của process cha.

Ví dụ, bạn có một file fibonacci.js đơn giản như sau:

function fibonacci(n) {
  if (n < 2) {
    return n;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}

process.on('message', (msg) => {
  const result = fibonacci(msg);
  process.send(result);
});

Sau đó, tạo ra một child process để xử lý việc gọi hàm fibonacci() trong một tiến trình riêng biệt.

const { fork } = require('child_process');

const child = fork('fibonacci.js');

child.on('message', (result) => {
  console.log(`Fibonacci: ${result}`);
});

child.send(10);
});

Khi nào nên sử dụng child process cũng như fork hoặc spawn?

Trước tiên, phải nói rằng lựa chọn sử dụng child process còn phụ thuộc vào bài toán đang cần giải quyết. Vì chi phí để tạo ra một process là khá tốn kém cho nên không phải cứ tạo ra càng nhiều child process thì ứng dụng của bạn sẽ xử lý càng nhanh. Ngược lại, nó có thể nhanh chóng làm cạn kiệt tài nguyên máy chủ cũng như chi phí liên lạc giữa các tiến trình với nhau.

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

Xem thêm:

Xem thêm các việc làm công nghệ hấp dẫn trên TopDev

5 công cụ AI hữu ích trong năm 2024 dành cho Developer

Năm 2023 đánh dấu một bước tiến mới mạnh mẽ trong lĩnh vực Trí Tuệ Nhân Tạo (AI), hàng loạt các công cụ AI mới được ra đời để giải quyết nhiều vấn đề khác nhau. Các công ty cũng đang dần ứng dụng AI vào quy trình làm việc để tối ưu năng suất công việc. Vì vậy, để bắt kịp thời đại, bài viết này sẽ tổng hợp 5 công cụ AI hữu ích nhất cho các developer.

Những tác động tích cực của AI đến nghề lập trình

5 công cụ AI hữu ích trong năm 2023

AI đang ngày càng được ứng dụng rộng rãi trong lĩnh vực lập trình, mang lại nhiều lợi ích tích cực cho các lập trình viên. Dưới đây là một số tác động tích cực của AI đến nghề lập trình:

  • Tăng hiệu suất công việc: Các công cụ AI có thể tự động hóa các nhiệm vụ lập trình lặp đi lặp lại, giúp các lập trình viên tiết kiệm thời gian và công sức. Điều này cho phép các lập trình viên tập trung vào các nhiệm vụ sáng tạo và phức tạp hơn.
  • Nâng cao chất lượng mã: Các công cụ AI có thể giúp các lập trình viên tìm ra và khắc phục lỗi trong mã, đảm bảo chất lượng mã cao hơn. Điều này giúp các lập trình viên tạo ra các sản phẩm chất lượng cao hơn và giảm thiểu rủi ro lỗi.
  • Mở ra các cơ hội mới: AI đang tạo ra các cơ hội mới cho các lập trình viên, chẳng hạn như phát triển các ứng dụng AI mới và sáng tạo. Điều này giúp các lập trình viên phát triển kỹ năng và kiến thức của mình để đáp ứng nhu cầu của thị trường.

Nhìn chung, AI có tiềm năng mang lại nhiều lợi ích tích cực cho nghề lập trình. Tuy nhiên, các lập trình viên cũng cần chuẩn bị để thích ứng với những thay đổi do AI mang lại. Các lập trình viên cần học cách sử dụng các công cụ AI để nâng cao hiệu suất công việc và chất lượng mã. Ngoài ra, các lập trình viên cũng cần phát triển các kỹ năng mới để đáp ứng nhu cầu của thị trường trong tương lai.

5 công cụ AI nổi bật dành cho Developer

Sourcegraph Cody

Sourcegraph Cody là một con AI được thiết kế để giúp lập trình viên viết code dễ dàng hơn. Bạn có thể hỏi Cody các câu hỏi về code của mình bằng cách sử dụng giao diện trò chuyện hoặc trực tiếp trong trình soạn thảo mã. Cody có các lệnh nhanh cho các thao tác phổ biến, chẳng hạn như thêm tài liệu, phát hiện bug, debug,…

Sourcegraph Cody

Cody có thể được sử dụng để:

  • Viết code: Cody có thể viết code từ các yêu cầu của bạn hoặc dữ liệu đầu vào.
  • Hiểu mã hiện có: Cody có thể trả lời các câu hỏi về đoạn code hiện có, chẳng hạn như đoạn code này làm gì, nó được gọi khi nào và nó sử dụng các API nào.
  • Sửa mã: Cody có thể đề xuất các sửa lỗi cho mã hiện có.
  • Dịch code: Cody có thể dịch từ ngôn ngữ lập trình này sang ngôn ngữ khác, chẳng hạn như từ Java sang Go,…
  Sự khác nhau giữa AI, Machine Learning và Deep Learning

  Dân IT có thể được ChatGPT hỗ trợ code tự động hóa như thế nào?

Bayou

Bayou là một hệ thống AI được phát triển bởi một nhóm các nhà khoa học máy tính tại Đại học Rice, được hỗ trợ bởi cả DARPA và Google. Bayou là một hệ thống học sâu (deep learning) có thể viết mã Java.

Bayou vẫn đang trong giai đoạn phát triển, nhưng nó đã được chứng minh là có thể viết mã Java chất lượng cao. Bayou có thể được sử dụng để tạo các ứng dụng mới, sửa lỗi trong mã hiện có và tự động hóa các nhiệm vụ lập trình.

Clever-Commit

Clever-Commit là một công nghệ AI được phát triển bởi Ubisoft và Mozilla. Nó là một trợ lý giúp hỗ trợ viết code , sử dụng dữ liệu từ hệ thống tracking bug và codebase để phát hiện bug dễ dàng hơn.

Việc làm AI lương thưởng hấp dẫn, mới nhất dành cho bạn!

Deepcode

DeepCode là một công cụ AI được phát triển bởi Google AI. Nó sử dụng học máy để phát hiện lỗi và các vấn đề tiềm ẩn trong code. DeepCode hoạt động bằng cách học hỏi từ một tập dữ liệu khổng lồ gồm các lỗi mã và các bản sửa lỗi. Nó sử dụng kiến thức này để phân tích code và xác định các khu vực có thể có lỗi.

Deepcode

Các lâp trình viên có thể sử dụng Deepcode để review code giúp tiết kiệm thời gian và mang lại hiệu quả cao. Hiện tại Deepcode đang được tích hợp trên nhiều nền tảng như GitHub, GitLab hay Bitbucket Server.

Embold

Embold là một công cụ AI sử dụng các kỹ thuật xử lý ngôn ngữ tự nhiên (NLP), máy học, các thuật toán để tìm ra lỗi. Embold giúp các lập trình viên phát triển và tạo phần mềm chất lượng cao trong thời gian ngắn. Embold có thể hoạt động trên cloud hoặc dưới dạng một plugin miễn phí trong Intellij IDEA.

Tóm lại, với 5 công cụ AI TopDev vừa giới thiệu sẽ giúp các lập trình viên code hiệu quả hơn. Hy vọng rằng, trong tương lai các công cụ này sẽ cải thiện và phát triển hơn nữa, bên cạnh đó sẽ có thêm nhiều công cụ mới ưu việt hơn, giúp giải quyết nhiều vấn đề của ngành lập trình. Theo dõi TopDev để cập nhật thêm nhiều bài viết hữu ích bạn nhé!

Xem thêm:

Xem thêm tuyển dụng IT mới nhất tại TopDev

Lập trình nhúng và kỹ năng cần có của một Embedded System

Sự phát triển của IoT cùng cuộc cách mạng công nghiệp 4.0 giúp các anh em lập trình viên có thêm một lựa chọn tiềm năng về nghề là ngành lập trình nhúng. Nhu cầu tuyển dụng với mức đãi ngộ cao khiến vị trí lập trình nhúng trở nên hot hơn trong thời gian vừa qua. Bài viết hôm nay chúng ta cùng nhau tìm hiểu xem lập trình nhúng là gì, lập trình nhúng là làm gì và những kỹ năng cần có để làm lập trình nhúng đáp ứng được yêu cầu công việc nhé.

Lập trình nhúng là gì?

Trước tiên chúng ta cần hiểu về hệ thống nhúng.

Embedded System; đây là thuật ngữ để nói về một hệ thống có khả năng tự trị được nhúng vào một môi trường hoặc hệ thống mẹ. Một hệ thống nhúng được tích hợp cả phần cứng và phần mềm để giải quyết được các bài toán chuyên dụng trong công nghiệp, tự động hóa, truyền tin,…

Lập trình nhúng là gì?

Lập trình nhúng – Embedded Programing là loại lập trình để phát triển các ứng dụng hoặc các thành phần bổ trợ, trình điều khiển thiết bị phần cứng nhằm xây dựng, phát triển và quản trị các hệ thống nhúng. Cụ thể, các ứng dụng của lập trình nhúng bao gồm:

  • Ứng dụng trong các ngành điện tử, viễn thông, máy tính, ngân hàng,… thông qua các thiết bị sử dụng kết nối với hệ thống lớn tùy theo ngành.
  • Ứng dụng trong công nghiệp, tự động hóa với các hệ thống robot hay các dây chuyền sản xuất
  • Ứng dụng trong lĩnh vực thiết bị thông minh, smarthome, smartcity,… với các phần cứng kết nối trực tiếp vào mạng Internet hay chúng ta thường nhắc đến là IoT
  • Ứng dụng vào các thiết bị điện dân dụng hàng ngày từ máy giặt, tủ lạnh, tivi, điều hòa với các trình điều khiển, kết nối thông minh và tự vận hành.

  Bộ câu hỏi phỏng vấn Embedded Developer chinh phục nhà tuyển dụng

  Một số mẹo cho việc phát triển ứng dụng hệ thống nhúng

Lập trình nhúng là làm gì?

Ngành lập trình nhúng có đặc thù khác với lập trình thông thường là việc sẽ thường xuyên làm việc và xử lý cùng phần cứng. Cũng vì thế mà thông thường lập trình nhúng sẽ có 2 hướng đi chính dành cho các lập trình viên gồm:

Phần mềm nhúng

Embedded software là công việc lập trình thực hiện việc phát triển các sản phẩm là ứng dụng, phần mềm để nhúng vào các sản phẩm khác như phần cứng khác hoặc phần mềm hệ thống. Các sản phẩm của phần mềm nhúng gồm trình điều khiển thiết bị (driver), hệ điều hành, phần mềm ứng dụng,…

Lập trình nhúng là gì?

Công việc của một kỹ sư phần mềm nhúng tương tự như các lập trình viên ngành khác, đó là viết code, test code, viết các tài liệu mô tả cùng việc tham gia vào quá trình triển khai, phát triển, vận hành và bảo trì phần mềm. 

Ứng tuyển các vị trí Embedded tuyển dụng trên TopDev

Phần cứng nhúng

Embedded Hardware là công việc liên quan nhiều đến xử lý phần cứng bao gồm từ quá trình thiết kế các loại board mạch, thiết kế PCB (bảng mạch in) đến việc test, xây dựng, lựa chọn linh kiện, sửa chữa, bảo hành. Những ký sư phần cứng nhúng là những người sử dụng tốt các kiến thức về điện tử, hàn mạch, sửa mạch; cùng các kỹ năng sử dụng thiết bị đo lường, máy móc liên quan đến bảng mạch điện tử.

Lập trình nhúng là gì?

Một số công cụ phổ biến cho lập trình nhúng:

  • Cross ToolChains (Linux): trình biên dịch chạy trên Linux
  • Keil (Windows): trình biên dịch chạy trên Windows
  • Putty.exe: hỗ trợ truy cập Secure Shell

Kỹ năng cần có để làm lập trình nhúng

Để làm được lập trình nhúng, chúng ta cần trang bị kiến thức cả về phần lập trình và hiểu biết về phần cứng. Đối với phần lập trình, ngôn ngữ thường được sử dụng cho lập trình nhúng là C nhờ sự tối ưu dành cho các phần cứng nhỏ gọn của nó. Vì thế bạn nhất thiết phải học lập trình C và đạt level hiểu rõ và sâu về ngôn ngữ này. Ngoài ra là kiến thức liên quan đến hệ thống, về hệ điều hành, về kiến trúc máy tính và các loại cổng giao tiếp, nó sẽ giúp bạn hiểu và xây dựng được các thành phần phần mềm một cách hợp lý. 

Các thành phần cơ bản của hệ thống nhúng bao gồm:

  • ROM: chứa chương trình và các dữ liệu cố định
  • RAM: lưu chương trình thực thi và dữ liệu tạm
  • MCU: bộ xử lý tính toán hệ thống
  • Các thiết bị ngoại vi

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

Nắm vững các thành phần trên sẽ giúp bạn hiểu cách thức phần mềm nhúng hoạt động và những phần mềm mà bạn sẽ xây dựng. Ngoài ra thì bạn cũng nên trang bị tốt kiến thức về cấu trúc dữ liệu và giải thuật vì các phần mềm nhúng luôn cần sự tối ưu do giới hạn phần cứng của nó.

Lập trình nhúng là gì?

Đối với các kỹ sư làm phần cứng nhúng, kỹ năng quan trọng nhất là thiết kế, xây dựng và sửa chữa các board mạch. Vì vậy bạn cần nhiều kỹ năng về thiết kế, test board mạch cũng như hiểu biết về lựa chọn linh kiện nhằm build-up những bản mạch đáp ứng nhu cầu của hệ thống và dự án.

Lập trình nhúng là một công việc đòi hỏi sự cẩn thận, tỉ mỉ cùng đam mê yêu nghề; ngoài ra kỹ năng đọc hiểu tài liệu tiếng Anh cũng là một đòi hỏi cần thiết.

Kết bài

Qua bài viết này, chúng ta đã cùng nhau trả lời được cho câu hỏi lập trình nhúng là gì, công việc của một lập trình nhúng là làm gì và cần những kỹ năng nào để trở thành một lập trình viên hệ thống nhúng. Đây là một vị trí đang được nhiều công ty, tổ chức tuyển dụng với mức đãi ngộ cao và hấp dẫn. Hy vọng bài viết hữu ích dành cho các bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Đừng bỏ lỡ tin tuyển dụng IT mới nhất trên TopDev

Ý nghĩa từng câu lệnh trong C++, giải thích đơn giản, dễ hiểu

Giải thích ý nghĩa từng câu lệnh trong C++ là điều cực kì quan trọng cho anh em mới bắt đầu học code. Sử dụng ngôn ngữ lập trình này không khó, quan trọng là cách giải thích ban đầu có thể khiến anh em confuse, rối rắm.

Bài viết này cung cấp cho anh em giải thích tỉ mỉ tường tận về từng thành phần, cấu trúc và ý nghĩa của nó trong câu lệnh C++.

Rồi, bắt đầu với từng phần thôi anh em!

Ý nghĩa từng câu lệnh trong C++
Đừng vội đi đâu xa anh em, C++ còn ngon và hấp dẫn lắm luôn

1. Header file

Header theo nghĩa là đầu tiên đối với anh em làm web. Tương tự đối với C++, header mô tả các hàm và macro ta sẽ sử dụng trong chương trình C++ của anh em. Thường được đặt ở đầu chương trình. Nói thường cũng không đúng lắm, phải là luôn được đặt ở đầu chương trình C++.

Trong dòng 1, ta sử dụng #include<iostream> để yêu cầu trình biên dịch đưa vào một thư viện tệp tiêu đề iosstream lưu trữ định nghĩa của cin và cout ta sử dụng cho đầu vào và đầu ra.

Include ở đâu được hiểu là bao gồm, có bao gồm iostream. Cú pháp như sau:

#include <library_name>

2. Namespace

Tiếp tới là Namespace, namespace thường được sử dụng để cung cấp phạm vi hoặc vùng nơi chúng ta xác định mã. Vùng ở đây anh em hiểu là vùng độc lập, mỗi vùng có một cái tên. Hai vùng để tránh conflict với nhau.

Cú pháp của phần này như sau:

using namespace std;

  Các kiểu dữ liệu trong lập trình C/C++ (Data type)

  So sánh giữa C++ và Golang 

3. Main function

Hàm hay còn gọi là function là một khối trong chương trình C++ bao gồm các bước hướng dẫn để thực hiện một số nhiệm vụ cụ thể. Tất cả các code thực thi trong chương trình C++ đều bắt đầu từ hàm main. Anh em nhớ kĩ điều đó.

Ý nghĩa từng câu lệnh trong C++
Nguồn ảnh / Source: unstop.com
Còn về return, hàm main luôn yêu cầu trả về kết quả ở dạng số, cho biết kế quả thực thi chương trình. Kiểu chạy pass hay không pass, chạy đúng hay không đúng.

int main() {

    ... code ....
    return 0;
}

Nhiều vị trí tuyển dụng C++ đãi ngộ tốt trên TopDev

4. Blocks

Block là một loạt các dòng code C++ được gói gọn trong cặp ngoặc {}, cặp ngoặc này tương ứng với bắt đầu và kết thúc. Anh em nhớ kĩ là code C++ thực thi từ trên xuống dưới nha.

Như ví dụ phía dưới sắp show cho anh em thì đoạn code bắt đầu từ dòng số 4 và kết thúc ở dòng số 9

{      
  // Body of the Function  
    return 0;
}

5. Semicolons

Semicolon ở đây là dấu chấm phẩy, cái này dùng để kết thúc mỗi câu lệnh thực thi trong chương trình C++. Khi trình biên dịch đi qua và gặp dấu chấm phẩy, nó hiểu rằng một câu lệnh, một hàm gọi hoặc bất cứ thứ gì khác đã kết thúc.

Chính vì vậy, anh em không thể dùng ; trong biến, trong tên hàm,…

any_statement ;

6. Identifiers (định danh)

Định danh ở đây được hiểu là định nghĩa cho tên biến, tên hàm hoặc định nghĩa kiểu dữ liệu được sử dụng. Lưu ý về định danh là định danh có thể bao gồm các ký tự chữ cái viết hoa và viết thường, dấu gạch dưới và chữ số. Chữ cái đầu tiên phải là dấu gạch dưới hoặc bảng chữ cái.

int num1 = 24;
int num2 = 34;

Như ví dụ này thì num1 và num2 định nghĩa cho kiểu dữ liệu kiểu int. Định danh cho data type (kiểu dữ liệu)

7. Từ khoá

Trong ngôn ngữ lập trình C++, có một số từ khoá được sử dụng với ý nghĩa đặc biệt. Anh em cần phải học thuộc ý nghĩa và trường hợp sử dụng. Đối với các từ khoá này, nó không thể được sử dụng cho định danh.

Trong trường hợp này, int, return, và using là các từ khóa được sử dụng trong chương trình. Nó là cách định nghĩa được sử dụng từ đầu trong ngôn ngữ C++

int           void          if            while          for           auto            bool        break
     
this         static        new            true          false          case            char        class

8. Một đoạn code trong C++

Dưới đây là ví dụ đoạn code chương trình C++ đơn giản nhất anh em thường gặp trong C++. Xin phép được giải thích ý nghĩa từng dòng cho anh em.

#include <iostream>
using namespace std;

int main() {
  cout << "Hello World!";
  return 0;
}

Dòng 1: #include <iostream> là thư viện sử dụng có tên iosstream, thư viện này cho phép ta làm việc với các đầu vào (input) và đầu ra (output). Vào và ra ở đây trong ví dụ này được hiểu là xuất ra màn hình. Ví dụ như dòng số 5 (out ở đây nghĩa là output), ghi ra màn hình. Đoạn này trong code C++ thường gọi là header file, thêm các chức năng vào cho chương trình C++

Dòng 2: using namespace std; dùng namespace std ở đây có nghĩa anh em có thể sử dụng tên cho các đối tượng và biến (variables) từ thư viện chuẩn (standard library)

Dòng 3: dòng này là dòng trắng, C++ sẽ bỏ qua dòng trắng, anh em có thể thoải mái add dòng trắng, miễn sao code dễ dọc, dễ maintain là ok

Dòng 4: dòng này luôn xuất hiện ở mọi chương trình C++, anh em nhớ điều này. Đã là code C++ thì phải có int main(). Cái này là function, toàn bộ code C++ sẽ được gói gọn trong cặp ngoặc {} sẽ được thực thi.

Nguồn ảnh / Source: geekforgeeks

Dòng 5: c-out (anh em cứ đọc là see out), cái này là object, thường sử dụng với cặp ngoặc nhỏ hơn <<, sử dụng để in chương trình ra ngoài màn hình. Như trong ví dụ này thì chữ Hello Worlds sẽ in ra.

Một điều cần lưu ý là tất cả code C++ đều kết thúc bằng chấm phẩy nha anh em (;)

Dòng 6: dòng này trả về 0, hàm int main sẽ luôn phải có giá trị trả về là giá trị int.

Dòng 7: dòng này là dấu đóng ngoặc, kết thúc chương trình C++

9. Tham khảo

Anh em có thể tham khảo kĩ hơn các mục mình viết ở trên bằng cách đọc detail hơn qua link dưới đây

Cảm ơn anh em đã dành thời gian đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Xem thêm:

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

[Update] Bắt nhịp 8 xu hướng tuyển dụng IT nổi bật trong năm 2023 – 2025

Năm 2023, các doanh nghiệp phải đối mặt với muôn vàn thách thức do tác động từ tình trạng suy thoái kinh tế, đại dịch covid vẫn đang tiếp diễn và xung đột vũ trang ngày càng gay gắt. Những thay đổi mạnh mẽ về mặt xã hội cũng đã ảnh hưởng rất nhiều đến nhu cầu tìm việc của các nhân sự ngành IT. Vậy nên, để tuyển dụng được nhân tài chất lượng, nhà tuyển dụng cần “đón đầu” xu hướng để lên kế hoạch tuyển dụng phù hợp, thay đổi và thích nghi với thị trường đầy biến động như hiện nay.

Bài viết này TopDev sẽ cho bạn góc nhìn tổng thể về những xu hướng tuyển dụng IT nổi bật nhất trong 3 năm tới. Bắt đầu thôi nào!

Những thách thức trong thị trường việc làm IT

Ngành CNTT đang đứng trước vô vàn thách thức, theo Báo cáo thị trường IT Việt Nam năm 2023 do TopDev phát hành, có 4 thách thức mà ngành IT cần phải vượt qua:

1. Suy thoái kinh tế

Những thách thức trong thị trường việc làm IT

  • Tuyển dụng đóng băng và mất việc làm: Nhiều tổ chức đã tạm ngưng kế hoạch tuyển dụng hoặc giảm lượng nhân viên thông qua việc sa thải, điều này dẫn đến giảm cơ hội việc làm trong lĩnh vực CNTT khi các công ty ưu tiên các biện pháp cắt giảm chi phí và tập trung vào việc duy trì sự ổn định tài chính.
  • Giảm ngân sách CNTT: Các tổ chức thắt chặt ngân sách và giảm chi tiêu cho các dự án và sáng kiến CNTT. Điều này dẫn đến giảm nhu cầu về chuyên gia CNTT khi các công ty thu hẹp quy mô triển khai, nâng cấp hoặc mở rộng công nghệ mới.
  • Dự án CNTT bị trì hoãn hoặc bị hủy bỏ: Sự bất ổn về kinh tế có thể khiến các công ty trì hoãn hoặc hủy bỏ các dự án CNTT đã lên kế hoạch. Các dự án quy mô lớn đòi hỏi đầu tư đáng kể có thể bị tạm dừng cho đến khi điều kiện kinh tế được cải thiện.
  • Tăng cường cạnh tranh việc làm: Thị trường việc làm CNTT đã trở nên cạnh tranh hơn khi số lượng vị trí công việc sẵn có giảm đi trong khi số lượng người tìm việc có khả năng tăng lên. Điều này có thể dẫn đến mức độ cạnh tranh cao hơn cho các vị trí CNTT hiện có, khiến các lập trình viên gặp khó khăn hơn trong việc đảm bảo cơ hội việc làm mới.

2. Cần nhiều lập trình viên có chuyên môn cao hơn

Trong tình hình khó khăn với quỹ lương eo hẹp hơn và yêu cầu hoạt động kinh doanh ngày càng tối ưu hơn, nhu cầu về các lập trình viên chuyên môn cao và giàu kinh nghiệm sẽ tăng lên để đẩy nhanh các quy trình và đảm bảo phát triển các sản phẩm chất lượng cao. Điều quan trọng cần lưu ý là việc trở thành một lập trình viên cấp cao không chỉ được quyết định bởi số năm kinh nghiệm mà còn là sự kết hợp của nhiều yếu tố khác nhau.

Mặc dù có rất nhiều lập trình viên trẻ, tài năng ở Việt Nam nhưng nhiều người vẫn thiếu các kỹ năng mềm cần thiết để làm việc hiệu quả như giao tiếp, làm việc nhóm, kỹ năng tự tổ chức và giải quyết vấn đề. Một thách thức khác là rào cản ngôn ngữ. Nhiều lập trình viên Việt Nam có thể chưa có trình độ thành thạo cần thiết để làm việc với khách hàng quốc tế hoặc cộng tác với các nhóm lập trình ở quốc gia khác.

  Top 6 công việc IT phát triển nhanh nhất tại Việt Nam

  Tổng quan mức lương lập trình viên Việt Nam 2023

3. Giữ chân nhân viên & sự kỳ vọng cao về lương

Thông thường các công ty phần mềm tuyển người, đào tạo họ nhưng phải chứng kiến việc họ rời khỏi khi họ đã có đủ kinh nghiệm trong công việc. Bất kỳ công ty nào cũng cần đầu tư để nhân viên thích ứng với quy trình làm việc.

Giữ chân nhân viên & sự kỳ vọng cao về lương
Biểu đồ lương nhân sự IT

Trong vài năm qua, ngành công nghệ đã chứng kiến mức lương trung bình tăng đáng kể. Các vai trò cấp quản lý thường được trả mức lương cao nhất, trong khi các lập trình viên Web và lập trình viên theo đuổi các xu hướng mới đã trải qua mức tăng đáng kể nhất. Trong thị trường việc làm cạnh tranh ngày càng cao, người tìm việc có quyền lựa chọn những nhà tuyển dụng đáp ứng được mức lương mong đợi của họ. Đó là lý do tại sao doanh nghiệp nên đưa ra chính sách lương công bằng và minh bạch, đáp ứng nhu cầu của lực lượng lao động của mình.

4. Sự trỗi dậy của trí tuệ nhân tạo (AI)

  • Tự động hóa các tác vụ thường xuyên: Nhu cầu tuyển dụng các công việc liên quan đến nhập dữ liệu thủ công, phân tích cơ bản hoặc ra quyết định dựa trên quy tắc có thể giảm đi.
  • Thay đổi về yêu cầu kỹ năng: Nhu cầu ngày càng tăng đối với những cá nhân có thể phát triển, triển khai và duy trì các hệ thống và thuật toán AI.
  • Chuyển đổi vai trò công việc hiện tại: Tạo ra các vị trí mới tập trung vào việc quản lý và bảo trì hệ thống AI.
  • Tăng cường tập trung vào các kỹ năng đặc trưng của con người: Ngày càng chú trọng vào các kỹ năng đặc trưng của con người, chẳng hạn như tính sáng tạo, tư duy phản biện, giải quyết vấn đề, trí tuệ cảm xúc và ra các quyết định phức tạp.
  • Nhu cầu quản lý và phân tích dữ liệu: Nhu cầu về Data Engineer, Data Analyst và Data Scientist đang có xu hướng tăng cao để đảm bảo chất lượng và độ chính xác của dữ liệu được sử dụng trong các hệ thống AI.

Tham khảo việc làm AI hấp dẫn, lương cao trên TopDev

Xu hướng tuyển dụng IT tại Việt Nam 2023 – 2025

1. Nhu cầu nhân tài công nghệ vẫn tăng

Nhu cầu nhân tài công nghệ

Nhu cầu về nhân tài công nghệ tiếp tục tăng trong rất nhiều ngành kinh tế số lẫn truyền thống. Các doanh nghiệp đang ngày càng dựa vào công nghệ để thúc đẩy đổi mới, nâng cao hiệu quả và duy trì tính cạnh tranh, dẫn đến nhu cầu cao hơn về các nhân tài công nghệ.

2. Tuyển dụng dựa trên kỹ năng & upskill/reskill

Các nhà tuyển dụng đang chú trọng hơn vào các kỹ năng thay vì chỉ dựa vào bằng cấp truyền thống. Tuyển dụng dựa trên kỹ năng bao gồm việc đánh giá ứng viên dựa trên kỹ năng thực tế, kinh nghiệm đã được chứng minh và khả năng thích ứng với công nghệ mới. Các công ty cũng đang đầu tư vào các chương trình nâng cao và đào tạo lại kỹ năng để phát triển lực lượng lao động hiện có và thu hẹp khoảng cách kỹ năng.

3. Tuyển dụng dựa trên AI

Các công cụ và nền tảng hỗ trợ AI đang ngày càng được sử dụng nhiều hơn trong quá trình tuyển dụng công nghệ. Những công cụ này giúp hợp lý hóa việc tìm nguồn ứng viên, sàng lọc sơ yếu lý lịch và đánh giá ứng viên bằng cách tận dụng các thuật toán máy học và xử lý ngôn ngữ tự nhiên. Các công cụ tuyển dụng dựa trên AI nhằm mục đích nâng cao hiệu quả, giảm sự thiên vị và xác định những ứng viên phù hợp nhất.

4. Employer Branding và trải nghiệm ứng viên

Employer Branding và trải nghiệm ứng viên

Các tổ chức đang tập trung vào xây dựng thương hiệu nhà tuyển dụng để thu hút nhân tài công nghệ hàng đầu. Họ tập trung nêu bật văn hóa, giá trị và cơ hội phát triển – học hỏi của công ty. Cải thiện trải nghiệm của ứng viên trong suốt quá trình tuyển dụng đã trở thành ưu tiên hàng đầu của các công ty nhằm cung cấp trải nghiệm tích cực và cá nhân hóa cho ứng viên.

5. Kỹ năng mềm và sự phù hợp về văn hóa

Bên cạnh các kỹ năng cứng về công nghệ, nhà tuyển dụng cũng bắt đầu chú trọng nhiều hơn đến các kỹ năng mềm và sự phù hợp với văn hóa. Khả năng giao tiếp, làm việc nhóm, giải quyết vấn đề, khả năng thích ứng và lãnh đạo hiệu quả được đánh giá cao ở các chuyên gia công nghệ.

6. GIG Economy & Freelancer

GIG Economy & Freelancer

Gig economy đang thu hút được sự quan tâm trong ngành công nghệ. Các công ty ngày càng tuyển dụng freelancer hoặc nhà thầu bên ngoài để thực hiện các dự án ngắn hạn hoặc các nhiệm vụ chuyên môn cụ thể. Điều này cho phép các tổ chức tiếp cận chuyên môn cụ thể và điều chỉnh quy mô lực lượng lao động của họ khi cần thiết.

7. Ra quyết định dựa trên dữ liệu

Các công ty đang tận dụng phân tích dữ liệu và sự thấu hiểu (insight) để đưa ra quyết định tuyển dụng chính xác hơn. Dữ liệu đang được sử dụng để xác định xu hướng, tối ưu hóa quy trình tuyển dụng và đánh giá hiệu quả của chiến lược tuyển dụng.

8. Học tập và phát triển liên tục

Với những tiến bộ công nghệ nhanh chóng, các nhà tuyển dụng đang ưu tiên các cơ hội học tập và phát triển liên tục cho đội ngũ công nghệ của họ. Các chương trình đào tạo, sáng kiến cố vấn và quyền truy cập vào các nền tảng học tập trực tuyến được cung cấp để hỗ trợ nâng cao kỹ năng liên tục và phát triển nghề nghiệp.

Tóm lại

Những xu hướng tuyển dụng IT đang dần thay đổi để đáp ứng với sự phát triển nhanh chóng của ngành. Điều quan trọng là các doanh nghiệp và tổ chức phải thích nghi với những thay đổi này và áp dụng các chiến lược tuyển dụng phù hợp để thu hút và giữ chân nhân tài. Bên cạnh đó, những người đang làm việc trong ngành CNTT cũng cần phải phát triển kỹ năng và kiến thức của mình để thích nghi với môi trường làm việc thay đổi liên tục.

Bạn có thể tìm hiểu toàn cảnh thị trường IT cũng như những chỉ số chi tiết về thị trường IT thông qua Vietnam IT Market Report 2023 – Vietnam Tech Talents Report do TopDev phát hành.

Xem thêm:

Xem thêm các vị trí công việc khác tại TopDev

Quy tắc đặt tên biến trong Python đúng chuẩn 2024

Đặt tên biến thường là vấn đề nhức nhối không chỉ của anh em Junior mới vào nghề mà còn cả những ông Senior lão làng. Chỉ là đặt tên thôi nhưng chưa bao giờ là chuyện đơn giản, bởi tất cả đều có quy tắc riêng.

Quy tắc ở đây không phải là quy tắc cứng nhắc, chỉ đơn giản là những cách thức đặt tên phổ biến. Với những cách đặt tên này, nếu anh em tuân theo sẽ tốt hơn khi viết hoặc maintain code.

Quy tắc đặt tên biến trong PythonChỉ là cái tên cũng đủ để anh em nhức đầu

Bài viết này cung cấp một số quy chuẩn thường được dùng để đặt tên biến. Mời anh em đón đọc

1. Đặt tên trong python

Đối với ngôn ngữ lập trình Python nói riêng và các ngôn ngữ lập trình khác nói chung. Tất cả đều quy định rất rõ các yêu cầu phải có khi đặt tên biến. Cụ thể đối với ngôn ngữ Python, ta có:

    • A variable name must start with a letter or the underscore character – Biến không thể bắt đầu với ký tự hoặc gạch chân.
    • A variable name cannot start with a number – Biến không thể bắt đầu với số.
    • A variable name can only contain alpha-numeric characters and underscores (A-z, 0-9, and _ ) – Biến chỉ có các ký tự từ A-z và 0-9 hoặc gạch dưới.
    • Variable names are case-sensitive (age, Age and AGE are three different variables) – Trường hợp viết thường, viết hoa hoặc viết hoa một phần, các biến được hiểu là khác nhau.

# Đặt tên biến hợp lệ
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"

#Tên biến không hợp lệ:
2myvar = "John"
my-var = "John"
my var = "John"

Quy định là vậy nhưng thông thường anh em developer sẽ đặt như thế nào?

Đây, có ngay đây!

  Người dùng nhập liệu với hàm input() trong Python

2. Naming convention

Việc đặt tên biến giúp cho chương trình hoặc code anh em viết ra dễ hiểu và dễ bảo trì. Đối với class, methods, interface hay packages. Tất cả đều có quy chuẩn riêng cho việc đặt tên. Variables cũng không phải là điều ngoại lệ.

Có 3 tiêu chí anh em cần hết sức lưu ý khi đặt tên biến (Python nói chung và các ngôn ngữ khác nói riêng):

    • Variable names should be short yet meaningful – Tên biến nên ngắn gọn và ý nghĩa
    • Common names for temporary variables are ijkm, and n for integers; cd, and e for characters. – Với các biến lặp thường nên sử dụng các biến được quy chuẩn với nhau như i,j,k,m và n
    • Variable names should not start with underscore _ or dollar sign $ characters, even though both are allowed – Biến không nên bắt đầu với gạch dưới hoặc dấu $ (ngoại trừ ngôn ngữ php)

Naming convention

Đối với ngôn ngữ lập trình Python, tên biến nên áp dụng convention tương tự như function. Cụ thể ở đây là việc ký tự đầu tiên luôn viết thường.

Dưới đây là một số loại convention khác thường sử dụng khi đặt tên biến.

  Quy tắc đặt tên biến trong Python đúng chuẩn 2024
Phần 2 : Cú pháp thông dụng”]

3. Rules cho Python

Đầu tiên, nhắc luôn với anh em rules đây không được hiểu theo nghĩa cứng nhắc. Tức là bắt buộc phải đặt tên theo như vậy.

Rules cho PythonĐể mà code chạy được, compiler được thì anh em chỉ cần apply rule đặt tên ở phần 1 đã nêu là được rồi. Tuy nhiên rules này được define theo nhiều người khác đã và đang code Python. Nếu anh em theo rules này, code của anh em sẽ dễ dàng để maintain, dễ đọc, dễ hiểu không chỉ với bản thân mình mà còn cho người khác nữa.
Cụ thể như sau:

    • Variables should always start with a lower-case character – Biến nên thường bắt đầu với ký tự viết thường
    • Use underscores instead of spaces to separate words – Chia tách các từ bằng gạch dưới thay vì khoảng trắng
    • Don’t use upper-case characters – Đừng sử dụng ký tự viết hoa
    • Starting with underscores is ok, but is used for a special purpose – Bắt đầu với viết hoa cũng ok, nhưng phải có mục đích đặc biệt

Mục đích đặc biệt ở đây anh em hiểu là biến đó sử dụng cho mục đích cá biệt, khác với các biến khác.

4. Pascal Case

Loại này xuất phát từ ngôn ngữ lập trình pascal. Với loại này, chữ cái đầu tiên trong biến luôn được viết hoa. Ví dụ dưới đây cho anh em hiểu về 2 biến tạo với Pascal Case

    • ThisIsPascalCase
    • AnotherPascalCaseExample

Với tiên biến được đặt kiểu này, ưu điểm là dễ đọc, dễ hiểu mục đích của biến sử dụng. Thông thường như anh em làm Java thì classes bắt buộc phải theo kiểu Pascal Case.

Tuyển dụng Python mọi cấp độ tại đây

5. Cammel Case

Cammel case tương tự với Pascal case nhưng chữ cái đầu tiên không được viết hoa. Ưu điểm là cách viết nhanh nhẹn. Anh em cũng dễ dàng phân biệt giữa class và variable trong quá trình sử dụng.

Cammel CaseThông thường, mặc định khi thấy chữ cái đầu tiên không viết hoa sẽ là Cammel Case và nó là biến (variable). Ví dụ

    • thisIsPascalCase
    • anotherPascalCaseExample

Như hình ảnh phía tren, do chữ C viết hoa to hơn như bướu lạc đà, nên họ gọi là camelCase

Tuyển dụng Python Hà Nội mọi cấp độ tại đây

6. Snake Case

Snake case là cách viết cho việc đặt tên biến nhưng luôn có gạch dưới (underscore) để tách bạch từng từ. Ví dụ:

    • this_is_snake_case
    • THIS_IS_SCREAMING_SNAKE_CASE

Snake Case
Nguồn ảnh / Source: juniortoexpert.com
Cách đặt tên biến kiểu này thường ít khi sử dụng, nhưng tuỳ vào mục đích và ngôn ngữ anh em vẫn có thể bắt gặp các biến được đặt tên kiểu này.

7. Tham khảo

Cảm ơn anh em đã đọc bài – Thank you for your attention – Happy coding!

Tác giả: Kiên Nguyễn

Top IT jobs hot dành riêng cho Top Developers tại TopDev!

Solution Architect là gì? Những kỹ năng cần có của một Solution Architect

Khi xây dựng một hệ thống lớn dành cho các tổ chức, công ty thì việc thiết kế, phát triển và quản lý được một giải pháp kiến trúc để vận hành là một công việc đòi hỏi những kỹ năng chuyên môn cao. Vì thế mà vị trí Solution ArchitectKiến trúc sư giải pháp thường được đảm nhiệm bởi các kỹ sư có nhiều năm kinh nghiệm cùng với những hiểu biết sâu sắc về các công nghệ liên quan. Bài viết hôm nay chúng ta cùng nhau tìm hiểu về Solution Architect là gìnhững kỹ năng cần có của một Solution Architect nhé.

Solution Architect là gì?

Khi một tổ chức, công ty hay doanh nghiệp đối mặt với nhu cầu chuyển đổi các quy trình và hệ thống để có thể đáp ứng được các yêu cầu kinh doanh mới; họ sẽ cần tìm ra được một danh sách các hoạt động cần phải làm theo trình tự từ thiết kế, mô tả, triển khai đến vận hành và quản lý; nó được gọi là một kiến trúc giải pháp – Solution Architecture. Và để đưa ra được giải pháp phù hợp với tình hình của doanh nghiệp và đáp ứng được yêu cầu của thị trường; chúng ta cần một người được gọi với vai trò là Solution Architect.

Kiến trúc sư giải pháp – Solution Architect là người chịu trách nhiệm dẫn dắt thực hành và đưa ra tầm nhìn kỹ thuật tổng thể cho một giải pháp cụ thể. 

Solution Architect là gì?

Gần đây chúng ta rất thường nghe từ khóa “chuyển đổi số”, và để một tổ chức, doanh nghiệp thực hiện được việc chuyển đổi số thì luôn cần những giải pháp kiến trúc đồng bộ bao gồm cả các quy trình về vận hành, kinh doanh kết hợp với công nghệ. Ngoài ra có thể kể đến một số ví dụ khác khi nhắc đến kiến trúc sư giải pháp như việc phát triển cơ sở hạ tầng cloud cho doanh nghiệp, triển khai các microservices cho thương mại điện tử hay áp dụng các biện pháp bảo mật cho dữ liệu, hệ thống, an ninh mạng.

  Câu hỏi phỏng vấn Solution Architect không nên bỏ lỡ

  Đâu là điểm khác biệt giữa Solution Architect và Software Architect?

Công việc của một Solution Architect

Công việc của một kiến trúc sư giải pháp tập trung vào các quyết định về giải pháp và phân tích tác động của chúng đối với các mục tiêu và kết quả kinh doanh tổng thể; hay nói cách khác Solution Architect sẽ phải tập hợp các giải pháp công nghệ và đưa ra chiến lược để thực hiện chúng.

Cụ thể chi tiết công việc bao gồm:

  • Tham gia vào quá trình phân tích nghiệp vụ để định hướng, đề xuất về giải pháp áp dụng hoặc gợi ý điều chỉnh nghiệp vụ giúp tăng tính khả thi của phần mềm
  • Đưa ra các giải pháp kiến trúc đáp ứng nhu cầu của khách hàng, yêu cầu của dự án về mặt chức năng (functional) và phi chức năng (non-functional)
  • Phân tích, đánh giá các giải pháp, ghi nhận các ý kiến đánh giá giải pháp từ các bên liên quan; sau đó lựa chọn giải pháp phù hợp, tối ưu nhất
  • Truyền đạt, giải thích và tài liệu hóa chi tiết về giải pháp, kiến trúc đã lựa chọn và chuẩn bị xây dựng cho các bên liên quan, nhất là team phát triển
  • Tạo prototype cho giải pháp; tham gia trực tiếp vào quá trình phát triển, coding phần core, xử lý khó và phức tạp nếu cần. Sau đó chuyển giao lại cho team phát triển để thực hiện giai đoạn tiếp theo của dự án
  • Hỗ trợ quản lý dự án về mặt công nghệ, kiểm soát quá trình triển khai giải pháp và xử lý phát sinh nếu có.

Công việc của một Solution Architect

Tham khảo thêm các vị trí tuyển dụng Solution Architect lương cao tại Topdev

Những kỹ năng cần có của một Solution Architect

Kiến trúc sư giải pháp là một vị trí đòi hỏi nhiều kỹ năng liên quan đến kỹ thuật, sự hiểu biết về mặt công nghệ cũng như phải thường xuyên cập nhật các xu hướng công nghệ mới. Ngoài ra, kinh nghiệm và sự thấu hiểu về doanh nghiệp, mô hình kinh doanh liên quan đến giải pháp kiến trúc sắp tới cũng là một yếu tố quan trọng. Cùng liệt kê các kỹ năng quan trọng nhất của một Solution Architect (SA) nhé:

  • Kỹ năng giao tiếp: SA là vị trí có vai trò trung tâm, thường xuyên phải giao tiếp và giúp các bên liên quan hiểu được, hiểu đúng giải pháp cần triển khai; vì thế giao tiếp là một kỹ năng không thể thiếu của SA.
  • Kỹ năng quản lý dự án và nguồn lực: mặc dù không tham gia trực tiếp vào quá trình phát triển dự án, SA vẫn cần đảm bảo rằng các nguồn lực của dự án được sử dụng một cách có hiệu quả theo từng giai đoạn triển khai.
  • Kỹ năng phân tích chuyên sâu: một giải pháp kiến trúc có ảnh hưởng đến cả phần mềm, phần cứng với nhiều chi tiết nhỏ hoạt động cùng nhau. SA phải là người ghi nhớ tất cả các chi tiết của dự án và phân tích chuyên sâu để thực hiện một cách chính xác nhất.
  • Kỹ năng nhận dạng và phân tích rủi ro: các rủi ro luôn luôn tồn tại trong quá trình phát triển hay triển khai của dự án; công việc của SA đòi hỏi nhận dạng, phân tích được chúng ta đưa ra được các biện pháp phòng ngừa.
  • Kỹ năng công nghệ: Đây là kỹ năng cơ bản, thiết yếu nhất của SA; thông thường một kỹ sư công nghệ có hiểu biết về cả phần mềm và phần cứng với kinh nghiệm làm việc từ 8-10 năm trong ngành thì bắt đầu đảm nhiệm được vị trí của một SA.

Những kỹ năng cần có của một Solution Architect

Cùng với việc trang bị các kỹ năng trên, để trở thành một Solution Architect được công nhận bởi khách hàng và các tổ chức; kiến trúc sư giải pháp cũng nên trang bị một số các chứng chỉ quan trọng của nghề như:

  • AWS Certified Solutions Architect
  • The Open Group Certified Architect (Open CA)
  • Google Professional Cloud Architect

Kết bài

Như vậy chúng ta vừa cùng nhau tìm hiểu về vị trí Solution Architect, một người có vai trò quan trọng quyết định lớn đến sự phát triển của dự án nói riêng và các hoạt động trong tổ chức, doanh nghiệp nói chung. Đây là một vị trí có trách nhiệm lớn cùng việc đòi hỏi nhiều kỹ năng liên quan đến công nghệ, cũng vì thế là vị trí mà nhiều anh em IT hướng tới trong sự nghiệp. Hy vọng bài viết hữu ích dành cho bạn, hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

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

Lodash – Tiện ích dắt túi của dân lập trình Javascript

Bài viết được sự cho phép của tác giả Sơn Dương

Bạn có nhận thấy là công việc lập trình cũng chỉ quanh quẩn các thao tác xử lý Mảng, Object… đúng không? Bản thân các ngôn ngữ lập trình hiện đại như Javascript cũng đã có sẵn nhiều hàm, công cụ mạnh mẽ để giúp bạn làm việc với Mảng, Object hiệu quả.

Lodash là một trong những thư viện tuyệt vời, cung cấp nhiều công cụ giúp bạn thao tác với mảng, object… đơn giản hơn rất nhiều.

Có thể bạn cũng đã biết tới thư viện Lodash này rồi. Tuy nhiên, qua bài viết này mình sẽ tổng hợp một số hàm nổi bật lodash mà các bạn rất hay sử dụng trong mọi dự án.

Lodash là gì?

Lodash là một thư viện Javascript cung cấp sẵn các hàm để thao tác với Array, Object, String, Function… được đơn giản hơn. Lodash là một nhánh được tách ra từ thư viện nổi tiếng một thời underscore.js.

Một khi đã thử dùng qua một vài hàm của Lodash, đảm bảo bạn sẽ bị nghiện và không thể thiếu nó trong các dự án sau này.

Thư viện Lodash javascript có rất nhiều tính năng, được chia thành các nhóm như: Array, Object, Function, Date, Number…

Một số hàm lodash hay sử dụng nhất

Phần này, mình sẽ tổng hợp một số hàm của lodash mà mình thường xuyên sử dụng trong các dự án.

Để cài đặt lodash, bạn có nhiều cách như cài qua theo kiểu module bằng NPM, hoặc import qua CDN. Ví dụ, với dự án html đơn giản là mình import thư viện qua CDN trong thẻ head như sau:

<head>
...
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>
...
</head>

Cách sử dụng rất đơn giản, bạn chỉ cần gọi lodash bằng ký tự gạch dưới _ sau đó là tên hàm.

Cú pháp:

_.<tên hàm>(tham số)

  Import lodash như thế nào mới đúng

  debounce, throttle và once - ba hàm thêm cách giải quyết logic người dùng!

orderBy

Như tên của hàm đã nói lên tác dụng của nó. Hàm này có chức năng sắp xếp các phần tử trong mảng theo tiêu chí nào đó.

Ví dụ: sắp xếp mảng dưới đây với các item giá tăng dần

const items = [
  { name: 'Item A', price: 2 },
  { name: 'Item B', price: 8 },
  { name: 'Item C', price: 5 },
  { name: 'Item D', price: 4 }
];

const result = _.orderBy(items, ['price'], ['asc']);
console.log(result)

chunk

Cắt một mảng thành nhiều mảng con với kích thước tùy ý.

const array = [ 1, 2, 3, 4 ];

const result = _.chunk(array, 2);
console.log(result)
// KQ => [[1, 2], [3, 4]]

Ứng tuyển việc làm Javascript lương cao trên TopDev

flatten

Làm phẳng một mảng có nhiều mảng con lồng trong đó.

const array = [1, [2, [3, [4]], 5]];

const result = _.flatten(array);
console.log(result)
// => [1, 2, [3, [4]], 5]

Hàm này mới chỉ làm phẳng được một level, nếu bạn muốn kết quả là một mảng phẳng hoàn toàn, không còn mảng con lồng trong nữa thì sử dụng flattenDeep()

const array = [1, [2, [3, [4]], 5]];

const result = _.flattenDeep(array);
console.log(result)
// => [1, 2, 3, 4, 5]

Bạn thấy khoái chưa! Nếu mà làm phẳng kiểu thủ công chắc cũng hết hơi.

take

Tạo một mảng mới được trích xuất từ một mảng với kích thước tùy ý.

const array = [1, 2, 3];
const result = _.take(array, 2);
console.log(result)
// result => [1, 2]

difference

Tạo một mảng gồm các phần tử không xuất hiện trong các mảng đã cho (được truyền thông qua tham số).

const result = _.difference([1, 2, 3], [2, 3, 4]);
console.log(result)
// result => [1]

isEmpty

Hàm này nghe có vẻ đơn giản, nhưng lại rất hay sử dụng để kiểm tra và tránh những lỗi crash không đáng có. Hàm này có tác dụng kiểm tra một object, collection, map, hay set có bị rỗng hay không.

_.isEmpty({});
// => true
_.isEmpty({ name: 'John Doe' });
// => false
_.isEmpty([])
// => true

throttle

Hàm này có tác dụng tương tự như hàm setInterval mặc định của JS vậy. Có tác dụng tạo một hàm để chỉ gọi một hàm truyền vào nhiều nhất một lần trong khoảng thời gian được chỉ định.

const throttled = _.throttle(() => {
 console.log('Throttled after 50ms!');
}, 50);

window.addEventListener('resize', throttled);

debounce

Tương tự như hàm setTimeout mặc định của JS.

const debounced = _.debounce(() => {
 console.log('Debounced after 400ms!');
}, 400);

window.addEventListener('resize', debounced);

merge

Hàm này mới thực sự đáng giá. Có tác dụng mà gộp nhiều object vào làm một.

const firstObject = { 'A': [{ 'B': 1 }, { 'C': 2 }] };
const secondObject = { 'A': [{ 'B': 3 }, { 'D': 4 }] };
const result = _.merge(firstObject, secondObject);
console.log(result)
// result => { A: [{ B: 3 }, { C: 2, D: 4 }] }

clone

Như bạn cũng biết, JS cũng tương tự như Java, cũng có kiểu dữ liệu tham chiếu và tham trị. Do đó, khi bạn gán một biến cho một biến khác thông qua dấu =, thực chất là chỉ truyền địa chỉ vùng nhớ của biến đó thôi.

Do đó, khi một biến thực hiện thay đổi giá trị là biến còn lại cũng bị thay đổi theo.

Ví dụ về việc thay đổi vùng nhớ khi gán biến.

const website = {website: "VNTALKING.COM", age: 10}
const newwebsite = website;
newwebsite.age = 20;
console.log(website)
// {website: "VNTALKING.COM", age: 20}

Để giải quyết vấn đề này, chúng ta cần phải clone cả vùng nhớ chứ không chỉ là mỗi địa chỉ vùng nhớ.

const website = {website: "VNTALKING.COM", age: 10}
const newwebsite = _.clone(website);
newwebsite.age = 20;
console.log(website)
// {website: "VNTALKING.COM", age: 10}

Trên đây là những hàm mình hay sử dụng nhất của lodash javascript. Ngoài ra, còn nhiều hàm khác nữa, vì phạm khuôn khổ bài viết có hạn, bạn có thể vào trang tài liệu chính thức của lodash để khai phá thêm nhé. https://lodash.com/docs

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

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

Xem thêm việc làm công nghệ hấp dẫn trên TopDev

Tạo RESTful API đơn giản bằng Nodejs + MongoDB

Bài viết được sự cho phép của tác giả Sơn Dương

Phần tiếp theo của khóa học Lập trình Node.js cơ bản, mình sẽ hướng dẫn các bạn học cách kết hợp Nodejs với cơ sở dữ liệu, nổi bật nhất là MongoDB. Để các bạn dễ hình dung, chúng ta sẽ cùng nhau tạo RESTful API đơn giản bằng Nodejs + MongoDB.

Khi chúng ta xây dựng ứng dụng Web hay các ứng dụng phía server, việc tạo RESTful API để tương tác với client trở lên vô cùng phổ biến.

Ở bài viết này, mình sẽ tạo RESTful API hỗ trợ đủ 4 actions: CRUD ( Create – Read – Update – Delete).

OK, sau khi môi trường lập trình đã sẵn sàng, chúng ta bắt tay vào tạo RESTful API thôi!

#Tạo RESTful API

Tạo RESTful API là một kiểu thiết kế ứng dụng trong đó quy định định dạng của địa chỉ URL và phương thức HTTP sử dụng để quản lý tài nguyên trên server.

Tài nguyên trên Server trong bài viết này mình giả sử là danh sách person trong Database.

Việc thiết kế REST cũng khá đơn giản, chúng ta sẽ định nghĩa 4 hàm xử lý 4 actions:

  • Tạo mới tài nguyên (ví dụ thêm một person).
  • Chỉnh sửa tài nguyên có sẵn (ví dụ cập nhập thông tin của một person).
  • Lấy về dữ liệu của tài nguyên (xem thông tin của một person/hoặc nhiều person)
  • Xóa tài nguyên (Xóa thông tin của một person)

Cụ thể trong bài viết này thì mình sẽ thiết kế như sau:

Thiết kế REST API đơn giản

  Giới thiệu về GraphQL. Cách giải quyết những hạn chế của RESTful API

  Giới thiệu Swagger – Công cụ document cho RESTfull APIs

#Cấu hình Node.js với Express framework

Để bắt đầu, chúng ta sẽ tạo mới một dự án với các dependencies cần thiết. Từ cửa sổ lệnh, chúng ta thực hiện các lệnh sau:

npm init -y
npm install express body-parser mongoose --save

Kết thúc những lệnh trên, chúng ta sẽ tạo một package.json, và cài đặt ExpressJS, Mongoose và một package hỗ trợ chuyển dữ liệu trong cách request từ client thành JSON data.

Để đơn giản, mình sẽ cho tất cả mã nguồn vào một file app.js. Tuy nhiên, điều này không được khuyến khích ở dự án thực tế nhé. Với dự án thực tế, các bạn nên ứng dụng những quy tắc như nguyên lý SOLID để đảm bảo dự án clean, dễ maintain.

Bạn tạo tệp app.js tại thư mục gốc của dự án:

/**
 * Son Duong
 * https://vntalking.com
 * June 14, 2019
 */
const Express = require("express");
const Mongoose = require("mongoose");
const BodyParser = require("body-parser");

var app = Express();

app.use(BodyParser.json());
app.use(BodyParser.urlencoded({ extended: true }));

// Define REST API
app.post("/person", async (request, response) => {});
app.get("/people", async (request, response) => {});
app.get("/person/:id", async (request, response) => {});
app.put("/person/:id", async (request, response) => {});
app.delete("/person/:id", async (request, response) => {});

app.listen(3000, () => {
 console.log("Listening at :3000...");
});

Mình sẽ giải thích một chút về đoạn code trên. Đầu tiên, chúng ta cần require những module cần thiết như: express, mongoose và body-parser.

Tiếp theo, chúng ta sẽ định nghĩa API như được thiết kế mục 2 ở trên bài viết.  Chúng ta sẽ thêm logic xử lý cho từng hàm sau.

Cuối cùng, chúng ta khai báo ứng dụng sẽ lắng nghe port 3000.

Tham khảo việc làm MongoDB lương cao trên TopDev!

#Tương tác với MongoDB sử dụng Mongoose

Để có thể connect được với MongoDB, bạn cần khai báo đúng đường dẫn:

Mongoose.connect("mongodb://localhost/vntalking");

Trong đó vntalking là tên cơ sở dữ liệu (tương đương với tên database trong SQL vậy).

Lưu ý: Bài viết này mình tập trung vào những logic tương tác với MongoDB từ Nodejs. Do đó, mặc định mình sẽ coi các bạn đã biết cách tạo collection trong MongoDB. Nếu bạn muốn quản lý MongoDB dễ dàng thì có thể sử dụng công cụ Robo3T.

Sau khi đã cấu hình kết nối xong, mình sẽ tiến hành tạo model. Trong khuôn khổ ví dụ của bài viết này, chúng ta chỉ cần tạo một model như sau:

const PersonModel = Mongoose.model("person", {
    firstname: String,
    lastname: String
});

Model này sẽ tạo một people collection (tương đương với tạo một table trong SQL vậy). Với mỗi document sẽ có 2 thông tin: first name và last name.

Ok, như vậy phần cấu hình với MongoDB đã xong, chúng ta tiến hành xử lý logic cho mỗi API.

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

#Tạo RESTful API và xử lý logic hành động

Đầu tiên, chúng ta sẽ viết code xử lý phần tạo mới một person:

app.post("/person", async (request, response) => {
    try {
        var person = new PersonModel(request.body);
        var result = await person.save();
        response.send(result);
    } catch (error) {
        response.status(500).send(error);
    }
});

Khi client thực hiện một POST request tới ứng dụng của chúng ta. Chúng ta sẽ sử dụng PersonModel và JSON payload để lưu thông tin vào cơ sở dữ liệu.

Có một điểm lưu ý, tất cả những công việc tương tác với cơ sở dữ liệu đều có thể tốn thời gian và bạn cần phải sử dụng cơ chế xử lý bất đồng bộ. Trước kia bạn có thể dùng Promise, và giờ thì hiện đại hơn, dùng kỹ thuật mới async và await ( hỗ trợ từ javascript ES7).

Sau khi lưu dữ liệu thành công, chúng ta trả lại kết quả cho client biết.

Tiếp theo, khi đã có dữ liệu, chúng ta có thể lấy dữ liệu từ database:

app.get("/people", async (request, response) => {
    try {
        var result = await PersonModel.find().exec();
        response.send(result);
    } catch (error) {
        response.status(500).send(error);
    }
});

Có hai kiểu lấy dữ liệu: Một là lấy toàn bộ danh sách person có trong database, hai là lấy cụ thể thông tin của một người nào đó.

Trong kịch bản API này, khi client không gửi bất kì điều kiện nào thì sẽ trả về một danh sách các person.

Nếu client gửi cụ thể ID một person nào đó, chúng ta sẽ chỉ trả về 1 một person mà thôi. Implement như sau:

app.get("/person/:id", async (request, response) => {
    try {
        var person = await PersonModel.findById(request.params.id).exec();
        response.send(person);
    } catch (error) {
        response.status(500).send(error);
    }
});

Khi client gửi ID của person lên, chúng ta sẽ sử dụng hàm findById()để tìm trong database xem có person nào tương ứng với ID đó không. Nếu tồn tại person đó thì trả lại cho  client.

Hoàn toàn tương tự với việc cập nhật và xóa thông tin của một person khi biết ID

app.put("/person/:id", async (request, response) => {
    try {
        var person = await PersonModel.findById(request.params.id).exec();
        person.set(request.body);
        var result = await person.save();
        response.send(result);
    } catch (error) {
        response.status(500).send(error);
    }
});

app.delete("/person/:id", async (request, response) => {
    try {
        var result = await PersonModel.deleteOne({ _id: request.params.id }).exec();
        response.send(result);
    } catch (error) {
        response.status(500).send(error);
    }
});

Như vậy là chúng ta hoàn thành đủ 4 action như thiết kế ban đầu. Các bạn có thể test ứng dụng bằng cách sử dụng Postman. Tất nhiên, đừng quên chạy ứng dụng trước khi test trên server bằng lệnh sau.

node app.js

#Tổng kết

Qua bài viết, chúng ta đã biết tạo RESTful API đơn giản rồi phải không? Từ những kiến thức cơ bản này, các bạn có thể tự phát triển và mở rộng cho những ứng dụng thực tế.

Các bạn đón đọc nhé!

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

Xem thêm:

Tin tuyển dụng IT mọi cấp độ trên TopDev đang chờ bạn ứng tuyển!

Automation Test là gì? Tester cần kỹ năng gì để làm Automation Testing

Automation Test là một phần trong lĩnh vực kiểm thử phần mềm và được xem như cánh tay phải hỗ trợ đắc lực trong việc kiểm tra chương trình, source code. Nó đóng vai trò quan trọng trong việc nâng cao hiệu suất, giảm thiểu thời gian, lỗi, cũng như sự nhàm chán so với kiểm thử thủ công (Manual Test). Vậy Automation Test là gìTester cần những kỹ năng gì để làm được Automation Test trong dự án; bài viết hôm nay chúng ta cùng nhau trả lời cho câu hỏi trên nhé.

Automation Test là gì?

Kiểm thử tự động, Automation Test được hiểu đơn giản là việc thay vì test chương trình bằng tay, thao tác từng bước như người dùng, thì sẽ sử dụng máy để thực hiện toàn bộ hoặc 1 phần quá trình trên. Automation Testing có thể thay thế Manual Testing trong một hoặc toàn bộ các bước từ khởi động hệ thống, nhập dữ liệu đầu vào, kiểm tra so sánh với dữ liệu đầu ra và ghi kết quả.

Automation Test là gì?

Để thực hiện được công việc kiểm thử một cách tự động thì chúng ta cần sử dụng đến các công cụ kiểm thử gọi là Automation Testing Tool; sau đó viết các đoạn mã (script) tùy theo từng công cụ để cung cấp đầu vào theo từng testcase; phần mềm kiểm thử tự động sẽ hỗ trợ chạy chương trình và thực hiện việc kiểm thử, sau đó cho đầu ra với kết quả tương ứng PASS/FAIL theo từng testcase.

Một số phần mềm kiểm thử tự động nổi tiếng hiện nay gồm:

  • Selenium: phần mềm mã nguồn mở hoàn toàn miễn phí, hỗ trợ hoạt động trên trình duyệt với nhiều nền tảng khác nhau như MacOS, Windows, Linux, … cho các ứng dụng Web. Selenium hỗ trợ bạn viết script bằng nhiều ngôn ngữ lập trình khác nhau từ Java, JavaScript, Python,…
  • Appium: là phần mềm kiểm thử tự động mã nguồn mở dành cho các ứng dụng di động, hỗ trợ các ngôn ngữ lập trình phổ biến như Java, Python, C#, …. Appium có thể sử dụng cho việc kiểm thử các ứng dụng chạy trên nền tảng Android, iOS cho cả các thiết bị giả lập và thiết bị thực.
  • Cypress: là một công cụ kiểm tra giao diện người dùng cho các ứng dụng Web, chạy được trên Windows, Linux và macOS giúp thực thi được nhiều loại test như End-to-End, test tích hợp hay Unit Test.
  • Postman: Postman được biết đến là một công cụ cho phép chúng ta thao tác với API, phổ biến là REST API. Ngoài ra thì Postman cũng là một công cụ kiểm tra tự động hóa được sử dụng khi kiểm thử API đồng thời tích hợp các công cụ CI/CD phổ biến.
  • Apache Jmeter: một công cụ mã nguồn mở nổi tiếng dành cho việc kiểm thử hiệu suất 1 cách tự động, chủ yếu dành cho các ứng dụng Web.

  Triển vọng của automation tester trong tương lai

  Automation testing: Một số công cụ hữu ích cho tester

Quy trình thực hiện kiểm thử tự động

Việc quyết định có lựa chọn Automation Test để thực hiện việc kiểm thử trong quá trình thực hiện dự án hay không phụ thuộc chủ yếu vào tính chất, đặc thù của dự án và khả năng đáp ứng của các thành viên trong team dự án. Kiểm thử tự động đòi hỏi tester cần có kỹ năng viết code hay script cho các công cụ Auto Test.

Quy trình thực hiện kiểm thử tự động

Sau khi xác định lựa chọn Automation Test cho dự án, các bước tiếp theo sẽ được thực hiện để đảm bảo quy trình kiểm thử tự động được thực hiện:

1. Lựa chọn phần mềm kiểm thử

Kiểm thử tự động sẽ được thực hiện bởi một phần mềm (công cụ) kiểm thử nhất định, mỗi phần mềm sẽ có những đặc thù và phục vụ cho những ứng dụng khác nhau; vì vậy bạn nên cân nhắc những điểm sau khi lựa chọn phần mềm:

  • Ngôn ngữ mà phần mềm hỗ trợ: Java, JavaScript, Python,….
  • Phần mềm hỗ trợ những loại kiểm thử nào: kiểm thử tích hợp, kiểm thử đơn vị, kiểm thử hệ thống,…
  • Phần mềm hoạt động trên nền tảng nào: Web, Desktop app, Mobile app, …
  • Chức năng báo cáo của phần mềm hay xuất dữ liệu đầu ra có đảm bảo để phù hợp với yêu cầu của dự án

Xem thêm các vị trí tuyển Tester lương cao trên TopDev

2. Xác định phạm vi test tự động

Kiểm thử tự động sẽ phù hợp với những bài toán có những đặc điểm như dưới đây:

  • Lượng dữ liệu cần kiểm thử lớn
  • Khả năng sử dụng lại các testcase cao ở nhiều màn hình hay chức năng
  • Sự phức tạp của yêu cầu kiểm thử mà Manual Test khó thực hiện được; chẳng hạn như yêu cầu về số lượng truy cập lớn cùng 1 thời điểm
  • Tính khả thi về mặt logic kiểm tra kết quả: chẳng hạn như rất khó để sử dụng Auto test cho việc xác định về mặt UX của ứng dụng

Từ những đặc điểm trên chúng ta sẽ xác định ra được phạm vi mà Automation Test nên được áp dụng vào dự án của mình.

3. Lên kế hoạch thiết kế testcase, viết script (code) thực thi

Giai đoạn này, kiểm thử tự động sẽ dựa trên các testcase cụ thể và chuyển nó thành source code hay script cho phần mềm kiểm thử tương ứng. Nó khá giống với việc chúng ta lập trình viết ra ứng dụng. Việc phát triển source code kiểm thử tự động cũng có thể phát triển thành các bộ kiểm thử tự động có khả năng tái sử dụng trong các dự án, chức năng, màn hình sau này.

4. Thực thi kiểm thử tự động 

Việc thực thi kiểm thử được các phần mềm chạy hoàn toàn tự động; để đảm bảo nó hoạt động đúng thì chúng ta cần thiết lập các thông số đầu vào đúng như yêu cầu. Ngoài ra việc xuất kết quả đầu ra theo đúng định dạng mong muốn cũng nên được quan tâm để giúp có thể nhanh chóng xác định được testcase fail, liên hệ với đội phát triển và nhanh chóng khắc phục.

5. Cập nhật và bảo trì

Như đã đề cập ở trên, mỗi tập hợp Automation Test case đều có thể xem là một dự án nhỏ. Để tối ưu hóa và tái sử dụng một cách hiệu quả, đội kiểm thử cần có sự cập nhật chỉnh sửa và bảo trì thường xuyên đáp ứng được nhu cầu và sự thay đổi của phần mềm, ứng dụng.

Tester cần kỹ năng gì để làm Automation Testing

Tester cần kỹ năng gì để làm Automation Testing

Nếu bạn đang là một Tester và muốn trở thành một Automation Tester; hãy cứ cố gắng trước hết để nắm được các kiến thức liên quan đến kiểm thử; các loại kiểm thử; các kỹ thuật kiểm thử. Bất cứ kỹ thuật nào trong Automation Test đều dựa trên những kiến thức cơ bản về kiểm thử, vì vậy hãy xem AutoTest như một công cụ để phát triển, mở rộng khả năng nghề nghiệp hơn là một hướng đi riêng biệt.

Với một Automation Tester, bạn cần được trang bị thêm các kiến thức như sau:

  • Nguyên lý nhận dạng objects: cách để tìm kiếm và lấy ra đúng phần tử cần thao tác trên ứng dụng thông qua HTML hay Xpath
  • Lựa chọn sử dụng phần mềm kiểm thử tự động: Mặc dù mỗi phần mềm kiểm thử tự động sẽ có cách viết khác nhau, tuy nhiên nguyên lý hoạt động đều khá tương đồng. Bạn nên bắt đầu bằng những phần mềm phổ biến như Selenium cùng sự hỗ trợ lớn từ cộng đồng
  • Sử dụng tốt một ngôn ngữ lập trình cho việc viết source code autotest
  • Các kỹ năng về coding, debugging và cách sử dụng các IDE
  • Thường xuyên học hỏi, update các kiến thức mới, công nghệ, phần mềm liên quan đến Automation Testing.
  Automation Test là gì? Tester cần kỹ năng gì để làm Automation Testing

Kết bài

Kiểm thử tự động là một mảng con trong lĩnh vực kiểm thử phần mềm và đang có xu hướng phát triển và ngày càng có vai trò quan trọng hơn trong phát triển dự án. Trở thành một Automation Tester có thể là hướng đi tốt dành cho sự nghiệp của bạn. Hy vọng bài viết này đã giúp bạn hiểu được Automation Test là gì và bạn sẽ cần trang bị kỹ năng gì để làm được kiểm thử tự động. Cảm ơn các bạn đã đọc và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm: 

Tổng hợp tin tuyển dụng việc làm IT lương cao trên TopDev

Học back end cần học những gì? Lộ trình cho người mới bắt đầu

Thường meme liên quan tới backend luôn là thứ gì đó ẩn mình phía sau đầy ghê rợn. Không được đẹp đẽ hào nhoáng như phía Frontend.

Backend developer

Sự thật thì Backend hay Backend developer không hề đáng sợ như vậy. Backend cũng bao gồm nhiều kiến thức. Những kiến trúc lộng lẫy tuyệt vời nằm ở phía dưới đó. Vậy để trở thành backend developer hoặc học để trở thành backend anh em cần gì?

Tất cả sẽ được trình bày qua bài viết dưới đây

1. Programming Languages

Đầu tiên không thể thiếu với anh em developer backend rõ ràng là ngôn ngữ lập trình backend. Không chỉ hiểu phần core, hiểu cách thức hoạt động của ngôn ngữ. Anh em còn cần có lộ trình cụ thể để trở thành master trong từng loại ngôn ngữ mà mình lựa chọn.

Dưới đây là 3 ngôn ngữ thường được sử dụng cho backend:

  • Java: Đây là ngôn ngữ mà nhiều anh em thường nhầm với JavaScript. Tuy nhiên, Java và Javascript là khác nahu. Java thường sử dụng để tạo ra hệ thống mạnh mẽ. Mức độ phổ biến cao, chính vì vậy đây là ngôn ngữ cần thiết cho anh em developer.
  • PHP: Về phía web, ngôn ngữ thường hay sử dụng là PHP. Một số trang web đang được phát triển bằng php, vừa là mã nguồn mở mà còn free. Vì vậy, kỹ năng PHP cũng là kỹ năng mà anh em backend cần có.
  • Python: Với sự phát triển vượt bậc của AI, ML thì Python cũng trở thành ngôn ngữ backend cần phải biết. Đây là một trong những ngôn ngữ hàng đầu, muốn dùng cho cái đơn giản cũng ok mà dùng cho cái phức tạp cũng ok. Mấy ứng dụng phổ biến như Spotify và Dropbox cũng được viết bằng Python.

Programming Languages

Viết tới đây chắc sẽ có một số anh em thắc mắc về Nodejs, tất nhiên Nodejs cũng là ngôn ngữ backend đáng để học. Ngôn ngữ nào cũng có cái hay và phía trên chỉ là ví dụ 3 ngôn ngữ. Còn lại anh em muốn tiếp cận ngôn ngữ nào trước cũng được.

Chỉ cần chọn cho mình 1 ngôn ngữ, vẽ ra roadmap cụ thể là anh em có thể bắt đầu trên con đường trở thành master 1 ngôn ngữ phía Backend rồi.

  Top 7 câu hỏi phỏng vấn Backend Developer
  Mechanical Sympathy Là Gì? Lập Trình BackEnd bằng Java

2. Frameworks

Sau khi đã có kiến thức về ngôn ngữ lập trình, anh em sẽ hiểu khi cần xây dựng một cái gì đó to lớn, chỉ với ngôn ngữ sẽ khó khăn như thế nào. Ví như anh em xây cả lâu đài, mà từng cái bai, cục gạch anh em cũng phải tự làm, mày mò từng chút một. Vậy lúc nào mới xong?

Chính lúc này ta cần với frameworks.

Frameworks xây dựng trên 1 ngôn ngữ backend nào đó. Nó hỗ trợ đầy đủ những thứ từ cơ bản đến nâng cao giúp cho anh em xây dựng hệ thống dễ dàng hơn.

Một số framework phổ biến anh em có thể tham khảo bao gồm:

  • Ruby on Rails: Một số thứ ở Ruby on Rails giúp nó nổi bật hơn mấy frameworks phái dưới. Ông này base trên nền Ruby, có automated testing, có libraries, nếu làm đa ngôn ngữ có localization. Nó cũng là open-source web app development framework. Tất. nhiên, luôn sử dụng ngôn ngữ Ruby.
  • Django: Là open-source và một trong những web frameworks tốt nhất viết trên nền ngôn ngữ Python. Rất tốt cho việc mở rộng (scalability) và bảo mật (security). Ngoài ra Django cũng hỗ trợ lập trình bất đồng bộ.
  • Flask: Cũng base trên nền Python và có thể sử dụng để xây dựng web app framework rất nhanh. Nhiều tính năng chính của Flask bao gồm hỗ trợ WSGI cho phép xây dựng rất nhanh web application.
  • Express: Là framework nhẹ và nổi tiếng nhất sử dụng ngôn ngữ Node.js. Sử dụng để xây dựng web app framework. Express cho phép phát triển rất nhanh và development side-server cũng khá dễ dàng.

Frameworks backend

Trên đây chỉ là một vài so sánh nhỏ, anh em có thể tìm hiểu sâu hơn về các frameworks để có so sánh rõ ràng hơn các ngôn ngữ mình sẽ lập trình phía BE.
Tham khảo việc làm Back-end Developer Hồ Chí Minh hấp dẫn trên TopDev

3. Database

Nếu không có hiểu biết về hệ cơ sở dữ liệu, anh em không thể tự nhận mình là backend developer được. Đơn giản là backend sẽ thường làm việc với hệ cơ sở dữ liệu.

Ở một số hệ thống, database được xem như trái tim, nơi chứa những dự liệu quý giá nhất cần thiết cho hệ thống. Chính vì vậy, để trở thành backend developer, anh em cần có kiến thức tốt ở lĩnh vực database. Kiến thức tốt ở đây có thể được hiểu qua vài ví dụ dưới đây:

  • Hiểu về data types, hiểu về structure, hiểu về cách thức DB vận hành
  • Tối ưu tốc độ, phân tích query, tìm hiểu lý do query bị chậm
  • So sánh ưu nhược điểm các loại database, sự khác nhau giữa SQL và NoSQL
  • Thiết kế và vận hành database, hiểu sâu về quản lý database

Database

Một số cuốn sách hoặc khoá học có thể sẽ hữu ích với anh em về database:

4. Data Structures và Algorithms

Cấu trúc dữ liệu và thuật toán cũng là thiết yếu với backend developer. Thực thế thì data structure là cần thiết với tất cả các kĩ sư phần mềm. Nhưng đối với backend, anh em cần thật sự hiểu sâu về Data structures và Algorithms (thuật toán).

Một số loại cấu trúc dữ liệu phổ biến có thể liệt kê dưới đây:

  • Arrays
  • Linked Lists
  • Stacks
  • Queues
  • Graphs
  • Hash Tables
  • Binary Search Tree

Hiểu về cấu trúc dữ liệu là hiểu về cách nó hoạt động. Về performance, về độ phức tạp (complexity) là bao nhiêu. Lúc nào thì dùng loại data structure này, lúc nào thì dùng data structure kia. Chứ không chỉ đơn thuần là nhớ tên rồi muốn dùng sao thì dùng nha anh em.

Data Structures và Algorithms 
Sau khi đã nắm chắc Data Structure thì về thuật toán, anh em cần hiểu cơ bản về các thuật toán kinh điển. Hiểu ở đây là hiểu rõ cách thức hoạt động, ưu, nhược điểm. Còn lại implement thì thường đã có rất nhiều người làm rồi. Anh em chỉ nhớ sử dụng cho đúng lúc, đúng địa điểm là được.

  • Recursion
  • Bubble sort
  • Selection sort
  • Binary Search
  • Insertion Sort
  • Databases and Cache

Tìm việc làm Backend Intern HCM trên TopDev ngay!

5. API, REST, GraphQL

Anh em luôn thấy là backend với frontend đi liền một cặp, nếu chỉ có backend thì application không thể hoạt động. Tương tự vậy, nếu chỉ frontend thì ứng dụng cũng không thể hoàn thành.

Vậy backend và frontend giao tiếp với nhau như thế nào? Tất nhiên là thông qua API, vậy API có phải là yếu tố bắt buộc và backend developer cần biết không?

Câu trả lời là có, 100% các lập trình viên backend đều biết rõ về API và REST. REST có bao nhiêu method, các method đó sử dụng làm gì? Thiết kế API như thế nào là tốt. Song song với đó, anh em cũng cần có kiến thức và tìm hiểu thêm về JSON, XML. Các phương thức giao tiếp với client.

API, REST, GraphQLMột số khoá học hoặc bài viết có thể giúp anh em hiểu thêm về các công nghệ được nhắc tới ở trên gồm:

Nhiều tin tuyển dụng Backend lương cao trên TopDev

6. Devops và Server

Để backend có thể hoạt động, tất nhiên không thể thiếu server. Vậy anh em cần tìm hiểu thêm về các loại server, Windows thì khác gì Linux? Services mình viết lên sẽ chạy ở đâu, chạy như thế nào? Cấu hình 1 máy như thế nào là đủ.

Sau khi đã hiểu về server. Vậy giờ cần hiểu thêm về CI,CD. Hai cái này khác nhau như thế nào? Để triển khai auto deployment ta cần những gì. Tất tần tật những kiến thức đó là kiến thức bắt buộc với backend developer. Các môi trường development, staging và production khác gì nhau? Tại sao ta lại cần những môi trường này?

Ngoài ra khi tìm hiểu sâu hơn, anh em sẽ cần biết thêm về quản lý version. Kỹ năng điều tra, giải quyết vấn đề. Xử lý sự cố trong trường hợp production down.

Devops và Server

Lộ trình trở thành Backend Developer

Bạn có thể xem full roadmap lộ trình Backend Developer trong ảnh dưới, sẽ có phần giải thích từng bước chi tiết ở bên dưới.

Lộ trình trở thành Backend Developer

Trước khi bắt đầu với lộ trình backend, mặc dù chúng tôi chưa list ra các kiến thức về HTML/CSS trên roadmap trên, bạn cũng nên tự tìm hiểu và ít nhất đã nắm được cách viết HTML/CSS căn bản.

Các bước cần thiết cho lộ trình backend:

Bước 1 – Học một ngôn ngữ mới

Có cả tá lựa chọn về ngôn ngữ dành cho bạn. Tôi có chia nhỏ nó ra các categories để bạn dễ lựa chọn hơn. Đối với những người mới thì tôi khuyên bạn nên chọn các ngôn ngữ scripting vì chúng có nhiều demand và cho phép bạn bắt kịp nhanh chóng. Nếu bạn có một ít kiến thức frontend, bạn sẽ thấy Node.js dễ hơn nhiều và có rất nhiều job về nó đang mở.

Nếu bạn đang làm backend và biết một số scripting language, tôi đề xuất không chọn một ngôn ngữ scripting language khác nữa mà chọn trong section “Functional” hoặc “Multiparadigm”. Ví dụ, nếu bạn đang làm PHP hoặc Mode.js, đừng nên chọn Python hoặc Ruby, mà hãy thử Erlang hoặc Golang. Nó sẽ giúp bạn tư duy xa hơn và open với những mảng khác hơn.

Bước 2 — Thực hành ngay những cái đã học

Học phải đi đôi với hành. Một khi bạn đã chọn được ngôn ngữ phù hợp và có được nền tảng căn bản về nó, hãy dùng nó ngay. Hãy tạo nên càng nhiều app nhỏ càng tốt. Dưới đây là một số gợi ý cho bạn:

  • Ứng dụng các command mà bạn dùng trên bash, ví dụ ứng dụng function ls
  • Viết một command để fetch và lưu các post reddit trên /r/programming dưới dạng file JSON
  • Viết một command cung cấp directory structure dưới dạng format JSON ví dụ jsonify dir-name cho ra file JSON có structure bên trong dir-name
  • Viết một command đọc JSON của bước trên và tạo ra directory structure
  • Nghĩ một vài task hằng ngày của mình và automate chúng

Bước 3 — Học Package Manager

Một khi đã học được những cái cơ bản của một ngôn ngữ và tại nên một vài app mẫu, hãy học cách dùng package manager ngôn ngữ đó. Các package manager sẽ giúp bạn dùng các thư viện ngoài  và phân phối các thư viện cho người khác dùng.

Nếu bạn chọn PHP thì bạn có thể học về Composer, Node.js sẽ có NPM hoặc Yarn, Python có Pip và Ruby có RubyGems. Dù cho bạn chọn cái nào đi nữa, hãy cứ tiếp tục và học về package manager.

Bước 4 — Các tiêu chuẩn và Best Practices

Mỗi ngôn ngữ có những tiêu chuẩn riêng và best practices (cách làm tốt nhất). Hãy tìm ra và học hỏi từ nó. Ví dụ, PHP có PHP-FIG và PSRs. Với Node.js sẽ có rất nhiều hướng dẫn phục vụ cộng đồng cũng như nhiều ngôn ngữ khác.

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

Bước 5 — Bảo mật

Hãy nhớ đọc về các best practices trong mảng bảo mật. Đọc OWASPguidelines để hiểu về nhiều vấn đề bảo mật khác nhau và cách phòng tránh nó đối với từng ngôn ngữ mà bạn chọn.

Bước 6 — Thực hành thêm nữa

Sau những nền tảng cơ bản, tiêu chuẩn và best practice, bảo mật cũng như cách dùng package manager, bây giờ là lúc tự tạo nên một package và phân phối nó đi cho người  khác dùng, nhớ follow các tiêu chuẩn và best practices đã học. Ví dụ như, nếu bạn chọn PHP, bạn có thể release nó trên Packagist, còn nếu chọn Node.js thì release trên Npm registry,…

Sau khi đã xong, bạn có thể search thêm một số project trên Github và mở một số pull request trong các projects. Dưới đây là một vài gợi ý cho bạn:

  • Refactor và ứng dụng những best practice mà bạn học được
  • Xem các vấn đề mở và thử giải quyết nó
  • Add thêm một số functionality

Bước 7 — Học thêm về Testing

Hiện có rất nhiều kiểu test, mục tiêu đó là phải hiểu rõ các loại này là gì. Nhưng trước mắt hãy cách viết Unit Test và Integration test cho app trước đã. Đồng thời hãy tìm hiểu thêm về các phương pháp testing như mocks, stubs,…

Bước 8 — Thực tế

Hãy viết thử unit test cho một số task thực tế mà bạn đã làm, đặc biệt là những cái bạn đã làm ở Bước 6.  

Đồng thời nhớ tính toán thử mức độ cover của các test đã viết.

Bước 9 — Học về Relational Database

Làm thế nào để bảo toàn data trên relational database (dữ liệu quan hệ). Trước khi bạn lựa chọn tool để học, hãy tìm hiểu trước về các phương pháp database terminologies khác nhau như các key, index, normalization, tuple, v.v

Có rất nhiều sự lựa chọn, tuy nhiên nếu bạn học một cái rồi, thì những cái còn lại sẽ trở nên dễ hơn. Một trong những cái lý tưởng để bắt đầu đó là MySQL, MariaDB (khá giống nhau và là một mảnh của MySQL) và PostgreSQL. Pick MySQL.

Tìm việc làm Backend Intern HCM trên TopDev ngay!

Bước 10 —  Thời gian thực tế

Bây giờ bạn sẽ đem tất cả những thứ bạn đã học ra để sử dụng. Tạo nên một ứng dụng đơn giản, bất cứ idea nào, ví dụ một ứng dụng viết blog, rồi áp dụng các feature dưới đây:

  • User Account  — Đăng ký và Đăng nhập
  • Những user đã đăng ký có thể tạo các bài blog
  • User có thể xem tất cả các bài blog mà mình đã viết
  • User có thể xoá bài blog
  • User chỉ xem được blog của mình chứ không xem của người khác được
  • Viết các unit/integration test cho app
  • Bạn có thể áp dụng index cho các query. Phân tích queries để biết chắc là các index đang hoạt động

Bước 11 — Học một Framework

Tuỳ vào project và ngôn ngữ mà bạn chọn thì bạn có thể cần hoặc không cần đến framework. Mỗi ngôn ngữ có rất nhiều lựa chọn, hãy tìm hiểu và xem xem ngôn ngữ của bạn có gì và chọn một cái liên quan.

Nếu bạn chọn PHP, tôi đề xuất bạn nên dùng Laravel hoặc Symfony hoặc đối với các framework nhỏ thì bạn có thể dùng Lumen hoặc Slim. Nếu bạn chọn Node.js thì cũng có rất nhiều lựa chọn nhưng cái mạnh nhất đến nay đó là Express.js.

Bước 12 — Thời gian thực hành

Để thực hành bước này, hãy convert app và bạn đã làm ở Bước 10 để áp dụng framework mình đã chọn. Nhớ port mọi thứ kể cả các test nhé.

Lộ trình trở thành Backend Developer
HTML and CSS code developing screenshot. Abstract web site source listing on black background with colored syntax

Bước 13 —  Học NoSQL Database

Đầu tiên hãy tìm hiểu nó là cái gì, chúng khác dữ liệu quan hệ chỗ nào và tại sao cần dùng đến nó. Có rất nhiều sự lựa chọn, chỉ cần tìm kiếm một chút và so sánh các feature sẽ thấy được sự khác nhau. Một số option phổ biến gồm có MongoDB, Cassandra, RethinkDB và Couchbase. Nếu phải chọn một thì bạn nên chọn MongoDB.

Bước 14 — Caching

Hãy tìm hiểu cách ứng dụng app level caching cho ứng dụng của mình. Hiểu được cách sử dụng mà bạn đã build ở Bước 12.

Bước 15 —  Tạo các RESTful API

Tìm hiểu về REST và học cách tạo ra các RESTful API và nhớ đọc về REST trong bài viết gốc của Roy Fielding, để cứ hễ ai bảo REST chỉ dành cho HTTP API là bạn sẽ có thể sửa lưng họ ngay.

Bước 16 —  Học các Auth Method khác nhau

Bạn cần phải biết chúng là gì, sử dụng thế nào và cái này khác cái kia ở chỗ nào

  • OAuth — Open Authentication
  • Basic Authentication
  • Token Authentication
  • JWT — JSON Web Tokens
  • OpenID

Bước 17 —  Các Message Broker

Cũng có nhiều lựa chọn cho bạn nhưng có 2 cái nổi bật hơn đó là RabbitMQKafka. Nếu phải chọn một thì nên hãy học RabbitMQ trước.

Bước 18 —  Công cụ Search

Khi app đã bắt đầu phát triển, các query đơn giản dù cho trên dữ liệu quan hệ hay dữ liệu NoSQL sẽ không từ cắt ra và bạn sẽ phải resort riêng công cụ search. Bạn nên cân nhắc tuỳ nhu cầu, vì có rất nhiều option và mỗi option đều có những điểm đặc biệt riêng.

Bước 19 —  Học cách dùng Docker

Docker có thể giúp bạn rất nhiều trong quá trình lập trình ứng dụng, không chỉ tạo lặp một môi trường tương tự khi produce,  giữ cho hệ điều hành luôn sạch sẽ hoặc thúc đẩy code, test và deploy. Tôi sẽ cho bạn một câu hỏi để tìm hiểu và tự trả lời cho mình “Nó sẽ giúp tôi bằng cách nào?”. Cứ thế hãy tìm hiểu và học cách dùng Docker.

Bước 20 —  Trau dồi kiến thức về các Web Server

Nếu đã đến bước này, bạn chắc chắn đã phải tiếp xúc với nhiều server. Lúc này chủ yếu bạn sẽ tìm điểm khác nhau giữa các web server, hiểu được những giới hạn và các configuration option có sẵn cũng như cách viết app để tối ưu hoá các giới hạn này.

Bước 21 — Học cách dùng Web Socket

Mặc dù không bắt buộc, có thêm kiến thức này có thể giúp ích cho bạn rất nhiều. Tìm hiểu xem cách viết web app real-time và một số app mẫu bằng web-socket, bạn có thể dùng nó trên blog application để ứng dụng các update real-time trên blog posts listing.

Bước 22 —  Học GraphQL

Hiểu rõ nó khác chỗ nào REST và tại sao lại gọi nó là REST 2.0.

Bước 23 —  Xem các biểu đồ dữ liệu

Các Biểu đồ đồ thị sẽ giúp bạn linh hoạt hơn khi xử lý data, cũng như cung cấp cho bạn nguồn lưu trữ nhanh chóng và hiệu quả để dễ thu hồi hoặc query nó. Học thêm về Neo4j or OrientDB.

Bước 24 —  Không ngừng khám phá thêm

Một khi bạn đã bắt tay vào học và làm, chắc chắn bạn sẽ vấp phải thêm nhiều thứ mà chúng tôi chưa liệt kê hết trên đây. Hãy luôn ở trong tâm lý mở không ngại học cái mới, vì kết quả thế nào là do bạn chọn. 

Hi vọng thông tin trên đây đã có thể làm rõ thắc mắc của bạn về Backend Developer là gì cũng như lộ trình trở thành Backend Developer. Mọi thông tin đều mang tính tham khảo, bạn hãy tìm hiểu thật kỹ và đưa ra lộ trình phù hợp với bản thân nhé. Điều quan trọng là hãy đam mê và thật kiên trì.

Anh em có thể tham khảo thêm về Devops và các kỹ năng khác:

7. Tham khảo

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Bạn có thể quan tâm:

Đừng bỏ lỡ hàng loạt việc làm IT hấp dẫn trên TopDev nhé!

 

Top 6 công việc IT phát triển nhanh nhất tại Việt Nam

Năm 2023 là một năm đầy khó khăn của kinh tế thế giới khi phải đối mặt với những tác động của đại dịch Covid-19, suy thoái kinh tế và chiến tranh Nga – Ukraine. Tuy nhiên, đứng trước bối cảnh rối ren của nền kinh tế thế giới, ngành CNTT vẫn có những chuyển biến tích cực với sự đẩy nhanh của quá trình chuyển đổi số và các công nghệ liên quan đến AI.

Việt Nam cũng không ngoại lệ, sự đầu tư mạnh mẽ vào công nghệ của các doanh nghiệp cũng như nhu cầu nhân lực CNTT ngày càng tăng đã cho thấy tín hiệu tích cực của toàn ngành trong tương lai. Và để đón đầu được xu hướng phát triển tiếp theo của ngành CNTT, Báo cáo thị trường IT Việt Nam 2023 do TopDev phát hành đã chỉ ra Top 6 công việc IT phát triển nhanh nhất, giúp bạn đánh giá được thị trường một cách tổng quan và chính xác.

Top công việc IT phát triển nhanh tại Việt Nam

Dưới đây là top các công việc IT phát triển nhanh tại Việt Nam năm 2023 dựa theo Báo cáo thị trường IT Việt Nam của TopDev.

Data Scientist

Data Scientist sử dụng các kỹ năng kỹ thuật và phân tích để xác định các mẫu, xử lý dữ liệu và rút ra kết luận có giá trị. Họ nhận ra các giải pháp đúng đắn bằng cách kết hợp kiến thức lý thuyết và ngành, những hiểu biết theo ngữ cảnh và sự hoài nghi về các giả định đã được thiết lập.

Top công việc IT phát triển nhanh tại Việt Nam

Nhu cầu về Data Scientist đang tăng cao do sự phát triển của công nghệ dữ liệu và trí tuệ nhân tạo. Các doanh nghiệp đang ngày càng tích lũy một lượng lớn dữ liệu, và họ cần Data Scientist để giúp họ phân tích dữ liệu này để đưa ra các quyết định kinh doanh hiệu quả hơn.

Một số kỹ năng Data Scientist bao gồm: thuật toán Machine Learning, tạo mô hình dữ liệu, ngôn ngữ lập trình như Python và R, xác định các vấn đề kinh doanh để cung cấp các giải pháp phù hợp.

Mức lương của Data Scientist theo cấp bậc:

  • Level 1 – Basic $1.560
  • Level 2 – Intermediate $2.090
  • Level 3 – Advanced $2.381

Devops Engineer

DevOps Engineer là một trong những vị trí được tuyển nhiều nhất trong những năm gần đây. DevOps Engineer là người giám sát các quy trình coding, scripting và phát triển. Họ cũng phụ trách nhóm phát triển phần mềm tham gia vào các hoạt động triển khai và mạng.

Nhu cầu về DevOps Engineer cũng đang tăng cao do sự phát triển của công nghệ đám mây và tự động hóa. Các doanh nghiệp đang chuyển đổi sang các mô hình phát triển và vận hành dựa trên đám mây, và họ cần DevOps Engineer để giúp họ thực hiện quá trình chuyển đổi này.

Top công việc IT phát triển nhanh tại Việt Nam

Một số kỹ năng DevOps Engineer bao gồm: Ngôn ngữ lập trình, chẳng hạn như Python và R, coding & scripting, nắm bắt tốt các công cụ như Git và Jenkins, làm chủ trong Linux hoặc UNIX System, kỹ năng giao tiếp và giao tiếp tốt, hiểu biết sâu sắc về các best practice của DevOps

Mức lương của Devops Engineer theo cấp bậc:

  • Level 1 – Basic $1.519
  • Level 2 – Intermediate $1.831
  • Level 3 – Advanced $ 2.161

  TopDev phát hành Báo cáo thị trường IT Việt Nam năm 2023: Điểm sáng trong phục hồi kinh tế gắn liền với chương trình đổi mới sáng tạo và chuyển đổi số quốc gia

  Ai là "cha đẻ" của các ngôn ngữ lập trình nổi tiếng nhất thế giới?

Cloud Architect

Cloud Architect tạo ra cấu trúc & chiến lược trên Cloud. Họ cũng phối hợp, thực hiện và triển khai các dịch vụ đám mây. Cloud Architect đảm bảo kiến trúc ứng dụng chính xác và thực hiện trên các nền tảng Cloud.

Nhu cầu về Cloud Architect cũng đang tăng cao do sự phát triển của công nghệ đám mây. Các doanh nghiệp đang ngày càng chuyển sang các giải pháp đám mây để tiết kiệm chi phí và cải thiện hiệu quả.

Một số kỹ năng của Cloud Architect bao gồm: các ngôn ngữ lập trình như Python, Ruby, Nguyên tắc cơ bản lưu trữ dữ liệu, Route 53 (DNS), CloudFront (CDN) và Virtual Private Cloud (VPC), các khuôn mẫu và công nghệ cụ thể của Cloud.

Mức lương của Cloud Architect theo cấp bậc:

  • Level 1 – Basic $1.875
  • Level 2 – Intermediate $3.208
  • Level 3 – Advanced $3.524

Tổng hợp các việc làm Back-end đang tuyển trên TopDev

AI Engineer

Một kỹ sư AI chịu trách nhiệm phát triển và triển khai các hệ thống và giải pháp dựa trên trí tuệ nhân tạo. Điều này liên quan đến việc thiết kế, xây dựng, đào tạo và triển khai các mô hình và thuật toán AI có thể thực hiện các tác vụ như xử lý ngôn ngữ tự nhiên, nhận dạng hình ảnh và phân tích dự đoán.

Top công việc IT phát triển nhanh tại Việt Nam

Họ phải thành thạo các ngôn ngữ lập trình như Python, Java, C++ và R, đồng thời quen thuộc với các khung phát triển phần mềm như TensorFlow, PyTorch và Keras. Ngoài ra, họ phải có kiến thức tốt về thuật toán và cấu trúc dữ liệu, cũng như kinh nghiệm phân tích dữ liệu, sắp xếp dữ liệu và trực quan hóa dữ liệu.

Mức lương của AI Engineer theo cấp bậc:

  • Level 1 – Basic $520 – $1.080
  • Level 2 – Intermediate $1.080 – $2.160
  • Level 3 – Advanced $2.160 – $4.320

Cybersecurity Specialist

Làm việc từ xa, internet of things (IoT) và sự di chuyển ngày càng nhiều khía cạnh trong cuộc sống của chúng ta sang miền kỹ thuật số (cũng như siêu dữ liệu) đều có tác động lớn đến những cách mà tội phạm mạng có thể khiến cuộc sống trở nên khó chịu.

Các chuyên gia an ninh mạng khai thác AI để dự đoán và chống lại các cuộc tấn công hack và DDOS, đồng thời áp dụng phương pháp tiếp cận tâm lý cần thiết để chống lại các phương pháp tiếp cận công nghệ thấp hơn dựa trên kỹ thuật xã hội. Đó là một bộ kỹ năng đa dạng và sẽ khiến bất kỳ ai cũng trở thành người hấp dẫn phù hợp với lực lượng lao động trong tương lai.

Mức lương của Cybersecurity Specialist theo cấp bậc:

  • Level 1 – Basic $2.072
  • Level 2 – Intermediate $3.180
  • Level 3 – Advanced $3.566

Full-Stack Developer

Top công việc IT phát triển nhanh tại Việt Nam

Full-stack Developer chịu trách nhiệm phát triển và xây dựng API bằng cách sử dụng các combo khác nhau của các tech stack và thành thạo cả back-end & front-end.

Một số kỹ năng full-stack developer bao gồm: Hiểu rõ về ngôn ngữ lập trình (MongoDB, Express.js, AngularJs và Node.js …), kiến thức về cách thiết kế và phát triển API, hiểu về các nguyên tắc phát triển web, good command trên cơ sở dữ liệu công nghệ.

Tóm lại

Trong bài viết này, chúng ta đã điểm qua những công việc IT phát triển nhanh nhất tại Việt Nam năm 2023. Đây là những công việc không chỉ đáp ứng nhu cầu ngày càng cao của thị trường công nghệ thông tin, mà còn đem lại cơ hội nghề nghiệp hấp dẫn cho các tài năng trẻ tại đất nước chúng ta.

Tuy nhiên, công nghệ càng phát triển đòi hỏi trình độ người lao động càng cao để đáp ứng những yêu cầu thay đổi liên tục của công việc. Theo báo cáo, trình độ lập trình viên Việt Nam vẫn chưa đáp ứng đủ nhu cầu và tốc độ phát triển của ngành. Vì vậy, để theo kịp mỗi người cần cải thiện kỹ năng, học tập nâng cao trình độ và khám phá những cơ hội mới trong lĩnh vực IT. Thị trường CNTT Việt Nam đang chờ đón những tài năng mới đam mê và sáng tạo.

Xem thêm:

Tìm kiếm việc làm IT mới nhất tại TopDev!

Học lập trình có cần giỏi Toán không?

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

Là một lập trình viên mới bắt đầu, bạn có thể tự hỏi liệu bạn học lập trình có cần giỏi toán để viết code hay không? Trong bài viết này, tôi hy vọng sẽ xóa bỏ nghi ngờ đó.

Lập trình là một thế giới của riêng nó

Học lập trình có cần giỏi Toán không?

Đầu tiên, tôi muốn bạn biết rằng code là một thuật ngữ rộng và nó không chỉ đề cập đến một khái niệm duy nhất. Ý tôi là, bạn có thể làm nhiều thứ với code và khả năng thực tế là vô tận. Điều đó nói rằng, đây là một số điều mà bạn có thể thực hiện với code:

Code không phải là toán học – Đó là một ngôn ngữ

Học lập trình có cần giỏi Toán không?

Điều về toán học là chỉ có một giải pháp cho một vấn đề và dựa trên câu trả lời của bạn, bạn đúng hoặc sai.

Điều thú vị về code là có nhiều hơn một cách để giải quyết vấn đề và theo nhiều cách, bạn có thể sử dụng sự sáng tạo của mình để tìm ra giải pháp. Theo nhiều cách, học viết code cũng giống như học một ngôn ngữ mới. Ngôn ngữ lập trình có vốn từ vựng và dấu câu riêng, và tôi sử dụng chúng để yêu cầu máy tính làm những gì chúng tôi muốn.

Nó giống như yêu cầu một sự giúp đỡ từ một người bạn, trong đó có nhiều cách để làm như vậy. Sự khác biệt duy nhất là lần này, bạn của bạn là một chiếc máy tính, người rất trung thành và bạn sẽ sử dụng một ngôn ngữ khác.

  Học lập trình cần học các kiến thức cơ bản nào?

  Top 10 quy tắc học lập trình mà ai cũng nên theo

Khi nào tôi cần sử dụng toán học?

Trước khi tôi tiến xa hơn, bạn đừng bỏ qua thực tế là toán học rất hữu ích và có lẽ được sử dụng rất thường xuyên hàng ngày, cho dù bạn có phải là một lập trình viên hay không.

Điều đó nói rằng, hãy suy nghĩ về thời điểm chúng ta sẽ sử dụng toán học khi chúng ta viết code. Có lẽ bạn đang suy nghĩ điều gì đó dọc theo dòng khoa học dữ liệu, học máy hoặc trí tuệ nhân tạo. Trong trường hợp bạn đã từng, bạn hoàn toàn đúng.

Phân tích dữ liệu đòi hỏi nhiều kiến thức về toán học vì khi phân tích dữ liệu, các nhà khoa học dữ liệu chạy các thuật toán toán học phức tạp trên dữ liệu để xác định các mẫu và mối tương quan trong dữ liệu.

Lập trình game là một lĩnh vực code khác sử dụng nhiều toán học. Tính thực tế của các trò chơi đến từ toán học đằng sau chúng. Tôi nghĩ tất cả chúng ta đều có thể đồng ý, rằng các trò chơi ngày nay đang bắt đầu cảm thấy thực tế hơn bao giờ hết. Dưới đây là một số nhánh toán học được sử dụng trong lập trình game.

  • Đại số học
  • Lượng giác học
  • Tính toán
  • Đại số tuyến tính
  • Toán học rời rạc
  • Toán ứng dụng

Tất nhiên, có rất nhiều lúc khác mà bạn có thể cần sử dụng toán học, nhưng tôi chỉ muốn cho bạn biết khi nào bạn cần sử dụng các khái niệm toán học nặng.

Việc làm IT Fresher dành cho bạn

Toán học trong phát triển web

Học lập trình có cần giỏi Toán không?

Tôi đã thấy nhiều người nói rằng bạn không cần phải biết toán học để trở thành một lập trình viên web. Mặc dù điều này đúng với hầu hết các phần, nhưng điều đó không có nghĩa là bạn có thể hoàn toàn bỏ qua toán học và mong đợi trở thành một lập trình viên web giỏi.

Ví dụ: toán học có thể được sử dụng để căn chỉnh các phần tử theo thứ tự đẹp, sử dụng CSS và nó cũng có thể được sử dụng để tạo hoạt ảnh động bằng JavaScript, chẳng hạn như mờ dần khi cuộn.

Nói cách khác, mặc dù toán học có thể không được sử dụng nhiều trong lập trình web, nhưng tôi thực sự khuyên bạn không nên bỏ qua nó.

Kết luận

Vậy tôi có cần phải giỏi toán không?

Câu trả lời cho câu hỏi này thực sự phụ thuộc vào những gì bạn dự định theo đuổi trong sự nghiệp lập trình của mình.

Tuy nhiên, nói chung, bạn không cần phải giỏi toán để trở thành một lập trình viên giỏi hoặc học cách viết code.

Chỉ cần biết những điều cơ bản của toán học sẽ thực hiện thủ thuật. Điều đó nói rằng, tôi hy vọng tôi đã xóa tan nghi ngờ của bạn về việc bạn có cần phải giỏi toán để viết code hay không.

Cám ơn các bạn đã theo dõi bài viết.

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

Xem thêm:

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

TOP 10 thư viện React Hook hữu ích lập trình viên nên biết

Bài viết được sự cho phép của tác giả Sơn Dương

React Hook là một “luồng gió” mà nhà phát hành React đã giới thiệu trong thời gian gần đây. Trên VNTALKING cũng có một bài viết giới thiệu về React Hook mà bạn nên đọc: React Hook là gì?

So với thời điểm mới ra mắt, hiện tại có rất nhiều thư viện hỗ trợ React Hook, giúp cho bạn phát triển dự án với React được dễ dàng hơn rất nhiều. Khi tìm kiếm trên internet về React, bạn sẽ gặp nhan nhản các từ khóa, các kỹ thuật liên quan tới “Hooks”, đây cũng là xu hướng mà chính nhà hành React cũng mong muốn như vậy. Nếu dự án của bạn chưa sử dụng Hook, có lẽ bạn nên suy nghĩ lại.

Hook giúp cho mã nguồn dự án trở nên rõ ràng, đảm bảo khả năng đọc code, khả năng bảo trì, khả năng tái sử dụng và có ít dòng mã hơn. Đây đều là những yếu tố rất quan trọng trong quá trình phát triển React.

Vì vậy trong blog này, mình sẽ giới thiệu cho bạn 10 thư viện React Hook hàng đầu mà bạn nên bắt đầu sử dụng ngay lập tức. Không để chậm trễ hơn nữa, chúng ta hãy bắt đầu tìm hiểu 10 thư viện đó nào.

1. Use-http

Use-http là một thư viện cực kì hữu ích được sử dụng để thay thế cho Fetch API. Được xây dựng và bảo trì với chất lượng cao, nó làm cho việc viết mã của bạn trở nên đơn giản và dễ hiểu hơn nhiều với sự chú trọng đặc biệt vào phần xử lý dữ liệu. Bản thân hook sử dụng TypeScript và thậm chí còn hỗ trợ SSR và GraphQL. Nó trả về một response, loading, error data và các phương thức yêu cầu khác nhau như Get, Post, Put, Patch và Delete.

Các tính năng chính mà nó cung cấp là:

  • Request/Response interceptors
  • Suspense (hiện đang được thử nghiệm)
  • Chức năng retry
  • Bộ nhớ đệm

Một ví dụ sử dụng thư viện này.

import useFetch from "use-http"

const Example = () => {
  const [todos, setTodos] = useState([])
  const { get, post, response, loading, error } = useFetch("https://example.com")

  useEffect(() => { get("/todos") }, [])

  const addTodo = async () => {
      await post("/todos", { title: "example todo" });
      if (response.ok) setTodos([...todos, newTodo])
  }

  return (
    <>
      <button onClick={addTodo}>Add Todo</button>
      {error && 'Error!'}
      {loading && 'Loading...'}
      {todos.map(todo => (
        <span key={todo.id}>{todo.title}</span>
      )}
    </>
  );
};

2. UseMedia

Bạn đã bao giờ cần phải theo dõi các câu truy vấn CSS media query?

useMedia Hook cung cấp một cách tiếp cận đơn giản để giải quyết cho vấn đề này. Media queries thực sự quan trọng trong các ứng dụng cần khả năng hiển thị responsive, tức là ứng dụng web hiển thị đẹp trên nhiều kích thước màn hình khác nhau

Được viết bằng TypeScript, nên Hook này đương nhiên sẽ hỗ trợ Typescript. Đặc biệt, thư viện này có nguồn tài liệu hướng dẫn rất đầy đủ và rõ ràng, nên bạn hoàn toàn yên tâm tích hợp hook nào vào ứng dụng.

Ví dụ cách sử dụng:

import useMedia from 'use-media';

const Example = () => {
  const isWide = useMedia({minWidth: '1000px'});

  return (
    <span>
      Screen is wide: {isWide ? "WideScreen" : "NarrowScreen"}
    </span>
  );
};

  Làm quen với React Hook bằng ví dụ

  Cách tạo các biểu mẫu cơ bản bằng React Hooks

3. Constate

Constate là một hook package cung cấp khả năng nâng local stage dựa lên React Context.

Điều này có nghĩa là bất kỳ state nào từ bất kỳ component nào cũng có thể dễ dàng được nâng lên Context chỉ với một dòng code đơn giản. Điều này rất hữu ích trong trường hợp bạn muốn sử dụng cùng một state ở nhiều vị trí hoặc cung cấp cùng một state cho nhiều component. Cái tên này xuất phát từ một cách chơi chữ kết hợp giữa Context và State.

Thư viện này được viết bằng TypeSript và có kích thước rất nhỏ. Tài liệu không quá chi tiết nhưng nó đủ giúp bạn hoàn thành công việc.

import React, { useState } from "react";
import constate from "constate";

// custom hook
function useCounter() {
  const [count, setCount] = useState(0);
  const increment = () => setCount(prevCount => prevCount + 1);
  return { count, increment };
}

// hook passed in constate
const [CounterProvider, useCounterContext] = constate(useCounter);

function Button() {
  // use the context
  const { increment } = useCounterContext();
  return <button onClick={increment}>+</button>;
}

function Count() {
  // use the context
  const { count } = useCounterContext();
  return <span>{count}</span>;
}

function App() {
  // wrap the component with provider
  return (
    <CounterProvider>
    <Count />
    <Button />
    </CounterProvider>
  );

Xem thêm các việc làm React hấp dẫn lương cao

4. Redux hooks

Redux là một công cụ nổi tiếng đối với nhiều nhà phát triển React, nếu không muốn nói là tất cả. Nó được sử dụng như một trình quản lý global state trong toàn bộ ứng dụng.

Redux đã đi vào hoạt động với những ưu điểm hấp dẫn chỉ trong một vài tháng sau khi phát hành lần đầu tiên của React. Redux cung cấp một giải pháp thay thế cho mẫu HOC (Higher Order Component) với phương thức connect() được xây dựng sẵn

Các hook đáng chú ý nhất được cung cấp là:

  • useSelector
  • useDispatch
  • useStore

Tài liệu này có một chút phức tạp nhưng nó khá tốt, nó sẽ cung cấp cho bạn mọi thông tin cần thiết để bắt đầu sử dụng chúng.

import {useSelector, useDispatch} from "react-redux";
import React from "react";
import * as actions from "./actions";

const Example = () => {
const dispatch = useDispatch()
const counter = useSelector(state => state.counter)

return (
<div>
   <span>
     {counter.value}
   </span>
   <button onClick={() => dispatch(actions.incrementCounter)}>
     Counter +1
   </button>
</div>
);
}

5. React hook form

React hook form là một thư viện form hook tương tự như biểu mẫu Formik và Redux, nhưng tốt hơn. Với cú pháp đơn giản, tốc độ nhanh, render ít hơn và khả năng bảo trì tốt hơn, nó bắt đầu leo lên các bảng xếp hạng trên GitHub.

React hook form có kích thước nhỏ và được xây dựng với đặc biệt chú trọng về hiệu suất. Thư viện còn cung cấp một công cụ form builder tuyệt vời. Và nó có một trong những repo về React có lượng star lớn trên GitHub – 14,8k.

import React from "react";
import { useForm } from "react-hook-form";

function App() {
  const { register, handleSubmit, errors } = useForm();
  const onSubmit = (data) => {
    // logs {firstName:"exampleFirstName", lastName:"exampleLastName"}
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
     <input name="firstName" ref={register} />
     <input name="lastName" ref={register({ required: true })} />
     {errors.lastName && <span>"Last name is a required field."</span>}
     <input name="age" ref={register({ required: true })} />
     {errors.age && <span>"Please enter number for age."</span>}
     <input type="submit" />
    </form>
  );
}

6. useDebounce

useDebounce là một hook nhỏ được sử dụng cho mục đích hỗ trợ debug. Hook này được sử dụng để trì hoãn việc thực thi chức năng, và nó cũng thường được sử dụng trong các input trong form nơi dùng để nhập dữ liệu.

import React, { useState } from "react";
import { useDebounce } from "use-debounce";

export default function Input() {
  const [text, setText] = useState("Hello");
  const [value] = useDebounce(text, 1000);

  return (
    <div>
      <input
        defaultValue={"Hello"}
        onChange={(e) => {
          setText(e.target.value);
        }}
      />
      <p>Value: {text}</p>
      <p>Debounced value: {value}</p>
  </div>
 );
}

7. useLocalStorage

useLocalStorage là một hook nhỏ giống như cái ở trên. Nó thực sự hữu ích để giải nén và thiết lập dữ liệu bên trong localStorage. Với hook này, manipulation được thực hiện dễ dàng.

Hook cung cấp JSON serialization và đồng bộ hóa JSON tự động trên nhiều tab và được viêt bằng TypeScript nên nó cung cấp nhiều type.

Tài liệu được viết một cách chất lượng và khá dễ hiểu với nhiều ví dụ.

import React, { useState } from "react";
import { writeStorage } from '@rehooks/local-storage';

export default function Example() {
  let counter = 0;
  const [counterValue] = useLocalStorage('counterValue');

  return (
    <div>
      <span>{counterValue}</span>
      <button onClick={() => writeStorage('i', ++counter)}>
        Click Me
      </button>
    </div>
  );
}

8. usePortal

usePortal giúp việc tạo dropdowns, modals, notification popups, tooltips… cực kì dễ dàng! Nó cũng cho phép tạo các phần tử bên ngoài hệ thống phân cấp DOM của ứng dụng (để tìm hiểu cách Portals hoạt động, bấm vào đây ).

Hook này làm việc với cả SSR (Server Side Rendering). Nó được viết bằng TypeScript và có một built-in state. Đối với các chức năng, nó cung cấp tùy chỉnh đầy đủ về styling portal và rất nhiều tùy chọn khác.

Tài liệu được viết khá tốt – đặc biệt là có sẵn nhiều ví dụ minh họa sẽ là quá đủ để bắt đầu tự sử dụng thư viện/hook này đúng không!?

import React, { useState } from "react";
import usePortal from "react-useportal";

const Example = () => {
const { ref, openPortal, closePortal, isOpen, Portal } = usePortal()

    return (
      <>
    <button ref={ref} onClick={() => openPortal()}>
       Open Portal
    </button>
     {isOpen && (
       <Portal>
          <p>
            This Portal handles its own state.{' '}
            <button onClick={closePortal}>Close me!</button>, hit ESC or
            click outside of me.
          </p>
        </Portal>
      )}
        </>
  )
}

9. useHover

useHover là React state để xác định xem một phần tử React có đang được di chuột hay không. Hook này khá trực quan và dễ sử dụng. Thư viện có kích thước nhỏ nhưng rất mạnh nếu bạn đủ sáng tạo.

Nó cung cấp độ trễ của hiệu ứng di chuột và hỗ trợ TypeScript. Tài liệu không quá chi tiết, nhưng nó sẽ chỉ cho bạn cách sử dụng nó tốt nhất.

import useHover from "react-use-hover";

const Example = () => {
  const [isHovering, hoverProps] = useHover();
  return (
    <>
      <span {...hoverProps} aria-describedby="overlay">Hover me</span>
      {isHovering ? <div> I’m a little tooltip! </div> : null}
    </>
  );
}

10. React router hooks

React router là một trong những thư viện phổ biến nhất cho React. Nó được sử dụng để định tuyến và lấy lịch sử URL của ứng dụng, …

Các hook được cung cấp là:

  • useHistory
  • useLocation
  • useParams
  • useRouteMatch

Chỉ cần đọc tên hook là bạn đủ để bạn hiểu chức năng chính của nó là gì rồi đúng không?

UseHistory sẽ lấy dữ liệu về lịch sử của ứng dụng và các method, chẳng hạn như push, cái mà sẽ đẩy đến một route mới. UseLocation sẽ trả về đối tượng đại diện cho URL hiện tại. UseParams sẽ trả về một đối tượng gồm các cặp key-value của các tham số URL của route hiện tại. Và cuối cùng, useRouteMatch sẽ cố gắng khớp URL hiện tại với URL đã cho cái mà có thể là một chuỗi hoặc một đối tượng của các option khác nhau.

Tài liệu mô tả của thư viện này rất tốt và tất nhiên là có rất nhiều ví dụ minh họa trong tài liệu để bạn tham khảo.

import { useHistory, useLocation, useRouteMatch } from "react-router-dom";

const Example = () => {
let history = useHistory();
let location = useLoction();
let isMatchingURL = useRouteMatch("/post/11");

function handleClick() {
history.push("/home");
}

return (
<div>
<span>Current URL: {location.pathname}</span>
{isMatchingURL ? <span>Matching provided URL! Yay! </span> : null}
<button type="button" onClick={handleClick}>
Go home
</button>
</div>
);
}

Nhiều cái hơn nữa để lựa chọn

Có rất nhiều thư viện react hook khác trên mạng, nhưng đây là những thứ mà mình cảm thấy có ích nhất cho dự án của bạn. Nếu thực sự thích chúng, hãy thử dùng ngay cho dự án.

Hy vọng bạn đã thấy bài viết này thú vị và bạn sẽ học được điều gì đó mới mẻ. Chúc bạn tìm thấy niềm vui khi khám phá thêm về các hooks.

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

Xem thêm:

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

Chân dung lập trình viên Việt Nam năm 2023 – Thời đại của GenZ & Millennials

Theo “Báo Cáo Thị Trường IT Việt Nam 2023 – Vietnam Tech Talents Report” của TopDev, hầu hết các lập trình viên đều thuộc thế hệ GenZ & Millennials. Vì vậy, việc tìm hiểu sâu về sở thích, hành vi, tương tác xã hội, và đặc điểm nhân khẩu học của họ trở nên vô cùng quan trọng đối với các nhà tuyển dụng. Điều này giúp họ điều chỉnh chiến lược tuyển dụng của mình để phù hợp với xu hướng tuyển dụng đa thế hệ hiện nay.

Cùng TopDev khám phá chân dung của lập trình viên Việt Nam năm 2023 dưới bài viết này bạn nhé!

Độ tuổi và giới tính

Độ tuổi chiếm ưu thế trên thị trường hiện nay là từ 20 đến 34 tuổi. Nhóm tuổi có tỷ lệ cao nhất là 20 – 24 tuổi (29,8%), tiếp theo là nhóm tuổi 25 – 29 (26,2%). Hiện tại, số lượng lập trình viên ở Việt Nam ở độ tuổi trẻ chiếm đa số với 56% ở độ tuổi 20 – 29 tuổi.

Chân dung lập trình viên Việt Nam năm 2023

Điều này đã phản ánh về lực lượng lao động chủ đạo trong ngành IT những năm gần đây đa phần đến từ thế hệ GenZ & Millennials. Thế hệ này thường tìm kiếm sự cân bằng lý tưởng giữa công việc và cuộc sống, quan tâm nhiều hơn đến thông tin về công ty, và mong muốn tham gia tích cực vào quá trình phát triển sản phẩm. Vậy nên, việc xây dựng chiến lược tuyển dụng những tài năng thế hệ GenZ & Millennials là một yếu tố quan trọng các nhà tuyển dụng trong lĩnh vực IT cần tập trung.

Về sự phân hóa độ tuổi trong ngành lập trình, nam giới vẫn chiếm ưu thế trong giới tính lập trình viên hoặc người làm việc trong lĩnh vực công nghệ với 90,5%. Nữ giới chỉ chiếm tỷ lệ nhỏ 9,1% nhưng tiếp tục tăng dần kể từ khi chúng tôi ghi nhận lần đầu chỉ 5% vào năm 2017.

Chân dung lập trình viên Việt Nam năm 2023

Gần đây, ngày càng có nhiều cơ hội mở ra cho phụ nữ bắt đầu sự nghiệp với tư cách là lập trình viên từ các chương trình giáo dục STEM cũng như khuyến khích xã hội & công nghệ với thuật ngữ phổ biến “Phụ nữ trong công nghệ”.

Công nghệ phổ biến

Theo báo cáo của TopDev, JavaScript là ngôn ngữ lập trình phổ biến nhất cùng với các kỹ năng IT khác. Trong đó Nodejs, Angular & ReactJS là 3 lựa chọn hàng đầu về Javascript framework. Lựa chọn hàng đầu để làm việc với Java lần lượt là Spring Boot/Spring rồi đến Hibernate & Struts. Không có nhiều thay đổi trong danh sách .NET/C# trong đó .NET Framework, .NET Core & ASP.NET Core đứng đầu danh sách. Laravel vẫn là framework phổ biến nhất trong nhóm công nghệ PHP với hơn 75%, tiếp theo là CodeIgniter & Symfony.

Chân dung lập trình viên Việt Nam năm 2023

MySQL tiếp tục dẫn đầu nhóm công nghệ SQL với hơn 58%. Django, Falcon & Pyramid là 3 lựa chọn hàng đầu liên quan đến ngôn ngữ lập trình Python. Về lập trình di động. Java, Swift & Flutter là những lựa chọn phổ biến. Trong số các lựa chọn công nghệ đám mây, AWS vẫn chiếm ưu thế với hơn 35%, tiếp theo là Azure, VMWare, Firebase & GCP.

Công nghệ & sở thích

Theo Báo Cáo Thị Trường IT Việt Nam 2023, các công nghệ lập trình viên muốn làm việc/học nhất lần lượt là:

#1. Artificial Intelligence & Machine Learning

Công nghệ AI/ML đang có nhu cầu cao và các lập trình viên tận dụng chúng cho các nhiệm vụ như xử lý ngôn ngữ tự nhiên, thị giác máy tính và phân tích dự đoán. Các framework phổ biến bao gồm TensorFlow, PyTorch, Caffe & Keras.

#2: Cloud Computing/ AWS

Các nền tảng đám mây như AWS, Microsoft Azure và Google Cloud được sử dụng rộng rãi để xây dựng các ứng dụng linh hoạt và có thể mở rộng. Các lập trình viên tìm hiểu kiến trúc, triển khai và quản lý đám mây.

#3: Full-Stack Development

Phát triển toàn diện bao gồm làm việc với cả công nghệ frontend và backend để xây dựng các ứng dụng web hoàn chỉnh. Các tech stack phổ biến bao gồm các frameworks/ libraries dựa trên JavaScript như React.js, Angular và Node.js.

#4: DevOps

DevOps kết hợp các hoạt động phát triển và vận hành để cải thiện việc phân phối phần mềm và quản lý cơ sở hạ tầng. Các công cụ phổ biến như Docker, Kubernetes, Jenkins và Ansible được sử dụng để tự động hóa các quy trình và đạt được sự tích hợp/triển khai liên tục.

Đối với IDE & code editor, các lập trình viên đa số lựa chọn sử dụng Visual Studio Code và Visual Studio với tỉ lệ lần lượt là 55,2% và 53,4%. Tiếp theo đó là Android Studio với 38,1% và Eclipse 30,1%. Bên cạnh đó, số đông lập trình viên đang dần chuyển sang các nền tảng AI để tìm kiếm thông tin, một số công cụ tìm kiếm AI được ưu chuộng như: Chat GPT, Poe Quora AI, Bing AI, Google Bard,…

Hành vi của lập trình viên

Dựa trên số liệu báo cáo cung cấp, hơn 60% lập trình viên sử dụng tài liệu chính thức cũng như các nguồn Youtube làm cách học và tiếp cận công nghệ mới chính. Tiếp theo là các khóa học trực tuyến dựa trên video (42,1%) & dự án cá nhân (27,5%) là những cách tiếp cận công nghệ mới phổ biến. Sách công nghệ, dự án nguồn mở, khóa học tương tác trực tuyến, khóa học ngoại tuyến và cuộc thi viết mã là những phương pháp khác để học công nghệ mới nhưng mức độ phổ biến và khả năng ứng dụng được coi là không tốt bằng các phương pháp khác.

Chân dung lập trình viên Việt Nam năm 2023
Lập trình viên học ngôn ngữ / công nghệ lập trình mới như thế nào?

Ngoài ra, để cập nhật các xu hướng và tin tức công nghệ mới nhất, 73,5% lập trình viên đọc blog công nghệ và 45,1% theo dõi các Tech Fanpages công nghệ. Cách thức cập nhật tin tức qua nền tảng video đang được ưa chuộng, các kênh video trên Youtube & Tiktok mang đến nhiều cách thức tiếp cận tin tức công nghệ mới cho các lập trình viên thông qua định dạng video và tương tác.

Chân dung lập trình viên Việt Nam năm 2023
Lập trình viên cập nhật tin tức công nghệ như thế nào?

Việc nắm bắt được hành vi của các lập trình viên giúp nhà tuyển dụng dự đoán được đối tượng mục tiêu của họ đang ở đâu. Lên kế hoạch để khai thác các nền tảng, tìm kiếm ứng viên ở những nơi họ thường lui tới sẽ giúp việc tuyển dụng hiệu quả, tiết kiệm ngân sách và thời gian đáng kể.

Lời kết

Hiện nay, Việt Nam đang chứng kiến một làn sóng đầu tư mạnh mẽ vào lĩnh vực Công nghệ thông tin, không chỉ từ các doanh nghiệp trong nước mà còn có sự tham gia đáng kể của các công ty nước ngoài. Kết quả của điều này là nhu cầu về nhân lực trong lĩnh vực Công nghệ thông tin tại Việt Nam đã liên tục tăng cao trong suốt 5 năm gần đây. Do đó, việc hiểu rõ hơn về hình ảnh và khả năng của nguồn nhân lực IT tại Việt Nam là điều rất quan trọng đối với các nhà tuyển dụng, để họ có thể xây dựng những chiến lược tuyển dụng phù hợp với nhu cầu và mục tiêu của công ty mình.

Ngoài ra, bạn có thể tham khảo thêm về rất nhiều thông tin và chỉ số khác của toàn ngành IT thông qua bản báo cáo đầy đủ nhất tại:Báo Cáo Thị Trường IT Việt Nam 2023 – Vietnam Tech Talents Report” bằng cách tải xuống bên dưới:

BẢNG TIẾNG VIỆT

ENGLISH VERSION

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

Xem thêm việc làm IT hàng đầu hot nhất trên TopDev

Tổng quan mức lương lập trình viên Việt Nam 2023

Trong thời đại công nghệ ngày càng phát triển, vai trò của lập trình viên trở nên ngày càng quan trọng và thu hút sự quan tâm của nhiều người trẻ tại Việt Nam. CNTT đã trở thành một nghề hot, không chỉ vì nhu cầu thị trường và thách thức mà nó mang lại, mà còn bởi tiềm năng tài chính to lớn trong tương lai.

Năm 2023, với sự bùng nổ của ngành công nghệ thông tin và phần mềm tại Việt Nam, mức lương của lập trình viên đang là một chủ đề được quan tâm hàng đầu. Với Báo Cáo Thị Trường IT Việt Nam 2023 – Vietnam Tech Talents Report của TopDev, sẽ cho chúng ta thấy bức tranh tổng thể về mức lương của toàn ngành, cũng như biết được những công nghệ, ngôn ngữ lập trình nào đang được săn đón với đãi ngộ hấp dẫn.

Tổng quan về mức lương lập trình viên 2023

Theo Báo Cáo Thị Trường IT Việt Nam 2023 của TopDev, mức lương bình quân năm nay không thay đổi nhiều so với năm ngoái (lương trung bình $1.311) và tốc độ tăng trưởng so với cùng kỳ năm trước chỉ ở mức 0,7%.

Do tình hình kinh tế toàn cầu, hầu hết các doanh nghiệp đều rơi vào tình trạng khó khăn với nhiều vấn đề liên quan đến dòng tiền, mở rộng và tăng trưởng kinh doanh. Vì vậy, chi phí nhân công – một trong những chi phí vận hành chiếm tỷ trọng lớn nhất trong doanh nghiệp – sẽ được xem xét tối ưu hóa trước hết để đảm bảo ổn định tài chính. Tuy nhiên, mức lương bình quân của các vị trí liên quan đến CNTT vẫn cao hơn so với các ngành khác.

Báo Cáo Thị Trường IT Việt Nam 2023

Bên cạnh đó, tùy vào địa điểm khác nhau sẽ có nhu cầu và mức lương khác nhau. Cụ thể, tại TP.HCM, tỉ lệ tuyển dụng lập trình viên có mức lương $1.100 – $1.500 ở mức cao nhất 39,6%. Còn tại Hà Nội, tỉ lệ tuyển dụng lập trình viên có mức lương $600 – $1.000 và $1.100 – $1.500 lại khá tương đồng với nhau (37,7% và 36,7%). Điều này đã phản ánh về điều kiện kinh tế, thị trường việc làm cũng như nhu cầu khác nhau giữa từng khu vực.

Mức lương lập trình viên theo công nghệ

Theo số liệu từ báo cáo, hầu hết các vị trí CNTT đều bắt đầu sự nghiệp với mức lương không có sự chênh lệch quá lớn. Nhưng sau 2 năm đầu tiên trong sự nghiệp, mô hình lương sẽ đi theo hướng khác liên quan đến công nghệ và có thể bị ảnh hưởng rất nhiều từ thị trường việc làm, tình hình kinh tế và các yêu cầu kinh doanh mới nổi.

Báo Cáo Thị Trường IT Việt Nam 2023

Nhìn chung, hầu hết các nhóm công nghệ cơ bản như Java, Python, .NET, C++ & PHP vẫn được coi là được trả lương cao liên tục qua nhiều năm. Các kỹ năng công nghệ cao mới như liên quan đến Đám mây/ AI/ ML/ DevOps đang được đầu tư nhiều hơn với mức lương cao hơn với tác động to lớn của các ứng dụng trong thế giới thực hiện nay về Điện toán đám mây, AI sáng tạo và quy trình phát triển hiện đại.

Mức lương lập trình viên theo trình độ

Mức lương thường tăng lên khi người lao động thăng tiến trong các cấp bậc công việc, kinh nghiệm cùng với thâm niên. Có sự khác biệt đáng kể về mức lương giữa các cấp bậc công việc. Các cấp độ Leader/ Manager và Director/ Architect có mức lương cao nhất, phản ánh trách nhiệm và chuyên môn ngày càng tăng cần thiết cho các vị trí này.

Báo Cáo Thị Trường IT Việt Nam 2023

Theo báo cáo thị trường IT của TopDev, ở vị trí Fresher (dưới 1 năm kinh nghiệm), trung bình nhận mức lương từ $435 đến $514. Sau 2 năm làm việc trong ngành IT, tốc độ tăng lương có vẻ nhanh hơn 2 năm đầu khi các lập trình viên đã tích lũy được một số kiến thức nền tảng & kinh nghiệm làm việc. Khi đạt đến cấp Director/ Architect, mức lương trung bình một người có thể nhận được vượt qua $2.000 và có thể lên đến $2.700.

Mức lương lập trình viên theo vị trí

Theo dự đoán của các báo cáo trước, các vị trí được trả lương cao nhất đòi hỏi các kỹ năng đặc biệt như Data Analyst, Cloud, DevOps, Machine Learning hoặc AI. Do tác động của Covid-19 dẫn đến nhu cầu chuyển đổi số của doanh nghiệp, từ đó Cloud Service & DevOps đã đóng vai trò quan trọng hơn trong việc duy trì và phát triển doanh nghiệp. Do đó, nhu cầu về kỹ sư Cloud/DevOps đã tăng lên đáng kể, kéo theo đó là những vị trí liên quan sẽ tăng mức lương.

Báo Cáo Thị Trường IT Việt Nam 2023

Các vị trí liên quan đến khả năng quản lý như Tech Management (CTO/CIO), Technical Director/ Engineering Manager vẫn sẽ giữ mức lương cao nhất (Tech Management $5,950 và Technical Director /Engineering Manager $4.290). Cùng với đó, một số vị trí khác liên quan đến việc hỗ trợ như IT Helpdesk, Technician, Tester, QA/QC giữ mức lương dưới $1000.

Tính lương chuẩn với công cụ tính lương gross to net từ TopDev

Tổng kết

Như vậy, mức lương của lập trình viên tại Việt Nam trong năm 2023 không chỉ phụ thuộc vào kỹ năng và kinh nghiệm cá nhân, mà còn phụ thuộc vào công nghệ, trình độ, vị trí công việc và nhiều yếu tố khác nữa. Với những nội dung & số liệu mà Báo Cáo Thị Trường IT Việt Nam 2023 mang lại đã cho thấy rằng ngành công nghệ thông tin ở Việt Nam vẫn đang trong giai đoạn phát triển mạnh mẽ, tạo cơ hội lớn cho các lập trình viên.

Điều quan trọng là lập trình viên cần luôn nâng cao kỹ năng, không ngừng học hỏi và cập nhật kiến thức để duy trì sự cạnh tranh trên thị trường lao động ngày càng cạnh tranh. Ngoài ra, tìm hiểu kỹ về công ty mình muốn làm việc để có thể thương lượng lương tốt nhất.

Tham khảo thêm nhiều thông tin và chỉ số khác của toàn ngành IT thông qua bản báo cáo đầy đủ nhất tại đây: Báo Cáo Thị Trường IT Việt Nam 2023 – Vietnam Tech Talents Report.

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

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

Ngành CNTT vươn mình trong thách thức giữa “tâm bão” suy thoái kinh tế

Suy thoái kinh tế và những dư chấn sau đại dịch là một trong các thách thức lớn nhất của ngành Công nghệ thông tin trong năm 2023. Ngành công nghệ đang phải đối mặt với các vấn đề xung quanh chuỗi cung ứng, lực lượng lao động, an ninh mạng bên cạnh cuộc đua công nghệ số đang ngày càng gay gắt. 

Đứng trước vô vàn thách thức, các công ty công nghệ đã có những chuyển biến mạnh mẽ để đứng vững giữa thị trường đầy biến động. Song song với đó, các lập trình viên cũng tích cực thay đổi, nắm bắt thời cơ và trau dồi tri thức để đáp ứng những nhu cầu ngày càng khắt khe của doanh nghiệp.

Vậy suy thoái kinh tế đã ảnh hưởng như thế nào đến ngành CNTT? Các doanh nghiệp công nghệ và người lao động đã làm gì để “sống khỏe” trong giai đoạn này?

Suy thoái kinh tế khiến nhiều doanh nghiệp “điêu đứng”

Theo Vietnam IT Market Report 2023 – Vietnam Tech Talents Report do TopDev phát hành, lĩnh vực thông tin và truyền thông đạt doanh thu hơn 1,6 triệu tỷ đồng (69 tỷ USD) từ đầu năm đến nay, giảm 8,66% so với cùng kỳ năm ngoái. Sự sụt giảm này là do kinh tế toàn cầu gặp khó khăn khi suy thoái kinh tế ở nhiều nước vẫn chưa giảm bớt, dẫn đến thị trường tiêu thụ sản phẩm CNTT yếu. Xung đột Ukraineđại dịch Covid-19 cũng ảnh hưởng đến lĩnh vực này, khiến xuất khẩu CNTT của Việt Nam sụt giảm.

Vietnam IT Market Report 2023 - Vietnam Tech Talents Report
Doanh thu ITC 2016 – 2023

Sự giảm tốc này đã ảnh hưởng ít nhiều đến kế hoạch ngân sách đầu tư và chi tiêu của các doanh nghiệp công nghệ trong năm nay. Các doanh nghiệp phải suy nghĩ nhiều hơn về việc phải làm thế nào để giảm chi phí, tăng hiệu quả và tăng doanh thu. Điều này đã ảnh hưởng trực tiếp đến lực lượng lao động khi nhiều doanh nghiệp đã tiến hành cắt giảm nhân sự làm hàng trăm ngàn nhân viên mất việc.

Biến thách thức thành cơ hội

Đối với doanh nghiệp

Trong 6 tháng đầu năm 2023, mặc dù doanh thu của ngành CNTT đang trên đà giảm, xuất khẩu phần mềm vẫn là một điểm sáng, vì một số doanh nghiệp duy trì tăng trưởng tốt ở một số thị trường nước ngoài. Chi tiêu trong lĩnh vực phần mềm toàn cầu vào năm 2023 – 2024 sẽ phát triển mạnh mẽ. Đây chính là điểm sáng cho các doanh nghiệp phần mềm và dịch vụ công nghệ thông tin tập trung khai thác.

Cùng với đó, để giải quyết tình trạng quỹ lương eo hẹp và yêu cầu hoạt động kinh doanh ngày càng cao, các doanh nghiệp đã thu hẹp kế hoạch tuyển dụng trong năm 2023 với số lượng tuyển dụng mới giảm đáng kể. Gần 90% công ty có kế hoạch tuyển ít hơn 50 lập trình viên trong năm nay trong khi con số này của năm ngoái chỉ là 75%. Các doanh nghiệp đã đẩy mạnh tuyển dụng nhân sự chất lượng cao và giàu kinh nghiệm như là một cách để quản lý chi phí và duy trì hiệu suất trong thời điểm khó khăn.

Vietnam IT Market Report 2023 - Vietnam Tech Talents Report

Ngoài ra, đây là thời điểm để các doanh nghiệp xem xét lại về các kế hoạch đầu tư cho công nghệ mới. Bởi việc đầu tư tràn lan vào công nghệ trong khi không hiểu rõ mục đích, dẫn đến việc tích lũy những thứ không cần thiết, lãng phí ngân sách.

Đối với lập trình viên

Mặc dù đối mặt với tình hình suy thoái kinh tế nhưng nhu cầu nhân lực IT tại Việt Nam vẫn còn rất cao. Theo số liệu từ TopDev, giai đoạn năm 2023 – 2025, Việt Nam vẫn sẽ thiếu hụt từ 150.000 đến 200.000 lập trình viên/kỹ sư hàng năm. Cùng với đó là những chính sách, thúc đẩy đầu tư/phát triển cho ngành CNTT của Đảng và nhà nước giúp cánh cửa tìm kiếm việc làm ngành CNTT ngày càng rộng mở.

Vietnam IT Market Report 2023 - Vietnam Tech Talents Report

Tuy nhiên, vấn đề trình độ có tay nghề cao là một trong những điểm hạn chế của nhân sự IT Việt Nam. Lao động tay nghề cao chỉ chiếm khoảng 11,67% gần như không thay đổi so với 3 năm trước. Đây là một thách thức đòi hỏi các lập trình viên phải nâng cao năng lực chuyên môn, cải thiện khả năng ngoại ngữ và nhiều kỹ năng quan trọng khác để đáp ứng cho yêu cầu ngày càng cao của doanh nghiệp.

Bên cạnh đó, các lập trình viên cần nắm bắt nhu cầu, thị hiếu của khách hàng để lựa chọn hướng đi cho phù hợp. Cụ thể, với sự phát triển mạnh mẽ của các ngành như trí tuệ nhân tạo, big data, thực tế ảo, thương mại điện tử,… đã kéo theo nhu cầu lớn về nguồn nhân lực có chuyên môn. Nếu nhạy bén “nắm thóp” được thị trường, các nhân sự công nghệ có thể có được công việc tốt với mức lương khủng lên đến hơn $2.000.

Tóm lại

Suy thoái kinh tế là vấn đề chung mà chúng ta cần phải vượt qua. Song hành cùng với những thách thức đó chính là những cơ hội, bước đệm để chúng ta vươn xa hơn trong tương lai. Ngành công nghệ thông tin vẫn sẽ nắm vai trò chủ đạo của nền kinh tế quốc gia, với trí lực và sự bản lĩnh, Việt Nam sẽ tìm được hướng đi đúng đắn để chuyển mình mạnh mẽ vượt qua “tâm bão” lần này.

Báo cáo năm 2023 về thị trường và nhu cầu nhân sự IT do TopDev phát hành đã được đăng tải, độc giả tìm hiểu thêm về xu hướng các ngành Công nghệ trong nước qua bản Vietnam IT Market Report tại đây.

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

Xem thêm tuyển dụng việc làm IT hấp dẫn trên TopDev