Home Blog Page 31

Code convention là gì? Một số quy tắc chung khi viết code lập trình

Code convention là một thuật ngữ mà bất kể lập trình viên nào cũng từng nghe đến và áp dụng trong công việc và dự án. Dù cho thực tế rằng việc áp dụng coding convention trong một team phát triển là điều không dễ nhưng đấy vẫn được xem là một trong những checklist bắt buộc khi triển khai viết code. Bài viết hôm nay chúng ta cùng tìm hiểu xem code convention là gì và một số quy tắc chung khi viết code trong lập trình nhé.

Code convention là gì?

Code convention là một tập hợp các quy tắc chung dành cho lập trình viên khi viết code nhằm giúp source code dễ đọc, dễ hiểu, dễ quản lý và bảo trì trong tương lai. Trong một dự án có nhiều thành viên, nếu mỗi người viết code theo một “kiểu” (style) khác nhau thì việc đọc code sẽ trở nên vô cùng khó khăn. Chính vì vậy mà coding convention được xem như một quy ước cơ bản áp dụng từ trước khi bắt đầu triển khai dự án.

Code convention là gì?
Nguồn: https://javascript.info/article/coding-style/code-style.svg

Tác dụng của Code convention:

  • Giúp nâng cao hiệu quả khả năng làm việc nhóm
  • Tạo sự đồng bộ cao trong source code cũng như trong hiểu biết của các thành viên về nghiệp vụ dự án
  • Tạo điều kiện thuận lợi cho các bước bảo trì và nâng cấp phần mềm
  • Giúp các thành viên trong team có khả năng review lại source code của chính mình và người khác, đồng thời cũng dễ dàng tìm được các lỗi tiềm ẩn trong code
  • Tạo sự thống nhất giữa các dự án trong một tổ chức, từ đó giúp nâng cao khả năng tái sử dụng source code giữa các bộ phận.

  Code PHP chuẩn convention với PHP CodeSniffer

  Viết clean code: Code “đẹp trai” và code “xấu gái” có gì hay ho?

Với mỗi ngôn ngữ lập trình khác nhau thì sẽ có những bộ coding convention khác nhau dành riêng, mỗi team hay dự án có thể lựa chọn và áp dụng. Chẳng hạn như với Java chúng ta có bộ convention của Oracle hay của Google. Với C# có bộ convention của Microsoft hay như Airbnb cung cấp rất nhiều bộ coding convention dành cho JavaScript, Ruby hay HTML/ CSS. Code convention sẽ được áp dụng đối với tất cả các thành viên trong dự án (lập trình viên viết code) trên các Code Editor hay IDE tích hợp sẵn. Ngoài ra, coding convention còn thường được sử dụng cho các bước auto deploy (build tự động trên các môi trường kiểm thử) và được xem như một bước kiểm thử trước khi thực hiện build và chạy chương trình.

Hầu hết các IDE phổ biến hiện nay đều có tính năng thiết lập code style (tương tự code convention), nó sẽ thực hiện việc check code convention ngay lúc chúng ta viết code và có thể đưa ra các gợi ý chỉnh sửa ngay lập tức, rất tiện lợi và hữu ích dành cho anh em lập trình viên.

Code convention là gì?

Một số quy tắc chung khi viết code lập trình

Mục đích của việc viết code là để giải quyết được bài toán đặt ra với những logic xử lý tối ưu; đồng thời càng đơn giản dễ hiểu thì càng tốt. Viết code không chỉ để chạy được, chạy đúng mà còn dành để cho những thành viên khác trong team, hoặc những người tiếp nhận source code về sau đọc hiểu; vì vậy hãy luôn giữ cho code của mình “sạch”, “rõ ràng” và “đơn giản” (clean, clear and simple).

Xem thêm các việc làm PHP lương cao trên TopDev

Quy tắc đặt tên

Quy tắc này áp dụng trong việc đặt tên các biến, hằng số, class, function,… 3 quy tắc đặt tên phổ biến thường được sử dụng trong nhiều ngôn ngữ lập trình khác nhau:

  • Camel case: viết thường từ đầu tiên trong cụm, những từ còn lại thì viết hoa ký tự đầu. Ví dụ như firstName, lastName. Camel case thường sử dụng cho khai báo tên biến, tên hàm hay tên phương thức.
  • Pascal case: viết hoa ký tự đầu của mỗi từ trong cụm. Ví dụ FirstName, LastName. Quy tắc này thường được áp dụng khi khai báo tên class hoặc sử dụng cho tên biến trong một số ngôn ngữ lập trình.
  • Snake case: toàn bộ các từ đều viết thường và được phân cách bởi dấu “_” (underscore). Ví dụ first_name, last_name. Snake case thường dùng cho việc đặt tên hằng số hoặc tên của chương trình.

Một số quy tắc chung khi viết code lập trình

Quy tắc số lượng

  • Một lớp (class) không nên vượt quá 500 dòng
  • Một hàm (function) không nên vượt quá 30 dòng, không nên chứa quá 5 tham số và chỉ nên làm duy nhất một việc
  • Một dòng code không nên dài quá 80 ký tự
  • Một câu lệnh không nên lồng quá 4 cấp

Quy tắc comment

  • Không nên comment out đoạn code không dùng, hãy xóa nó đi
  • Comment để làm rõ logic xử lý đoạn code phức tạp
  • Comment để lưu ý, cảnh báo những trường hợp có thể xảy ra trong logic luồng code
  • Không nên comment để giải thích những logic, tính năng đơn giản, chú thích những điều hiển nhiên. Thay vào đó nên đặt tên function, class thể hiện nó.

Quy tắc xuống hàng

  • Nếu một hàm có nhiều cấp lồng nhau, mỗi cấp nên được xuống dòng
  • Các đoạn code bằng cấp nên ở cùng một cột với nhau (khoảng cách với lề sẽ bằng nhau)
  • Nên xuống hàng trước các toán tử

Đây là một số coding convention cơ bản mà bạn thường/ nên áp dụng trong nhiều ngôn ngữ lập trình khác nhau. Ngoài ra, mỗi ngôn ngữ hoặc framework sẽ có những bộ convention được đề xuất sử dụng, các bạn có thể tự tìm hiểu thêm để áp dụng vào từng dự án một cách hiệu quả nhất nhé.

Kết bài

Rõ ràng việc áp dụng code convention là rất cần thiết trong mọi dự án phát triển phần mềm đối với team lập trình; vì vậy hiểu rõ và áp dụng được nó trong công việc sẽ giúp bạn lập trình tốt hơn, có khả năng làm việc với nhiều thành viên cùng hoặc khác môi trường hay ngôn ngữ lập trình.

Hãy áp dụng những quy tắc chung mà bài viết đề cập cũng như tìm hiểu thêm các quy tắc khác được đề xuất vào việc viết code của bạn để xác nhận sự hiệu quả của nó mang lại nhé. Cảm ơn các bạn đã đọc và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

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

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

Lộ trình và cách học Javascript hiệu quả bạn nên biết

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

JavaScript là một trình lập ngôn ngữ đã trở nên phổ biến trong những năm gần đây, được hỗ trợ hầu như trên tất cả các trình duyệt như Firefox, Chrome,… thậm chí cả các trình duyệt trên thiết bị di động.

Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về lộ trình và cách học JavaScript  để có hiệu quả tốt nhất.

JavaScript là gì?

JavaScript là gì?

JavaScript là ngôn ngữ lập trình phổ biến được sử dụng để tạo ra các trang web tương tác. Nó được tích hợp và nhúng vào HTML trợ giúp cho trang web của bạn trở nên sống động hơn. JavaScript cho phép kiểm soát các hoạt động tốt hơn của trang web khi chỉ sử dụng mỗi HTML.

Từ tạo bảng mới trên mạng xã hội sẽ hiển thị hình ảnh động và bản đồ tương tác, các chức năng của JavaScript có thể cải thiện trải nghiệm của người dùng trang web. Các hiệu ứng slide, menu xổ xuống, các hình ảnh chạy lại rất đẹp,… tất cả các chức năng này đều được xử lý bằng Javascript.

Lợi ích của việc học JavaScript

Triển khai lệnh client

Nhờ Javascript, các lập trình viên có thể dễ dàng viết lệnh cho khách hàng, tích hợp các lệnh tiếp theo vào HTML, cho phép trang web tương tác, trả lời người dùng ngay lập tức và tạo ra giao diện hiển thị phong phú hơn.

Viết mã phía máy chủ

Người lập trình có thể viết mã phía máy chủ bằng JavaScript.

Đơn giản hóa phát triển ứng dụng phức hợp web

Javascript cho phép các nhà phát triển đơn giản hóa thành phần ứng dụng, qua đó đơn giản hóa việc phát triển các ứng dụng web phức tạp.

Thiết kế web đáp ứng

JavaScript cho phép thiết kế web đáp ứng – mức độ ưu tiên trên cả máy tính và thiết bị di động chỉ với một mã hóa.

Google AMP

Để tham gia vào dự án Tăng tốc trang di động (AMP) của Google, các nhà lập trình phải sử dụng ngôn ngữ lập trình JavaScript.

Nhiều chuyển đổi

Mặc dù thiếu một số tính năng phức tạp được cung cấp bởi các ngôn ngữ lập trình hiện đại như JavaC#, nhưng JavaScript vẫn có thể dễ dàng mở rộng bằng cách sử dụng các bộ chuyển đổi như CoffeeScript, TypeScript, DukeScript và Vaadin.

  Giải bài toán về dãy con tăng dài nhất trong JavaScript

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

Lộ trình học JavaScript

Giai đoạn 1. Học và làm quen với các nội dung cơ bản về JavaScript

Bước đầu tiên yêu cầu người học nắm vững các kiến ​​thức cơ bản liên quan đến JavaScript. Bạn cần có một nền tảng vững chắc để có thể bước những bước tiếp theo. Một số nội dung quan trọng bạn cần quan tâm tới là:

  • Nền tảng kiến ​​thức của JavaScript
  • Các khái niệm cơ bản xung quanh ngôn ngữ JavaScript
  • Các đối tượng có sẵn trong JavaScript
  • Sử dụng Git để lưu trữ và chia sẻ nguồn mã
  • Trình bày các khái niệm cơ sở của Đối tượng Lập trình mô hình
  • Trình bày được trình bày trong quá trình thiết kế, xây dựng và thực thi một ứng dụng
  • Dữ liệu cấu hình
  • Nền tảng web
  • Trình duyệt nổi bật và cách thức hoạt động của chúng
  • Tên miền và hosting là gì?

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

Giai đoạn 2. Tìm hiểu về các cú pháp cơ bản của ngôn ngữ JavaScript

  • Cách khai báo biến: Khai báo và sử dụng biến trong JavaScript với var và let, khai báo hằng số trong JS.
  • Câu lệnh JavaScript: Là đơn vị cơ sở của trình cài đặt ngôn ngữ. Chúng tôi đưa ra hướng dẫn cho máy tính để thực hiện một thao tác.
  • Từ khóa: Là các từ bao gồm ý nghĩa chính trong JavaScript. Ví dụ như: break, case, default, delete,…
  • Giăm bông. Hàm này là một trong cơ sở nền tảng, một thành phần không thể thiếu đối với chương trình cấu hình. Nhờ có chức năng mà chương trình trở nên rõ ràng, dễ hiểu bằng cách làm lạnh các đoạn mã lặp lại.
  • Object. Trong JavaScript, các đối tượng thường được so sánh với các đối tượng thực tế từ cuộc sống thực tế. Mọi giá trị có trong JavaScript (ngoại trừ các giá trị nguyên thủy) đều được xem là các đối tượng.
  • Học trình lập ngôn ngữ Typescript: mảng và các phương thức có trong Typescript

Giai đoạn 3. Hãy sử dụng các kiến ​​thức cơ bản về HTML, CSS và JavaScript

Trọng tâm của giai đoạn này yêu cầu người học tải tổng thể các cơ sở lập trình ngôn ngữ kiến ​​thức. Nó sẽ giúp bạn tạo một trang web bao gồm HTML, CSS, Javascript. Lời khuyên cho bạn là bạn nên học JavaScript trước. Bài hát đó được tìm hiểu về HTML và CSS. Điều này sẽ giúp việc tiếp cận cũng như tạo ra các giao diện đơn giản đầu tiên trở nên dễ dàng hơn.

Khi bạn hoàn thành giai đoạn 3 cũng là lúc bạn đã có nền tảng kiến ​​thức ban đầu. Một mẹo trước khi các bạn tiến tới giai đoạn nâng cao cao đó là hãy thực hiện các bài tập của 3 giai đoạn đầu thật sự nhuần nhuyễn. Khi cơ sở kiến ​​thức đã thực sự chắc chắn, việc học cao hơn một chút cũng không phải là vấn đề quá lớn.

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

Giai đoạn 4. Gắn JavaScript với front-end

Bước này tập trung giúp bạn khai thác các tổ hợp nội dung hợp quan trọng khác về CSS như:

  • Phản hồi thiết kế
  • Xây dựng công cụ
  • Git

Bạn cần liệt kê một số kiến ​​thức cần đạt được trong công việc thiết kế trang web tốt hơn, cách sử dụng Git hoặc các ứng dụng tiện ích khác để xây dựng một trang web hoàn chỉnh.

Giai đoạn 5. JavaScript và các Framework

Trong quá trình học, danh mục về Framework là nội dung không thể bỏ qua. React, Angular và Vue là những loại phổ biến hiện nay mà bạn cần tìm hiểu. Có thể thấy, các tính năng đa phương tiện hoặc phức tạp nhất trên trang web đều được thực hiện nhờ sự trợ giúp của JavaScript. Một lời khuyên nên nhỏ ở bước này là bạn nên học React trước, CSS trong JS; hoặc có thể là cả Styled Component; hay các mô-đun CSS.

Giai đoạn 6. Gắn Javascript với backend

Ở giai đoạn cuối cùng này, bạn cần phải đáp ứng một số yêu cầu về kiến ​​thức sau:

  • Có khả năng đọc các dữ liệu quan trọng từ cơ sở dữ liệu và hiển thị cho người dùng theo Frontend.
  • Cách lưu trữ và bảo mật thông tin nguồn.

Khi đã có nền tảng ổn định về kiến ​​thức trong giai đoạn 6, bạn hãy tự đánh giá lại toàn bộ quá trình học của mình.

  Xử lý bất đồng bộ với Promise.all trong JavaScript

Cách học JavaScript hiệu quả

Đặt tiêu chuẩn và lựa chọn những thứ cần học

Mục tiêu học Javascript
Mục tiêu học Javascript

JavaScript thực sự rất rộng rãi, để học hết và hiểu được chúng chắc chắn mất hàng năm vì không chỉ có JavaScript mà còn các biến thể, các framework của nó. Vì vậy, nên chọn 1 công nghệ và tập trung vào học nó.

Nhưng nếu bạn chỉ mới bắt đầu, việc đưa ra quyết định này sẽ rất khó khăn vì rất khó để tìm ra “nơi bắt đầu” của bạn ở đâu. Trong trường hợp này, bạn sẽ cần theo một chương trình học tốt.

JavaScript có thể sử dụng để xây dựng giao diện người dùng, xử lý dữ liệu ở phía máy chủ, xây dựng ứng dụng di động, trò chơi, trí tuệ nhân tạo,… Mỗi hướng dẫn đều có 1 công nghệ riêng biệt.

Vì vậy, để không bị choáng ngợp và buồn chán, bạn chỉ nên tập trung vào một thứ và bỏ qua tất cả những thứ khác bên ngoài nó.

Bắt đầu dự án cá nhân của bạn

Nếu bạn không áp dụng kiến ​​thức của mình vào dự án thực tế thì việc học đó sẽ vô ích. Cách tốt nhất để chúng ta đi lên nhanh chóng bắt tay vào làm, tất nhiên là không phải theo hướng nhảy vào dự án lớn ngay lập tức, mà chúng ta cần bắt đầu với những dự án nhỏ rồi đi lên dần dần.

Khi thực hiện bất kỳ dự án thực tế nào, mỗi khi hoàn thành chức năng, chúng ta hãy thử bổ sung thêm một chức năng mới và tăng dần khả năng của chúng ta cũng tăng lên theo.

Thực hành thường xuyên

Một cách khác để học hiệu quả JavaScript là tích cực luyện tập. Có nghĩa là bạn dành nhiều thời gian để viết mã hơn là chỉ xem hoặc đọc các hướng dẫn.

Cố gắng viết mã ít nhất 30 phút hoặc một giờ mỗi ngày. Bằng cách viết mã thường xuyên và thực hiện những gì bạn đã học, bạn sẽ cải thiện kiến ​​thức JavaScript của mình nhanh hơn.

Tham gia cộng đồng cài đặt, các buổi gặp gỡ và sự kiện

Lợi ích mang lại của việc tham dự các buổi gặp mặt và các sự kiện là vô cùng đáng kể. Nó cho phép chúng ta học hỏi từ những người có nhiều kinh nghiệm sử dụng Javascript. Nhưng công việc học không chỉ dừng lại ở những bài thuyết trình mà còn tiếp tục diễn ra trong các cuộc trò chuyện mà chúng ta có sau đó.

Đôi khi cách tốt nhất để học Javascript không phải là ngồi chúi mũi vào học hoặc đọc sách, mà đó là sự trao đổi với những người khác đang học hỏi, khám phá và đạt được thành tựu cùng bạn.

Chương trình đào tạo mã hóa

Có thể thiết lập đường học dành riêng cho bạn. Mặc dù bạn biết rằng bạn có thể cung cấp bản câu hỏi cơ bản về hướng dẫn học tập theo yêu cầu hoặc từ các chương trình sách, nhưng bạn muốn có thêm một chút hỗ trợ và hướng dẫn trong suốt quá trình giáo dục của bạn mình, cũng như chứng chỉ sau khi hoàn thành.

Nếu đúng như vậy thì một chương trình đào tạo Coding Bootcamp có thể là chương trình dành riêng cho bạn. Chương trình đào tạo trung bình có xu hướng kéo dài từ 5-6 tháng đến 1-2 năm, tùy thuộc vào trình bày của chúng để bổ sung theo lịch trình bán thời gian hoặc toàn thời gian.

Kết luận

Học JavaScript là một quá trình đòi hỏi sự triển khai và nỗ lực. Tuy nhiên, nếu bạn nắm vững kiến ​​thức và kỹ năng cơ bản, bạn có thể học JavaScript một cách hiệu quả và trở thành thành viên lập trình JavaScript thành công.

Dưới đây là một số lời khuyên được khuyên dùng cho người mới bắt đầu học JavaScript:

  • Hãy bắt đầu với cơ sở kiến ​​thức này. Trước khi bạn có thể học nâng cao các khái niệm, cần nắm chắc các cơ sở kiến ​​thức về JavaScript, bao gồm cú pháp, biến, toán tử, điều khiển cấu trúc, đối tượng và sự kiện.
  • Thực hành thường xuyên. Vui lòng dành thời gian để viết mã và tạo các dự án dành riêng cho bạn.
  • Tham gia vào trình cài đặt cộng đồng. Đây là một cách tuyệt vời để học hỏi từ những người có kinh nghiệm và giải đáp thắc mắc của bạn.

Chúc bạn thành công trong việc học JavaScript !

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

Xem thêm:

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

Applicant Tracking System là gì? ATS hoạt động ra sao

Công nghệ phát triển hướng đến giải quyết và cải tiến cho mỗi quy trình, hoạt động của doanh nghiệp cũng như đời sống. Đối với lĩnh vực tuyển dụng, sự xuất hiện của phần mềm ATS (Applicant Tracking System) mang đến nhiều thay đổi đáng kể, cả đối với nhà tuyển dụng và ứng viên. Vậy phần mềm ATS là gì? Chúng được sử dụng ra sao? Những thắc mắc về phần mềm ATS trong tuyển dụng sẽ được TopDev giải đáp tại bài viết dưới đây.

Hệ thống sàng lọc tự động ATS (Applicant Tracking System)
Hệ thống sàng lọc ứng viên ATS (Applicant Tracking System)

Applicant Tracking System là gì?

Applicant Tracking System (ATS) hay còn gọi là Hệ thống quản lý hồ sơ ứng viên là phần mềm quản lý quy trình tuyển dụng từ đầu đến cuối một cách tự động hóa. ATS được thiết kế để giúp nhà tuyển dụng tiết kiệm thời gian và chi phí trong việc thu thập, sắp xếp và sàng lọc hồ sơ các ứng viên.

Các tính năng nổi bật của Applicant Tracking System

Các tính năng nổi bật của Applicant Tracking System
Các tính năng nổi bật của Applicant Tracking System

Applicant Tracking System (ATS) là một công cụ quan trọng giúp các công ty quản lý quy trình tuyển dụng hiệu quả hơn. Cùng chúng tôi điểm qua các tính năng nổi bật của ATS:

Sàng lọc và quản lý hồ sơ ứng viên

