HackerRank là gì? Lời khuyên khi tham gia HackerRank

35712

Theo số liệu do HackerRank công bố, hiện nay HackerRank đã xếp hạng hơn 1,5 triệu developer toàn cầu dựa trên tốc độ và độ chính xác. Những kết quả gần đây cũng cho thấy Trung Quốc là quốc gia có lập trình viên xếp thứ hạng cao nhiều nhất, sau đó là Nga và Ba Lan.

HackerRank là gì?

Những công ty lớn như Amplify, Quora và Capital One đều đang sử dụng HackerRank for Work – cho quá trình tuyển dụng mảng kỹ thuật. Ngoài là thuớc đo kỹ năng, HackerRank cũng tổ chức một số chương trình hackathons, như CodeSprints, cũng là một cách để các công ty tìm kiếm những ứng viên tiềm năng.

HackerRank là một website cho phép các lập trình viên trau dồi, học hỏi và rèn luyện kỹ năng của bản thân. Website này sẽ yêu cầu những người tham gia đưa ra lời giải cho những “thử thách lập trình” hay những bài toán lập trình. Qua đó những kết quả và tốc độ giải đáp vấn đề sẽ được HackerRank sử dụng để đánh giá và xếp hạng các lập trình viên tham gia.

  Làm thế nào để terminal trông giống như một Hacker?

Vì sao chọn HackerRank

Ngoài việc ghi điểm trong mắt nhà tuyển dụng, các developer cũng có thể luyện code trên HackerRank. Những ưu điểm có thể kể về HackerRank như là: HackerRank có hệ thống compiler online, từ đó không cần cài thêm bất kỳ compiler nào trên máy và có thể lâp trình trực tiếp trên Web. Thứ hai, HackerRank có đa dạng các bài code (có sẵn cả unit test để biết đúng sai) để các coder luyện tập và thử sức. Sau khi cải tiến bản thân qua các bài code, các coder có sẵn nguồn các bài thi tuyển dụng của các công ty lớn toàn thế giới.

Lưu ý khi học code trên HackerRank

function Rectangle(a, b) {
 
 }

Đây là dòng đầu tiên của một hàm mà họ yêu cầu bạn viết trong 10 Days of Javascript. Viết đối tượng hình chữ nhật là ngày thứ 4 trong 10 ngày. Hầu hết các coder sẽ dùng tiếp dòng đầu tiên này và điền vào chỗ trống những gì còn thiếu giữa hai dấu {}. Đây có lẽ cũng là điều mà HackerRank mong đợi.

Nhìn dòng đầu tiên này thì bạn có thể hiểu rằng a là một cạnh của hình chữ nhật và b là cạnh còn lại. Nếu bạn đọc mô tả đề bài, thì sẽ biết rõ ràng rằng a là chiều dài của hình chữ nhật và b là chiều rộng.

Tại sao lại cần bí mật?

Batman cần giữ kín danh tính của mình vì anh thường dành buổi tối để làm những việc phạm pháp, dù đó là việc tốt, anh ấy vẫn có thể bị bắt. Để có thể được tự do và mang đến công lý cho người khác, anh ấy không thể để người khác biết rằng mình chính là Bruce Wayne.

Nhưng, a và b ở đây không cần giữ bí mật danh tính thực sự của chúng (chiều dài và chiều rộng của hình chữ nhật). Trên thực tế, tất cả những gì chúng sẽ làm trong hàm này là chiều dài và chiều rộng của hình chữ nhật. Điều đó có nghĩa là chúng không cần phải là a và b. Vậy tại sao chiều dài không thể là length (chiều dài trong tiếng Anh) và chiều rộng là width (chiều rộng)?

Tác hại của cách đặt tên đó là gì?

Trong bài tập HackerRank này, bạn sẽ chỉ viết vài dòng code thôi. Chưa kể hai tham số logic duy nhất để tạo một hình chữ nhật là chiều dài và chiều rộng của nó. Bạn có thể sẽ không quên a và b là gì trong đoạn code. Mặc dù vậy, không chỉ có bạn đọc code của bạn, vẫn còn những người khác nữa và có thể nhiều người trong số họ không thể biết được a và b là gì.

