CareerHigh - Building Better Career

Software Engineering Roadmap

Phase 3 - Crack the Internship

The objective of the 3rd phase would be to learn industry-relevant tools and technologies so that you can end up with a great summer internship. Even if you are not a college student, do read this section because it would give you an insight into how to build the right industry skills.

In this phase, you should start searching for internships. For college students, this internship can be taken up during the 3rd year summers. However, that will be a side task. Primary task during this phase should be to:

  • • Learn web development
  • • Learn android app development

A great internship would be an outcome of your great skills. Focus on building the right skills and it would be easy for you to crack an internship.

In this phase, you should get at least 3 projects on your resume:

  • • 2 Web Development Projects
  • • 1 Android App Development Project

Web Development involves developing rich browser-based applications that are usually backed by a database. For instance, Facebook is a Web Application. In fact, CareerHigh itself is a Web Application.

Our first task to learn Web App development would be to learn Django. Django is a Python-based web development framework. You should learn Django because it is in high demand among Indian (and foreign) startups these days. Also, it is easy to learn. Django developers are making a lot of money in the industry.

To learn Django, head straight to this link  - Django Girls Tutorial. Don’t be sad at the name if you are a boy. Nothing sexist here :) This is one of the best Django tutorials out there. Spend a week’s time understanding it. Spend time in understanding how Django works  - model, view, controller architecture. If you follow this tutorial religiously, you have achieved 3 things:

  • • You now understand the basics of Web development in Django
  • • You just picked up basics of Python (in case you didn’t learn Python in Phase 1 of learning)
  • • You have a decent project to showcase on your resume - a blog application built using Django as the backend framework.

Once you are done with the Django girls tutorial, the next thing you should try is to build your own, new Django app. Here are a few suggestions for you:

  • • Build a photo gallery app  - take a hashtag from the user and use TwitterAPI to gather images of that hashtag in a photo gallery.
  • • A simple banking application  - try making both a customer and an employee account.
  • • A student dashboard that shows the performance of the student.
  • • Online grocery store - make an e-commerce application in which a customer can see the various grocery items and can choose which one of them to buy.
  • • Survey application to decide meal menu - make an application that can take food preferences from the employees of a company, which can help the HR to prepare the food menu for the month.

One more side point - make a Github account. Github is a ‘social network’ for programmers. People upload their source codes on Github. Github allows you to maintain “repositories” of your codebase and collaborate with other developers (like your friends) on the same source code.

There is also something called as ‘git’, which is a codebase version control system. Take this short course on git - Version Control with Git | Udacity. By the way, git is worth learning because you can put it on your resume! Almost every small/medium scale company today puts their code on Github or Bitbucket which are 2 of the most popular platforms.

There is another important thing we forgot to tell you about - StackOverflow. As a programmer, you are bound to face errors and exceptions. What to do? There is an extremely simple technique to deal with errors. Copy the error, paste it in your search bar (Google search) and hit enter. Viola! Open the first 3 links you get. With a high probability, someone has already faced the error you got and has written a solution on StackOverflow. StackOverflow links are generally reliable and you can expect them to give you the right answer. Be patient. Read and try. Your code might break. But that’s okay. Use undo. But don’t be afraid of breaking things else you won’t learn.

Feel free to pick up code snippets from StackOverflow. Don’t feel bad about it. As a Software Engineer, your job is to solve the problem given to you and implement a solution. You are not expected to memorize the syntax of various programming languages. At least, not the advanced syntax. Today, the technology is moving at such a rapid rate that it is virtually impossible to memorize the syntax because what you memorize today may get outdated tomorrow!

Great, so now you know web development, Python and you have 2 awesome projects on your resume. Let us move to Android app development. Here are the steps to follow.

Head to this link: Android | Udacity. Udacity is a platform on which big tech companies offer courses that you can take up to learn various skills in software engineering. Google has built some excellent Android courses on Udacity and you should definitely take a look at them. Start from beginner level courses. They are very simple and might get completed in a day or two. You should spend at least 1 - 2 hours a day on these courses. Once you are done with beginner level courses, take up intermediate level courses.

Android might be slightly frustrating. The Java used in Android is slightly different from the usual Java in the sense that it is advanced and has a lot of library functions. Don’t get bogged down by it. Remember, you need to be a software engineer. We software engineers are known to solve problems ;) As again, we would suggest that you should use Google search heavily for any errors. Be patient because Android is slightly hard.

In the end, you would have 3 more things on your resume:

  • • Android app development as a skill
  • • Java as a programming language
  • • An android app based project

With this much on your resume, you are sure to get an internship. After completing all of this work, you should start to get serious about your internship. Anyway, here are the suggestions for applying for internship:

  • AngelList is an excellent platform where startups are looking for interns. Make an AngelList account and add your projects and skills on it. You are sure to gather the attention of some startups with those awesome Android and web development skills.
  • • Search for other internship portals. Be active on LinkedIn.
  • • Start preparing for interviews. The way hiring in computer science works is that you are shortlisted for interviews based on your resume. During interviews, you are asked data structures and algorithms based problems. The level of problems would be similar to what you have been doing on SPOJ so you can be happy that your hard work will finally pay off. We would recommend continuing SPOJ practice. It is easier to lose skills than pick up skills.

To prepare for interviews, use the following 3 excellent resources:

  • Cracking the Coding Interview - this book is the bible for programming interviews. Purchase it or download a pdf (piracy is bad). Try reading the theory and solve the problems. Try to actually implement the solutions.
  • Coding Interview Questions - This is a brilliant platform to hone your interview skills.
  • GeeksforGeeks - this is a great programming blog/archive.

Also, we would suggest that you should be prepared with questions from your projects. You should be able to explain the code you wrote. The interviewer might ask you about a specific library you used. Don’t worry, you should have a high-level idea that you should be able to explain. No one will ask you syntax.

Detailed Internship Interview preparation guide coming soon.

In parallel to your internship search, you should also start picking up the latest tools and technologies - Machine Learning, Artificial Intelligence, Natural Language Processing, Blockchain, Cryptography, etc.

Knowing these technologies would open up a lot more companies for you, both during internship as well as during job. Ideally, companies don’t expect much knowledge of these technologies while hiring freshers. However, they are all good to have on your resume. Additionally, learning them is fun!

For Machine Learning, the most well-known resource is Andrew Ng’s course on Coursera which teaches the basics of Machine Learning - Linear Regression, Logistic Regression, Neural networks, etc. The course will help you create a strong mathematical foundation of Machine Learning which is very much necessary to advance in this field.

For Cryptography, you might want to consider Dan Boneh’s course on Coursera. The course is excellent in terms of creating a balance between theory and application. The course focuses quite well on the mathematical foundations behind cryptography.

While learning a new technology is important, technology gets outdated quite rapidly. Therefore, it is important that you should know “how to learn” something new so that you can stay up to date with new advancements in technology. The key takeaway of Phase 3 should be that you should learn how to learn. This would be a learning of your life in order to become a great Software Engineer that you desire to be.