Tại sao các thí sinh của cuộc thi lập trình lại sử dụng C ++ và Java? [đóng cửa]


93

Sau khi tham gia và theo dõi cuộc thi Google Code Jam năm nay , tôi không thể không nhận thấy số lượng đáng kinh ngạc các thí sinh [thành công] sử dụng C / C ++ và Java. Sự phân bố của các ngôn ngữ được sử dụng trong suốt cuộc thi có thể được nhìn thấy ở đây .

Sau khi lập trình bằng C / C ++ trong vài năm, gần đây tôi đã yêu Python vì tính chất dễ đọc / đơn giản của nó. Gần đây, tôi đã học các ngôn ngữ chức năng như OCaml, Scheme, và thậm chí cả các ngôn ngữ logic như Prolog. Những ngôn ngữ này chắc chắn có giá trị của chúng và theo tôi, có thể được áp dụng dễ dàng hơn C ++ và Java cho một số trường hợp nhất định. Ví dụ: việc sử dụng call / cc của Scheme giúp đơn giản hóa backtracking (một công cụ cần thiết để giải đáp một số vấn đề) và đặc tả logic của Prolog, mặc dù không hiệu quả do tính chất thô bạo của nó, có thể đơn giản hóa đáng kể (và thậm chí tự động giải quyết) một số vấn đề khó quấn quanh bộ não của một người.

Rõ ràng là một thí sinh cạnh tranh nên sử dụng các công cụ phù hợp nhất cho thử thách. Ngay cả khi lắp ráp x86 cũng hoàn thành Turing - điều đó không biện minh cho việc giải quyết các vấn đề với nó. Trong trường hợp này, tại sao các thí sinh sử dụng các ngôn ngữ ít phổ biến hơn như Scheme / Lisp, Prolog và thậm chí Python lại kém thành công hơn đáng kể so với các thí sinh sử dụng C / C ++ và Java? Nói khác đi, tại sao các thí sinh thành công không sử dụng ngôn ngữ, mặc dù có thể ít phổ biến hơn, được cho là công cụ tốt hơn cho công việc?

Có một số động lực cho câu hỏi của tôi. Quan trọng nhất, tôi muốn trở thành một lập trình viên giỏi hơn - cả về khía cạnh thực tế và khía cạnh cạnh tranh. Sau khi được giới thiệu về những mô hình đẹp đẽ như lập trình hàm và logic, thật khó chịu khi thấy nhiều người từ bỏ chúng để ủng hộ C / C ++ và Java. Nó thậm chí còn khiến tôi đặt câu hỏi về sự ngưỡng mộ của mình đối với những mô hình đã nói, lo lắng rằng tôi không thể thành công với tư cách là một lập trình viên Lisp / Scheme / Prolog trong một cuộc thi lập trình.


11
Tôi đoán tốc độ thực thi có thể là một yếu tố.
Zaki

Câu hỏi thú vị; rất vui nếu nhận được một số câu trả lời từ những người tham gia, trong Code Jam hoặc các cuộc thi khác (ACM, v.v.). Chạy thời gian giới hạn sức mạnh thiên vị chống lại ngôn ngữ thông dịch, mặc dù ...
tzaman

11
Các ngôn ngữ động có một vấn đề lớn về hiệu suất: xem điểm chuẩn
NullUserException

Đối với Topcoder, đó hoàn toàn là do họ có một quy tắc cấm sử dụng bất kỳ thứ gì ngoại trừ các thư viện tiêu chuẩn của Python, điều này khiến bất kỳ điều gì khác ngoài các nhiệm vụ tầm thường là không thể. Tìm kiếm tiểu hành tinh trong hình ảnh không gian? Thật tệ, bạn thậm chí không thể sử dụng NumPy.
endolith

Câu trả lời:


68

Câu hỏi tuyệt vời! Là một người đã từng tham gia các cuộc thi lập trình một chút, tôi có thể có điều gì đó để nói.

