Home Blog Page 36

Lập trình Arduino không hề khó cho người bắt đầu

Lập trình Arduino không hề khó cho người bắt đầu

Bài viết này hướng dẫn anh em lập trình Arduino từng bước. Giải thích dễ hiểu từng bước một nên anh em đừng lo nhé.

Một khi đã thạo thì quẩy cả astronomia các anh khiêng hòm cho nó máu ha

Đầu tiên xem mạch arduino là gì, code như thế nào, code bằng ngôn ngữ gì, từng cái từng cái một.

1. Mạch arduino

Đầu tiên, adruino là bo mạch, để lập trình anh em cần có bo mạch adruino. Thường thì mua luôn cả bộ học adruino, adruino kit. Trong bộ này có đầy đủ mạch, nguồn, pin, đèn led để học và thực hành. Dây nối mạch và bộ gắn mạch.

Nếu anh em quyết tâm thử sức và try hard với lập trình arduino thì có thể mua bộ này nhé. Mạnh dạn mà quất!

lập trình arduino

Sau khi có mạch rồi, giờ tìm hiểu xem arduino là con nào. Vì nguyên một đống như thế biết con nào là con để lập trình.

Nếu vậy thì xin thưa là con này.

lập trình arduino

Như hình ở đây thì con mạch arduino này có nhiều bộ phận. Có cổng DC, cổng USB (cấp nguồn và nạp code), các cổng analog (tín hiệu). Có nút reset và đèn tín hiệu (power led). Những thứ đó trước mắt là những thứ quan trọng nhất khi bắt đầu lập trình arduino.

  Lộ trình học lập trình C cho người mới bắt đầu
  Học lập trình Java cơ bản từ đâu và như thế nào?

2. Tải về arduino

Sau khi đã có mạch trong tay, vọc vạch sơ đôi thứ về mạch thì giờ là lúc tải phần mềm về. Bản thân arduino không thể hoạt động nếu không có code nạp vào đó.

À quên, anh em nên cắm thử nguồn DC (max 12V) vào cho mạch. Sau đó kiểm tra nguồn của mạch arduino. Thường là đèn chớp, khoảng 3s một lần. Vị trí khoanh đỏ.

lập trình arduino

Sau khi mạch đã ok. Anh em vào trang arduino để tải phần mềm về. Địa chỉ link. Sau khi đã cài đặt arduino. Mở arduino IDE lên và bắt đầu mày mò vọc vạch thôi nào.

Giao diện của arduino sau khi đã cài đặt. Chú thích thêm cho anh em một số thông tin thường thấy trên IDE này. Tạm thời khoan đã quan tâm tới code phần trong khoanh đỏ nha anh em. Hãy cứ từ từ, đâu còn có đó!

lập trình arduino

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

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

Sau khi đã cài đặt xong xuôi đâu vào đấy. Anh em cắm thử cáp vào mạch, chọn đúng bo mạch đang sử dụng (thông thường IDE sẽ tự track anh em cắm loại arduino nào). Giờ tới lúc tìm hiểu xem arduino sẽ code bằng ngôn ngữ nào.

Về ngôn ngữ, arduino sử dụng C++ làm ngôn ngữ lập trình chính. Ngôn ngữ này có một số ưu điểm:

    • Đầu tiên là open source. Mở cho tất cả anh em chọc ngoáy các thứ trong đó
    • Dựa trên nền C++
    • Với arduino có rất rất nhiều thư viện cho anh em vọc vạch. Viết đủ thứ trên đời để điều khiển, nạp code hoặc xử lý các module khác như wifi, cảm biến,…
    • Cú pháp đơn giản, nếu anh em đã tìm hiểu về C++ thì bắt đầu với arduino không khó tẹo nào

lập trình arduino

Arduino hỗ trợ rất nhiều các library được viết sẵn, nên đôi lúc làm anh em chỉ cần cài và sử dụng đúng theo document là được. Không có gì phải thảng thốt khi nghe nói lập trình mạch arduino kết nối phức tạp. Thực chất đều có các library được viết và test kỹ trước đó rồi.

4. Ví dụ lập trình arduino đơn giản

Sau khi đã biết lập trình arduino dựa trên ngôn ngữ C++, giờ là lúc tìm hiểu ví dụ thực tế. Thường thì các ví dụ này được tích hợp sẵn trong arduino. Tuy nhiên để cho dễ thì anh em mình vẫn đi qua từng dòng code.

Bắt đầu dễ luôn là bắt đầu hợp lý. Không có gì phải cắm đầu vào cái quá khó khi mới bắt đầu một ngôn ngữ lập trình

// Đoạn code setup này chỉ chảy một lần duy nhất 
void setup() {
// Đầu ra ở đây được chọn là 13. Pin mode là xác định đầu ra ở số nào. Số 13
 pinMode(13, OUTPUT);
}

// Đúng như cái tên thì loop là vòng lặp liên tục, tức là sẽ luôn gọi và luôn chạy
void loop() {
// Ghi vào 13 là HIGH, HIGH đây có nghĩa là bật 
digitalWrite(13, HIGH);
// Delay là chờ, chờ trong 1s. Đơn vị ở đây là ms nha anh em 
delay(1000);
// LOW ở đây là off, tắt 
digitalWrite(13, LOW);
// Chờ tiếp 1s 
delay(1000);
}

Không có gì khó đúng không nào?. Cứ bật thì chờ 1s, sau đó tắt, rồi lại chờ 1s. Theo logic bật tắt thông thường thì đèn led lúc này sẽ vừa chớp vừa tắt. Liên tục

Ngoài ra còn có các ví dụ khác hay ho trong bộ ví dụ của Arduino, anh em có thể tìm hiểu. Code thì vẫn thực thi từ trên xuống dưới, ngoại trừ một số tính năng đặc biệt.

5. Học arduino như thế nào.

Bắt đầu lập trình arduino với một ví dụ cực kì đơn giản. Tuy nhiên để học tốt hơn Arduino. Anh em cần có lộ trình cụ thể.

Ở đây lộ trình có thể được hiểu là các bước học. Ở đây suggest cho anh em lộ trình học đơn giản và hiệu quả nhất. Ví dụ như các function chung hoặc common thường sử dụng trong arduino. Để hiểu sâu và nhớ dai, anh em cần đọc cẩn thận từng function. Rồi theo lộ trình code dần dần sẽ nhớ hết

lập trình arduino

Lộ trình tư vấn:

    • Đầu tiên là hiểu về giao tiếp arduino (I²C (TWI), UART, SPI)
    • Tìm hiểu sâu về mạch (các class, MRK, Nano, kit, IoT kit,…). Tất cả những thứ có liên quan
    • Kế đến là prototyping (breadboard, soldering, multimeter,…)
    • Cuối cùng mới là arduino programming (if, else, swith, for)

Lời khuyên là đừng vội bắt đầu vào code ngay, cách đó là mì ăn liền, nhưng không hiểu sâu về mạch. Ngoài ra anh em đọc hoặc biết trước về bên điện tử thì càng tốt!

6. Tham khảo thêm về lập trình arduino

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

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

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

Công nghệ nào đứng sau AI tạo ra MC ảo đang hot rần rần?

Công nghệ nào đứng sau AI tạo ra MC ảo đang hot rần rần?

Đầu tiên, dạo qua một vòng các báo, tin tức rần rần về MC ảo, ứng dụng của MC Ảo là gì? Đứng sau AI ảo là công nghệ nào. Bài viết này chia sẻ chút kiến thức tới anh em về Synthetic.

Synthetic đang dần thay đổi thế giới của chúng ta. Ở đó, với sự hỗ trợ của AI, ai cũng có thể trở thành nhà sáng tạo nội dung (Content creator).

Cũng giống như ChatGPT, đang thay đổi thế giới hàng ngày, nó cũng chứng tỏ sức mạnh to lớn của AI (trí tuệ nhân tạo). Nhưng ChatGPT chỉ giao tiếp với anh em thông qua chat, hình thức tương tác không mấy thân thiện. Vẫn phải gõ câu hỏi, vẫn phải đọc từng câu trả lời. AIVideo sẽ tương tác tốt hơn với người sử dụng, vốn chuộng hình thức nghe nói. Đơn giản là không cần gõ, chỉ cần nói và lắng nghe.

Ngoài ra AIVideo còn có tính sáng tạo, đồng thời mở ra nhiều mô hình và cơ hội kinh doanh rõ ràng hơn. Cụ thể ta có một vài ví dụ:

Công nghệ nào đứng sau AI tạo ra MC ảo đang hot rần rần?

1. Synthetic video là gì?

Đầu tiên, nếu anh em nghĩ rằng AI Video chỉ như deepfake, thì nó là hoàn toàn sai nha. Ok, cùng bắt đầu với định nghĩa của synthetic video

Synthetic video là bất kỳ loại video nào được tạo bằng AI. Tức là anh em không có máy quay, diễn viên, thiết bị âm thanh và những thứ khác. Đơn giản để tạo được một video, tất cả những gì anh em cần là một chiếc máy tính và ý tưởng, sau đó AI lo tất cả cho anh em để có video đó.

AI video có thể có nhiều dạng, một loại phổ biến có thể chia ra như sau:

    • AI video được tạo từ text: Video AI với người thuyết trình hoặc người nói sống động như thật , gần giống như Deepfakes. thường tạo ra để mạo danh.
    • AI video từ image: hầu hết AI video kiểu này tạo ra từ ảnh chân dung
    • AI videos from text: text-to-speech (loại này chuyển từ văn bản thành giọng nói), sử dụng ngôn ngữ tự nhiên

Với nhiều nguồn có thể sử dụng để tạo ra AI Video, những video được tạo với AI giờ đây trở nên sống động như thật.

Vậy những model nào thường sử dụng để xây dựng AI Video? Đây, có ngay trong phần 2 cho anh em.

  Dân IT có thể được ChatGPT hỗ trợ code tự động hóa như thế nào?
  Fuzzy search là gì? Những điều cần biết về thuật toán fuzzy

2. Các model có thể sử dụng để xây dựng AI

Sau khi đã hiểu về Synthetic video, giờ là lúc đặt câu hỏi làm như thế nào để AI có thể tạo ra được video. Thông thường một model AI sẽ trải qua các bước sau đây:

    • Data Collection (thu thập dữ liệu để huấn luyện mô hình AI)
    • Preprocessing (tiền xử lý data, xử lý dữ liệu, xử lý các thông tin được cung cấp cho AI)
    • Model Building (xây dựng model)
    • Training (dạy cho model, huấn luyện cho model)

Ở phần này ta sẽ focus vào Model, các model có thể sử dụng để xây dựng AI Video. Hiện tại, phổ biến nhất có 3 loại mô hình có thể sử dụng.

    • Đầu tiên là GANs (Generative Adversarial Networks)
    • Thứ hai là VAEs (Variational Autoencoders)
    • Cuối cùng là RNNs (Recurrent Neural Networks)

Một số sản phẩm phổ biến có thể kể tới như InVideo. Trang này xây dựng AI của mình dựa trên GAN, mô hình này này sử dụng 2 network. Network đầu tiên sử dụng để xây dựng AI video, network thứ hai để đánh giá mức độ chân thực của video được tạo ra. Tất nhiên hiện tại đã có nhiều mô hình đã được đào tạo trước. Anh em có thể cân nhắc để tự build hoặc xây dựng model của riêng mình.

3. Mô hình phổ biến có thể sử dụng để tạo ra AI video?

Sau khi đã hiểu các model thường sử dụng để xây dựng AI Video. Giờ là lúc lướt qua một số thư viện nổi bật anh em có thể sử dụng để xây dựng AI video

Cái tên đầu tiên không thể không kể tới là MAGVIT. Kế tới là Make a video. Hầu hết các mô hình này đều công bố mã nguồn trên github. Anh em có thể nghiên cứu để sử dụng.

Tuy nhiên các mô hình được xây dựng sẵn có thể không phù hợp trong một số hoàn cảnh.

Công nghệ nào đứng sau AI tạo ra MC ảo đang hot rần rần?

Với các mô hình khác nhau, chất lượng video được xây dựng cũng sẽ khác nhau. Chính vì vậy, trước khi lựa chọn một mô hình, cần đánh giá mức độ khả thi và khả năng mở rộng của mô hình đó.

4. Tiềm năng của AI Videos

Ai Video đang đóng góp nhiều vào công cuộc số hoá nội dung. Với sự hỗ trợ của AI, ai cũng có thể trở thành nhà sáng tạo nội dung. Song song với đó, việc phát triển AI Videos còn trực tiếp đe doạ tới một số nghành nghề như dẫn chương trình, biên tập viên.

Công nghệ nào đứng sau AI tạo ra MC ảo đang hot rần rần?

Bởi với trí tuệ nhân tạo, giờ đây một đội ngũ lớn

5. Các sản phẩm ứng dụng AI Video

Hiện tại, đã có kha khá cái tên tham gia thị trường phát triển video với trí tuệ nhân tạo. Một số cái tên có thể kể tới như:

    • Synthesia | #1 AI Video Generator
    • veed.io
    • elai.io
    • Heygen

Hầu hết các sản phẩm được nêu ở đây đều tự xây dựng mô hình AI của riêng mình. Sức mạnh tới từ những cỗ máy được sử dụng để tạo ra AI Videos. Càng ngày càng nhanh chóng, tuy nhiên việc sử dụng AI Videos có hoàn toàn thay thế con người hay không thì còn là câu hỏi còn bỏ ngỏ.

Việc ứng dụng AI vào cuộc sống không sớm thì muộn rồi sẽ xảy ra, quan trọng là AI sẽ tác động như thế nào. Anh em có quan điểm cá nhân gì về vấn đề này chia sẻ với nhé!.

Một số thông tin khác anh em có thể 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

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

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

Svelte.js có gì mà khiến các ông lớn ReactJS, Vue lo sợ

Svelte.js có gì mà khiến các ông lớn ReactJS, Vue lo sợ

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

Đúng là thời của Javascript đã tới rồi hay sao ấy! Thời mà JS framework mới ra mắt nhiều như số người yêu mới của người yêu cũ vậy

Với ai theo nghiệp làm lập trình front-end thì lại càng thấm điều này. Trong một lần tình lướt Tiktok, mình thấy có một bạn nhắc tới một frontend framework mới, thấy giới thiệu các ưu điểm cũng OK đấy.

Điều mình thực sự bất ngờ đó là theo khảo sát của Stackoverflow, đây là framework được yêu thích và phổ biến thứ 5, làm lung lay các tên tuổi đình đám như React, Vue.

JS framework mình muốn đề cập ở đây có tên là Svelte.js

Chúng ta cùng tìm hiểu xem Svelte.js là gì mà lại khét như vậy nhé!

Svelte Framework là gì?

Svelte.js là một Javascript framework mã nguồn mở giúp đơn giản hóa việc tạo các trang web tĩnh, ứng dụng web SPA…

Về cơ bản, mục đích ra đời của Svelte.js tương tự như ReactVue hay Angular, chỉ khác về cơ chế nó hoạt động tối ưu bên dưới mà thôi.

Ví dụ, điểm khác biệt lớn nhất giữa Svelte với React, Vue là framework này tiến hành compile và cung cấp mã nguồn tại thời điểm build thay vì lúc chạy ứng dụng. Nhờ đó mà tốc độ của ứng dụng web nhanh hơn hẳn.

Ngoài ra, Svelte có tốc độ nhanh là do kiến trúc thiết kế của nó. Svelte sẽ biên dịch mã JS thành những module nhỏ, độc lập, đảm bảo trình duyệt thực hiện ít công việc nhất có thể. Nhờ đó mà ứng dụng web có tốc độ nhanh hơn.

  Tại sao lại chọn Fastify framework thay vì ExpressJS?

  Một số test automation framework thường gặp

Đặc điểm nổi bật của Svelte

Các ứng dụng web được tạo bởi Svelte thực sự rất là nhanh, nhẹ, tốn ít tài nguyên. Dưới đây là 3 đặc điểm khiến nó đạt được điều đó:

  • No virtual DOM: Trái ngược hoàn toàn với Vue, React là sử dụng virtual DOM để tăng tốc độ ứng dụng. Svelte có kỹ thuật riêng để thao tác trực tiếp với DOM nhưng hiệu suất rất tốt. Svelte làm việc trực tiếp với code mà không cần tới DOM, hầu hết quá trình xử lý code được chuyển vào giai đoạn compile.
  • Code ít hơn: Để làm cùng một chức năng, với Svelte bạn phải viết code ít hơn rất nhiều so với React hay Vue.
  • Reactivity: Phần này thì có lẽ cũng tương tự như JS framework khác. Chỉ khác là Svelte không yêu cầu trình duyệt phải chuyển các component sang DOM. Cứ bớt được việc là sẽ nhanh hơn rồi.

Svelte Framework

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

Thực hành xây dựng ứng dụng web bằng Svelte.js

Với mình thì cứ phải bắt tay vào làm trực tiếp mới có cảm nhận chính xác về một framework mới được. Chứ nghe qua quảng cáo thì có mà “lấy thóc giống ra bán

Trong phần thực hành này, chúng ta sẽ cùng nhau xây dựng một ứng dụng todos quen thuộc với các tính năng cơ bản như: thêm mới, sửa, xóa một todo.

Để việc thực hành được trơn tru, bạn nên chuẩn bị trước môi trường phát triển gồm:

Ok, mọi thức đã sẵn sàng, chúng ta bắt tay vào việc thôi!

Khởi tạo Svelte.js app

Để tạo một dự án được nhanh hơn, chúng ta sử dụng các template có sẵn. Những template này được chính Svelte tạo sẵn và lưu trên Github, nên chúng ta yên tâm sử dụng.

Chỉ với một câu lệnh:

npx degit sveltejs/template todo-app

Trong đó, todo-app là tên dự án.

Nếu máy tính của bạn chưa cài đặt degit thì nhớ cài thêm vào nhé: npm install -g degit

Sau khi khởi tạo xong, bạn di chuyển con trỏ vào thư mục dự án vừa tạo, tiến hành cài đặt dependencies và chạy ứng dụng web.

cd todo-app
npm install
npm run dev

Mở trình duyệt và thử truy cập địa chỉ: http://localhost:8080

Svelte Framework

Như vậy là chúng ta đã bước một chân vào thế thế giới của Svelte rồi đấy.

Phần tiếp theo, chúng ta cùng nhau khám phá và xây dựng các tính năng cho ứng dụng Todos.

Svelte container

Tương tự như Vue, svelte không sử dụng khái niệm component và thay bằng khái niệm container.

Cá nhân mình thấy container nó cũng giống component, chẳng khác quái gì cả,

Một ứng dụng web bao giờ cũng có một container gốc, trong dự án này, đó là App.svelte

Về cơ bản thì một container cũng gồm 3 thành phần <script><html tag> và <style> tương tự như React và Vue.

<script>
...
</script>
<main>
...
</main>
<style>
...
</style>

Chúng ta sẽ mở file App.svelte để implement màn hình home của ứng dụng todo nhé.

Trước khi thực hiện tiếp, bạn nhớ xóa hết các code được gen tự động lúc trước để tạo màn hình hello world nhé.

Form tạo mới một Todo

Để tạo một form để người dùng có thể submit một todo mới, đơn giản là một input và một button thôi.

Thêm đoạn code này vào trong thẻ <main>

<!-- Form -->
<form on:submit|preventDefault={add}>
    <input bind:value={newItem} placeholder="Enter to-do" />
    <button class="add-todo" on:click={add}><span>+</span></button>
    </form>

Đoạn mã html trên có binding tới một số biến như newItem, hàm add()… Tất nhiên là chương trình sẽ báo lỗi. Đừng lo, thêm đoạn khai báo này vào trong thẻ <script> là được.

let newItem = "";
let todoList = [];
function add() {
  if (newItem !== "") {
    todoList = [
      ...todoList,
      {
        task: newItem,
        completed: false,
      },
   ];
   newItem = "";
  }
}

Nhiệm vụ của hàm add() là thay đổi giá trị của state và khi đó hệ thống reactive sẽ hoạt động và tự động cập nhật giao diện. Phần này, cơ chế tương tự Vue, React.

Style cho form

Để cho ứng dụng được đẹp hơn, tất nhiên là chúng ta phải thêm style cho nó.

Svelte Framework

Bạn thêm mã css vào trong thẻ <style>

main {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-height: 100%;
    padding: 5vmin;
    box-sizing: border-box;
    background: antiquewhite;
  }

  form {
    width: 100%;
    max-width: 500px;
    display: flex;
    align-items: center;
    margin-bottom: 1rem;
  }

  input {
    flex-grow: 1;
    width: 0;
    border: none;
    border-bottom: 1px solid black;
    background: transparent;
    box-shadow: none;
    font-size: 1.2rem;
    margin: 0;
    outline: none;
  }

Tạo danh sách các todos

Sau khi chúng ta đã tạo xong phần nhập mới todo, và khi người dùng nhấn nút add là nó phải được hiển thị ra ngoài danh sách.

Để làm được điều này, chúng ta sử dụng hàm #each – một vòng lặp của Svelte.

Thêm đoạn code render danh sách todos bên dưới phần form nhập:

