The noob guide for entering the software engineering world.
Tags: beginners, programming, career
Published: 2021-07-17 06:58:04

![james-harrison-vpOeXr5wmR4-unsplash](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gyb3hgenw0wyhvxsrwi.jpg)
 *Things you might need to consider before going down the rabbit hole.*

>Before you read further…

>The article is for those who are trying to get into the Software Engineering industry. Even though I have a couple of years of experience in the Sri Lanka software engineering industry, I believe it can vary from country to country.

>So if you want to get an idea about what it takes to get into the industry, I believe I have covered most of the necessary things that need to considered.

>However, please take these bits of advice as a grain of salt and do your own research. Then you can decide what you want to do with your life. Because if you are not ready to stare at a monitor for more than 8 hours a day, this might not be the job for you.


>**Stay hungry. Stay foolish. ― Steve Jobs**


# What is Software Engineering?
If you search this term in a search engine, you’ll get many definitions for this term. So I don’t want to add another one to that list, but I’ll explain what we do regularly.

Most of the industries in the world run on software right now. Stock markets, communication, education, transportation, the list goes on. So, to help those businesses do their day-to-day tasks, someone needs to build software based on their requirements. Not only that, it needs to function appropriately under the agreed hardware configurations.

So, as software engineers, what most of us do is translation. This means we translate business requirements into instructions that can execute on a silicon chip. To do that translation, you need to have specific sets of skills. That translation, we can call “Software Engineering”.

So, what are the things that you need to get your foot in the door?


# Education
Before you consider signing up for an education program, it’s better to have a somewhat clear understanding of your goal of learning these subjects. You can ask yourself;

> **Where I want to be in ___ years, and will this program help me to reach it?**

Because now the software engineering industry is getting bigger and bigger, it’s better to learn matching subjects related to your goal. Some common job roles in the software engineering world,

* Embedded Software Engineer
* Front End Engineer
* Backend Engineer
* Fullstack Engineer
* Data Engineer
* Software Architect
* etc…

When it comes to education, we can categorize it into two groups.

1. College/University education
1. Self-Study

## College/University Education

Even though some people rant about college/university education, most companies (except Tesla) require some kind of paper qualification. And recruiters also love to hire some candidates from top universities with higher grades.

But that doesn’t mean once you complete your program, your job is guaranteed. Of course, having good grades is best for your resume, but if you can’t apply those theories in the real world, that doesn’t have any value to the industry. So my opinion is having practical knowledge essential much crucial as theoretical knowledge.

In Sri Lanka, we have two different types of Universities.

1. Government Universities
1. Private Universities/Institutes

Especially if you are planning to follow a private institute’s degree program, you might need to check out some things about the institute and the program. You can find those below.


## Self-Study

I think this topic is still on the fence when you are applying for your first job without a paper qualification(Diploma, Higher Diploma, Bachelors). I believe most of the software companies in Sri Lanka require some kind of paper qualification when you apply for your first job. After that, it’s mostly your experience. If you did well in your current position, you don’t have to apply for a different company; they will contact you.

However, after you got your first job, it’s all self-study until you retire. Most of the time there won’t be anyone who can help your work. Because you might be working on entirely new technology and there is no one who know about that technology. So it’s fair to say, programming is a life long learning process.

## Things to consider — Universities/Institutes

* Is this degree UGC approved? (Only for SriLankan students)
* Does the industry accept this program as a qualification?
* Can I afford it?
* How many alumni are working in the industry?
* Are there any scholarships? — When I’m thinking of applying for a bachelor’s degree program, I haven’t applied for some of the reputed private institutes because of the semester cost. Later I found out, they have scholarship programs based on your grades.
* Is this theory-heavy or practical heavy? — If the program leans towards one side(theory or practical), you need to work on the other side in your own time.
* How much time will it take to complete the program? — Since the IT industry changes so rapidly, the technologies you learned might become obsolete when you came out of the university.
* Will this program affect your migration plans? (If you have any.) — The reason is, some work visas require specific education qualifications.

## Things to consider — Self Study
* How important is it to learn this technology?
* How quickly do I need to learn this?
* How deep can I go with this resource?
* Do I need to refer to more resources?
* Do I need to pay for third-party services to get the best out of this program?
* Can I afford it? & Does it offer discounts?

