HackerRank là gì?
HackerRank là nền tảng để luyện tập code, theo như lời giới thiệu của những người sáng lập ra nó thì đây là nơi mà các lập trình viên từ khắp nơi trên thế giới tụ họp lại để giải quyết những vấn đề trong lĩnh vực khoa học máy tính như thuật toán, học máy, trí tuệ nhân tạo cũng như thực hành các mô hình lập trình khác nhau như lập trình hướng chức năng.
Không chỉ vậy, HackerRank còn dần trở thành nền tảng để các công ty, nhà tuyển dụng kiểm tra kỹ năng code của ứng viên. Thật tiện lợi khi vừa có thể học code lại có thể show luôn kết quả cho nhà tuyển dụng ở cùng một nơi.
Bạn quan tâm có thể truy cập website HackerRank.com để tham gia và tìm hiểu thử nhé.
Tuy nhiên, có một số vấn đề bạn cần lưu ý khi thực hành code trên nền tảng này, đây là lời khuyên của Devon Campbell, một nhà phát triển web đến từ Seattle, được đăng trên trang dev.to mà mình đã lược dịch lại để các bạn đọc.
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ữ bí mật 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).
>> 10 lời khuyên hữu ích dành cho các lập trình viên mới vào nghề