# Welcome to Programming

Algorithm: (Just) A sequence of steps to get stuff done?

Technically, yes. Many of us have in fact been using algorithms for most part of our lives even without realizing that we are. Take for instance, when you want to look up a particular word in the dictionary. How long would it take you if the words were all arranged randomly with absolutely no relation? It is an algorithm in itself when you search for a given word, matching the leftmost letter of the word and keep moving right. That instance when you choose a particular path over another when looking for the fastest way to reach a friend’s house, you are technically solving a classic example of the Shortest Path Problem, a problem which could trouble the best programmers for hours!

However with the increasing dependence on computers and electronic gadgetry, you no longer need algorithms to get stuff done, but also need algorithms to guide machines do stuff for you. There is a mind-bogglingly huge amount of data present on the web and picking out a particular one is a task in itself. From the smallest chipsets to the multi-billion dollar spaceships circling the Earth to a random game of chess played on a summer afternoon, there are both complex and simple algorithms involved in everything.

The study of efficiency in algorithm design is of huge importance. You don’t just need to consider how to get something done, you need to find a way to get something done quickly. Imagine if your GPS were to look for all ways to get from A to B, total their distances and then return the best route. Or if in a game of chess with a computer, the program were to try all possibilities and all possibilities arising out of those possibilities and all possibilities arising out of those and so on before it were to make an optimal move. You need to design algorithms that not only solve a given problem, but do so in a reasonable amount of time.

And the best part about algorithmic and logical problems is that once you start getting the hang of it, it becomes huge fun! You no longer need to take time out of your daily routine to practice (read: play) on online judges; it finds time for itself! So much so that it soon become a passion (and in some occasional cases an ‘addiction’) which you pursue not only because you want to end up with a high paying job at Facebook or Google, but because you enjoy doing it!

How to start Programming?

Am I good enough?

Yes you are, if you think you are not, think again! We say you can be. All you need is good logical and reasoning skills. If you have been a mathematics enthusiast in your school time, you already have the instinct in you.

Let’s introduce you to the amazing world of programming and algorithms.

Getting Started:

1.Pick any programming language(C, C++, Java, Python) whichever you feel comfortable with. Or if you don’t know any, you can easily learn C or C++ in hardly two weeks’ time. Only basics concepts are to be grasped.

Schaum Programming with C++: A very nice book to give you a quick introduction for C++

C++ How to Program, Deitel, 8th Edition: For those who want more than just an introduction.

Java How to Program, Deitel, 7th Edition: For those who want to learn Java

2.Now that you have the tool, let’s use it to explore the algorithmic world

Here are some resources to make you familiar with the commonly used algorithms.

Coursera

Stanford Open Class Room

MIT Open Courseware

CLRS : The Bible for Algorithms

3.So here comes the most important phase of your coding journey. Practice. Practice more. Solve questions and keep exploring. And remember this:Frustration is normal. Don’t give up during this phase as your failure teaches you more than your success. Proceed gradually. The experience you gain here is worth your effort. Check these out

SPOJ

Codechef

Project Euler

4.If you wish to evaluate your progress, there are plenty of contests to keep you going. Apart from that, group contests prove very beneficial in improving your skills. You get to know your teammate’s approach (which may be better) too.

Participating in programming contests inculcates in you an urge to learn more and keeps you motivated. You can find some ongoing contests here:

Codechef

Codeforces

Also check out this answer on quora for a more elaborate list. on quora for a more elaborate list.

Common Myths regarding Programming and Algorithms:

1.Programming is only for CS students.

Wrong! Here are the reasons:

You love maths, like solving puzzles and have an aptitude to do this, so you do it.Most of the CS companies like Microsoft, Facebook, Yahoo etc. are open for other branches too. If you are good enough in programming and algos then they will take you.

Even if you want to do higher studies, just try to explore what are the current research areas in your branch, you would find that most of them require programming - fields like Image processing, embedded systems, robotics, controls etc. Whichever field of engineering you are in , programming will help you somewhere.

2.You need to be an expert in a programming language to start with algorithms.

No, this opinion is completely wrong. You just need very basic knowledge of any language. They are just a tool, solving problems will automatically give you enough exposure to the language. An inquisitive mind and eagerness to learn is all that counts.

Why PAG?

With the huge influx of data in the ‘shared’ world; big-data, data mining, data extraction, data analysis, optimizations- these are topics that the coming generation of computer scientists needs to address.

Many of those computer scientists are now in college. Hopefully some of these world changers might be in India, and a few in IITR. PAG hopes to inculcate a feel for algorithms in these young engineers from the very beginning, get them acquainted with this field and help them realize why this fields bears importance in the real world. But then, why is solving problems on an online judge which thousands have already solved important?

Because a journey of a thousand miles begins from a single step. You cannot have a school boy who has just entered college and ask him to solve real life problems which legends have scratched their heads at. We need to start at the base and work our way up. Not only does practicing these problems helps develop one’s interest in algorithms, but at some level concepts like Dynamic Programming, Depth First Search and Graph Theory are what are extrapolated and applied in complex algorithms that boost the cores at Google or Facebook. To put it poetically, unless you know your ABCs you have no hope of finishing a novel.

And that is what PAG hopes to do. It hopes to help the students at R understand these concepts and why it is important for them to do so by bringing them together in a positive competitive environment.Coming together every week to share knowledge, we get to learn so much more than anyone of us individually ever could. Holding regular contests at R and annually on an international scale, keeps everyone motivated to keep doing better. It helps us to learn and strive harder to learn more.

But then, why should you join PAG?

You may be a Grade 2 coder at Topcoder or someone who had no clue about what programming is up till now. It doesn’t matter. As long as you are eager to learn and love working your way around logical and intellectually challenging problems, PAG is looking for you! Every year PAG recruits some of the finest and smartest individuals who come to R. It brings them together in a shared group. There are regular discussions on varied topics of interest, contests are organized and even participated in, and of course chapos are given and not to forget the trips we have!!!

Last year a team from PAG qualified for the ACM ICPC World Finals (which happens to be the BIGGEST contest of its kind with participation from over 120 countries) and stood first among all the Indian teams there (and 60th overall). We also have several teams who compete in the Regionals of the same contest every year.

And that is the best part about joining PAG! You get to meet so many awesome individuals who you otherwise might not. Bringing like-minded people together who share a common passion helps all of us to learn from each other and improve ourselves.

Recruitment

PAG will be recruiting soon. We are not expecting you to know programming as of now, so if you don’t, it isn’t really an issue. If you have a basic aptitude and the willingness to learn, you are good to go! To stay updated about out recruitment process and other activities, join our Facebook group and like our facebook page