<!-- Danh sách To-dos -->
  <div class="todos">
    {#each todoList as item, index}
    <div class="todo">
      <span class="todo__text">{item.task}</span>
        <div class="todo__buttons"></div>
    </div>
    {/each}
   </div>

Chạy thử code xem sao. Kết quả là todo đã được hiển thị ra ngoài danh sách. Tuy nhiên, nhìn có vẻ xấu nhỉ! Xấu là do chưa biết mông má thui

Thêm style cho danh sách todo nhé.

.todos {
    width: 100%;
    max-width: 500px;
  }

  .todo {
      display: flex;
      padding: 20px;
      border-radius: 20px;
      box-shadow: 0 0 15px rgb(0 0 0 / 20%);
      background-color: hsla(0, 0%, 100%, 0.2);
      margin-top: 1rem;
      font-size: 1.2rem;
      justify-content: space-between;
      align-items: center;
  }

  .todo__buttons {
      display: flex;
      align-items: center;
      margin-left: 1rem;
   }

Kết quả thu được cũng ra gì phết đúng không!

Svelte Framework

Và còn tính năng xóa todo và đánh dấu một todo đã hoàn thành nữa. Mình để lại cho các bạn tự hoàn thiện nhé.

Tạm kết

Sau khi thử trải nghiệm Svelte, mình mới hiểu tại sao framework này lại được nhiều người yêu thích như vậy. Thực sự trình compile của nó rất tốt, hứa hẹn một tương lai đầy triển vọng cho các dự án.

Với ưu điểm tốc độ, sự gọn nhẹ và ít phức tạp hơn so với các framework khác, cùng với cộng đồng ngày càng đông và thân thiện, mình tin rằng trong tương lai gần Svelte sẽ ngồi cùng mâm với React và Vue.

Bạn có đồng quan điểm với mình không? Để lại ý kiế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 tại TopDev

Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

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

Vấn đề

Có thể bạn đã biết, trước đây khi chưa có React, Vue… thì jQuery đã làm bá chủ của nhiều trang web. Hầu như trang nào cũng sử dụng jQuery vì đó là thư viện cung cấp nhiều hàm tương tác với DOM để thay đổi dữ liệu rất mạnh mẽ. Nhưng vì quá nặng và cồng kềnh, cộng với sự ra đời của nhiều công cụ xây dựng web hiện đại sau này, mà giờ đây nó đã trên “bờ vực của cái chết”.

Khi truy cập vào một trang web, mỗi hành động của bạn thể hiện cho việc tương tác với DOM. Ngoài ra, còn một vài thứ có thể tương tác với DOM nữa như là JavaScript. Điều đó nghĩa là, có thể sử dụng JavaScript để tạo ra tương tác với DOM như một người dùng bình thường. Từ đó, chúng ta có thể tự động hóa một chuỗi các hành động lặp đi lặp lại mà không cần sự tương tác của người dùng nữa.

Hầu hết trình duyệt hiện đại bây giờ đều cung cấp chức năng gọi là Console để cho chúng ta viết và chạy mã JavaScript ngay tại trang web đang truy cập. Bài viết ngày hôm nay, tôi sẽ nêu ra một ví dụ cụ thể về cách viết mã JavaScript thực hiện một hành động lặp đi lặp lại trên trang web. Hy vọng qua bài viết này, bạn đọc có thể hình dung ra nhiều ứng dụng hơn nữa và áp dụng nó trong công việc hàng ngày.

  Bạn biết gì về thuật toán Radix Sort trong JavaScript?

  Pure Function trong Javascript: Hiểu thế nào cho đúng?

DOM và JavaScript

Document Object Model (DOM) là một giao diện lập trình cho các trang web. Nó đại diện cho trang web để các chương trình có thể thay đổi cấu trúc, kiểu và nội dung tài liệu. DOM đại diện cho trang web (document) dưới dạng các nút và đối tượng. Qua đó, làm cho một số ngôn ngữ lập trình có thể tương tác với trang.

JavaScript có thể tương tác với DOM một cách mạnh mẽ. Hình dung DOM như một Web API mà trình duyệt cung cấp cho nó toàn quyền truy cập và chỉnh sửa. Hầu như trải nghiệm tuyệt vời trên web ngày nay đều có sự góp mặt của JavaScript. Cùng với sự phát triển của thế giới web, chúng ta ngày càng có nhiều trang web động, chú trọng đến trải nghiệm của người dùng hơn. Nhiều Framework, Library dựa trên JavaScript để tăng tương tác với DOM góp phần tạo ra trang web mang nhiều tiện ích như thế.

Trình duyệt cho phép chúng ta chạy mã JavaScript trực tiếp trên trang web thông qua Dev Tools của nó. Trong Chrome, sau khi bật Dev Tools và vào cửa sổ Console, bạn đã có thể viết mã JS vào đây và chạy nó.

 Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

Lợi dụng điều này mà trước đây, nhiều hacker cố gắng lừa người dùng dán một đoạn mã để họ ăn cắp dữ liệu. Nhưng trong bài viết này, tôi không đi sâu vào chủ đề đó, mà mục đích là giúp cho các bạn hình dung được cách sử dụng JavaScript để tương tác với DOM.

Nói thì có vẻ dài dòng, hãy lấy một ví dụ đơn giản là “thả react liên tục vào tin nhắn trên Telegram” để giúp bạn đọc dễ hình dung hơn.

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

Thả react liên tục vào tin nhắn Telegram

Hầu như bây giờ, các dịch vụ nhắn tin OTT có cung cấp phiên bản web cho chúng ta sử dụng. Một điều tôi thấy thích thú là tính năng react tin nhắn bằng các emoji để thể hiện cảm xúc. Thích vì nhiều khi mình không cần phải trả lời mà chỉ cần thả một emoji, hoặc đôi khi react để cho người gửi biết là mình đã đọc tin nhắn của họ, và cảm xúc khi đọc được tin nhắn đó là như thế nào.

Tôi có một thói quen hay react tin nhắn. Một phần vì muốn cho họ biết là mình đã đọc, một phần thì là do “nghịch ngợm”. Trên Telegram thì có một nhóm bạn chuyên nói nhiều chuyện trên trời dưới đất, và để cho bớt nhàm chán mỗi khi không “rảnh tay”, thì tôi đã viết một script cho nó tự thả emoji vào tin nhắn của bọn họ.

Để viết được script, trước tiên chúng ta cần bỏ ra một ít thời gian nghiên cứu cách hoạt động của tính năng react.

Đầu tiên, tôi thấy mỗi khi di chuột vào khung thời gian thì emoji sẽ hiện ra, bấm vào emoji thì là thả react thành công. Các tin nhắn khác cũng tương tự. Để ý là phần DOM của emoji vẫn luôn có ở đó, chỉ là CSS đã ẩn nó đi và chỉ hiện khi chúng ta di chuột vào.

 Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

Vì vậy ý tưởng là lấy tất cả tin nhắn, lặp qua từng cái và bấm vào emoji là đã thả react thành công.

Đầu tiên là hàm lấy tất cả tin nhắn:

const getListMessage = () => {
  return (
    document.querySelectorAll(
      "div.message-content-wrapper.can-select-text > div"
    ) || []
  );
};

div.message-content-wrapper.can-select-text > div là selector của mỗi tin nhắn.

Hàm kiểm tra tin nhắn đã được react chưa bằng cách kiểm tra có element .Reactions chưa.

const checkReactMessage = (elm) => {
  if (elm) {
    return !!elm.querySelector(".Reactions");
  }
  return false;
};

Hàm react tin bằng cách click:

const react = (elm) => {
  if (elm) {
    elm.click();
  }
};

Cuối cùng là hàm xử lý chính:

const main = () => {
  const listMessage = getListMessage();
  listMessage.forEach((elm) => {
    if (!checkReactMessage(elm)) {
      react(elm.querySelector('div.quick-reaction'));
    }
  });
};

Sau đó bạn có thể gọi hàm main và xem kết quả. Hoặc nếu muốn nó react vào những tin nhắn mới sau đó thì thêm hàm setInterval.

setInterval(main, 3000);

Kết quả là:

 Tương tác với trang web bằng Console của trình duyệt qua một ví dụ đơn giản

Tổng kết

DOM là một giao diện lập trình cho các tài liệu web. JavaScript có thể tương tác với DOM một cách dễ dàng. Đặc biệt, việc có thể chạy JavaScript trực tiếp từ Console trong trình duyệt giúp bạn thoải mái tạo ra các hành động thay mặt người dùng một cách tự động hóa.

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

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

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

Tuyển tập các câu hỏi phỏng vấn System Engineer mới nhất

Tuyển tập các câu hỏi phỏng vấn System Engineer mới nhất

Phỏng vấn System Engineer (kỹ sư hệ thống) bao gồm những kiến thức gì? Liệu rằng người biết hết về hệ thống sẽ trở thành kỹ sư hệ thống giỏi? Không cần thêm bất cứ kỹ năng nào khác?

Phỏng vấn System Engineer

Bài viết này liệt kê 5 câu hỏi phổ biến thường được hỏi khi phỏng vấn System Engineer. Mong sẽ bổ ích cho quá trình chuẩn bị cho phỏng vấn. Trước khi bắt đầu, ta cùng tìm hiểu lại xem Kỹ sư hệ thống là gì?

Kỹ sư hệ thống (System Engineer) là gì, nhiệm vụ của họ như thế nào trong công ty?

Systems engineers work closely with systems analysts to maintain a company’s IT system by developing the operating systems that run computers. Kỹ sư hệ thống làm việc chặt chẽ với các nhà phân tích hệ thống để duy trì hệ thống CNTT của công ty bằng cách phát triển các phần mềm chạy trên máy tính.

Chỉ đơn giản và ngắn gọn như vậy nhưng Kỹ sư hệ thống (System Engineer) là người cần có kiến thức sâu rộng về hệ thống máy tính. Cách thức mà hệ thống máy tính hoạt động. Thông thường các ứng viên phỏng vấn vị trí này thường có kinh nghiệm làm việc trước đó trong các hệ thống tại doanh nghiệp.

Bắt đầu ngay thôi nào!

1. Bạn đã bao giờ phân bổ tiền cho hệ thống hoạt động chưa?

Câu hỏi đầu tiên phỏng vấn System Engineer thường liên quan tới kỹ thuật, tuy nhiên đánh giá cao hơn cho người kỹ sư hệ thống nếu biết về lên kế hoạch tài chính.

Thông thường developer và các vị trí khác thường không thể biết hết bao nhiêu dịch vụ, bao nhiêu phần mềm hoặc service của bên thứ 3 được gọi tới. Kỹ sư hệ thống là người biết tất cả những dịch vụ này.

Phỏng vấn System Engineer

Chính vì vậy, ngoài việc tham gia thiết kế và phát triển hệ thống. Sẽ thật tuyệt vời nếu bản thân người kỹ sư biết lên kế hoạch tài chính cho hệ thống đang quản lý hoặc sẽ phát triển.

Một số điểm mạnh khi lên kế hoạch có thể kể tới như:

  • Lên kế hoạch giúp người quản lý dự án ước lượng tương đối tài chính cần chi
  • Ước lượng còn cho biết bản thân người kỹ sư biết cân nhắc sử dụng hợp lý các dịch vụ
  • Tiết kiệm cho công ty về chi phí, tránh lãng phí không cần thiết

Các câu hỏi khác anh em có thể xem qua:

  • Anh em đã bao giờ viết chính sách CNTT cho các công ty trước đây của mình để tăng hiệu quả sử dụng cơ sở hạ tầng CNTT chưa?
  • Để deploy SQL Server, bạn sẽ làm như thế nào?

  Top 5 câu hỏi phỏng vấn System Admin và cách trả lời ghi điểm
  Kỹ Sư Cầu Nối (BrSE) Là Gì? BrSE Cần Học Những Gì?

2. Bạn sẽ làm gì khi production down?

Câu hỏi thứ hai phỏng vấn System Engineer là câu hỏi behavioral (tình huống). Thông thường một trong các yêu cầu được giao cho kỹ sư hệ thống là đảm bảo cho hệ thống mạng, hệ thống sản phẩm phần mềm công ty hoạt động trơn tru.

Trường hợp production down (vốn là điều không hiếm), bạn sẽ xử lý như thế nào? Tuy là câu hỏi giống như câu hỏi tình huống nhưng nhà tuyển dụng sẽ cực kỳ để tâm tới câu hỏi này. Anh em chú ý.

Phỏng vấn System Engineer

Để trả lời cho câu hỏi này, tất nhiên dựa trên kinh nghiệm mỗi anh em sẽ có một câu trả lời khác nhau. Tuy nhiên, một số ý cần có, cụ thể như sau:

  • Trường hợp production down, cần có phương án dự phòng để start server backup
  • Sau khi production đã start phương án dự phòng, cần điều tra nguyên nhân
  • Đánh giá thiệt hại, tìm hướng khắc phụ để tránh xảy ra các trường hợp tương tự trong tương lai

Đối với một số công ty, nhất là thương mại, có nhiều lượt truy cập và số lượng truy cập cao, người ta rất sợ production down. Nếu apply vào các công ty này, anh em cần show ra hết những kinh nghiệm của bản thân mình.

Câu hỏi này không phải là câu hỏi nhà tuyển dụng mong chờ anh em mình trả lời điều tra nguyên nhân. Cái quan trọng nhất là site đang down và ảnh hưởng tới công ty và khách hàng. Anh em lưu ý, khi production down thì đầu tiên là tìm cách start backup hoặc hot fix sao đó cho production a live đã nhé.

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

3. Làm sao giữ cho tài liệu kỹ thuật luôn được cập nhật mới nhất

Câu hỏi thứ ba phỏng vấn System Engineer tiếp tục là một câu hỏi liên quan đến kinh nghiệm. Tuy chỉ nói về tài liệu, thứ mà thông thường anh em mình thường xem nhẹ.

Đầu tiên, cần làm rõ lại với anh em là tài liêu (document) đối với System Engineer là cực kì quan trọng. Những hệ thống lớn, nhiều modules, nhiều hệ thống nhỏ liên kết với nhau. Nếu không có tài liệu cụ thể rõ ràng, không ông System Engineer nào có thể làm việc được.

Vậy làm thế nào để giữ cho tài liệu được cập nhật? Tức là luôn mới nhất cho dù có vài ông mới vào sửa đổi gì đó.

Phỏng vấn System Engineer

Cái này thì tuỳ thuộc vào môi trường công ty và cách thức tổ chức, tuy nhiên có một số ý chính anh em có thể nêu ra để trả lời cho câu hỏi này

  • Luật, tại sao luật? Vì update document là việc nhàm chán, không bắt buộc thì không làm
  • Định kì cập nhật tài liệu hệ thống.
  • Tạo ra các công cụ yêu cầu cập nhật tài liệu mới cho deploy

Đơn giản, khi anh em hotfix hoặc thay đổi gì đó về mặt hệ thống, nếu tạo MR, PR mà không có tài liệu cập nhật thì không được merge hoặc không được deploy.

Nhắc lại lần nữa với anh em vấn đề cập nhật tài liệu là vấn đề cực kì quan trọng. Nếu không nói là cực nghiêm túc đối với System Engineer. Nếu không có nó sẽ không hiểu hệ thống, mà không hiểu thì không fix, không làm gì được đâu nhé.

4. Bạn đã tăng hiệu năng cho hệ thống như thế nào?

Câu hỏi thứ 4 phỏng vấn System Engineer vẫn tiếp tục đánh vào kinh nghiệm làm việc thực tế của System Engineer. Thông thường Kỹ sư hệ thống ngoài giám sát, bảo trì hệ thống, còn được giao nhiệm vụ tối ưu hệ thống.

Tối ưu ở đây được hiểu là năng năng suất cho hệ thống. Việc tối ưu tất nhiên còn tuỳ thuộc vào sản phẩm hoặc hệ thống mà người kỹ sư được giao cho là gì?

Ví dụ, một hệ thống lớn như tính toán giao dịch, xử lý cả triệu request hoặc tính toán có độ chính xác cao sẽ được tối ưu ngay từ xúc kiểm thử và phát hiện có vấn đề về performance. Tuy nhiên, bản thân người kỹ sư hệ thống cần có kiến thức về tối ưu performance.

Phỏng vấn System Engineer

Tất nhiên như đã nói ở trên, còn tuỳ thuộc công nghệ và hệ thống sử dụng những thành phần như nào thế nào. Anh em có thể nêu ra một số điểm về tối ưu:

  • Tối ưu network
  • Tối ưu bản thân phần mềm hoặc hệ thống
  • Sử dụng đúng giải pháp được cung cấp, phù hợp với yêu cầu
  • Tối ưu hệ thống bằng các kỹ thuật như cache, load balancing

5. Giả sử tôi là người do dự khi thay đổi công nghệ mới. Làm sao bạn thuyết phục tôi?

Câu hỏi cuối cùng Phỏng vấn System Engineer liên quan tới khả năng trình bày vấn đề. Bản thân người kỹ sư hệ thống không làm việc đơn lẻ. Thông thường vị trí này làm việc với nhiều team khác nhau.

Trường hợp làm việc trong hệ thống lớn, việc là việc với nhiều team và nhiều techstack khác nhau là chuyện hết sức bình thường. Câu hỏi này muốn kiểm tra khả năng trình bày vấn đề của người kỹ sư hệ thống.

Phỏng vấn System Engineer

Giả sử trong quá trình làm việc hệ thống có một modules áp dụng ngôn ngữ mới, công nghệ mới. Vậy làm sao để thuyết phúc cả team và techlead của team đó rằng nên áp dụng công nghệ mới.

Thường đối với những câu hỏi thế này ứng viên nên tránh trả lời rằng hệ thống đã như vậy bắt buộc phải theo. Thông thường, người Kỹ sư hệ thống sẽ thực hiện một số việc để thuyết phục team đi theo công nghệ mới

  • Thứ nhất là điểm mạnh, điểm yếu của công nghệ mới
  • Thứ hai là tính ứng dụng, tại sao lại phải ứng dụng công nghệ đó trong hệ thống
  • Thứ ba là điểm yếu khi sử dụng công nghệ hiện tại

6. Tham khảo thêm về phỏng vấn System Engineer

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:

Git: merge – rebase và những lưu ý

Git merge – Git rebase và những điều cần lưu ý

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

Merge và Rebase

Sau một vài năm sử dụng Git, tôi càng ngày càng “lún sâu” vào Git commands (không phải xài git bằng command line). Trong quá trình làm việc với các team đông anh em, tôi tìm thấy lệnh git rebase. Khá hay và ngay lập tức tôi áp dụng nó vào đời sống coding của tôi, nhưng sau một thời gian sử dụng tôi nhận ra rebasing thật sự không phù hợp cho người mới bắt đầu xài git. Hôm bữa có anh em hỏi tôi git rebase là gì và khi nào xài và xài nó như thế nào!?

Trong bài viết này tôi chia sẻ với anh em git rebase là gì, nó khác gì với git merge và những lưu ý khi sử dụng git rebase.

Merge và Rebase

Về cơ bản anh em có thể hiểu git rebase tương tự như git merge. Nó đều dùng để kết hợp những thay đổi từ nhánh này qua nhánh kia, nhưng chỉ khác nhau về cơ chế hoạt động.

Bây giờ lấy ví dụ tôi đang làm việc trên nhánh #feature-a, commit cật lực lên đó. Cùng lúc đó team member của tôi push commit lên nhánh main. Các bạn nhìn hình dưới cho dễ hình dung:

Merge và Rebase

Bây giờ giả sử những commit trên nhánh main có liên quan đến #feature-a mà tôi đang làm. Tôi muốn kết hợp mấy commit đó vào nhánh #feature-a thì sẽ có 2 cách làm: merging hay rebasing.

Git merge

Để merge 2 nhánh lại với nhau tôi nghĩ anh em ai cũng biết. Có thể chạy 2 câu lệnh đơn giản sau:

git checkout #feature-a

git merge main

Hoặc đơn giản hơn nữa khi bạn xài UI tool như SourceTree hay GitKraken, anh em làm như sau, tôi thì đang xài GitKraken:

Merge và Rebase

Khi anh em làm vậy, git sẽ tạo 1 “merge commit” mới trên nhánh #feature-a, trong đó chứa tất cả các commit của 2 nhánh, bây giờ cấu trúc của 2 nhánh main và #feature-a giống giống như vầy:

Merge và Rebase

Git merge dễ sử dụng và an toàn vì logic của nó không làm phá hủy cấu trúc lịch sử của các nhánh. Các lịch sử commit trên nhánh main và #feature-a sẽ không bị thay đổi.

Mặt khác, nhánh #feature-a luôn luôn có 1 “merge commit” mới mỗi khi anh em merge nó với nhánh khác. Trong trường hợp nhánh main được merge vào liên tục, điều này sẽ làm git của tôi rối mù lên, tôi nói riêng và team member nói chung sẽ rất khó hiểu được lịch sử commit của cả project.

  Những lệnh GIT thường sử dụng từ cơ bản đến nâng cao

  Biến Git và GitHub trở thành công cụ đắc lực cho Software Engineer

Git rebase

Như 1 biện pháp thay thế cho git merge, anh em có thể xài git rebase nhánh #feaure-a trên nhánh main sử dụng command như sau:

Merge và Rebase

git checkout #feature-a

git rebase main

Hoặc xài UI tool như SourceTree hay GitKraken như sau:

Git rebase sẽ đem hết commit của nhánh #feature-a lên đầu của nhánh main, bao gồm cả những commit hiện có trên nhánh main luôn. Nhưng thay vì tạo ra 1 cái “merge commit” như git mergegit rebase sẽ “viết lại lịch sử” commit của project bằng cách tự động tạo các commit mới dựa trên các commit trên nhánh #feature-a.

Merge và Rebase

Lợi ích chính của việc xài git rebase là đem lại cho chúng ta 1 project có lịch sử commit rất đẹp và gọn gàng, không rối mù với các nhánh chỉa qua chỉa lại như git merge. Nó cũng sẽ loại bỏ được những “merge commit” không cần thiết của git merge. Nhìn vào sơ đồ ở trên ta có thể thấy project trở nên thằng như ruột ngựa, git log hay git bisect nhìn cũng rất rõ ràng, sạch sẽ.

Tham khảo Job FrontEnd HOT trên TopDev!

Những lưu ý khi sử dụng Rebasing

Một khi anh em đã hiểu được git rebase là gì và cơ chế hoạt động của nó. Việc chúng ta cần chú ý nhất ở đây là khi nào nên sử dụng git rebase.

Nguyên tắc vàng mà tôi đúc kết được là không được sử dụng git rebase lên “public branch”, tức là mấy nhánh như develop hay main.

Bây giờ lấy ví dụ, tôi sử dụng git rebase nhánh main lên nhánh #feature-a của tôi, git history của tôi sẽ giống giống hình dưới đây:

Merge và Rebase

Rebase sẽ đem hết commit của nhánh main lên đầu nhánh #feature-a. Nhìn thì thấy cũng bình thường, nhưng nghĩ lại thì tôi nhận ra nó chỉ đúng ở repo local của tôi thôi. Team member của tôi đều đang làm việc trên nhánh original main. Vì rebase sẽ tạo ra các commit hoàn toàn mới nên git sẽ hiểu là nhánh main của tôi khác hoàn toàn với nhánh main của những người khác.

Bây giờ điều duy nhất có thể làm là merge 2 nhánh main lại với nhau, điều này dẫn đến tạo ra thêm 1 merge commit và 1 nùi những commit với thay đổi giống nhau ( các commit ở nhánh main cũ, và commit ở nhánh rebase của tôi).

Bởi vậy khi anh em đang định sử dụng git rebase, hãy dừng lại 1 chút và tự trả lời câu hỏi “Liệu có ai đang làm việc trên nhánh này không!?”. Nếu có, tôi đề nghị anh em hãy bỏ ý định sử dụng git rebase lên nhánh đó. Còn nếu không, anh em thoải mái viết lại lịch sử của mình.

Lúc này nếu tôi lười quá, muốn force push nhánh main của mình lên remote cho nhanh, git sẽ la làng vì làm thế có thể sẽ tạo rất nhiều conflict. Nhưng tôi hoàn toàn có thể “cưỡng ép” git bằng cách thêm –force vào command:

git push --force

Làm thế sẽ giúp tôi nhẹ lòng nhưng team member của tôi thì không. Họ sẽ không hiểu chuyện gì đang xảy ra với nhanh main, mọi commit đều trở nên xa lạ.

Một lưu ý nữa là nếu anh em đang làm việc trên nhánh mà mình đã pushed một vài commit lên remote. Ví dụ anh em đang làm việc trên nhánh #feature-a, mà trước đó đã pushed vài commit lên remote rồi, thì anh em không nên rebase lên nhánh #feature-a.

Trên này là một vài chia sẻ của tôi về git base và những lưu ý khi sử dụng nó. Hy vọng anh em nào chưa biết có thêm 1 chút kinh nghiệm về git của mình.

Happy hacking

Bài viết gốc được đăng tải tại omatsuri.blog, biết thêm về tác giả tại LinkedIn

Xem thêm:

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

Bạn biết gì về thuật toán Radix Sort trong JavaScript?

Bạn biết gì về thuật toán Radix Sort trong JavaScript?

Anh em lập trình viên chắc không xa lạ gì với các thuật toán sắp xếp như Bubble Sort, Selection Sort, Quick Sort,… hầu hết các thuật toán sắp xếp cơ bản đều dựa trên việc so sánh (based sorting). Trong khoa học máy tính, có rất nhiều thuật toán sắp xếp khác nhau mà không dựa trên việc so sánh giá trị trực tiếp của các phần tử, hôm nay chúng ta cùng tìm hiểu một thuật toán sắp xếp thuộc dạng sắp xếp theo cơ số là Radix Sort và cách triển khai nó trong ngôn ngữ lập trình Javascript nhé.

Thuật toán Radix Sort

Radix Sort – sắp xếp theo cơ số là một thuật toán dựa trên ý tưởng rằng nếu một dãy số đã được sắp xếp hoàn chỉnh thì từng chữ số cũng sẽ được sắp xếp hoàn chỉnh dựa trên giá trị của các chữ số đó. Từ “radix” trong toán học có nghĩa là cơ số, là số các chữ số của hệ đếm bao gồm cả số 0. Ví dụ như số chúng ta sử dụng hàng ngày là hệ thập phân hay hệ cơ số 10, sẽ dùng 10 chữ số từ 0-9 để biểu diễn số trong hệ. Hay với hệ nhị phân cơ số 2 thì sẽ chỉ sử dụng 2 chữ số 0 và 1 để biểu diễn mọi số trong hệ.

Thuật toán Radix Sort trong JavaScript

  Định dạng số trong JavaScript

Nội dung thuật toán

Để hiểu được nội dung thuật toán, chúng ta cùng thực hiện sắp xếp mảng số sau bằng thuật toán Radix Sort (các số được biểu diễn trong hệ thập phân).

[48, 618, 836, 992 ,22, 215, 1995, 1239]

Với mỗi số trong hệ thập phân chúng ta có giá trị chữ số của từng hàng dựa theo vị trí, ví dụ 1293 thì 3 là hàng đơn vị, 9 là hàng chục, 2 là hàng trăm và 1 là hàng nghìn, … Với những số có ít chữ số hơn thì các hàng sau được hiểu có chữ số là 0, ví dụ 48 sẽ có chữ số hàng trăm và hàng nghìn đều là 0. Một cách khác chúng ta có thể biểu mảng số trên theo dạng dưới đây để tất cả các phần tử đều có cùng 4 chữ số.

[0048, 0618, 0836, 0992 ,0022, 0215, 1995, 1239]

Đầu tiên hãy chú ý vào các chữ số ở Hàng Đơn Vị, chúng ta sẽ có thể chia các phần tử trên thành các nhóm tương ứng:

  • [0992, 0022] => nhóm có chữ số tận cùng là 2
  • [0215, 1995] => 5
  • [0836] => 6
  • [0048, 0618] => 8
  • [1239] => 9

Sau khi chia nhóm theo hàng đơn vị, thứ tự các phần tử trong mảng sẽ như sau:

[0992, 0022, 0215, 1995, 0836, 0048, 0618, 1239]

Lưu ý ở đây là việc chia nhóm phải giữ nguyên vị trí của các số trong nhóm theo mảng đầu vào. Ví dụ trong nhóm 2, số 0992 phải nằm trước số 0022 theo như ban đầu trong mảng cũ.

Đến đây chúng ta thực hiện lặp lại thao tác trên với lần lượt từ hàng chục, hàng trăm và hàng nghìn. Kết quả từng bước sẽ như dưới đây:

Với Hàng chục, ta có các nhóm:

  • [0618, 0215] => nhóm có chữ số hàng chục là 1
  • [0022] => nhóm 2
  • [0836, 1239] => nhóm 3
  • [0048] => nhóm 4
  • [0992, 1995] => nhóm 9

Mảng sau khi sắp xếp:

[0618, 0215, 0022, 0836, 1239, 0048, 0992, 1995]

Với Hàng Trăm, ta có các nhóm:

  • [0022, 0048] => nhóm có chữ số hàng trăm là 0
  • [0215, 1239] => nhóm 2
  • [0618] => nhóm 6
  • [0836] => nhóm 8
  • [0992, 1995] => nhóm 9

Mảng sau khi sắp xếp:

[0022, 0048, 0215, 1239, 0618, 0836, 0992, 1995]

Cuối cùng với Hàng Nghìn, ta có các nhóm:

  • [0022, 0048, 0215, 0618, 0836, 0992] => nhóm có chữ số hàng nghìn là 0
  • [1239, 1995] => nhóm 1

Mảng sau khi sắp xếp:

[0022, 0048, 0215, 0618, 0836, 0992, 1239, 1995]

Hay kết quả của mảng sau khi sắp xếp thành công sẽ là:

[22, 48, 215, 618, 836, 992, 1239, 1995]

Thuật toán Radix Sort có thể dễ dàng áp dụng tương tự trong các hệ cơ số khác, dưới đây là một ví dụ trong hệ nhị phân

Thuật toán Radix Sort trong JavaScript

  Thuật toán tìm kiếm nội suy trong JavaScript

Triển khai thuật toán với JavaScript

Để thực hiện việc sắp xếp, trước tiên chúng ta có 1 số function bổ trợ cho việc tính toán gồm:

nhomTungHang: function thực hiện việc chia nhóm theo từng đơn vị hàng

//array: mảng đầu vào đã sắp xếp từ bước trướ
//index sẽ là chỉ mục của hàng (hàng đơn vị, hàng chục, hàng trăm, ....)
function nhomTungHang(array, index) {
  //cơ số sử dụng - với hệ thập phân => giá trị = 10
  const BASE = 10;

  const modded = 10 ** (index + 1);
  const divided = 10 ** index;
  const buckets = new Array(BASE).fill(null).map(() => []); //

  array.forEach((element) => {
    if (element < divided) {
      //trường hợp không có giá trị hàng => gán vào nhóm 0
      buckets[0].push(element);
    } else {
      //gán số vào nhóm tương ứng
      const currentDigit = Math.floor((element % modded) / divided);
      buckets[currentDigit].push(element);
    }
  });

  //trả về mảng đã được nhóm
  return buckets;
}

laySoHang: function lấy số hàng theo phần tử lớn nhất của mảng

//array: mảng đầu vào
function laySoHang(array) {
  Math.floor(Math.log10(Math.max(...array))) + 1;
}

Triển khai phần sắp xếp

//originalArray: mảng đầu vào
function sort(originalArray) {
  let sortedArray = [...originalArray];
  //lấy ra số lượng hàng để thực hiện chạy vòng lặp
  const numPasses = laySoHang(sortedArray);

  for (let currentIndex = 0; currentIndex < numPasses; currentIndex += 1) {
    // với mỗi vòng lặp, phân nhóm từng hàng tương ứng
    const buckets = nhomTungHang(sortedArray, currentIndex);

    // sắp xếp lại mảng các nhóm theo thứ tự
    sortedArray = buckets.reduce((acc, val) => {
      return [...acc, ...val];
    }, []);
  }

  return sortedArray;
}

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

Độ phức tạp của thuật toán

Với 1 mảng có n phần tử, trong đó phần tử lớn nhất có k chữ số, khi đó 

  • Số vòng lặp thực hiện sẽ là k lần
  • Trong mỗi vòng lặp, các phần tử sẽ chỉ được xét đến đúng 1 lần

Từ đó chúng ta có số lần duyệt qua các phần tử là n * k, và số lần duyệt này là cố định trong mọi trường hợp, như vậy độ phức tạp của thuật toán này là O(n k). Nếu so sánh với các thuật toán sắp xếp cơ bản khác như Bubble Sort, Selection Sort hay Insertion Sort thì có thể xem hiệu năng của Radix Sort là khá ổn cùng tính ổn định (Stable) cao.

Thuật toán Radix Sort trong JavaScript

Kết bài

Như vậy là chúng ta đã cùng nhau tìm hiểu thuật toán sắp xếp Radix Sort và cách triển khai thuật toán này trong ngôn ngữ lập trình JavaScript. Bạn có thể cải tiến source code trên cho việc sắp xếp mảng string hay kiểu dữ liệu khác mà bạn mong muố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:

Hàng loạt việc làm IT hấp dẫn trên TopDev đang chờ bạn ứng tuyển.

30 laptop lập trình tốt nhất cho lập trình viên (Phần cuối)

30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần cuối)