Khả năng tìm kiếm và sàng lọc ứng viên là một trong các tính năng nổi bật nhất của ATS. Với việc sử dụng từ khóa và tiêu chí cụ thể, hệ thống có thể nhanh chóng tìm kiếm và sàng lọc các hồ sơ phù hợp, tự động loại bỏ những ứng viên không đạt yêu cầu. Điều này giúp nhà tuyển dụng tập trung vào những ứng viên tiềm năng nhất.

ATS cho phép quản lý hồ sơ ứng viên một cách chuyên nghiệp bằng cách lưu trữ và tổ chức thông tin chi tiết từ sơ yếu lý lịch, thư xin việc đến các tài liệu liên quan. Hệ thống có thể tự động tạo hồ sơ từ các tài liệu nộp qua email, trang web tuyển dụng hoặc nhập liệu trực tiếp, giúp tiết kiệm thời gian và công sức cho nhà tuyển dụng.

Tìm kiếm ứng viên tiềm năng

ATS có thể đăng tuyển và theo dõi hiệu quả của các kênh tuyển dụng trên nhiều nền tảng tiềm năng như trang web công ty, các website việc làm và mạng xã hội tuyển dụng lớn, đồng thời theo dõi số lượng ứng viên từ các kênh này để phân tích và đánh giá hiệu quả.

Theo dõi và quản lý quy trình tuyển dụng

ATS theo dõi toàn bộ quá trình tuyển dụng từ khi nhận hồ sơ đến khi hoàn tất tuyển dụng, bao gồm quản lý lịch phỏng vấn, gửi lời mời và thông báo cho ứng viên. Nhà tuyển dụng có thể theo dõi trạng thái của từng ứng viên, từ đã nhận hồ sơ, đang phỏng vấn cho đến khi có kết quả.

Báo cáo và phân tích dữ liệu

ATS cung cấp các báo cáo chi tiết về hiệu quả tuyển dụng, số lượng ứng viên, thời gian tuyển dụng và các chỉ số quan trọng khác. Phân tích dữ liệu giúp cải thiện chiến lược tuyển dụng, xác định các nguồn ứng viên hiệu quả và dự đoán nhu cầu tuyển dụng trong tương lai.

Hỗ trợ giao tiếp và tương tác với ứng viên

Giao tiếp và tương tác với ứng viên cũng được tối ưu hóa. ATS cho phép gửi email tự động và thông báo để cập nhật trạng thái tuyển dụng hoặc yêu cầu thêm thông tin. Điều này không chỉ giúp duy trì liên lạc thường xuyên với ứng viên mà còn tạo ấn tượng chuyên nghiệp cho họ. Ngoài ra, ATS còn có giao diện người dùng thân thiện, giúp ứng viên dễ dàng nộp đơn và theo dõi trạng thái và nhận được phản hồi nhanh chóng từ hệ thống.

Đảm bảo bảo mật an toàn thông tin

Hệ thống ATS có chức năng phân quyền truy cập, giúp đảm bảo tính tổ chức chặt chẽ và bảo mật thông tin ứng viên. Tích hợp với các hệ thống quản lý nhân sự (HRM) và các công cụ đánh giá cũng giúp nâng cao hiệu quả quản lý.

Cuối cùng, việc tuân thủ các quy định về bảo mật dữ liệu và pháp luật lao động là điều mà bất kỳ ATS nào cũng phải đảm bảo. Hệ thống cần lưu trữ dữ liệu an toàn và tuân thủ các quy định bảo mật, đồng thời đảm bảo quy trình tuyển dụng tuân thủ pháp luật lao động hiện hành.

Cách phần mềm sàng lọc CV ATS hoạt động

Muốn biết làm thế nào để viết CV IT chuẩn ATS thì trước tiên chúng ta cần hiểu rõ cách hệ thống này hoạt động. Dưới đây là quy trình cơ bản mà một hệ thống ATS trong doanh nghiệp sẽ hoạt động.

Đặt câu hỏi loại trừ

Khi bạn nộp hồ sơ qua các hệ thống online của doanh nghiệp, bạn có thể sẽ nhận được yêu cầu trả lời các câu hỏi trực tiếp. Nếu bạn trả lời khớp với yêu cầu của nhà tuyển dụng thì hệ thống ATS sẽ cho hồ sơ của bạn đi tiếp. Ngược lại, nếu câu trả lời không phù hợp hệ thống sẽ gắn cờ hoặc loại bỏ để tiết kiệm thời gian sàng lọc.

Phân tích cấu trúc CV

Ở vòng này, ATS sẽ phân tích cấu trúc của CV, bao gồm các phần thông tin liên hệ, học vấn, kinh nghiệm, kỹ năng,… Điều này giúp ATS hiểu CV được tổ chức như thế nào và các thông tin quan trọng được đặt ở đâu.

Quét từ khóa

mẹo viết CV IT chuẩn ATS

Đây là phần rất quan trọng vì nó giúp hệ thống xác định bạn có thật sự phù hợp với vị trí công ty đang cần tuyển hay không. Hệ thống ATS sẽ đọc phần mô tả công việc sau đó quét qua CV của bạn để tìm keywords có liên quan đến vị trí ứng tuyển. Chẳng hạn như bạn ứng tuyển vị trí Java Developer, hệ thống sẽ quét CV và tìm các từ khóa là framework, kỹ năng lập trình liên quan đến vị trí này.

Đánh giá xếp hạng kết quả

Hệ thống ATS sẽ đánh giá và chấm điểm mức độ phù hợp của bạn với vị trí ứng tuyển. CV càng có điểm số cao thì khả năng được gọi phỏng vấn trực tiếp với nhà tuyển dụng sẽ càng cao.

  Cách viết CV English IT đẹp chuẩn dành cho lập trình viên

Tạo CV online miễn phí, nhanh chóng trên TopDev

Phần mềm ATS có thể đánh giá chính xác hồ sơ ứng viên?

Chính vì ATS hoạt động như một cổ máy thông qua các tiêu chí và quét từ khóa khi sàng lọc hồ sơ, có rất nhiều hồ sơ ứng viên tiềm năng bị bỏ qua chỉ vì họ chưa biết cách tối ưu CV để qua được vòng ATS.

Hầu hết các doanh nghiệp lớn với số hồ sơ ứng tuyển lên đến hàng trăm hồ sơ mỗi ngày, thì việc sử dụng ATS trong quy trình tuyển dụng của họ là cần thiết. Vậy làm sao để viết CV chuẩn ATS

Trải nghiệm công cụ Convert CV online ngay tại đây!

mẹo viết CV IT chuẩn ATS

Với CV mới này, bạn có thể biết phần nội dung nào mình còn thiếu, phần nào không cần thiết. Hệ thống cho phép tự do chỉnh sửa và cập nhật nội dung trên CV mới. Ngoài ra, một hồ sơ ứng viên hoàn chỉnh của bạn cũng sẽ được lưu trữ trên hệ thống của TopDev, giúp hệ thống dễ dàng đưa ra các đề xuất công việc phù hợp.

>>> Tham gia minigame “Chuẩn Hóa CV” nhận ngay quà hấp dẫn anh em nhé

Tóm lại

Qua bài viết trên hi vọng bạn có thể hiểu thêm về phần mềm ATS và lợi ích sử dụng ATS trong tuyển dụng. Applicant Tracking System là cách tay đắc lực của các nhà tuyển dụng, nó giúp các quy trình tuyển dụng được chuẩn hóa và rút ngắn thời gian và nâng cao hiệu quả của quá trình tuyển dụng.

Đừng quên sử dụng công cụ Convert CV để có một chiếc CV chuẩn Developer bạn nhé!

Xem thêm:

Xem thêm Top tìm việc IT lương cao HOT nhất trên TopDev

Buffered Channel là gì? Ví dụ tạo buffer channel

Anh em làm với Golang chắc hẳn đã nghe qua khác niệm Buffered Channel. Vậy Buffered Channel là gì?

Bài viết này sẽ giải thích cho anh em khái niệm Buffered Channel. Deadlock trong Buffered Channel và các ví dụ cụ thể giải thích cách Buffered Channel hoạt động.

Bắt đầu thôi anh em!

1. Buffered Channel là gì?

Tới với định nghĩa:

Channels can be defined as pipes used for Goroutines to communicate. Similar to how water flows from one end to another in a pipe, data can be sent from one end and received from the another end using channels. Channels có thể được định nghĩa là các đường dẫn được sử dụng để Goroutines giao tiếp. Tương tự như cách nước chảy từ đầu này sang đầu kia trong đường ống, dữ liệu có thể nhận vào từ đầu này và chuyển tới đầu kia thông qua channels

Buffered Channel là gì?

Rồi, dứt được một chữ Channel trong Buffered Channel. Kênh này như là cái ống, nhầm như con kênh. Dữ liệu đi vào đầu này sẽ đi ra đầu kia, như nước chảy từ đầu kênh tới cuối kênh.

Còn Buffered (bộ đệm), theo như mặc định trong Golang thì một channel tạo ra sẽ không có Buffered. Kênh không có bộ đệm sẽ chỉ gửi dữ liệu A nếu đầu kia ở channel chấp nhận dữ liệu A. Kênh Buffered Channel sẽ chỉ bị tắc khi bộ đệm full (đầy).

Đó là chiều gửi đi, còn chiều nhận về thì đầu kia của channel sẽ bị chặn dữ liệu nếu bộ đệm trống (buffered is empty).

  So sánh giữa C++ và Golang 
  Xây dựng REST API cơ bản trong Golang

2. Khởi tạo bộ Buffered Channel

Buffered Channel có thể được tạo bằng cách thêm parameter vào hàm make() với kích thước buffer cố định được truyền vào.

Cú pháp :

ch := make(chan type, capacity)           // change định nghĩa kiểu của channel

Trong cú pháp ở trên, capacity là con số cần phải lớn hơn 0, nếu channel đó muốn định nghĩa buffer. Nhưng nếu không có buffer (unbuffered channel) thì để giá trị này là 0. Cứ input cái argument này alf 0 thì auto skip vụ buffer.

Việc làm Golang Hồ Chí Minh hấp dẫn tại TopDev!

3. Ví dụ tạo buffer channel

Anh em cùng ví dụ dưới đây về tạo buffered channel.

package main
 
import (
    "fmt"
)
 
func main() {
 
    // Tạo buffer channel
    // Số lượng là 2.
    ch := make(chan string, 2)
    ch <- "geeksforgeeks"
    ch <- "geeksforgeeks world"
    fmt.Println(<-ch)
    fmt.Println(<-ch)
}

Với đoạn code này, đầu ra sẽ là

geeksforgeeks
geeksforgeeks world

Số lượng buffer được tạo là 2, do đó có thể đưa vào channel 2 chuỗi string, không bị mất mát chuỗi nào và in ra kết quả.

Rồi, ví dụ đầu tiên trơn tru, đầu xuôi đuôi lọt. Cùng tới với ví dụ thứ hai khi bị block do buffer

package main
 
import (
    "fmt"
    "time"
)
 
func write(ch chan int) {
    for i := 0; i < 4; i++ {
        ch <- i
        fmt.Println("successfully wrote", i, "to ch")
    }
    close(ch)
}
func main() {
 
    // Buffer này vẫn có size là 2
    ch := make(chan int, 2)
    go write(ch)
    time.Sleep(2 * time.Second)
    for v := range ch {
        fmt.Println("read value", v, "from ch")
        time.Sleep(2 * time.Second)
 
    }
}

successfully wrote 0 to ch
successfully wrote 1 to ch
read value 0 from ch
successfully wrote 2 to ch
read value 1 from ch
successfully wrote 3 to ch
read value 2 from ch
read value 3 from ch

Anh em chú ý ở vòng for sẽ chạy từ 0 tới 3, có 4 cái đem vào channels, nhưng channel chỉ có maximum là 2. Lúc này Goroutine chỉ ghi được giá trị 0 và 1 vào trong channel ngay lập tức. Sau đó nó block cho tới khi có ít nhất 1 giá trị được đọc từ kênh ch định nghĩa như dưới đây

successfully wrote 0 to ch
successfully wrote 1 to ch

Sau đó, đọc tiếp giá trị rồi sleeps trong 2 giây. Chu kì này cứ lặp đi lặp lại cho đến khi đóng ch. Cho nên mới có khúc tiếp theo được in ra

read value 0 from ch  
successfully wrote 2 to ch

4. Deadlock trong Buffered Channel

Deadlock cũng như khái niệm ở các ngôn ngữ khác, lock lại cho tới chết. Trong Buffered Channel được hiểu là chương trình sẽ có lỗi nghiêm trọng trong quá trình thực thi

package main
 
import (
    "fmt"
)
 
func main() {
    ch := make(chan string, 2)
    ch <- "geeksforgeeks"
    ch <- "hello"
    ch <- "geeks"
    fmt.Println(<-ch)
    fmt.Println(<-ch)
}

Như ví dụ trên đây, quá trình ghi vào channels sẽ bị chặn do kênh đã vượt quá size capacity là 2. Thông báo in ra sẽ là

fatal error: all goroutines are asleep - deadlock!



goroutine 1 [chan send]:

main.main()

    /tmp/sandbox048494311/prog.go:11 +0x8d

5. Tham khảo

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

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

Xem thêm:

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

Tối ưu hóa CV bằng ChatGPT: Gây ấn tượng nhà tuyển dụng ngay từ lần đầu

Bạn đã biết cách viết CV xin việc bằng ChatGPT chưa? Làm thế nào để tận dụng ChatGPT tạo CV ấn tượng hơn trong mắt nhà tuyển dụng? Với 78% ứng viên đã được nhận sau khi nộp CV và cover letter do ChatGPT viết (theo khảo sát của Resume Buider), thì đây chắc chắn là một công cụ rất đáng để sử dụng.

Trong bài viết này, chúng ta sẽ tìm hiểu cách tối ưu hóa CV bằng ChatGPT, giúp bạn dễ dàng vượt qua ải sàng lọc của nhà tuyển dụng và cả máy quét CV.

Lợi ích của việc dùng ChatGPT để viết CV

dùng ChatGPT để viết CV

Việc sử dụng ChatGPT để viết CV mang lại nhiều lợi ích quan trọng, đặc biệt là đối với những ứng viên đang tìm kiếm các vị trí phổ biến và muốn làm nổi bật hồ sơ của mình.

  • Hỗ trợ hiệu quả cho các vị trí phổ biến: ChatGPT là một công cụ mạnh mẽ để hỗ trợ việc viết CV khi bạn đang ứng tuyển cho các vị trí công việc phổ biến và thông dụng. Nó giúp bạn nhanh chóng tạo ra một CV chất lượng với ngôn ngữ chuyên nghiệp và phù hợp với yêu cầu thông thường của nhiều ngành nghề.
  • Thể hiện bản thân qua ngôn ngữ tốt hơn: Đối với những người có vốn từ ngữ “có hạn” ChatGPT là người đồng đội lý tưởng. Nó giúp bạn thể hiện bản thân một cách rõ ràng và sáng tạo, vượt qua những khó khăn ngôn ngữ mà bạn có thể gặp phải.
  • Tìm hiểu thêm về vị trí ứng tuyển: ChatGPT không chỉ giúp viết CV mà còn mang lại thông tin chi tiết về vị trí bạn đang ứng tuyển. Bạn có thể nhanh chóng tìm hiểu về các chứng chỉ phổ biến, keyword quan trọng, cũng như kỹ năng và yêu cầu cụ thể liên quan đến công việc.

Điểm hạn chế của ChatGPT khi viết CV IT

Mặc dù ChatGPT là một công cụ mạnh mẽ và hữu ích trong việc viết CV, nhưng cũng tồn tại một số điểm hạn chế cần lưu ý:

  • Hiểu biết hạn chế về ngữ cảnh cụ thể: ChatGPT có thể gặp khó khăn trong việc hiểu biết ngữ cảnh cụ thể của một người và vị trí công việc họ đang ứng tuyển. Điều này có thể dẫn đến việc tạo ra một CV có thể không hoàn toàn phản ánh được kinh nghiệm và kỹ năng chính xác của ứng viên.
  • Cần kiểm tra về độ chính xác của thông tin: Mặc dù ChatGPT có khả năng tạo ra văn bản phức tạp, nhưng nó không thể đảm bảo tính chính xác tuyệt đối của mọi thông tin. Việc kiểm tra và chỉnh sửa lại thông tin là cần thiết để đảm bảo sự chính xác.

 

Kỹ thuật tối ưu hóa CV bằng ChatGPT

1. Cung cấp câu lệnh mở đầu để mô tả ngữ cảnh

Để ChatGPT hiểu được ngữ cảnh của tình huống bạn hãy mô tả chi tiết về vị trí công việc, nhu cầu mục đích tìm việc, trình độ chuyên môn,… Mô tả càng rõ ràng thì kết quả trả về từ ChatGPT sẽ càng chính xác.

Đây là một câu lệnh (prompt) ví dụ bạn có thể tham khảo:

viết CV xin việc bằng ChatGPT

“Tôi là một lập trình viên Java với 3 năm kinh nghiệm. Hiện tại tôi đang muốn ứng tuyển vào công ty [tên công ty] tại vị trí Senior Java Developer. Bạn hãy đóng vai là một người viết CV chuyên nghiệp với hơn 15 năm kinh nghiệm, bạn sẽ hỗ trợ tôi viết CV ứng tuyển vào vị trí Senior Java Developer. Tôi cần viết CV với một giọng văn chuyên nghiệp, cấu trúc chuẩn ATS và nội dung phù hợp với vị trí tôi đang ứng tuyển. Bạn chưa cần phải làm gì cả, hãy trả lời “có” nếu bạn đã hiểu.”

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

2. Cung cấp các thông tin chi tiết về CV

Sau khi bạn đã cho ChatGPT biết về bối cảnh và nhiệm vụ mà nó phải làm, bạn hãy cung cấp cho ChatGPT những thông tin mà bạn muốn đưa vào CV. Dưới đây là prompt để bạn yêu cầu ChatGPT chỉnh sửa hoặc bổ sung những phần còn thiếu trong CV:

“Tôi sẽ cung cấp cho bạn những thông tin sẽ được thể hiện trong CV, bạn hãy phản hồi cho tôi về nội dung này bao gồm những thông tin còn thiếu, cần bổ sung những thông tin nào? Dưới đây là những thông tin của tôi:

– giới thiệu: Cung cấp tên, email, số điện thoại, địa chỉ.

– kinh nghiệm làm việc: Phần này liệt kê các vị trí làm việc trước đây của bạn, bao gồm tên công ty, vị trí, thời gian làm việc, và các trách nhiệm và thành tích của bạn.

– trình độ học vấn: Phần này liệt kê các bằng cấp học vấn của bạn, bao gồm tên trường, chuyên ngành, và năm tốt nghiệp.

– kỹ năng: Phần này liệt kê các kỹ năng của bạn, bao gồm kỹ năng cứng (hard skills) và kỹ năng mềm (soft skills).

– Thành tích: Phần này liệt kê các thành tích của bạn, bao gồm các giải thưởng, thành tích cá nhân, và các hoạt động ngoại khóa.”

Sau khi nhập đầy đủ thông tin ChatGPT sẽ cho bạn một loạt các gợi ý điều chỉnh rất chi tiết.

viết CV xin việc bằng ChatGPT
ChatGPT đưa ra gợi ý điều chỉnh sau khi bạn đã nhập thông tin

3. Điều chỉnh CV phù hợp với vị trí ứng tuyển

Bước tiếp theo trong kỹ thuật tối ưu hóa CV bằng ChatGPT chính là điều chỉnh nội dung CV sao cho phù hợp với yêu cầu mà nhà tuyển dụng ghi trong JD. Tại đây bạn có thể sử dụng prompt sau:

“Dựa vào những thông tin mà tôi đã cung cấp ở trên. Hãy phản hồi lại cho tôi về cách điều chỉnh nó cho phù hợp với tin tuyển dụng sau đây: [Dán những yêu cầu trong JD tuyển dụng vào đây]”

Sau đó bạn sẽ nhận được một số yêu cầu chỉnh sửa phù hợp.

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

  ChatGPT liệu có làm lập trình viên mất việc? - Phần 1

4. Điều chỉnh chi tiết và viết lại từng phần

Sau khi đã có đầy đủ các thông tin và cả những gợi ý chỉnh sửa bạn hãy viết thành một CV hoàn chỉnh. Dùng prompt sau để yêu cầu ChatGPT tối ưu nội dung:

“Tôi đã hoàn thành CV của tôi và tôi muốn làm cho nó hấp dẫn hơn, câu từ súc tích và chuyên nghiệp hơn. Đây là CV của tôi: [Dán vào đây]”

Tương tự, nếu như phần nào trong CV bạn muốn chỉnh sửa và chỉnh sửa như thế nào thì bạn hãy yêu cầu ChatGPT bằng một câu lệnh cụ thể. Chỉ vài bước đơn giản thôi là bạn đã có một chiếc CV hoàn thiện hơn rồi.

Tạo CV IT chuẩn ATS thông qua công cụ tạo CV online của TopDev

