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.
- The most recommended book for studying Data structures and Algorithms is Introduction to Algorithms popularly known as CLRS.
- I would also recommend you the Design and Analysis of Algorithms on Coursera by Stanford University.
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.
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.
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.
- Elementary OS - A Beautiful Linux OS built on top of Ubuntu. Perfect for beginners.
- Ubuntu - The most popular Linux Distro in the World
- Mint - Built over Ubuntu and looks similar like Windows.
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?
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.
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).
- Visual Studio Code
- Sublime Text
I would suggest you to follow this order.
- Learn HTML and basic CSS from W3C Schools
- Learn Flask - Flask is a micro web framework written it Python. It is really easy to learn if you know Python. If you don’t know Python I would recccomend you to learn it as fast as you can. Python is very easy to learn if you have some kind of programming experience before. Once you built something using Flask it would become fairly easy for you to get started with more complex web frameworks like Django. Just go through the Quick start guide in Flask website and try to build something using it.
- Learn SQL - SQL is a special-purpose programming language designed for managing data held in a relational database management system. In the case of Facebook all the posts and comments would be stored in a database and retrieved through SQL. Once stored you can get the post from SQL by asking queries like
GET all the posts of user Vishnu which has more than 150 likes. The query for this would be
SELECT * from posts WHERE user = 'Vishnu' and likes > 150
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.
- You keep on writing the code each and every day to keep your streak
- You get an awesome Github profile
- You become an open source contributor.
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
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
- $100 hosting credit from Digital Ocean - You can start a server ($5 per month Ubuntu server would do the job) and put your website online. It asks for a credit card while signing up. You can skip this step my mailing the customer service with your college id.
- One year .me domain name for free
- Private Github repos
- Tons of other features
- You can also host your website on Github Pages if it only have static content(ie no backend like Flask)
- Use Openshift or Heroku as long as your website don’t attract too much traffic.
Movies and Books
There are some Movies and Books that would change the way you think. Here are some of my favorites
- Social Network
- October Sky
- Pirates of Silicon Valley
- Pursuit of Happiness
- The Wolf of the Wall Street
- Sapiens: A Brief History of Humankind
- Elon Musk the quest for a fantastic future by Ashlee Vance
- Steve Jobs by Walter Isaacson
- Zero to One by Peter Thiel
More Useful Blog Posts / Resources
- Path to a free self-taught education in Computer Science
- First timers only - This blog post would help you a lot in getting started to open source.
- None of Us Knows What We’re Doing by Feross
- Essays by Paul Graham - Every aspiring Entrepreneur should read this
- Always be Coding
- What would people advise a (hypothetical) 22-year-old college graduate to do with his or her life?
- What should a CS undergrad do to compete globally?