Ngược dòng & Xuôi dòng

Ngược dòng.

Ngành CNTT Việt Nam hình như đang đi theo một con đường kỳ lạ, rất nóng và ít bền vững.
 
Từ khi còn giảng dạy, đến giờ, tôi vẫn khuyên các bạn trẻ hơn rằng nên bắt đầu từ nền tảng căn bản: học ngôn ngữ trước khi học framework, học lập trình trước khi học công nghệ. Và tôi tin rằng đây là con đường phù hợp, bền vững; công nghệ thay đổi từng ngày và chúng ta không thể cứ chạy mãi từ nơi này sang nơi khác nếu thiếu nền tảng cơ bản.
 
Khi tìm đồng nghiệp, tôi cũng tư duy theo cách này. Song càng đi, tôi càng thấy mình ngược dòng với xu thế CNTT Việt Nam hiện nay.
 
Một câu hỏi được tôi đưa ra cho ứng viên là “Làm thế nào để sắp xếp 1 text file, gồm nhiều dòng, có dung lượng 2GB?”. Tôi nhận được câu từ chối trả lời nhã nhặn rằng: “Tôi không giỏi về thuật toán, và công ty cũng đang tìm iOS developer? Vậy hãy hỏi tôi những kiến thức về iOS.”.
 
Tôi đồng tình và đưa ra câu hỏi mới về iOS: “Bạn nhận được 1 text file từ vụ VN Airlines leak, gồm nhiều dòng, có dung lượng 2GB, và cần hiển thị thông tin đó trên 1 iOS app dưới dạng danh sách được sắp xếp theo alphabet để tiện tra cứu. Bạn sẽ làm thế nào?”
 
Đó chính xác là 1 câu hỏi về iOS? Và nếu một developer không giải quyết được bài toán đó, anh ta chỉ là junior.
 
Tôi không biết chúng ta có 1 chuẩn nào để phân biệt giữa “junior” và “senior” developer; ở Việt Nam tôi chỉ thấy “senior” mà thôi, mọi nơi, mọi CV; chỉ cần sau khi tốt nghiệp ĐH 1 năm. Trong buổi nói chuyện với ứng viên, đôi khi tôi phải nói rằng “ở công ty khác, bạn có thể được coi là senior developer, nhưng ở đây, title của bạn là developer”. Ngược đường. Không ai thu hút ứng viên tới công ty bằng cách đó hết :). Tôi biết, song chúng tôi không sử dụng những từ không mô tả đúng bản chất.
 
Khi Việt Nam “phổ cập” ĐH về mặt “bằng cấp” mà không phải “trình độ”, thì bằng ĐH được coi rẻ. ThS rồi cũng vậy. Khi chúng ta quá dễ dàng gọi nhau là “senior”, thì bạn biết kết quả rồi đấy :). Sẽ ra sao khi senior developer Việt Nam nói chuyện với junior developer của Mỹ?
 
Tôi nghĩ dù khó khăn, chúng ta vẫn nên tuân theo những chuẩn chung, của cả nền công nghiệp trên thế giới, đừng hạ chuẩn và “thủ dâm tinh thần” mình bằng sự lệch pha bởi một con đường riêng như GD Việt Nam đang làm.
 
Chúng tôi không thể thay đổi được cả ngành công nghiệp này, nên giờ, để hướng ra thế giới, chúng tôi vẫn phải đi ngược dòng.

Xuôi dòng.

Cảm ơn mọi người đã chia sẻ quan điểm trong bài viết trước, tôi không nghĩ có nhiều người quan tâm như vậy.
 
Bỏ qua những vấn đề tiểu tiết về ví dụ, câu chữ (vì tôi có thói quen chỉ viết 1 lần và gần như không sửa lại)… thì nội dung tôi muốn truyền tải trong bài viết trước là:
 
1. Tôi cho rằng mọi lập trình viên nên đi từ căn bản, từ ngôn ngữ tới framework, từ lập trình tới công nghệ. Và tôi nhận thấy quan điểm này không giống với cách thực hành của đa số developer Việt Nam hiện nay; nên tôi gọi là “ngược dòng”.
 
2. Tôi thấy ở Việt Nam có quá nhiều senior developer, chỉ với 1-2 năm kinh nghiệm. Đó là điều không phù hợp. Chúng tôi không không làm như vậy; nên tôi gọi là “ngược dòng”.
 
Về #1, tôi bảo lưu ý kiến dù đồng tình rằng có hàng trăm cách tiếp cận khác nhau.
 
Về #2, tôi cho rằng việc phân định giữa “junior” hay “senior” developer đó là sự trưởng thành về mặt giải quyết bài toán trong lĩnh vực công nghệ phần mềm.
 
Ngoài cách giải thích trong hình, bạn có thể tham khảo thêm tại bài viết gần với quan điểm của tôi: https://business.stackoverflow.com/blog/what-defines-a-senior-developer
 
