Đâ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-end và Back-end là gì?
Đố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
Để 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, CSS và JavaScript. 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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
Để 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
Bản full đầy đủ của roadmap anh em có thể tham khảo tại roadmap.sh
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ể.
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).
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.
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 đượ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é.
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.
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.
Ở 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:
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.
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
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,…
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,…
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.
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é!
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 – 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.
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,…
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.
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ử.
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ý.
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ó.
Đố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.
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!
Đừ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.
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 đó.
Nguồn ảnh / Source: unstop.comCò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.
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
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 ITnổ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ế
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.
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.
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 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
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 đ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.
Đặ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.
Chỉ 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?
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 i, j, k, m, and n for integers; c, d, 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)
Đố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.
Đầ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.
Để 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.
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.
Thô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
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
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.
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 Architect – Kiế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ì và 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ể.
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ô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ó.
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.
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.
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:
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()
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.
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.
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.
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
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:
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.
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:
Đầ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ế.
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ì và 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ả.
Để 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.
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.
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
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.
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.
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.
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.
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.
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.
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
Một số cuốn sách hoặc khoá học có thể sẽ hữu ích với anh em về database:
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:
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.
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.
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.
Mộ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:
Để 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.
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.
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.
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.
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é.
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à RabbitMQ và Kafka. 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:
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.
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.
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
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ộ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.
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
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.
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ó
Đầ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:
Đ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.
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.
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.
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.
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> );};
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 hookfunction useCounter(){ const[count, setCount]= useState(0); const increment =()=> setCount(prevCount => prevCount +1); return{ count, increment };}// hook passed in constateconst[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> );
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.
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';exportdefaultfunction 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.
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.
Đ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.
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.
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.
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.
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.
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ê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.
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.
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.
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.
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.
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 và đạ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.
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.
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ở.
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.