Buổi tối đầu tiên với một ngôn ngữ mới thường làm mình khiêm tốn lại. Editor đã mở, documentation nhìn thân thiện, nhưng ngay cả một ví dụ nhỏ cũng cần nhiều chú ý hơn tưởng tượng. Một import bị thiếu, một type error lạ, một câu không đi theo grammar quen thuộc. Tự nhiên tôi nhớ lại cảm giác làm beginner.
Học một ngôn ngữ mới mỗi năm không nhất thiết nghĩa là mỗi năm phải fluent. Nó có thể chỉ là chọn một cách nghĩ chưa quen và ở lại đủ lâu để hiểu nó làm điều gì dễ hơn, điều gì vụng hơn, và nó làm lộ gì về những công cụ mình đã dùng. Đôi khi ngôn ngữ đó là programming language. Đôi khi là human language. Cả hai đều dạy sự chú ý.
Một programming language mang theo một worldview. Go yêu cầu sự đơn giản và explicit error handling. Rust buộc mình nghĩ kỹ về ownership và lifetime. Python làm nhiều ý tưởng dễ sketch. TypeScript đưa contract lại gần công việc JavaScript hằng ngày. Elixir làm concurrency có cảm giác khác. Mỗi language âm thầm luyện một cơ bắp khác, kể cả khi sau đó mình không dùng nó trong production.
Giá trị không chỉ nằm ở syntax. Syntax là phần nhìn thấy, giống vocabulary. Bài học sâu hơn là language xem điều gì là bình thường. Nó có khuyến khích immutability không? Nó làm null khó hay dễ? Nó thích composition, message passing, pattern matching hay object? Nó làm error impossible, explicit, recoverable hay dễ bị bỏ qua? Những lựa chọn đó thay đổi cách developer nhận ra vấn đề.
Human language cũng dạy sự khiêm tốn tương tự. Một câu nghe thẳng trong ngôn ngữ này có thể nghe quá sắc trong ngôn ngữ khác. Một từ có thể mang context mà translation không chuyển hết. Học dù chỉ một ít ngôn ngữ khác nhắc tôi rằng communication không chỉ là chuyển thông tin. Nó còn mang tone, respect, rhythm và assumption chung qua một khoảng cách.
Có một lợi ích career lặng lẽ trong việc sẵn lòng chậm lại. Nhiều engineer chỉ thoải mái trong tool quen thuộc, rồi nhầm comfort với truth. Một language mới cắt ngang điều đó. Nó làm lộ những habit từng vô hình: cách tôi đặt tên, cách tôi cấu trúc error, cách tôi giải thích một ý, cách tôi với tới pattern vì quen chứ không phải vì phù hợp.
Nhịp mỗi năm hữu ích vì đủ nhỏ để thực tế. Tôi không cần build một product lớn trong mọi language. Vài bài tập tập trung là đủ: viết một CLI, parse một file, gọi một API, model một domain nhỏ, viết test, đọc một project thật và ghi lại một note ngắn về điều thấy khác. Note rất quan trọng. Không reflection, learning dễ tan thành trivia.
So sánh là nơi learning trở nên bền hơn. Sau khi dùng Rust, type system của TypeScript có cảm giác khác. Sau khi dùng Elixir, architecture dựa trên queue bớt bí ẩn. Sau khi học một human language, một product message bằng tiếng Anh có thể trở nên cẩn thận hơn vì tôi nhớ rằng không phải reader nào cũng chia sẻ cùng idiom. Language mới không thay language cũ. Nó làm language cũ có cạnh sắc hơn.
Cũng có một cái bẫy. Học language mới có thể trở thành cách né chiều sâu. Bắt đầu lại vài tháng một lần tạo cảm giác productive, trong khi mình không hoàn thành điều gì khó. Kỷ luật nằm ở scope khiêm tốn và trung thực. Một language, một năm, một artifact nhỏ, một reflection. Đủ mới để kéo giãn tư duy, không mới quá mức để thành nơi trốn.
Điều ở lại với tôi là cảm giác beginner. Nó không thoải mái, nhưng hữu ích. Nó làm cách tôi review code của người đang học mềm hơn. Nó khiến tôi giải thích rõ hơn. Nó nhắc tôi rằng expertise không phải danh tính vĩnh viễn; nó là một nơi ở tạm được xây bằng practice. Nếu có một ngôn ngữ từng thay đổi cách bạn nghĩ, programming hay human, tôi rất muốn biết nó đã làm điều gì hiện rõ hơn với bạn.