[Hãy loại bỏ tuyên bố từ chối trách nhiệm tiêu chuẩn: lập trình cuộc thi chỉ liên quan một cách lỏng lẻo đến "lập trình trong thế giới thực" và trong khi nó kiểm tra các kỹ năng thuật toán và giải quyết vấn đề cũng như khả năng đưa ra mã làm việc nhanh không có lỗi trong áp lực thời gian, nó không nhất thiết phải tương quan với việc có thể xây dựng các dự án phần mềm lớn, viết mã có thể bảo trì, v.v. (ngoài thực tế là các chương trình có cấu trúc tốt dễ gỡ lỗi hơn).]

Bây giờ cho một số câu trả lời:

  • C ++ / Java cũng phổ biến hơn các ngôn ngữ khác trong thế giới thực, vì vậy bạn sẽ thấy tỷ lệ này cao hơn ở bất kỳ đâu. (Nhưng nó thậm chí còn cao hơn trong dân số cuộc thi.)

  • Nhiều người trong số những người này là sinh viên hoặc đã tham gia các cuộc thi khi còn là sinh viên và C ++ / Java là "ngôn ngữ đầu tiên" phổ biến hơn mà sinh viên học. (Sinh viên đại học ngày nay có thể bắt đầu với Scheme, Haskell, Python, v.v., nhưng học sinh trung học (thường tự học) ít thường xuyên hơn.) Trên thực tế, nhiều học viên Đông Âu vẫn sử dụng Pascal, và tuyệt vời hơn với nó so với phần còn lại của chúng ta với bất kỳ ngôn ngữ nào.

  • Các cuộc thi cấp trường và đại học thường sử dụng những ngôn ngữ này. Olympic Tin học Quốc tế (IOI) chỉ cho phép C, C ++ và Pascal (hoặc có thể bây giờ nó cho phép Java; tôi chưa theo kịp) và Cuộc thi Lập trình Liên trường ACM (ACM ICPC) chỉ cho phép C, C ++ và Java. TopCoder cho phép C ++, Java, C # và VB (thực sự: p); và gần đây là Python. Vì vậy, bạn có thể nói "hệ sinh thái cuộc thi" có nhiều lập trình viên C ++ / Java hơn trong đó. Google Code Jam và IPSC là một trong số ít các cuộc thi cho phép viết mã bằng bất kỳ ngôn ngữ nào.

  • Bây giờ câu hỏi là, trong GCJ, nơi mà các thí sinh được tự do lựa chọn ngôn ngữ, tại sao họ không chọn Python hoặc Scheme? Yếu tố liên quan nhất là những ngôn ngữ này chậm . Chắc chắn, đối với hầu hết các lập trình trong thế giới thực, chúng dễ dàng đủ nhanh, nhưng đối với các vòng lặp chặt chẽ thường liên quan đến việc chương trình chạy dưới giới hạn n giây cho tất cả các trường hợp thử nghiệm, các ngôn ngữ này không cắt nó cho bất kỳ các vấn đề liên quan đến thuật toán nhiều hơn. (Một bài toán được thiết kế để chấp nhận các giải pháp O (n log n) nhưng không chấp nhận các giải pháp Θ (n 2 ) cho C / C ++ thường đưa ra các giải pháp O (n log n) thậm chí tối ưu trong các ngôn ngữ chậm hơn. Ngay cả Java cũng từng bị chấp nhận ở USACO; Tôi không chắc đây vẫn là trường hợp.)

  • Một yếu tố khác là các thư viện: C ++ và Java có các thư viện tốt hơn cho các thuật toán và cấu trúc dữ liệu thường hữu ích (ví dụ: cây đỏ-đen, next_permutation của C ++), trong khi các thư viện của Python (đủ tốt cho thế giới thực) ở đây ít hữu ích hơn và Prolog và Scheme ... Tôi không biết về thư viện của họ. Đây là một yếu tố tương đối nhỏ, vì những lập trình viên này có thể viết mã riêng của họ khi cần thiết. :-)

  • Các ngôn ngữ đa mô hình có mục đích chung hữu ích hơn để hoàn thành công việc trong thời gian hạn chế của cuộc thi, hơn là các ngôn ngữ ép buộc bạn phải đưa ra triết lý hoặc cách làm. Đây là lý do tại sao Prolog sẽ luôn không được ưa chuộng. (Triết lý chung: một số ngôn ngữ là những ngôn ngữ "tạo điều kiện" cho phép bạn làm bất cứ điều gì kể cả tự bắn vào chân mình, một số là "chỉ đạo" buộc bạn phải làm mọi thứ đúng cách.) Đây cũng là lý do tại sao C ++ phổ biến hơn gấp ba lần Java trong những người tham gia cuộc thi nói chung và phổ biến hơn nhiều trong số các thí sinh hàng đầu. Vì mã không cần phải được đọc bởi bất kỳ ai khác, nó rất tốt và thậm chí hữu ích khi có các macro vòng lặp nhưFOR(i,n)(ít mã để nhập hơn và quan trọng hơn là ít có khả năng mắc lỗi hơn khi vội vàng). Không có gì chống lại Java, có một số lập trình viên hàng đầu cũng sử dụng Java. :-)

  • Cuối cùng, mặc dù nhiều lập trình viên hàng đầu này có thể sử dụng C ++ / Java / Pascal là "ngôn ngữ đầu tiên" của họ, nhưng chúng không tốt ngôn ngữ của họ, vì vậy bạn không cần phải thất vọng về điều đó. Nhiều người trong số những lập trình viên này đã giành chiến thắng trong các cuộc thi như cuộc thi ICFP ngay cả khi cố tình sử dụng các ngôn ngữ điên rồ như shell script, m4 (được sử dụng trong autoconf) và assembly (nhóm có tên "You Can't Spell Awesome Without ASM").


