Tách con cừu biết lập trình ra khỏi những con dê không biết lập trình

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

Rất nhiều người đã trỏ liên kết đến công trình nghiên cứu này, nó đề xuất một cách để tách con cừu biết lập trình ra khỏi nhóm những con dê không biết lập trình trong những lớp khoa học máy tính – rất lâu trước khi các sinh viên đó từng chạm vào một chương trình hoặc một ngôn ngữ lập trình:

Làm thế nào để tách người biết lập trình ra khỏi những người không biết lập trình?Làm thế nào để tách người biết lập trình ra khỏi những người không biết lập trình?

Tất cả các giáo viên lập trình thường nhận thấy rằng kết quả đào tạo của họ thường cho ra hai nhóm khác biệt tạm gọi là ‘double hump’. Cụ thể là sẽ tạo ra hai tập hợp: những người có thể [lập trình], và những người không thể [lập trình], mỗi nhóm hoàn toàn tách biệt nhau. Hầu hết tất cả các nghiên cứu trong công tác dạy và học lập trình thì đều tập trung vào việc dạy: thay đổi ngôn ngữ, thay đổi loại ứng dụng, sử dụng một IDE và làm việc dựa vào động lực. Không cái nào trong số chúng hoạt động hiệu quả, và cái kết quả ‘double hump’ vẫn cứ tồn tại. Nhưng chúng tôi đã tiến hành một bài kiểm tra mà đã lựa được ra nhóm người có khả năng lập trình, thậm chí trước khi khóa học đó bắt đầu. Chúng tôi có thể tách biệt hai nhóm có khả năng lập trình và không có khả năng lập trình đó trước khi họ bắt đầu học lập trình. Bạn có thể không tin vào kết quả này, nhưng bạn sẽ tin sau khi nghe bài nói chuyện này. Chúng tôi không biết chính xác lý do tại sao và nó làm việc như thế nào, nhưng chúng tôi đã có một số lý thuyết rất tốt.

Tôi cũng đã không biết được rằng có sự phân chia giữa những lập trình viên biết lập trình và không biết lập trình xuất hiện khá rõ rệt tại giai đoạn sớm như vậy. Dan Bricklin cũng đã đề cập về chủ đề này trong tiểu luận của anh, Tại Sao Johnny Không Thể Lập Trình. Nhưng rõ ràng nó là một kiến thức phổ biến trong cộng đồng những người dạy khoa học máy tính:

Mặc dù có những thay đổi to lớn cho tới nay kể từ khi máy tính điện tử được phát minh vào những năm 1950, nhưng một số thứ vẫn không thay đổi. Đặc biệt là, hầu hết mọi người không có khả năng học lập trình: từ 30% đến 60% sinh viên đầu vào của ngành khoa học máy tính tại tất cả các trường đại học đều trượt ngay trong khóa học lập trình đầu tiên. Những giáo viên có thâm niên thì rất nản lòng nhưng chẳng bao giờ để ý đến thực tế này; và vì vậy điều đó đã tồn tại gần hai thế hệ, từ khi chủ đề này bắt đầu vào những năm 1960.

Bạn có thể nghĩ rằng bài kiểm tra mà họ đã đề xuất để xác định năng khiếu lập trình thì phức tạp, nhưng điều ngược lại mới đúng. Đây là câu hỏi thứ nhất, đúng nguyên văn:

Đọc các câu sau đây và chọn câu trả lời đúng.

int a = 10;
int b = 20;
a = b;

Các giá trị mới của a và b sẽ là:

[  ] a = 20   b = 0
[  ] a = 20   b = 20
[  ] a = 0     b = 10
[  ] a = 10   b = 10
[  ] a = 30   b = 20
[  ] a = 30   b = 0
[  ] a = 10   b = 30
[  ] a = 0     b = 30
[  ] a = 10   b = 20
[  ] a = 20   b = 10

Bài kiểm tra này thì rất tầm thường đối với các lập trình viên chuyên nghiệp, nhưng bạn nên nhớ rằng, nó được nhắm đến những sinh viên mà chưa bao giờ nhìn thấy một dòng code nào trong đời họ. Và 12 câu hỏi khác thì cũng xoay quanh chủ đề gán (assignment) như câu đầu tiên.

Các tác giả của nghiên cứu này thừa nhận rằng có những rào cản cơ bản trong khoa học máy tính là..

  • assignment (gán) và sequence
  • đệ quy/ lặp
  • concurrency

.. theo thứ tự đó. Vì vậy, chúng ta bắt đầu bằng bài kiểm tra vào rào cản đầu tiên mà mọi lập trình viên mới vào nghề sẽ gặp phải đó là: assignment (phép gán). Kết quả của bài kiểm tra đó đã chia những sinh viên thành 3 nhóm:

  • 44% sinh viên đã hình thành một mô hình suy nghĩ nhất quán về cách phép gán làm việc như thế nào (thậm chí có thể là chưa đúng!)
  • 39% sinh viên chẳng bao giờ hình thành nên một mô hình nhất quán về cách mà phép gán hoạt động.
  • 8% sinh viên chẳng đưa ra một câu trả lời chết tiệt nào cả và họ để bài trắng.