Những điểm cần lưu ý khi viết CV IT bằng ChatGPT

  • Chất lượng thông tin đầu vào quyết định chất lượng đầu ra: ChatGPT không phải là “thần thánh biến không thành có.” Chất lượng của thông tin bạn cung cấp sẽ trực tiếp ảnh hưởng đến chất lượng và hiệu quả của những gợi ý từ ChatGPT. Để có kết quả tốt nhất, hãy đảm bảo thông tin đầu vào từ CV của bạn là chi tiết và đầy đủ.
  • Trung thực khi viết kinh nghiệm: Bạn là người duy nhất nắm rõ hết về kinh nghiệm cá nhân của mình. ChatGPT có vai trò điều chỉnh và tối ưu hóa CV dựa trên thông tin bạn cung cấp. Hãy chắc chắn rằng bạn mô tả kinh nghiệm của mình một cách cụ thể và rõ ràng để ChatGPT có thể làm việc hiệu quả.
  • Chi tiết và cụ thể về yêu cầu: Cung cấp thông tin về yêu cầu công việc một cách rất chi tiết và cụ thể. Điều này giúp ChatGPT hiểu rõ về các kỹ năng và yêu cầu cụ thể của vị trí IT mà bạn đang ứng tuyển, giúp tối ưu hóa CV theo hướng chính xác.
  • Cung cấp bối cảnh cụ thể: Đừng chỉ liệt kê kỹ năng và nhiệm vụ, hãy giải thích kinh nghiệm của bạn và cung cấp bối cảnh xung quanh. ChatGPT có thể sử dụng thông tin này để tạo ra một câu chuyện liên quan, giúp CV trở nên sống động và thuyết phục hơn.
  • Đặt câu hỏi để bổ sung những nội dung còn thiếu: Hãy sẵn sàng đặt câu hỏi cho ChatGPT để bổ sung thông tin còn trống trong CV của bạn. Điều này giúp đảm bảo rằng mọi khía cạnh quan trọng đều được thể hiện đầy đủ và chi tiết.

Hy vọng rằng với những chia sẻ về cách tối ưu hóa CV bằng ChatGPT trong bài viết này sẽ giúp việc viết CV của bạn dễ dàng hơn. Tuy nhiên, bạn cần lưu ý một số điều khi sử dụng ChatGPT để đảm bảo CV của bạn được viết một cách hiệu quả. Bạn nên cung cấp thông tin chính xác và đầy đủ, tùy chỉnh CV cho từng vị trí ứng tuyển, kiểm tra kỹ CV trước khi nộp, và sử dụng công cụ kiểm tra ATS. Chúc bạn thành công

Xem thêm:

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

mgm’s own office in HCMC

It has been more than 1 year since our first launch in Ho Chi Minh City, now MGM Technology Partners is proud and happy to share that they have our own building in HCMC from this November.

It’s a great journey with mgm HCMC and a story to be told behind the new office in 195A Hai Ba Trung. Ward 6, Dist. 3 😀 Let’s discover by watching this video recap.

Link post: https://www.linkedin.com/posts/mgm-technology-partners-vietnam-co-ltd_mgm-hcmc-office-activity-7127919459528294400-Nbo-/

mgm technology partners Vietnam Co. Ltd
Website: http://www.mgm-tp.com
Join us: https://lnkd.in/gUi_y8GU
Why mgm: https://lnkd.in/gziNr4iH
Phone: (+84) 236 3531 77

SourceTree là gì? Quản lý code bằng Git với SourceTree

Đối với anh em lập trình viên hiện nay thì Gitquản lý source code là những kỹ năng bắt buộc phải có để có thể làm việc hàng ngày. Có nhiều công cụ được sinh ra để giúp đơn giản hóa và tối ưu hóa cho công việc này, và SourceTree là một cái tên được nhiều Developer lựa chọn và tin tưởng. Bài viết hôm nay chúng ta cùng nhau tìm hiểu Source Tree là gì và cách quản lý source code bằng Git với SourceTree nhé. 

SourceTree là gì?

SourceTree là một ứng dụng quản lý mã nguồn và tương tác với hệ thống quản lý phiên bản source code Git phổ biến nhất hiện nay. Được phát triển bởi Atlassian, một công ty chuyên phát triển sản phẩm dành cho việc quản lý dự án và phần mềm; SourceTree hiện nay có sẵn trên cả hệ điều hành Windows và Mac OS hoàn toàn miễn phí.

SourceTree là gì?

Đối với anh em lập trình viên mới tiếp xúc và làm việc với Git thì việc thao tác sử dụng thông qua dòng lệnh (command line) không hề dễ dàng; vì thế những công cụ GUI như SourceTree giúp trực quan hóa các thao tác với Git giúp chúng ta hiểu hơn về cách hoạt động, làm việc hay Git Flow. Ngoài ra thì SourceTree còn có những ưu điểm được anh em Dev yêu thích như:

  • Giao diện tổng quan: nếu như với command line bạn cần thực hiện từng câu lệnh riêng lẻ để xem được số branch đang có, log lịch sử các commit trong dự án hay xem các stash commit bạn đang lưu trữ thì với SourceTree, bạn có thể xem chúng cùng lúc một cách trực quan, tổng quát hơn rất nhiều.
  • Tính năng xem dạng biểu đồ (graph): đây là một tính năng hữu ích nhất, cũng là lý do mà nhiều anh em thuần thục với command line vẫn sử dụng SourceTree để xem được lịch sử các commit, các lần merge code, các nhánh liên quan.
  • Xem sự thay đổi của file: SourceTree cũng cung cấp tính năng xem những phần file được thay đổi trước khi bạn thực hiện lệnh commit. Tính năng này giúp bạn check lại xem có những đoạn code nào mà bạn có thể thêm vào chỉ dành cho mục đích debug, kiểm tra để có thể xóa hoặc commit trước khi đẩy code.
  • Trợ giúp xử lý conflict: cho phép chúng ta xử lý nhanh conflict bằng một số lựa chọn như sử dụng file hiện tại, sử dụng file từ remote,… khá tiện lợi mà không cần mở lại source code.
  • Khả năng tích hợp với nhiều dịch vụ Git: SourceTree cho phép bạn tích hợp, liên kết tài khoản với GitHub, GitLab hay BitBucket, từ đó có thể đồng bộ các thông tin của nhiều dự án (repository) khác nhau nhanh chóng.

SourceTree là gì?

  Sự khác biệt giữa ‘git merge’ và ‘git rebase’ là gì?

  Bạn có đang dùng git hiệu quả hay không?

Quản lý source code dự án bằng Git với SourceTree 

Trước hết để có thể sử dụng tốt SourceTree, bạn bắt buộc phải có kiến thức cơ bản về Git. Các thao tác trên GUI của SourceTree thực chất cũng sẽ là những lệnh Git thực thi ở phía dưới, vì thế bạn cần hiểu rõ chúng để thực hiện chính xác.

Để bắt đầu với SourceTree, chúng ta có thể dễ dàng download và cài đặt để sử dụng, link phần mềm các bạn có thể xem dưới đây, lựa chọn đúng hệ điều hành để tải, các bước cài đặt cũng khá dễ dàng và nhanh chóng:

Link download SourceTree: https://www.sourcetreeapp.com/

Việc đầu tiên trong quản lý source code chính là clone một repository, ở bước này bạn có thể lựa chọn việc tích hợp tài khoản GitLab, GitHub hay BitBucket hoặc đơn thuần là nhập vào địa chỉ remote trực tiếp để kéo source code dự án về. Kết quả nhận được khi mở một dự án trên SourceTree sẽ như dưới đây

Quản lý source code dự án bằng Git với SourceTree 

Về mặt giao diện, SourceTree chia thành 3 khu vực chính bao gồm:

  • Header: các thao tác thường sử dụng nhất như Commit, Pull, Push hay tạo Branch và Merge code. Những thao tác này hoàn toàn dễ hiểu và sử dụng khi bạn đã biết cơ bản về Git
  • Left-Side: chứa thông tin về WorkSpace, những file bạn đang chỉnh sửa, thêm mới, … Tiếp đó là thông tin về các nhánh (branches) của cả local và remote; các tags, stash, ….
  • Graph: biểu đồ thể hiện lịch sử các commit, các nhánh và các thao tác merge code giữa các nhánh với nhau. Mỗi nhánh sẽ có một màu sắc riêng khá dễ để theo dõi một cách trực quan.

Một số lưu ý khi quản lý source code dự án với SourceTree:

  • SourceTree không có đầy đủ các tính năng mở rộng so với việc sử dụng dòng lệnh, vì vậy nếu cần sử dụng các tính năng Git Advanced phức tạp thì bạn nên tránh việc thao tác với SourceTree.
  • SourceTree sẽ yêu cầu đòi hỏi sử dụng tiêu tốn tài nguyên hệ thống đáng kể nếu bạn làm việc trên các dự án lớn. Khi số lượng branch, commit trở nên rất lớn thì việc SourceTree cần tài nguyên để xử lý là không tránh khỏi, lúc này bạn cũng nên ưu tiên làm việc với command line nhiều hơn để tăng hiệu suất
  • Tài liệu mô tả của SourceTree không quá đầy đủ, và có thể nói là bạn sẽ không học được nhiều về Git Flow chuyên sâu nếu như sử dụng SourceTree. Một số thao tác khi thực hiện trên GUI sẽ là tổ hợp của nhiều dòng lệnh, vì vậy bạn vẫn nên cẩn thận trước khi sử dụng.

Khi nào nên dùng Sourcetree

Có nhiều lời khuyên từ các Senior Dev cho rằng nên học, sử dụng và làm việc Git với command line cho quen và chuyên nghiệp hơn; không nên sử dụng các tool GUI Git vì có thể khiến bạn không nắm được bản chất của Git Flow hay các thao tác mà các tool đó đã tích hợp sẵn. Tuy nhiên bất cứ công cụ nào sinh ra cũng có mục đích riêng và phục vụ giúp công việc của chúng ta trở nên thuận tiện hơn.

Nếu bạn thường xuyên làm việc với server, chỉ giao tiếp hoàn toàn thông qua câu lệnh (command line) thì việc sử dụng SourceTree là bất khả thi. Nhưng nếu bạn ở vị trí là người thường xuyên merge code, xử lý các conflict xảy ra thì SourceTree sẽ giúp bạn khá nhiều việc hữu ích.

Khi nào nên dùng Sourcetree

Vì vậy nếu bạn yêu thích thao tác với giao diện (GUI), đừng ngại mà sử dụng SourceTree; sự phổ biến của nó là minh chứng cho việc nó vẫn rất hữu ích dành cho anh em lập trình. Nếu bạn cần một công cụ để học về Git, cũng không cần lo lắng quá nhiều về những vấn đề sẽ gặp phải khi chuyển qua command line. Nếu sử dụng thành thạo cả SourceTree và command line thì sẽ giúp bạn đa dạng hóa công cụ làm việc hơn và hiệu quả trong công việc sẽ tăng lên đấy.

Kết bài

SourceTree là một công cụ quản lý source code bằng Git với giao diện đồ họa dễ sử dụng, chạy được trên nhiều nền tảng và hoàn toàn miễn phí. Mặc dù có những hạn chế nhất định về tính năng mở rộng cùng những tài liệu liên quan nhưng đây vẫn là một lựa chọn tốt dành cho các anh em lập trình viên. Việc lựa chọn SourceTree hay Command Line phụ thuộc vào sở thích và nhu cầu của bạn trong từng dự án. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

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

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

Recap – mgm Goodminton Tournament 2023

Last month, MGM Technology Partners organized the internal Goodminton Tournament with more than 20 players joining in single and double categories. After the ranking round and intense final matches, their company finally found the champions: Tuan Tran & Anh Phan were the champions of the doubles category, and Bao took the gold medal after convincing victories over all the players he met.
This tournament not only enhanced the sportsmanship but also connected all members of the club

Link post: https://www.linkedin.com/posts/mgm-technology-partners-vietnam-co-ltd

mgm technology partners Vietnam Co. Ltd
Website: www.mgm-tp.com
Join us: mgmtp.hire.trakstar.com
Why mgm: https://lnkd.in/g_uWsNQY
Phone: (+84) 236 3531 77

Socket IO là gì? Tất tần tật những điều cần biết

Bài viết này sẽ giải thích cho anh em về Socket IO, Socket IO là gì? Ngoài ra cũng hướng dẫn để anh em có thể sử dụng được Socket IO.

Bài viết này ở dạng cơ bản khi nói về Socket IO, nếu anh em đã có kinh nghiệm nhiều với ông này thì có thể tham khảo các bài viết khác:

Okie bắt đầu thôi anh em, nào là sóc, nào là kẹt. Quất hết

1. Socket IO là gì?

Đầu tiên, dành cho anh em hay nhầm lẫn Socket IO là cái gì đó mới lắm thì câu trả lời là ông thần này đã được ra mắt vào năm 2010. Socket IO ra đời với mục đích giúp kết nối trong thời gian thực giữa client và server (máy chủ và máy khách)

Bản thân giao tiếp là hai chiều, qua lại giữa client và server. Việc giao tiếp hai chiều chỉ xảy ra khi client enable cho phép sử dụng Socket IO, và phía server cũng làm y chang thế.

Về lý thuyết mà nói thì socket io có thể giữ liên lạc và gửi nhiều loại dữ liệu khác nhau, nhưng thông thường hay sử dụng chỉ để gửi JSON. JSON everywhere luôn anh em. Ớn

Rồi, đi sâu hơn tí về cách hoạt động, bản thân ông socket không đứng một mình, mà cũng không phải mỗi ổng làm nên mùa thu. Phía dưới của socket là engine.io, engine là cấp thấp hơn, sử dụng phía client bằng  Engine.IO-client.

Socket IO là gì

Mốt cái nữa anh em cũng hay nhầm giữa WebSockets và Socket IO, 2 thằng này khác nhau, mặc dù đều là giao tiếp giữa client và server (bi-directional communication) nhưng socket io không sử dụng quy chuẩn của web socket. Chi tiết sẽ nói rõ hơn ở phần sau

Anh em cũng có thể xem video này để biết thêm về Socket IO

2. Socket IO hoạt động như thế nào?

2.1 Với websocket

Như ở trên đã có đề cập với anh em socket IO khác với websocket, mặc dù cả hai đều phụ trách giao tiếp giữa client và server. Để giữ kết nối này ta cần biết khái niệm về long-polling. Bản thân Socket IO tạo ra long-polling bằng cách sử dụng xhr-polling để tạo ra connection giữa client và server.

Vấn đề là một khi kết nối đã được mở, Socket IO lại cập nhật lên phương thức kết nối tốt nhất (best connection method). Lúc này lại quay lại Websocket.

Anh em có thể tham khảo bài viết này, để biết tại sao WebSocket lại là lựa chọn tốt hơn.

  Cách sử dụng Laravel với Socket.IO
  Hiện thực WebSocket với Spring framework

2.2 Socket IO

Quay trở lại với Socket IO hoạt động như thế nào?. Cách đơn giản nhất để giải thích cách hoạt động của SocketIO là chatapp. Thông thường một app chat luôn phải giữ kết nối giữa client và server. Giả sử 2 người A và B chat với nhau thì connection giữa Client A, Client B tới server chat sẽ luôn được mở.

Với socket, một khi server nhận được tin nhắn của Client A, nó sẽ gửi thông báo tới Client B. Bản thân request chỉ cần mở một lần, không cần phải gọi tới gọi lui nhiều request.

Socket IO là gì

3. Ví dụ socket chat

Anh em cài Nodejs và Express. Cùng bắt tay xây dựng thử ứng dụng chat với Socket IO

Đầu tiên khởi tạo folder với một số câu lệnh chạy ở powershell hoặc terminal

$ mkdir socket.io-example
cd socket.io-example
npm install socket.io express

const app = require("express")();
const http = require("http").createServer(app);
const io = require("socket.io")(http);

Server root khi gọi tới sẽ trả về nội dung của index.html

app.get("/", (req, res) => res.sendFile(__dirname + "/index.html"));

Tới lúc setup socket io, lắng nghe cho sự kiện connection và chạy code trong function mỗi khi socket io được mở

io.on("connection", function(socket) {
 console.log("socket connected");
});

Lắng nghe port 3000

