Tại sao nhiều lập trình viên lại không biết… code

Bài viết được dịch từ blog Coding Horror

Tôi đã rất hoài nghi khi đọc được nhận xét này của Reginald Braithwaite:

Cũng giống như tôi, vị tác giả đó cũng đang phải đối mặt với một thực tế rằng, trong 200 ứng viên cho mỗi vị trí công việc lập trình thì có đến 199 người không biết viết code một chút nào. Tôi nhắc lại: họ không thể viết bất kỳ một đoạn code nào.

Có nhiều người tốt nghiệp ngành Khoa học Máy tính ra nhưng lại không biết lập trình!Có nhiều người tốt nghiệp ngành Khoa học Máy tính ra nhưng lại không biết lập trình!


Vị tác giả mà anh ta đang nói đến là Imran, người mà rõ ràng là đang nhận ra rất nhiều lập trình viên không thể viết một chương trình nhỏ:

Sau một vài phép thử và sai (trial and error), tôi đã khám phá ra rằng người ta phải vật lộn không chỉ viết code để giải quyết những vấn đề lớn hoặc thậm chí là các vấn đề nhỏ (ví dụ: thực thi một danh sách liên kết (linked list) chẳng hạn). Mà họ phải rất khó khăn để giải quyết những vấn đề bé bằng cái móng tay.

Vì vậy tôi đã soạn ra một số câu hỏi mà có thể nhận dạng ra loại lập trình viên này và tạo ra một bộ câu hỏi mà tôi gọi là “FizzBuzz Questions”, cái tên này dựa trên chò chơi mà lũ trẻ con thường chơi (hoặc tạo ra để chơi) tại các trường học ở Anh. Một ví dụ của một câu hỏi Fizz-Buzz như sau:

Viết một chương trình để in ra các số từ 1 đến 100. Nhưng đối với các số là bội của 3 thì in ra chữ “Fizz” thay vì hiển thị số đó và đối với các số là bội của 5 thì in ra chữ “Buzz”. Đối với các số vừa là bội của 3 và 5 thì in ra chữ “FizzBuzz”.

Hầu hết các lập trình viên khá sẽ có khả năng viết ra giấy chương trình trên trong khoảng vài phút. Nhưng bạn muốn biết một điều đáng kinh hãi không? Đó là phần lớn những sinh viên tốt nghiệp ngành Khoa học Máy tính của chúng ta không thể viết được nó. Và tôi cũng đã nhìn thấy nhiều lập trình viên tự nhận mình là senior phải mất nhiều hơn từ 10-15 phút để viết ra đoạn code này.

Dan Kegel cũng đã gặp phải một kinh nghiệm tương tự khi tuyển dụng các lập trình viên cho công ty của mình:

Một điều đáng ngạc nhiên là phần lớn các ứng viên, thậm chí với bằng cấp Thạc sĩ hoặc Tiến sĩ trong ngành Khoa học Máy tính, không đạt yêu cầu trong suốt buổi phỏng vấn khi được hỏi thực thi một vài tác vụ lập trình cơ bản. Ví dụ, cá nhân tôi đã phỏng vấn một số sinh viên đã tốt nghiệp và họ đã không thể trả lời câu hỏi “Viết một vòng lặp đếm từ 1 đến 10” hoặc “Số đứng sau chữ F trong hệ thập lục phân là số mấy?” Ngoài ra, tôi đã phỏng vấn nhiều ứng viên mà không thể sử dụng đệ qui để giải quyết một vấn đề thực tế. Đây là những kỹ năng cơ bản nhất; bất kỳ ai thiếu hụt chúng thì hầu như chắc chắn không thể làm được gì nhiều trong lập trình.

Nói ra điều này với tư cách của các kỹ sư phần mềm, những người mà phải tuyển dụng nhân viên mới trong tương lai, tôi có thể chắc chắn để nói rằng chúng tôi đã quá mệt mỏi để nói về các ứng viên mà không thể lập trình ngoài cái túi hồ sơ xin việc của họ. Nếu bạn có thể viết một vòng lặp từ 1 đến 10 thành công với mọi ngôn ngữ lập trình trong hồ sơ xin việc của mình, hay có thể làm những phép toán đơn giản mà không cần một máy tính tay, và có thể sử dụng đệ qui để giải quyết một vấn đề thực tế, thì bạn đã bỏ xa đám lập trình viên còn lại rồi đó!