2
Tôi đồng ý; như tôi đã nói, sự tồn tại của các thư viện là một vấn đề tương đối rất nhỏ. Tôi có thể xóa nó nếu bạn nghĩ rằng tôi đã nói quá.
ShreevatsaR

2
Điều đó về Java trong gạch đầu dòng thứ hai đến cuối cùng không hoàn toàn đúng. Nhiều thí sinh hàng đầu của GCJ sử dụng Java.
NullUserException

1
[Người tham gia khác trong trận chung kết ("linguo") đã sử dụng Python và thông qua cuộc thi đã sử dụng các ngôn ngữ bao gồm LOLCODE, Piet, FALSE, Khoảng trắng và FRACTRAN!]
ShreevatsaR

4
Tôi chỉ muốn thêm một chút vào phần về tốc độ. "Tốc độ" trong các cuộc thi như GCJ là độ phức tạp thời gian chạy của mã (tức là big-O). Trong GCJ, thuật toán chính xác thường được chấp nhận ngay cả trong một ngôn ngữ chậm (do đó có rất nhiều đệ trình Python được chấp nhận) trong khi một thuật toán chậm sẽ mất vĩnh viễn ngay cả trong asm. Có những trường hợp ngoại lệ, nhưng nhìn chung nếu bạn sử dụng đúng thuật toán / kỹ thuật, bạn vẫn an toàn ngay cả với ngôn ngữ chậm hơn.
MAK

1
@EvgeniSergeev Những gì bạn nói đều đúng với hầu hết các cuộc thi lập trình, như IOI / TopCoder, nhưng cụ thể là trong GCJ, giới hạn thời gian thường là 8 phút cho đầu vào lớn và các vấn đề thường được thiết kế để các giải pháp Python cũng có thể vượt qua. Thậm chí 10 năm trước, quy tắc ngón tay cái là ~ 10 ^ 9 phép toán "đơn giản" mỗi giây, vì vậy, để phân biệt O (n ^ 2) với Ω (n ^ 3), chúng ta chỉ cần n ^ 2 <10 ^ 9 * 60 * 8 <n ^ 3 hoặc khoảng 8000 <n <692000. Bạn có thể lấy n = 20000 và n ^ 2 algo thậm chí bằng ngôn ngữ chậm hơn 400 lần (10 ^ 9/400 mỗi s) sẽ chỉ mất 160 giây, trong khi thậm chí nhanh n ^ 3 sẽ mất 8000 giây.
ShreevatsaR

14