Làm thế nào để developer có sự trưởng thành về mặt giải quyết bài toán trong lĩnh vực công nghệ phần mềm? Họ cần thời gian và trải nghiệm. Rất nhiều chuyên gia cho rằng, họ cần “X năm” trải nghiệm, và thường là X = 10. Nhiều chuyên gia bổ sung thêm rằng, họ cần có trải nghiệm trong ít nhất 1 project thất bại. Một số người đặc biệt xuất sắc “trưởng thành” nhanh hơn, X có thể là 2-5 năm, như Mark, Bill… (cỡ 5-10%).
 
Nhiều người lý luận rằng “tôi làm hàng trăm project trong 2 năm và trải nghiệm hơn hẳn 1 người làm 10 năm”, hay câu chuyện vui là “tôi 20 tuổi, có 10 năm kinh nghiệm do OT”, tôi cho rằng đó nên là câu chuyện phiếm mà thôi. Hãy nhớ rằng “trưởng thành” là một quá trình cần thời gian để suy ngẫm, để lớn lên, “làm nhiều” chỉ là việc trải nghiệm – là một phần, nguyên liệu tạo ra sự trưởng thành, nhưng không phải tất cả.
 
“A person with 10 years experience is quite different than someone who has experienced the same year 10 times.” (http://mattbriggs.net/blog/2015/06/01/the-role-of-a-senior-developer/)
 
Tôi thì theo nguyên tắc đơn giản hơn, “senior” developer cần 10.000 giờ trải nghiệm. Đó là 10.000 giờ thực hành có chủ đích chứ không phải chỉ ngồi trước màn hình máy tính. Thế thôi. Ai chăm chỉ thì cần 3-5 năm.
 
Bài toán “sắp xếp text file có dung lượng 2GB” có thể khiến nhiều người không thích nếu nhìn nhận dưới con mắt “thuật toán”. Tôi thì nghĩ thế này: Với sự “trưởng thành” trong cách giải quyết vấn đề của senior developer, anh ta sẽ hiểu đó là 1 bài toán có thể hiện hữu trong thực tế, không tách biệt ra rằng đó là về “thuật toán” hay “lập trình iOS”. Và với góc nhìn đó, anh ta sẽ biết đâu là vấn đề quan trọng cần giải quyết, còn giải quyết theo cách nào là “chấp nhận được”, theo cách nào là “tốt”… thì phụ thuộc vào kiến thức và kỹ năng hiện có. Song cách anh ta tiếp cận bài toán cho thấy sự “trưởng thành” và quyết định anh ta là “junior” hay “senior”.
 
Tôi đề cập tới vấn đề này cũng do trải nghiệm bản thân. Mấy năm trước, tôi có tiếp xúc với 1 vài doanh nghiệp. Có nơi, sau khi tôi từ chối lần 1, họ trở lại với mức lương gấp đôi kèm title “senior developer”. Có nơi họ đặt tôi là “principle engineer”, chỉ bởi vì Principle Engineer là title cao nhất về engineer được Google sử dụng, và tôi là người giỏi nhất ở đó (haha, có lý đấy chứ?). Một sinh viên thì biết gì mấy về thế giới? Nhưng cũng là sinh viên giỏi, thì tiếp cận những title đó thế nào? Tự hào vì mình là số 1, là ngọc quý; đương nhiên. Nhưng thực sự là tôi đã rất may mắn khi từ chối những lời mời đó; nhìn rộng ra thế giới để biết chỗ thực sự của mình. Nếu không, giờ tôi sẽ gửi bạn namecard là Principle Engineer đó, nghĩ tới thôi đã buồn cười :).
 
Bởi vậy, nhiều người chỉ trích tôi về sự “khó khăn” khi gọi những đồng nghiệp của mình là “senior developer” dù trước đó họ còn có những title “khủng” hơn thế. Tôi vẫn cho rằng việc mình làm là đúng, chúng tôi cần hướng tới quy chuẩn chung của thế giới, để “senior developer Việt Nam” có cùng đẳng cấp với “senior developer” ở Silicon Valley, và thảo luận tay bo với họ về cách giải quyết bài toán, chứng minh trên từng dòng code, chứ không phải rụt rè trước thậm chí cả “junior developer Tây”.
 
Và tôi gọi đó là ngược dòng.
 
Nhưng tôi không ngờ suy nghĩ của mình cũng được nhiều người ủng hộ. Và tôi đặc biệt thích cách nghĩ của anh Manh Lan Pham rằng “Nếu nhiều thằng cắm đầu đi ngược dòng thì nó lại thành xuôi ấy mà ^^” 🙂
 
Vậy nên nếu bạn đồng tình, tôi hy vọng chúng ta có thể “cắm đầu đi ngược dòng” để chúng ta “xuôi dòng” cùng thế giới.