Bạn có đang tìm cho mình 1 laptop lập trình?

Từ chuyện viết những dòng code cơ bản đến testing app và lập trình phần mềm, điều quan trọng nhất ở 1 máy tính cho lập trình viên là để hỗ trợ việc biến những ý tưởng của họ thành những dòng code 1 cách hiệu quả mà không bị gián đoạn hay bị lag.

Khi nghiên cứu để mua 1 laptop lập trình tốt, chắc ai cũng sẽ biết những điều thiết yếu cho 1 laptop tốt như bao gồm 8GB RAM, GPU mạnh mẽ và bộ xử lý Core i5 hay i7. Cho dù những chỉ số này khá ổn, nhưng thực sự là không đủ khi bạn tìm 1 laptop tốt cho những mục đích và công việc cụ thể trong ngành lập trình.

Tiếp tục phần tiếp theo và cũng là cuối cùng của danh sách 30 laptop lập trình tốt nhất cho lập trình viên trong năm 2023, hãy cùng chúng tôi đánh giá những laptop lập trình này qua những thông số và những tác vụ nào sẽ thích hợp nhất dành cho chúng!

Các bạn có thể xem Phần 1 của các laptop lập trình tốt nhất cho lập trình viên năm 2022 tại đâyPhần 2 tại đây nha!

21. Lenovo IdeaPad S145 AMD A6-9225

Laptop lập trình Lenovo IdeaPad S145 AMD A6-9225

Đây là 1 laptop khá lý tưởng cho những lập trình viên web và lập trình viên CMS. Với khả năng xử lý lên tới AMD A-9, laptop IdeaPad S145 được tạo ra để tăng tốc công việc của bạn. Ổ cứng SSD của nó đảm bảo độ phản hồi nhanh chóng và cho những coder, nó có mọi thứ bạn đang tìm.

Hệ thống loa được tích hợp mạnh mẽ và màn hình 15.6” full HD (1366 x 768) to vừa đủ và chỉ nặng 1.8 kg, rất phù hợp cho những bạn lập trình viên hay đi đây đi đó hay sinh viên đi học phải mang laptop theo mỗi ngày. Nó còn có tất cả loại cổng bạn cần như HDMI để kết nối smart TV và nhiều nữa.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1366 x 768 (HD Ready)
Bộ xử lý  3 GHz
Loại bộ xử lý AMD A6
RAM 4 GB DDR4
Ổ cứng 1 TB
Trọng lượng  1.85 kg

 

22. ASUS TUF FX505DY-BQ002T


ASUS TUF FX505DY-BQ002T

Nói về sự cân bằng tuyệt đối cho việc lập trình và chơi game, ASUS TUF FX505DY-BQ002T AMD Edition rõ ràng là 1 trong những con laptop tốt. Nhưng điều tuyệt vời nhất chính là độ bền bỉ của nó. Vượt qua hàng loại các bài kiểm tra độ bền, duy trì sự vận hành mạnh mẽ trong các trường hợp khác nhau bao gồm môi trường phóng xạ mặt trời, độ cao và nhiệt độ khắc nghiệt.

Nó còn chứng minh điều này qua những tai nạn hay tình huống bất ngờ trong công việc hàng ngày của bạn như va đập hay rơi từ trên bàn xuống đất. FX505 AMD Edition đã được đẩy tới giới hạn của chính nó chỉ để giúp bạn đảm bảo công việc lập trình của mình được ổn định nhất.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1366 x 768 (HD Ready)
Bộ xử lý  2.1 GHz (lên tới 3.7 GHz Max Boost Speed)
Loại bộ xử lý AMD Ryzen 5 3550H
RAM 8 GB DDR4
Ổ cứng 1 TB HDD
Giao diện Serial ATA

23. Dell Alienware m15
Laptop lập trình Dell Alienware m15

1 trong những laptop mạnh mẽ nhất là cho những lập trình viên làm việc trong lĩnh vực dữ liệu. Nó được hoàn thiện với hiệu năng đồ họa vượt trội và bộ vi xử lý được ép xung mạnh mẽ để đồng hành với bạn được lâu hơn. Dell Alienware m15 còn mang CPU cũng mạnh không kém và bộ vi xử lý Intel Core tiên tiến nhất. 

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1920 x 1080
Bộ xử lý  2.1 GHz Intel Core i7
RAM 16 GB DDR4
Ổ cứng 1 TB HDD

 

24. LG Gram 17Z990

Laptop lập trình LG Gram 17Z990

Laptop LG Gram 17Z990 sở hữu kích thước màn hình tuyệt vời 17” mà không làm ảnh hưởng tới trọng lượng của nó, ngược lại nó còn là 1 trong những laptop lập trình nhẹ nhất trong danh sách này chỉ với 1.34 kg. Cùng với thiết kế và vẻ ngoài đột phá, thật đơn giản để mang nó đi khắp nơi. Cho những lập trình viên bảo mật, nó rất phù hợp với bạn.

Kích cỡ màn hình 17”
Độ phân giải màn hình 2560 x 1600
Bộ xử lý  1.8GHz Intel Core i7-8565U
RAM 8 GB DDR4 (lên tới 16 GB)
Ổ cứng 512 GB SSD
Trọng lượng 1.34 kg

 

25. Acer Nitro 5 AN515-52


Laptop lập trình Acer Nitro 5 AN515-52
Acer Nitro 5 là 1 trong những laptop lập trình mạnh mẽ nhất cho lập trình viên. Laptop này sở hữu 8GB RAM DDR4 và điều tuyệt vời khác là nó có thể nâng cấp lên tới 32GB bằng cách dùng 2 module SDRAM DDR4! Thích hợp cho những bạn vừa muốn lập trình cho công việc lẫn chơi game mượt mà lúc giải trí.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1920 x 1080 (Full HD)
Bộ xử lý  2.3 GHz Intel Core i5 8300H
RAM 8 GB DDR4 (lên tới 32 GB)
Ổ cứng 512 GB SSD 
GPU GeForce GTX 1050 4GB
Kết nối không dây 802.11ac 2×2

 

26. HP Spectre x360 – 13t Touch


Laptop lập trình HP Spectre x360 - 13t Touch

Đây là 1 trong những laptop tối tân nhất cho lập trình viên Big Data hay nhà khoa học dữ liệu. Hãy tận dụng nó để phát triển sự sáng tạo của bạn với độ chính xác được tăng cường bởi bút kỹ thuật số từ HP. Bạn có thể tha hồ viết, phát thảo và tính toán dễ dàng hơn bao giờ hết 1 cách đa dạng và phong phú.

Kích cỡ màn hình 13.3”
Độ phân giải màn hình 3840 x 2160
Bộ xử lý  Intel Core i7 Gen 8
RAM 16 GB LPDDR3 SDRAM
Ổ cứng 512 GB SSD
GPU  Intel UHD Graphics 620
Kết nối không dây 802.11 ac, Bluetooth

27. AGB Octev AG-1208

Laptop lập trình AGB Octev AG-1208Laptop AGB Octev AG-1208 này siêu nhẹ rất phù hợp cho các bạn nữ hay những người thích sự gọn nhẹ. Ổ 1TB SSD/1TB HDD thực thi các tác vụ nhanh chóng chỉ trong 1 cái chớp mắt. Card đồ họa còn hỗ trợ phần nào trong việc quản trị. Bàn phím khá cứng cáp và dễ sử dụng, có đèn nền tích hợp và khá thân thiện. Nếu bạn là 1 nhà nghiên cứu bảo mật hay lập trình viên full-stack, đây rõ là 1 lựa chọn hoàn hảo cho bạn.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1080 Full HD
Bộ xử lý  2.7 GHz Intel Core i7 Gen 7
RAM 8 GB RAM
Ổ cứng 512 GB SSD
GPU  NVIDIA DD
Kết nối không dây 802.11 ac, Bluetooth

28. Asus Zenbook 14 UX433FN


Laptop lập trình Asus Zenbook 14 UX433FNZenbook 14 mang tới cái nhìn cực kỳ bóng bẩy và năng suất mượt mà. Đây chỉ đơn giản là những tiêu chuẩn trong phân khúc máy tính xách tay cao cấp cho năm 2023 và nó còn là đối thủ canh tranh nặng ký với Macbook Air nữa. Zenbook 14 mới của Asus nhẹ hơn, duyên dáng hơn, mạnh mẽ hơn và chứa nhiều tiện ích tuyệt vời kế thừa từ người tiền nhiệm của nó. Nói cách khác, nó có khá nhiều điều thú vị hơn để khám phá so với đối thủ Macbook Air nhiều. Laptop này khá lý tưởng cho những quản trị viên cơ sở dữ liệu hay những lập trình viên làm công việc phân tích dữ liệu.

Kích cỡ màn hình 14”
Độ phân giải màn hình 1920 x 1080 Full HD
Bộ xử lý  1.8 GHz Intel Core i5
RAM 8GB RAM
Ổ cứng 512 GB SSD PCle
GPU  NVIDIA GeForce MX150
Kết nối không dây 802.11 ac, Bluetooth

 

29. Custom 16‑inch MacBook Pro – Space Gray


Laptop lập trình Custom 16‑inch MacBook Pro – Space Gray
Apple vừa làm mới lại dòng Macbook Pro 16” của mình với bộ xử lý Intel Gen 9 tinh gọn hơn, làm cho nó trở thành con Macbook nhanh nhất hiện tại. Thêm nữa bàn phím ‘cánh bướm’ vốn nhiều rủi ro của các dòng laptop Macbook từ 2015-2019 đã được thay thế để cải thiện độ an toàn. Cho dù nó không được nhẹ như những con Macbook khác, nhưng điều này cũng không làm ảnh hưởng lắm hiệu năng tuyệt vời mà Apple mang lại. Khả năng đặc biệt khác là bạn có thể custom nó, vốn không thường thấy ở các laptop Macbook. Nếu bạn là lập trình viên đang làm việc với các ngôn ngữ bậc cao cũng như phát triển các sản phẩm của Apple.

Màn hình 15” Retina
Bộ xử lý  2.3 GHz 8 lõi Intel Core i9 với Turbo Boost
Pin Lên đến 10 giờ làm việc
Ổ cứng 256GB hoặc 512GB SSD
Touch Bar / ID Touch Bar và Touch ID
Trọng lượng 1.83 kg

 

30. Dell G3 15 3590


Cỗ máy được hoàn thiện với các yêu cầu chính xác và khắt khe nhất từ những lập trình viên full stack. Từ bộ vi xử lý mới nhất cho tới card đồ họa rời mạnh mẽ làm cho từng khoảnh khắc trở nên sống động và chân thực hơn. Laptop Dell G3 15 3590 này là 1 trong những laptop lập trình mạnh mẽ nhất trong danh sách này. Ngoài ra quạt kép được tích hợp cũng mang lại trải nghiệm làm việc hàng nhiều giờ liền mà hệ thống vẫn làm việc tốt.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1920 x 1080 
Bộ xử lý  2.2 GHz Intel Core i7
RAM 8GB RAM 4
Ổ cứng 512 SSD  
GPU  NVIDIA GeForce GTX 1650 4GB GDDR5
Kết nối không dây 802.11 ac, Bluetooth 4.2


Kết luận

Nếu bạn đang làm công việc như code iOS, Android, Unix hay lập trình web, Macbook rõ là 1 lựa chọn rất phù hợp. Hãy lưu ý rằng hầu hết các laptop lập trình tốt nhất đều rất ít khả năng nâng cấp RAM hay ổ cứng. Hãy chọn cấu hình phù hợp và tương thích để phục vụ bạn trong nhiều năm tới.

Nếu bạn chọn giữa việc RAM cao hay nhiều bộ nhớ hơn thì hãy nên chọn RAM, vì bạn có thể sử dụng bộ nhớ ngoài thông qua cổng USB nhưng RAM thì không, nhất là các laptop Macbook.

Nếu bạn nghĩ Windows sẽ phù hợp với mình hơn (vì nhu cầu lẫn mức giá phù hợp) hãy xem xét chọn những lựa chọn như Dell XPS hay Lenovo ThinkPad.

Đây đều là những laptop lập trình ưa chuộng bởi hầu hết các lập trình viên và được sử dụng như các cỗ máy cơ động, mạnh mẽ, bền bỉ và 1 vài con laptop còn có thể nâng cấp được. Thinkpad thật ra cũng khá thân thiện với Unix và bạn có thể chạy Mac OS X trên nó bằng Hackintosh.

Danh sách 30 laptop lập trình tốt nhất cho lập trình viên năm 2023 đến đây là hết rồi, hi vọng danh sách này sẽ giúp cho các bạn lập trình viên tìm được chiếc laptop ưng ý cho công việc của mình cũng như các bạn sinh viên đang tìm mua laptop cho việc học lập trình của mình trong tương lai. 

Tổng hợp từ Bytescout.

30 laptop lập trình tốt nhất cho lập trình viên (Phần 2)

30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)

Bạn có đang tìm cho mình 1 laptop lập trình?

Thực sự với cùng mức giá thì 1 con máy bàn lúc nào cũng mạnh và bền hơn so với 1 chiếc laptop, nhưng nói về tính linh hoạt và tiện lợi cho học tập và làm việc trong thời đại này thì việc sở hữu 1 con laptop với cấu hình phù hợp cho lập trình luôn là ưu tiên hàng đầu.

Các bạn có thể xem Phần 1 của 30 laptop lập trình tốt nhất cho lập trình viên năm 2023 tại đây nhé!

11. Acer Chromebook CB515-1HT


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Acer Chromebook CB515-1HT là 1 trong những laptop lập trình tốt nhất. Vì không có khe hở không khí, cho phép các lập trình viên trải nghiệm độ rõ nét của màn hình được cải thiện ngay cả dưới ánh mặt trời. Điều tuyệt nhất về laptop này là nó có bộ xử lý 2.48GH vừa đủ tốt cho làm việc với nhiều ngôn ngữ lập trình như C, C++ và các framework như ASP.NET. Nếu bạn đang làm việc với những ứng dụng vừa và nhỏ thì đây chính là laptop hoàn hảo cho bạn.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1366 x 768
Độ phân giải màn hình tối đa 1366 x 768
Bộ xử lý 1.6 GHz Celeron D Processor 360
RAM 2 GB DDR3 SDRAM
Tốc độ bộ nhớ 1600 MHz
Ổ cứng 256 SSD
Bộ đồng xử lý đồ họa HD Graphics 400
Nhãn hiệu chipset Intel
Mô tả card Tích hợp
Kết nối không dây 802.11 bgn, Bluetooth
Thời lượng pin trung bình 7 tiếng


Những tính năng đặc biệt của Acer Chromebook CB515-1HT:

Intel® Pentium® (N4200, 1.10 GHz, 2 MB) và 4 GB LPDDR4 RAM làm cho laptop này trở nên lý tưởng cho những lập trình viên lập trình ngôn ngữ cấp thấp, cũng như cho các lập trình viên bảo mật. 

– Ổ 256GB SSD cung cấp đầy đủ bộ nhớ cho nhu cầu lập trình cấp thấp, trong khi màn hình 15,6”, 1366 x 768 giúp các lập trình viên xem và debug code của mình 1 cách dễ dàng.

Laptop Acer Chromebook CB515-1HT cung cấp công năng phù hợp cho những lập trình viên làm việc trong lĩnh vực ngôn ngữ máy, hay ngay cả những lập trình viên WordPress. Nếu bạn đang tìm 1 laptop cân bằng tính cơ động, công năng và màn hình sắc nét, laptop Acer Chromebook CB515-1HT sẽ là 1 lựa chọn hoàn hảo.

12. Lenovo IdeaPad L340 (15.6”, AMD)


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)
Đây là 1 trong những laptop lập trình tốt nhất của hãng Lenovo. Với màn hình 15.6” AMD Ryzen™ 5 3500U và bộ nhớ 8GB cùng ổ cứng 256GB. Điểm đặc biệt khác của laptop này là nó có 8GB DDR4 SDRAM và có thể nâng cấp lên tới 16GB, vốn không phải laptop nào cũng có chức năng nâng cấp như vầy.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1366 x 768
Bộ xử lý 2.7 GHz AMD A-Series
RAM 8 GB DDR3 
Ổ cứng 1 TB Hydrib (SSD + HDD)
Bộ đồng xử lý đồ họa Intel HD Graphics 500
Nhãn hiệu chipset amd
Mô tả card Tích hợp
Số cổng USB 2.0 1
Số cổng USB 3.0 2
Thời lượng pin trung bình 5 tiếng


Những tính năng nổi bật của Lenovo IdeaPad L340:

– 2.60GHz, CPU AMD Ryzen™ 3 3200 U và có thể ép xung lên tới 3.50GHz, và DDR4 8GB 2400MHz RAM, rất phù hợp cho các lập trình viên Big Data hay nhà khoa học dữ liệu.

– Ổ 1TB HDD 5400 RPM cung cấp dung lượng dồi dào trong khi CPU tích hợp mang đủ công năng mà vẫn không quá đắt.

Lenovo IdeaPad L340 khá lý tưởng cho các lập trình viên đòi hỏi tốc dộ khi phân tích số lượng lớn dữ liệu. Các dev sử dụng ngôn ngữ SQL, Python, Java hay những ai cần phải xử lý kỹ thuật data processing như MapReduce, Spark và Hadoop.

13. MSI GT70 DOMINATOR DRAGON


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Với Intel Core i7-4810MQ và bộ xử lý 2.7GHz giúp laptop này lọt vào danh sách những laptop lập trình tốt nhất. Nó còn đi kèm 8GB DDR3L RAM và 1TB 7200 rpm Hard Drive với màn hình 17.3” nữa.

Đây là 1 máy tính tuyệt diệu cho các lập trình viên full-stack. Tuy có hơi nặng nề, nhưng nó khá ổn và có thể sánh ngang 1 phần nào đó với các máy PC cho những lập trình viên hay đi đây đi đó mà vẫn thích có 1 cỗ máy mạnh mẽ.

Kích cỡ màn hình 17.3”
Độ phân giải màn hình 1920 x 1080
Bộ xử lý 2.8 GHz Intel Core i7
RAM 8 GB DDR3L
Tốc độ bộ nhớ 1600 MHz
Ổ cứng 1 TB SATA
Bộ đồng xử lý đồ họa NVIDIA GeForce
Nhãn hiệu chipset NVIDIA
Mô tả thẻ Tích hợp
Kết nối không dây 802.11n
Số cổng USB 2.0 2
Số cổng USB 3.0 3


Những tính năng nổi bật của MSI GT70 DOMINATOR DRAGON:

– Với 2.8 GHz Intel Core i7-4810MQ và 8GB DDR3L RAM cho việc xử lý và output dữ liệu nhanh chóng, laptop này là 1 lựa chọn tốt cho những lập trình viên full-stack.

– 1TB 7200 RPM HDD cung cấp dung lượng lưu trữ dồi dào và truy cập dễ dàng, trong khi màn hình 17.3” với độ phân giải 1920 x 1080 đảm bảo đủ không gian để có thể xem nhiều cửa sổ cùng lúc. 

– GPU NVIDIA GeForce GTX 780M làm cho nó là 1 lựa chọn tuyệt vời cho các lập trình viên game (và cả các game thủ) để phát triển và test code của mình.

Laptop MSI GT70 DOMINATOR DRAGON được thiết kế cho các lập trình viên theo đuổi hiệu năng và đảm bảo luôn tính cơ động. Chúng tôi khuyến nghị nó cho những lập trình viên game, lập trình viên đồ họa và cả dev full-stack nữa!

14. Asus ROG G703GX-XS98K


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Nếu nói riêng về nhãn hiệu Asus, thì đây chính là laptop Asus lập trình tốt nhất! Được trang bị bộ xử lý Gen 8 Intel Core i9-8950HK Coffee Lake Hexa Core và card đồ họa NVIDIA GeForce RTX 2080 với 8GB GDDR6, đây là 1 laptop rất tuyệt cho những lập trình viên làm việc trong lĩnh vực Big Data.

Tên nhãn hiệu ME2 MichaelElectronics2
Series ASUS ROG G703GX-XS98K
Nền tảng phần cứng PC
Hệ điều hành Windows 10
Trọng lượng 4.7 kg
Kích cỡ sản phẩm
(L x W x H)
12.5 x 16.7 x 2 
Nhãn hiệu bộ xử lý Intel
Số nhân 6
Loại bộ nhớ SODIMM
Ổ cứng SSD


Tính năng nổi bật của Asus ROG G703GX-XS98K

– Gen 8 Intel i9-8950HK CPU và 128GB RAM cung cấp công năng tính toán siêu hạng đủ để cạnh tranh với các máy tính bàn.

– NVIDIA GeForce RTX 2080 GPU, màn hình 17.3”, độ phân giải 1920 x 1080 và 1.5TB PCle SSD làm cho nó render hình ảnh 1 cách dễ dàng.

– Với những lập trình viên yêu cầu công năng tính toán tối đa, engine đồ họa mạnh mẽ và màn hình rộng, chiếc ASUS ROG G703GX-XS98K này sẽ cung cấp tất cả những điều đó cho bạn.

Nó còn đi kèm nhiều cổng USB, thẻ Giga-speed Ethernet và thời lượng pin khá ổn lên tới 7 giờ đồng hồ. Dù bạn là 1 lập trình viên đồ họa, lập trình viên front-end hay lập trình viên Big Data, chiếc laptop Asus ROG G703GX-XS98K này dư sức đáp ứng những nhu cầu của bạn.

15. HP Pavilion Gaming – 17-cd0095nr


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Với những ai có điều kiện kinh tế khiêm tốn, chiếc laptop này khá phù hợp với nhu cầu của bạn vì nó là chiếc laptop lập trình với mức giá tốt nhất. 1 laptop lý tưởng cho các coder, nhất là những lập trình viên Python hay SQL. Mang bộ xử lý Gen 9 Intel® Core™ i7-9750 và DTS Studio Sound với loa kép mang lại trải nghiệm cho người sử dụng âm thanh chất lượng cao và chân thật. 

Kích cỡ màn hình 17.3”
Độ phân giải màn hình tối đa 1600 x 900
Bộ xử lý  2.7 GHz Intel Core i7
RAM 8 GB SDRAM
Tốc độ bộ nhớ 2133 MHz
Ổ cứng 1 TB Mechanical 
Bộ đồng xử lý đồ họa  Intel HD Graphics 620
Nhãn hiệu chipset Intel
Mô tả thẻ Tích hợp
Kết nối không dây 802.11.b, 802.11.g, 802.11.n
Số cổng USB 2.0 2


Tính năng nổi bật của HP Pavilion Gaming – 17”-cd0095nr:

– Tốc độ siêu nhanh lên tới 4.9 Ghz nhờ vào CPU Intel® Core™ i7-10510U, RAM 12GB DDR4-2666 làm cho nó dư sức đáp ứng nhu cầu viết code cho các lập trình viên front-end, lập trình viên web hay lập trình viên trung cấp.

– Với ổ SSD 256GB M.2, các lập trình viên có thể lưu code của mình mà không sợ hết dung lượng và với màn hình 17.3”, độ phân giải 1600 x 900 sẽ giúp cho bạn không cần phải gắn thêm monitor nếu thực sự không cần thiết.

