How to switch to CS from non-CS backgrounds

Varshini Subhash
8 min readAug 5, 2021
Image Credits

About 7 years ago, I distinctly remember being in love with Physics. Having been taught Physics by an exceptionally talented teacher, I had developed an unwavering passion for the subject which quickly translated into a decision to pursue an undergraduate degree in Mechanical Engineering. I recall the goosebumps I felt when seeing a lathe for the first time, with thousands of parts working in perfect synchronisation and conjuring impossibly accurate creations. Since then, my journey has been rather unexpected and far from linear, with my next stop being a Master’s program in Computational Science at Harvard. As someone who was aiming to pivot to CS completely, I found very limited online resources and concrete examples of people having made the switch. This motivated me to share my story with those who might be at a similar juncture.

About halfway into my undergraduate program, I realised that the curriculum in India was mostly traditional and did not encourage a porous mix of concentrations. Despite enjoying the coursework offered, I felt limited in terms of actually applying it to real world problems. Computing was becoming an increasingly crucial and ubiquitous field, which non-CS branches such as mechanical, chemical, civil engineering, etc. omitted for the most part. This practice can be detrimental for a few reasons. From a demand standpoint, most roles in the industry require some knowledge of programming and logic. If we consider impact, it is far easier to write a piece of code which creates instantaneous impact. This realisation led me to dive into Computer Science, at first begrudgingly, and the decision turned out to be one of the turning points in my professional trajectory.

The intention of this article isn’t to encourage readers to choose CS over their original interests. On the contrary, I firmly believe in being passionate about the career that one decides to dedicate their life to. My argument is that computing is a critical tool that is becoming increasingly unavoidable in every remotely scientific field, based on trends in the last decade. The article is aimed at all audiences — those who wish to incorporate computing into their current field in any capacity, those who wish to make a partial switch or those who wish to pivot completely.

Why one should consider developing a CS repertoire regardless of background :

  1. It becomes easier to stand out ~ My self-taught coding knowledge and interest was always met with pleasant surprise and even admiration, at times. There were positions I got selected for, primarily because nobody else with the same undergraduate background was as comfortable and eager to get their hands dirty with code. Be irreplaceable. The rarer your combination of skills are, the more marketable you become.
  2. You get to work on unique projects ~ Honing your skills in CS does not have to entail a complete switch from your original area of interest. One could think of this as developing expertise in ‘CS + X’, where X is the variable concentration. For a physicist, X will be physics, while the same X is likely to be heat transfer for a thermal engineer. Computing and programming skills can be transferred almost seamlessly to any concentration and the projects you will work on are likely to be unique. Moreover, solving a problem computationally allows for portability and large scale impact, since your code can be used by several others looking to solve the same problem. An example is my final year project, which solved a problem in Finite Element Analysis computationally.
  3. You develop long-term transferable skills ~ One’s interests are likely to evolve over a period of time and programming is a skill that is transferable to most settings. Regardless of which domain one ends up in, computing expertise will almost always come in handy.

What do I mean by a CS repertoire?

Computer science is a broad discipline in itself with numerous subdomains and it helps to define a personal end goal beforehand. For example, if your goal is to develop an aptitude for computational problem solving and apply it to your own area of specialisation, familiarising yourself with data structures and algorithms should suffice. If you aim to accelerate your algorithm’s runtime and performance, you might want to dive into complexity analysis or parallel computing. Tailor your repertoire to your personal goal. Regardless of the goal, coding serves as the foundation to practically implement these skills.

How does one start?

