Note: this is cross-posted from my blog
This article is written for a student pursuing graduation in computer science for a duration of 4 years. It provides a learning path for a good career in software development, which can be either of the following:
Working for an early stage or high growth startup
Working for a big MNC
This article assumes the following:
There can be many achievements for a computer science student, but it mainly focuses on a good career in software development.
A good career in software development means either working for an early stage or a high growth startup or working for a big MNC.
This article does not suggest to skip the college syllabus. In fact, it suggests how to put efforts alongside your college curriculum.
This article does not provide a learning path for any specialized roles like Machine Learning Engineer, or Data Scientist. However, it tries providing an optimum path for students interested in Software engineering roles.
This article is written keeping in mind Computer Science graduates, but it is not strict about it. It can be used by anyone interested in pursuing a career in software development.
It does not provide any suggestion for "resources". You can find the resources by doing a Google search for "how to learn X".
Last, this article is just a suggestion of how should you structure yourself, so that you are more aware of how to plan and put your efforts during your graduation course.
In most of the tech companies, an entry-level software engineer role expects the following:
Good knowledge of algorithms and data structures, so that you can pick up things on the fly and are able to comprehend most of the logical things.
An understanding and knowledge of the language and frameworks used in the company. It's better if you know.
Before we begin, let's understand how is the graduation course generally structured. A 4-year programme is divided into 8 semesters, with a break of 1–3 months in between. Most of the courses run the class(around 8 hours) 6 days a week, with some half days(4 hours). This also includes the practical implementation part a.k.a Labs related to the courses you take.
Let's first plan out the time of how and when can you spend your time in following this learning path. We will call this as your additional time. You can spend your time in the following way:
2 hours per day, on weekdays(Monday - Friday)
4 hours per day, on weekends(Saturday, Sunday)
For each day, you can split it into shifts, like morning and evening.
1 hour per day, on weekdays, in Morning
1 hour per day, on weekdays, in Evening
2 hours per day, on weekends, in Morning
2 hours per day, on weekends, in Evening.
However, this is just an outline and you are free to structure your day/week in whatever way you want to.
Also, for better understanding and be clear with your goals, the semesters are divided into the following categories
Maker - This means that the entire focus is on building a product. The product can be as simple as a static web page to as complex as a chat application. It is also important to understand that here learning will be there, but it will be mainly driven towards building a product.
Learner - This means that the entire focus is on learning new stuff. It will focus less on creating products and more on building your base and depth about concepts.
Exposure - This will consist mainly of interactions with the community and learning/making by observing others or collaborating with others.
Let's us begin of how you should put additional efforts alongside your semester syllabus to have a better career in software development.
In this semester, learn HTML, CSS. You should learn how to build static web pages. If you are running out of ideas, of what to build, then start creating static pages of popular and frequently used websites, like Twitter, GitHub, Medium, HackerNews.
Next, you should learn how to use git and GitHub. It's very important and will be used throughout your entire career in software development. Also, commit all the code that you create during this semester to your GitHub account.
You can participate in international challenges like 100 days of code. This gives you a community of like minded people willing to learn and helps you in case you get stuck.
Time: Spend all of your additional time in learning frontend development.
At this point, you can also start participating in hackathons with your fellow peers and learn more about building products in a time restricted manner and working in a team.
Time: Spend all of your additional time in learning backend development
This semester, you should focus on learning data structures and algorithms. You can try competitive programming to learn. It gives you an environment and a community. Or you can learn algorithms by reading and implementing them.
Apart from this, also focus on your web development projects. Keep participating in hackathons and building side projects on ideas that fascinate you.
Spend 30% of your time in making products(3 hours per day on weekends).
Spend 70% of your time in algorithms(rest of the additional time).
Also, you should participate in GSoC. At least, spend some time with an organization, understand their codebase and fix some issues. If you are excited by what they are solving, then write a GSOC proposal on a project idea. This will help you learn more about how to plan out the development, how to manage yourself, and how to be an efficient communicator.
Apart from this, keep sharpening your algorithm skills.
Spend 30% of your time in algorithms(1 hour a day, for 6 days a week)
Spend 70% of your time in open source(rest of the additional time)
This semester, you need to balance and focus on most of the things you have done until now. Spend some of your time(30%) in refining your algorithm skills. Spend 40% of your time in going deep in maker skills(frontend or backend development or both).
Spend the last 30% in open source stuff. For open source, you can contribute to some projects or publish packages of your own. In fact, one suggestion for this can be to create an open source repo of algorithms in a language of your own choice. This will deepen your knowledge of algorithms, help you learn more about the caveats of a language and help understand how to collaborate and maintain an open source project.
Spend 30% of your time in algorithms(1 hour a day, for 6 days a week, in the morning).
Spend 30% of your time in open source(1 hour a day, for 6 days a week, in the evening).
Spend the remaining 40% of your time in maker stuff(rest of the additional time).
This semester, spend time(50%) in preparing and practising algorithms, the next 40% time in building stuff. In fact, this time can be used to apply to GSoC as well.
At last, spend remaining 10% of your time in learning essentials skills for an interview like resume and portfolio building, and preparing for managerial round interview questions.
Spend 50% of your time in algorithms(1 hour per day on weekdays, 2 hours per day on weekends).
Spend 40% of your time in building stuff(1 hour per day on weekdays, 2 hours on Saturday).
Spend 10% of your time in essential skills(2 hours on Sunday).
This semester, spend entire of your time in preparing for job interviews and securing a job. This will require you to visit each of the skills learned above and balance them.
Time: Spend all of your additional time in this.
This semester, spend time preparing for interviews if not placed. If you are placed, then you should spend time expanding your overall knowledge about software development. You should learn Test Driven Development and Object-Oriented Programming(if not learned until now). You should learn Deploying applications on cloud providers like AWS or Heroku. You should participate in local meetups of your preferred language and should give a talk. You can also use this time to explore other frontend frameworks like React, Vue or Angular.
Time: Spend all of your additional time in this.
This article suggests a leaning path for a career in software development, which can be followed alongside the curriculum of the college. It is written keeping in mind the experiences and observations of the author, in solving the industry-academia gap.