Tôi thích ý tưởng của Jerry Coffin về việc vẽ biểu đồ cho các thí sinh của cuộc thi Google AI, vì vậy tôi lấy tất cả kết quả và vẽ biểu đồ của chúng (giá trị trung bình được tính toán, độ lệch chuẩn và sau đó vẽ đồ thị các đường cong phân phối chuẩn trong Excel).

Với Lua và JS, có được điều này:

Không có (có ít thí sinh, vì vậy có thể kết quả bị lệch):

Có vẻ như những người tham gia Java đã làm kém hơn rõ rệt so với những người còn lại, trong khi Go, Common Lisp và C có kết quả tốt hơn.


Tuy nhiên, câu hỏi được hỏi về Cuộc thi viết mã của Google chứ không phải cuộc thi về AI của Google (câu trả lời của bạn là nơi đầu tiên tôi nghe về nó), vì vậy, việc vẽ các biểu đồ này cho Cuộc thi viết mã của Google có thể phù hợp hơn. Trên thực tế, câu hỏi đã đề cập đến các số liệu thống kê như vậy (2010) ; xem thêm các năm 2011 , 2012 , 20132014 (đang thực hiện tại thời điểm này) .
ShreevatsaR

12

Tại sao tất cả chúng ta đều nói tiếng Anh mà không phải tiếng Esperanto ? Vâng, nó chỉ xảy ra như vậy. Mặc dù tiếng Anh không nhất quán và cồng kềnh và Esperanto được cố ý thiết kế như một 'công cụ tốt hơn'.

Vì vậy, một lý do là một truyền thống. Trong hầu hết các trường học, lập trình vẫn được dạy bằng C / C ++, Java, Pascal hoặc thậm chí là Basic. Và tham gia các cuộc thi đó chủ yếu là học sinh, những người chọn ngôn ngữ mà họ biết rõ hơn.
Ngoài ra, bạn có thể nhận thấy rằng hầu hết các sách thuật toán có psedudocode theo kiểu Pascal hoặc Ada, và rất hiếm khi - Lisp. Tôi không biết tại sao, có lẽ cũng là một truyền thống. Hoặc có lẽ nó không tốt cho các thuật toán.

Một lý do khác là tốc độ. Mặc dù nó không phải là vấn đề đối với Google Code Jam, trong hầu hết các cuộc thi, khoảng cách tốc độ 2 lần là sự khác biệt giữa các phán quyết 'Được chấp nhận' và 'Giới hạn thời gian'.
Nói cách khác, nếu thuật toán tối ưu trong C ++ chạy nhanh hơn 10 lần so với trong Ruby, điều đó có thể có nghĩa là thuật toán tối ưu phụ trong C ++ sẽ vẫn nhanh hơn thuật toán tốt trong Ruby. Và các tác giả cuộc thi thường không muốn cho phép gửi O (n ^ 2), nếu O (n * logn) có thể đạt được.


7
Chỉ là một nhận xét về sự tương tự của bạn: Esperanto thất bại thảm hại trong các mục tiêu của nó. Âm thanh của nó khá giống với phương ngữ Ba Lan của Zamenhof, và ngữ pháp của nó không tự nhiên và phức tạp. Nó không phải là một ngôn ngữ phổ thông tốt; Klingon, theo nhiều cách, làm tốt hơn việc giống như một ngôn ngữ tự nhiên của Con người. Người ta có thể, tôi cho rằng, lập luận rằng có những điểm tương đồng trong này để C ++ và Java, nhưng điều đó sẽ là không công bằng :) (Xem thêm xibalba.demon.co.uk/jbr/ranto .)
Antal Spector-Zabusky

1
@Antal Chà, phép loại suy có thể thiếu sót, nhưng bạn hiểu ý tôi. Giữa bạn và tôi, tôi không nói được tiếng Esperanto hoặc :)
Nikita Rybak

ngôn ngữ (tự nhiên) là một huy hiệu của thành viên bộ lạc , và ngôn ngữ lập trình bị ảnh hưởng bởi nhiều của cùng một áp lực
hình thang

12

