Usually, People ask me about how different is working in CS (Computer Science) vs. working in Electronics Engineering. The truth is, for most of the people is just the same. Of course for people out of the IT world. Those who asked me about this, are engineers or professionals familiarized with the industry. They usually think Software and Hardware are an entirely different world, but surprisingly, I tell you, as someone who made the switch, what most of the people think is right, it's the same, with just some adjustments in specialization.
Well, of course, is not the same, but they have a lot in common. If you are an Electronics Engineering, chances are you've done many programming assignments in your University courses, or even in your current or further job. In this way, you already have experience in one of the most necessary skills in CS.
Let's start by comparing the field or areas of each discipline,
- Circuit and Device Design
- Control Systems
- Computer Architecture
- Algorithms and Data Structures
- Electromagnetic Theory
- Network Analysis
- Signal Processing
- VLSI Design
- Computer Architecture
- Algorithms and Data Structures
- Information and Coding Theory
- Databases & Data Analysis
- Artificial Intelligence
- Computer Networks
- Performance Analysis
- Human-Computer Interaction
At first sight, they seem entirely different, sharing only Computer Architecture and in some degree, Algorithms and data structures. So, how they can they be similar enough for you to jump from Electronics to Software or vice-versa. Well, that's something that teachers probably don't tell you in University, that is when you go out in the wilderness of IT companies, you need to "learn, unlearn and re-learn" . What I mean is the fact that in practice, you'll need to learn several new subjects from what they teach you in high-school, from soft skills, like talking in public to other colleges to present some proposal, or how to make a schedule for a project development, going through new technical skills, that might become your domain expertise.
Domain Expertise refers to the knowledge you get working on a project that involves different methodologies, techniques or study fields. For example, if you're current job is a Software Developer, you might end working in a finance application, where you need what a mortgage is, how to calculate the monthly payment based on the price, down payment, interest rate, and others. That kind of things subject of study in finances or business administration, but you need to know them if you want to deliver excellent work.
The previous point talks about the "learn" part of the formula [1:1]. The unlearn is inevitable in the process because while you specialize and learn new subjects, your brain naturally forgets what you don't need, or even you'll need to forget what you learned about a methodology that becomes obsolete (think of the waterfall methodology compared with agile nowadays).
You can think of the re-learn part as a necessary step when to specialize in something you want. In University you get just the bases, to begin with, but you need to go deeper into a specific subject to become good at it.
Getting back to domain expertise, as an Electronics Engineer, many of the fields you studied can become your domain knowledge as a Software Engineer. For instance, you could work in a "Circuit and Device Design" project, where you're asked to develop an application to automatically set input streams and measure the corresponding response to a match with the expected assertions. There's a lot of programming work needed, from gathering requirements from the final users (Electronic Engineers most likely), designing the system architecture and programming implementation, which is software engineering work, but you can't get it done without a solid knowledge of what the project context is. A perfect example of this is the Embedded Software Developers.
You might have watched this classic Venn chart,
These three categories, Math, Programming and Domain expertise can define the position you are or might be in the future if you like. As an Electronics Engineer, you already have some of each one.
Chances are you already know about calculus, linear algebra, numeric methods and other mathematics subjects, which are subject of research in many CS fields like Data Analysis or Machine Learning.
On the other hand, you get the domain knowledge in several areas related to electronics, that by the way are very common in IT jobs.
Moreover, you already know about programming, probably more in a low-level fashion, but trust me, you can quickly move to more high-level languages if you want.
Let's take a closer look at this diagram,
The level of specialization in each of the tree area positions you into some specialization:
- Statistical Research: In simple words, is a scientific, investigator or research worker who investigates a particular subject.
- Data Processing: This is the classic Software Developer, Web Developer or commonly Software Engineer who works in a particular kind of software application.
- Machine Learning: New, is a Software Engineer who specializes in the use of "state of the art" Artifical Intelligence to solve modern problems related to significant amounts of data.
- Data Science: Also new, is a scientist or engineer who poses specialized knowledge in the areas and is able, among other things, to develop a business strategy using math and technology methods.
Now, the area of specialization to choose depends entirely on you. What you like to do, how you picture your self in the near future according to your preferences. No matter what to take, it should always be something you're happy and gives you a sense of completeness.
I hope these thoughts can help you somehow, to make up your mind if you are considering making the change. I'll be writing a guide of what fields you need to know to become a SW developer in future posts. Let's keep in contact. Take care.