Bạn có thể cảm thấy đoạn code rất ngắn gọn và thông minh, và dường như HackerRank làm vậy rất ổn.

OK, nhưng nghĩ một chút xem, trong công việc có bao giờ bạn viết app, chương trình nào mà lại có ít code như vậy không? Nếu là một ứng dụng có 10.000 dòng code, mỗi hàm có các tham số với chữ cái a, b, c, d, e thì câu chuyện sẽ rất khác. Bạn có thể đọc hiểu code này vì bạn viết ra nó, nhưng nếu ai đó được bàn giao code này từ bạn có lẽ họ sẽ vừa đọc vừa chửi thầm trong bụng.

Bạn có thể nghĩ Devon khó tính hoặc tìm đúng ví dụ tệ nhất trên nền tảng này để chê bai. Tất nhiên, không phải mọi bài tập trên HackerRank đều sử dụng tên biến tối nghĩa, nhưng có nhiều bài tập như vậy. Đây là một ví dụ khác:

'use strict';
 
 process.stdin.resume();
 process.stdin.setEncoding('utf-8');
 
 let inputString = '';
 let currentLine = 0;
 
 process.stdin.on('data', inputStdin => {
     inputString += inputStdin;
 });
 
 process.stdin.on('end', _ => {
     inputString = inputString.replace(/s*$/, '')
         .split('n')
         .map(str => str.replace(/s*$/, ''));
 
     main();
 });
 
 function readLine() {
     return inputString[currentLine++];
 }
 
 // Complete the minimumBribes function below.
 function minimumBribes(q) {
 
 }
 
 function main() {
     const t = parseInt(readLine(), 10);
 
     for (let tItr = 0; tItr < t; tItr++) {
         const n = parseInt(readLine(), 10);
 
         const q = readLine().split(' ').map(qTemp => parseInt(qTemp, 10));
 
         minimumBribes(q);
     }
 }

Nhiều biến trong code trên không hề dễ hiểu, t là gì, q là gì, n là gì, tItr là gì… Mục đích chính mà tác giả muốn nói ở đây chỉ là hãy đặt tên biến cho rõ ràng, hãy viết code sao cho ai mới đọc cũng có thể mường tượng được hàm này làm gì, biến này là cái gì mà thôi. Vì sao cần phải như vậy?

Viết code là dành cho con người

Bạn có thể nghĩ rằng code dành cho máy tính. Không phải đâu. Code dành cho con người. Nếu nó dành riêng cho máy tính, chúng ta không cần ngôn ngữ cấp cao như Javascript hay Python.

Hãy ghi nhớ điều này khi bạn viết code: Viết làm sao để người khác đọc code bạn viết mà họ hiểu được. Các tên biến, tham số và hàm nên chứa càng nhiều ngữ cảnh càng tốt để giúp người đọc hiểu những gì họ đã đọc. a là một tên biến rất tệ. length là tên biến tốt và lengthInInches thậm chí còn tốt hơn (nếu bạn mong đợi phép đo được tính bằng inch). Nếu code thay đổi, hãy đảm bảo bạn cập nhật các tên đã đặt để phản ánh những gì chúng đại diện.

Vì HackerRank là một công ty lớn, có uy tín, nên việc bạn có code được đánh giá tốt trên nền tảng này cũng khiến các nhà tuyển dụng chú ý hơn.

Chỉ là, khi bạn thực hành trên HackerRank, hãy rèn cho mình thói quen tái cấu trúc những cái tên vô nghĩa khủng khiếp thành một cái tên có thể truyền đạt ý nghĩa và bối cảnh cần thiết để đọc code. Khi bạn làm việc với các dự án bên ngoài nền tảng, đừng để cho việc đặt tên tối nghĩa làm hại code của bạn và mang lại cho bạn danh tiếng là một dev viết code không thể đọc nổi.