– The Intel® UHD Graphics cũng khá mạnh mẽ để render giao diện người dùng 1 cách dễ dàng và nhanh chóng, rất thích hợp cho các dev mobile, dev web và dev front-end.

Tóm lại, chiếc laptop HP Pavilion Gaming – 17”-cd0095nr cung cấp sự cân bằng giữa hiệu năng, tính cơ động với mức giá vừa phải. Với những lập trình viên không cần phải render hình ảnh quá nặng nề và mong muốn hiệu năng tính toán nhiều hơn cho laptop của mình, thì chiếc HP này sẽ đáp ứng cho bạn đầy đủ nhu cầu code và render của bạn.

16. Lenovo IdeaPad L340 15” Gaming

30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)
Lenovo Ideapad khá đáng kinh ngạc khi nó có thể vận hành tốt Linux cho những lập trình viên làm việc cùng Oracle lẫn Linux. Chiếc laptop này khá lý tưởng cho những người làm việc trong vai trò Quản trị viên Cơ sở dữ liệu. Và điều tuyệt vời hơn về nó chính là mức giá hợp lý cũng như là 1 trong những laptop lập trình rẻ nhất trong danh sách những laptop lập trình tốt nhất này.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình tối đa 1366 x 768
Bộ xử lý  1.6 GHz Intel Core i5
RAM 8 GB DDR4
Ổ cứng Ổ Hydrid 1TB (SSD + HDD)
Nhãn hiệu chip  Intel
Mô tả card Tích hợp
Loại kết nối không dây 802.11.ac
Số cổng USB 3.0 2


Những tính năng nổi bật của Levono IdeaPad L340 15”

– CPU 7 GHz Intel® Core™ i7-9750H và GPU NVIDIA® GeForce® GTX 1050 cho phép laptop xử lý và debug code siêu nhanh.

– 8GB DDR4 2400MHz RAM cùng với 128GB SSD cho phép các lập trình viên làm việc đa tác nhiệm cùng lúc cũng như lưu trữ và truy cập code của mình 1 cách dễ dàng.

– Màn hình 17.3” với độ phân giải 1600 x 900 giúp bạn xem việc mô phỏng lẫn xem 2 – 3 cửa sổ 1 cách thoải mái.

Laptop Lenovo IdeaPad L340 được thiết kế dành cho các lập trình viên ở mức độ trung cấp, lập trình viên CRM (Customer Relationship Management hay Quản lý mối quan hệ Khách hàng) và lập trình viên DevOps. Nó cung cấp cho bạn sự cân bằng hoàn hảo giữa hiệu năng và giá cả, nhờ vào CPU CPU 7 GHz Intel® Core™ i7-9750H và GPU NVIDIA® GeForce® GTX 1050.

Nếu bạn là 1 lập trình viên mong muốn sự cân bằng giữa đồ họa và hiệu năng tính toán, chúng tôi nghĩ Lenovo IdeaPad L340 khá phù hợp với tiêu chí của bạn.

17. Dell XPS 13 Touch mới


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Laptop Dell XPS 13 Touch hay Dell XPS 9370 như 1 ngôi sao sáng về phần thiết kế vốn mang tất cả những nền tảng thiết yếu của việc lập trình / coding trong 1 chiếc máy tính đến mọi lập trình viên. 1 sản phẩm đáng kinh ngạc với vẻ ngoài bắt mắt và khá gọn nhẹ. Khi nói riêng về Dell, XPS 13 Touch chính là laptop lập trình mới tốt nhất của họ.

Kích cỡ màn hình 13.3”
Độ phân giải màn hình 3840 x 2160
Độ phân giải màn hình tối đa 3840 x 2160
Bộ xử lý  4 GHz Intel Core i7
RAM 16 GB SDRAM DDR3
Tốc độ bộ nhớ 2133 MHz
Ổ cứng 512 GB SSD
Bộ đồng xử lý đồ họa Intel HD Graphics
Nhãn hiệu chip  Intel
Mô tả card Tích hợp
Loại kết nối không dây 802.11.ac, Bluetooth
Số cổng USB 2.0 1


Những tính năng nổi bật của Laptop Dell XPS 13 Touch / Dell XPS 9370

– Màn hình 13.3” với độ phân giải 3840 x 2160 cho các lập trình viên cái nhìn sắc nét để xem code của mình hay đồ họa mà không quá ảnh hưởng đến tính linh động của laptop.

– Với ổ SSD 512 GB PCle, các lập trình viên có thể lưu tất cả các dự án của mình trong 1 chiếc laptop mà không cần phải lo lắng về việc làm máy chạy chậm đi.

Laptop Dell XPS 13 Touch / Dell XPS 9370 khá lý tưởng cho những bạn lập trình viên cần hiệu năng tính toán mà vẫn gọn nhẹ. Cho các lập trình viên desktop (những người với công việc chính là code ứng dụng phần mềm chạy trên các hệ điều hành vi tính), lập trình viên hệ nhúng hay lập trình viên bảo mật, con laptop này sẽ là 1 lựa chọn tốt.

CPU 4 GHz Intel Core và 16 GB RAM LPDDR3 2133MHz bên cạnh GPU Intel UHD Graphics 620 cung cấp tất cả hiệu năng tính toán và render cần thiết cho các dự án vừa và nhỏ, vốn không phải render quá nặng nề.

18. GIGABYTE AERO 15-X9-RT5P

30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)
Nếu bạn là 1 coder đang tìm 1 laptop cho việc lập trình game, chiếc laptop này có mọi thứ mà bạn cần. Với màn hình LCD mỏng 15.6” LG FHD 144Hz, độ phân giải 1920 x 1080 IPS Anti-Glare và X-Rite Pantone Certified Display giúp việc lập trình game của bạn sẽ được thể hiện tốt nhất. Nói cách khác, nó là 1 trong những con laptop lập trình game tốt nhất nằm trong danh sách này.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1920 x 1080
Độ phân giải màn hình tối đa 1920 x 1080
Bộ xử lý  4.1 GHz Intel Mobile CPU
RAM 16 GB SO-DIMM
Ổ cứng 1TB M.2 PCle SSD
Bộ đồng xử lý đồ họa NVIDIA GeForce
Nhãn hiệu chip  NVIDIA
Mô tả card Tích hợp
Kích cỡ RAM của card đồ họa 8 GB
Loại kết nối không dây 802.11.ac, Bluetooth
Số cổng USB 3.0 3


Những tính năng nổi bật của GIGABYTE AERO 15-X9-RT5P:

CPU 4.1 GHz Intel i7-8750H và 16GB 2666MHz RAM cung cấp hiệu năng tính toán khá tuyệt, nhất là cho những lập trình viên bảo mật.

– Ổ 1TB M.2 PCle SSD mang cho bạn dung lượng lưu trữ dồi dào, thứ mà các lập trình viên backend hay lập trình viên đồ họa luôn mong muốn.

– Với GPU NVIDIA GeForce RTX 2070 và màn hình 15”, độ phân giải 1920 x 1080 còn giúp cho laptop này render và hiển thị đồ họa nặng nề 1 cách đơn giản.

Nếu bạn cần cả hiệu năng tính toán lẫn xử lý đồ họa cao, chiếc laptop GIGABYTE AERO 15-X9-RT5P sẽ làm bạn hài lòng. Hơn nữa màn hình 15” cũng làm cân bằng nhu cầu gọn nhẹ lẫn màn hình to vừa phải của nó.

19. AORUS 15 (RTX 20 Series)


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Khi nói về laptop tốt nhất có khả năng quản lý dễ dàng mọi sản phẩm lập trình ảo và hơn nữa là xử lý các mirror workstation (máy trạm nhân bản). Sở hữu bộ xử lý khủng, giúp nó lọt danh sách 1 trong 30 laptop lập trình tốt nhất trong năm nay.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1920 x 1080
Độ phân giải màn hình tối đa 1920 x 1080
Bộ xử lý  4.1 GHz Intel Mobile CPU
RAM 16 GB SO-DIMM
Ổ cứng Ổ Hydrid 2 TB (SSD + HDD)
Bộ đồng xử lý đồ họa NVIDIA GeForce
Nhãn hiệu chip NVIDIA
Mô tả card Tích hợp
Kích cỡ RAM đồ họa 8 GB
Loại kết nối không dây 802.11.ac, Bluetooth
Số cổng USB 3.0 4


Những tính năng nổi bật của AORUS 15 (RTX 20 Seri):

– CPU 4.1 GHz Intel® Core™ i7-8750H giúp cho những lập trình viên cần chạy code nặng đô mà không làm ảnh hưởng đến hiệu năng của laptop.

– GPU NVIDIA® GeForce RTX™ 2070/60 GDDR6 cung cấp hiệu năng vượt trội nên không còn vấn đề khi bạn phải render hình ảnh nặng ký.

– RAM SAMSUNG® DDR4 2666MHz có thể nâng cấp lên tới 64 GB, cho phép bạn dư dả dung lượng để làm việc đa tác vụ.

Với những lập trình viên ngôn ngữ bậc cao, lập trình viên game hay lập trình viên đồ họa, chiếc laptop này cung cấp dồi dào tất cả những gì bạn cần khi nói về công năng tính toán và xử lý đồ họa. Laptop AORUS 15 RTX 20 Series với khả năng nâng cấp được cũng là 1 tính năng hiếm thấy ở các dòng laptop phổ biến khác.

Với CPU và GPU mạnh mẽ, laptop này có thể xử lý code và render hình ảnh 1 cách trơn tru, cho phép các lập trình viên làm việc được hiệu quả hơn bao giờ hết.

20. Razor Blade 15 RTX


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 2)Được hỗ trợ mạnh mẽ bởi bộ xử lý Gen 9 Intel Core i7-9750H 6 lõi và lên tới 4.1 GHz, chiếc laptop này có mọi đặc điểm hữu ích và cực kỳ thích hợp cho các lập trình viên blockchain, nhà nghiên cứu bảo mật thông tin, lập trình viên game hay những dev Java / Swift nữa.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình tối đa 1920 x 1080
Bộ xử lý  4.1 GHz
RAM 16 GB DDR4
Ổ cứng Ổ SSD
Bộ đồng xử lý đồ họa NVIDIA GeForce
Nhãn hiệu chip NVIDIA
Mô tả card Tích hợp
Kích cỡ RAM đồ họa 6 GB
Số cổng USB 3.0 3


Những tính năng nổi bật của Razer Blade 15 RTX:

– CPU 4.1 GHz Intel Core i7-8750H cho phép laptop này có thể tính toán bất kỳ code nào mà các lập trình viên trong mọi lĩnh vực có thể gõ vào nó.

– RAM 16GB và ổ SSD 512GB cũng đảm bảo cho bạn làm việc thoải mái với dung lượng ổ cứng dồi dào.

– GPU NVIDIA GeForce RTX 2080 Max-Q cùng với màn hình 15.6” và hiển thị 1920 x 1080 sẽ giúp các lập trình viên đồ họa cũng như các lập trình viên khác nhiều công năng render để làm việc mượt mà.

Laptop Razer Blade 15 RTX được thiết kế để cung cấp tốc độ tính toán, render hình ảnh mạnh mẽ và dung lượng ổ đĩa dồi dào.

Cho những bạn lập trình viên hay phải đi đây đi đó, hay phải mang theo laptop đến trường để học tập, con laptop này vừa mạnh mẽ vừa gọn nhẹ để giúp bạn làm việc và học tập được thoải mái và tiện lợi hơn.

Kết luận

Đến đây đã kết thúc phần 2 của danh sách 30 laptop lập trình tốt nhất cho lập trình viên của năm 2023 rồi, các bạn có thể xem phần cuối tại đây nhé!

Hi vọng danh sách này sẽ giúp cho các bạn lập trình viên tìm được chiếc laptop ưng ý cho công việc của mình cũng như các bạn sinh viên đang tìm mua laptop cho việc học lập trình của mình trong tương lai.

Tổng hợp từ Bytescout.

Xem lại Phần 1 – Lựa chọn laptop lập trình và Phần 3 tiếp theo:

  30 laptop lập trình tốt nhất cho lập trình viên (Phần 1)

30 laptop lập trình tốt nhất cho lập trình viên (Phần 1)

30 laptop lập trình tốt nhất cho lập trình viên năm 2020

Bạn có đang tìm cho mình 1 laptop lập trình? Lập trình trên máy tính không phải lúc nào cũng chỉ về thuật toán, lưu đồ flowchart hay code, bạn còn phải hiểu về phần cứng nữa. Khả năng viết code và giải quyết các vấn đề bằng 1 con máy tốt cũng quan trọng không kém.

Thực sự với cùng mức giá thì 1 con máy bàn lúc nào cũng mạnh và bền hơn so với 1 chiếc laptop, nhưng nói về tính linh hoạt và tiện lợi cho học tập và làm việc trong thời đại này thì việc sở hữu 1 con laptop với cấu hình phù hợp cho lập trình luôn là ưu tiên hàng đầu.

Code tốn khá nhiều chất xám, chắc hẳn bạn sẽ luôn muốn chuyển hóa những ý tưởng thành những dòng code mà không phải chờ lâu đúng không, nói tóm lại: 1 chiếc laptop hoàn hảo vừa tăng tốc các tác vụ và quá trình làm việc mà còn tăng năng suất làm việc của bạn 1 cách hiệu quả hơn.

Để hiểu rõ laptop nào tốt nhất cho việc lập trình, bạn nên hiểu rõ được mình đang cần gì. Những cái nào là quan trọng mà tất cả các lập trình viên nên biết trước khi họ chi trả cho 1 “con laptop” để lập trình.

Những lưu ý chính khi lựa chọn laptop

Phần cứng

Cho việc lập trình, bạn cần cân nhắc ÍT NHẤT 256GB SSD. Tuy nhiên, nếu bạn là 1 lập trình viên chuyên nghiệp thì ổ cứng sẽ 1TB tốt hơn nhiều. Tốc độ là điều tất yếu cho việc compiling và testing, đặc biệt là với các dự án lập trình lớn.

Bạn có thể tiết kiệm tiền bằng cách chọn lựa mua ổ cứng nhỏ hơn và rồi dùng ổ cứng rời thông qua cổng USB. Bạn cũng có thể chạy máy ảo từ các ổ cứng rời, chỉ có điều là phải cắm và rút  cho mỗi lần sử dụng.

Nếu bạn phải lựa chọn giữa ổ SSD nhỏ hơn (với công nghệ mới) và ổ HDD lớn hơn (công nghệ cũ) thì hãy chọn ngay SSD (viết tắt của Solid State Drives). Các ổ SSD nhanh hơn rất nhiều và bạn có thể tăng dung lượng với ổ cứng rời sau đó.

RAM

Đối với các lập trình viên, bộ nhớ RAM cũng cần thiết như việc cơ thể cần nước vậy! RAM tiêu chuẩn của 1 laptop thường chỉ trong khoảng 4GB NHƯNG bạn nên cân nhắc ít nhất 8GB RAM sẵn có trong máy (tối thiểu cho việc lập trình) cho việc lập trình cơ bản.

Nếu bạn làm việc trong những dự án chuyên nghiệp thì nên chọn ít nhất 16GB hay thậm chí là 32GB RAM để làm việc ổn định trong 2 hay 3 năm tới.

Dù gì thì với 1 kỹ sư phần mềm, 1 laptop tốt để lập trình thì tối thiểu luôn là 8GB RAM, nhưng để có điều kiện làm việc tốt nhất thì các kỹ sư thường chọn nhất là tối thiểu 16GB.

Tốn nhiều tiền hơn nhưng cuối cùng thì nó cũng chỉ giúp cho công việc lập trình của bạn được tốt hơn thôi mà, và công việc thuận lợi rồi thì 8 hay 16 cũng chỉ là những con số!

Nếu bạn phải lựa chọn giữa RAM lớn nhưng ít dung lượng ổ cứng hơn thì bạn nên chọn việc RAM lớn hơn! Với ổ cứng ít dung lượng bạn luôn luôn có thể dùng ổ cứng rời HDD hay SSD thông qua cổng USB sau đó.

Nhưng bạn sẽ không thể tăng RAM trong hầu hết các trường hợp vì không phải laptop nào cũng có khả năng này. Và cách duy nhất để nâng cấp RAM, trong trường hợp này không còn cách nào khác là phải mua 1 laptop khác.

CPU (bộ xử lý) và Tốc độ xử lý

Yếu tố chính để so sánh với sức mạnh xử lý chính là tốc độ compiling. Tuy nhiên, đây chỉ vấn đề thực sự nếu bạn đang phải làm 1 dự án lớn. Trong những trường hợp khác, bạn chỉ cần có 1 cỗ máy để làm những việc cần thiết. Laptop với bộ xử lý multi-core i7 hay i9 luôn là sự lựa chọn tốt nhất cho việc lập trình với những công nghệ mới năm 2020.

Nếu bạn đang phải lựa chọn giữa RAM hay CPU nhanh hơn, hãy cứ chọn RAM!

Khả năng sửa chữa

Sẽ ra sao nếu bạn cần thêm RAM hay thay thế ổ cứng với 1 cái lớn hơn? Khả năng sửa chữa cũng là 1 yếu tố quan trọng khác nếu bạn hiểu rằng mình sẽ cần nâng cấp cho laptop của mình trong 1 hay 2 năm tới. Không phải tất cả laptop đều có khả năng này. 1 số cái (điển hình như Apple Macbook và nhiều cái khác) thì không thể thay thế ổ cứng hay RAM.

Apple Macbook khá đắt tiền để sửa chữa 1 khi bạn đã hết bảo hành, 1 ví dụ đơn giản: thay thế 1 cái nút bàn phím bị hỏng có thể tốn từ 500$ tới 700$ vì bạn sẽ phải thay thế gần 1 nửa laptop. Trong khi đó thì 1 vài mẫu Lenovo Thinkpad chỉ tốn khoản 100$ để thay thế toàn bộ bàn phím.

Kích cỡ màn hình

Nếu bạn không phải giám sát 1 dự án lớn nào thì hãy chỉ cần chọn màn hình với kích cỡ tối thiểu là 13.3”. Nhưng càng to thì càng đã mắt. 14” tới 16” sẽ khá thoải mái cho việc lập trình trong khi 17” thì có vẻ hơi quá đà vì kích cỡ và trọng lượng cũng có thể là 1 vấn đề.

Hãy chọn màn hình với độ phân giải cao nhất có thể bởi vì bạn sẽ cần màn hình rộng rãi để làm việc với code, đọc documentation, chạy máy ảo, và còn nhiều nữa…

Chất lượng màn hình

Làm việc với các màn hình laptop dựa trên công nghệ FN có thể khá căng thẳng bởi vì màu sắc sẽ thay đổi mỗi khi bạn đổi góc nhìn vào màn hình.

Hãy chọn IPS hay các công nghệ tương tự (như Retina trên Macbook) nếu có thể.

Bàn phím 

Bàn phím thực ra rất, rất quan trọng! Tôi mạnh dạn khuyên bạn nên có cơ hội xem qua các laptop trực tiếp và thử gõ lên bàn phím của nó ở 1 cửa hàng thực sự trước khi mua. Nếu không hãy nhìn vào các mẫu cụ thể tương tự như laptop bạn đã chọn bởi vì vài mẫu cùng dòng cũng có thể có cấu tạo bàn phím khác nhau.