http.listen(3000, () => console.log("listening on http://localhost:3000")

Xong, anh em chạy với node index.js

3.1 Client

Ở phía client anh em mở index.html và thêm vào phần body. Thêm socketio và trong script, vậy là có thể bắt đầu sử dụng socket io

<script src="/socket.io/socket.io.js"></script>
<script>
 const socket = io();
</script>

Xong ở phần Client tiếp tới sẽ là phần Server.

3.2 Server

Trong function dưới ta sẽ sử dụng io.emit() để gửi tin nhắn tới client. Code này cũng thông báo khi client kết nối tới server.

io.on("connection", function(socket) {
 io.emit("user connected");
});

Trường hợp client gửi thêm message, ta cũng có thể handle thông qua code dưới đây

io.on("connection", function(socket) {
 io.emit("user connected");
 socket.on("message", function(msg) {
   io.emit("message", msg);
 });
});

3.3 Client

Quay trở lại với index.html, bao gồm phần script đã viết trước đó. Giờ sẽ bổ sung thêm phần code để gửi tin nhắn và hiển thị tin nhắn.

<!DOCTYPE html>
<html lang="en">
 <head>
   <meta charset="UTF-8" />
   <meta name="viewport" content="width=device-width, initial-scale=1.0" />
   <meta http-equiv="X-UA-Compatible" content="ie=edge" />
   <title>Socket.io Example</title>
 </head>

 <body>
   <h1>Our Socket.io Chat Application</h1>
   <div>
     <h2>Messages</h2>
     <ul></ul>
   </div>
   <form action="">
     <input type="text" />
     <button>Send</button>
   </form>
   <script src="/socket.io/socket.io.js"></script>
   <script>
     const socket = io();
   </script>
 </body>
</html>

Sau đó sẽ thêm một số logic cho script tag

<script>

 // select relevant elements
 const form = document.querySelector("form");
 const input = document.querySelector("input");
 messageList = document.querySelector("ul");

 // establish socket.io connection
 const socket = io();

 // handle sending message to server & input reset
 function sendMessage(e) {
   // prevent form submission refreshing page
   e.preventDefault();
   // send input value to server as type 'message'
   socket.emit("message", input.value);
   // reset input value
   input.value = "";
 }

 // add listener to form submission
 form.addEventListener("submit", sendMessage);

 // add message to our page
 function addMessageToHTML(message) {
   // create a new li element
   const li = document.createElement("li");
   // add message to the elements text
   li.innerText = message;
   // add to list of messages
   messageList.append(li);
 }
  // watch for socket to emit a 'message'
 socket.on("message", addMessageToHTML);

 // display message when a user connects
 function alertUserConnected() {
   addMessageToHTML("User connected");
 }
  // watch for socket to emit a 'user connected' event
 socket.on("user connected", alertUserConnected);

</script>

Điểm quan trọng trong phần này là function socket.on(event, callback). Mỗi khi có sự kiện gọi tới, hàm trong call back sẽ gọi để xử lý và hiển thị lên màn hình.

4. Tham khảo

Để hiểu rõ hơn về Socket IO, khuyến cáo anh em nên truy cập trang chủ và đọc kĩ các phần tài liệu được ghi ở SocketIO nhé.

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

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

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

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

Nhảy việc thất bại, có nên quay lại công ty cũ làm việc?

Có nên quay lại công ty cũ làm việc? Câu hỏi này đã trở thành chủ đề bàn tán sôi nổi trong giới nhân viên văn phòng trong những năm gần đây. Khi thị trường tuyển dụng cạnh tranh gay gắt, nhiều người đã quyết định rời bỏ công ty cũ để tìm kiếm cơ hội mới. Tuy nhiên, sau một thời gian, họ lại cảm thấy không hài lòng với môi trường làm việc mới và muốn quay lại công ty cũ.

Vậy, có nên quay lại công ty cũ làm việc hay không? Câu trả lời sẽ có trong bài viết này!

Tại sao bạn nghỉ việc ở công ty cũ?

có nên quay lại công ty cũ làm việc

Tại sao bạn nghỉ việc ở công ty cũ? Có nhiều lý do khiến người ta quyết định rời bỏ công ty cũ và chọn con đường mới trong sự nghiệp. Có thể do những nguyên nhân khách quan như gia đình có việc cần, sức khỏe không đảm bảo hoặc bắt buộc phải tham gia nghĩa vụ quân sự,…

Ngoài ra, còn có một số nguyên nhân chủ quan khiến bạn nghỉ việc ở công ty cũ như cảm thấy không hài lòng với môi trường làm việc, lương thưởng không xứng đáng, mâu thuẫn với đồng nghiệp với sếp hoặc muốn tìm kiếm cơ hội phát triển bản thân ở một môi trường mới.

Nếu bạn nghỉ việc vì những lý do khách quan, thì bạn có thể cân nhắc việc quay lại công ty cũ sau khi các lý do đó được giải quyết. Tuy nhiên, nếu bạn nghỉ việc vì những lý do chủ quan, thì bạn nên suy nghĩ kỹ trước khi đưa ra quyết định quay lại.

Tìm hiểu lý do khiến bạn muốn quay lại công ty cũ làm việc

lý do khiến bạn muốn quay lại công ty cũ làm việc

Trả lời câu hỏi “Lý do gì khiến bạn muốn quay lại công ty cũ làm việc?” sẽ giúp bạn dễ dàng hơn khi đưa ra quyết định có nên quay lại hay không. Dưới đây là một số lý do mà một người có thể muốn quay lại công ty cũ làm việc:

  • Mối quan hệ làm việc tích cực: Nếu bạn có mối quan hệ làm việc tích cực và đồng đội thân thiện tại công ty cũ, đó có thể là một lý do mạnh mẽ khiến bạn muốn quay lại. Môi trường làm việc thoải mái và hỗ trợ có thể tạo điều kiện cho sự phát triển và hạnh phúc nghề nghiệp.
  • Cơ hội phát triển nghề nghiệp: Nếu công ty cũ đưa ra cơ hội phát triển nghề nghiệp hấp dẫn và có sự đầu tư vào sự phát triển cá nhân của bạn, việc quay lại có thể được xem xét. Có thể có những dự án mới, vị trí quản lý hoặc cơ hội đàm phán mức lương và lợi ích mới.
  • Sự thấu hiểu về văn hóa công ty: Một lợi thế của việc quay lại công ty cũ là bạn đã có sự thấu hiểu sâu rộng về văn hóa công ty. Nếu bạn thích và phù hợp với giá trị và phong cách làm việc của công ty, đó có thể là lý do quan trọng để trở lại.
  • Sự thay đổi trong tình hình cá nhân: Có những thời kỳ trong cuộc đời khi sự ổn định và chắc chắn trở nên quan trọng hơn. Nếu có sự thay đổi trong tình hình cá nhân của bạn, chẳng hạn như muốn ổn định cuộc sống gia đình hoặc giảm áp lực công việc, việc quay lại công ty cũ có thể là một lựa chọn hợp lý.

  Cảnh báo 6 'red flags' khi tìm việc mà bạn nên tránh ngay

  CV chuẩn ATS là gì? Bí kíp đậu phỏng vấn với CV chuẩn ATS

Mẹo quay lại công ty cũ thành công

Quay lại công ty cũ làm việc có thể là một lựa chọn tốt nếu bạn muốn tiếp tục phát triển sự nghiệp của mình và gắn bó với một môi trường làm việc quen thuộc. Tuy nhiên, để quay lại công ty cũ thành công, bạn cần chuẩn bị kỹ lưỡng và thực hiện đúng cách.

Dưới đây là một số mẹo giúp bạn quay lại công ty cũ thành công:

1. Liên hệ với người quản lý cũ của bạn

Bước đầu tiên để quay lại công ty cũ là liên hệ với người quản lý cũ của bạn. Hãy cho họ biết rằng bạn đang quan tâm đến việc quay trở lại công ty. Bạn có thể gọi điện, gửi email hoặc gặp trực tiếp để trò chuyện.

Liên hệ với người quản lý cũ

Khi liên hệ với người quản lý cũ, hãy thể hiện sự nhiệt tình và mong muốn quay lại công ty. Bạn cũng nên cho họ biết lý do tại sao bạn muốn quay lại. Nếu bạn có thể thuyết phục người quản lý cũ rằng bạn là một nhân viên tốt và có giá trị, họ sẽ sẵn sàng giúp đỡ bạn.

2. Cho họ thấy những gì bạn đã học được kể từ khi rời đi

Khi bạn trò chuyện với người quản lý cũ, hãy cho họ thấy những gì bạn đã học được kể từ khi rời đi. Bạn có thể nói về các kỹ năng và kiến thức mới mà bạn đã tích lũy được, hoặc về những thành tích mà bạn đã đạt được trong thời gian làm việc ở công ty mới.

Việc thể hiện những gì bạn đã học được sẽ giúp người quản lý cũ thấy rằng bạn là một nhân viên có giá trị và có thể đóng góp nhiều hơn cho công ty.

Tạo CV online miễn phí

3. Chia sẻ rõ ràng về mục tiêu nghề nghiệp

Hãy chia sẻ rõ ràng về mục tiêu nghề nghiệp của bạn với người quản lý cũ. Điều này sẽ giúp họ hiểu được những gì bạn muốn đạt được trong sự nghiệp của mình và liệu công ty có thể đáp ứng được những kỳ vọng của bạn hay không.

Nếu bạn có thể chia sẻ những mục tiêu nghề nghiệp cụ thể, người quản lý cũ sẽ đánh giá cao sự nghiêm túc và quyết tâm của bạn.

4. Thể hiện sự tích cực, chuyên nghiệp trong mọi hoàn cảnh

Thể hiện sự tích cực, chuyên nghiệp trong mọi hoàn cảnh

Trong suốt quá trình trò chuyện với người quản lý cũ, hãy luôn thể hiện sự tích cực và chuyên nghiệp. Điều này sẽ giúp bạn tạo ấn tượng tốt và tăng cơ hội được quay lại công ty cũ. Hãy tránh nói xấu công ty mới hoặc đồng nghiệp cũ. Thay vào đó, hãy tập trung vào những điểm mạnh và thành tích của bạn.

5. Chuẩn bị tâm lý cho cảm giác tiêu cực từ sếp hoặc đồng nghiệp cũ

Nếu bạn đã rời đi vì những lý do tiêu cực, có thể sếp hoặc đồng nghiệp cũ của bạn sẽ có cảm giác tiêu cực khi biết bạn muốn quay lại. Hãy chấp nhận những cảm xúc này và cố gắng giải quyết chúng một cách tích cực.

Bạn có thể nói chuyện riêng với sếp hoặc đồng nghiệp cũ để tìm hiểu nguyên nhân của những cảm xúc tiêu cực đó. Sau đó, hãy cố gắng giải thích lý do tại sao bạn muốn quay lại và làm rõ những điều khiến bạn không hài lòng trước đây.

6. Chứng minh bằng cam kết

Hãy thể hiện cam kết của bạn với công ty cũ. Điều này sẽ giúp người quản lý cũ thấy rằng bạn nghiêm túc với quyết định quay lại công ty.

Bạn có thể thể hiện cam kết của mình bằng cách:

  • Chấp nhận mức lương và vị trí phù hợp với năng lực kinh nghiệm của bạn.
  • Nói rõ rằng bạn muốn gắn bó lâu dài với công ty.
  • Thể hiện sự sẵn sàng học hỏi và phát triển.

Tuân theo những mẹo trên sẽ giúp bạn tăng cơ hội quay lại công ty cũ thành công. Hãy chuẩn bị kỹ lưỡng và thực hiện đúng cách để đạt được mục tiêu của mình.

Kết luận

Có nên quay lại công ty cũ làm việc hay không là một quyết định cá nhân. Không có câu trả lời đúng hay sai cho câu hỏi này. Điều quan trọng là bạn phải cân nhắc kỹ lưỡng tất cả các yếu tố liên quan trước khi đưa ra quyết định.

Hãy nhớ rằng quyết định quay lại công ty cũ không chỉ là về việc quyết định nơi làm việc mà còn về việc hiểu rõ hơn về chính bản thân mình. Cân nhắc mỗi khía cạnh của quyết định này, đảm bảo rằng nó phản ánh đúng với những gì bạn mong đợi từ sự nghiệp và cuộc sống của mình. Một quyết định quyết đoán và đầy tính chiến lược sẽ giúp bạn thăng tiến trên con đường sự nghiệp một cách mạnh mẽ.

Xem thêm:

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

Clean Code Android: Bạn đã thật sự hiểu đúng chưa?

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

Clean code Android là gì? Có lẽ bạn đã nghe quá nhiều các đàn anh đi trước nói: Em phải viết clean code thì mã nguồn mới dễ đọc, dễ mở rộng, dễ bảo trì… Nhưng bạn có biết clean code Android là thế nào không? Có phải cứ viết ngắn gọn là clean code?

Với những người đang đọc bài viết này:  Một là, bạn là một lập trình viên. Hai là, bạn muốn trở thành một lập trình viên giỏi. — Robert C. Martin

Thử tưởng tượng bạn đang ở trong một thư viện sách. Bạn muốn tìm một cuốn sách nào đó. Nếu như thư viện được sắp xếp gọn gàng, phân loại sách tốt thì bạn sẽ dễ dàng tìm được cuốn mình cần. Ngoài ra, nếu như thư viện mà được thiết kế nội thất tối, bạn sẽ có hứng thú hơn khi đọc sách.

Cũng giống như ví dụ trên, khi bạn xây dựng một ứng dụng, bạn phải biết cách viết code và tổ chức sao cho gọn gàng, dễ đọc.

Đặc biệt với các dự án có nhiều thành viên, và thời gian maintaince dài. Khi đọc code, các member chỉ cần nhìn tên class, tên hàm, tên package… là hiểu ngay.

Đừng để những tiếng “F***K” vang lên mỗi khi ai đó đọc code của bạn

Thực hành cách viết Clean Code Android

“Clean Code” là gì?

Source code của bạn được gọi là “Clean” khi nó có thể dễ dàng đọc hiểu bởi các member trong dự án. Không chỉ tác giả của mã nguồn mới có trách nhiệm tạo code được clean hơn. Mà tất cả các member trong dự án cũng phải ý thức được cần phải viết code clean.

Với tính dễ hiểu, clean code Android sẽ giúp dự án dễ dàng mở rộng, thay đổi theo yêu cầu mới, cũng như tăng cường khả năng bảo trì của ứng dụng.

Tên biến, hàm, Class… phải có nghĩa.

Có thể việc bạn suy nghĩ về tên biến sao cho có ý nghĩa hơi mất thời gian, nhưng lợi ích của nó mang lại thì vô cùng lớn.

Tên của biến, tên hàm, hay tên class… phải nói lên được tại sao nó tồn tại, nó là gì và sử dụng như thế nào.

Nếu một tên cần phải comment để giải thích thì tên đó vẫn chưa đạt được yêu cầu của “Clean code”.

Mình lấy một số ví dụ:

// Không nên
var a = 0 // user ages
var w = 0 // user weight
var h = 0 // user height

// Không nên 
fun age()
fun weight()
fun height()

// Tên class như này vẫn chưa phải là chuẩn clean code.
class UserInfo()

// Nên
var userAge = 0
var userWeight = 0
var userHeight = 0

// Nên
fun setUserAge()
fun setUserWeight()
fun setUserHeight()

// Nên
class Users()

  Viết clean code: Code “đẹp trai” và code “xấu gái” có gì hay ho?

  Quy tắc viết code dễ đọc, tối ưu và dễ bảo trì nhất

#Tên Class

Tên Class hay Object nên là danh từ hay cụm danh từ. Ví dụ: Customer, WikiPage, Account, hay AddressParser. ( Xem cách khởi tạo class bằng Kotlin)

Tránh thêm những hậu tố vào trong tên class: Manager, Processor, Data, or Info.

Tuyệt đối không sử dụng động từ để làm tên Class.

#Tên hàm

Ngược với tên hàm, tên hàm nên sử dụng động từ để đặt tên. Ví dụ: postPayment()deletePage(), hay save()

OK, giờ chúng ta sẽ bắt đầu học cách viết clean code Android theo quy tắc S.O.L.I.D

Sử dụng quy tắc S.O.L.I.D để viết clean code Android

S.O.L.I.D là bộ quy tắc viết code được phát minh bởi Robert C. Martin (Uncle Bob). Khi bạn ứng dụng bộ quy tắc này vào dự án, đảm bảo mã nguồn của bạn sẽ cực kỳ “clean” luôn.

Vậy bộ quy tắc này có những nguyên lý gì?

Bạn cứ đi pha một cốc cafe rồi quay lại tiếp tục đọc nhé

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

#Single Responsibility Principle — SRP

Single Responsibility Principle 

Nguyên lý đầu tiên, tương ứng với chữ S trong S.O.L.I.D. Nội dung nguyên lý:

Một class chỉ nên giữ 1 trách nhiệm duy nhất 
(Chỉ có thể sửa đổi class với 1 lý do duy nhất)

Để hiểu nguyên lý này, chúng ta lấy ví dụ về 1 class Adapter với các logic được implement trong onBindViewHolder.

class MyAdapter(val friendList: List<FriendListData.Friend>) :
    RecyclerView.Adapter<CountryAdapter.MyViewHolder>() {

    inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        var name: TextView = view.findViewById(R.id.text1)
        var popText: TextView = view.findViewById(R.id.text2)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val friend = friendList[position]

        val status = if(friend.maritalStatus == "Married") {
            "Sold out"
        } else {
            "Available"
        }

        holder.name.text = friend.name
        holder.popText.text = friend.email
        holder.status.text = status
    }

    override fun getItemCount(): Int {
        return friendList.size
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_friendlist, parent, false)
        return MyViewHolder(view)
    }
}

Với các viết code này đã vi phạm nguyên lý của S.L.O.I.D. Bởi vì class RecyclerView.Adapter không chỉ chịu một trách nhiệm duy nhất. Vì nó phải implement phần logic cho biến status trong onBindViewHolder.

Hàm onBindViewHolder() chỉ nên làm một nhiệm vụ duy nhất là thiết lập dữ liệu để hiển thị ra view thôi, không xử lý bất kì logic nào cả.

Thêm một ví dụ nữa nhé. Mình có class như sau:

public class Reports ()
{
   public void readDataFromDB();
   public void processData();
   public void printReport();
}

Class này giữ tới 3 trách nhiệm: Đọc dữ liệu từ database, xử lý dữ liệu, hiển thị kết quả.

Sau này chỉ cần ta thay đổi DB hay thay đổi cách hiển thị kết quả dữ liệu,… ta sẽ phải sửa đổi class này. Càng về sau class sẽ càng phình to ra.

Theo đúng nguyên lý, ta phải tách class này ra làm 3 class riêng. Tuy số lượng class nhiều hơn những việc update code sẽ đơn giản hơn. Class ngắn hơn nên cũng ít issue hơn.

#Open-Closed Principle — OCP

Open-Closed Principle 

Nguyên lý thứ hai, tương ứng với chữ O trong SOLID. Nội dung nguyên lý:

Có thể thoải mái mở rộng 1 class, nhưng không được sửa đổi bên trong class đó
(open for extension but closed for modification).

Điều này có nghĩa là: Nếu bạn viết một class A, và các members khác muốn chỉnh sửa một function bên trong Class A. Họ có thể dễ dàng extend Class A và sửa đổi tùy thích. Nhưng không nên sửa trực tiếp trong Class A.

Mình tiếp tục với ví dụ với RecyclerView.Adapter class. Bạn có thể dễ dàng extend class này tạo một Adapter cho riêng mình.

class FriendListAdapter(val friendList: List<FriendListData.Friend>) :
    RecyclerView.Adapter<CountryAdapter.MyViewHolder>() {

    inner class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        var name: TextView = view.findViewById(R.id.text1)
        var popText: TextView = view.findViewById(R.id.text2)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val friend = friendList[position]
        holder.name.text = friend.name
        holder.popText.text = friend.email
    }

    override fun getItemCount(): Int {
        return friendList.size
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_friendlist, parent, false)
        return MyViewHolder(view)
    }
}

#Clean code Android: Liskov Substitutions Principle — LSP

Clean code Android: Liskov Substitutions Principle

Nguyên lý thứ ba, tương ứng với chữ L trong SOLID. Nội dung nguyên lý:

Trong một chương trình, các object của class con có thể thay thế class cha 
mà không làm thay đổi tính đúng đắn của chương trình

Điều này có nghĩa là class con khi override hàm mà không làm hỏng chức năng của class.

Mình ví dụ: Bạn tạo một interface có một listener: onClick(). Sau đó bạn apply listener đó trong MyActivity. Khi người click và onClick() được gọi, bạn cho hiển thị một Toast thông báo.

interface ClickListener {
    fun onClick()
}
class MyActivity: AppCompatActivity(), ClickListener {

    //........
    override fun onClick() {
        // Do the magic here
        toast("OK button clicked")
    }

}

#Interface Segregation Principle — ISP

Interface Segregation Principle

Nguyên lý thứ tư, tương ứng với chữ I trong SOLID. Nội dung nguyên lý:

Thay vì dùng 1 interface lớn, ta nên tách thành nhiều interface nhỏ, 
với nhiều mục đích cụ thể

Nghĩa là: nếu bạn muốn  tạo một Interface A và implement nó trong một class B nào đó. Và sẽ class B sẽ phải implement toàn bộ methods trong Interface A. Sẽ ra sao nếu Interface có khoảng 100 methods, trong khi Class B không nhất thiết phải override toàn bộ số methods đó.

Nguyên lý này khuyên bạn nên tách Interface A ra thành nhiều Interface nhỏ khác với các methods liên quan với nhau nhiều nhất. Như vậy sẽ sẽ implement hơn nhiều.

Chúng ta cùng thử một ví dụ nhé. Trong activity của bạn, bạn cần phải implement SearchView.OnQueryTextListener() và bạn chỉ cần đến mỗi hàm onQuerySubmit().

mSearchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
    override fun onQueryTextSubmit(query: String?): Boolean {
        // Chỉ muốn override hàm này
        return true
    }

    override fun onQueryTextChange(query: String?): Boolean {
        // Chúng ta không muốn override cả hàm này.

        return false
    }
})

Làm thế nào có thể làm được điều này? Đơn giản là bạn chỉ cần tạo một callback và một class extend từ nó.

>>> Xem thêm: Nguyên lý Solid trong Nodejs

SearchView.OnQueryTextListener().

interface SearchViewQueryTextCallback {
    fun onQueryTextSubmit(query: String?)
}

class SearchViewQueryTextListener(val callback: SearchViewQueryTextCallback): SearchView.OnQueryTextListener {
    override fun onQueryTextSubmit(query: String?): Boolean {
        callback.onQueryTextSubmit(query)
        return true
    }

    override fun onQueryTextChange(query: String?): Boolean {
        return false
    }
}

Và đây là cách implement:

val listener = SearchViewQueryTextListener(
    object : SearchViewQueryTextCallback {
        override fun onQueryTextSubmit(query: String?) {
             // Do the magic here
        }
    }
)
mSearchView.setOnQueryTextListener(listener)

#Dependency Inversion Principle — DIP

Dependency Inversion Principle

Nguyên lý cuối cùng, tương ứng với chữ D trong SOLID. Nội dung nguyên lý:

1. Các module cấp cao không nên phụ thuộc vào các modules cấp thấp.
Cả 2 nên phụ thuộc vào abstraction.
2. Interface(abstraction) không nên phụ thuộc vào chi tiết, 
mà ngược lại.
(Các class giao tiếp với nhau thông qua interface,
không phải thông qua implementation.)

Một ví dụ đơn giản đó là mô hình MVP. Bạn có một Interface giúp chúng ta kết nối các class. Tức là, các UI class không cần quan tâm đến logic được implement trong Presenter như thế nào.

Vì vậy, nếu bạn có phải thay đổi logic bên trong Presenter thì UI cũng không biết, không cần phải thay đổi code vì điều đó.

Ví dụ bằng code nhé:

interface UserActionListener {
    fun getUserData()
}

class UserPresenter : UserActionListener() {
    // .....

    override fun getUserData() {
        val userLoginData = gson.fromJson(session.getUserLogin(), DataLogin::class.java)
    }

    // .....
}

Bây giờ bạn hãy xem UserActivity:

class UserActivity : AppCompatActivity() {

    //.....
    val presenter = UserPresenter()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Activity doesn't need to know how presenter works
        // for fetching data, it just know how to call the functions
        // So, if you add method inside presenter, it won't break the UI.
        // even the UI doesn't call the method.

        presenter.getUserData()
     }

     //....
}

Tạm kết

Như vậy, qua bài viết này mình chỉ muốn truyền tải đến bạn một thông điệp duy nhất:

“Hãy viết code như thể người maintain là một đứa sát nhân điên cuồng và biết địa chỉ nhà bạn”

Bài viết này mình chủ yếu tập trung vào cách viết clean code Android. Tuy nhiên, nguyên lý S.L.O.I.D hoàn toàn có thể ứng dụng cho những mã nguồn khác.

Mã nguồn của bạn có thực sự “Clean” không? Hãy để lại bình luận bên dưới nhé.

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

Xem thêm:

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

Lập trình viên có cần thiết phải giỏi tiếng Anh không?

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

Tôi đã từng nghe một cuộc thảo luận thú vị giữa hai người bạn lập trình viên của tôi, tranh luận liệu một người có thể trở thành lập trình viên mà không cần tiếng Anh hay không.

Bạn tôi, A, có hơn 5 năm kinh nghiệm trong lĩnh vực phát triển web và phần mềm, khẳng định rằng tiếng Anh không bao giờ là bắt buộc đối với một lập trình viên.

Mặc dù tôi đã không ghi lại những gì anh ấy nói ngày hôm đó, nhưng tôi vẫn nhớ hầu hết các lập luận của anh ấy, điều mà rất có ý nghĩa đối với tôi:

Lập trình viên có cần giỏi tiếng Anh không?

“Bạn có thể trở thành một lập trình viên mà không cần tiếng Anh”

Không biết tiếng Anh có thể khiến việc lập trình trở nên khó khăn ở một mức độ nhất định; tuy nhiên, một người không nói tiếng Anh có thể học lập trình. Có hàng ngàn tài liệu không phải tiếng Anh trên Internet sẽ hướng dẫn người mới bắt đầu biết mọi thứ về lập trình.

Một số ngôn ngữ lập trình có sẵn bằng các ngôn ngữ khác ngoài tiếng Anh:

  • Qalb: tiếng Ả Rập
  • Python: Trung Quốc
  • Farsinet: tiếng Ba Tư

Ngoài ra còn có một số nền tảng phát triển phần mềm không phải tiếng Anh như:

  • Aheui: Hàn Quốc
  • ZhPy: Tiếng Trung

Một điểm nữa mà tôi phải dừng lại, code không phải là thơ, và để viết code, bạn không cần đến 5 cuốn từ điển trên bàn làm việc. Những gì bạn cần là có kỹ năng logic và kỹ năng toán học tốt.

Tất nhiên, hãy thử tra cứu ‘các quốc gia tốt nhất với các nhà phát triển web tốt nhất’ trên Google, nhưng không phải bây giờ, đây là những gì bạn sẽ tìm thấy:

Theo HackerRank, 5 quốc gia hàng đầu có các lập trình viên web giỏi nhất là:

  • Trung Quốc.
  • Nga.
  • Ba Lan.
  • Thụy sĩ.
  • Hungary.

  5 lý do sinh viên IT nên học Tiếng Anh ngay lập tức

  Tips viết CV - Hồ sơ xin việc tiếng Anh đạt chuẩn

Nói như vậy, tôi gần như bị thuyết phục cho đến khi A, một nhà phát triển ứng dụng di động, người đã tự học lập trình, trả lời anh ấy, giải quyết vấn đề nan giải từ một góc độ khác:

“Bạn không thể trở thành lập trình viên xuất sắc nếu không có tiếng anh”

Trước khi tôi bắt đầu, điều này không liên quan gì đến việc ‘Tiếng Anh là mẹ của khoa học’ bởi vì nó không phải vậy. Và nó không liên quan gì đến việc ngôn ngữ này tốt hơn ngôn ngữ kia.

Hãy để tôi hỏi bạn một câu hỏi:

Giả sử bạn là một người nói tiếng Anh không phải là tiếng mẹ đẻ (có lẽ bạn cũng vậy) và bạn đi du lịch nước ngoài, nơi mọi người đều nói tiếng Anh. Nếu bạn có khả năng học ngôn ngữ, bạn sẽ? Điều đó sẽ không làm cho cuộc sống của bạn ở đó dễ dàng hơn?

Tất nhiên, có nhiều quốc gia khác nói ngôn ngữ của bạn, nhưng điều đó không có nghĩa là bạn có thể bỏ qua những quốc gia còn lại.

Lập trình viên có cần giỏi tiếng Anh không?

Bạn có thể học các ngôn ngữ lập trình có sẵn bằng tiếng Ả Rập, tiếng Trung và tiếng Hindi. Nhưng những gì về những gì không phải là? Mặc dù Qalb và Farsinet tồn tại, các ngôn ngữ như Ruby và Lua đến từ các quốc gia không nói tiếng Anh (Nhật Bản và Brazil) nhưng vẫn sử dụng cú pháp tiếng Anh.

A đưa ra một điểm thú vị khác, đề cập đến kinh nghiệm của anh ấy, học cách tự viết code:

Có, có sách và hướng dẫn bằng một số ngôn ngữ. Tuy nhiên, khi bạn đạt đến trình độ nâng cao nhất định, tài liệu có giá trị duy nhất bạn tìm thấy sẽ bằng tiếng Anh.

Hơn nữa, trong một thế giới nơi internet quy định, nơi việc gặp gỡ các lập trình viên khác từ các quốc gia khác là điều chắc chắn, thì tiếng Anh là tiêu chuẩn. Đó là ngôn ngữ bạn sẽ sử dụng trong các hội nghị và cuộc họp trực tuyến với một số khách hàng của mình.

Kết luận

Sau khi lắng nghe cẩn thận cuộc tranh luận của họ, tôi đã đưa ra một nhận xét khiến cả hai phải suy nghĩ lại về lập trường của mình ‘Ý kiến ​​của các bạn hoàn toàn bổ sung cho nhau.’

Vâng, tiếng Anh là không cần thiết để học lập trình; tuy nhiên, nếu bạn là một lập trình viên chuyên nghiệp, đến một lúc nào đó bạn sẽ phải tương tác với một người không cùng văn hóa với bạn.

Bạn có thể đọc và học từ các tài liệu bằng ngôn ngữ của mình, nhưng đôi khi bạn sẽ cần những tài liệu nâng cao hơn.

Tôi hy vọng bài viết này sẽ hữu ích cho bạn. Cảm ơn các bạn đã theo dõi bài viết.

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

Xem thêm:

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

Bỏ túi 8 API hữu ích cho anh em developer

API (Application Programming Interface) là một công cụ quan trọng, giúp các lập trình viên tiết kiệm thời gian và công sức, nâng cao hiệu quả công việc và sáng tạo ra các ứng dụng mới. Trong bài viết này, chúng ta sẽ cùng khám phá top 8 nguồn API hữu ích hỗ trợ anh em developer xây dựng một số tính năng trên web/app dễ dàng hơn.

API là gì? Vì sao developer cần sử dụng API?

API, hay Application Programming Interface, là một tập hợp các quy tắc và giao thức cho phép các phần mềm khác nhau tương tác và giao tiếp với nhau. Nó giúp xây dựng một cầu nối giữa các ứng dụng khác nhau, cho phép chúng trao đổi dữ liệu và chức năng mà không cần biết chi tiết bên trong của nhau.

API là gì? Vì sao developer cần sử dụng API?

Vậy tại sao developer cần sử dụng API?

  • Tiết kiệm thời gian và công sức: API giúp developer tiết kiệm thời gian và công sức trong việc phát triển ứng dụng. Thay vì phải tự xây dựng các chức năng và dữ liệu từ đầu, developer có thể sử dụng API để truy cập vào các chức năng và dữ liệu đã được phát triển sẵn.
  • Nâng cao hiệu quả công việc: API giúp developer nâng cao hiệu quả công việc bằng cách cho phép họ tập trung vào các tính năng sáng tạo của ứng dụng.
  • Tăng tính sáng tạo: API giúp developer tăng tính sáng tạo bằng cách cho phép họ tích hợp các ứng dụng khác nhau với nhau.

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

  API Gateway – Cần biết khi thiết kế hệ thống

8 API hữu ích dành cho anh em developer

Dưới đây là một số API hữu ích anh em dev có thể tham khảo:

API REST Countries

API REST Countries

API REST Countries là một nguồn dữ liệu phong phú về các quốc gia trên thế giới. Được cung cấp thông qua các endpoint RESTful, API này cho phép bạn truy xuất thông tin đa dạng về các quốc gia, từ thông tin địa lý đến thông tin về dân số, ngôn ngữ, và nền kinh tế.

API Google Maps

API Google Maps

API Google Maps là một công cụ mạnh mẽ của Google cho phép bạn tích hợp các tính năng địa lý vào ứng dụng hoặc trang web của mình. Các nhà phát triển có thể nhúng Google Maps vào ứng dụng của mình, cho phép người dùng tìm kiếm địa điểm, nhận chỉ đường, xem hình ảnh đường phố hoặc tính toán tuyến đường giữa các vị trí.

API JSON Placeholder

JSON Placeholder là một API dùng để mô phỏng các dịch vụ RESTful để phục vụ cho mục đích testing và prototyping ứng dụng. API bao gồm các dữ liệu về bài đăng trên blog, nhận xét, người dùng và nhiều hơn nữa.

Xem thêm tuyển dụng Design Pattern hấp dẫn trên TopDev

API Petfinfer

API Petfinder là một API RESTful cho phép các nhà phát triển truy cập vào dữ liệu về vật nuôi tìm gia đình mới từ hơn 13.000 nơi trú ẩn và nhóm cứu hộ trên toàn thế giới. API bao gồm thông tin về vật nuôi, chẳng hạn như tên, giống, tuổi, giới tính, kích thước, màu sắc, trạng thái sức khỏe và các chi tiết khác.

API Petfinfer

API Petfinder có thể được sử dụng để tạo ra nhiều loại ứng dụng khác nhau, chẳng hạn như: Ứng dụng tìm kiếm thú cưng, ứng dụng theo dõi thú cưng hay ứng dụng giáo dục về nhận nuôi thú cưng.

API Open Weather

Open Weather API là một API miễn phí cung cấp dữ liệu thời tiết từ hơn 2 triệu địa điểm trên toàn thế giới. API bao gồm các thông tin như nhiệt độ, độ ẩm, áp suất, lượng mưa, tốc độ gió và nhiều hơn nữa. Open Weather API là một công cụ hữu ích cho các nhà phát triển muốn tạo ra các ứng dụng dựa trên dữ liệu thời tiết.

API CoinGecko

CoinGecko API là một tập hợp các API cung cấp dữ liệu về thị trường tiền điện tử, bao gồm giá, khối lượng giao dịch, vốn hóa thị trường, lịch sử giao dịch và nhiều hơn nữa. API này được sử dụng bởi các nhà phát triển để tạo ra các ứng dụng và dịch vụ liên quan đến tiền điện tử, chẳng hạn như: Ứng dụng theo dõi giá tiền điện tử, ứng dụng giao dịch tiền điện tử, ứng dụng phân tích thị trường tiền điện tử.

API CoinGecko

CoinGecko API có hai gói: gói miễn phí và gói trả phí. Gói miễn phí cung cấp một số lượng hạn chế các API, trong khi gói trả phí cung cấp quyền truy cập vào tất cả các API.

API Mail Chimp

Mail chimp API là một phần quan trọng của dịch vụ Email Marketing nổi tiếng, Mail Chimp. Mail chimp API cho phép thêm, sửa đổi, và xóa danh sách email, giúp quản lý và tương tác với người đăng ký của bạn. Cung cấp các API để thêm, cập nhật, và xóa người đăng ký từ danh sách, cũng như lấy thông tin chi tiết về họ.

API CoinGecko

Mailchimp API là một công cụ quan trọng giúp các doanh nghiệp và tiếp thị viên tận dụng dữ liệu khách hàng để tạo ra chiến lược tiếp thị email hiệu quả và tương tác.

API Commerce.js

API Commerce.js là một API full-stack cho thương mại điện tử được xây dựng cho nhà thiết kế và nhà phát triển. API này cung cấp tất cả các tính năng bạn cần để xây dựng trải nghiệm thương mại điện tử tùy chỉnh hoạt động trên bất kỳ hệ thống frontend nào như web, di động hoặc bất kỳ thiết bị IoT nào.

Tổng kết

Với sự đa dạng của các API hiện có, các nhà phát triển có thể dễ dàng tìm thấy API phù hợp với nhu cầu của mình. Bằng cách sử dụng API, các nhà phát triển có thể tạo ra các ứng dụng và dịch vụ mới một cách nhanh chóng và hiệu quả. Hy vọng với 8 API bài viết đã giới thiệu, anh em developer có thể tận dụng một cách hiệu quả để tạo ra các ứng dụng gày càng thông minh và hữu ích.

Xem thêm:

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

“Oxy hóa” nền tảng IoT nông nghiệp bằng Rust

Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân

Trong giới lập trình, “oxy hóa” là một cách nói vui ám chỉ việc viết lại (một phần hoặc toàn bộ) một phần mềm bằng ngôn ngữ Rust, đây là một lối chơi chữ, vì “Rust” còn có nghĩa là “rỉ sét”, một hiện tượng do sự oxy hóa gây nên. Gần đây mình cũng mạnh dạn oxy hóa một phần nền tảng IoT nông nghiệp của AgriConnect.

Động lực khiến mình viết lại nền tảng IoT của AgriConnect bằng Rust là để giảm tải hệ thống, tăng cường khả năng chịu áp lực trong tương lai. Phần mềm mình đang nói đến ở đây có tên mã là “Hạt Thóc”. Nghe tên khiêm tốn, nhỏ bé thôi nhưng nó vận hành theo kiểu SaaS (Software as a Service), tức một phần mềm sẽ vận hành cùng lúc nhiều trang trại khách hàng. Mỗi khách hàng sẽ có một không gian riêng khi thao tác, quản lý trang trại của mình, thậm chí có tên miền riêng, nhưng thực ra tất cả đều đang được phục vụ bởi một chương trình trên server. Phần mềm này vốn được viết bằng ngôn ngữ Python, framework Django, được chia ra nhiều thành phần, mỗi thành phần chạy dưới dạng một process, một service riêng. Trong hoàn cảnh đặc thù của “Hạt Thóc” thì thì mình không “oxy hoá” theo kiểu, viết lại một vài hàm nào đó bằng Rust, biên dịch dưới dạng thư viện, rồi dùng Python import thư viện đó, mà viết lại toàn bộ thành phần con luôn. “Hạt Thóc” có ba thành phần chính:

  • Collector: Giao tiếp để thu thập dữ liệu cảm biến, trạng thái bật tắt của các tải, và lưu vào database.
  • ControlView: Cung cấp giao diện web để người dùng vào xem dữ liệu, cấu hình trang trại, đặt lịch, hay bật tắt tải bằng tay.
  • ControlCenter: Chạy ngầm để phân tích lịch, dữ liệu cảm biến để ra lệnh bật, tắt tải, kiểm tra tình trạng bất thường và phát đi cảnh báo.

Thành phần chạy nặng nhất là ControlCenter vì phải tính toán nhiều và khẩn trương, do có những trang trại, cụ thể là thủy canh, có những luật điều khiển phức tạp. Khẩn trương là vì, cũng lại trang trại thủy canh, có những máy móc mà chỉ được bật trong 1 – 2 giây rồi tắt liền. Đây cũng là thành phần đáng được viết lại bằng Rust.

Để khỏi hiểu lầm về khả năng của Python, xin được giải thích thêm là việc viết lại bằng Rust này không cấp thiết lắm, vì bên mình vẫn chưa dùng đến server mạnh. Để tăng cường khả năng đáp ứng thì phương án đơn giản hơn là nâng cấp cấu hình server thôi, vì dư địa mở rộng vẫn còn nhiều. Việc mình chọn phương án viết lại chỉ để rèn luyện bản thân và để tiết kiệm năng lượng tiêu thụ, giảm phát thải carbon .

  Tận dụng phong cách xử trí lỗi của Rust trong lập trình web

  Triển khai bài toán duyệt cây nhị phân với Rust

Những bài toán nảy sinh khi một bộ code Rust cần cộng tác với một bộ code Django

Vì hoạt động chung với bộ code Django đang có nên controlcenter-rs phải đáp ứng những yêu cầu về interoperate như sau:

  • Hiểu được hệ thống cấu hình (settings).
  • Truy xuất được database đã được định hình bởi Django.

Các dự án Django của mình thường được quản lý settings bằng các file TOML, theo quy ước của thư viện Dynaconf, nghĩa là:

  • Settings được phân nhóm cho bốn môi trường: development (giai đoạn viết code trên máy cá nhân), staging (lúc chạy trên server staging phục vụ cho test), production (chạy thật để phục vụ cho người dùng thật), testing (khi chạy unittest /integration test). Để tránh việc lặp đi lặp lại thì có một môi trường default định nghĩa tất cả các settings gốc cùng giá trị gốc. Trong mỗi môi trường sau đó, cần thay đổi gì so với gốc thì chỉ cần định nghĩa lại mỗi tùy chọn đó thôi. Có một file dùng chung cho mọi lập trình viên, thông thường được đặt tên settings.toml, được lưu trong Git và có vừa đủ settings để chạy.
  • Mỗi lập trình viên trong quá trình viết và chạy thử trên máy cá nhân, có thể cũng cần những thay đổi nhỏ về settings cho phù hợp với máy mình, thì sẽ định nghĩa lại trong một file settings local, cũng theo cấu trúc giống như trên, nhưng không được lưu trong Git.
  • Tất cả các thông tin nhạy cảm như mật khẩu, API key thì không lưu vào các file trên kia, mà lưu trong file ẩn .secrets.toml, để giảm nguy cơ bị lộ, và không lưu trong Git để tránh việc rò rỉ trên các kho lưu mã nguồn.

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

Ví dụ của việc phân settings ra theo môi trường là:

  • Trong môi trường stagingproduction, mình ưu tiên kết nối database trong chế độ “không password”, và qua Unix domain socket, do database nằm trong cùng server với ứng dụng web, và không mở cổng để nhận kết nối từ bên ngoài vào. Trong môi trường này thì URL của database rất ngắn gọn như postgres:///my_db.
  • Trong môi trường testing thì vì chạy trong Docker container, như là một phần của hoạt động CI/CD, với database nằm trong một container riêng, thì lại cần settings khác, để kết nối database qua TCP và hostname cụ thể.
  • Trên máy cá nhân, nếu lập trình viên sử dụng Linux thì có thể họ sẽ muốn kết nối database qua Unix domain socket, nếu lập trình viên dùng hệ điều hành khác thì sẽ kết nối qua TCP v.v…

Khi viết lại ControlCenter bằng Rust thì mình cần một thư viện hỗ trợ nạp settings từ các file cấu hình này. Nhưng không may là thư viện bên Rust chưa phong phú bằng bên Python. Mình chỉ tìm thấy hydroconf với tính năng gần bằng, nên mình phải fork nó ra và viết thêm code để có tính năng như mong muốn, bản sửa đổi nằm ở đây.

Về truy cập chung database với Django thì mình vẫn để Django đóng vai trò chính trong việc thiết kế model, quản lý migrations. Bên Rust thì chỉ cần định nghĩa model nương theo cấu trúc đã định ra bởi code bên Django. Về ORM (Object-Relational Mapping) thì bên Rust có hai thư viện nổi bật: Diesel và SeaORM. Sau khi thử nghiệm thì chỉ Diesel dùng được, do “Hạt Thóc” có dùng vài kiểu dữ liệu đặc biệt của PostgreSQL, như kiểu Point của lĩnh vực GIS (hệ thống thông tin địa lý), kiểu Interval, mà chỉ Diesel mới hỗ trợ.

Số lượng bảng database nhiều, viết code lại thì rất ngại, may thay Diesel có những công cụ giúp sinh ra code cho models từ dữ liệu có sẵn, bao gồm:

  • diesel_cli: Để sinh ra code cho schema.rs. Đây là code phục vụ cho “query builder”.
  • dsync: Để sinh ra code cho các struct, dùng cho ORM.

Ví dụ một model bên code Django:

class ConditionSchedule(models.Model):
    crop = ForeignKey(Crop, on_delete=CASCADE)
    room = ForeignKey(Room, on_delete=CASCADE)
    cond_type = CharField(
        max_length=4,
        choices=BasicControlledConditionType.choices,
        verbose_name=_('condition type'),
        blank=True,
        null=True,
    )
    value_min = DecimalField(max_digits=6, decimal_places=1, default=25)
    value_max = DecimalField(max_digits=6, decimal_places=1, default=28)
    starting_at = DateTimeField(blank=True, null=True)
    ending_at = DateTimeField(blank=True, null=True)

Code schema.rs sinh bởi diesel_cli:

diesel::table! {
   farm_conditionschedule (id) {
       id -> Int8,
       #[max_length = 4]
       cond_type -> Nullable<Varchar>,
       value_min -> Numeric,
       value_max -> Numeric,
       starting_at -> Nullable<Timestamptz>,
       ending_at -> Nullable<Timestamptz>,
       crop_id -> Int8,
       room_id -> Int8,
   }
}

diesel::joinable!(farm_conditionschedule -> farm_crop (crop_id));
diesel::joinable!(farm_conditionschedule -> farm_room (room_id));

Code cho struct, sinh ra bởi dsync:

#[derive(
    Debug, Serialize, Deserialize, Clone, Queryable, Insertable, AsChangeset, Identifiable, Associations, Selectable,
)]
#[diesel(table_name=farm_conditionschedule, primary_key(id), belongs_to(Crop, foreign_key=crop_id) , belongs_to(Room, foreign_key=room_id))]
pub struct ConditionSchedule {
    pub id: i64,
    pub cond_type: Option<String>,
    pub value_min: BigDecimal,
    pub value_max: BigDecimal,
    pub starting_at: Option<DateTime<Utc>>,
    pub ending_at: Option<DateTime<Utc>>,
    pub crop_id: i64,
    pub room_id: i64,
}

Ngoài ra, mình cũng viết thêm công cụ Python để sinh ra code cho Rust, để chia sẻ một số dữ liệu từ bên code Python qua.

Lấy ví dụ, xét field cond_type của model ConditionSchedule phía trên, nó được lưu giá trị kiểu string, nhưng không phải chuỗi bất kì mà chỉ được nhận một trong những giá trị như 'ate''ahu''smo', v.v… theo định nghĩa sau:

from django.db.models import TextChoices


class BasicControlledConditionType(TextChoices):
    temperature = ('ate', _('temperature'))
    humidity = ('ahu', _('humidity'))
    moisture = ('smo', _('moisture'))
    ... 

Bên Django thì mình dùng class TextChoices để định nghĩa giới hạn lựa chọn như vậy. Bên Rust thì mình muốn dùng enum, thậm chí còn tiến thêm một bước nữa, là dựa vào type system của Rust để ràng buộc dữ liệu trao đổi giữa các hàm luôn. Lấy ví dụ mình có một hàm như sau, để tính toán xem tại thời điểm hiện tại, có cần giảm một điều kiện môi trường (nhiệt độ, độ ẩm) hay không:

pub fn should_decrease_condition(
    cond_type: &str,
    values: &[f64],
    .. 
) -> Option<bool> {}

Vì field ConditionSchedule.cond_type lưu giá trị string nên một cách tự nhiên, ta sẽ định nghĩa tham số cond_type trong hàm should_decrease_condition để nhận kiểu string. Nhưng như thế, ta phải giải quyết tình huống bên ngoài truyền vào nó một chuỗi bất kì không thuộc những lựa chọn trên kia, như thế sẽ làm code dài dòng và lặp đi lặp lại. Bằng cách định nghĩa một enum, giả sử đặt tên là BasicControlledConditionType, ta sẽ đảm bảo được bên ngoài chỉ truyền vào một trong những chuỗi mà ta mong muốn:

pub enum BasicControlledConditionType {
	Temperature,
	Humidity,
	Moisture,
}

pub fn should_decrease_condition(
    cond_type: BasicControlledConditionType,
    values: &[f64],
    .. 
) -> Option<bool> {}

Và cũng để đảm bảo cond_type có giá trị đúng ngay khi lưu xuống / đọc lên từ database, thì ta sẽ định nghĩa lại struct như sau:

#[derive(
    Debug, Serialize, Deserialize, Clone, Queryable, Insertable, AsChangeset, Identifiable, Associations, Selectable,
)]
#[diesel(table_name=farm_conditionschedule, primary_key(id), belongs_to(Crop, foreign_key=crop_id) , belongs_to(Room, foreign_key=room_id))]
pub struct ConditionSchedule {
    pub id: i64,
    pub cond_type: Option<BasicControlledConditionType>,
    pub value_min: BigDecimal,
    pub value_max: BigDecimal,
    pub starting_at: Option<DateTime<Utc>>,
    pub ending_at: Option<DateTime<Utc>>,
    pub crop_id: i64,
    pub room_id: i64,
}

Tuy nhiên, tới đây thì ta sẽ thấy rằng Rust từ chối biên dịch đoạn code trên, với một trong những lỗi sau:

required for `BasicControlledConditionType` to implement `AsExpression<diesel::sql_types::Nullable<diesel::sql_types::Text>>`

Điều này là vì định nghĩa sau:

enum BasicControlledConditionType {
	Temperature,
	Humidity,
	Moisture,
}

quá sơ sài khiến Diesel không biết phải chuyển hóa nó thành chuỗi gì khi lưu vào cột có kiểu Varchar, cũng như khi đọc một chuỗi từ database lên thì gò ép thành BasicControlledConditionType như thế nào.

Để hướng dẫn Diesel xử lý như thế nào, ta sẽ implement các trait để chuyển đổi dữ liệu cho enum.

Đầu tiên là chuyển đổi qua lại giữa enum và string. Không như Python, Rust chưa cho phép dùng string để làm giá trị tương đương cho từng variant, nghĩa là chưa cho phép viết:

enum BasicControlledConditionType {
	Temperature = "ate",
	Humidity = "ahu",
	Moisture = "smo",
}

nên để chuyển từ enum sang string, ta phải implement trait Display, kiểu kiểu như sau:

use std::fmt::{self, Display};

impl Display for BasicControlledConditionType {
	fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
		let s = match self {
			Self::Temperature => "ate",
			Self::Humidity => "ate",
			Self::Moisture => "smo"
		};
		formatter.pad(s)
    }
}

Nhưng viết code như vầy thì dài quá, nhất là khi enum có nhiều variant, nên ta sẽ dùng thư viện strum:

use std::string::ToString;
use strum_macros::{Display, EnumString};

#[derive(Debug, Display, EnumString)]
enum BasicControlledConditionType {
	#[strum(serialize = "ate")]
	Temperature,
	#[strum(serialize = "ahu")]
	Humidity,
	#[strum(serialize = "smo")]
	Moisture,
}

Sau khi đã có trait để chuyển đổi qua lại giữa enum và string rồi, ta cần implement thêm các trait FromSqlToSql để giúp Diesel biết cách chuyển đổi với kiểu dữ liệu của hệ CSDL (ở đây là PostgreSQL). Vì lười viết code nên mình lại dùng thư viện diesel_sqltype_enum_pg. Thế là, để có đầy đủ các trait thì enum của mình thành ra như vầy:

use diesel::deserialize::{FromSql, FromSqlRow};
use diesel::expression::AsExpression;
use diesel::serialize::ToSql;
use diesel::sql_types::Text;
use diesel_sqltype_enum_pg::FromToSql;
use serde::{Deserialize, Serialize};
use strum_macros::{AsRefStr, Display, EnumString};

[derive(
    Debug,
    Copy,
    Clone,
    PartialEq,
    Default,
    AsRefStr,
    EnumString,
    Display,
    Deserialize,
    Serialize,
    FromToSql,
    FromSqlRow,
    AsExpression,
)]
#[fromtosql(sql_type = Text)]
#[diesel(sql_type = Text)]
pub enum BasicControlledConditionType {
    #[default]
    #[strum(serialize = "ate")]
    Temperature,
    #[strum(serialize = "ahu")]
    Humidity,
    #[strum(serialize = "smo")]
    Moisture,
}

Nhưng như thế vẫn còn lười, vì có khá nhiều enum cần định nghĩa, và vì những thông tin như giá trị chuỗi, tên của variant đều có thể suy ra từ các class bên Python rồi, nên mình viết luôn một công cụ để sinh ra code định nghĩa các enum cho Rust, từ các class bên Python, Django.

"Oxy hóa" nền tảng IoT nông nghiệp bằng Rust

Một số mẹo gia tăng DX (developer experience)

Có một điều đáng chia sẻ thêm, là một mẹo khiến các field thời gian tự động chuyển đổi múi giờ khi lấy từ database lên. Điều này giúp khi đọc log, ta đỡ phải xoắn não chuyển đổi. Chẳng hạn đoạn log sau mình đang debug giá trị của ActuatorSchedule, mình muốn thấy field starting_at thể hiện theo múi giờ Việt Nam.

Một số mẹo gia tăng DX (developer experience)

Để làm như trên thì ta dựa vào tính năng deserialize_as của Diesel. Trước hết cần định nghĩa hai kiểu dữ liệu trung gian:

use chrono::{DateTime, FixedOffset, Utc};
use chrono_tz::Asia::Ho_Chi_Minh;
use diesel::deserialize::Result as DieselDeResult;
use diesel::pg::Pg;
use diesel::prelude::*;
use diesel::sql_types::{Nullable, Timestamptz};
use serde::Deserialize;

// Intermediate types to help convert datetime loaded from DB to Viet Nam timezone

#[derive(Debug, Clone, Deserialize)]
pub struct VnDateTime(pub DateTime<Utc>);

#[derive(Debug, Clone, Deserialize)]
pub struct OptionalVnDateTime(Option<DateTime<Utc>>);

impl VnDateTime {
    pub fn now() -> Self {
        Self(Utc::now())
    }
}

impl Queryable<Timestamptz, Pg> for VnDateTime {
    type Row = DateTime<Utc>;

    fn build(row: Self::Row) -> DieselDeResult<Self> {
        Ok(VnDateTime(row))
    }
}

impl Queryable<Nullable<Timestamptz>, Pg> for OptionalVnDateTime {
    type Row = Option<DateTime<Utc>>;

    fn build(row: Self::Row) -> DieselDeResult<Self> {
        Ok(OptionalVnDateTime(row))
    }
}

impl From<VnDateTime> for DateTime<FixedOffset> {
    fn from(v: VnDateTime) -> Self {
        v.0.with_timezone(&Ho_Chi_Minh).fixed_offset()
    }
}

impl From<OptionalVnDateTime> for Option<DateTime<FixedOffset>> {
    fn from(v: OptionalVnDateTime) -> Self {
        v.0.map(|dt| dt.with_timezone(&Ho_Chi_Minh).fixed_offset())
    }
}

rồi áp dụng như sau:

pub struct ActuatorSchedule {
    #[diesel(deserialize_as = VnDateTime)]
    pub starting_at: DateTime<FixedOffset>,
    #[diesel(deserialize_as = OptionalVnDateTime)]
    pub ending_at: Option<DateTime<FixedOffset>>,
}

Ở đây ta phải định nghĩa OptionalVnDateTime thay vì dùng lại Option<VnDateTime> là vì “orphan rule” của Rust không cho ta viết đoạn code như sau:

impl From<Option<VnDateTime>> for Option<DateTime<FixedOffset>> {
	...
}

Mặc dù VnDateTime là kiểu riêng của ta, nhưng Rust lại không coi Option<VnDateTime>> cũng là của ta, buồn nhỉ.

Như vậy mình đã chia sẻ một số kinh nghiệm để chuyển đổi một phần dự án Django / Python sang Rust. Kết quả của việc chuyển đổi là thế nào? Như với “Hạt Thóc” thì phiên bản ControlCenter Rust chạy nhanh, nhẹ hơn một cách rất ấn tượng: chỉ tiêu tốn bộ nhớ RAM có 13,6MiB, và dùng rất ít CPU (thời gian mà CPU phải thực thi lệnh xử lý chỉ là 12 phút trong tổng thời gian 5 giờ dịch vụ này chạy):

Một số mẹo gia tăng DX (developer experience)

Với kết quả này, có cần phải “oxy hóa” toàn bộ phần mềm không? Mình nghĩ là không, vì các thành phần kia (CollectorControlView) không có nhiều áp lực và Python chạy vẫn rất ổn.

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

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

React Native là gì? Tất tần tật những điều cần biết

Trong thời đại công nghệ số, mobile app đóng vai trò ngày càng quan trọng khi giải quyết được nhiều vấn đề của người dùng. Để đáp ứng nhu cầu ngày càng cao của người dùng, các nhà phát triển ứng dụng di động phải tìm ra giải pháp tối ưu để phát triển ứng dụng trên cả hai nền tảng iOS và Android. React Native là một giải pháp được nhiều người lựa chọn hiện nay. Vậy React Native là gì? Hãy cùng tìm hiểu trong bài viết này.

React Native là gì?

React Native là một framework phát triển ứng dụng di động đa nền tảng (cross-platform) được phát triển bởi Facebook. Nó cho phép bạn xây dựng ứng dụng di động cho cả nền tảng iOS và Android bằng việc sử dụng JavaScript.

React Native là gì?

React Native sử dụng một ngôn ngữ và mô hình phát triển chung để xây dựng ứng dụng cho cả hai hệ điều hành, điều này giúp giảm bớt công sức và thời gian cần thiết để phát triển và duyệt ứng dụng trên nhiều nền tảng. Điều này có nghĩa rằng bạn có thể chia sẻ nhiều mã nguồn giữa ứng dụng iOSAndroid, đồng thời vẫn có khả năng tùy chỉnh và điều chỉnh từng phiên bản ứng dụng cho từng nền tảng một.

Ưu và nhược điểm của React là gì?

Dưới đây là một số ưu điểm và nhược điểm của React:

Ưu điểm của React

  • Tiết kiệm thời gian và công sức: React Native cho phép các nhà phát triển viết mã một lần và chạy ứng dụng trên cả hai hệ điều hành, giúp tiết kiệm thời gian và công sức đáng kể.
  • Hiệu suất cao: React sử dụng cơ chế virtual DOM để cải thiện hiệu suất ứng dụng. Thay vì cập nhật toàn bộ DOM mỗi khi có sự thay đổi, React chỉ cập nhật các phần tử cần thiết, giúp giảm tải cho trình duyệt và làm cho ứng dụng chạy nhanh hơn.
  • Học dễ dàng: React sử dụng JSX (JavaScript XML) để định nghĩa giao diện người dùng, và nó có cú pháp rất giống với HTML. Điều này làm cho việc học React tương đối dễ dàng cho những người đã có kinh nghiệm về HTML và JavaScript.
  • Cộng đồng phát triển lớn: React Native có một cộng đồng phát triển lớn và tích cực, giúp các nhà phát triển dễ dàng tìm kiếm sự hỗ trợ và chia sẻ kiến thức.

Ưu và nhược điểm của React là gì?

Nhược điểm của React Native

  • Hỗ trợ nền tảng hạn chế: React chỉ hỗ trợ hai nền tảng phổ biến nhất là iOS và Android thông qua React Native. Điều này có nghĩa rằng nếu bạn muốn phát triển ứng dụng cho các nền tảng khác bạn sẽ phải tìm kiếm các giải pháp khác.
  • Hiệu suất không bằng ứng dụng native thuần: Mặc dù React Native đã cải thiện hiệu suất so với việc sử dụng các framework cross-platform truyền thống, nhưng ứng dụng viết bằng ngôn ngữ và công nghệ native thường có hiệu suất tốt hơn.
  • Phí sử dụng một số thư viện: Một số thư viện và công cụ bổ sung có thể yêu cầu trả phí để sử dụng hoặc để trải nghiệm các tính năng nâng cao. Điều này có thể tạo thêm chi phí cho việc phát triển ứng dụng React Native.
  • Tùy biến module hạn chế: Một số module hoặc thành phần có khả năng tùy biến thấp hoặc không thực sự tốt. Điều này có thể đặt ra thách thức đối với việc tạo ra các tính năng đặc biệt hoặc giao diện người dùng phức tạp mà cần sự tùy chỉnh chi tiết.

  ReactJS và React Native: Những điểm giống và khác nhau cơ bản

  Biết chọn gì đây? Flutter, React Native hay Xamarin?

Có nên học React Native?

Việc học React Native mang lại nhiều lợi ích quan trọng, đặc biệt đối với những người quan tâm đến lĩnh vực lập trình và phát triển ứng dụng di động. Dưới đây, chúng ta sẽ xem xét các lý do tại sao nên đầu tư thời gian và nỗ lực vào việc học React Native.

Ưu và nhược điểm của React là gì?

  • Khả năng tái sử dụng mã: React Native cho phép bạn tận dụng mã nguồn giữa các nền tảng iOS và Android. Điều này có nghĩa là bạn có thể viết mã một lần và sử dụng lại nó cho cả hai hệ điều hành chính. Không cần phải viết mã độc lập cho từng nền tảng, giúp tiết kiệm thời gian và nguồn lực đáng kể.
  • Tập trung vào giao diện người dùng: React Native đặc biệt mạnh về giao diện người dùng (UI). Với việc sử dụng các thành phần giao diện nguyên bản (native), ứng dụng được tạo ra với trải nghiệm người dùng tốt và hiệu suất cao hơn. Điều này làm cho React Native trở thành một lựa chọn lý tưởng cho những ứng dụng đòi hỏi giao diện thân thiện và tương tác tốt với người dùng.
  • Học React Native cực nhanh nếu bạn đã biết JavaScript: React Native sử dụng JavaScript làm ngôn ngữ chính, nên bạn có thể sử dụng kiến thức hiện có để bắt đầu phát triển ứng dụng di động một cách nhanh chóng. Điều này đặc biệt hữu ích cho các lập trình viên đã quen thuộc với JavaScript.
  • Cộng đồng người dùng lớn mạnh: Nếu bạn gặp khó khăn hoặc cần giải pháp cho vấn đề cụ thể, bạn có thể dễ dàng tìm kiếm sự giúp đỡ từ cộng đồng React Native. Các diễn đàn trực tuyến, nhóm hỗ trợ, và tài liệu hướng dẫn là nguồn thông tin quý báu cho sự phát triển của bạn.

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

Cơ hội việc làm của React Native Developer

React Native là một framework phát triển ứng dụng di động đa nền tảng được sử dụng bởi một số công ty và doanh nghiệp lớn nhất thế giới, bao gồm Facebook, Instagram, Airbnb và Uber. Điều này dẫn đến một nhu cầu lớn về các nhà phát triển React Native có tay nghề cao.

Cơ hội việc làm của React Native Developer

Theo báo cáo thị trường IT Việt Nam 2023 do TopDev phát hành, lập trình viên React Native 3 – 4 năm kinh nghiệm có mức lương lên đến $1.512. Mức lương này có thể cao hơn tùy thuộc vào trình độ kinh nghiệm và kỹ năng của nhà phát triển.

React Native cũng là một công nghệ có nhu cầu cao trên toàn thế giới. Theo một nghiên cứu gần đây của Stack Overflow, React Native là một trong những framework phát triển ứng dụng di động phổ biến nhất. Điều này có nghĩa là các nhà phát triển React Native có nhiều cơ hội việc làm ở cả trong và ngoài nước.

Tóm lại

React Native là một framework phát triển ứng dụng di động đa nền tảng hiệu quả và linh hoạt. Với những ưu điểm vượt trội, React Native đang trở thành một lựa chọn hàng đầu cho các nhà phát triển ứng dụng di động.

Trên đây là bài viết về React Native, hy vọng bài viết đã cung cấp cho bạn những thông tin hữu ích. Nếu bạn quan tâm đến React Native, hãy bắt đầu học ngay hôm nay để nắm bắt cơ hội nghề nghiệp hấp dẫn trong lĩnh vực công nghệ thông tin.

Xem thêm:

 

Đừng bỏ lỡ việc làm IT mới nhất trên TopDev!

Tổng hợp các lệnh Linux dùng để xử lý các vấn đề

Bài viết được sự cho phép của tác giả Lê Chí Dũng

1. List out all connections

The first and most simple command is to list out all the current connections. Simply run the netstat command with the a option.

$ netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 enlightened:domain      *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 enlightened.local:54750 li240-5.members.li:http ESTABLISHED
tcp        0      0 enlightened.local:49980 del01s07-in-f14.1:https ESTABLISHED
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN     
udp        0      0 enlightened:domain      *:*                                
udp        0      0 *:bootpc                *:*                                
udp        0      0 enlightened.local:ntp   *:*                                
udp        0      0 localhost:ntp           *:*                                
udp        0      0 *:ntp                   *:*                                
udp        0      0 *:58570                 *:*                                
udp        0      0 *:mdns                  *:*                                
udp        0      0 *:49459                 *:*                                
udp6       0      0 fe80::216:36ff:fef8:ntp [::]:*                             
udp6       0      0 ip6-localhost:ntp       [::]:*                             
udp6       0      0 [::]:ntp                [::]:*                             
udp6       0      0 [::]:mdns               [::]:*                             
udp6       0      0 [::]:63811              [::]:*                             
udp6       0      0 [::]:54952              [::]:*                             
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     12403    @/tmp/dbus-IDgfj3UGXX
unix  2      [ ACC ]     STREAM     LISTENING     40202    @/dbus-vfs-daemon/socket-6nUC6CCx

The above command shows all connections from different protocols like tcp, udp and unix sockets. However this is not quite useful. Administrators often want to pick out specific connections based on protocols or port numbers for example.

2. List only TCP or UDP connections

To list out only tcp connections use the t options.

$ netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 enlightened:domain      *:*                     LISTEN     
tcp        0      0 localhost:ipp           *:*                     LISTEN     
tcp        0      0 enlightened.local:36310 del01s07-in-f24.1:https ESTABLISHED
tcp        0      0 enlightened.local:45038 a96-17-181-10.depl:http ESTABLISHED
tcp        0      0 enlightened.local:37892 ABTS-North-Static-:http ESTABLISHED
.....

Similarly to list out only udp connections use the u option.

$ netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 *:34660                 *:*                                
udp        0      0 enlightened:domain      *:*                                
udp        0      0 *:bootpc                *:*                                
udp        0      0 enlightened.local:ntp   *:*                                
udp        0      0 localhost:ntp           *:*                                
udp        0      0 *:ntp                   *:*                                
udp6       0      0 fe80::216:36ff:fef8:ntp [::]:*                             
udp6       0      0 ip6-localhost:ntp       [::]:*                             
udp6       0      0 [::]:ntp                [::]:*

The above output shows both ipv4 and ipv6 connections.

  6 câu lệnh linux hay dùng trong phân tích log

  Linux - Setup môi trường cho Web Developer

3. Disable reverse dns lookup for faster output

By default, the netstat command tries to find out the hostname of each ip address in the connection by doing a reverse dns lookup. This slows down the output. If you do not need to know the host name and just the ip address is sufficient then suppress the hostname lookup with the n option.

$ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp        0      0 192.168.1.2:49058       173.255.230.5:80        ESTABLISHED
tcp        0      0 192.168.1.2:33324       173.194.36.117:443      ESTABLISHED
tcp6       0      0 ::1:631                 :::*                    LISTEN

