Tại sao nhiều lập trình viên lại không biết… code
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ọ ...
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.
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 đíchcho 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?
Thông tin bên lề:
Theo một thống kê tại Computer World thì:
– Mỹ là trung tâm IT của toàn cầu, nhưng Ấn Độ sẽ vượt Mỹ về số lượng lập trình viên vào năm 2017.
– Có tất cả khoảng 18.2 triệu lập trình viên trên toàn thế giới, và con số đó sẽ tăng lên 26.4triệu vào năm 2019 (tỷ lệ tăng là 45%).
– Hiện nay, Mỹ dẫn đầu thế giới về số lượng lập trình viên phần mềm với 3.6 triệu, trong khi Ấn Độ có khoảng 2.75 triệu. Nhưng đến năm 2018, Ấn Độ sẽ có 5.2 triệu lập trình viên (tăng gần 90%), và lúc đó Mỹ sẽ có 4.5 triệu lập trình viên (tăng 25%).