Ruby cho bạn Array, Hash và Set, nhưng không có heap, hàng đợi ưu tiên, danh sách liên kết hay cây. Lộ trình này cho bạn tự xây từng cấu trúc còn thiếu bằng Ruby, nơi một lần duyệt chỉ là một khối each, rồi dùng chúng để sắp xếp, đệ quy và duyệt đồ thị, và kết thúc bằng các bài phỏng vấn được chấm điểm. Miễn phí, ngay trên trình duyệt, kèm chứng nhận ở hầu hết khóa học.
Mỗi bước là một nhóm khóa học có sẵn trên Coddy, và mọi nút "Bắt đầu" đều mở chúng bằng Ruby. Ba khóa học chưa được dạy bằng Ruby được liệt kê sau các bước.
1
Bước 1
Chuỗi cấu trúc dữ liệu, phần một
Bắt đầu bước nàyBắt đầuStack, hàng đợi, cây nhị phân, bảng băm và danh sách liên kết, mỗi cấu trúc được xây từ đầu bằng Ruby rồi dùng để giải bài. Học xong, dùng Array làm stack hay hàng đợi, và Hash làm bảng tra cứu, là những lựa chọn bạn giải thích được chứ không chỉ là thói quen.Bắt đầu
Bắt đầu bước nàyBắt đầuDanh sách liên kết đôi, heap và hàng đợi ưu tiên, trie, đồ thị và cây AVL tự cân bằng: mọi thứ ngoài Array, Hash và Set mà Ruby để bạn tự lo. Heap bạn viết ở đây chính là hàng đợi ưu tiên mà bước đồ thị cần.Bắt đầu
Bắt đầu bước nàyBắt đầuBubble sort, selection sort, insertion sort, merge sort, quick sort, heap sort, counting sort và radix sort, viết bằng Ruby và xem trong công cụ trực quan hóa. Array#sort không cam kết ổn định; sau bước này, bạn biết thuật toán nào trong tám thuật toán có thể đưa ra cam kết đó.Bắt đầu
Bắt đầu bước nàyBắt đầuThử thách đệ quy bằng Ruby. Đệ quy mất kiểm soát sẽ ném ra SystemStackError (stack level too deep), và Ruby mặc định không tối ưu tail call, nên độ sâu vẫn đáng để ý ngay cả trong một ngôn ngữ dễ dãi như vậy. Quy hoạch động và thao tác bit được liệt kê sau các bước, vì chúng được dạy bằng Python và C++.Bắt đầuTrang riêng15 bài học15 thử thách
5
Bước 5
Thuật toán đồ thị
Bắt đầu bước nàyBắt đầuTìm kiếm theo chiều rộng và theo chiều sâu, Dijkstra, Bellman-Ford, sắp xếp tô pô, Kruskal và Prim bằng Ruby, trên đồ thị bạn đã xây ở bước hai. Ruby không có hàng đợi ưu tiên, nên heap từ bước hai chính là thứ Dijkstra cần.Bắt đầu
Bắt đầu bước nàyBắt đầuMười gói thử thách phỏng vấn và hai kho bài tập lập trình bằng Ruby, chấm bằng test case: những bài toán lạ, giải mà không cần hướng dẫn, với khối lệnh và hash mà giờ bạn đã biết chi phí.Bắt đầu
Viết code thật, truy vấn cơ sở dữ liệu, xây dựng trang web và làm chủ prompt AI. Các bài học tương tác bao quát mọi kỹ năng mà lập trình viên hiện đại cần.
playground.js
Trình chỉnh sửa code
1const greeting ="Hello, Coddy!"
2function sayHi(name) {
3return greeting +" "+ name
4}
5
Test #1
Test #2
Test #3
Đầu vào
"Alex"
Đầu ra
"Hello, Coddy! Alex"
Xây dựng streak
Học đều đặn và nhìn tiến độ của bạn lớn dần! Theo dõi thói quen code mỗi ngày, bảo vệ streak bằng ngày đóng băng và nhận phần thưởng khi học mỗi ngày.
12 ngày streak
Quay lại ngày mai để giữ streak!
January 2026
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
21
22
23
24
25
26
27
28
29
30
Gấp đôi hoặc mất hết
Ngày 5/7
Đóng băng streak
2 left
Code ở mọi nơi
Mang hành trình lập trình theo bên mình! Không cài đặt, không tải về: chỉ cần mở ra và bắt đầu code. Có trên iOS, Android và Web với đánh giá 4,9 sao.
Thi đấu trên bảng xếp hạng toàn cầu, mời bạn bè để nhận phần thưởng và cùng nhau ăn mừng thành công. Học code cùng bạn bè vui hơn nhiều!
Giải đấu ChallengerTop 7 được thăng hạng
1
Alex7+ Days
2840
2
Jordan7+ Days
2650
3
Sam7+ Days
2420
4
Casey
2180
5
Morgan7+ Days
1950
Vùng thăng hạng
Mọi cách để học
Đọc, nghe, tự kiểm tra, hỏi AI hoặc tra cứu bất cứ điều gì bạn đã học. Mỗi bài học phù hợp với trình độ của bạn.
Giới thiệu về biến
Âm thanh
Biến là một vùng chứa có tên, lưu một giá trị mà bạn có thể dùng lại sau trong chương trình.
Trong Python, bạn tạo biến bằng cách viết tên, dấu bằng, rồi giá trị muốn lưu.
Giá trị có thể thay đổi theo thời gian. Gán lại tên đó chỉ đơn giản là trỏ nó tới một giá trị mới.
1xSarah
Nhận chứng nhận
Nhận chứng nhận cho mỗi khóa học bạn hoàn thành. Thêm vào hồ sơ LinkedIn và CV để cho nhà tuyển dụng thấy kỹ năng lập trình của bạn.
Giấy chứng nhận hoàn thành
Chứng nhận rằngNguyễn Văn Anđã hoàn thành xuất sắc
Python cơ bản
NgàyTh1 2026
Thêm vào LinkedIn
Vì sao nên học DSA với Ruby trên Coddy
Những cấu trúc Ruby bỏ qua. Array vừa là stack vừa là hàng đợi, Hash là bảng băm giữ thứ tự chèn, và Set nằm trong thư viện chuẩn; ngoài ra không có heap, hàng đợi ưu tiên, danh sách liên kết hay cây. Khi một bài phỏng vấn Ruby cần đến chúng, bạn được kỳ vọng tự viết, và trên lộ trình này bạn sẽ làm vậy.
Code ngắn, thuật toán dễ đọc. Khối lệnh và Enumerable (each, map, select, reduce) giữ một lần duyệt chỉ trong một hai dòng, nên tìm kiếm theo chiều rộng hay phép trộn đọc gần như mã giả. Chỉ cần nhớ rằng mỗi lời gọi đó là một vòng lặp có chi phí, và lộ trình này dạy bạn cách đếm chi phí ấy.
Gần như cả lộ trình bằng Ruby. Mọi cấu trúc dữ liệu, thuật toán sắp xếp, thuật toán đồ thị, thử thách đệ quy và gói phỏng vấn đều được dạy bằng Ruby. Ba khóa được dạy bằng ngôn ngữ khác và được liệt kê sau các bước, kèm đường dẫn đến từng khóa: quy hoạch động và chuỗi phỏng vấn Python bằng Python, thao tác bit bằng C++. Thao tác bit đọc rất dễ từ góc nhìn Ruby, vốn có cùng các toán tử, trên số nguyên không bao giờ tràn.
Chấm điểm như một buổi phỏng vấn. Bài học nào cũng kết thúc bằng một thử thách Ruby được kiểm tra bằng test case, và khi một test case không qua, Bugsy đọc code của bạn và gợi hướng sửa mà không đưa luôn đáp án. Chứng nhận miễn phí ở hầu hết khóa học, mỗi chứng nhận đều xác minh được tại URL riêng.
Câu hỏi thường gặp về DSA với Ruby
Ruby có phù hợp để học cấu trúc dữ liệu và thuật toán không?
Có, cả để học lẫn để phỏng vấn ở các công ty dùng Rails: code ngắn như Python, và khối lệnh khiến các lần duyệt đọc giống hệt thuật toán. Có hai lỗ hổng nên biết. Thư viện chuẩn không có heap, hàng đợi ưu tiên, danh sách liên kết hay cây, nên bạn tự viết chúng; và Array#sort không cam kết ổn định, nên khi các phần tử bằng nhau phải giữ thứ tự, hãy sắp xếp theo cặp: sort_by.with_index { |x, i| [x, i] }.
Lớp nào của Ruby tương ứng với cấu trúc dữ liệu nào?
Array là mảng động, dùng được làm stack (push, pop) và hàng đợi (push, shift); Hash là bảng băm nhớ thứ tự chèn; còn Set, trong thư viện chuẩn, là tập hợp dựa trên băm. Danh sách chỉ có vậy. Không có heap, hàng đợi ưu tiên, danh sách liên kết, cây, trie hay đồ thị, nên bạn tự xây chúng ở bước một và bước hai.
Làm sao viết hàng đợi ưu tiên trong Ruby?
Ruby chưa bao giờ có sẵn, nên có ba câu trả lời thật lòng: sắp xếp lại mảng sau mỗi lần chèn, O(n log n) mỗi lần đẩy vào; giữ mảng luôn có thứ tự bằng bsearch_index và insert, O(n) mỗi lần đẩy vào; hoặc viết một binary heap trên Array, O(log n) cho cả đẩy vào lẫn lấy ra. Cách thứ ba là điều người phỏng vấn muốn thấy, và bước hai cho bạn xây nó.
Vì sao thứ tự chèn trong Hash của Ruby lại quan trọng với thuật toán?
Vì nó biến một số thiết kế kinh điển thành vài dòng code. LRU cache, một bài phỏng vấn được ưa chuộng, là một Hash trong đó mỗi lần đọc sẽ xóa rồi chèn lại khóa để đưa nó xuống cuối, còn việc loại bỏ là shift, xóa mục cũ nhất. Ở hầu hết ngôn ngữ, việc đó cần một bảng băm cộng một danh sách liên kết đôi, chính các cấu trúc bạn xây ở bước một và bước hai, nên bạn giải thích được Ruby đang làm gì cho mình.
Khóa học nào trong lộ trình không được dạy bằng Ruby?
Ba khóa: quy hoạch động và chuỗi phỏng vấn Python, dạy bằng Python, và thao tác bit, dạy bằng C++. Chúng được liệt kê sau các bước, mỗi khóa có đường dẫn mở bằng chính ngôn ngữ của nó. Bảng ghi nhớ trong Ruby có thể là một Hash với khối mặc định, như Hash.new { |h, n| h[n] = n < 2 ? n : h[n - 1] + h[n - 2] }, và n[i] đọc thẳng bit thứ i của một số nguyên, trong khi C++ phải viết (n >> i) & 1.
Có cần biết Ruby trước khi bắt đầu lộ trình này không?
Ít nhất là phương thức, khối lệnh, mảng, hash và lớp. Nếu những thứ đó còn mới với bạn, khóa học Ruby của Coddy sẽ đưa bạn đến đó trước, miễn phí, và lộ trình này tiếp nối từ chỗ khóa học đó kết thúc.
Tôi có nhận được chứng nhận cho lộ trình Cấu trúc dữ liệu & thuật toán không?
Có. Hoàn thành mọi bước và bạn nhận một chứng nhận miễn phí cho cả lộ trình Cấu trúc dữ liệu & thuật toán. Chứng nhận liệt kê từng khóa học bạn đã hoàn thành trên đường đi và liên kết đến chứng nhận riêng của từng khóa, để ai cũng có thể kiểm tra mọi kỹ năng được nêu. Bạn có thể thêm nó vào hồ sơ LinkedIn. Đây là chứng nhận hoàn thành của Coddy, không phải văn bằng được kiểm định.
Các lộ trình học khác
Cùng các khóa học, sắp xếp cho một vai trò khác. Tiến độ được giữ lại: khóa học đã hoàn thành ở một lộ trình được tính ở mọi lộ trình có khóa học đó.