The above command shows ALL TCP connections with NO dns resolution. Got it ? Good.

4. List out only listening connections

Any network daemon/service keeps an open port to listen for incoming connections. These too are like socket connections and are listed out by netstat. To view only listening ports use the l options.

$ netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:631                 :::*                    LISTEN

Now we can see only listening tcp ports/connections. If you want to see all listening ports, remove the t option. If you want to see only listening udp ports use the u option instead of t.
Make sure to remove the ‘a’ option, otherwise all connections would get listed and not just the listening connections.

5. Get process name/pid and user id

When viewing the open/listening ports and connections, its often useful to know the process name/pid which has opened that port or connection. For example the Apache httpd server opens port 80. So if you want to check whether any http server is running or not, or which http server is running, apache or nginx, then track down the process name.

The process details are made available by the ‘p’ option.

~$ sudo netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1144/dnsmasq    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      661/cupsd       
tcp6       0      0 ::1:631                 :::*                    LISTEN      661/cupsd

When using the p option, netstat must be run with root privileges, otherwise it cannot detect the pids of processes running with root privileges and most services like http and ftp often run with root privileges.

Along with process name/pid its even more useful to get the username/uid owning that particular process. Use the e option along with the p option to get the username too.

$ sudo netstat -ltpe
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode       PID/Program name
tcp        0      0 enlightened:domain      *:*                     LISTEN      root       11090       1144/dnsmasq    
tcp        0      0 localhost:ipp           *:*                     LISTEN      root       9755        661/cupsd       
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      root       9754        661/cupsd

The above example lists out Listening connections of Tcp type with Process information and Extended information.
The extended information contains the username and inode of the process. This is a useful command for network administrators.

Note – If you use the n option with the e option, the uid would be listed and not the username.

6. Print statistics

The netstat command can also print out network statistics like total number of packets received and transmitted by protocol type and so on.

To list out statistics of all packet types

$ netstat -s
Ip:
    32797 total packets received
    0 forwarded
    0 incoming packets discarded
    32795 incoming packets delivered
    29115 requests sent out
    60 outgoing packets dropped
Icmp:
    125 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 125
    125 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 125
... OUTPUT TRUNCATED ...

To print out statistics of only select protocols like TCP or UDP use the corresponding options like t and u along with the s option. Simple!

7. Display kernel routing information

The kernel routing information can be printed with the r option. It is the same output as given by the route command. We also use the n option to disable the hostname lookup.

$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

8. Print network interfaces

The netstat command can also print out the information about the network interfaces. The i option does the task.

$ netstat -i
Kernel Interface table
Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500 0     31611      0      0 0         27503      0      0      0 BMRU
lo        65536 0      2913      0      0 0          2913      0      0      0 LRU

The above output contains information in a very raw format. To get a more human friendly version of the output use the e option along with i.

$ netstat -ie
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:16:36:f8:b2:64  
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::216:36ff:fef8:b264/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:31682 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27573 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:29637117 (29.6 MB)  TX bytes:4590583 (4.5 MB)
          Interrupt:18 Memory:da000000-da020000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:2921 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2921 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:305297 (305.2 KB)  TX bytes:305297 (305.2 KB)

The above output is similar to the output shown by the ifconfig command.

9. Get netstat output continuously

Netstat can output connection information continuously with the c option.

$ netstat -ct

The above command will output tcp connections continuously.

10. Display multicast group information

The g option will display the multicast group information for IPv4 and IPv6 protocols.

$ netstat -g

More examples of netstat command

Okay, we covered the basic examples of netstat command above. Now its time to do some geek stuff with style.

Print active connections

Active socket connections are in “ESTABLISHED” state. So to get all current active connections use netstat with grep as follows

$ netstat -atnp | grep ESTA
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.1.2:49156       173.255.230.5:80        ESTABLISHED 1691/chrome     
tcp        0      0 192.168.1.2:33[gistpen id="1371"]324       173.194.36.117:443      ESTABLISHED 1691/chrome

To watch a continous list of active connections, use the watch command along with netstat and grep

$ watch -d -n0 "netstat -atnp | grep ESTA"

Check if a service is running

If you want to check if a server like http,smtp or ntp is running or not, use grep again.

$ sudo netstat -aple | grep ntp
udp        0      0 enlightened.local:ntp   *:*                                 root       17430       1789/ntpd       
udp        0      0 localhost:ntp           *:*                                 root       17429       1789/ntpd       
udp        0      0 *:ntp                   *:*                                 root       17422       1789/ntpd       
udp6       0      0 fe80::216:36ff:fef8:ntp [::]:*                              root       17432       1789/ntpd       
udp6       0      0 ip6-localhost:ntp       [::]:*                              root       17431       1789/ntpd       
udp6       0      0 [::]:ntp                [::]:*                              root       17423       1789/ntpd       
unix  2      [ ]         DGRAM                    17418    1789/ntpd

So we found that ntp server is running. Grep for http or smtp or whatever you are looking for.

Well, that was most of what netstat is used for. If you are looking for more advanced information or want to dig deeper, read up the netstat manual (man netstat).

And do leave your feedback and suggestions in the comments box below.

So sánh command line system

command line system

Các lệnh sử dụng Vim trên system

vim

Rsync

rsync -a ~/dir1 username@remote_host:destination_directory
Bài viết gốc được đăng tải tại lcdung.top

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

Xem thêm tuyển dụng IT hấp dẫn trên TopDev

Sinh viên IT “tốt nghiệp” với nỗi lo “thất nghiệp”

Bài viết được sự cho phép của tác giả Lê Nhật Thanh

Trải qua hơn 12 năm học hành, sau đó là 4 năm năm học đại học với bao nhiêu hoài bão, ước mơ và những dự định sẽ làm trong tương lai. Và rồi bạn cũng kết thúc thời gian ngồi trên giảng đường đại học và bắt đầu tìm kiếm cho mình một công việc ổn định. Bạn có bao giờ lo lắng mình sẽ thất nghiệp hay không?

Trên thực tế, có rất nhiều sinh viên IT ra trường vẫn thất nghiệp (hoặc làm trái ngành). Mặc dù nhu cầu việc làm ngành IT là cực kì cao trong những năm tới (bạn có thể xem báo cáo thị trường IT Việt Nam 2023 trên TopDev – hoặc hình bên dưới). Bạn có biết lý do tại sao không?

Trong bài viết này, mình sẽ phân tính và đưa ra những lời khuyên. Để cho cánh cửa “thất nghiệp” không bao giờ tìm đến với bạn.

#1 CƠ HỘI NGHỀ NGHIỆP TĂNG MẠNH

Phần đầu tiên, chúng ta sẽ đi tìm hiểu về nhu cầu nguồn nhân lực ngành IT trong hiện tại và tương lai gần. Let’s start!

Chúng ta thực sự đang ở trong nền công nghiệp 4.0. Nơi mà ngành IT sẽ lên ngôi với hàng ngàn cơ hội nghề nghiệp cực kì hấp dẫn. Cho nên, đối với các bạn sinh viên mới ra trường, bạn sẽ không bao giờ lo lắng về vấn đề “thất nghiệp” như các ngành khác. Các công ty phần mềm luôn luôn thiếu hụt nhân sự. Luôn muốn tìm được những ứng viên phù hợp với nhiều vị trí khác nhau.

Bạn hãy nhìn vào biểu đồ sau để hiểu rõ hơn về tình hình nghề nghiệp IT hiện nay.

NHU CẦU NHÂN LỰC IT TẠI VIỆT NAM

Hiện tại khi mình thực hiện bài viết này, là vào thời điểm năm 2023. Và trong năm nay, nguồn nhân lực cần thiết cho ngành IT lên đến 550,000 nhân sự. Và đang thiếu hụt tới 150,000 nhân sự. Đây là một con số rất lớn, nó phản ánh thực tại của thị trường IT ở Việt Nam.

Bạn hãy nhìn vào năm 2025, số lượng nhân sự cần thiết là 700,000 người. Và số lượng thiếu hụt tăng lên tới 200,000 người.

Bạn có thể đoán ra rằng trong tương lai, nhân sự IT sẽ càng bị thiếu hụt nặng nề.

Vậy chúng ta có thể kết luận, cơ hội nghề nghiệp IT là cực kì lớn trong tương lại. Vì vậy, bạn không cần phải lo lắng quá nhiều. Không phải sợ thất nghiệp khi ra trường. Nhưng…

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

  Ngành IT rất rộng, bạn đang ở đâu?

#2 NHÀ TUYỂN DỤNG CẦN GÌ Ở BẠN

Bạn có thể tham khảo nhiều bài viết, số liệu trên internet. Hoặc đơn giản, bạn hãy nhìn xung quan bạn, hay thậm chí là chính bản thân bạn. Rất dễ dàng nhìn thấy một sự thật rằng. Sinh viên ra trường thất nghiệp rất nhiều, sinh viên IT cũng không ngoại lệ.

Tại sao lại có chuyện như vậy? Có phải vì lý do sinh viên mới ra trường chưa có kinh nghiệm như nhiều người hay nói?

việc làm it

Thực tế, có rất nhiều công ty tuyển vị trí fresher (sinh viên mới ra trường chưa có kinh nghiệm), nên việc đòi hỏi kinh nghiệm ở đây là chưa toàn toàn đúng. Nguyên nhân chính ở đây, sinh viên mới ra trường, không đáp ứng được nhu cầu tối thiểu mà nhà tuyển dụng cần.

Tham khảo Intern IT Jobs hấp dẫn trên TopDev

Vậy nhu cầu tối thiểu ở đây là gì? Background IT ổn, khả năng học hỏi, tự học tốt và đặc biệt là chịu khó (thái độ). Bạn hãy tự hỏi bản thân mình một câu hỏi quan trong. Khi mình ra trường, mình có đáp ứng những điều này cho nhà tuyển dụng hay không? Hay bạn có thể cho nhà tuyển dụng thấy, bạn là một người có khả năng đào tạo được không?

Phải nói rằng, thái độ và khả năng học hỏi tốt là hai yếu tố quan trọng nhất đối với sinh viên mới ra trường (background IT cũng cực kì quan trọng). Thông thường, khi bắt đầu đi làm, bạn sẽ đi thực tập tại một công ty nào đó hoặc làm fresher. Lúc này thì công ty sẽ đào tạo cho bạn trong vòng 1, 2 hay 6 tháng (tùy thuộc vào mỗi công ty). Và với khoảng thời gian ít ỏi này, bạn được học hỏi rất nhiều thứ. Từ kiến thức kĩ thuật cho tới phong cách làm việc,… Và đặc biệt, bạn phải chứng minh được năng lực thực sự của mình để biết chắc chắn một điều rằng. Sau một khoảng thời gian vài tháng, bạn có thể làm được việc (hoàn thành task được giao).

Nhà tuyển dụng họ chỉ tuyển những ứng viên có khả năng làm việc, tạo doanh thu. Hoặc ít nhất là có khả năng làm việc được sau vài tháng đào tạo (đối với sinh viên mới ra trường).

Bởi vì nhiều sinh viên IT khi ra trường, họ không thể đáp ứng được các nhu cầu này nên “thất nghiệp” vẫn luôn đeo bám họ. Vì IT là một ngành thiên về kĩ thuật, nên kiến thức kĩ thuật nền tảng là điều vô cùng quan trọng.

#3 TẠI SAO CÁC BẠN LẠI KHÔNG ĐÁP ỨNG ĐƯỢC YÊU CẦU CỦA NHÀ TUYỂN DỤNG

Ở 2 phần trên, bạn đã biết về nhu cầu nguồn nhân lực IT ở Việt Nam là rất lớn. Cũng như biết được những yêu cầu tối thiểu của nhà tuyển dụng đối với một fresher. Chúng ta sẽ bắt đầu một phần quan trọng – tìm hiểu nguyên nhân vì sao bạn không thể đáp ứng các nhu cầu tối thiểu này.

Trước tiên hay trả lời mình một câu hỏi. Suy cho cùng, bạn có biết lý do theo IT là gì không?

Hãy dừng đọc bài viết này một chút và trả lời câu hỏi trên.

Bạn hãy liệt kê ra những lý do chính khiến bạn bước chân vào con đường IT. Bạn vì tiền, vì bạn bè rủ rê, vì IT là ngành hot, vì cha mẹ bắt bạn. Hay vì một lý do nào khác?

Riêng đối với mình, mình đến với IT vì 2 chữ “đam mê”. Mình đam mê mãnh liệt với những dòng code. Hay nói một cách khác, mình rất yêu thích việc viết code, tạo ra sản phẩm, và chia sẻ nó với mọi người. Hãy suy nghĩ về điều đó!

Bạn cũng biết rằng, khi mình thích, mình đam mê một việc gì đó. Thì mình làm việc đó tốt hơn và dần dần bạn sẽ cũng cố được đam mê của mình và lại làm nó tốt hơn nữa.

Khi bạn đọc đến đây, nếu bạn đang trong thời khắc thất nghiệp, bạn đã biết lý do là gì chưa? Còn nếu bạn đã đã ổn định trong ngành IT, thì hãy chia sẻ và giải thích điều này đến những bạn sắp, đang, đã theo học ngành IT. Vì cho đi là nhận lại mà.

Vì IT là một ngành khắc nghiệt và đào thải rất cao. Các công nghệ thì mọc lên như nấm trong thời gian rất ngắn. Nếu một ngày bạn không học hỏi nữa, thì là lúc bạn đang đi lùi với những người khác. Ngay bây giờ, bạn hãy tự hỏi bản thân mình xem bạn có hợp với ngành IT không? Và bạn có thực sự muốn theo ngành này tới cùng, kiếm miếng cơm manh áo với nó không?

Dù có hay không, bạn cũng phải hành động ngay từ bây giờ. Tìm kiếm đam mê thật sự cho cuộc đời mình.

Đam mê thật sự rất rất khó để tìm kiếm, nhưng các bạn là những người còn trẻ, cứ tự tin, hành động. Tự tin bước vào nghề nếu bạn cảm thấy thích thích cái gì đó trong ngành này. Rồi biết đâu một ngày nào đó bạn tìm kiếm được đam mê của mình.

Và một điều đặc biệt nữa, làm việc với đam mê không phải lúc nào cũng vui vẻ dễ chịu. Đôi khi bạn phải trả giá bằng xương máu và nước mắt. Stress, áp lực, khó khăn sẽ luôn đến với bạn. Nhưng hãy kiên trì và theo cho tới cùng. Hãy nghĩ tới những thành quả sau này mà mình sẽ đạt được.

Và một lời khuyên chân thành của mình, nếu bạn đang có ý định bước vào nghề. Hãy chuyên tâm học hành ngay trên giảng đường đại học. Những kiến thức nền tảng ở đại học sẽ là bước đệm rất tốt cho bạn trong con đường ở tương lai.

# KẾT

Bài viết này mình đã trình bày cho bạn 3 phần. Là nhu cầu nguồn nhân lực IT Việt Nam hiện tại và tương lai gần. Nhà tuyển dụng cần gì ở bạn và đặc biết, tại sao bạn không đáp ứng được các yêu cầu tối thiểu của nhà tuyển dụng.

Bài viết tuy không dài nhưng cũng đủ để gửi gắm đến các bạn những thông điêp của mình – một người từng chịu đấm ăn xôi trong ngành này. Hi vọng với những thông điệp trên, sẽ giúp các bạn một phần nào đó trong sự nghiệp IT của mình. Giúp cho bạn hiểu được chính bản thân mình có thích hợp với ngành này không.

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

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

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

Top 9 app học lập trình tốt nhất cho các developer

Nếu bạn muốn trở thành một lập trình viên chuyên nghiệp, bạn cần có kiến thức và kỹ năng vững vàng về lập trình. Tuy nhiên, học lập trình không phải là điều dễ dàng, đặc biệt là đối với những người mới bắt đầu.

Hiện nay, có rất nhiều ứng dụng học lập trình trên thị trường, cung cấp các khóa học về các ngôn ngữ lập trình phổ biến. Những ứng dụng này giúp bạn học lập trình một cách dễ dàng, hiệu quả và tiết kiệm thời gian. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về 9 app học lập trình tốt nhất cho các developer nhé!

Tiêu chí lựa chọn app học lập trình chất lượng

app học lập trình tốt nhất

Khi lựa chọn app học lập trình, bạn cần lưu ý các tiêu chí sau:

  • Giao diện: Ứng dụng có giao diện thân thiện, dễ sử dụng, sẽ giúp bạn học tập hiệu quả hơn. Giao diện ứng dụng cần được thiết kế khoa học, dễ nhìn, dễ điều hướng. Các bài học cần được trình bày rõ ràng, dễ hiểu.
  • Nội dung: Ứng dụng cung cấp các bài học chất lượng, phù hợp với nhu cầu và trình độ của bạn. Nội dung bài học cần đầy đủ, chính xác, cập nhật. Các bài học cần được thiết kế phù hợp với trình độ của người học, từ cơ bản đến nâng cao.
  • Các tính năng: Ứng dụng có các tính năng hỗ trợ học tập hiệu quả, như theo dõi tiến trình học tập, các bài tập thực hành,… Các tính năng này sẽ giúp bạn theo dõi được quá trình học tập của mình, cũng như rèn luyện kỹ năng lập trình một cách hiệu quả.
  • Giá cả: Ứng dụng có giá cả hợp lý, phù hợp với túi tiền của bạn. Một số ứng dụng học lập trình cung cấp miễn phí một số khóa học cơ bản, nhưng nếu bạn muốn học các khóa học nâng cao, bạn sẽ phải trả phí.

Dựa trên các tiêu chí trên, bạn có thể lựa chọn được ứng dụng học lập trình phù hợp với nhu cầu và trình độ của mình.

Tham khảo 9 app học lập trình tốt nhất hiện nay

Hiện nay, có rất nhiều ứng dụng học lập trình trên thị trường, cung cấp các khóa học về các ngôn ngữ lập trình phổ biến. Dưới đây là một số app học lập trình tốt nhất hiện nay:

1. SoloLearn

SoloLearn là một ứng dụng học lập trình miễn phí, cung cấp các khóa học về các ngôn ngữ lập trình phổ biến như Java, Python, JavaScript, C++, HTML, CSS,… Ứng dụng có giao diện thân thiện, dễ sử dụng, với các bài học ngắn gọn, dễ hiểu. Ngoài ra, SoloLearn còn có một cộng đồng người dùng lớn, nơi bạn có thể trao đổi, chia sẻ kiến thức với nhau.

app học lập trình tốt nhất

SoloLearn phù hợp với mọi đối tượng, từ người mới bắt đầu đến những người có kinh nghiệm lập trình. Tuy nhiên, ứng dụng này đặc biệt phù hợp với những người mới bắt đầu, bởi các bài học được thiết kế ngắn gọn, dễ hiểu, giúp người học dễ dàng tiếp thu kiến thức.

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

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

2. Encode

Encode là một app học lập trình miễn phí, tập trung vào việc giúp người học học lập trình bằng cách giải các câu đố. Ứng dụng có các câu đố về các khái niệm lập trình cơ bản, phù hợp với người mới bắt đầu. Encode còn có các tính năng như theo dõi tiến trình học tập, các bài tập thực hành,…

app học lập trình tốt nhất

Ngoài ra, Encode còn có thể sử dụng ngoại tuyến giúp bạn có thể học bất kỳ đâu mà không cần phải phụ thuộc vào internet. Một nhược điểm của Encode là ứng dụng chủ yếu cung cấp các câu đố, không có các khóa học bài bản về các ngôn ngữ lập trình cụ thể hoặc các kỹ năng lập trình nâng cao.

3. Mino

app học lập trình tốt nhất

Mimo là một ứng dụng học lập trình miễn phí, cung cấp các khóa học về các ngôn ngữ lập trình phổ biến như JavaScript, Ruby, Swift, C, C++,… Ứng dụng có giao diện thân thiện, dễ sử dụng, với các trò chơi và thử thách để giúp người học ghi nhớ kiến thức. Người dùng có thể rèn luyện kỹ năng code hoặc tạo ra các trò chơi đơn giản, thậm chí trở thành hacker nếu muốn.

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

4. Programming Hub

app học lập trình tốt nhất

Programming Hub là một app học lập trình miễn phí và trả phí, hỗ trợ hơn 20 ngôn ngữ lập trình khác nhau. Ứng dụng này được phát triển bởi các chuyên gia của Google nên nội dung rất chất lượng và có nhiều giải pháp sáng tạo thú vị. Bạn có thể học các khóa học về tiếp thị kỹ thuật số, phát triển ứng dụng, AI, giám đốc điều hành,… trên app này.

5. Enki

app học lập trình tốt nhất

Điểm nổi bật nhất của Enki là giao diện hiện đại, mang đến trải nghiệm học tập tuyệt vời. Bạn có thể học các ngôn ngữ phổ biến như Java, CSS, HTML, Python,… trên ứng dụng này. Ngoài ra, Enki còn cho phép người dùng tự tạo lộ trình học tập và đặt mục tiêu cho bản thân trong quá trình học.

