#Welcome to Competitive Programming!
This guide is intended as a starting point for new programmers.
We are excited to have you as a new member of the team, but for
you to have any fun, its probably best that you learn how to program.
Here is a list of languages you can learn, and our thoughts about each
one.

Each language paragraph has a list of pros and cons, a link to a useful tutorial, and a list of experts on the team. If an expert's name is bold, it means they are extremely proficient in the language. If their name is in italics, they are minimally proficient.

##Python

####Pros
* Probably one of the best scripting languages ever made
* Very easy to learn, most people can read simple python programs and work out what it is that they do
* Widely used, even the varsity team uses python for almost all of its competition solutions
* Powerful and high level (lots of functionality)
* Can be both object oriented and non-object oriented

####Cons
* Very slow during execution
* Can not use many low level API's and SDK's available in other languages
* Python2 and Python3 are not consistent with syntax

####Tutorials
* [Learn Python](http://www.learnpython.org/)

####Team Experts
* **Daniel Grimshaw**
* **Zach O'hara**
* Pranav Mathur

---------------------------------------------------------

##Java

####Pros
* Reasonably fast
* Fully object oriented
* Reasonably easy to get started in, gets a lot more complex at advanced levels
* Mix of low level capability (the code is close to the actual hardware) and high level functionality

####Cons
* Very few API's were originally written for Java
* Uses more RAM than almost all of these other languages
* Has a reputation as a programming "toy" rather than a language

####Tutorials
* [Learn Java Online](http://www.learnjavaonline.org/)

####Team Experts
* **Pranav Mathur**
* Zach O'hara
* Daniel Grimshaw
* Javier Anton

---------------------------------------------------------

##C/C++

####Pros
* Extremely fast
* Very low level
* Massive ammount of libraries

####Cons
* Extremely hard to learn
* Older language
* Vulnerable to overflow errors, which can kill your computer if used correctly

####Tutorials
* [Learn C](http://www.learn-c.org/)

####Team Experts
* **Daniel Grimshaw**
* Javier Anton

---------------------------------------------------------

##JavaScript

####Pros
* Works on websites
* Similar to python in simplicity

####Cons
* It's pretty weird
* Lots of bad tutorials on the internet

####Tutorials
* [Learn JS](http://www.learn-js.org/)

####Team Experts
* Javier Anton
* Sean Knight

---------------------------------------------------------

##Shell Scripting

####Pros
* Similar to python
* Capable of running all command line programs easily
* More less automated computer using

####Cons
* Not every computer uses the same language
* Older
* Windows version is awful
* We don't have a Linux computer right now to run these on

####Tutorials
* [Learn Shell](http://www.learnshell.org/)

####Team Experts
* *Daniel Grimshaw*
* *Pranav Mathur*

----------------------------------------------------------

##C# #

####Pros
* Just like Java, but without restrictions
* C-like syntax
* Compiles into executable for similar speed to C
* Microsoft will employ you with a near certainty if you know C# well

####Cons
* Only runs on Windows computers
* Bulky
* Non-transferable skill, unless you wish to work for Microsoft.

####Tutorials
* [Learn CS](http://www.learncs.org/)

####Team Experts
* Pranav Mathur

--------------------------------------------------------

##Objective C

####Pros
* Used for all Macintosh and iOS applications
* Object oriented

####Cons
* Not usable on Linux or Windows
* Monopolized by Apple
* Extremely odd syntax, similar to SmallTalk
* Requires a Macintosh to compile and run easily
* Default classes are very oddly named due to copyright laws

####Tutorials
* [Objective-C Tutorial](http://www.tutorialspoint.com/objective_c/)

####Team Experts
* No one

--------------------------------------------------------

##Haskell

####Pros
* Fully functional
* Mathematical syntax
* Compiles into executable for similar speed to C
* Can be compiled or interpreted
* Has an interpreter similar to Python, which can also load source files
* "If it compiles, it probably works"

####Cons
* VERY difficult to learn if coming from an imperative language
* Difficult to install on Windows

####Tutorials
* [Learn You A Haskell](http://learnyouahaskell.com/)

####Team Experts
* *Pranav Mathur*

--------------------------------------------------------

##Rust

####Pros
* Just like C, but with less complicated syntax
* C-like syntax for simple code
* Compiles into executable for similar speed to C
* Very fast due to lack of garbage collector

####Cons
* Not widely used

####Tutorials
* [Rust By Example](http://rustbyexample.com/)

####Team Experts
* *Pranav Mathur*

--------------------------------------------------------

#Git and Github
--------------------------------------------------------
At Competitive Coding, all of our code is stored in what is called
a git repository on a Github server. What exactly is this? A git
repository is simply a folder that is controlled by a software called
git. This allows us to save the status of a folder of code and prevents
accidental deletion of very large files of code. Github is what you are
probably viewing this file on right now. It is a cloud storage solution
to host git repositories. This way, if your computer dies and you lose
all of your code, the server still has a spare copy. It is also an
excellent way to distribute your code and receive help on giant projects
from the public. At Competitive Coding, you will only need to know the very
basics of git at the beginner level. 

All members must learn how to use git and Github.

####Tutorial
* [Learn Git in 15 Minutes](https://try.github.io/levels/1/challenges/1)

####Team Experts
* All of us

------------------------------------------------------

##Next Steps
-------------------------------------------------------

Now that you know a programming language and how to use git and github,
you are ready to start doing practice problems! Clone this repository and
MVHSCompetitiveCoding onto your computer or flash drive. You can start with
either More Practice or Competition Training. Both are about equally difficult,
but Competition Practice problems look more like they will in actual competitions,
whereas More Practice is simply programming challenges designed to make
you think. Follow the instructions in MVHSCompetitiveCoding to add solutions to Github.

Have fun!