Đầu tiên, tôi muốn đặt câu hỏi về tiền đề của bạn [chỉnh sửa: hoặc những gì tôi lấy làm tiền đề - rằng các thí sinh sử dụng C ++ và Java đều tốt như nhau]. Ví dụ, đây là những gì ngôn ngữ được sử dụng cho các mục đi kèm trong 100 đầu tiên nơi và cuối cùng 100 địa điểm tại cuộc thi AI gần đây của Google:

văn bản thay thế

Những người dự thi sử dụng C ++ và Java dường như không ở đâu gần thành công như nhau trong cuộc thi đó. Những người dự thi sử dụng Python dường như cũng không có kết quả tốt lắm, mặc dù có ít hơn đáng kể trong số họ, làm suy yếu bất kỳ kết luận nào về vấn đề đó.

Thứ hai, tất nhiên, rất nhiều lời giải thích (như những người khác đã chỉ ra) chắc chắn chỉ là số người quen thuộc với từng ngôn ngữ. Có lẽ hiện tại có nhiều người đang tham gia một khóa học về Java hơn tổng số người đã từng viết bất kỳ Lisp, Scheme hoặc Prolog nào.

Chỉnh sửa: Tôi nghĩ khả năng thứ ba chỉ đơn giản là tính linh hoạt. Để chọn một ví dụ cực đoan, Prolog là rất tốt phù hợp với một vài vấn đề, nhưng không kém phần kém phù hợp với nhiều người khác. Rất ít người có thể (hoặc ít nhất là làm được) học nhiều hơn một hoặc hai ngôn ngữ đủ tốt để sử dụng chúng trong một cuộc thi, vì vậy hầu hết những người quan tâm đến những thứ đó có khả năng chọn những ngôn ngữ có thể hoạt động tốt cho hầu hết mọi thứ, hơn là cố gắng học một ngôn ngữ chuyên biệt cho mọi vấn đề có thể được chọn.


1
Chà, có vẻ như hầu hết những người tham gia hàng đầu đều sử dụng C ++ / C # và ít người trong số họ sử dụng Python / Haskell / Lisp / Scheme / Ruby / Prolog, điều này củng cố tiền đề của câu hỏi, phải không? Câu hỏi không phải là so sánh C ++ và Java với nhau (mặc dù điều này rất thú vị, cảm ơn), mà là những thứ như: ”Tại sao các ngôn ngữ" đẹp "lại kém thành công hơn ở đầu? Tại sao những thí sinh giỏi (có lẽ biết nhiều thứ tiếng) lại không chọn một trong hai thứ này? ” Nhưng tôi đồng ý rằng sự quen thuộc là một trong những lý do chính.
ShreevatsaR

Ấn tượng của tôi (có lẽ nhầm lẫn) là câu hỏi giả định các thí sinh sử dụng C ++ và Java đều thành công như nhau. Điều đó có thể đúng trong một số cuộc thi, nhưng chắc chắn không có trong cuộc thi này. Mặc dù đúng là có ít người trong số họ hơn, nhưng những thí sinh sử dụng Go, Haskell, Lua và CL dường như thành công hơn những người sử dụng Java (tuy nhiên, phải thừa nhận rằng về tỷ lệ thành công, C ++ chắc chắn có vẻ vượt trội, ít nhất là trong trường hợp cụ thể này).
Jerry Coffin

5
Pardon nit-Pickin' nhưng điều này thực sự phải là một biểu đồ thanh chứ không phải là một đồ thị dòng ... của tôi
tzaman

Ôi trời. Tôi đã đấu tranh để tạo ra một biểu đồ có ý nghĩa trong một giờ và tôi không tiến bộ. Excel & Google Spreadsheets khiến tôi cảm thấy mình thật ngu ngốc.
Tatiana Racheva

Lisp về mặt kỹ thuật không thể được sử dụng như một bộ tiền xử lý macro C / C ++ mặc dù ...? Bạn có thể làm cho nó trông giống như bạn đã gửi một chương trình C ++ nhưng thực tế là bạn đã viết mã trong Lisp!
aoeu256

12

Trong gần như tất cả các vòng Google Code Jam, nhiều người dự thi có hiệu suất cao hơn viết mã bằng C ++.