6. Programming Hero

app học lập trình tốt nhất

Programming Hero là một ứng dụng học lập trình miễn phí dành riêng cho hệ điều hành Android. Bạn có thể luyện tập code CSS, JavaScript, HTML hay Dom trên ứng dụng này. Với những đoạn code thú vị bạn có thể tạo ra những trò chơi đơn giản từ Programming Hero. Ngoài ra, bạn cũng có thể trò chuyện, trao đổi kiến thức với những người yêu code thông qua ứng dụng này.

7. Tynker

app học lập trình tốt nhất

Tynker là một app học lập trình miễn phí, dành cho trẻ em từ 6 tuổi trở lên. Ứng dụng sử dụng ngôn ngữ lập trình trực quan, giúp trẻ em dễ dàng học lập trình bằng cách xây dựng các trò chơi và ứng dụng. Mỗi bài học của Tynker sẽ cung cấp cho bạn các hướng dẫn để xây dựng một trò chơi hoặc ứng dụng. Bạn có thể sử dụng các khối lệnh để xây dựng trò chơi hoặc ứng dụng của mình.

8. Codecademy Go

Ứng dụng Codecademy Go là một ứng dụng di động được phát triển bởi Codecademy, một nền tảng học trực tuyến chuyên về lập trình và khoa học máy tính. Codecademy Go cung cấp các khóa học di động giúp người dùng học lập trình và các kỹ năng liên quan một cách linh hoạt, thuận tiện.

app học lập trình tốt nhất

Ứng dụng này cung cấp nhiều khóa học trực tuyến với các bài học ngắn gọn, bài tập thực hành và kiểm tra kiến thức ngay trên điện thoại di động. Người dùng có thể học các ngôn ngữ lập trình như Python, JavaScript, HTML/CSS, Java và nhiều chủ đề khác.

9. Grasshopper

app học lập trình tốt nhất

Grasshopper là một ứng dụng miễn phí trên iOS và Android giúp bạn luyện tập code thông qua những câu đố JavaScript. Nó được thiết kế để làm quen với cú pháp lập trình cơ bản và giúp người dùng hiểu rõ hơn về cách xây dựng các đoạn mã.

Tóm lại

Trong bài viết này, chúng ta đã tìm hiểu về 9 app học lập trình tốt nhất cho các developer. Mỗi ứng dụng đều có những ưu điểm và nhược điểm riêng, phù hợp với nhu cầu và trình độ của từng người học.

Để lựa chọn được ứng dụng học lập trình phù hợp, bạn cần xác định rõ mục tiêu học tập của mình là gì. Nếu bạn là người mới bắt đầu, bạn nên chọn những ứng dụng cung cấp các khóa học cơ bản, dễ hiểu. Nếu bạn đã có kiến thức cơ bản, bạn có thể chọn những ứng dụng cung cấp các khóa học nâng cao, chuyên sâu.

Dù lựa chọn app học lập trình nào, bạn cũng cần có sự kiên trì và quyết tâm để học tập. Hãy bắt đầu từ những kiến thức cơ bản và dần dần nâng cao trình độ của mình. Chúc bạn thành công!

Xem thêm:

Chuẩn bị gì trước buổi phỏng vấn vị trí lập trình viên Frontend

Với sự tăng trưởng của các công ty công nghệ hiện nay, nhu cầu tuyển dụng lập trình viên đang là rất cao. Trong đó lập trình viên Frontend luôn là vị trí có số lượng yêu cầu cao hơn do đặc thù của dự án cùng với sự phát triển của ứng dụng Web. Để có thể chuẩn bị thật tốt và thể hiện đúng kỳ vọng của nhà tuyển dụng, hôm nay mình cùng chia sẻ với các bạn một vài kinh nghiệm cho buổi phỏng vấn lập trình viên Frontend nhé.

Chuẩn bị trước buổi phỏng vấn

Trước hết để có được sự tự tin khi tham gia phỏng vấn, bạn cần chuẩn bị đầy đủ từ trang phục, tác phong, chú ý giờ giấc,… để có thể tạo ấn tượng tốt với nhà tuyển dụng. Nắm chắc được quy trình phỏng vấn thông qua nội dung mà phía HR đã thông báo.

Nhiều công ty, doanh nghiệp có những quy trình phỏng vấn nhiều vòng, có thể có thêm những bài test chuyên môn,… vì thế bạn cần biết sẽ phải trải qua những vòng nào một cách cụ thể để chuẩn bị. Hãy đọc kỹ mô tả công việc vị trí ứng tuyển, đây là việc vô cùng quan trọng giúp bạn hiểu rõ yêu cầu và trách nhiệm của công việc đó; từ đó bạn sẽ có thể lên kế hoạch cho buổi phỏng vấn của mình.

Chuẩn bị trước buổi phỏng vấn

Bạn cũng cần phải tìm hiểu về công ty ứng tuyển, điều này không chỉ giúp các bạn tạo được ấn tượng tốt với nhà tuyển dụng mà đồng thời cũng có thể biết được về lĩnh vực, chuyên môn hay các dự án mà doanh nghiệp, tổ chức đang phát triển để từ đó phản hồi lại trong buổi phỏng vấn. Bạn sẽ thường gặp những câu hỏi về công ty như bạn biết công ty qua kênh nào, bạn biết gì về công ty và sản phẩm mà công ty đang phát triển, tại sao bạn lựa chọn công ty để ứng tuyển,…

Ngoài ra, hãy suy nghĩ và chuẩn bị trước về những câu hỏi mà nhà tuyển dụng sẽ hỏi bạn, nhất là về mức lương mong muốn. Xem xét những yếu tố về mức lương trung bình của thị trường, từ đó đối chiếu với bản thân theo kỹ năng chuyên môn, kinh nghiệm làm việc; bạn sẽ đưa ra được mức mà bạn hy vọng nhà tuyển dụng sẽ chấp nhận bạn.

  CV chuẩn ATS là gì? Bí kíp đậu phỏng vấn với CV chuẩn ATS

  Top 30+ câu hỏi phỏng vấn mà 90% lập trình viên thường gặp 2024

Trong buổi phỏng vấn

Một buổi phỏng vấn vị trí lập trình viên Frontend, nhà tuyển dụng sẽ hỏi những kiến thức chuyên môn về vị trí mà bạn đang ứng tuyển. Tùy vào level (Fresher, Junior, Senior) mà sẽ có những phần câu hỏi tương ứng, thông thường sẽ bao gồm 3 phần:

1. Kiến thức cơ bản về Frontend: sẽ bao gồm HTML, CSS và JavaScript

HTML là một ngôn ngữ đánh dấu siêu văn bản được thiết kế ra để tạo và cấu trúc các thành phần trong trang Web hoặc ứng dụng. CSS là ngôn ngữ sử dụng cho việc tìm và định dạng lại các phần tử được tạo ra bởi HTML. CSS giúp chúng ta đổi bố cục, màu sắc trang, đổi màu chữ, font chữ hay các hiệu ứng trên trang Web.

JavaScript là ngôn ngữ lập trình được phát triển để tạo ra các tương tác trên trang Web bằng việc xử lý nạp, hiển thị dữ liệu thông qua việc gọi yêu cầu đến server; nhận và xử lý các hành động đến từ người dùng và trả ra các kết quả tương ứng.

Chuẩn bị gì trước buổi phỏng vấn vị trí lập trình viên Frontend

HTML, CSS và JavaScript là 3 nền tảng cơ bản mà mọi lập trình viên Frontend đều nắm vững, cũng vì thế mà nhà tuyển dụng sẽ có thể hỏi bạn bất cứ câu hỏi nào liên quan đến 3 ngôn ngữ này. Kinh nghiệm ở đây dành cho bạn là hãy lướt qua một lượt các kiến thức cơ bản về 3 ngôn ngữ này vì có nhiều thứ tưởng chừng dễ nhưng nếu bạn không thường xuyên làm, thực hành sẽ khiến bạn có thể quên mất.

Xem ngay các tin đăng tuyển dụng Front-end lương cao trên TopDev

2. Kiến thức về nền tảng thư viện, Framework theo vị trí tuyển dụng như React, VueJS, Angular,…

Trong mô tả công việc tất nhiên sẽ ghi rõ yêu cầu bạn cần có kiến thức hay kinh nghiệm trong một nền tảng thư viện, framework mà nhà tuyển dụng yêu cầu. Đây là những bộ công cụ chứa cả phần HTML, CSS và source code viết bằng JavaScript được phát triển và sử dụng rộng rãi.

top framework
Nguồn: https://www.gurutechnolabs.com/best-frontend-frameworks/

Bạn cần chuẩn bị trước kiến thức về phần này vì nó sẽ là trọng tâm của buổi phỏng vấn chuyên môn, các vấn đề sẽ được bên người hỏi đưa ra và bạn cần trả lời một cách ngắn gọn và vẫn đủ sức thuyết phục nhà tuyển dụng rằng mình nắm bắt được vấn đề. Mỗi một thư viện, framework sẽ có những đặc trưng riêng của mình; các câu hỏi chủ yếu sẽ xoay quanh những vấn đề như sau:

  • Fundamentals hay core concepts: những nguyên tắc cơ bản, khái niệm cốt lõi của nền tảng
  • Life Cycle: vòng đời của một phần tử, một function hay một màn hình mà nền tảng đó mô tả và xử lý. Yếu tố này cũng thường đi cùng với việc quản lý các trạng thái dữ liệu trong ứng dụng (state management)
  • Advanced hay Patterns: những phần kiến thức nâng cao, hay những mẫu thường được khuyến khích sử dụng khi viết code và lập trình liên quan đến nền tảng đó.

3. Kinh nghiệm làm việc trong các dự án đã tham gia

Đây là một yếu tố rất quan trọng có thể quyết định việc nhà tuyển dụng có lựa chọn bạn hay không. Kinh nghiệm làm việc thường sẽ được mô tả trong CV của bạn, bao gồm những dự án mà bạn đã tham gia, công nghệ được sử dụng trong dự án đó cũng như vai trò của bạn trong team phát triển.

Nếu bạn có kinh nghiệm làm việc trong một team dự án có liên quan đến những dự án mà nhà tuyển dụng đang cần, đấy sẽ là điểm cộng rất lớn dành cho bạn. Vì vậy hãy đừng ngần ngại thể hiện nó ra, trình bày một cách rõ ràng về những kiến thức mà bạn học được từ dự án cũ và hiểu biết của bạn về ngành, lĩnh vực đó. 

Đối với riêng lập trình viên Frontend, bạn có thể được hỏi về những kinh nghiệm xử lý UI/UX mà bạn tâm đắc; nó giúp nhà tuyển dụng đánh giá được khả năng sáng tạo và mức độ trải nghiệm trên nhiều sản phẩm khác nhau của bạn. Vì vậy hãy chuẩn bị trước một số kiến thức liên quan đến thiết kế; các kỹ thuật xử lý đa màn hình (responsive), hay có thể là những kiến thức liên quan đến SEO, Optimize,… 

Sau buổi phỏng vấn

Thông thường các bạn sau khi phỏng vấn xong thì thường nghĩ là đã xong việc và chờ kết quả. Trường hợp bạn đã pass phỏng vấn thì tất nhiên là sẽ nhận được một email offer từ nhà tuyển dụng. Tuy vậy một số công ty hay tổ chức có thể không thông báo kết quả trong trường hợp bạn không đáp ứng được yêu cầu tuyển dụng của họ. Trong những trường hợp nhận được kết quả không pass (fail) phỏng vấn hay không nhận được kết quả sau buổi phỏng vấn thì bạn cũng vẫn nên có một email cảm ơn hồi đáp lại cho công ty.

Chuẩn bị gì trước buổi phỏng vấn vị trí lập trình viên Frontend

Một email cảm ơn dành cho việc đội ngũ tuyển dụng, người phỏng vấn đã dành thời gian cho bạn, quan tâm đến bạn sẽ giúp tăng thiện cảm trong mắt công ty đó và biết đâu sau này bạn có cơ hội để apply lại đúng vị trí trên. Hãy lưu ý rằng bạn không qua phỏng vấn có thể đơn thuần là việc bạn chưa phù hợp với đòi hỏi của vị trí công việc hiện tại mà nhà tuyển dụng cần; và bạn hoàn toàn có những cơ hội cho lần phỏng vấn sắp tới.

Kết bài

Trên đây là những kinh nghiệm khi chuẩn bị tham gia phỏng vấn vị trí lập trình viên Frontend mà mình muốn chia sẻ dành cho các bạn. Hy vọng bài viết sẽ giúp ích cho bạn trong buổi phỏng vấn sắp tới, hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

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

5 kiến thức quan trọng để trở thành Full-stack developer

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

Làm thế nào để trở thành full stack developer? Có lẽ đây là câu hỏi mà mình hay gặp nhất trong năm vừa rồi. Đi qua một lượt các trang tuyển dụng như TopDev, TopCV… Hay mạng xã hội việc làm LinkedIn, bạn sẽ bắt gặp rất nhiều công việc có title là full stack developer.

Nếu nhìn vào title: full stack developer, tức là bạn sẽ biết và làm được tất cả mọi thứ, client tới server, từ front-end tới back-end… Nghe thì có vẻ như họ yêu cầu bạn biết quá nhiều thứ nhỉ?

Tuy nhiên,  cũng không hẳn là không thể làm được, nếu được định hướng đúng và quyết tâm thì bạn hoàn toàn có thể trở thành một full stack developer.

Bài viết mình sẽ đề xuất 5 kiến thức mà bạn cần phải biết và làm được để trở thành full stack developer thực thụ.

Nhưng trước hết, chúng ta cùng xem lại full stack developer là gì đã nhé.

#Full stack developer là gì?

Full stack developer là gì?

Hiểu nôm na, một full stack developer là người có đầy đủ những kỹ năng để tự mình có thể phát triển và hoàn thiện một ứng dụng độc lập.

Với một full stack developer job description, Bạn sẽ cần phải biết và xử lý tất cả các công việc về cơ sở dữ liệu, server, kỹ thuật hệ thống và cả front-end nữa. Tùy thuộc vào dự án mà khách hàng yêu cầu mà stack có thể là mobile stack, web stack hay một native application stack.

#Tại sao người ta lại cần tới full stack developer?

Có rất nhiều lý do để người ta cần tới một full stack developer? Có thể họ cần một người biết tất cả để hiểu tổng quan hệ thống hơn là cần nhiều người mà mỗi người chỉ biết một phần.

Hoặc đơn giản là nhiều công ty họ muốn tinh giảm nhân lực, tiết kiệm chi phí…

Có rất nhiều cuộc tranh luận giữa các nhà tuyển dụng, giữa cả những bạn đang học lập trình nữa. Có ý kiến cho rằng: “một nghề thì sống, đống nghề thì chết”. Ám chỉ rằng cần phải chuyên sâu một kỹ năng, một công nghệ thay vì biết nhiều thứ mà chỉ biết hời hợt.

Tuy nhiên, thực tế người ta đang rất cần một full stack developer. Không những biết nhiều mà cái gì cũng phải giỏi.

  Full Stack Developer giữ vai trò chủ đạo gì trong thế giới công nghệ thông tin?

  Tản mạn về cái tên “Full Stack Overflow Developer”

Để có cái nhìn khách quan thì mình mạnh dạn liệt kê điểm mạnh và điểm yếu của một full stack developer như sau:

1. Điểm mạnh

Một full stack developer dễ dàng tạo ra một thiết kế nguyên mẫu cho một sản phẩm dựa trên những hiểu biết rộng lớn. Do họ có kiến thức tổng quan của cả hệ thống, nên họ có tư duy và góc nhìn về hệ thống rộng hơn so với những người chỉ biết làm front-end hoặc chỉ back-end.

Ngoài ra, do full stack developer có kiến thức tổng quan về cả hệ thống nên họ có thể dễ dàng ghép nối các bộ phận khác nhau trong dự án. Họ sẽ trở thành cầu nối giữa bộ phận làm back-end, với bộ phận làm front-end và cả bộ phận phần cứng server…

Do đó, các full stack developer sau này có xu hướng trở thành giám đốc kỹ thuật hoặc CEO.

2. Điểm yếu

Chính vì bạn định hướng sẽ phát triển các kỹ năng theo chiều ngang, với tiêu chí biết càng nhiều càng tốt. Nên bạn sẽ rất khó để trở thành một chuyên gia ở một kỹ năng nào đó.

Hầu hết những người tự nhận là full stack developer chỉ một chút, hời hợt các kỹ năng. Với những người như vậy thì phù hợp với vị trí thiết kế hệ thống hơn là vị trí phát triển hệ thống.

Tham khảo thêm: Tuyển dụng full stack lương cao tại TopDev

#Skill nào giúp bạn trở thành full stack developer web

Chúng ta quay trở lại trả lời câu hỏi quan trọng nhất này: Một full stack developer thực thụ thì ngoài biết nhiều thì còn phải biết sâu nữa. Vậy full stack developer cần học những gì?

full stack developer web

Dưới đây là những kỹ năng mà bạn cần phải biết trên con đường trở thành full stack.

1. Ngôn ngữ lập trình

Về phần back-end, bạn sẽ cần phải thành thạo nhiều ngôn ngữ lập trình. Chẳng hạn như Java, PHP, Ruby, C#, Python… Vì hầu hết các nghiệp vụ kinh doanh thường thực hiện ở phía back-end và đều cần phải viết bằng các ngôn ngữ này.

Ngoài việc phải nắm vững cú pháp của ngôn ngữ, bạn còn phải hiểu rõ triết lý, cấu trúc, nguyên tắc thiết kế, thực hiện và kiểm tra dự án trên ngôn ngữ đó.

Ví dụ: nếu bạn chọn Java, bạn cần phải hiểu rõ nguyên tắc lập trình hướng đối tượng, các design patterns

2.  Biết cách sử dụng framework và thư viện bên thứ 3

Do đặc thù hệ thống lớn, người ta sẽ không thể viết ứng dụng từ con số 0. Với bài toán chi phí và thời gian, họ sẽ sử dụng framework và thư viện để tăng tốc độ phát triển phần mềm.

Do vậy, việc một full stack developer phải biết nhiều framework là điều cần thiết. Thường mỗi ngôn ngữ đều có một vài framework phổ biến đi kèm.

Có thể kể tên như: Java thì Spring, PHP có Hibernate, Python có Django, Nodejs có Express

3. Rành về Front-end

Như đã nói ở trên, front-end là một kỹ năng không thể thiếu của một kỹ sư full stack.

Một sản phẩm, ngoài những tính năng đáp ứng yêu cầu của người dùng, thì trải nghiệm là một phần rất quan trọng nâng tầm sản phẩm.

Front-end chính là phần tương tác trực tiếp với người, là phần tạo ra trải nghiệm người dùng. Do đó, bạn cần phải nắm vững một số công nghệ front-end như HTML, CSS, Javascript… Các front-end framework như Jquery, SASS, ReactJS, Vuejs…

4. Database và kỹ thuật cache

Hầu như phần mềm nào cũng cần tới Database để lưu trữ dữ liệu. Do vậy, bạn cần phải biết sử dụng ít nhất một loại cơ sở dữ liệu. Biết sử dụng ở đây gồm 2 kỹ năng: Kỹ năng sử dụng phần mềm quản trị cơ sở dữ liệu và kỹ năng viết câu lệnh tương tác với cơ sở dữ liệu.

Về quản trị cơ sở dữ liệu, bạn nên biết về MySQL, MS SQLServer, MongoDB

Còn về câu lệnh tương tác với DB, bạn cần biết về SQL, và NoSQL.

Tất nhiên, khi hệ thống lớn dần thì việc phải cache dữ liệu là điều phải làm nếu không muốn hệ thống bị sập, hoặc tăng chi phí phần cứng theo cấp số nhân.

Có nhiều kỹ thuật cache DB, bạn có thể tìm hiểu về Redis, hoặc memcache.

5. Có khả năng thiết kế

Hầu hết các bài viết về full stack developer đều bỏ qua kỹ năng thiết kế. Nhưng mình nghĩ, đây là một kỹ năng rất quan trọng.

Những kỹ năng về prototype design, UI design, UX design… Chúng sẽ giúp bạn góp phần vào cải thiện trải nghiệm, mở rộng hệ thống sau này.

full stack developer

#Tổng kết

Gladwell đã khẳng định, để trở thành một chuyên gia ở một lĩnh vực, bạn cần tới 10.000 giờ. Do vậy, bạn không thể nào trở thành kỹ sư full stack chỉ trong một đêm được. Mỗi một nhà tuyển dụng full stack developer đều có yêu cầu riêng.

Việc của bạn cần làm lúc nào này liên tục củng cố kiến thức nền tảng, tiếp tục học hỏi và chấp nhận thử thách ở những lĩnh vực khác nhau.

Bạn thấy quan điểm của mình về full stack có đúng không? Hãy để lại ý kiến của bạn bên dưới phần bình luận nhé.

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

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

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