Vishnu KS

A Computer Fresher's Guide to Programming


Data Structures and Algorithms

A great programmer or developer should be strong in Data Structures and Algorithms. Once you are comfortable with your favorite language of choice (I would recommend C++) start spending time on basic Data structures and Algorithms.

Here is a piece of advice I got from my super senior (Divanshu Garg, SE at Google Australia) when I was in first year.

Like I used to do a lot of SPOJ in the first year, and kept on reading Cormen. Honestly, back then, I usually couldn’t understand everything because the book is advanced but I used to learn something every time I read it. If u cant understand a simple algo, read it over the INTERNET to understand more. then practice some related questions on SPOJ.

Practicing Programming

It is very important to write the code when you learn a new algorithm or data structure. One way of accomplishing this is via online judges. If you love solving puzzles you would love it. Here are my favorite online judges for beginners.

![Codeforces]({{ site.baseurl }}/static/codeforces.jpg)

Among this the USACO training gateway contains both Tutorials and Problems organized in a systematic way. This site would help you to learn the basic fundamentals quickly if you don’t have much experience with algorithms.

LightOJ contains problems organized category wise and is a good resource for preparing for ACM ICPC.

Becoming a hacker

Move to Linux

Just move to Linux. Linux would be hard for a few days but you would soon find it awesome. The shell (command line in linux) is so powerful that you can accomplish almost anything with it. You can automate the system completely once you are familiar with the shell. Moreover you can tweak the OS into whatever appearance you like. All most all the web servers in Internet are powered by Linux servers. Even Microsoft use a custom tweaked version of Linux for Azure.

You can still keep Windows as the Gaming environment of Linux sucks. I recommend you to dual boot Linux with Windows. I have attached a link which worked for my while I was dual booting Ubuntu with Windows8

Here are my favorite Linux Distros in decreasing order.

Read Hacker News

Anything that good hackers would find interesting. That includes more than hacking and startups. If you had to reduce it to a sentence, the answer might be: anything that gratifies one’s intellectual curiosity. Almost everyone in the Tech industry reads Hacker news. If you make something cool you should post it in Hacker News. Who knows what happens after that?

One Million Visitors in 10 Days

Do Side Projects

Sam Altman has explained why you should do side projects in his famous blog post Projects and Companies. Here is an extract.

The best companies start out with ideas that don’t sound very good. They start out as projects, and in fact sometimes they sound so inconsequential the founders wouldn’t let themselves work on them if they had to defend them as a company. Google and Yahoo started as grad students’ projects. Facebook was a project Zuckerberg built while he was a sophomore in college. Twitter was a side project that started with a single engineer inside a company doing something totally different. Airbnb was a side project to make some money to afford rent. They all became companies later.

Web Development

You can’t make projects out of thin air. You need to have some basic development skills to get started. I would suggest to start with web development. Make sure that you have a decent text editor before starting. Here are my favorites for web development in Decreasing order (VIM is my favorite text editor for C/C++ but I don’t use it for web development).

![Subl]({{ site.baseurl }}/static/subl.jpg)

I would suggest you to follow this order.

Back End

Front End

###Javascript### Javascript is the programming language for the browser and helps to add cool things to the front end. Have you noticed the posts filling automatically when you reach the bottom of the browser? This is done with the help of Javascript. So is that menu that appears when you click on the settings page. There are many awesome resources to learn Javascript.

Once you have learned all these you should make something awesome.

Scaling and Beyond

It is very important to design web applications that are scalable. If you are interested in this topic I would suggest you to take the Web Development course on Udacity by the Co-Founder/CEO of Reddit Steve Huffman.

Put all the code on Github

Whatever code you write make sure that you put it on Github the same day. There are many reasons behind this practise.

![Sindre Sorhus Steak]({{ site.baseurl }}/static/streak.png)

Becoming a Geek

Here are some more things you should do.

A Cool account handle

Its always good to have that one username which you could almost use everywhere, for all your geek-stuff accounts. So when you start the journey, take some time to create a cool and unique username which you think no one is likely to use any soon. eg humblefool, dragonslayer, hackerkid(that’s me)

Your own personal Blog and Website

Need inspiration?

Getting Online

Once you are done with your website and blog it’s time to put them online. For putting a website online you need a server. There are many free web hosting sites out there but believe me they sucks. They come and disappear all the time. Luckily as you are student you can use the Github for students pack. It is free for all the University students and comes with a tons of useful things like

Other Alternatives

Movies and Books

There are some Movies and Books that would change the way you think. Here are some of my favorites

Movies

Books

Summing Up

This blog post was aimed at getting you started with programming and development. I have ignored many things like Internships, Research papers, etc. If you want to add more to this blog post why not

More Useful Blog Posts / Resources