Disclaimer: This article was written few years ago and may no longer be relevant as software engineering has changed a lot in the last few years. This is what may be more relevant now: Future of Software Engineering - Gaurav Chandak
These are some of the common questions that I get asked regularly. Most of the people in the industry (especially students) struggle with these questions a lot.
- Should I learn Java, Python, Go or JS?
- Should I learn Angular, React or Vue?
- Should I become a web developer or a big data engineer?
- Should I master the MEAN, MERN or LAMP stack?
- Which technologies should I learn to get a job at companies like Amazon, Flipkart, Google, Microsoft, Uber, etc?
“If you as an engineer used to identify with any of these tools, technologies or skills, if these are the labels you used for yourself, then you are commoditized”
-Amod Malviya on what differentiates great engineers from code monkeys at YourStory Future of Work 2019.
The main problem with (aspiring) software engineers is that they associate themselves with some technology or programming language.
Let’s look at some of the fundamental things related to software engineering.
- Coding/Programming is just a way — to write some logic — in a language — which a computer can understand.
- A software engineer is a person who — builds software/product — to solve a business problem — using their engineering skills.
- The engineering skills here are not Java/Python or React/Angular or Web/Big Data.
- The engineering skills here are:
- Strong foundations of programming
- Problem-solving
- Good knowledge of best practices (Optional, when you start)
- The ability to use all of these to convert logic to code.
Programming languages/technologies do not solve these business problems. The above-mentioned engineering skills do.
You should try to work on these skills instead of “learning” as many languages as you can or trying to learn what’s hot right now. If you get stuck to a particular language/technology, you’ll limit yourself to a very small subset of roles. If you go for what is hot right now without focusing on foundational knowledge, your skills will get irrelevant soon. Angular was hot as a UI framework a few years ago. React/Vue is hot right now. You want to be someone who can learn and develop stuff irrespective of the underlying technology.
If you understand a high-level language, you should be able to fairly understand some code in another high-level language easily. You should also be able to code basic stuff in an unknown language in a very short amount of time.
Most of the core concepts are quite similar in any high-level programming language. There are certain conceptual differences (like classes, callbacks, multithreading, promise, channels, etc). You can explore and understand these “on the job”. You do not need to know about these things before you can start.
You might face issues in understanding the business logic, the architecture or the design patterns used in building the product. But that issue might happen even if you’re an expert in the same language/technology.
If you’re still not convinced, let’s solve a business problem.
You’re creating an online coding platform and need to build a product similar to workat.tech online compiler and IDE.
- Do you need to be a Java engineer, Python engineer or a NodeJS engineer to build the backend?
- Do you need to be a React, Angular, Vue engineer to build the frontend?
- Do you need to know Kafka/RabbitMQ/Redis before building this or just knowing that you need to create a queue for submissions should be fine to start with?
- If you know the basic concepts of programming, understand basic concepts like stack, queue, etc and know how to convert logic to code using any high-level language, you can start building and learn stuff as you build. Google is your friend.
Here is how I would do it if I had been an absolute beginner and had to create a basic version. This is how I would build it:
- Let’s start with a simple command-line app.
- Our app will take some code as input from the user. This is the code that needs to be run.
- In my language of choice (let’s say, Java), I’ll search “How to run bash commands in Java?”.
- I would create 2 functions: “compile” and “execute”. Then for all the languages that I support, I would have if/switch conditions to determine the logic. I will write the compile and execute commands for each language in the respective functions.
- I would need to run the “execute” command if the “compile” command was successful. How to determine the status code? I’ll just google it.
- Now the app is ready to compile and execute any code in the desired languages.
- Now let’s build a web app around it. Let’s start with the backend.
- If I’m building in Java, I’ll quickly initialize a spring boot app. If I’m building in JS, I’ll quickly generate an express app. It’s pretty easy to create a basic app, if you follow the steps online.
- Now instead of taking a file as command-line input, I’ll create an endpoint that does the same. The backend is ready!
- Now to create the frontend, I’ll create a textbox where I can code and a button to run the code followed by a div below it to show the response.
- A basic web app is ready. Now if you want to create an advanced online IDE+compiler, you can:
- Search for open-source code editors and use it instead of the textbox.
- Estimate the traffic that this might get. Do we need to queue submissions? Will an in-memory queue work or do we need a persistent queue?
- Learn how others have created something similar and try to understand the best practices and incorporate those.
You can create a pretty good product by just knowing the foundational stuff. You can learn the best practices on the go. Leverage the power of Google.
Note that there will be other business nuances as well but you can do that, right? If you can build an online compiler! You can do that as well!
Note that it would be better to look at the best practices before starting to build. But if you’re a beginner, starting small often helps overcome the initial friction.
Congratulations! You can now become a software engineer. If you are already an “insert some language/technology” engineer, you’ve just graduated to become a software engineer.
Further reading
For specific details on how to prepare for and do well in tech interviews, you may want to check out the following links:
General Advice
Introduction to Programming
Problem Solving/Data Structures & Algorithms Round
- How to prepare for Problem Solving & Data Structures round?
- How to ace the Problem Solving & Data Structures round?
- Is competitive programming required to do well in interviews?