This is a common question I receive from non-CS folks looking to break into CS but do not see a clear first step and subsequent path ahead. This section will hopefully help chart out a concrete strategy.

  • Be extremely selective with educational resources ~ Most non-CS students barring ECE and EE majors, tend to have little to no interest towards programming and logic. This feeling can compound if you choose suboptimal pedagogical resources which do not introduce the subject well. Thankfully, we live in a fascinating time where the internet lets us access the same resources as students at MIT and Stanford. My strong recommendation would be to enroll in Harvard’s CS50 : Introduction to Computer Science, by David Malan, which is hands-down the best resource I have tried and is guaranteed to convert any CS skeptic.
  • Try to learn C++ first ~ It is highly recommended to go through the pain of coding in C++ without an IDE before jumping to Java or Python. Those who begin with Python find themselves navigating an exponentially steeper learning curve when they try C++.
  • Be hands-on ~ Learning a programming language by reading a book or solving exercises on paper is almost akin to memorising a surgical procedure but never actually performing it. The hardest, yet most rewarding part is to sit with a compiler, run your code, be persistent through each debugging session and learn.
  • Create an impactful project ~ Coding without a reward in sight can be draining, especially as a beginner. Working on a project with a clear outcome is the best way to motivate yourself. This is why I recommend CS50, whose curriculum is punctuated with challenging and fun projects which keep you accountable and create tangible impact.
  • Some IITs offer a minor in CS ~ If you are from an IIT, try to choose your minor as Computer Science. This option opens several doors and is often sufficient to make a complete switch if one desires. Unfortunately, this isn’t available in several other Indian colleges.

Making a long-term switch :

For those who are looking to make a complete switch (like I did), here are some useful pointers :

  • Maintain a GitHub or Bitbucket account. Since your trajectory will be non-traditional, it is imperative to maintain evidence of your coding expertise. Develop passion projects which clearly demonstrate your skills and maintain the corresponding repositories. If possible, switch to a Linux or Mac OS which provide a conducive learning environment.
  • Perfect your craft by benchmarking against the best. I have seen a tendency among non-CS students to stick to programming languages such as MATLAB which usually do not require a technical deep dive. There is often a low standard set for other disciplines in terms of coding ability, barring EE and ECE. If you are looking to make a long-term switch, you will be competing against the very best. Benchmark yourself against the most talented CS student you can find and get better much faster. It is easy to get complacent in surroundings that accept minimal coding skills to get by, but try hard to push yourself out of your comfort zone. For example, I improved significantly as a coder when I joined the Computer Science Department at IISc, since the rigor required in terms of pure coding ability was much higher.
  • Develop a forte and take your time to get better at it. For instance, my area of expertise has largely been parallel computing so far and my projects reflect this. I chose to pursue computational research for 2 years after my graduation to cement my confidence, before applying to graduate school. Each individual is different. Take your time to develop your skills.

Applying to graduate school :

Graduate school can be an effective bridge between your original background and the long-term expertise you wish to achieve in CS. I intend to cover all details about how one should approach graduate school applications, if looking to make this switch, in an upcoming blog post.

Always remember :

  1. Anybody can code ~ I’ve noticed a persistent fear among beginners with limited initial interest in CS, towards coding. It is quite natural to struggle for a while before you gain confidence. I lacked an initial flair and interest in coding too. I remember seeing code which computed the Fibonacci series for the first time in my 11th grade and being baffled by it. To everyone who is hesitating because they think they’ll never get better — do it! It can be rewarding to get significantly better at something you were afraid of. I started out pretty late (my first piece of code that did anything substantial was in my final undergraduate semester) and you can too.
  2. You don’t have to love coding to get better at it ~ Intuitively, it does make sense to pursue one’s passion and steer clear of what doesn’t appeal to you. This was why I chose mechanical engineering too. However, I truly believe that coding is more of a tool (like a calculator) than a discipline and one doesn’t need to love the process to effectively use it. I will admit that a passion for it helps accelerate growth, but it certainly isn’t a prerequisite to become reasonably good at it. It took me a while to actually enjoy coding and derive joy from it. View coding as an engineering skill rather than a skill for computer scientists and software engineers. You will be a better engineer in any discipline if you become a better coder.
  3. Become comfortable with discomfort ~ You will experience a sharp increase in discomfort when starting out. If you have had unpleasant experiences with CS in the past, this discomfort will be mixed with fear and anxiety. It is critical to keep pushing through despite the fear, dislike and discomfort, to reap rewards that far outweigh the initial pain.
  4. Everybody is different ~ I transitioned to Computational Science because I gradually became obsessed with computing and CS. A running joke among my friends is that I am the worst mechanical engineer because all I remember from my undergraduate work is my final year project which I coded away to glory. It is okay to stick to your field. It is also okay to pivot completely. You are the author of your own story.

--

--