Bài kiểm tra đó được thực hiện hai lần; một lần vào lúc bắt đầu, trước khi có bất kỳ một sự hướng dẫn nào, và một lần nữa sau khi lớp học được 3 tuần. Có một điều nổi bật thú vị đó là gần như không có sự thay đổi nào giữa các nhóm kể từ bài kiểm tra đầu tiên và bài thứ hai. Hoặc là bạn có một mô hình nhất quán trong tâm trí ngay tức thì khi lần đầu tiên gặp phải phép gán, đó là rào cản đầu tiên trong lập trình – hoặc ngược lại bạn sẽ chẳng bao giờ có thể phát triển một mô hình nào cả!

Các tác giả đã nhận thấy có một mối liên quan ở mức rất cao giữa sự thành công trong việc lập trình và việc hình thành nên một mô hình trí tuệ nhất quán:

Rõ ràng là bài kiểm tra của Dehnahdi thì không phải là một cách hoàn hảo để tách những con cừu biết lập trình ra khỏi nhóm những con dê không biết lập trình. Mặc dù vậy, nếu nó được sử dụng như là một bước sàng lọc đầu vào, và chỉ những ai mà ghi được điểm nhất quán thì mới được nhận thì tỷ lệ thống kê đậu/trượt sẽ hoàn toàn thay đổi. Trong tổng số sinh viên thì có 32/61 (tức khoảng 52%) là bị trượt; trong khi đó nhóm có nhất quán trong bài kiểm tra đầu tiên thì chỉ có 6 trong 27 (tức khoảng 22%) bị trượt. Chúng tôi tin rằng chúng ta có thể tuyên bố là có một bài kiểm tra dự đoán được tiến hành trước khi khóa học bắt đầu, mà sẽ cho ra một tỷ lệ chính xác rất cao về những sinh viên nào sẽ thành công. Điều này thì như chúng ta đã biết, bài kiểm tra đầu tiên có khả năng phỏng đoán mức độ thành công của người tham gia.

Tôi đề xuất bạn nên đọc qua bản nháp của công trình này (pdf), nó là một tài liệu rất thú vị cho cái mà tôi thường nghĩ rằng nó là một tài liệu học thuật khô khan. Thay vì đó, đọc nó giống như là bạn đang đọc một bài viết trên blog vậy. Nó chứa đầy những phân tích thú vị giống như đoạn này chẳng hạn:

Chúng tôi phải mất một khoảng thời gian mới dám tin vào những kết quả nghiên cứu của mình. Dường như đối với chúng tôi, mặc dù tại thời điểm này vẫn chưa thu thập đủ dữ liệu, và nó phải tiến hành nghiên cứu thêm, rằng điều phân biệt giữa 3 nhóm trong bài kiểm tra đầu tiên thì chính là thái độ khác nhau của họ đối với sự vô nghĩa.

Thực ra những gì được viết ở trong một ngôn ngữ lập trình để cho máy tính thực thi thì đối với một người chưa được học cú pháp ngôn ngữ đó là hoàn toàn vô nghĩa. Để viết một chương trình máy tính thì bạn phải chấp nhận những quy tắc trong đó, để chấp nhận bất cứ cái gì bạn có thể muốn chương trình đó thực thi, cái máy sẽ mù quáng tuân theo những quy tắc vô nghĩa và tạo ra một số kết luận cũng vô nghĩa. Trong bài kiểm tra thì nhóm nhất quán đã cho thấy rằng họ có một sự chấp nhận trước của thực tế này: họ có khả năng nhìn thấy những vấn đề tính toán toán học về nguyên tắc, và có thể tuân theo những quy tắc này bất kể là chúng có thể dẫn đến kết quả gì đi chăng nữa. Còn nhóm không nhất quán, thì trái lại, họ tìm kiếm nó thì có ý nghĩa ở chỗ nào. Nhóm để bài thi trắng thì biết rằng nó thì trông có vẻ vô nghĩa, và họ từ chối làm việc với nó.

Tất cả mọi người nên biết về làm thế nào để sử dụng một chiếc máy tính, nhưng không phải ai cũng cần phải trở thành một lập trình viên. Nhưng nó thì vẫn có một chút khó hiểu rằng hoạt động lập trình dường như là một thứ không có khả năng dạy được đối với một số lượng khá lớn trong số các sinh viên đang gia nhập vào ngành khoa học máy tính. Rõ ràng là không phải ai cũng bị quyến rũ bởi những quy tắc vô nghĩa và những kết luận vô nghĩa như chúng ta; tôi không thể tưởng tượng được lý do tại sao.

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.

Advertisements

Trả lờ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 Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s