A few weeks ago, our ChiefKul (read: CEO) got a connection request from an aspiring Indonesian software engineer. He asked mpj some insights about a career as a software engineer. And in this article, we will deep dive into his questions. Here was the message:
Currently, I build a software engineering portfolio. But I feel stuck where to start. I am a little confused about the skills that matter to be mastered, whether the engineering principles or the technology?
Those underlined words are the highlight for this article. Let’s discuss further each.
Portfolio as a software engineer
If we talk about portfolios, we need to use the first approach: why do we want to build it? What is the motive behind it? If you wish to land your dream job or a tool to show off your masterpiece to the people.
Suppose you have no specific goal for creating your portfolio. Or even worse, such only for the sake of having a portfolio. Rethink again. It is not a good start, as you have no direction and motivation to start with one. Suppose you feel like you would better ask yourself why you want to create one in this position. Asking yourself makes clarity.
Suppose you already have a specific goal, e.g., seeing yourself in the future as a mobile developer or a data scientist. In that case, it’s an excellent first step. As you have a direction and could focus your energy on the things that matter. The software engineering field is, indeed, a wide variety of subject such as:
- Software engineering
- Front-end engineering
- Back-end engineering
- Mobile developing
- System engineering
- Data science
- Data engineering
- Software engineering in test
- Blockchain developing
- Machine learning engineering
If you just started in this field, you can build your portfolio by having all your code online, whether it is public or private. Have your code in GitHub or GitLab available online, so you can show it to other people and pitch yourself if someone asks you about a particular area.
Mpj himself prefers to document his codes in online Git repositories to look for it to find similar problems. So, if you are just getting started or testing new technologies, just put it on the web. Set it public, so people can see what you have done.
Are you interested in putting your code online? Cool, the next step is to have clear documentation or README.md in every public project you write. It will help people a lot by reading the documentation. And you get a sense of fulfillment by being organized.
Which skills need to mastered for software engineer
Challenges in every organization usually vary from one organization (or individual) to another. People are complex, and their interactions can create a more complex system. As Conway’s Law states:
Any organization that designs a system (defined more broadly here than just information systems) will inevitably produce a design whose structure is a copy of the organization’s communication structure.
The system you build will reflect how your organization interacts and communicates. Thus every organization has its unique challenge and context. Think about Google running planet-scale systems that are most likely different from companies in Indonesia trying to score a product-market fit in their product category.
Moreover, the tech landscape in one country will be different from another one. For instance, the one in Indonesia is a bit different from the US market. Tech-landscape in Indonesia is less matured since we only started in the e-commerce boom (2010–2012) compared to India or the US, which already started long before us. Although the software system existed a long time ago, the adoption rate was significant in recent years.
So, there will be a difference in priorities. Startups in Indonesia need software developers and engineers to build features and put less emphasis on scalability. Although some good companies did in the early days, again, time-to-market is more priorities here in Indonesia. Engineer in Indonesia is primarily users of technologies such React (in the frontend), Node.js (in the backend), Rails (full-stack), and many other technologies. We aren’t in the stage where many technologies are being built here in Indonesia since the priority is a smaller amount of difference.
Mpj experience as a software developer user in various companies could say that the quality of software engineers in Indonesia needs much improvement. The area of improvement could be in these fields: system building, system interaction, and creating larger systems. Creativity is also a concern as there are numerous tools to do problem-solving instead of using one-solution.
However, he thinks that in a few years, the tech landscape in Indonesia will have significant improvements. More unicorns, more big companies are going digital, and more emphasis on scalability and performance. Not only building features. So fundamentals such as data structure and algorithms, problem-solving, critical thinking, and deep understanding of computer systems will be the key to support 250+ million Indonesians.
Applying engineering principles
There is this good TEDx talk where the speaker emphasizes how most people are always wrong and how we can think outside of the box, as he says in the video.
We live in a world where the questions might be the same, the answers have changed. In other words, what has got you here, will no longer get you there.
And, it is true. One day, the same engineer working in this period is getting older and facing different challenges in the future. The issues are the same (how to build a software system), but the answer will change significantly. There could be more challenges in scalability, performance, and backward-compatibility
Strengthening our engineering principles and knowledge is crucial. To name a few, we need:
- Deep understanding of how the system is being built and interacting with each other.
- Understanding of communication protocol is just things that people made. In the future, we will build our protocol if needed.
- A deep understanding of Data Structure and Algorithm is essential because if we build our data structure right. We could develop systems more naturally and intuitively and save us from many problems in the future. Then the algorithm came in handy; if the data structure is correct, we can leverage the algorithm to do computation way faster, even with the same machine specs.
Then, there are these helpful resources:
- and many more.
Last but not least: technologies
The software developer fellow, then, added a question:
But I am a bit confused about the job requirements of the developer, and I think the difference is whether I have/haven’t used the technology mentioned above. So, in my opinion, as a developer, which one is better between being familiar with much technology or just exploring a few technologies?
I think it has equally essential engineering principles in your tech career for the technologies part. You need to implement the concept in your head and turn it into an actual code.
Then if you asked which one is the priority: learning one code or many languages. The answer is: why don’t we do both. Master one technology as your daily driver. Then, having other ones to enrich your thinking and avoid being trapped in tunnel vision. It will, indeed, help us to think outside the box.
We are hiring software engineer!
We are a digital tech agency and currently hiring for a remote full-time and internship position. If you believe in our mission to bring high-quality software to the masses. As well as helping software engineers in South East Asia raise the bar, drop your CV, and we’ll talk. You can also read our Software Engineer Intern experience here.