--- id: lang title: Languages author: Nathan Wang, Benjamin Qi description: What languages you can use for programming contests and what you're expected to know before continuing. --- ## Choosing a Language The most popular languages that USACO supports are [C++11](https://en.wikipedia.org/wiki/C%2B%2B), [Java](https://en.wikipedia.org/wiki/Java_(programming_language)), and [Python 3](https://en.wikipedia.org/wiki/Python_(programming_language)). Pascal used to be popular in the past, but its use is rare now, and many programming contests have removed or are planning to remove support for it in the near future (in short: don't use it now). In general, we recommend the following: - If you already know one of these languages, just use it. - If you know multiple languages, we recommend you pick C++ over Java, and Java over Python. - For Bronze, any language will do. - For Silver, Gold, and Platinum, Python is not recommended, because it is a slow language. See "Why C++?" for more information about this. Keep in mind that it's easy to switch languages down the road. Don't get caught up on which language to choose. Just pick the one you feel most comfortable with! ### Language References All of these are provided at the IOI aside from the additional C++ reference. - [C++](https://en.cppreference.com/w/) - [Additional C++ Reference](http://www.cplusplus.com/) - [Java](https://docs.oracle.com/javase/8/docs/api/overview-summary.html) - [Python3](https://docs.python.org/3/reference/) ## Expected Knowledge The remainder of this guide assumes that you know the basics of how to code in one of the languages listed above, including the following topics: - Variables - Data types - Reading Input - Writing Output - Loops - If / Else - Logical operators - Functions - Basic Recursion (a function calling itself) - Arrays - Multidimensional Arrays In particular, contestants using Java should be familiar with roughly the first half of AP Computer Science A. - If you do not meet these prerequisites, see the links below to get started. - Familiarity with [competition math](https://github.com/bqi343/USACO/blob/master/Resources/Competition%20Math.md) (ex. AIME qualification) is helpful but not required. ## Resources for Learning How to Code Let us know what works (or doesn't) for you. ### General courses for C++, Java, Python basic problems, mostly loops ### C++ Use one of the resources above or below (or find your own) to learn C++. If you use Sololearn, you don't have to complete the full course; we recommend you finish everything up to (but not including) "More on Classes." lots of examples, Kattis exercises You do not need to learn pointers (for now). Knowledge of structs and classes is useful but not required. ## Additional Resources can practice basics with "Arcade," "Interview Practice" lots of links! not up to date generally good, although CSES problemset (see "Resources") is definitely a better place to start than USACO Training or Codechef