Bằng cách luôn tâm niệm rằng viết code là để cho người đến sau bạn có thể đọc, bạn không chỉ tạo sự dễ dàng cho các nhà phát triển khác làm việc với bạn mà còn khiến cho khách hàng muốn thuê lại bạn và giới thiệu bạn với các công ty khác cần bạn giúp đỡ.

Có một bình luận vui dưới bài rằng: Khi bước chân vào nghề tôi đã được bảo rằng: “code làm sao để gã sau vào có thể đọc hiểu” và “hãy tưởng tượng người kế thừa đống code của bạn là một gã to cao, nóng tính, biết rõ bạn đang ở đâu” (Nếu hắn đọc không hiểu sẽ tìm đến nhà và cho bạn một trận – người dịch).

Một số lưu ý tổng quan cho các bạn mới gia nhập HackerRank

Trong tương lai sẽ có không ít các công ty công nghệ tiến hành ứng dụng HackerRank như một bước để đánh giá trong quy trình tuyển ứng viên IT, thì đừng quên lưu ý một số mẹo nhở dưới đây khi bắt tay vào thử HackerRank:

  1. Các thử thách và bài test đều tính giờ, hãy tập trình cao độ và không được xao nhãng.
  2. 20–30% tỉ lệ thành công đến từ việc hiểu rõ với hệ thống. Trước khi chính thức đi vào challenge có thể thử sức một số cái trước, vd: Khởi động bằng miền của các thuật toán. Phải chắc chắn rằng bạn nắm bắt được cách viết và submit code.
  3. Biết các ngôn ngữ có sẵn để test.
  4. Thường trong mỗi challenge sẽ có nhiều vấn đề cần giải quyết, và nếu bắt đầu từ bài khó nhất sẽ không hợp lý. Cách tốt nhất phải là xử lý lần lượt độ khó tăng dần. Hãy đọc sơ trước và quyết định cách giải quyết sau.
  5. Hãy giảm thiểu thời gian giữa các vấn đề sau khi đã bổ sung. Bạn có thể dành thêm ít thời gian để quyết định xem nó có phải là thành phẩm final hay chưa, và rồi đảm bảo rằng không quay lại nữa.
  6. Mọi vấn đề đều bao gồm giải trường hợp công và trường hợp tư nhân. Điểm của You sẽ dựa trên cả hai. Nếu vấn đề nằm ở chỗ có kiểm tra các phương thức về public và private, điểm của bạn được đánh giá trên cả hai. Trong trường hợp, dù mã bổ sung được thông qua mọi phương thức về public, điều đó không đồng nghĩa với việc sẽ thông qua phương thức về private. Hãy nghiên cứu thêm các trường hợp ở rìa. Vd: kiểm tra xem input có rỗng không; 1,2 hay nhiều yếu tố khác nhau, v. v môi trường HackeRank sẽ cho phép bạn chạy mã trên các test bài tự tuỳ.
  7. Đảm bảo bất cứ gì cho mọi vấn đề. Nếu không biết cách giải quyết bạn vẫn có thể kiếm được vài điểm từ nó. Tuy nhiên, hãy cố gắng giải quyết đúng vấn trọng tâm ít nhất một – hai vấn đề nào đó trong bài.
  8. Trang chủ cần tạo ra sự khác biệt: một vài mẫu template có thể giúp bạn  như việc có thể sao chép và dán chúng trong suốt quá trình tham gia challenge. Ví dụ:  BFS/DFS/Tìm kiếm nhị phân.
  9. Hãy luyện tập nhiều nhất có thể trong lần đầu tiên. Bạn có thể thử giải quyết ít nhất một vấn đề từ mỗi tên miền phụ của các thuật toán
  10. Một kết quả tốt không phải là một trò ảo thuật, nó cần nhiều sự luyện tập và nỗ lực.

TopDev tổng hợp

Truy cập ngay các công việc IT đãi ngộ tốt trên TopDev