# Your virtual toolbelt.

Just like the carpenters, mechanics have their own toolsets, as an engineer, you also should have some tools in your inventory. In this case, virtual inventory.

* Software engineering concepts — Learn it, remember it.
* Read the [Cracking the Coding Interview](https://amzn.to/3iiDQqP) book. (If possible)
* Pick one or two languages and try to learn as much as you can. The deeper you go, the better you become.
* Algorithms solving-knowledge — SignUp for some competitive programming platforms. Eg: HackerRank, LeetCode, CodeWars, etc…
* Data structures and Design pattern knowledge
* Your past projects — This can be either academic projects or your own projects. Your final year project is adequate, but everyone has one.
* Knowledge about version control systems
* A LinkedIn account — Don’t post any unrelated stuff in there. It's not another Facebook.
* Unsubscribe useless YouTube channels and start watching some programming-related YouTube content.
* Create a GitHub account and research how to contribute to an open-source project.
* If you have a preferred company in mind, research if they have any community or open-source projects available. If yes, try to contribute.


# Getting the job
When you get ready to apply for a job, you can find many software companies nowadays. But we can categorize those into 3 main types.

### Product-based companies

* The company will have one or more of their own products and they will hire to manage or create new products.
* Most of the time, you will hire for a specific position. Either a new position for a new team or to replace a departing employee.
* If you join a team which is trying to build a product from the ground up(Greenfield project), this will be a great experience. If not, you will probably put it into an existing project. Then you need to either add new features to the existing project or to help maintain the product.
* The employee benefits are high.
* Job security is a little higher than the other company types. Because you might be one of few people who know how certain features were implemented in the system.
* If you stayed in the same project for a long time, your knowledge might get outdated.

### Software Consultations Companies

* Their primary business model is, provide software consultation for other companies(mostly product companies).
* Because of that, these types of companies will hire people more generally.
* In other words, when you get the job you might not have a specific project, you might be assigned to something called “Bench”. Don’t worry, you don’t have to sit on a beach until you get a project. It’s a metaphorical word.
* In some occurrences, you have to face a couple of more interviews within the company. Because when they get a new customer, the company needs to shortlist the most ideal candidate for the job.
* The employee benefits are varied.
* You can ask for a project rotation if you feel like you are getting stale.
* Job security is a little lower than product companies. Because, * you might not be the only person who knows how certain features or technology works.

### Startups

* The new kid in the block.
* These types of companies can either be product-targeted or software consultation-targeted companies.
* Usually, employee benefits are high, but job security is shallow.
* Because if the idea didn’t work out, the company might go bankrupt.


### Apply for a job and what to expect in the interview.

This can vary from company to company. For example, some companies might have 2 or 3 interviews, some might have 5 or 6, and the questions are also based on the person going to conduct the interview. So my advice is, do some online research(Glassdoor, Indeed, etc..) about interview questions, company culture. Reach out to some employees who already work there (but don’t be a pain in the butt).

But I can say one thing for sure, DON’T LIE. If you don’t know something, just say you don’t know it, but you would love to learn it. That shows your honesty and openness to new things.

And finally, think the interview is like you are going to meet your partner’s parents. So you don’t want to undersell or oversell yourself.

# The final verdict

Programming is hard, much like all other jobs in the world. But how it differs from person to person is, based on their knowledge, interests, dedication, and most importantly, how quickly you can recover when sh** hit the fan. If you are a person, easily gets offended or discouraged when something bad happens on the job, I don’t think it’s a good place or industry for you to succeed in life. But who am I to judge you? I’m just a guy from a small island called Sri Lanka and lucky enough to work in the tech.

So if you reach this far, I really appreciate your time, and please let me know your thoughts in the comments section.

Thank you…

#### A couple of resources…

* This is my [GitHub](https://github.com/ThusithaDJ/noob-guild-to-software-engineering) repo that I created for this post. You can find more resources getting into tech. (Currently, it doesn’t have much., but I’ll update in the future. )

* [Developer roadmaps](https://roadmap.sh/) — This is a good resource to visualize the basic things that you need.