Dưới đây là số liệu thống kê về ngôn ngữ từ Google Code Jam 2012 Vòng 1A, 1B và 1C (được liệt kê từ trên xuống dưới). Số lượng thí sinh của mỗi vòng lần lượt là 3.686, 3.281, 3.189.

Số liệu thống kê về ngôn ngữ từ Google Code Jam 2012 Vòng 1A Số liệu thống kê về ngôn ngữ từ Google Code Jam 2012 Vòng 1B Số liệu thống kê về ngôn ngữ từ Google Code Jam 2012 Round 1C


8

câu hỏi thú vị, có lẽ nên là wiki cộng đồng.

Xem số lượng thí sinh lọt vào vòng chung kết theo các quốc gia: http://www.go-hero.net/jam/10/regions . thông báo số người từ Đông Âu và Nga. những nơi đó có cộng đồng C ++ rất mạnh, cũng như Java, vì một số lý do.

xem các ngôn ngữ số trong vòng loại: http://www.go-hero.net/jam/10/languages/0 và vòng chung kết: http://www.go-hero.net/jam/10/languages/6 . C ++ bắt đầu ít hơn một nửa và có 75 phần trăm trong trận chung kết. hoặc các lập trình viên giỏi thích C ++ hoặc C ++ thích các lập trình viên. Có thể là khi bạn thành thạo C ++, những thứ khác trở nên tầm thường.

Tuy nhiên, bạn có thể tự do đưa ra kết luận của riêng mình.


5

Trước hết, như bạn đã chỉ ra C++Javalà ngôn ngữ chính thống. Điều này tự động có nghĩa là những người bắt đầu tham gia các cuộc thi lập trình sẽ được giới thiệu với họ trước - nhân tiện là những người học Lispnhư ngôn ngữ thứ nhất :) Tôi cũng thường xuyên tham gia các cuộc thi như vậy - tôi sử dụng C++để cạnh tranh, mặc dù ngôn ngữ yêu thích của tôi là Java. Nó chỉ là tôi muốn thực hành một ngôn ngữ khác ngoài Java- cũngC++ít dài dòng hơn một chút và chạy nhanh hơn, điều quan trọng đối với các cuộc thi lập trình. Bây giờ theo quan điểm của tôi - mọi người trở thành chuyên gia đầu tiên trong các ngôn ngữ chính thống. Để tham gia các cuộc thi lập trình, bạn phải nắm bắt khá tốt ngôn ngữ mà bạn đang sử dụng. Bạn không có thời gian để tìm kiếm trên internet những thứ ngu ngốc - chẳng hạn như quên một cấu trúc. Nó chỉ là tốc độ là một yếu tố quan trọng ở đó. Để sử dụngLisptrong một cuộc thi, bạn phải thích nó. Tôi không nghĩ có nhiều người như vậy ngoài kia. Đúng nếu tôi đã sai lầm. Và thành thật mà nói, những ưu điểm mà bạn đã đề cập như đơn giản hóa việc bẻ khóa ngược: Trong bất kỳ ngôn ngữ nào, việc bẻ khóa ngược rất dễ dàng - khai báo một phương thức và chỉ cần gọi lại nó cho mọi kết quả có thể xảy ra. Nó không thể đơn giản hơn. Cho đến bây giờ tôi vẫn chưa cảm thấy rằng ngôn ngữ mà tôi đang sử dụng đang cố gắng vượt qua các cuộc thi lập trình.


Số nhiều của giai thoại có thể không phải là dữ liệu, nhưng tôi đã học Scheme như ngôn ngữ đầu tiên của mình và khóa học CS giới thiệu của tôi ở Haskell. Tôi đồng ý rằng điều này có vẻ không bình thường, mặc dù: C / C ++ / Java / Python dường như là những cái phổ biến.
Wang

Điểm tốt; Tôi nghĩ rằng điều này là trọng tâm của vấn đề. Đối với các lập trình viên có đủ thực hành để làm những điều thường xuyên xảy ra, thực sự không có lợi ích lớn bằng các ngôn ngữ khác. (Và các tính năng giống như, nói, khả năng xử lý văn bản Perl của hiếm khi sử dụng bất kỳ trong các cuộc thi.)
ShreevatsaR

