When someone wants to start in programming, discover that there are many resources and things you should learn before you say "I'm a good programmer." So, this wiki is to help you know how to start in this field.
1. Start with the logic
Yes, you should study logic and algorithms before learning how to program. This is important because those will teach you how to think in computer science. Algorithms, in an easy way, will show you what you can do with any programming language.
There are many books and websites for learning algorithms, but I strongly recommend the books "Algorithms Unlocked" (prerequisite for the next book) and "Introduction to Algorithm 3rd Edition," by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. This book is shared by MIT Press. It is easy to find this book and it's the best book I ever used.
2. Now you know algorithms? Well done, and let the fun begin!
First of all, there are some rules to follow:
- You don't need to know all the programming languages because it's impossible. Yes, there are a lot of programming languages and a lot of rules in those languages, so relax and study what you really want to know.
- To really learn how to program, you need to do one simple thing: do it everyday. You will never learn programming or even become good at it studying and programming just a few days or just when you want to. It's important to program everyday to learn well.
- Never stop studying. I think this is the most important rule you should follow. Technology changes everyday, every month, and every year. Stay in touch with the news.
Now we can start with programming finally!
There are some recommended languages you should start with because they are easy: C, C++, Java, Python. They are an easy introduction to this world of bits.
I start with Java, but you can choose anyone of them. The resources I recommend are as follows:
- Codecademy: In this website, they teach you many programming languages and .NET development. They have now the introduction to Java and Python. Have fun at codecademy.com!
- Udacity: Free courses (and some courses you have to pay for) in computer science and its theory, which include some programming languages, mobile development, artificial intelligence, startups, etc. You will get a certificate when you finish every course. Be happy at udacity.com!
- CS50 - Introduction to Computer Science by Harvard University on EdX: "An introduction to the intellectual enterprises of computer science and the art of programming." One of the most popular courses on Edx that covers many topics and good challenges. No prior experience is necessary. You can start the course and end anytime till February 2, 2016. You'll get a certificate by the end of your studies. Enjoy yourself here!
- MIT OpenCourseWare (aka. Paradise): You can learn anything there. A website covered by MIT that provides you with videos, exams, and happiness for all the undergraduate courses from the university. MIT also has Scratch (for beginners) and the MIT App Inventor (for mobile studies). Go ahead at MIT OpenCourseWare - ocw.mit.edu/index.htm Scratch - scratch.mit.edu MIT App Inventor - appinventor.mit.edu/!
3. Let's challenge yourself.
Competitions are good, and I know you agree. So let's test your programming skills with the following:
- HackerRank: Website to compete and solve some problems in CS and programming. You also can get money and a job in companies like Facebook, Google, Microsoft, Asana, etc. It's free and fun.
- TopCoder: Good resource for a competitor. I recommend for people with some competition experience. You will get money and jobs here, too.
- High school competition recognized worldwide: Participation is individual. The evaluation of the solutions is made after the end of the competition and the score is given to each part of the approved test. Similarly, national and preliminary informatics olympiads exist such as the British Informatics Olympiad in Britain and the OBI (Olympiad of Informatics for Brazilians students) in Brazil.
- High school competition organized by the website of TopCoder competitions.
- College: Generally students participate in higher education and the first year of graduate school.
- Higher education competition recognized worldwide: Participation is in teams of three students to share a single computer. The evaluation of the solutions is done during the competition, but the score is given only to those who pass all the tests. To participate, it is necessary to be among the first in Brazil in Programming Marathon.
- Higher education competition recognized in the country: To participate, it needs to be part of one of the teams of the institute or college. It is held in the molds of ACM-ICPC, but in two stages. In the first stage, the various teams compete locally at sites around the country. The top finishers of each site qualify for the national final, where all teams compete in the same place. Each institute or college can take up to two teams for the final.
- Higher education competition organized by the website of TopCoder competitions.
Most respected free competition in the world. Organized by the site of TopCoder competitions.
Free competition organized by Google. It is a worldwide competition that occurs almost every year. Besides the global version, since there were also regional versions in Europe, Latin America, China and India, it was held along the lines of TopCoder. But the official site says that in 2008 they will use a new platform.
Site American various programming competitions. Are always promoting Single Round Matches (SRM) in which participants can practice and move up in the standings. Companies seek people on the site and classified to provide jobs. Eventually the sponsors award the best placed with t-shirts and even money. Each year there are two major competitions (TCC and TCCO) divided into several phases, where the finalists travel for free to participate in a centralized end. In general, a competition stage or in an SRM TopCoder is made up of three individual and phase. In the first 1 hour and 15 minutes contestants attempt to solve the problems. The points at issue vary the level of difficulty and the time taken to resolve it. The evaluation of the solutions is not made on time. In the second stage, the contestants have 15 minutes to check opponents programs and bolarem test cases to take them down. In the third step the system performs a battery of automated tests to check programs. It's a much more dynamic and less tiring than traditional competition.
This is, strictly speaking, not really a programming competition. It is a competition problem solving, but it is almost always necessary for computer to help solve them. In this competition are given descriptions of problems and the input files and participants must send the answers. Quite different from the traditional and very entertaining. The top 10 receive certificates.
The main websites that provide online problems with automatic brokers and also tend to hold competitions periodically. In general there is no prize, but follow the lines of the ACM-ICPC, serving as an excellent workout for the Programming Marathon. The following are the most well-known sites that carry such competitions:
- Valladolid Online Judge Contest Hosting Service
- Ural State University Problem Set Archive
- Zhejiang University Online Judge Contests
- Saratov State University Online Contester
- ACM NEERC Online Contest Site
- USACO Contest Gateway (OBI style)
5. Final Considerations
You can do all of these in any field you want to persue. Programming is a skill for everyone in every field. You can do it. Be your own boss.