Công việc của lập trình viên hằng ngày chỉ là chuyển hóa cafe sang source code và sau đó ngồi fix bug xuyên màn đêm. Vậy làm thế nào để có thể code giỏi? Sự thật hiển nhiên là muốn giỏi cái gì thì phải thường xuyên luyện tập. Ca sĩ muốn hát hay thì phải hay hát. Ăn xin muốn kiếm được tiền thì phải thường xuyên nâng cao khả năng hóa trang và nghĩ ra các tư thế ăn xin mới. … Vậy với Coder thì sao?
Bài viết này sẽ giới thiệu về competitive programming với CodeFights – Đấu trường danh vọng của dân coder.
Việc luyện tập code không chỉ là luyện tập gõ phím nhanh mà còn là việc sử dụng thành thạo ngôn ngữ lập trình, thuật toán để giải quyết vấn đề. Làm sao để nghĩ ra các vấn đề hay và thực tiễn để luyện tập hàng ngày? Làm sao để so sánh cách giải quyết của mình với người khác?
I. CodeFights là gì?
CodeFights là một mạng xã hội lập trình . Tại đây, coder khắp thế giới có thể gặp gỡ và tranh tài với nhau qua các cuộc thi vừa và lớn được tổ chức hàng ngày, tuần, tháng. Ngoài việc đánh nhau, leo rank, thì các coder còn có thể học tập, tham gia tuyển dụng vào các công ty IT hàng đầu thế giới.
1. Chế độ Học tập (Arcade)
Ở phần này sẽ tập hợp các bài toán dựa trên từng thuật toán khác nhau, bạn không thể nhảy cóc sang phần khác nếu không hoàn thành phần hiện tại. Các level ở đây được thiết kế từ dễ đến khó, từ cơ bản đến phức tạp, tuy nhiên có điểm trừ lớn phần này là các bạn sẽ không được giảng dạy lý thuyết, mà tự học đâu đó ở ngoài, sau đó mới giải quyết được các vấn đề ở đây.
Đối với các bạn đã có kinh nghiệm đi làm, thì các bài toán ở đây có mức độ khó vừa phải. Cái thú vị nhất là làm sao để có thể code được những dòng code ngắn gọn, dễ hiểu như những bài thơ trữ tình.
Các bạn có thể làm 1 bài thơ trữ tình 1 dòng cho bài toán dưới đây như tôi không?
Khi giải quyết xong 1 bài, thì các bạn có thể tham khảo cách làm của những người khác. Tin tôi đi, tôi đã không ít lần há mồm không ngậm được khi đọc được những cách làm quá hay, quá ngắn mà trước giờ tôi không bao giờ nghĩ mình có thể nghĩ ra được.
2. Chế độ luyện tập phỏng vấn (Interview Practice)
Ở phần này các bạn có thể thử sức với các câu hỏi lập trình của các cty IT lớn như Google, Facebook, Uber, Microsoft … do đó bạn có thể phần nào tự đánh giá được “nội công” của mình có thâm hậu hay không?
3. Chế độ luyện tập với Bot
Nhiệm vụ của các bạn là đánh bại 2 loại bot dưới đây
- Company bot: các công nghệ có tiết mục tuyển dụng thông qua CodeFights, do đó họ có tạo ra các con bot để thách thức mọi người, nếu ai đánh bại được các con bot này, thì cơ hội được mời phỏng vấn từ các công ty này là rất cao. Thêm 1 điều nữa là nếu bạn có mời bạn của bạn tham gia, nếu bạn của bạn đủ điều kiện vào làm việc ở các công ty này, thì bạn sẽ có ngay $1000 tiền hoa hồng. Quá tuyệt! Việc đánh bại các con bot này rất khó, đòi hỏi sự hiểu biết cao.
- Code bot: đây là con bot trí tuệ nhân tạo code CodeFights tạo ra. Hiện tại đang có 6 con, chia làm các level từ dễ đến khó, các bạn có thể chọn các level phù hợp với mình để thi đấu. Thực tế thì thực lực của các con bot này được lập trình bằng trung bình cộng của các coder cùng level với bot, do đó việc chiến thắng bot khá là dễ dàng nếu bạn nằm ở top trên trung bình.
4. Chế độ thử thách (Challenges)
Hàng ngày, ngày tuần sẽ có các thử thách cho các bạn. Đây là phần đòi hỏi nhiều chất xám nhất, khi đề bài trải dài trên nhiều vấn đề phức tạp, và người chiến thắng là người có lời giải ngắn nhất.
5. Chế độ đối đầu (Head to Head)
Khi bạn ngứa mắt với một ai đó, hãy lên đấu trường sinh tử 1 chọi 1, để quyết chiến cùng người đó nhé. Nếu không chọn được ai, thì bạn sẽ thi đấu ngẫu nhiên với một ai đó cùng chí hướng, để rèn luyện nội lực
6. Chế độ Giải đấu (Tournaments)
Đây là phần nhộn nhịp nhất CodeFights, nơi các bạn sẽ đấu trí với hàng ngàn coder trên thế giới.
Có 3 loại giải đấu chính.
- Giải diễn ra đều đặn (Regular): mỗi giải đấu kéo dài 10 phút, thời gian nghỉ giải lao là 5 phút.
- Giải diễn ra hàng tháng (Marathon): đây là giải được tổ chức 1 tháng 1 lần, tập trung đông đủ coder nhất, top 10 người thắng cuộc sẽ được giải thưởng $50 amazon gift card
- Giải tổ chức cá nhân (Private): các bạn có thể tự tạo giải đấu cho riêng mình và mời bạn bè cùng tham gia
II- Các dạng bài tập
Có 3 dạng bài tập chính:
- BUGFIX ( tối đa 100 điểm, 4 lần nộp bài): Tồn tại 1 bug trên 1 dòng của code, các bạn cần fix bug đó.
- RECOVERY (tối đa 100 điểm, 4 lần nộp bài): Điền vào chỗ trống trong đoạn code được đưa ra.
- CODEWRITING (tối đa 300 điểm, không hạn chế số lần nộp bài): Tự viết 1 hàm để giải quyết vấn đề bài toán.
Các bài tập này sẽ được test bằng 2 loại test case
- Test case bình thường: có thể nhìn thấy input, out put của testcase
- Test case ẩn: không biết input của test case. Thực tế có rất nhiều bài tưởng dễ ăn, nhưng lại ko pass được các test case ẩn này, do đó việc review code và suy nghĩ về các adnormal, bounary test case là việc bắt buộc.
Ngôn ngữ lập trình được hỗ trợ bao gồm Java, C++, Python 2/3, Javascript, Ruby, C#, PHP, Perl, F#, Go, Haskell, R, Scala, Swift, VisualBasic.
III- Hệ thống ranking
Việc cày rank giúp các bạn có động lực để nhuộm đỏ bảng xếp hạng bằng cờ Việt Nam. Hiện tại anh em Việt Nam nói chung và 3S nói riêng đang tích cực ganh đua cùng thế giới
IV- Các thứ khác
Ngoài ra thì các bạn còn có thêm:
Forum: để thảo luận về các vấn đề cần quan tâm
Friends: có thể add nick để trò chuyện, thách đấu. Tuy nhiên chưa có chức năng chát nhóm cho nhiều người.
Jobs: Các bạn có thể nộp CV, Resume để khi có số có má ở CodeFights, thì sẽ có cơ hội phỏng vấn từ hơn 25 công ty đang liên kết với CodeFights ở thời điểm hiện tại.
V- Những lợi ích khi thi đấu
Việc luyện tập sẽ giúp các ban nhanh tay, nhanh mắt, nhanh nhậy đầu óc tư duy khi phải giải quyết bài toán trong thời gian cố định. Việc thua đối thủ chỉ vì chậm hơn vài chục giây sẽ là cơn nghiện khiến bạn chăm chỉ luyện tập. Thông qua việc đọc đáp án của người khác, bạn sẽ học tập được kiến thức cũng như cách viết code hiệu quả. Ngoài ra các kiến thức cơ bản về lập trình của bạn cũng dần dần được củng cố rõ rệt.
Tuy nhiên, đây là lập trình thi đấu, nó không giống như cách lập trình hàng ngày khi các bạn đang làm việc ở công ty, việc viết code tường minh, giải thích rõ ràng, dễ bảo trì sau này là điều bắt buộc. Do vậy mọi thứ cần phải được cân bằng.
Join us today and SAVE the world!