Bên cạnh, chọn 1 phiên bản bố trí cho thị trường Mỹ cũng nên được lưu ý, vì các shortcut sẽ có sẵn ở nơi bạn quen dùng và dễ dàng làm việc hơn. Ví dụ: nếu bạn sử dụng định dạng Markdown thì việc có phím “`” ngay dưới phím “esc” sẽ dễ dàng hơn nhiều so với việc nó nằm ở đâu khác trên bàn phím cho các phiên bản không thuộc thị trường Mỹ.

1 lưu ý quan trọng khác về các laptop Apple Macbook là về bàn phím “cánh bướm” được sử dụng trong các mẫu sản xuất từ 2015 tới 2019 của họ. Những phím này có những vấn đề khá nghiêm trọng, nó dễ hỏng và rõ ràng là không thể sửa được.

Dù Apple đã đề nghị việc thay thế miễn phí cho những bàn phím này, vốn liên quan tới việc thay thế phần topcase và sẽ làm bạn tốn khoản 500$ (hãy xem thêm tại đây để biết thêm chi tiết.)

Bởi vì thế nếu bạn đang tìm mua 1 Macbook đã qua sử dụng, hãy cẩn thận và nhìn tổng quát, bạn sẽ muốn tránh những Macbook cũ với bàn phím ‘cánh bướm’ trừ khi bạn đảm bảo rằng nó sẽ được thay thế miễn phí bởi Apple.

Về các Macbook ra mắt sau năm 2020 sẽ không phải lo nữa khi nó trở về bàn phím “cắt kéo” được các nhà cung cấp khác sử dụng rộng rãi cũng như chứng minh độ tin cậy và ổn định sau nhiều năm.

>> Đọc thêm: Có nên mua Macbook học lập trình?

Danh sách 30 laptop lập trình tốt nhất cho lập trình viên

1. Apple Macbook Pro 16” M2 2023

Apple Macbook Pro 16” M2 2023

MacBook Pro 16 inch M2 Pro 2023 là chiếc máy tính xách tay mạnh mẽ nhất từ trước đến nay của Apple. Nó được trang bị chip M2 Pro mới, có hiệu suất nhanh hơn 13% so với chip M1 Pro và nhanh hơn 45% so với chip M1. MacBook Pro 16 inch cũng có màn hình Liquid Retina XDR tuyệt đẹp, thiết kế sang trọng, tỉ mỉ đến từng chi tiết. Một thiết bị vô cùng phù hợp cho anh em lập trình viên.

Kích thước màn hình 16.2 inch
Độ phân giải màn hình Liquid Retina XDR display (3456 x 2234)
CPU Apple M2 Pro
RAM 16 GB, tối đa 64 GB
Ổ cứng 512 GB SSD, tối đa 8 TB 

Các tính năng nổi bật của Apple Macbook:

– Hiệu năng: Apple Macbook Pro được trang bị con chip M2 sản xuất trên tiến trình 5 nm, đi kèm với một CPU 12 nhân và băng thông bộ nhớ 200 GB/s. Nhờ vào hiệu năng cao hơn 20% so với thế hệ trước, chiếc vi xử lý này giúp MacBook vận hành mượt mà cho mọi tác vụ. Nó có thể chạy máy ảo Windows và Linux mượt mà và phần hiệu năng vẫn rất tuyệt. 

– Màn hình: MacBook Pro 16 inch M2 2023 được trang bị màn hình Liquid Retina XDR tuyệt đẹp, có độ phân giải 3456 x 2234 pixel và độ sáng lên đến 1600 nits. Màn hình này có màu sắc sống động, độ tương phản cao và góc nhìn rộng. Nó hoàn hảo cho những ai chuyên về thiết kế web.

– Dung lượng pin: MacBook Pro 16 inch M2 2023 có thời lượng pin lên đến 21 giờ phát lại video. Điều này cao hơn đáng kể so với thời lượng pin của MacBook Pro 16 inch M1, là 17 giờ.

– Thiết kế: MacBook Pro 16 inch M2 2023 có thiết kế đẹp và sang trọng. Nó được làm từ các vật liệu cao cấp như nhôm và kính. Máy có trọng lượng 2,15kg và dày 16,8mm.

Nó còn có khả năng chạy API như Python, Visual Code, C# mượt mà vì nó được dựng trên hệ thống giống như Unix nên bạn sẽ có Terminal vốn cũng hỗ trợ hầu hết các câu lệnh Unix. Đây cũng là laptop tốt nhất cho lập trình nếu bạn đang làm về các ứng dụng iOS hay các ứng dụng / script nền tảng Unix.

Tìm kiếm các vị trí tuyển dụng IT lương cao nhất cho bạn

2. Levono ThinkPad E590 Notebook 

30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)

Với những bạn đang tìm laptop lập trình với mức giá rẻ thì Levono ThinkPad E590 chính là 1 trong những lựa chọn tốt nhất hiện có. Điều đáng kinh ngạc về laptop này là nó nằm trong những số ít laptop lập trình kèm sẵn combo “16 GB RAM + 1 TB SSD” mạnh mẽ.

Kích cỡ màn hình 15.6” 
Độ phân giải màn hình 1366 x 768
Độ phân giải màn hình tối đa 1366 x 768
Bộ xử lý 2.7+ GHz Intel Core i5
RAM 12GB DDR4 2133
Tốc độ bộ nhớ 2133 MHz
Ổ cứng 1000 GB hydrib_drive 
Bộ đồng xử lý đồ họa Intel HD Graphics 620


Các tính năng nổi bật của Levono ThinkPad:

– 1 laptop lập trình tuyệt vời cho việc lập trình game.

– Card được tích hợp cùng kết nối không dây 802.11 A/C giúp kết nối của nó nhanh hơn.

–  Tốc độ của ổ cứng là 7200 RPM và đó là lý do tại sao tốc độ xử lý của nó thuộc hàng top. 

– Máy ảo khá thân thiện.

– Sự kết hợp đáng kinh ngạc của ổ cứng 128 GB SSD và 1 TB SATA cho phép nó có thể chứa hệ điều hành ở SSD và các tệp dữ liệu khác ở ổ cứng SATA.

Lập trình viên đều mong muốn hiệu năng và tốc độ cao. Chiếc laptop lập trình này có tất cả tính năng tốt nhất và làm cho nó trở thành lựa chọn hoàn hảo cho những dev full-stack. Sự kết hợp của bộ xử lý Interl i5 và DDR4 12 GB RAM cho phép laptop này xử lý việc phát triển ứng dụng, lập trình Hadoop bao gồm game và coding android.

Bộ nhớ bao gồm 128 GB SSD và ổ cứng 1 TB SATA rất cần thiết cho những dev Big Data. Nói tóm lại, chúng ta có thể nói rằng ThinkPad là 1 máy tính lập trình mạnh mẽ trong năm 2020.

3. Dell XPS15


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)Dell XPS15 là 1 thiết kế đặc sắc mà có cơ bản tất cả những thứ cần thiết cho bất kì lập trình viên nào cũng muốn có trong 1 laptop tốt. 1 sản phẩm tuyệt vời khi nói về hiệu năng và tính cơ động. Nó có ổ SSD 1TB lớn hơn để lưu trữ và 16 GB RAM giúp nó có thể lưu các coding repo lớn 1 cách hiệu quả.

Hiệu năng cho mọi I/O operation được tăng lên nhờ SSD, đặc biệt là so với các laptop dùng HDD. Cùng với hiệu năng, laptop này khởi động siêu lẹ.

Các tệp lập trình và chương trình script cần đọc và ghi vào đĩa xử lý nhanh hơn nhiều và các script cũng sẽ compile cũng nhanh hơn trên HDD.

Kích cỡ màn hình 15.6” 
Độ phân giải màn hình tối đa 3840 x 2160
Bộ xử lý 3.8 GHz Core i7-740QM
RAM 32 GB DDR4
Ổ cứng 256 GB SSD
Bộ đồng xử lý đồ họa geforce gtx
Nhãn hiệu chipset NVidia
Mô tả thẻ Tích hợp
Kết nối không dây 802.11 A/C


Những tính năng nổi bật của Dell:

– Sử dụng Bộ xử lý Intel Kaby Lake Core i7-7700HQ Quad Core Gen 7. Với bộ xử lý này, laptop Dell XPS15 gần như hoàn hảo cho những lập trình viên làm về blockchain hay nhà nghiên cứu về lĩnh vực an ninh mạng.

– Đáng tin cậy, cấu hình mạnh và hiệu quả cho tất cả các máy ảo.

– Pin “trâu” ngay cả khi bạn làm đa tác vụ cho việc lập trình.

Laptop Dell XPS15 có tất cả những tính năng tốt nhất và được khuyên dùng bởi đa số lập trình viên blockchain, nhà nghiên cứu bảo mật thông tin, lập trình viên game và những dev Java / Swift.

4. Acer Aspire E15


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)Nếu bạn muốn làm việc cùng Android Studio, Visual Studio hay PostgreSQL 1 cách trơn tru thì Acer Aspire E15 rõ ràng là 1 lựa chọn khá ổn. Với con laptop này bạn có thể làm việc liên tục lên tới 12 tiếng và bộ xử lý i5 Gen 7 bên cạnh 8GB RAM và ổ SSD 256GB chạy nhanh như chớp.

Không những vậy, nó còn sử dụng NVIDIA GeForce 940MX GPU với bộ nhớ video DDR5 2GB vốn cho phép nó xử lý bất kỳ ứng dụng đòi hỏi đồ họa nào. Đối với những dev C# cũng như lập trình viên web thì những tính năng tuyệt vời trong con Acer Aspire E15 này là tất cả những gì bạn cần.

Kích cỡ màn hình 15.6” 
Độ phân giải màn hình tối đa 3840 x 2160
Bộ xử lý 2.5 GHz Intel Core i5
RAM 8 GB DDR SDRAM
Ổ cứng SATA
Bộ đồng xử lý đồ họa NVIDIA GeForce 940MX
Nhãn hiệu chipset NVIDIA
Mô tả thẻ Tích hợp
Kích cỡ card đồ họa 2000 MB
Kết nối không dây 802.11 A/C
Số cổng USB 3.0 2
Thời lượng pin trung bình 12 tiếng


Tính năng nổi bật của Acer Aspire:

– Dùng bộ xử lý Core i5-7200U 2.5 GHz và có thể nâng cấp lên tới 3.1 GHz. Điều này làm cho nó trở thành 1 trong những laptop mạnh nhất để chạy Microsoft Visual Studio hay Android Studio.

– Điều tuyệt vời khác là nó có 2 khe cắm SSD, nếu 1 ổ SSD là không đủ thì tại sao không sử dụng luôn cả 2 nhỉ!

Dù là người mới trong lĩnh vực lập trình hoặc đã là lập trình viên lâu năm, Acer Aspire E15 này sẽ là người bạn tốt đồng hành cùng bạn trên con đường lập trình trong nhiều năm.

5. Microsoft Surface Laptop Pro 9 (Intel Core i5-1245U Gen 12)


Microsoft Surface Laptop Pro 9Microsoft đã cho ra 1 con laptop hoàn hảo với độ hiển thị bắt mắt và cấu hình trên cả tuyệt vời. Dòng laptop Surface Pro là sự lựa chọn tốt cho các lập trình viên Java và MongoDB.

Bên cạnh đó, thời lượng pin của Microsoft Surface Pro 9 cũng lên tới 105.5 giờ sử dụng và bộ xử lý Intel Core Gen 12 mạnh mẽ, vốn giúp bạn chạy các phần mềm desktop 1 cách dễ dàng cũng như đảm bảo quy trình làm việc của bạn được trơn tru và hiệu quả.

Kích cỡ màn hình 13 inch
Độ phân giải màn hình tối đa 2880 x 1920 pixels
RAM 8 GB
Ổ cứng
Hệ điều hành
Windows 11 Pro hoặc Windows 10 Pro
Cổng giao tiếp 2x USB-C với USB 4.0/Thunderbolt 4
1x Surface Connect port
1x Cổng kết nối bàn phím
Thời lượng pin trung bình Khoảng 15.5 giờ sử dụng


Tính năng nổi bật của Microsoft Surface Pro:

– Bộ xử lý i5 và ổ SSD 256 GB phù hợp cho những lập trình viên Android, Swift (cho iOS), Objective C, HTML5, Java và cả C# nữa. 

– 8 GB RAM cực hữu dụng cho các dev làm trong lĩnh vực khoa học dữ liệu và thường xuyên phải sử dụng MATLAB và Python.
– Bộ đồng xử lý Intel Iris và đồ họa HD cũng giúp các coder làm trong lĩnh vực phát triển game mobile hay ứng dụng mobile.

Laptop này còn có bàn phím cảm ứng đọc dấu vân tay cực nhanh và chính xác. Tóm lại Microsoft Surface Pro khá là 1 laptop khá toàn diện.

Tìm việc làm lập trình viên back end lương cao

6. ASUS P-Series P2440UQ-XS71


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)
Laptop ASUS P-Series P2440UQ-XS71 này cực ổn định. Nó có thể chạy liên tục nhiều ngày và không cần phải reboot, và hệ điều hành của nó còn chống crash nữa. Asus P-Series khá lý tưởng cho các lập trình viên C và C++, Linux scripting cho Cron, cơ sở dữ liệu MySQL, dBase và Oracle cũng như phát triển API. Trong danh sách này, đây là con laptop có pin trâu nhất với thời lượng lên tận 18 giờ và có thể xử lý các file lớn 1 cách mượt mà.

Kích cỡ màn hình 14”
Độ phân giải màn hình tối đa 1920 x 1080
Bộ xử lý 2.3 GHz Intel Core i5
RAM 8 GB DDR3L SDRAM
Tốc độ bộ nhớ 1600 z
Ổ cứng 1 TB SATA
Bộ đồng xử lý đồ họa NVIDIA GeForce 940MX
Nhãn hiệu chipset NVIDIA
Mô tả thẻ Tích hợp
Kết nối không dây 802.11 A/C
Số cổng USB 2.0 1
Số cổng USB 3.0 3
Thời lượng pin trung bình 18 tiếng


Tính năng nổi bật của ASUS P-Series:

– Kết hợp tuyệt vời giữa 7th Gen Intel Core i7 7500U 2.7 GHz và bộ xử lý dual-core “Kaby Lake” với 12 GB RAM, 215 GB SSD, cùng card đồ họa Nvidia GeForce 940MX. Thích hợp cho những ai làm việc thường xuyên với các ứng dụng kho dữ liệu.

– Có tới 4 cổng USB. 3 cổng USB 3.0, 1 cổng USB 2.0, 1 cổng HDMI và 1 cổng VGA.

Các API được tạo ra cho từng nền tảng / chức năng và mỗi API sẽ sử dụng ngôn ngữ lập trình phù hợp cho từng nền tảng / thiết bị / site / dịch vụ đó. Nếu bạn đang làm lập trình API, ASUS P-Series là quá ổn.

7. HP EliteBook 840 G5 Notebook PC (Có thể custom)


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)Laptop HP EliteBook 840 G5 Notebook này sẽ phù hợp cho những bạn sinh viên CNTT hay dev fresher với những nhu cầu lập trình ứng dụng cơ bản. Nếu bạn đang code những phần mềm nhẹ nhàng mà không cần yêu cầu card đồ họa quá cao, hoạt động ổ cứng thật nhanh hay đa phần chỉ cần viết code cơ bản / HTML & CSS thì Notebook HP này dành cho bạn. 

Kích cỡ màn hình 15.6”
Độ phân giải màn hình tối đa 1920 x 1080
Bộ xử lý 2.3 GHz Intel Core i5
RAM 8 GB DDR3L SDRAM
Ổ cứng 1 TB SATA
Bộ đồng xử lý đồ họa shared
Nhãn hiệu chipset Intel
Mô tả thẻ Tích hợp
Kết nối không dây 802.11 A/C
Số cổng USB 2.0 2
Số cổng USB 3.0 3
Thời lượng pin trung bình 7.15 tiếng


Tính năng nổi bật của HP Notebook:

– Sử dụng Bộ xử lý 5-6200U 2.3 GHz với turbo boost lên tới 2.8 GHz và thích hợp cho những dev làm việc chủ yếu trên WordPress, phát triển ứng dụng thương mại điện tử (Shopee, Tiki, Lazada…) bên cạnh HTML/CSS hay Liquid.

– Với ổ cứng 1TB 5400RPM vừa đủ cho việc lập trình ứng dụng quy mô vừa và nhỏ.

8. Apple 13.3” Macbook Air


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)Lựa chọn tốt cho những ai cần 1 chiếc laptop gọn, nhẹ và với vẻ ngoài thanh lịch, tinh tế. Nó khá nhẹ, cơ động, và vừa đủ mạnh cho việc lập trình C++ và Liquid. Macbook Air bao gồm ổ SSD 256GB, khe SD card, cổng Thunderbolt 2 . Thiết bị đủ mạnh để bạn viết code và lập trình ứng dụng iOS.

Tuy nhiên, nếu bạn đang làm các ứng dụng iOS quy mô lớn hay Android hoặc là dân thiết kế cần nhiều không gian màn hình thì nên xem xét việc chọn Macbook Pro 16”. Macbook Air chỉ phù hợp cho những lập trình viên viết code nhẹ nhàng như nhà phân tích bảo mật hay sinh viên CNTT đang học lập trình mà thôi.

Kích cỡ màn hình 13.3”
Bộ xử lý 1.8 GHz Intel Core i5
RAM 8 GB DDR3 SDRAM
Ổ cứng Flash Memory Solid State
Bộ đồng xử lý đồ họa Đồ họa tích hợp
Nhãn hiệu chipset Intel
Kết nối không dây 802.11abg, 802.11 A/C, 802.11 a/b/g/n, 802.11A


Tính năng nổi bật của Apple 13.3” Macbook Air:

– Pin siêu mỏng và nhẹ, thời lượng sử dụng lên tới 12 giờ.

– Bộ nhớ 1600MHz LPDDR3 vừa đủ cho hiệu năng tối ưu khi bạn code và lập trình ứng dụng iOS.

– Bộ xử lý 8GHz dual-core Intel Core i5 cung cấp cho các nhà phân tích bảo mật đủ mạnh và nhanh để chạy hệ điều hành Kali Linux trong VMWare.

Cũng giống như các laptop Apple Macbook Pro trong giai đoạn 2015 – 2019, Macbook Air cũng có vấn đề nghiêm trọng với bàn phím như double symbols, phím không hoạt động hay bị kẹt phím, bạn nên cẩn thận khi chọn mua laptop đã qua sử dụng.

9. Asus VivoBook Pro 15 N580


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)

Cung cấp cho bạn Intel Core i7 và 16GB RAM với ổ SSD 512GB SATA 3.0, chiếc laptop này có thể chạy tất cả các sản phẩm ảo được lập trình 1 cách dễ dàng, cũng như chơi được hầu hết những game mới ra mắt gần đây (các game thủ thích điều này).

Bên cạnh đó, nó còn là 1 laptop được thiết kế sắc sảo. Cấu hình quạt kép mang lại khả năng làm mát mạnh mẽ giúp Asus VivoBook Pro 15 N580 đáng tin cậy và bền bỉ.

Kích cỡ màn hình 15.6”
Độ phân giải màn hình 1920 x 1080
Độ phân giải màn hình tối đa 1920 x 1080
Bộ xử lý 2.8 GHz 8032
RAM 16 GB DDR4
Ổ cứng 1000 GB Hydrib Drive
Bộ đồng xử lý đồ họa NVIDIA GeForce GTX1050
Nhãn hiệu chipset NVIDIA GeForce GTX1050
Mô tả thẻ Tích hợp
Kích cỡ RAM Card đồ họa 4 GB
Kết nối không dây 802.11 A/C
Số cổng USB 2.0 2
Số cổng USB 3.0 1


Những tính năng nổi bật của ASUS Vivo Book:

– Với kết nối WIFI dual-band 802.11ac đảm bảo laptop kết nối nhanh chóng và vượt qua bất kỳ sự tắc nghẽn hay nhiễu sóng nào. 

– Tốc độ được cân bằng và cả khả năng lưu trữ rất cần thiết cho những lập trình viên Salesforce.

Asus M570VD-EB54 là 1 laptop thực thụ cho các game thủ kèm theo các thiết bị ưu tú hiệu quả, giúp cho việc lập trình của bạn được dễ dàng. Đó là lý do sao nó nằm trong danh sách này, đặc biệt dành cho các dev với nhiều nhu cầu đa dạng mà không chỉ có mỗi code.

Tìm việc làm lập trình viên front end lương cao

10. Levono ThinkPad X1 Carbon Gen 7 (14”)


30 laptop lập trình tốt nhất cho lập trình viên năm 2020 (Phần 1)Lenovo X1 là 1 laptop phi thường, nhất là cho những lập trình viên sử dụng Linux và Oracle. Bộ nhớ 16GB DDR3 cho phép các lập trình viên công năng đa tác vụ và có thể làm việc trên nhiều coding repo nữa.

Thinkpad cũng là 1 thương hiệu laptop phổ biến với các lập trình viên phần mềm. Nó đi kèm bàn phím tuyệt vời, độ cơ động vừa đủ. Điều quan trọng nhất là Levono cung cấp tới 3 năm bảo hành vốn rất hữu ích với những lập trình viên bận rộn (nếu bạn đặt mua chính hãng trên web).

Kích cỡ màn hình 14”
Độ phân giải màn hình 2560 x 1440
Bộ xử lý 2.6 GHz Core i7 5600U
RAM 16 GB DDR3 SDRAM
Ổ cứng 256 GB (SSD)
Bộ đồng xử lý đồ họa Tích hợp
Nhãn hiệu chipset Intel
Mô tả card Intel HD Graphics 5500
Kết nối không dây 802.11 A/C

Tính năng nổi bật của Levono X1 Carbon:

– Sở hữu 256 GB – M.2 SSD TCG Opal Encryption cung cấp các tính năng bảo mật thực sự rất quan trọng cho các lập trình viên.
– Đồ họa được hỗ trợ tốt bởi độ phân giải full HD và WQHD.
– Laptop có 16GB RAM và ổ cứng SSD 256GB, cung cấp đủ công năng và tính cơ động ở mức giá tốt. 

Kết luận

Bài viết hiện đã khá dài rồi, xin hẹn các bạn phần tiếp theo với 30 mẫu laptop lập trình tốt nhất cho lập trình viên trong năm 2023 nhé!

Các bạn có thể xem Phần 2 của 30 laptop lập trình tốt nhất cho lập trình viên năm 2023 tại đâyphần 3 tại đây nhé!

Hi vọng danh sách này sẽ giúp cho các bạn lập trình viên tìm được chiếc laptop ưng ý cho công việc của mình cũng như các bạn sinh viên đang tìm mua laptop cho việc học lập trình của mình trong tương lai. 

Xem thêm:

 

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

Gitflow là gì? Tại sao các developer cần biết đến điều đó?

gitflow-la-gi

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

Vấn đề

Hàng này công việc của chúng ta thường xuyên tiếp xúc với git, thế nên chắc hẳn mọi người đều biết trong git có các khái niệm về nhánh (branch) cùng các lệnh xử lý nhánh như checkout, merge,  hay là revert…

Khi phát triển thêm một tính năng mới, chúng ta thường checkout từ nhánh hiện tại sang một nhánh khác để làm việc. Môi trường làm việc nhóm sẽ có nhiều người phát triển nhiều tính năng, mỗi tính năng nằm trên mỗi nhánh, chúng có thể phát triển độc lập và song song với nhau. Mọi thứ sẽ thật hoàn hảo nếu như một ngày đẹp trời khi tiến hành merge các nhánh lại với nhau mà không hề xuất hiện bất cứ xung đột (conflic) nào.

Gitflow được sinh ra để quy định những nguyên tắc trong phân nhánh và phát triển tính năng cũng như phát hành sản phẩm. Đó là một quy trình làm việc với git sao cho thuận tiện nhất cho những người phát triển.

Gitflow là gì?

Gitflow là khái niệm chỉ cách phân nhánh và phối hợp phát triển (development), phát hành (release) tính năng bằng cách sử dụng git.

Gitflow được biến tấu theo từng nhóm phát triển, tuỳ vào môi trường và điều kiện thì người quản lý có thể đặt ra những quy tắc về luồng phát triển ứng dụng. Có thể là tự nghĩ ra hoặc là dựa trên một flow đã có từ trước.

Thực tế có rất nhiều mô hình gitflow được giới thiệu, tuy nhiên nổi tiếng nhất là flow dựa trên mô hình phân nhánh của Vincent Driessen.

  Git Submodules và ứng dụng trong việc chia sẻ tài nguyên dùng chung

  Lại bàn về cách commit code trong dự án

Gitflow theo mô hình phân nhánh Vincent Driessen

gitflow Vincent Driessen

Về cơ bản gitflow theo Vincent Driessen sẽ là như sau:

  • Branch khởi đầu sẽ là master. Khi bắt đầu phát triển tính năng sẽ checkout từ master ra develop.
  • Mỗi tính năng sẽ checkout tiếp từ develop ra các nhánh có prefix là feature/. (ví dụ tính năng login là feature/login, tính năng logout là feature/logout…) và phát triển độc lập với nhau. Sau khi hoàn thành thì merge feature vào develop.
  • Đến kì release sẽ merge develop vào release, nhánh release đóng vai trò như là môi trường stagging của dự án. Đó là môi trường gần giống với production nhất. Nhánh release lúc này chỉ gồm các commit fixbug mà không bao gồm commit thêm tính năng nào nữa. Nếu có fixbug phát sinh trên release thì merge lại vào develop.
  • Khi bug đã hết cũng là lúc tiến hành merge release vào master. Tại đây ta có thể đánh dấu tag cho commit đó để làm dấu hiệu phiên bản phát hành tiện lợi cho việc theo dõi và truy vết.
  • Khi chạy production không thể tránh khỏi lỗi phát sinh, khi đó chúng ta checkout từ master ra nhánh có tiền tố hotfix/ để fixbug. Sau khi sửa lỗi xong thì merge nhánh vừa tạo vào develop, từ develop kiểm tra thấy bản fix đã hoạt động thì tiếp tục merge hotfix vào master và kết thúc phiên sửa lỗi.

Tham khảo Job FrontEnd HOT trên TopDev!

Như bạn có thể thấy với mô hình gitflow trên chúng ta cần có ít nhất 3 môi trường để chạy mã là production, stagging và develop tương ứng với 3 nhánh master, release và develop. Tuy nhiên trong thực tế không nhất thiết phải có đầy đủ cả 3 mà tuỳ vào dự án chúng ta sẽ chỉnh sửa lại gitflow cho phù hợp và tối ưu nhất.

Gitflow theo Vincent Driessen khá là phức tạp và có thể làm chậm quy trình phát triển hay số lượng xung đột mã (conflic) cao do số lượng nhánh của nó. Bù lại mọi công việc đều rõ ràng, cách nhánh có nhiệm vụ riêng của nó và dễ dàng thiết lập nhiều môi trường (develop, stagging, production).

Ví dụ chỉ cần môi trường develop và production, nhưng vẫn đảm bảo tính năng được phát triển ở nhánh feature được checkout từ develop, sau khi hoàn thành tính năng merge develop vào master rồi “go production” :D.

Vậy thì ngoài các flow đã nêu trên thì còn flow nào nữa không? Tất nhiên là có rồi :D, Github và cả Gitlab đều đề xuất một gitflow khi làm việc trên nền tảng của họ. Nếu có thời gian tôi sẽ thêm bài viết nói về gitflow của hai ông lớn trong nghề git này.

Tổng kết

Bài viết trên tôi vừa trình bày về khái niệm của gitflow cùng với mô hình gitflow theo biểu đồ phân nhánh của Vincent Driessen. Gitflow được sinh ra để giải quyết vấn đề làm việc nhóm một cách thuận tiện và ít bị conflic nhất, đồng thời gitflow cũng là đặc trưng của một đội phát triển phần mềm. Còn bạn hiện đang áp dụng gitflow nào hãy chia sẻ cho mọi người biết nhé!

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

Xem thêm:

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

PLC là gì? Những điều cơ bản cần biết về PLC

PLC là gì? Những điều cơ bản cần biết về PLC

Đối với anh em có kinh nghiệm làm bên mảng công nghiệp chắc không còn lạ lẫm gì với PLC (Programmable Logic Controller). Nhưng đối với những anh em mới tìm hiểu khái niệm này thì PLC có vẻ như là thứ gì đó hơi khó hiểu.

Bài viết này giới thiệu tổng quan cho anh em về PLC, ưu nhược điểm của nó, bước đầu tiên tiếp cận với lập trình PLC.

Hứa hẹn sẽ có phần 2 cho anh em với ví dụ thực tế lập trình PLC.

1. PLC (Programmable Logic Controller) là gì?

Luôn bắt đầu với định nghĩa từ PLC, tuy hơi khó hiểu nhưng sẽ giải thích cho anh em tường tận cụ thể ở phía dưới nên anh em đừng lo

A programmable logic controller is a type of tiny computer that can receive data through its inputs and send operating instructions through its outputs. Fundamentally, a PLC’s job is to control a system’s functions using the internal logic programmed into it. PLC (programmable logic controller) là một máy tính nhỏ có thể nhận dữ liệu đầu vào thông quả cổng input, và gửi ra một danh sách vận hành thông qua đầu ra (output). Về cơ bản công việc của PLC là điều khiển các chức năng của hệ thống bằng các logic được lập trình bên trong nó.

PLC

Nếu viết như này thì PLC khác gì so với cloud? Cũng là phần cứng như nhau, cũng là xử lý các công việc của hệ thống, input và output thì có thể xem như request và response.

Ngược lại, PLC là thiết bị phần cứng được sử dụng để thu thập input đầu vào là máy móc. Cụ thể input đầu vào của PLC có thể là công tắc, trạng thái các nút bấm. Về output, PLC có thể điều khiển động cơ, van điện từ, đèn chiếu sáng, thiết bị đóng ngắt và nhiều thiết bị khác.

  Xcode là gì? Các tips sử dụng Xcode hiệu quả cho lập trình viên

  Đừng chỉ cứ code! Hãy dành thời gian khai phá tư duy lập trình

2. Ưu điểm của PLC

Sau khi đã hiểu định nghĩa PLC (Programmable Logic Controller), giờ là lúc tìm hiểu xem PLC có những ưu điểm gì giúp nó phổ biến trong các nhà máy lớn. Lập trình PLC có ưu điểm gì so với các ngôn ngữ khác.

    • Đầu tiên thì ngôn ngữ lập trình PLC không phức tạp như các ngôn ngữ lập trình bậc cao, tương tự như các thao tác trên máy với chỉ các nút bấm, cái này giúp doanh nghiệp giảm bớt thời gian và chi phí khi phát triển với PLC
    • PLC là dạng thiết bị đã được kiểm tra, kiểm thử và phát triển qua nhiều năm. Các hãng lớn như Siemens đã phát triển PLC trong hơn 20 năm, khiến độ tin cậy của PLC trở nên cao hơn. Hoàn thiện cũng ở mức cao.
    • Về giá cả PLC cũng có nhiều loại với nhiều mức giá khác nhau giúp phù hợp với nhiều mô hình doanh nghiệp.
    • PLC là thiết bị phần cứng gắn chết vào trong mạch, anh em có thể lắp nó ở bất kỳ đâu trong nhà máy, giúp tăng độ tin cậy về khả năng sử dụng cũng như độ bền

PLC
PLC là các thiết bị phần cứng, có khoá bảo vệ, được gắn cứng tại chỗ. Trong hình là maintain thay thế thiết bị phần cứng của PLC

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

3. PLC hoạt động như thế nào?

Anh em đã nắm bắt được PLC là gì, ưu điểm của PLC thì giờ là lúc tìm hiểu xem PLC hoạt động như thế nào. Như đã đề cập trước đó cho anh em (phần 2). Ưu điểm của PLC là tính đơn giản. Chính vì vậy nguyên lý hoạt động của PLC cũng không quá phức tạp.

Để trực quan, anh em tham khảo hình dưới đây:

PLC

Về cơ bản PLC chia thành 3 phần

    • Input Monitoring: Phần này là phần nhận thông tin input, có thể tới từ bất cứ thiết bị nào trong nhà máy (tất nhiên là có tích hợp với PLC). Có quy chuẩn mới kết nối với nhau được
    • Logic programming: Tất cả PLC đều có CPU 16 bit hoặc 32 bit, chỗ này là chỗ xử lý code hoặc logic anh em thêm vào
    • Output Control: Dựa theo logic đã viết hoặc implement, PLC sẽ đưa ra output đúng như logic đã viết.

Một cái PLC thường bao gồm CPU, đầu vào và đầu ra trong cùng một hộp. Thông thường chúng sẽ đặt cùng nhau trong cùng một mô đun, trong khi các hoạt động logic diễn ra trong một mô-đun CPU riêng biệt. Nên đôi khi input và output nằm một chỗ, còn CPU thì nằm chỗ khác xa hơn, nhiều khi input, output và CPT nằm ở các tòa nhà khác nhau.

4. Những loại PLC phổ biến hiện nay

Tuỳ thuộc vào nhu cầu sử dụng mà nhà máy, hoặc thiết bị của anh em hoặc khách hàng sẽ lựa chọn các loại PLC khác nhau.

Dưới đây là liệt kê một số loại PLC, cái này khi anh em mò làm hoặc khách gửi thì nhớ check xem mình đang làm PLC loại gì để cân nhắc một số yếu tố dưới đây:

    • Điện áp đầu vào: con này thì khi lựa chọn anh em nhớ xem điện áp đầu vào, bé hơn là cháy, nên chọn con nào chuyên cho điện và sử dụng được với điện áp cao. Phù hợp là được
    • Tốc độ xử lý: các loại PLC khác nhau có các chip xử lý khác nhau. Nên cần chọn loại phù hợp, nếu có nhiều xử lý, yêu cầu cần có CPU nhiều hơn
    • Khả năng tương thích: PLC có loại dùng ray DIN, có loại thì không, nên khi lựa chọn anh em cần chọn loại tương thích với hệ thống hiện có hiện tại
    • Nhiệt độ cao: một số môi trường trong nhà máy có nhiệt độ rất cao, nên cần chọn đúng loại PLC có thể chịu được nhiệt độ trong khoảng cho phép
    • Khả năng kết nối: PLC cần có đủ kết nối input và output, ngoài ra nếu có thêm các kết nối khác, anh em cần kiểm tra kỹ trước khi mua

PLC

5. Học lập trình PLC như thế nào?

Ngày nay những nhà máy lớn, có quy trình sản xuất tự động hoá đa dạng, tất cả đều sử dụng toàn bộ hoặc một phần PLC.

PLC giúp tự động hoá, nâng cao năng suất và tăng cường độ chính xác trong quá trình sản xuất của nhà máy. Đối với hầu hết các models PLC trên thị trường, tất cả đều có thể được lập trình thông qua PLC programming software. Tất nhiên là không phải ngôn ngữ nào cũng có thể được sử dụng để lập trình PLC.

PLC

Luật International Electrical Code’s IEC 61131-3 (anh em hiểu là cơ quan điện quốc tế), quy định 5 ngôn ngữ lập trình có thể sử dụng để lập trình PLC. Ba ngôn ngữ trong đó có UI, hai ngôn ngữ trong đó chỉ có giao diện text (text interface).

Về mức độ phổ biến thì hiện tại phổ biến nhất là Ladder logic. Tuy nhiên, các ngôn ngữ lập trình PLC khác cung cấp các công cụ phức tạp hơn. Ví dụ, văn bản có cấu trúc (ST) cho phép anh em nhanh chóng tạo các chương trình phức tạp, có thể mở rộng bằng cách sử dụng các text interface. Kiểu friendly user hơn. Đối với những tác vụ phức tạ, anh em có một biểu đồ chức năng kiểu (SFC), cho phép anh em kết nối nhiều hệ thống và chương trình con bằng các ngôn ngữ lập trình khác nhau.

6. Tham khảo thêm về lập trình PLC

À với C++ anh em cũng có thể lập trình PLC nhé. Chi tiết từng ngôn ngữ xin phép được giới thiệu cụ thể với anh em ở bài 2.

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 tuyển IT lương cao hấp dẫn tại TopDev

Chia sẻ bí kíp làm freelancer – Nhân đôi thu nhập hiệu quả

chia-se-bi-kip-lam-freelancer

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

Freelancer đang trở thành một xu hướng nghề nghiệp rất hot. Cũng giống như các loại hình việc làm khác, có rất nhiều công việc cho freelancer như: freelancer thiết kế, freelancer dịch thuật, freelancer viết lách, hoặc đơn giản là nhận viết truyện kiếm tiền

Để trở thành một freelancer thành công, có thu nhập ổn định thì bạn cần xác định: Freelancer là một nghề, là một business.

Bài viết này mình sẽ chia sẻ một số kinh nghiệm làm freelancer mà mình đã học được. Tất nhiên những kinh nghiệm này đã được áp dụng thành công bởi rất nhiều người.

Trước khi bắt đầu thì mình sẽ giới thiệu cho những ai chưa biết freelancer là gì.

Freelancer là gì?

Freelancer là người được trả tiền để thực hiện một công việc nào đó cho khách hàng trong một khoảng thời gian nhất định.

Nói nôm na, họ là những người bán các dịch vụ của mình cho người trả giá cao nhất và có thể làm việc cho nhiều người thuê cùng lúc, kiếm tiền tại nhà.

Mình có thể liệt kê một số mạng Freelancer uy tín mà bạn có thể tham gia:

  • Mạng Freelancer Việt Nam: vlance.vn
  • Mạng Freelancer nước ngoài: UpworkFiverr (mình cũng đang tham gia làm tại đây) …

Như bạn thấy freelancer thực chất là đi làm thuê cho người khác. Nhưng là làm trong sự thoải mái, không có bất cứ luật lệ nào về giờ giấc, tác phong văn phòng… từ khách hàng dành cho bạn. Khách hàng chỉ quan tâm tới kết quả công việc mà thôi.

Kinh nghiệm làm freelancer – Bí quyết giúp Freelancer xây dựng thu nhập ổn định

Mình có 3 kinh nghiệm muốn chia sẻ cho các bạn:

  • Cách giao tiếp hiệu quả với khách hàng.
  • Bảo vệ danh tiếng của bạn.
  • Giải quyết các vấn đề nảy sinh phổ biến nhất.

Bắt đầu thôi!

#1. Cách giao tiếp hiệu quả với khách hàng

Mẹo đầu tiên mà mình muốn chia sẻ là cách giao tiếp với khách hàng. Đây là một trong những điều quan trọng nhất đối với một freelancer!

Khách hàng chính là người trả lương cho mình. Vì vậy, hãy chăm sóc họ thật cẩn thận. Mình nhận thấy khách hàng thường đánh giá cao những tiêu chí sau:

Uy tín là số 1

Hãy thể bạn là người đáng tin cậy. Bạn cố gắng trả lời email cũng như những thắc mắc của khách nhanh nhất có thể.

Ngoài ra, hãy tránh để khách hàng thắc mắc về tiến độ của dự án. Hãy tự giác gửi báo cáo thường xuyên hoặc báo cho họ biết công việc bạn đang làm. Chính điều này làm cho khách hàng cảm thấy yên tâm về dự án, cả về bạn.

Hãy lịch sự

Lịch sự và chuyên nghiệp, nhưng quan trọng không kém là bạn phải thân thiện nữa.

Sau tất cả, chúng ta đều là con người mà! Trong quá trình tuyển dụng freelancer, họ sẽ đánh giá cao nếu thái độ của bạn tốt đấy!

Hãy trung thực

Đừng bao giờ nói dối, hãy giữ lời. Đừng hứa hẹn khi bạn không thể thực hiện chúng.

Ví dụ: đừng hứa với khách hàng về việc bonus một tính năng nào đó khi kết thúc dự án. Trong khi bạn biết rằng việc hoàn thành dự án đúng hẹn đã là một thành công rồi. Nên việc thêm tính năng bonus đó là gần như không thể.

Đừng che giấu nếu có vấn đề

Nếu vấn đề đó quan trọng, không sớm thì muộn cũng sẽ xảy ra. Hãy thông báo cho khách hàng của bạn càng sớm càng tốt.

Thà rằng mình báo cáo trước để cùng nhau thảo luận giải quyết, còn hơn là để đến khi giao hàng mới nói. Khách hàng sẽ cực kì ghét việc giấu giếm.

Tự theo dõi thời gian của bạn

Nếu bạn được thuê theo giờ, hãy theo dõi thời gian và chia sẻ thường xuyên với khách hàng. Còn nếu bạn được trả trọn gói dự án, nó cũng giúp bạn tìm ra sự khác biệt giữa ước tính và thực tế.

Luôn tư vấn kỹ thuật để cùng khách hàng tìm giải pháp tối ưu nhất

Nếu bạn nhận thấy khách hàng đưa ra quyết định kỹ thuật sai. Kể cả quyết định đó có lợi cho bạn (như giải pháp đó dễ thực hiện, tiền thu nhập của bạn vẫn được trả cao hơn…). Đừng vì cái lợi trước mắt mà làm.

Hãy chỉ ra điều đó với họ thay vì để họ bực mình. Bạn có thể tranh luận về quyết định, nhưng hãy nhớ rằng, quyết định cuối cùng luôn là ở khách hàng.

Chủ động hỏi khách hàng

Đừng ngại đặt câu hỏi.

Điều này có thể giúp bạn và khách hàng của bạn hiểu nhau và hiểu dự án hơn. Tuyệt đối không giải quyết vấn đề dựa trên sự suy đoán của bạn.

Khi yêu cầu không đúng hoặc thiếu chi tiết quan trọng, hãy yêu cầu khách hàng cung cấp thêm hoặc bạn gửi lại bản của bạn để họ thấy sai lầm của họ.

Cung cấp cho khách hàng cái họ muốn, không phải cái bạn nghĩ là “họ muốn”

Theo kinh nghiệm làm freelancer của mình, thường có cái gọi là khoảng cách kỳ vọng. Tức là luôn có sự khác biệt giữa những gì khách hàng mong đợi và những gì họ thực sự nhận được. Hãy loại bỏ sự mơ hồ và tránh các giả định của bạn là những cách tốt để giảm thiểu khoảng cách đó.

Ví dụ: Nếu khách hàng muốn bạn xây dựng một ứng dụng mà người dùng có thể đăng ký bằng cách cung cấp địa chỉ email và mật khẩu. Sau đó người dùng có thể đăng nhập bằng cách nhập tên người dùng và mật khẩu.

Mới đầu nghe yêu cầu cũng dễ hiểu đúng không? Nhưng khi nghiên cứu kỹ, bạn sẽ nhận ra điểm không được rõ ràng lắm: Lúc đăng ký thì yêu cầu một email (nhưng không phải là một tên người dùng). Trong khi đăng nhập lại cần một tên người dùng.

Vậy bạn sử dụng email trong khi đăng nhập hay yêu cầu cả tên người dùng trong lúc đăng ký? Không ai ngoại trừ khách hàng có thể trả lời câu hỏi đó.

Kinh nghiệm làm freelancer - Bí kíp giúp tăng thu nhập 500%

  Freelancer Developer – được gì và mất gì?

  Quá trình bước chân vào con đường freelancer – P1 (Khởi đầu)

#2. Xây dựng và bảo vệ danh tiếng online của bạn

Đối với một freelancer, đây là “tài sản” quan trọng nhất! Khi lời nói thốt ra, những điều tốt đẹp sẽ nhanh chóng bị lãng quên, nhưng tiếng xấu thì còn lưu giữ mãi.

Đáng ra mọi thứ phải ngược lại, nhưng đó là quy luật của thế giới rồi. Nếu danh tiếng của bạn xấu, bạn sẽ gặp khó khăn để bid các dự án. Đặc biệt là trong mạng lưới freelancer trực tuyến, nơi danh tiếng của bạn luôn luôn công khai.

Câu chuyện thực tế về danh tiếng

Vài năm trước, mình đã thuê một bạn trên Fiverr để giúp mình xây dựng ứng dụng bằng React native.

Mặc dù bạn ấy không có kinh nghiệm về React native. Mình trả tiền cho bạn ấy để tìm hiểu những gì bạn ấy cần. Sau đó mình giao cho bạn ấy một nhiệm vụ đơn giản, không liên quan đến code, đó là viết tài liệu.

Sau 1 tuần, bạn ấy đổi ý và nói rằng React native quá phức tạp. Thậm chí tệ hơn là bạn ấy đã làm xáo trộn cấu trúc yêu cầu mà khách hàng của mình và mình đã thực hiện. Tuy nhiên, bạn ấy lại muốn mình trả tiền cho khoảng thời gian bạn ấy dành cho dự án. Bạn ấy đổ lỗi cho mình vì đã khiến bạn ấy làm việc trên các công nghệ mà bạn ấy không muốn làm.

Cuối cùng thì mình vẫn trả tiền cho bạn ấy nhưng chỉ là một phần nhỏ trong khoảng thời gian bạn ấy bỏ ra.

Tất nhiên, mình phải để lại một feedback xấu cho bạn ấy trên Fiverr. Mình gần như chắc chắn đã phá vỡ danh tiếng của bạn ấy trên Fiverr. Lỗi của bạn ấy chứ không phải mình nhé!

Đừng hiểu lầm mình. Mình không hề trả thù. Đơn giản là mình cảm thấy mình phải cảnh báo người khác mức độ phục vụ và tính chuyên nghiệp mà họ mong đợi từ anh chàng này.

Cách tốt nhất để bảo vệ và nâng cao danh tiếng của bạn là đảm bảo khách hàng của bạn thật hài lòng!

Như thầy Lê Thẩm Dương có nói: Túi tiền gần với trái tim, cứ đánh vào trái tim thì sẽ móc được tiền.

Vậy làm thế nào để túi tiền nặng hơn, đọc bên dưới ngay nhé!

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

Làm thế nào để bảo vệ danh tiếng

Vậy làm thế nào để làm điều đó? Một cách bạn có thể làm là tạm thời tự biến mình thành khách hàng.

Mình đã vài lần thuê các nhà phát triển từ các trang Freelancer Việt Nam và Fiverr. Nhờ đó mình đã được trải nghiệm một vài điều, chẳng hạn như:

  • Cách chọn lọc các ứng viên cho dự án
  • Điều mong đợi trong quá trình thực hiện là gì
  • Freelancer của bạn không cập nhật và không trả lời email thì sẽ bực bội thế nào
  • Khi Freelancer luôn update công việc, dự đoán các câu hỏi của bạn và cung cấp sản phẩm chất lượng thì tuyệt vời thế nào.

Tất nhiên, bạn không phải thuê freelancer chỉ với mục đích duy nhất là đặt mình vào vị trí khách hàng thì sẽ hành xử thế nào. Nếu coi chí phí đó là học phí thì có thể sẽ tốn kém đấy

Nhưng đôi khi bạn có thể suy nghĩ về cảm giác của mình nếu đặt bạn ở vị trí khách hàng. Đặc biệt khi bạn cố ý làm gì đó để che giấu vấn đề.

Phương châm của mình là: hãy đối xử với người khác theo cách mà bạn muốn được đối xử.

Kinh nghiệm làm freelancer - Bí kíp giúp tăng thu nhập 500%

#3. Cách giải quyết các vấn đề nảy sinh phổ biến

Giống như các nghề khác thôi, freelancer cũng có những rủi ro nhất định. Dưới đây là một số kinh nghiệm làm freelancer của mình để bạn dự đoán và ngăn chặn các sự cố xảy ra.

Làm rõ tất cả những gì bạn còn mơ hồ về dự án

Ở phần trên, mình đã đề cập một cách quan trọng để giữ cho khách hàng của bạn hạnh phúc là tìm kiếm và loại bỏ mọi sự mơ hồ trong kỳ vọng của khách hàng.

Sự khởi đầu của một dự án có thể đầy rẫy với sự mơ hồ về yêu cầu dự án, thời hạn thanh toán và thời hạn giao sản phẩm. Hãy giải quyết những điều này ngay lập tức!

Tránh ký NDA khi bạn chưa rõ ràng về dự án

NDA là gì? Có lẽ nhiều bạn sẽ không biết đến khái niệm này. Nhưng nếu bạn đã có kinh nghiệm làm freelancer nhiều và đã tham gia nhiều dự án lớn thì sẽ biết.

NDA là một hợp đồng hợp pháp, xác định thông tin mật và thông qua đó các bên đồng ý không tiết lộ thông tin được xác định theo thỏa thuận cho các bên thứ ba. Thỏa thuận NDA như là hình thức thỏa thuận không cạnh tranh, trong một số phương diện, tạo nên một mức độ bảo vệ chặt chẽ cho người sử dụng lao động

Mình đã được hỏi nhiều lần để có thể ký một NDA trước khi được hiển thị bất kỳ chi tiết nào về dự án. Và mình luôn từ chối những NDA có nguy cơ mất luôn dự án.

Tại sao ư? Vấn đề là, làm sao mình có thể ký một thỏa thuận không tiết lộ, ràng buộc bản thân mình với tính bảo mật, không cạnh tranh … khi mình không biết mình đang bảo vệ cái gì? Nếu mình đã làm việc với các dự án xung đột với NDA thì sao?

Làm sao để tránh?

Nếu điều này xảy ra với bạn, hãy hỏi khách hàng xem có thể cho bạn biết ý tưởng của dự án hay không, mà không cần họ tiết lộ quá nhiều – chỉ đủ để cho phép bạn đánh giá liệu bạn có thể có trách nhiệm ký một NDA hay không.

Dự án này là gì? Ứng dụng hẹn hò trên Android ư? Hmmm, ok. Mình nghĩ mình nên nói với bạn một vài dự án tương tự tiềm năng mà mình đã làm việc gần đây.

Dự án này là gì? Một ứng dụng để tính toán quỹ đạo và tiêu thụ nhiên liệu của một tên lửa không gian? Ok, mình có thể ký NDA. Mình khá chắc chắn rằng trước đây mình chưa từng làm dự án tương tự như thế này, thậm chí là làm từ xa.

Đọc và hiểu hợp đồng

Nghe có vẻ hiển nhiên, nhưng đây là một vấn để phải xử lý hết sức cẩn thận. Hợp đồng là một thỏa thuận ràng buộc về mặt pháp lý giữa bạn và khách hàng của bạn.

Bởi vậy, thường là khách hàng yêu cầu bạn ký, hợp đồng chủ yếu tập trung vào việc bảo vệ khách hàng và dự án của họ chứ không phải bạn.

Rất khó để đưa ra lời khuyên, bởi vì không hợp đồng nào giống hợp đồng nào, và quan trọng nhất, mình không phải là luật sư. Đây chỉ là một vài gợi ý chung:

  • Đọc kỹ hợp đồng.
  • Đọc kỹ nó một lần nữa, và sau đó đọc lại một lần nữa!
  • Đừng ngần ngại liên hệ với luật sư có kinh nghiệm để xem lại hợp đồng cho bạn. Đặc biệt nếu bất kỳ điều gì gây nhầm lẫn, không rõ ràng hoặc đáng lo ngại. Đúng là rất tốn kém với tư vấn pháp lý, nhưng chi phí đó chỉ là một phần nhỏ so với những lời khuyên giúp bạn nhận lại khoản thu cuối cùng.
  • Đừng ngần ngại đề xuất các thay đổi đối với hợp đồng nếu bạn nhận thấy bất kỳ lỗi nào, sự mơ hồ hoặc các điều khoản bất lợi.
  • Nếu khách hàng từ chối thực hiện các thay đổi bạn yêu cầu, hãy bỏ qua và tìm các dự án khác.

Luôn chuẩn bị cho mọi vấn đề có thể đột ngột xảy ra

Có khi nào bạn gặp một dự án có thể dừng lại mà không cần thông báo trước. Với các bạn freelancer toàn thời gian thì biện pháp đối phó để bảo vệ chính mình là làm cùng lúc ít nhất hai dự án bán thời gian thay vì trên một dự án toàn thời gian.

Mỗi dự án lại là một bản dự bị cho một dự án khác: Nếu một dự án bị hủy bỏ, mình vẫn có công việc. Dù sao thì một nửa tiền vẫn tốt hơn là không có gì, đúng không?

Khi điều đó xảy ra, bạn có thể cảm thấy thất vọng – ít nhất thì điều này cũng xảy ra với mình đôi lần. Nhưng mình biết đó chỉ là một phản ứng bình thường của bản thân. Sau đó khi mình cảm thấy thoải mái hơn, mình bắt đầu tìm kiếm những thách thức khác.

Đôi khi nếu mình vẫn chưa đủ động lực, mình để một hoặc hai ngày trôi qua. Mình có nhiều thời gian hơn với gia đình. Lúc đó có thể làm điều gì đó mà mình thường không có thời gian để làm chẳng hạn như đọc sách, gặp gỡ bạn bè…

Nếu điều tương tự xảy ra với bạn, hãy chia sẻ với mình nhé! Giờ mình chia sẻ với bạn chi tiết về phương pháp rút gọn link, có thể bạn sẽ hứng thú?

#4. Tạm kết

Trên đây là toàn bộ những kinh nghiệm làm freelancer của bản thân. Nếu bạn từng có câu hỏi làm gì để kiếm tiền tại nhà? Hay có ý định nghỉ việc và chuyển hẳn sang làm freelance… Thì mình nghĩ bài viết này sẽ rất phù hợp với bạn.

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

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

Xem thêm Tìm việc Developer hấp dẫn trên TopDev

Lại bàn về cách commit code trong dự án

Lại bàn về cách commit code trong dự án, làm thế nào cho đúng?

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

Hàng ngày chúng ta thường xuyên phải code và fix bug liên tục cùng với những thành viên khác trong team. Bỗng một ngày đẹp trời tester hô lên cái lỗi mà bạn đã sửa từ mấy tuần trước bỗng dưng quay trở lại. Bạn liền lên tiếng phân bua rõ ràng đã sửa rồi và phải chứng minh cho tester thấy. Bạn mở lịch sử commit lên và bùm… commit, fix bug, fix some bug… là những thứ đập vào mắt bạn. Không ai khác đó là chính là những message mà bạn commit!

Rồi giờ thì làm sao để tìm lại commit đó? Bạn tự dằn vặt tại sao lúc đó mình không commit rõ ràng hơn. Không sao cả, ai cũng có lúc mắc sai lầm và sai lầm là để sửa chữa nhưng quan trọng hơn là bạn phải nhận ra là bạn đã sai đã rồi để mình bày cách cho!

Hãy commit rõ ràng

Đúng thế trước tiên là hãy cố gắng đặt ra được những message thật rõ ràng và mang tính hành động hướng đến đối tượng.

Ví dụ:

  • Sửa lỗi lấy danh sách tỉnh/thành bị thiếu tên
  • Thêm tính năng cập nhật tỉnh/thành
  • Thêm mục Tài liệu tham khảo vào README.MD

Mình đang lấy ví dụ là Tiếng Việt, tùy vào từng quy tắc dự án của bạn có thể commit bằng Tiếng Anh nhưng cơ bản nội dung vẫn theo tinh thần như trên.

  Hãy commit code có tâm như Senior Developer

  Tôi vừa lỡ commit sai, làm sao để sửa lại ngay lập tức?

Hãy thêm prefix vào trước message

Đây là cách mà nhiều Dev đã và đang áp dụng trong nhiều dự án trên “mạng xã hội” Github. Dựa vào prefix để phân loại các loại commit thường thấy của bạn trong dự án, từ đó dễ dàng phân biệt và tìm kiếm hơn.

Chung quy là sẽ có một số prefix mà các Dev sẽ tự quy ước, nhưng không nhất thiết phải làm theo.

Một số hay dùng như:

  • feat: thêm một tính năng
  • fix: sửa một lỗi
  • refactor: tối ưu một tính năng nào đó đã có từ trước
  • style: những sửa đổi không làm thay đổi ý nghĩa của mã trước đó. Thường liên quan đến định dạng mã như thiếu dấu chấm phẩy (;), xóa khoảng trắng (space)…

Còn nhiều những prefix khác nữa, bạn có thể tham khảo ở bài viết này How to Write Better Git Commit Messages – A Step-By-Step Guide.

Ví dụ:

  • fix: Sửa lỗi lấy danh sách tỉnh/thành bị thiếu tên
  • feat: Thêm tính năng cập nhật tỉnh/thành
  • docs: Thêm mục Tài liệu tham khảo vào README.MD

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

Cố gắng tách biệt ý nghĩa của các commit

Mình biết có nhiều bạn (kể cả mình) sẽ hay gặp trường hợp trong khi đang thêm tính năng hay sửa một lỗi này bỗng nhiên phát hiện ra một lỗi khác và tiện tay sửa luôn. Rồi đến lúc commit thì chỉ viết message chung chung là “sửa một số lỗi”. Điều này rất là tiện tuy nhiên lại gây khó khăn trong truy vết, thế nên hãy cố gắng sửa chúng một cách lần lượt. Đừng sợ tốn commit mà hãy commit thật rõ ràng.

Hãy áp dụng Git Flow

Git flow là thuật ngữ để chỉ “quy ước” làm việc của team trong dự án. Ví dụ dự án phải có 3 nhánh là master để lưu lại code mới nhất, nhánh release để xác định tính năng sẵn sàng cho production và nhánh develop để phát triển tính năng cho release.

Ngoài ra Git Flow cũng quy định luồng phân chia và hợp nhất nhánh trong khi đang phát triển tính năng. Có một Git Flow rất nổi tiếng đó là Tóm tắt Git-Flow, các Dev có thể tham khảo.

Cuối cùng, hãy dùng tools có giao diện để quản lý.

Nếu bạn đã quen với giao diện dòng lệnh thì không sao nhưng với mình có nhiều lúc phải dùng những tools để quản lý Git. Mình thấy nó khá là tiện và cũng dễ dàng theo dõi Flow của dự án luôn.

Bây giờ hầu hết các trình viết code đều tích hợp hoặc có plugin giúp cho việc quản lý git bằng giao diện dễ dàng và tiện dụng, các Dev có thể tìm hiểu thêm tuỳ theo công cụ mà mình đang sử dụng.

Tóm lại là

Những chia sẻ bên trên của mình đều xuất phát từ kinh nghiệm trong công việc, việc áp dụng nó trong dự án của các Dev phải tuỳ thuộc vào Team Work và Flow của dự án. Nếu các Dev thấy chưa hợp lý hoặc có còn cách nào hay hơn thì hãy để lại bình luận cho mình và mọi người biết nhé!

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

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

Ngành trí tuệ nhân tạo từ A – Z: Tiềm năng và cơ hội nghề nghiệp

Ngành trí tuệ nhân tạo ở Việt Nam - Nắm bắt xu thế tương lai

Hiện nay, trí tuệ nhân tạo (AI) được xem là một trong những công nghệ quan trọng hàng đầu không chỉ ở Việt Nam mà trên toàn thế giới. Sự đầu tư vào trí tuệ nhân tạo của các doanh nghiệp, tập đoàn lớn đã cho thấy tiềm năng phát triển của lĩnh vực này trong tương lai. Cùng TopDev khám phá lĩnh vực trí tuệ nhân tạo tạo Việt Nam và những cơ hội thách thức khi theo đuổi ngành này bạn nhé!

Ngành trí tuệ nhân tạo (AI) là gì?

Trí tuệ nhân tạo (Artificial Intelligence – AI) là lĩnh vực trong khoa học máy tính nhằm tạo ra các hệ thống và chương trình máy tính có khả năng tự học, tự hiểu, và tự đưa ra quyết định dựa trên dữ liệu. Mục đích của AI là tạo ra các hệ thống thông minh giúp cho con người giải quyết các vấn đề phức tạp trong nhiều lĩnh vực, từ y tế, giao thông, kinh tế, giáo dục đến công nghiệp, nông nghiệp và quân sự.

Ngành trí tuệ nhân tạo là gì?

Ngành trí tuệ nhân tạo (AI) hiện đang được ứng dụng rất nhiều trong cuộc sống hằng ngày, trong nhiều lĩnh vực. Một số ứng dụng nổi bật có thể kể đến như:

  • Trợ lý ảo: Các trợ lý ảo như Amazon Alexa, Google Assistant, Siri,… đều được xây dựng dựa trên AI. Những trợ lý ảo này sẽ giúp nâng cao trải nghiệm cho người dùng, giải quyết các vấn đề của người dùng tốt hơn.
  • Digital Marketing: Công nghệ AI giúp việc thu thập dữ liệu và đưa ra các quyết định dựa trên dữ liệu hiệu quả và chính xác hơn.
  • Tài chính: AI có thể được sử dụng để dự đoán xu hướng thị trường tài chính, tối ưu hóa các quy trình giao dịch và giảm thiểu rủi ro.
  • Y tế: AI có thể giúp trong việc chẩn đoán bệnh và thiết kế kế hoạch điều trị. Hệ thống AI có thể phân tích dữ liệu y tế để dự đoán nguy cơ mắc bệnh và tối ưu hóa chẩn đoán và điều trị.
  • Giao thông: AI có thể được sử dụng để giảm thiểu tai nạn giao thông bằng cách dự đoán nguy cơ tai nạn và đưa ra cảnh báo kịp thời cho người lái xe.

Những ứng dụng này chỉ là một phần nhỏ trong những ứng dụng của AI. Có rất nhiều lĩnh vực khác mà AI có thể được sử dụng để giải quyết các vấn đề phức tạp trong cuộc sống hàng ngày của con người.

Tham khảo việc làm trí tuệ nhân tạo hấp dẫn trên TopDev!

Tiềm năng và cơ hội việc làm ngành trí tuệ nhân tạo ở Việt Nam

Theo Forber.com (ngày 22.02.2023), chỉ số sẵn sàng cho trí tuệ nhân tạo của Việt Nam đã đạt mức 51,82/100, tăng 14 bậc so với năm ngoái và vượt qua mức trung bình toàn cầu là 47,72. Điều này cho thấy dấu hiệu tích cực về khả năng tiếp cận trí tuệ nhân tạo ở Việt Nam, đồng thời cũng là thách thức khi nguồn nhân lực AI vẫn còn thiếu rất nhiều.

Các công ty hàng đầu trên thế giới như Google, Facebook. Amazon,… đang đầu tư rất nhiều kinh phí để phát triển hệ thống trí tuệ nhân tạo. Các startup AI cũng tăng theo cấp số nhân. Tại Việt Nam, việc đầu tư vào AI đang tăng lên, với sự xuất hiện của các công ty và tổ chức nghiên cứu như FPT AI, VinAI Research, Viettel AI và Vingroup AI Institute. Các doanh nghiệp khác cũng đang tìm kiếm nhân lực có kỹ năng AI để cải thiện hiệu quả kinh doanh của mình.

Với sự phát triển của AI, các cơ hội việc làm trong ngành này sẽ tiếp tục tăng lên trong tương lai, đặc biệt là trong các lĩnh vực như y tế, tài chính, sản xuất và bán lẻ. Đây là cơ hội tuyệt vời để bạn gia nhập vào.

  Hiểu sâu về trí tuệ nhân tạo & Machine Learning tại Apple

Ngành trí tuệ nhân tạo học những gì?

Hiện nay, ngành Trí tuệ nhân tạo tập trung chủ yếu vào hai chuyên ngành Machine learning và Deep learning. Tuy nhiên, để tiếp cận và bắt đầu học hai chuyên ngành này, người học cần phải có nền tảng về Khoa học máy tính, bao gồm kiến thức về Toán, ngôn ngữ lập trình, quản trị hệ cơ sở dữ liệu, lập trình và phát triển phần mềm, thuật toán,…

Machine learning và Deep learning

Sau khi nắm vững cơ bản, người học có thể theo đuổi các kiến thức chuyên sâu về xử lý ngôn ngữ tự nhiên, xử lý dữ liệu hình ảnh/dữ liệu giọng nói, tạo lập phần mềm hệ thống, và nhiều môn học khác như Robot học, Mạng thần kinh nhân tạo, Kỹ thuật phần mềm, v.v. Bên cạnh đó, sinh viên học ngành Trí tuệ nhân tạo cần phải có các kỹ năng lập trình, ngoại ngữ và nghiên cứu để trở thành chuyên gia trong lĩnh vực này.

Lưu ý rằng còn tùy thuộc vào mỗi trường mà chương trình đào tạo ngành AI có thể sẽ khác nhau. Bạn nên xem xét kỹ về danh sách các môn học và chương trình giảng dạy trước khi quyết định đăng ký vào trường nào đó.

Một số môn học ngành AI bạn có thể sẽ phải học:

  • Nguyên tắc cơ bản của Trí tuệ nhân tạo
  • Nguyên lý lập trình và tính toán
  • Kỹ thuật phần mềm
  • Mạng thần kinh nhân tạo
  • Xử lý ngôn ngữ tự nhiên
  • Thị giác máy tính
  • Robot học
  • Machine Learning
  • Trí tuệ nhân tạo trong lĩnh vực cụ thể

  Trí tuệ nhân tạo (Artificial Intelligence) và cơn đau tim (Heart Attack)

Tố chất cần thiết để học trí tuệ nhân tạo

Để học và thành công trong lĩnh vực Trí tuệ nhân tạo, cần phải có những tố chất sau:

  • Sự tò mò và sáng tạo: Để giải quyết các vấn đề phức tạp và phát triển các giải pháp mới, cần phải có sự tò mò và sáng tạo trong tư duy.
  • Khả năng tư duy logic và phân tích: Khả năng phân tích và giải quyết vấn đề là một yếu tố quan trọng trong lĩnh vực Trí tuệ nhân tạo.
  • Khả năng làm việc độc lập và làm việc nhóm: Trí tuệ nhân tạo thường là công việc đòi hỏi sự độc lập và cộng tác với những người khác trong cùng một dự án.
  • Sự đam mê: Cần có sự đam mê với lĩnh vực Trí tuệ nhân tạo để có thể học tập và phát triển thành chuyên gia trong lĩnh vực này.
  • Ngoại ngữ: Trong một số trường hợp, sự thành công trong lĩnh vực Trí tuệ nhân tạo đòi hỏi khả năng giao tiếp bằng một hoặc nhiều ngoại ngữ.

Làm gì sau khi tốt nghiệp trí tuệ nhân tạo?

Software Engineer

Sau khi tốt nghiệp ngành Trí tuệ nhân tạo (AI), bạn có thể đi vào nhiều lĩnh vực khác nhau, tùy thuộc vào sở thích, năng lực và mục tiêu của bạn. Dưới đây là một số lựa chọn phổ biến sau khi tốt nghiệp:

  • Kỹ sư phần mềm (Software Engineer): Tập trung vào việc thiết kế cũng như chịu trách nhiệm phát triển các chương trình và hệ thống kỹ thuật số. Công việc của họ có thể bao gồm thu thập dữ liệu, xử lý dữ liệu, xây dựng mô hình máy học và đánh giá hiệu quả của các mô hình đó.
  • Kỹ sư học máy (Machine Learning Engineer): Để trở thành một kỹ sư học máy giỏi, bạn cần sử dụng các mô hình dự đoán và có khả năng xử lý ngôn ngữ tự nhiên khi làm việc với các bộ dữ liệu lớn. Kỹ năng lập trình, kiến thức toán học và am hiểu sâu về các phương pháp phát triển agile sẽ là những yếu tố quan trọng khi ứng tuyển vào các vị trí học máy.
  • Kỹ sư siêu dữ liệu (Big Data Engineer): Big Data Engineer là người chịu trách nhiệm thiết kế, xây dựng và duy trì các hệ thống lưu trữ và xử lý dữ liệu lớn. Để được tuyển dụng, ứng viên cần có kinh nghiệm lập trình với C++, Java, Python hoặc Scala. Ngoài ra, họ cần có kiến thức chuyên sâu và kinh nghiệm về khai thác, trực quan hóa và di chuyển dữ liệu.
  • Lập trình ngôn ngữ tư duy (NLP): Hiện nay, nhiều doanh nghiệp đang tuyển dụng các lập trình viên có khả năng tư duy về lập trình ngôn ngữ, bởi vì sự phổ biến của trí tuệ nhân tạo trong lĩnh vực này đang ngày càng tăng cao. Ví dụ như chatbots, trợ lý ảo trên điện thoại thông minh, và nhiều ứng dụng khác.
  • AI Researcher: Nhà nghiên cứu AI (AI Researcher) là một chuyên gia trong lĩnh vực trí tuệ nhân tạo, chuyên thực hiện các nghiên cứu chuyên sâu trong nhiều lĩnh vực như Machine Learning, Deep Learning, xử lý ngôn ngữ tự nhiên, thị giác máy tính và robot. Công việc của họ bao gồm phát triển các thuật toán mới, tạo ra nguyên mẫu phần mềm, và công bố các phát hiện quan trọng trên các tạp chí khoa học hàng đầu.
  • AI Analyst: AI Analyst là một chuyên gia đóng vai trò quan trọng trong việc khai thác và phân tích dữ liệu liên quan đến trí tuệ nhân tạo. Công việc của họ bao gồm thu thập, xử lý và phân tích dữ liệu để đưa ra cái nhìn sâu sắc về hiệu suất và hiệu quả của các hệ thống và ứng dụng AI. Dựa trên những phân tích này, họ đề xuất các cơ hội cải tiến và giúp tổ chức đưa ra các quyết định dựa trên dữ liệu.

Học ngành Trí tuệ nhân tạo ở đâu?

Việc chọn trường để học ngành Trí tuệ nhân tạo (AI) phụ thuộc vào nhiều yếu tố như chất lượng đào tạo, cơ hội thực hành, và môi trường nghiên cứu. Dưới đây là một số gợi ý về các trường đại học nổi tiếng ở Việt Nam và quốc tế, nơi bạn có thể theo học ngành AI:

Đại học Bách khoa Hà Nội

Đại học Bách khoa Hà Nội

Đây là ngôi trường có chương trình đào tạo kỹ thuật cao, trong đó ngành Khoa học Dữ liệu và Trí tuệ Nhân tạo (Data Science and AI) là một trong những ngành mũi nhọn. Chương trình được thiết kế và giảng dạy bởi các giáo sư hàng đầu trong nước và quốc tế, dạy 100% bằng tiếng Anh.

Đại học Công nghệ Thông tin – Đại học Quốc gia TPHCM

Đại học Công nghệ Thông tin - Đại học Quốc gia TPHCM

UIT là một trong những trường đại học hàng đầu Việt Nam về công nghệ thông tin. Chương trình học ngành AI được xây dựng trên nền tảng về Khoa học máy tính, tăng cường kiến thức chuyên sâu về Trí tuệ nhân tạo và khả năng ứng dụng liên ngành cho sinh viên.

Đại học Khoa học tự nhiên – Đại học Quốc gia TPHCM

Đại học Khoa học tự nhiên - Đại học Quốc gia TPHCM

Đại học Khoa học tự nhiên là trường đầu tiên ở khu vực phía Nam đào tạo ngành Trí tuệ nhân tạo (Artificial Intelligence – AI). Chương trình học của trường cung cấp cho sinh viên những kiến thức về các lĩnh vực cốt lõi của AI như xử lý ngôn ngữ tự nhiên, học máy và thị giác máy tính. Trường đã mạnh dạn đầu tư hơn 70 tỷ đồng cho các phòng thí nghiệm chuyên sâu về AI, các hệ thống thông minh để hỗ trợ cho quá trình học tập của sinh viên.

Điểm chuẩn ngành Trí tuệ nhân tạo của các trường

Dưới đây là tổng hợp điểm chuẩn ngành Trí tuệ nhân tạo năm 2024 của các trường tại Việt Nam (điểm chuẩn theo phương thức xét tuyển điểm thi THPT Quốc gia):

Trường Ngành tuyển sinh Điểm chuẩn
Đại học Công nghệ Thông tin – ĐHQG TPHCM Trí tuệ nhân tạo 28.30
Đại học Bách khoa Hà Nội Khoa học dữ liệu và Trí tuệ nhân tạo (CT tiên tiến) 28.22
Đại học Khoa học tự nhiên – ĐHQG TPHCM Trí tuệ nhân tạo 27.70
Đại học Sư phạm Kỹ thuật TP.HCM Robot và trí tuệ nhân tạo (đào tạo bằng tiếng Việt) 25.66
Đại học Công nghệ – Đại học Quốc gia Hà Nội Trí tuệ nhân tạo 27.12
Đại học Kinh tế Quốc dân Trí tuệ nhân tạo (Toán hệ số 2) 34.05
Đại học Công nghiệp Hà Nội Robot và trí tuệ nhân tạo 25.01

Tổng kết

Tóm lại, trí tuệ nhân tạo (AI) tuy là một ngành khá mới nhưng cơ hội việc làm trong tương lai vô cùng rộng mở. Hy vọng rằng bài viết này sẽ giúp bạn có cái nhìn tổng quan về ngành trí tuệ nhân tạo ở Việt Nam. Đừng quên theo dõi TopDev để cập nhật thêm nhiều tin tức công nghệ mới nhất nhé!

Xem thêm:

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

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

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

ChatGPT đang là một trong những chủ đề được nhiều người quan tâm nhất hiện nay bao gồm cả anh em IT, lập trình viên. Có thể xem ChatGPT là một chatbot tích hợp trí tuệ nhân tạo với khả năng trả lời lại những câu hỏi của người dùng; và đáng chú ý là những câu hỏi không hề giới hạn một lĩnh vực nào kể cả lập trình. Nhiều bài viết, đánh giá cho rằng ChatGPT có thể thay thế lập trình viên trong tương lai, tuy vậy thì ở hiện tại, ChatGPT đang thực sự giúp ích được khá nhiều việc dành cho anh em DEV. Bài viết hôm nay chúng ta cùng nhau tìm hiểu xem dân IT có thể được ChatGPT hỗ trợ viết code tự động hóa như thế nào nhé. 

Khả năng lập trình của ChatGPT

CFTE, một tổ chức uy tín về công nghệ đã thử nghiệm kỹ năng lập trình của ChatGPT bằng cách cho nó tham gia một bài kiểm tra gồm 15 câu hỏi trắc nghiệm cho phép chọn nhiều đáp án, nội dung về lập trình Python (ngôn ngữ lập trình phổ biến nhất hiện nay). Mỗi câu hỏi có giới hạn thời gian trả lời trong vòng 1 phút 30 giây. Và kết quả là ChatGPT đã hoàn thành cả 15 câu hỏi trong thời gian cho phép và đạt điểm cao hơn 85% trong gần 4 triệu lập trình viên từng tham gia thực hiện bài test này.

Khả năng lập trình của ChatGPT

Trước đó, ChatGPT cũng đã vượt qua được bài phỏng vấn xin việc của Google và được ứng tuyển vào vị trí lập trình viên cấp độ 3 tại công ty, tương đương với mức lương 183 nghìn USD/năm. Chỉ 2 ví dụ trên đã cho thấy khả năng lập trình ấn tượng của ChatGPT, điều quan trọng hơn là khả năng học hỏi của nó diễn ra hàng ngày, có nghĩa là ChatGPT hoàn toàn có khả năng thông minh hơn trong việc lập trình trong tương lai.

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

Lập trình viên có thể sử dụng ChatGPT như thế nào

Trái với những bài viết cho rằng ChatGPT sẽ thay thế anh em DEV trong tương lai, thì ở thời điểm hiện tại sau hơn nửa năm ra mắt (cuối năm 2022), lập trình viên lại xem ChatGPT như một công cụ hữu ích cho việc lập trình. Công cụ này thường được sử dụng để tạo nhanh các frame, bản code mẫu (template) để dựng ứng dụng tiết kiệm rất nhiều thời gian khởi tạo dự án cho anh em DEV.

Nó cũng có thể là một công cụ debug hữu ích dành cho anh em nhờ việc phân tích các đoạn code mà chúng ta cung cấp. Hay thiết thực hơn là các công việc liên quan đến tạo tài liệu, viết testcase,… những thứ mà dường như lập trình viên lười làm nhất. Chúng ta cùng đi cụ thể vào những ứng dụng mà ChatGPT mang lại cho anh em DEV nhé.

Khả năng lập trình của ChatGPT

1. Tìm tài liệu và hướng dẫn

Hãy sử dụng ChatGPT như một Google cho việc tìm tài liệu lập trình, tạo code mẫu hay đọc document chuẩn. Khi chúng ta đặt câu hỏi càng chi tiết thì ChatGPT sẽ càng cho ra câu trả lời chính xác mà chúng ta cần, bao gồm cả source code kèm theo lời giải thích chính xác.

Khả năng lập trình của ChatGPT

Ví dụ như trên chúng ta muốn nhờ ChatGPT tạo một đoạn code cho việc gọi API bằng thư viện axios trong React. Kết quả nhận được là các bước chi tiết step by step rõ ràng từ việc cài đặt thư viện, import thư viện đến đoạn code mẫu các sử dụng thư viện Axios bằng đúng ngôn ngữ lập trình JavaScript trong React. Nếu so với cách truyền thống, chúng ta cần phải gõ từ khóa vào Google, chọn một vài kết quả đáng tin, xong đó lại xem từng đoạn sample code khá rắc rối thì ChatGPT giúp công việc tiết kiệm được đến 90% thời gian cho bạn đấy.

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

2. Debug code

Để kiểm tra xem đoạn code bạn viết có đúng hay không, hay phức tạp hơn là muốn xem bạn của bạn có thể sai chỗ nào, muốn sửa lại nó thì làm thế nào; đừng ngại hãy copy cả đoạn code đó để ChatGPT xử lý nhé.

Khả năng lập trình của ChatGPT

Ở ví dụ trên khi cung cấp cho ChatGPT 1 đoạn code và hỏi xem nó đúng hay sai thì chúng ta nhận được một câu trả lời không thể chi tiết hơn với 3 lỗi sai được chỉ ra cùng một đoạn code đã chỉnh sửa cho hợp lý. Cụ thể 3 lỗi bạn gặp phải gồm:

  • Sử dụng biến X viết hoa và viết thường
  • Sử dụng toán tử gắn “=” trong câu lệnh If, mà đúng thì phải dùng toán tử “==”
  • 2 dòng code print bạn cần thụt dòng vào thì mới đúng syntax của ngôn ngữ Python

  Fuzzy search là gì? Những điều cần biết về thuật toán fuzzy

3. Refactor code

Không chỉ debug code, ChatGPT còn có khả năng tối ưu source code, cải thiện chính đoạn code mà chúng ta viết ra. Trong nhiều trường hợp nếu bạn cung cấp đủ dữ kiện đầu vào, ChatGPT có khả năng đưa ra các gợi ý giúp bạn refactor lại cả source code dự án của bạn theo đúng các chuẩn gợi ý từ framework, thư viện, ngôn ngữ mà bạn sử dụng. 

Khả năng lập trình của ChatGPT

Trong ví dụ trên, bạn yêu cầu ChatGPT viết lại function trong Python bạn cung cấp theo cách mà ngôn ngữ này đề xuất hay cộng đồng lập trình viên Python cho là tốt (Idiomatic Python). Và kết quả bạn nhận lại không làm bạn thất vọng, thậm chí còn đề xuất việc sử dụng một Set thay vì một List để lưu trữ các thành phố (city).

4. Viết documentation

ChatGPT có thể đọc đoạn code bạn cung cấp đầu vào và viết documentation (hướng dẫn sử dụng) cho đoạn code đó. Đây là tính năng tuyệt vời giúp bạn tiết kiệm rất nhiều thời gian cho một công việc vẫn thường được xem là nhàm chán đối với phần lớn anh em lập trình viên. Dưới đây là một ví dụ là ChatGPT tự động tạo doc cho đoạn code viết bằng Python đầu vào, rất chi tiết và rõ ràng.

Khả năng lập trình của ChatGPT

Kết bài

Trên đây là một số ứng dụng mà ChatGPT mang lại danh cho dân IT nói chung cũng như anh em lập trình viên nói riêng. ChatGPT rất hữu dụng cho chúng ta nếu biết khai thác đúng cách, vì thế hãy tận dụng nó chứ đừng lạm dụng công cụ này; điều quan trọng vẫn là phải tự mình tư duy cũng như giải quyết bài toán gặp phải trong quá trình làm dự án. ChatGPT sẽ giúp bạn tiết kiệm rất nhiều thời gian và trở nên giỏi hơn trong lĩnh vực, nghề nghiệp của bạn. Hy vọng bài viết này mang lại những thông tin hữu ích dành cho bạn, hẹn gặp lại các bạn trong các bài viết tiếp theo của mình. 

Tác giả: Phạm Minh Khoa

Xem thêm:

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

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

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

Vào khoảng thời gian những năm 2010, cách đây hơn 10 năm, khi mà các thiết bị smartphone chạy hệ điều hành Android hay iOS chưa quá phổ biến, thì cũng là thời kỳ vàng son của các game Java trên điện thoại di động còn bàn phím số. Ngày nay với việc smartphone chạy các hệ điều hành chuyên biệt, không hỗ trợ cài đặt, chạy các ứng dụng viết bằng Java; thì để trải nghiệm lại những tựa game được xem là bầu trời tuổi thơ của thế hệ 8x, 9x chúng ta cần đến các ứng dụng giả lập Java trên smartphone. Bài viết hôm nay chúng ta cùng điểm qua một số các ứng dụng giả lập Java trên Android phổ biến hiện nay nhé.

Giả lập Java là gì?

Java là 1 ngôn ngữ lập trình bậc cao được phát triển bởi Sun Microsystems (hiện tại thuộc sở hữu của Oracle) từ những năm 1995. Java với sự đa năng của nó có thể được sử dụng để viết được các phần mềm dành cho môi trường Desktop, Web và cả các hệ thống nhúng, thiết bị mobile.

Trong đó 3 phiên bản Java khác nhau được xây dựng để phục vụ cho từng mục đích chuyên biệt:

Giả lập Java trên Android

Thời điểm smartphone chạy hệ điều hành Android hay iOS chưa phổ biến thì để viết một ứng dụng trên thiết bị di động, Java là một lựa chọn phổ biến với phiên bản J2ME (Java Platform Micro Edition). Những ứng dụng được viết ra với file có đuôi .jar, .jad chạy trên các hệ điều hành mobile phổ biến trước đây như Symbian.

Giả lập Java trên Android

Android mặc dù được viết bằng Java, nhưng nó không hỗ trợ J2ME hay J2SE, vì vậy nó không thể chạy trực tiếp các file .jar hay .jad. Để giải quyết vấn đề này chúng ta sẽ có 2 cách là:

  • Chuyển đổi tệp .jar hay .jad sang thành .apk – 1 loại file có thể được cài đặt và sử dụng trên hệ điều hành Android
  • Tạo 1 môi trường để chạy ứng dụng java trên hệ điều hành Android => hay chúng ta gọi là giả lập Java trên Android

Có khá nhiều phần mềm giả lập Java trên Android hiện nay, mỗi phần mềm có những ưu điểm và nhược điểm khác nhau do sự tương thích khi chạy ứng dụng Java tùy theo thư viện mà giả lập đó sử dụng. Chúng ta cùng điểm qua một số ứng dụng phổ biến nhé.

  Các phần mềm giả lập Java dành cho máy tính tốt nhất

Những phần mềm giả lập Java trên Android phổ biến

J2ME

J2ME có thể xem là trình giả lập Java phổ biến nhất hiện nay với những tính năng cực kỳ tiện lợi và dễ sử dụng. Ưu điểm đầu tiên của nó là việc được phát hành trên chợ ứng dụng Google Play hoàn toàn miễn phí và bạn không cần root(một thủ thuật để lấy quyền sử dụng cao nhất trên thiết bị Android) thiết bị để sử dụng. 

Giả lập Java trên Android

J2ME có 2 phiên bản là J2ME Loader và J2ME Runner trong đó phiên bản Runner có chức năng chuyển đổi file java thành file APK để chạy và cài đặt lên hệ điều hành Android. Phiên bản Loader thì sẽ trực tiếp chạy ứng dụng Java trên giả lập của nó, vì thế cũng được ưa chuộng hơn. Ưu điểm nổi bật của J2ME là:

  • Tương thích với hầu hết các phiên bản Android hiện nay
  • UI/UX thân thiện với người dùng
  • Hỗ trợ hầu hết các game, ứng dụng Java phổ biến
  • Hỗ trợ thiết bị đã root hoặc chưa root
  • Có những phiên bản cập nhật thường xuyên
  • Dung lượng ứng dụng nhẹ

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

JBed

Nếu như J2ME phổ biến với hầu hết người dùng nhờ sự đơn giản thì Jbed lại là ứng dụng giả lập Java cho Android được những người dùng yêu thích công nghệ, thích tìm tòi đề cao yêu thích. Điểm khác biệt lớn nhất của Jbed với J2ME là nó bắt buộc thiết bị phải root trước khi cài đặt, điều này mang lại cho giả lập khả năng can thiệp sâu vào hệ thống nhằm dễ dàng lấy được quyền và thực thi các ứng dụng Java trên thiết bị Android. 

Giả lập Java trên Android

Cũng vì bắt buộc phải root nên Jbed không được phát hành chính thức qua Google Play mà các bạn phải download và cài đặt thông qua file APK từ các nguồn không chính thống. Đây có thể là một điểm bất tiện của Jbed, mặc dù vậy đối với những người thích sự tùy chỉnh, đam mê tìm hiểu thì Jbed có nhiều ưu điểm:

  • Tốc độ cài đặt, chạy ứng dụng Java rất nhanh và mượt
  • Khả năng tương thích với nhiều tựa game nặng, cả 2D và 3D
  • Cộng đồng hỗ trợ của JBed cũng đông đảo và sôi nổi hơn so với các ứng dụng giả lập khác

  Cách Thiết Lập Máy Ảo, Máy Thật & Khởi Chạy Ứng Dụng Trong Android

PhoneMe

Nếu như J2ME và JBed không giúp chạy được ứng dụng Java mà bạn mong muốn trên Android thì PhoneMe sẽ được xem là hy vọng cuối cùng. Đây là phần mềm giả lập lâu đời nhất và vì thế nó không tương thích với các bản Android mới hiện nay. Dù vậy đấy cũng chính là ưu điểm của nó khi nó có khả năng chạy các ứng dụng, tựa game cũ, lâu đời của Java, những ứng dụng mà khả năng cao không thể chạy được trên J2ME hay JBed. 

Giả lập Java trên Android

PhoneMe cũng không phát hành chính thức qua Google Play, việc cài đặt cũng sẽ khá khó khăn, cần mất thời gian tìm hiểu. Tuy nhiên như đã nói ở trên, điểm mạnh của nó sẽ được phát huy giúp bạn hài lòng với nhiều ứng dụng Java cũ mà bạn khó cài đặt thành công trên các giả lập khác.

Kết bài

Như vậy chúng ta đã cùng điểm qua được các ứng dụng giả lập Java trên Android phổ biến hiện nay. Với sự phát triển của smartphone cùng sức mạnh của các hệ điều hành hiện nay thì các ứng dụng, game trở nên phong phú, đẹp mắt và lôi cuốn hơn trước rất nhiều. Tuy vậy để có thể trải nghiệm lại tuổi thơ thì việc lựa chọn giả lập Java trên smartphone của bạn là một lựa chọn không tồi. 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

Xem thêm:

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

Lộ trình học công nghệ thông tin hiệu quả cho người mới bắt đầu

Kinh nghiệm học Công nghệ thông tin dành cho người mới bắt đầu

Trong cách mạng công nghiệp 4.0, ngành Công nghệ thông tin đã trở thành động lực chính thúc đẩy sự phát triển vượt bậc của thế giới hiện đại. Những ứng dụng tiên tiến và những cải tiến không ngừng đã thay đổi cách chúng ta sống, làm việc và giao tiếp.

Nếu bạn là một người mới bước chân vào thế giới đầy hứa hẹn này, thì có rất nhiều điều phải làm. Vì vậy, trong bài viết này, chúng ta sẽ cùng nhau điểm qua những bước khởi đầu quan trọng, từ việc xây dựng nền tảng kiến thức cơ bản, lựa chọn ngôn ngữ lập trình phù hợp, đến cách thúc đẩy tư duy sáng tạo trong việc giải quyết các thách thức công nghệ.

Bắt đầu thôi nào!

Công nghệ thông tin là gì? Tại sao nhiều người chọn học CNTT?

Công nghệ thông tin là gì?

Công nghệ thông tin

Ngành Công nghệ thông tin (CNTT) là lĩnh vực chuyên môn liên quan đến việc sử dụng máy tính và phần mềm máy tính để thu thập, lưu trữ, xử lý và quản lý thông tin. Ngành này tập trung vào việc nghiên cứu, phát triển và duy trì các hệ thống thông tin; ứng dụng công nghệ để giải quyết nhiều vấn đề của xã hội, kinh doanh, giáo dục, y tế, khoa học và các lĩnh vực khác.

Tại sao nhiều người chọn học CNTT?

Ngành CNTT đang trở thành một lĩnh vực ngày càng quan trọng trong cuộc cách mạng công nghiệp 4.0. Sự phát triển của công nghệ và cuộc sống số đã tạo ra nhu cầu rất lớn về nguồn nhân lực CNTT, đặc biệt là trong việc phát triển, quản lý các ứng dụng, phần mềm và hệ thống thông tin phức tạp.

báo cáo thị trường IT năm 2022
Báo cáo thị trường IT Việt Nam năm 2022 của TopDev

Bên cạnh đó, ngành CNTT cung cấp nhiều cơ hội việc làm và tiềm năng tăng trưởng nghề nghiệp trong tương lai. Theo báo cáo thị trường IT năm 2022 của TopDev, đến năm 2024 Việt Nam vẫn thiếu hụt khoảng 195.000 lập trình viên/kỹ sư hằng năm. Cùng với đó, làn sóng đầu tư nước ngoài đã mang đến nhiều cơ hội cho các lập trình viên, thúc đẩy hoạt động tuyển dụng nhân sự CNTT trở nên sôi động hơn bao giờ hết.

Vậy nên, ngành CNTT vẫn sẽ giữ vững sức hút của mình trong nhiều năm nữa. Đây sẽ là một sự lựa chọn tuyệt vời cho những ai theo đuổi đam mê công nghệ.

  Top 10 Trường đào tạo ngành Công nghệ thông tin tốt nhất

  Con gái học Công nghệ thông tin được không? Các chuyên ngành IT nữ giới nên học

Người mới học CNTT nên bắt đầu từ đâu?

Tìm hiểu các thông tin cơ bản về ngành

Trước khi bắt đầu học sâu vào một ngành cụ thể, việc hiểu rõ các thông tin cơ bản là điều vô cùng quan trọng. Điều này sẽ giúp bạn có cái nhìn tổng quan về ngành học, phát hiện mảng nào hấp dẫn và tạo lộ trình học tập hiệu quả nhất cho bản thân.

Xác định lĩnh vực bạn muốn học

học CNTT

Ngành công nghệ thông tin rất lớn, bạn cần xác định được đâu là thứ bản thân mình muốn theo học. Dưới đây là một số gợi ý nhóm ngành CNTT bạn có thể tham khảo:

  • Khoa học máy tính (Computer Science): Đây là là một ngành học nền tảng, cho phép bạn thấu hiểu mọi khía cạnh của máy tính, từ thiết kế, chế tạo, vận hành cho đến sửa chữa các yếu tố như phần cứng, phần mềm, hệ thống, nhằm đáp ứng nhu cầu của khách hàng hoặc người dùng. Đây là lĩnh vực dành riêng cho những người đam mê máy tính, và muốn tìm hiểu sâu về nền tảng của công nghệ này.
  • Mạng máy tính và truyền thông dữ liệu (Data Communication and Computer Network): Đây là là một trong những lĩnh vực chuyên sâu của Công nghệ thông tin, tập trung vào việc nghiên cứu, triển khai, và quản lý các hệ thống mạng máy tính và truyền thông dữ liệu. Ngành này chịu trách nhiệm xây dựng và duy trì các mạng máy tính, hệ thống viễn thông, và cơ sở dữ liệu để đảm bảo việc truyền tải dữ liệu thông tin diễn ra một cách hiệu quả và bảo mật.
  • Kỹ thuật máy tính (Computer Engineering): Đây là một ngành học kết hợp giữa kiến thức về Điện tử và Công nghệ thông tin, tập trung nghiên cứu cách xây dựng và phát triển thiết bị cùng với các phần mềm hỗ trợ hoạt động của các thiết bị phần cứng. Ngành này có sự liên quan chặt chẽ đến vật lý, kỹ thuật điện và khoa học máy tính.
  • Công nghệ Phần mềm (Software Engineering): Đây là một chuyên ngành tập trung vào nghiên cứu về hệ thống kỹ thuật và phần mềm máy tính. Mục tiêu của ngành là xây dựng các ứng dụng nhằm tăng cường hiệu quả hoạt động của doanh nghiệp và cải thiện chất lượng cuộc sống của con người.
  • Big Data & Machine Learning: Ngành học này tập trung vào việc nghiên cứu và ứng dụng các phương pháp, công cụ để xử lý và phân tích dữ liệu lớn (Big Data) thông qua trí tuệ nhân tạo và học máy (Machine Learning).

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

Học viết code – Lựa chọn ngôn ngữ lập trình

ngôn ngữ lập trình
Nguồn: https://www.statista.com/chart/16567/popular-programming-languages/

Sau khi đã xác định được chuyên ngành, bước tiếp theo là lựa chọn ngôn ngữ lập trình để theo học. Một số ngôn ngữ lập trình phổ biến bạn có thể tham khảo như: Python, Java, JavaScript, C++, C#, PHP, Swift, Ruby,… Bạn có thể bắt đầu với một ngôn ngữ dễ học như Python để làm quen với lập trình, sau đó mở rộng kiến thức sang các ngôn ngữ khác khi bạn trở nên thành thạo hơn.  

Nâng cao kiến thức qua các nguồn tài liệu chất lượng

Để nâng cao kiến thức và khả năng lập trình bạn cần tham khảo nhiều nguồn tài liệu khác nhau, có thể là sách, video hướng dẫn, khóa học online, blog công nghệ hay các bài báo khoa học. Quan trọng nhất, hãy chọn những nguồn tài liệu phù hợp với mục tiêu học tập của bạn và luôn kiểm tra tính đáng tin cậy của nguồn thông tin trước khi sử dụng.

Nắm bắt cơ hội thực hành

Nếu chỉ họ kiến thức mà không thực hành thì bạn sẽ rất khó tiến bộ trong ngành này. Thực hành giúp bạn áp dụng những kiến thức đã học vào thực tế, rèn luyện khả năng giải quyết vấn đề và tăng cường kỹ năng thực tiễn. Bạn có thể rèn luyện kỹ năng của mình qua các dự án cá nhân, dự án nhóm, tham gia thực tập hoặc làm freelancer. Hãy luôn tận dụng mọi cơ hội để rèn luyện và phát triển bản thân trong lĩnh vực Công nghệ thông tin.

Một số lời khuyên cho các bạn mới bắt đầu học lập trình

Dành cho các bạn mới bắt đầu học lập trình, dưới đây là một số lời khuyên hữu ích giúp bạn bước vào hành trình học tập một cách hiệu quả:

Đừng vội, chậm mà chắc

Nhiều bạn khi bắt đầu học lập trình được 1 – 2 tuần sẽ nắm bắt rất nhanh, dẫn đến chủ quan nghĩ rằng lập trình khá dễ. Các bạn lao vào học các kiến thức chuyên sâu mà bỏ qua những điều nền tảng. Nhưng về sau càng gặp các vấn đề phức tạp hơn bạn lại lúng túng không biết giải quyết như thế nào.

Vậy nên, bạn hãy bắt đầu học từ những điều cơ bản nhất, hình thành thói quen tốt về tư duy giải quyết vấn đề, phải thật sự hiểu rõ vấn đề trước khi bắt tay vào giải quyết nó.

Học từ những ví dụ có sẵn

học code

Tìm hiểu và nghiên cứu các ví dụ code có sẵn trong sách, trang web và các dự án mã nguồn mở. Điều này giúp bạn hiểu cách các lập trình viên thực tế làm việc và học được cách tiếp cận và giải quyết vấn đề.

Không sợ thất bại và kiên nhẫn: Học lập trình là một quá trình không ngừng nghỉ và đôi khi có thể gặp khó khăn. Không sợ thất bại và kiên nhẫn vượt qua những khó khăn để tiến bộ.

Đặt ra những thách thức mới cho bản thân

Trong quá trình học lập trình, tự thách thức bản thân là một cách cần thiết để phát triển và tiến bộ. Điều này bao gồm việc đối diện với các vấn đề dự án phức tạp hơn, thử sức với những khái niệm mới và kiên nhẫn vượt qua các thách thức.

Liên tục cập nhật kiến thức mới

Trong ngành Công nghệ thông tin, sự thay đổi và tiến bộ diễn ra với tốc độ nhanh chóng. Do đó, việc liên tục cập nhật kiến thức mới là điều cần thiết để theo kịp xu hướng công nghệ và phát triển bản thân. Công nghệ, ngôn ngữ lập trình, framework và các công cụ trong lĩnh vực này đều có thể thay đổi và cải tiến theo thời gian.

Kết luận

Học Công nghệ thông tin là một hành trình thú vị và đầy thách thức cho người mới bắt đầu. Hy vọng bài viết này đã giúp bạn hiểu hơn về ngành CNTT và xác định được lộ trình học phù hợp với bản thân. Chúc bạn thành công với đam mê của mình.

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

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

MIME Sniffing là gì? Cách để bảo vệ website khỏi cuộc tấn công “dò tìm” MIME

Làm thế nào để bảo vệ website khỏi cuộc tấn công

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

Vấn đề

Có thể bạn đã biết, song song với việc bảo mật website ở máy chủ để đảm bảo không ai có thể truy cập được để thực hiện hành vi trái phép, thì bảo mật phía máy khách (client) cũng không hề được xem nhẹ. Mỗi năm, các trình duyệt web phổ biến luôn được cập nhật thêm các bản vá lỗ hổng bảo mật kèm với việc bổ sung các đặc tả kĩ thuật nhằm tăng tính bảo mật hơn cho trình duyệt của họ. Một trình duyệt có thể bảo vệ người dùng tối đa thì ai mà chẳng muốn sử dụng.

MIME types là một trong những đặc tả cho biết bản chất và định dạng của tài liệu, tệp hoặc phân loại byte. Lấy một ví dụ đơn giản cho dễ hình dung là một endpoint API nếu trong headers trả về có chứa thuộc tính Content-Type: application/json thì ngay lập tức client sẽ biết dữ liệu trả về là ở định dạng JSON, từ đó có phương án xử lý phù hợp thay vì phải cố “đoán” xem dữ liệu trả về là text, image hay video…

MIME Sniffing

Nếu không có Content-Type hoặc ở một số trình duyệt không “thích” kiểm tra Content-Type thì nó sẽ tiến hành một cuộc “dò tìm” xem dữ liệu trả về ở dạng nào. Điều này vô tình tạo ra một cuộc tấn công gọi là “MIME Sniffing”.

  Một số lệnh console hữu ích khi debug website

  Cách tích hợp ReactJS vào dự án website bất kỳ

MIME Sniffing là gì?

MIME Sniffing đã và đang là một kỹ thuật được một số trình duyệt web (chủ yếu là Internet Explorer) sử dụng để kiểm tra nội dung của một nội dung cụ thể. Việc này được thực hiện nhằm mục đích xác định định dạng tệp của nội dung phản hồi. Kỹ thuật này hữu ích trong trường hợp không có đủ thông tin như Content-Type cho một nội dung cụ thể, do đó có khả năng trình duyệt diễn giải nội dung không chính xác.

Mặc dù việc dò tìm MIME có thể hữu ích để xác định định dạng tệp chính xác của nội dung nhưng nó cũng có thể gây ra lỗ hổng bảo mật. Lỗ hổng này có thể khá nguy hiểm cho cả chủ sở hữu cũng như khách truy cập trang web. Điều này là do kẻ tấn công có thể tận dụng khả năng “dò tìm” MIME để thực hiện một cuộc tấn công XSS (Cross Site Scripting).

Mô tả quá trình MIME Sniffing khá đơn giản. Bao gồm các bước chính sau:

  • Trình duyệt web yêu cầu một nội dung cụ thể phản hồi không có loại nội dung hoặc loại nội dung được đặt trước đó tại máy chủ gốc.
  • Trình duyệt web “dò tìm” nội dung để phân tích nội dung cụ thể đó là định dạng tệp nào.
  • Khi trình duyệt đã hoàn thành phân tích, nó sẽ so sánh những gì nó tìm thấy với những gì máy chủ web cung cấp trong Content-Type tiêu đề (nếu có). Nếu có sự không khớp, trình duyệt sẽ sử dụng loại MIME mà nó xác định là được liên kết với nội dung.

Giả sử trang web của bạn cho phép người dùng upload tệp tin lên máy chủ. Bạn chỉ chấp nhận định dạng ảnh cụ thể là JPG. Kẻ tấn công nhanh trí đổi đuôi một tệp HTML thành .jpg rồi tải tệp lên. Khi đó nếu trình duyệt thực hiện “dò tìm” MIME khi cố gắng hiển thị hình ảnh, khả năng cao đoạn mã HTML sẽ được thực thi ở trình duyệt.

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

Cách thiết lập ngăn trình duyệt dò tìm MIME

Hầu hết các trình duyệt hiện nay đều tôn trọng tiêu đề này, bao gồm Chrome/Chromium, Edge, IE >= 8.0, Firefox >= 50 và Safari >= 11.

MIME Sniffing

Để thiết lập, bạn chỉ cần đặt X-Content-Type-Options: nosniff trong phản hồi của headers HTTP của máy chủ.

Ví dụ, nếu bạn đang dùng nginx làm máy chủ.

server {
    listen 443 ssl;

    ...

    add_header X-Content-Type-Options nosniff;
    ...

Tổng kết

Mặc dù ngày nay cơ chế bảo mật này có thể là thiết lập mặc định hoặc là cấu hình “không thể thiếu” của máy chủ web. Tuy nhiên tôi hy vọng qua bài viết này cung cấp cho bạn đọc thêm một góc nhìn về tầm quan trọng của các đặc tả kỹ thuật, cũng như các hành vi có thể bị khai thác để sử dụng trong mục đích xấu bất kì lúc nào.

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

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

Tại sao trên Linux hay dùng những định dạng file nén như *.gz, *.xz thay vì *.zip, *.7z?

Vì sao Linux hay dùng những định dạng file nén như *.gz, *.xz?

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

Những bạn đang dùng Windows mà tìm hiểu về Linux sẽ thấy trên Linux, những định dạng file nén quen thuộc như *.zip*.7z lại không được ưa chuộng, mà lại thấy người ta hay sử dụng *.gz*.tar.gz*.zz*.tar.xz, mặc dù cả định dạng và thuật toán của zip, 7zip đều là mã nguồn mở. Thế thì tại sao?

Đầu tiên, hãy nói về một định dạng file nén khác cực kì được ưa chuộng trên Windows là *.rar. Lý do định dạng này vắng mặt trên Linux thì dễ hiểu hơn, đó là nó không phải là phần mềm nguồn mở.

Quay lại *.zip và *.7z. Lý do chúng không được ưa chuộng là vì chúng không hỗ trợ nén và giải nén theo kiểu “cuốn chiếu”. Theo kiểu “cuốn chiếu” nghĩa là, ví dụ như bạn đang download một file nén lớn và bạn muốn download tới đâu, giải nén tới đó, không phải chờ download xong xuôi rồi mới giải nén. Tính năng “cuốn chiếu” này quan trọng đối với người dùng Linux vì trên Linux, môi trường dòng lệnh rất mạnh, có một tính năng gọi là “pipe” và tính “cuốn chiếu” kết hợp với “pipe” thì giúp công việc hiệu quả gấp nhiều lần.

Ví dụ, tôi hay sử dụng “pipe” (truyền dữ liệu đầu ra của chương trình này vào đầu vào của chương trình khác) khi tôi muốn copy cơ sở dữ liệu từ server về máy cá nhân:

$ ssh my-server 'pg_dump -O database_name' | psql database_name

Câu lệnh trên có nghĩa là:

  • SSH vào server my-server, chạy lệnh pg_dump trên đó để dump dữ liệu PostgreSQL. Tuy nhiên kết quả dump không lưu vào file mà đẩy ra standard output (stdout). Khi bạn chạy lệnh pg_dump trong ssh thì stdout của pg_dump sẽ được ngầm download về, nhả ra qua stdout của ssh luôn.
  • Cùng lúc đó, chạy lệnh psql trên máy cá nhân để khôi phục dữ liệu đã dump.
  • Toán tử pipe (|) giúp kết nối stdout của ssh với standard input (stdin) của psql. Như vậy kết quả dump của pg_dump sẽ đi thẳng vào psql mà không cần ra một file trung gian.

  Cài đặt Rust trên Arch Linux

Trong trường hợp dữ liệu hơi lớn mà đường truyền Internet không quá nhanh thì tôi sẽ nén kết quả dump trước rồi mới gửi về máy cá nhân, bằng cách chèn thêm gzip vào:

$ ssh my-server 'pg_dump -O database_name | gzip' | gunzip | psql database_name

Câu lệnh trên có nghĩa là:

  • SSH vào server my-server, chạy lệnh pg_dump trên đó để dump dữ liệu PostgreSQL. Kết quả dump không lưu vào file mà đẩy ngay sang cho gzip để nén. Đầu ra đã nén sẽ được download và đi ra stdout của lệnh ssh.
  • Kết quả nén download được tới đâu, sẽ truyền ngay qua gunzip tới đó để giải nén.
  • Kết quả giải nén lại được truyền ngay vào psql để khôi phục dữ liệu mà không cần qua file trung gian.

Tại sao trên Linux hay dùng những định dạng file nén như *.gz, *.xz thay vì *.zip, *.7z?

Xem thêm tuyển dụng Linux lương cao trên TopDev

Nếu bạn muốn độ nén mạnh như 7zip thì bạn thay gzip bằng xz:

$ ssh my-server 'pg_dump -O database_name | xz' | unxz | psql database_name

Tất cả các ứng dụng trên, từ ssh đến psql đều xử lý dữ liệu theo kiểu “cuốn chiếu” nên kết hợp với “pipe” là tuyệt vời.

Nếu bạn thắc mắc tại sao có thể dùng lệnh pg_dump và psql một cách ngắn gọn, không cần cung cấp host, username, password, thì đọc thêm bài này.

Vì mục tiêu hỗ trợ nén & giải nén cả stream (luồng dữ liệu đang chảy) nên gzipxz chỉ có thể làm việc với file đơn lẻ, không thể làm việc với cả thư mục như zip, 7zip. Để nén & giải nén thư mục thì người ta kết hợp với tar, một lệnh để đóng gói thư mục thành một file. Điều thú vị là tar cũng đóng gói và mở gói thư mục theo kiểu “cuốn chiếu”.

  Hướng dẫn cài đặt SSH KEY cho server Linux

Sau đây là một ví dụ khi tôi mua laptop mới và cần sao chép dữ liệu công việc từ laptop cũ sang laptop mới. Do dữ liệu rất lớn (hàng chục GiB), gồm hàng trăm ngàn file nhỏ nên không thể copy bằng phím Ctrl+C/Ctrl+V trong ứng dụng giao diện đồ họa được, do khi copy bằng cách này thì ứng dụng sẽ copy từng file một, sẽ cực kỳ lâu. Nén cả thư mục trước khi copy thì sẽ nhanh hơn, nhưng nếu dùng zip7zip thì sẽ gặp trở ngại là nó phải tạo ra file trung gian, trong khi ổ cứng không đủ để lưu file này, chưa kể sẽ phải chờ đợi file sinh ra trọn vẹn rồi mới copy và giải nén được. Trong trường hợp này, tôi kết hợp sshtar để không phải sinh ra file trung gian:

$ ssh old-laptop "tar -cO -C ~/Works folder-to-copy" | tar -xf-

Giải thích:

  • Cờ -c trong lệnh tar để yêu cầu tar thi hành đóng gói, -x là để mở gói.
  • -O để yêu cầu tar đẩy kết quả đóng gói ra stdout.
  • -C để yêu cầu tar nhảy đến thư mục cha nào đó trước khi đóng gói thư mục con.
  • -f - (trong lệnh tar thứ hai) để hướng dẫn lấy file đã đóng gói (đầu vào) từ standard input.

Ở đây, tôi dùng mạng dây nội bộ nên tốc độ truyền đủ nhanh để không cần nén, tuy nhiên nếu muốn nén thì có thể kết hợp với gzip:

$ ssh old-laptop "tar -cO -C ~/Works folder-to-copy | gzip" | gunzip | tar -xf-

hay ngắn gọn hơn:

$ ssh old-laptop "tar -czO -C ~/Works folder-to-copy" | tar -xzf-

Thêm một mẹo nhỏ, nếu bạn muốn theo dõi tiến độ của việc chuyển dữ liệu trên, bạn có thể kết hợp với pv:

$ ssh old-laptop "tar -cO -C ~/Works folder-to-copy" | pv | tar -xf-

Tại sao trên Linux hay dùng những định dạng file nén như *.gz, *.xz thay vì *.zip, *.7z?

(Trong hình trên, tôi đang minh họa copy dữ liệu ở nơi có mạng chậm nên tốc độ hơi chậm).

Như vậy, trong bài này, không những bạn hiểu được lý do tại sao gzipxz lại được ưa dùng hơn zip7zip mà còn được thấy sức mạnh của môi trường dòng lệnh trên Linux, ích lợi của môi trường dòng lệnh đối với năng suất công việc.

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

Xem thêm:

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