3

OMG ... Mọi người đang xem qua các số liệu thống kê và số liệu !!

Đừng quên những điều cơ bản .. Đây là hai ngôn ngữ duy nhất (chủ yếu) được dạy cho những người ở đại học / trường học ...!

Điều đó có thể trả lời cho sự vội vã nặng nề!


3

Một lý do quan trọng có thể là mọi cuộc thi không hỗ trợ các ngôn ngữ như python hoặc prolog. Đặc biệt ACM ICPC World Finals hỗ trợ C / C ++ và Java . Và TopCoder cũng chỉ hỗ trợ C ++, Java, C #, VB và bây giờ là Python . Đương nhiên đối với các thí sinh là họ sẽ chọn một ngôn ngữ có sẵn trong mọi cuộc thi. Một lý do khác có thể là tốc độ thực thi. Và có, một lý do khác là đây là những ngôn ngữ mà hầu hết mọi người học đầu tiên.


2

Các thư viện lớn là một điểm bán hàng cho Java trong ACM ICPC. Thật tiện lợi khi có thể nhận ra bạn muốn một cấu trúc dữ liệu hoặc thuật toán ngẫu nhiên nào đó và chỉ cần kéo nó ra khỏi các thư viện tiêu chuẩn.


2

Hãy nhớ rằng C ++ không chỉ chiếm đa số trong tất cả các thí sinh, mà khi các vòng thi diễn ra, tỷ lệ phần trăm của nó vẫn tiếp tục được cải thiện.

Tôi nói đúng là hầu hết những người tham gia đều là sinh viên (Tuy nhiên, vì đây là một giải đấu mở với cơ hội phỏng vấn việc làm với google, nên bạn phải cân nhắc rằng nhiều người tham gia đã tốt nghiệp). Nhưng các vòng mới nhất chỉ dành cho những người có nhiều kinh nghiệm. Họ không chỉ là những sinh viên mới học viết mã bằng C ++ / Java.

Tất nhiên, lập luận của sinh viên cũng hoạt động chống lại các ngôn ngữ như LISP và OcaML hoặc ProLog. Đó là ngôn ngữ, được sử dụng rất nhiều trong các lĩnh vực AI nhưng trong thế giới phổ thông, sinh viên có khả năng học và sử dụng chúng nhiều nhất.

Các cuộc thi lớn khác ngoài việc google hỗ trợ một số ngôn ngữ, nhưng điều đó vẫn không giải thích được tại sao Pascal hoặc .net không gần bằng Java (Vì chúng có xu hướng được hỗ trợ như nhau trong các sự kiện cuộc thi lớn).

Rất nhiều lập trình viên giỏi nhất trong các cuộc thi này biết nhiều ngôn ngữ. Nhưng họ vẫn thích sử dụng C ++ trong các vòng thi, điều đó phải vì một lý do lớn hơn là "đã học C ++" trước.

Tôi sẽ lập luận chống lại tuyên bố rằng các ngôn ngữ khác ngoài C ++ hoặc Java là những công cụ tốt hơn cho công việc. Nếu dữ liệu trực tiếp nói rằng những người lọt vào vòng chung kết có nhiều khả năng sử dụng C ++ và Java hơn thì đó là sự mâu thuẫn trực tiếp với tuyên bố đó.

Dữ liệu cạnh tranh AI của Google không thực sự mâu thuẫn với bất kỳ tiền đề nào liên quan đến việc kẹt mã. Nó thực sự cho thấy rằng các lập trình viên hàng đầu có thể sử dụng các ngôn ngữ như Common Lisp khi nó thực sự là công cụ tốt hơn cho công việc. Nếu chúng ta muốn sử dụng dữ liệu này để giả định rằng CLISP là một công cụ tuyệt vời cho các cuộc thi AI, thì chúng ta cũng nên giả định rằng C ++ là một công cụ tuyệt vời cho các cuộc thi thuật toán như GCJ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.