Từ những phát biểu của Reginald, Dan, và Imran thì đến lượt tôi bắt đầu cảm thấy một chút lo lắng. Tôi sẵn sàng bỏ qua về sự thiếu hụt kiến thức của một số bạn trẻ mới ra trường khi bắt đầu nghề nghiệp của họ. Vì ai cũng phải bắt đầu từ một nơi nào đó. Nhưng tôi cảm thấy bối rối và kinh hãi rằng có những người được gọi là lập trình viên muốn ứng tuyển một công việc mà lại không có khả năng viết một vài chương trình thuộc loại đơn giản nhất. Đó là một cái tát vào giữa mặt bất kỳ ai đang viết phần mềm để kiếm sống.

Ranh giới rộng lớn giữa những người có thể lập trình và những người không thể lập trình thì ai cũng biết. Tôi cho rằng bất kỳ ai ứng tuyển cho một công việc với tư cách là một lập trình viên thì đã vượt qua được ranh giới này. Nhưng chúng ta phải thừa nhận một điều rằng. Dường như, bài toán hiển thị FizzBuzz thì được đưa ra nhằm mục đích cho các nhà tuyển dụng đỡ mất thời gian của họ khi phải phỏng vấn mấy tay lập trình viên mà không biết code.

Bạn có nghĩ rằng bài kiểm tra FizzBuzz thì quá dễ — và nó thì cố tình dễ và không chứng tỏ được điều gì — nhưng một độc giả đã bình luận tại bài viết của Imran về tính hiệu quả của nó như sau:

Tôi cảm thấy ghét những nhà tuyển dụng nào cho rằng bài kiểm tra FizzBuzz là quá dễ – theo kinh nghiệm của bản thân mình thì nó là một cách rất hay để biết có bao nhiêu ứng viên không có khả năng để làm những tác vụ lập trình đơn giản nhất.

Có thể sẽ là dại dột để bắt đầu phỏng vấn một lập trình viên mà không xem trước những đoạn code của anh ta. Tại công ty Vertigo, chúng tôi yêu cầu họ gửi một đoạn code mẫu trước khi tiếp tục chuyển sang giai đoạn phỏng vấn qua điện thoại. Và tại cuộc phỏng vấn trực tiếp thì chúng tôi đưa ra yêu cầu họ phải làm một số bài tập lập trình nhỏ. Không có gì khó khăn mấy, chỉ là một bài tập cơ bản để họ vận động xây dựng một ứng dụng nhỏ trong vòng từ một đến vài giờ. Mặc dù cũng có một vài trường hợp không như ý muốn, nhưng nói chung thì chiến lược này tỏ ra rất hiệu quả đối với chúng tôi. Nó cho phép chúng tôi tập trung vào các kỹ sư phần mềm thực thụ trong buổi phỏng vấn mà không phải dùng đến những câu hỏi đố nhạt nhẽo.

Thật là đáng hổ thẹn khi bạn phải làm rất nhiều sàng lọc để có được một buổi phỏng vấn chất lượng với các lập trình viên có thể thực sự biết lập trình. Điều này cũng thật nực cười nếu không muốn nói là quá thất vọng. Tôi không phải là một người quá coi trọng bằng cấp, nhưng nó làm tôi tự hỏi liệu tác giả nổi tiếng Steve McConnell có nhắm tới điều gì trong tất cả những buổi nói chuyện của ông nhằm tạo ra một nghề nghiệp thực sự trong ngành công nghệ phần mềm?

Cập nhật: Bạn theo dõi tiếp bài viết về vấn đề FizzBuzz ở đây nhé: FizzBuzz: nấc thang lên thiên đường của lập trình viên

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

