Chương 7. Học cách kiên trì
Cả tuần đó, phòng 405 chứng kiến một Hoàng Ly hoàn toàn khác.
Sự xấu hổ sau buổi "hỏi cung" lúc 6 giờ sáng đã trở thành một liều thuốc đắng nhưng hiệu quả. Nó đánh tan sự tự mãn cố hữu, thay vào đó là một nỗi sợ hãi kỷ luật và một quyết tâm thầm lặng.
Cô không còn học để chứng tỏ mình thông minh.
Cô học để không phải đối mặt với ánh mắt thất vọng của Minh Dương một lần nữa.
Thói quen ngủ nướng biến mất. Mỗi sáng, khi Minh An và Bảo Linh còn đang say ngủ, Ly đã lặng lẽ rời giường lúc 5 giờ 30. Cô không ra phòng tự học chung ồn ào. Cô chỉ ngồi vào chiếc bàn nhỏ của mình, bật chiếc đèn bàn màu vàng, và đối mặt với "kẻ thù" - cuốn Đại số Tuyến tính của Gilbert Strang.
Lần này, cô học khác.
Cô học lại từ đầu, nhưng với một tốc độ chậm đến mức kinh ngạc đối với chính cô.
Cô không "lướt" nữa.
Cô "cày".
Chương 1, "Introduction to Vectors", cái chương mà cô từng tự tin mình hiểu 70%, giờ đây cô đọc lại từng chữ. Mỗi một định nghĩa, cô không chỉ đọc. Cô lấy một cuốn sổ tay mới, chép lại theo cách hiểu của mình.
Mỗi một công thức, cô không chấp nhận nó như một sự thật hiển nhiên. Cô dừng lại, tự vấn. "Tại sao tích vô hướng lại là aT nhân b? Tại sao không phải là bT nhân a? À, vì trong đại số ma trận, nó tương đương. Nhưng ý nghĩa hình học của nó là gì?" Cô sẽ lấy giấy bút ra, vẽ các vector, tự mình chứng minh lại công thức hình chiếu mà Minh Dương đã hỏi. Cô làm đến khi nào cô có thể giải thích nó cho một người không biết gì cũng hiểu được.
Mỗi một bài tập, cô làm bằng tay. Không có calculator, không có các công cụ tính toán ma trận online. Cô tự mình nhân các ma trận 3x3, cảm nhận sự logic và cả sự "tay chân" của toán học. Cô nhận ra, khi làm bằng tay, cô hiểu được cấu trúc của phép toán, thay vì chỉ ném các con số vào một cái hộp đen và nhận kết quả.
Quá trình này vô cùng chậm chạp và đôi khi, tẻ nhạt. Bộ não của cô, vốn quen với việc nhảy cóc, giờ đây bị buộc phải đi bộ từng bước.
Nhiều lần, cái cảm giác "chán" quen thuộc lại trỗi dậy.
Cô muốn vứt bút đi, muốn mở điện thoại lên lướt mạng xã hội.
Nhưng rồi, hình ảnh Minh Dương đứng dưới ánh đèn vàng lúc 6 giờ sáng, khuôn mặt lạnh như băng, lại hiện lên.
Và cả câu nói của anh ta: "Mỗi sáng Chủ Nhật, 6 giờ 00 phút."
Nó như một chiếc roi vô hình, quất vào sự lười biếng của cô, buộc cô phải tiếp tục.
Suốt cả tuần, cô gần như biến mất khỏi cuộc sống xã hội. Bạn bè rủ đi ăn, cô từ chối. Thu Hà hỏi cô có muốn đi shopping cuối tuần không, cô lắc đầu. Cô chỉ có ba người bạn đồng hành: sách, vở, và deadline.
---
Sáng Chủ Nhật.
4 giờ 30 phút sáng.
Tiếng chuông báo thức vang lên trong bóng tối. Ly choàng tỉnh dậy, tim đập thình thịch.
Ngày phán xét đã đến.
Cô đã hoàn thành report và 20 bài tập vào lúc 2 giờ sáng. Cô đã thức gần như trắng đêm để kiểm tra lại từng chi tiết, đảm bảo không có một lỗi chính tả, không có một bước chứng minh cẩu thả nào.
Cô ngồi vào bàn, đọc lại toàn bộ sản phẩm của mình một lần cuối. Bản report lần này dài hơn, chi tiết hơn, và đầy những hình vẽ minh họa do chính tay cô vẽ để giải thích các khái niệm. Phần bài tập, mỗi bài đều có lời giải chi tiết từng bước. Nó không phải là một tác phẩm của thiên tài, mà là một sản phẩm của sự cần mẫn.
5 giờ 45 phút sáng.
Cô mở email. Đính kèm file PDF đã được đặt tên cẩn thận: "[Report W1] - Hoàng Ly.pdf".
Cô hít một hơi sâu, rồi nhấn nút "Gửi".
Email đã được gửi đi. Sớm 15 phút so với "giờ giới nghiêm".
Ly ngả người ra ghế, cảm thấy một sự nhẹ nhõm vô biên, theo sau là một cơn buồn ngủ ập đến. Cô gục mặt xuống bàn, thiếp đi.
Cô không biết mình đã ngủ bao lâu. Cô giật mình tỉnh giấc khi điện thoại rung nhẹ.
Một email mới.
Người gửi: Minh Duong.
Thời gian: 6 giờ 05 phút sáng.
Tim Ly thắt lại. Cô run rẩy mở ra, chuẩn bị tinh thần cho một tràng phê bình. "Chắc lại có lỗi gì rồi. Chắc anh ta sẽ nói mình làm vẫn chưa đủ tốt."
Nội dung email hiện ra.
Nó không có lời chê bai. Nó cũng không có lời khen ngợi hoa mỹ. Nó chỉ có hai câu duy nhất.
"Báo cáo đã tốt hơn nhiều. Tiếp tục đi em."
Lạnh lùng, súc tích, đúng phong cách Minh Dương.
Nhưng đối với Hoàng Ly lúc này, những từ đó còn quý giá hơn bất kỳ điểm 10 nào cô từng nhận. Nó không phải là sự công nhận cho trí thông minh của cô. Nó là sự công nhận cho nỗ lực của cô. "Tốt hơn nhiều" có nghĩa là anh ta đã thấy sự khác biệt. "Tiếp tục" có nghĩa là cô đã vượt qua bài kiểm tra đầu tiên.
Một nụ cười nhẹ, lần đầu tiên trong tuần, nở trên môi Ly. Cô tắt điện thoại, trèo lên giường, và chìm vào một giấc ngủ sâu, không mộng mị.
---
Sang đến tuần thứ 2.
Thứ Hai, Ly nhận được email giao nhiệm vụ mới từ Dương.
Tiêu đề: [Roadmap W2] - Lập trình Python nâng cao.
Nội dung:
1. Đọc và tóm tắt 3 chương trong cuốn "Fluent Python": Decorators, Generators, và Concurrency.
2. Implement 5 thuật toán cơ bản sau bằng Python, không dùng thư viện có sẵn: Bubble Sort, Merge Sort, Binary Search, Depth-First Search (DFS) trên đồ thị, Dijkstra's Algorithm.
3. Viết Unit Test cho cả 5 thuật toán.
Deadline: 6:00, Chủ Nhật tuần này.
Ly đọc email. Lần này, cô không cảm thấy choáng váng nữa. Cô chỉ thấy một thử thách rõ ràng. Cô đã quen với áp lực.
Cô dành ba ngày đầu để "cày" lý thuyết Python. Những khái niệm nâng cao này khá trừu tượng, nhưng với nền tảng tư duy tốt, cô nắm bắt chúng khá nhanh.
Ba ngày cuối tuần, cô bắt tay vào implement các thuật toán. Bubble Sort, Binary Search... dễ dàng. Merge Sort, DFS... khó hơn một chút, nhưng cô vẫn xử lý được.
Và rồi cô đến với Dijkstra. Thuật toán tìm đường đi ngắn nhất trên đồ thị có trọng số. Cô đã học nó ở kỳ 2 năm nhất, trong cái môn "Giải thuật nâng cao" mà cô chỉ được 7.8.
Lần này, cô quyết tâm phải hiểu nó cặn kẽ. Cô không chỉ code theo giả mã (pseudocode) trong sách. Cô vẽ một đồ thị ra giấy, dùng một cây bút chì, tự mình mô phỏng lại từng bước chạy của thuật toán.
"Tại sao lại cần hàng đợi ưu tiên (priority queue)? À, để luôn chọn được đỉnh có khoảng cách ngắn nhất chưa được duyệt. Tối ưu."
Cô bắt đầu code. Mọi thứ có vẻ trôi chảy. Cô tạo class Graph, class Node. Cô viết hàm dijkstra.
Cô chạy thử với một test case đơn giản.
Chương trình chạy.
Kết quả đúng.
"Xong!" cô thở phào nhẹ nhõm. Lúc đó là 1 giờ sáng thứ Bảy.
Cô quyết định chạy thử với một test case phức tạp hơn, một đồ thị lớn với nhiều cạnh và chu trình.
Cô nhấn "Run".
Và chương trình bị treo. Con trỏ chuột biến thành vòng tròn xoay tít. Console không báo lỗi, nhưng cũng không trả về kết quả.
"Lỗi gì vậy?" Ly cau mày.
Đây không phải là lỗi cú pháp. Đây là lỗi logic. Có thể là một vòng lặp vô tận.
Cô bắt đầu "debug" (gỡ lỗi). Cô chèn các câu lệnh print vào khắp nơi trong code để xem chương trình chạy đến đâu thì dừng lại.
Cô phát hiện ra, nó bị kẹt trong vòng lặp while chính của thuật toán. Hàng đợi ưu tiên của cô không bao giờ rỗng.
"Tại sao?"
Cô kiểm tra lại điều kiện dừng. Kiểm tra lại cách cô thêm và bớt các phần tử trong hàng đợi. Mọi thứ có vẻ đúng.
1 giờ 30 phút sáng. Cô vẫn đang nhìn chằm chằm vào màn hình.
2 giờ sáng. Đôi mắt cô bắt đầu cay xè. Sự mệt mỏi và bực bội bắt đầu xâm chiếm. Cái cảm giác "bị kẹt" đáng ghét lại quay về.
Cô muốn đập bàn phím. Cô muốn bỏ cuộc và đi ngủ. "Chỉ là một thuật toán. Mình có thể nộp 4/5 cũng được," một giọng nói đầy cám dỗ vang lên trong đầu.
Nhưng rồi, cô nghĩ đến Minh Dương. Anh ta sẽ nói gì nếu cô nộp bài thiếu? Anh ta sẽ lại nhìn cô với ánh mắt thất vọng.
Không. Cô không thể để điều đó xảy ra.
Nhưng cô thực sự không biết phải làm gì. Cô đã thử mọi cách.
Cô cắn môi. Sự kiêu hãnh của "thủ khoa" và nỗi sợ bị mắng đang giao tranh dữ dội trong đầu cô. Cuối cùng, sự tuyệt vọng đã chiến thắng. Cô phải cầu cứu.
Cô mở Zalo. Run rẩy gõ một tin nhắn.
2 giờ 10 phút sáng.
Ly: "Anh ơi, em xin lỗi vì làm phiền anh giờ này. Em đang implement thuật toán Dijkstra, nhưng code của em bị lặp vô tận ở một test case phức tạp, em debug từ tối đến giờ không ra. Em không biết phải sửa sao..."
Cô nhấn gửi, lòng đầy lo lắng. "Chắc anh ấy ngủ rồi. Hoặc nếu có đọc được, chắc anh ấy sẽ mắng mình là sao một thuật toán cơ bản thế mà cũng không làm được."
Cô chờ.
Một phút.
Năm phút.
Mười phút sau. Ting.
Điện thoại sáng lên. Một tin nhắn từ Minh Dương.
Duong: "Gửi code cho anh."
Ngắn gọn. Thẳng vào vấn đề. Không một lời trách móc.
Ly vội vã copy toàn bộ file code Python của mình, dán vào pastecode, lưu code, copy link và gửi đi.
Đây là thói quen khi gửi code của cô, vì thông thường gửi thẳng code qua tin nhắn sẽ bị mất format - một điều mà chỉ cần một indentation dư thôi cũng khiến code Python không thể chạy được.
Cô lại chờ. Lần này là sự chờ đợi đầy hy vọng.
Hai mươi phút sau.
Duong: "Lỗi ở dòng 47."
Ly vội vàng kéo đến dòng 47 trong code của mình.
if current_distance <= distances[neighbor]:
Duong: "Em nghĩ tại sao?"
Anh ta không chỉ ra lỗi. Anh ta hỏi cô.
Ly nhìn chằm chằm vào dòng code. Nó là câu lệnh điều kiện để cập nhật khoảng cách đến một đỉnh hàng xóm. Nếu khoảng cách mới (từ đỉnh hiện tại) nhỏ hơn khoảng cách cũ đã lưu, thì cập nhật.
Cô đọc đi đọc lại. current_distance... distances[neighbor]...
Chờ đã.
current_distance là khoảng cách từ điểm xuất phát đến đỉnh hiện tại. Còn distances[neighbor] là khoảng cách từ điểm xuất phát đến đỉnh hàng xóm.
Phép so sánh này hoàn toàn vô nghĩa.
Phải là khoảng cách từ điểm xuất phát đến đỉnh hiện tại, CỘNG với trọng số của cạnh nối đến đỉnh hàng xóm.
Trời ơi! Một lỗi ngớ ngẩn. Một lỗi sơ đẳng mà cô đã bỏ qua vì quá mệt mỏi và tập trung vào những thứ phức tạp hơn.
Mặt cô nóng bừng lên vì xấu hổ.
Ly: "Em hiểu rồi ạ. Em cộng thiếu trọng số của cạnh."
Duong: "Ừ. Sửa đi. Giờ đi ngủ đi. 2 giờ sáng rồi."
Ly sửa lại dòng code.
if distances[current_vertex] + weight < distances[neighbor]:
Cô nhấn "Run".
Chương trình chạy trong một giây.
Và trả về kết quả.
Đúng.
Một cảm giác nhẹ nhõm và vui sướng lan tỏa khắp cơ thể cô. Cô đã làm được.
Ly: Cảm ơn anh nhiều lắm ạ! Code chạy được rồi!
Không có tin nhắn trả lời. Chắc anh ta đã đi ngủ.
Ly nhìn đồng hồ. 2 giờ 45 phút sáng. Cô mệt lả, nhưng lòng lại thấy vui. Cô không chỉ sửa được lỗi.
Cô còn học được một bài học: đôi khi, thừa nhận mình "không biết" và nhờ giúp đỡ, lại là cách giải quyết vấn đề nhanh nhất.
---
Và sau đó là các tuần thứ 3 và thứ 4 theo deadline của anh.
Sau đêm debug định mệnh đó, một thứ gì đó trong Ly đã thay đổi. Cô dần quen với nhịp độ làm việc khắc nghiệt. Deadline 6 giờ sáng Chủ Nhật không còn là một nỗi kinh hoàng, mà trở thành một cột mốc quen thuộc, một phần trong chu trình sống của cô.
Cô bắt đầu hiểu ra.
Học nhanh không bằng học kỹ.
Cô đã từng tự hào vì có thể đọc xong một chương sách trong 30 phút. Giờ đây, cô tự hào vì có thể dành ra 3 ngày để thực sự hiểu và implement một thuật toán. Tốc độ không còn là thước đo duy nhất của sự thông minh.
Độ sâu mới là thứ quan trọng.
Thứ Sáu của tuần thứ tư, cô có buổi meeting trực tiếp thứ hai với Minh Dương.
Lần này, cô không đến với một danh sách câu hỏi "thông minh" để tỏ ra nguy hiểm. Cô đến với sự chuẩn bị kỹ lưỡng. Cô đã hoàn thành tất cả các nhiệm vụ của tuần 3 và 4: đọc paper về AlexNet, và implement một vài mô hình Machine Learning cơ bản như SVM và K-Means.
Cô bước vào lab A203, không còn rụt rè như lần đầu. Cô gật đầu chào những người khác trong lab, rồi đi thẳng đến bàn của Dương.
"Chào anh ạ," cô nói, giọng bình tĩnh.
Dương ngẩng lên từ màn hình. "Ngồi đi."
Ly trình bày lại những gì mình đã học được trong hai tuần qua.
Cô không chỉ tóm tắt.
Cô đặt ra những câu hỏi sâu hơn.
"Em đọc paper về AlexNet," cô nói. "Em hiểu tại sao họ dùng ReLU thay cho Sigmoid để tránh vanishing gradient. Nhưng em không hiểu tại sao họ lại dùng 2 GPU để huấn luyện. Ý em là, về mặt kỹ thuật, việc chia sẻ trọng số giữa hai GPU có phức tạp không? Và nó có thực sự hiệu quả hơn việc dùng một GPU mạnh hơn không?"
Dương nhìn cô, lần này trong mắt anh ta có một tia ngạc nhiên nhỏ.
Đây không phải là câu hỏi của một người chỉ đọc lướt.
Anh ta bắt đầu giải thích về những hạn chế của phần cứng thời bấy giờ, về cách AlexNet tiên phong trong việc huấn luyện song song. Họ đã có một cuộc trao đổi thực sự về mặt kỹ thuật, không còn là buổi "hỏi cung" một chiều.
Anh ta lật xem bản report của cô. Nó dày dặn, chi tiết. Anh ta mở code của cô. Nó được viết sạch sẽ, có comment rõ ràng, và có cả unit test.
Anh ta hỏi cô vài câu hóc búa nữa. Về sự khác biệt giữa L1 và L2 regularization. Về cách K-Means bị ảnh hưởng bởi việc khởi tạo tâm cụm ban đầu.
Và lần này, Ly trả lời được. Không lắp bắp, không nói dối. Cô trả lời dựa trên sự hiểu biết thực sự của mình, thứ được xây dựng từ những đêm thức trắng và hàng giờ vật lộn.
Sau khi cô trả lời xong câu hỏi cuối cùng, Dương im lặng một lúc. Anh ta đóng laptop của cô lại.
Anh ta gật đầu nhẹ, một cái gật đầu gần như không thể nhận thấy.
"Em tiến bộ rồi đấy."
Chỉ năm từ.
Nhưng đối với Hoàng Ly, nó còn hơn cả một bài diễn văn khen ngợi. Nó là sự công nhận mà cô đã khao khát. Không phải công nhận cô thông minh, mà công nhận cô đã nỗ lực.
Một nụ cười thật sự, rạng rỡ, không chút tính toán, nở trên môi cô. Lòng cô ấm áp một cách lạ lùng.
"Em cảm ơn anh," cô nói, và lần đầu tiên, cô cảm thấy mình thực sự biết ơn anh ta.
---
Cô rời khỏi lab chiều hôm đó, lòng nhẹ bẫng. Bầu trời tháng Mười trong xanh và cao vời vợi.
Cô nhận ra, mình đang thay đổi.
Cô không còn là cô gái chỉ học qua loa để lấy điểm. Cô đang học để hiểu. Cô đang học cách đối mặt với những thứ mình "không biết", không phải bằng cách trốn chạy, mà bằng cách mổ xẻ nó ra, vật lộn với nó, cho đến khi nó trở thành một phần kiến thức của mình.
Và lần đầu tiên trong đời, Hoàng Ly cảm thấy tự hào về bản thân.
Không phải vì một con điểm 10, một tấm bằng khen, hay danh hiệu thủ khoa.
Cô tự hào, vì sự kiên trì.
Cô tự hào vì đã không bỏ cuộc lúc 2 giờ sáng.
Cô tự hào vì đã dũng cảm gửi đi tin nhắn cầu cứu.
Cô tự hào vì đã biến sự xấu hổ thành động lực.
Cô biết con đường phía trước còn rất dài và rất khó khăn. Nhưng lần này, cô không còn sợ hãi nữa. Vì cô đã tìm thấy một vũ khí mới, mạnh hơn cả trí thông minh.
Đó là khả năng để tiếp tục, ngay cả khi mọi thứ dường như là ngõ cụt.
Bạn đang đọc truyện trên: Truyen2U.Com