30 comments on “Tại sao nhiều lập trình viên lại không biết… code

  1. Lập trình viên ở Việt Nam thì đa số giống như bài viết nói, có lượng mà không có chất😀, học lập trình mà trùm cài win dạo, cài phần mềm dạo, đánh máy thuê, chơi game trùm :v, còn lập trình thì chỉ có mỗi tấm bằng trống rỗng (ở đây mình nói đa số nhé ^_^, hình như trong đó có mình, keke)

  2. dân số việt nam là 90 triệu 9.10^7. ta ước lượng cứ 100 người thì có 1 người học lập trình suy ra 10^-2. lấy 9.10^7×10^-2= 9.10^5. Ước lượng có khoảng 900.000 lập trình viên. Suy đoán thôi ^^

  3. Cái bài FizzBuzz làm thế nào vậy? Có lẽ nào bài đó quá dễ lại là vấn đề gây khó khăn. Giả sử một câu trả lời có 2 phương án lựa chọn là A và B. Bạn chắc chắn là A đúng (thực tế là A đúng thiệt), nhưng có người khác lại trả lời một cách tự tin và quyết đoán là B đúng. Bạn sẽ nghĩ sao? Chắc chắn bạn sẽ suy nghĩ lại “Liệu mình có sai?”. Mới đầu nghe bài FizzBuzz mình thấy bài này rất dễ, nhưng đọc đến cái vụ có rất nhiều người không làm được, hay gặp khó khăn khi làm cái bài này, khiến mình phải suy nghĩ lại. Do không có đáp án nên cái suy nghĩ “Liệu mình có sai?” lại càng lớn dần lên.
    Lời kết: Cái bình luận này mình viết không có mục đích gì hết, không chê bai, hay tuyên dương ai. Đó chỉ là những dòng suy nghĩ sau khi đọc xong bài viết.
    Bài viết rất hay!

  4. Mình thấy bài FizzBuzz này khá dễ. Mình mất có vài phút viết ra giấy, viết liên tục có cần suy nghĩ gì đâu. Không hiểu sao các Lập trình viên tốt nghiệp đại học k viết đc :v. Mình mới 16 tuổi

  5. Đa phần xã hội cho rằng trình độ thạc sĩ thì hơn kĩ sư, tiến sĩ thì hơn thạc sĩ. Các ngành khác thì mình không bàn đến chỉ nói đến ngành phần mềm.
    Theo kinh nghiệm của mình những người học cao họ có khả năng tiếp thu kiến thức tốt, cách học của họ tốt nhưng đặc điểm ngành phần mềm là ngành sản xuất, người làm nhiều sẽ giỏi hơn người chỉ có học, nghành phần mềm cần rất nhiều thực tế, thay đổi quá nhanh sách vở không theo kịp.
    Những người học cao làm nghiên cứu sẽ phù hợp hơn là làm sản xuất phần mềm.

    Còn việc bài kiểm tra FizzBuzz thì mình thấy thực sự bất ngờ vì bài nó mình làm từ hồi còn học cấp 3 chỉ biết mỗi Pascal, thuật toán nó rất đơn giản mà mình không nghĩ rằng lại có người nào học CNTT mà lại không thể viết nổi bài này

  6. mình cũng không hiểu những lập trình viên ở trên học như thế nào và đào tạo từ đâu nữa..mình cũng học IT..mình nghĩ mình ko thuộc số đó vì những vấn đề ngắn gọn như trên mình có thể giải quyết được..nhưng đôi khi mình thấy mình lại ko phù hợp với nghề này..bởi vì một lí do là mình nhận ra rằng mình “thiêu tư duy logic trong lập trinh”..những người bạn của minh cùng lứa tuổi ,cùng môi trường học tập nhưng người ta code rất giỏi,tư duy rất tốt.đọc code cũng rất giỏi nữa..trong khi thì mình lại ko có cái đó..nhiều lúc mình cố gắng học nhưng cũng chả tới đâu..có thể minh chưa tiếp xúc nhiều với thực tế ,dự án và thực hành nhiều..mình cũng chẳng quan trọng bằng cấp,mình muốn có một năng lực lập trinh thực sự..và minh thực sự khâm phục nhiều người vì họ có được điều đó

    • vocuong, cảm ơn bạn đã bày tỏ suy nghĩ nhé! Thực ra theo mình nghĩ, nếu ta có giỏi đến mấy thì bao giờ cũng có người giỏi hơn ta; bởi vậy hãy tự “so sánh với chính bản thân mình” để tiến bộ hơn theo thời gian thì quan trọng hơn.🙂

  7. anh Vinacode oi, cho e hoi 1 van de nhe!
    E la nguoi Viet Nam, e moi qua minh duoc hon 4 thang, chong e la IT o My gan 20 nam.( nhung e muon hoi anh, de e co duoc nhieu y kien, e chon loc, roi sau do e quyet dinh)
    o Vnam e hoc duoc si va lam cho mot hang Duoc tai Tp.HCM.
    bay gio, e chuan bi di hoc de sau ngay co cai nghe o My, Chong e khuyen e hoc IT giong anh, vi neu co gi, a la nguoi chi dan them cho e khi o nha, va luong huong khi ra truong cua nganh IT cung kha , sau Bac Si, Duoc Si, ve thoi gian va tien hoc phi thi khong nhieu bang khi hoc Bs, Ds.
    E cung dang fan van giua hoc Ds va It, e xin anh co the gop y kien cho e, xua gio e ko biet lap trinh, luc hoc pho thong e hoc toan cung kha thoi chu ko gioi,e nghe noi hoc IT thi phai gioi toan, Logic…..
    Ma neu hoc IT, thi viec dau tien e fai can biet ve IT nhu the nao? phai cam thay minh co nhung khieu gi ve IT moi hoc duoc hay sao?
    A cho e biet, muc do hoc IT cho nhung nguoi ko gioi Toan, kho khan hay nhu the nao luon voi anh nhe!
    Thanks a nhieu lam!

    • Chào bạn,

      Thực ra học IT cũng ko cần phải giỏi toán lắm đâu, bạn có thể đọc thêm bài viết này để hiểu thêm nhé: 10 Quan niệm không đúng trong việc học lập trình

      Nếu mình là bạn thì mình sẽ ngồi liệt kê ra những điểm mình thích và ko thích giữa ngành IT và ngành Dược (hoặc Bác sĩ), rồi thử hình dung ra công việc sau này mình sẽ làm xem có phù hợp hay không. Sau khi thấy ngành nào thích nhiều hơn thì sẽ quyết định chọn ngành đó, và đã quyết rồi thì ko ân hận nữa🙂

      Thân

  8. Bài viết rất hay, phản ánh đúng thực trạng trong giới lập trình. Nhưng đây không phải là vấn đề của riêng một quốc gia mà là của chung khi mà hiện tại có rất nhiều APIs bậc cao (high leve APIs) cũng như các framework, việc giải quyết các vấn đề lại trở nên đơn giản hơn là ngồi suy nghĩ các thuật toán. Chưa kể việc tìm giải pháp, thậm chí là source code trên Google đang trở thành 1 thói quen. Cá nhân mình nghĩ, việc này sẽ là một thói quen xấu nếu bất kỳ vấn đề nào cũng lên Google search mà chưa suy nghĩ tìm giải pháp. Liệu sẽ thế nào khi mà ai cũng search và copy về dùng và liệu còn bao nhiêu người sẽ chia sẻ và giải đáp các vấn đề trong giới lập trình vào 10 năm nữa ?!?

    Mình không rõ số liệu cụ thể liệu có bao nhiêu lập trình viên ở Việt Nam nhưng trong giới lập trình cũng chia ra nhiều thành phần: Programmer, Developer, Hacker, Computer Science. Developer có lẽ đang chiếm tỉ trọng cao nhất vì rất dễ để trở thành một developer (so sánh với phần còn lại). Mình hy vọng tương lai sẽ có thêm thật nhiều lập trình viên có chất lượng cho nước nhà cũng như phát triển nền công nghiệp IT🙂

  9. các anh chị cho mình hỏi là giữa học môn thay thế và làm đồ án khi ra trường đối với hệ đào tạo theo tín chỉ thì bên nào hay hơn hay có lợi thế gì khi xin việc làm! cảm ơn rất nhiều!

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s