How to start a career in tech

February 20, 2020 ยท 9 min read

background

So you want to be a software engineer?

It's no secret that the Tech industry is on the hype. If you want to surf this wave, there is no better time than now! In this article I'll talk about Software Engineering, only. But be aware: there are tons of other roles in tech. From Product Managers to UI/UX design. You name it.

If you have no idea on how to start a career as a software engineer, don't worry. A long time ago I was in the same situation. Here are my tips for you on how to get going.

Do I need a diploma?

The answer is straightforward: no. You can become an awesome software engineer without ever going to a college, university, etc. However, if you can, there is no harm on that.

I graduated in Software Analysis and Development (a branch of Computer Science). Was it really required? In part yes, because I was living in Brazil and having a diploma would help a lot land my first job in tech there. But it was 2013. This is not true anymore.

I started as a Software Development Intern at IBM in 2015. When I was interviewed there, I was asked for a diploma. However, some years later the IBM CEO, Ginni Rometty, announced that IBM was re-evaluating the way they hire, focusing more on the skills you have rather than your diploma (if any).

After some years in this industry, my opinion is: the "formal" education can give you a more direct path of what to study. Most universities will teach you the CS fundamentals (algorithms, data structures, etc). There is a value here. You can't just ignore that. However, you can do it by yourself. It requires discipline, as anything in this life.

To be honest, I'd say 80% of everything I know about coding today I've learned after graduating. It required effort in getting something done. If you think you can learn the remaining 20% by yourself, got for it!

Prerequisites

This is a very short topic. There are NO prerequisites to start. Actually, there is one: motivation. You just need to put yourself into it, don't be afraid.

One day you may stumble across some open source code repository and see a very intricate algorithm going on. Don't panic, whosoever wrote that code started with a simple "Hello World!" string some day.

Whenever someone asks me how to start, I always give them the most frustrating, but yet valuable tip: start from the basics and understand the fundamentals. Don't attempt to code a spaceship program in your first try. It will come with practice. Start simple, keep doing it.

Where to educate myself?

There are literally thousands of ways to start. With a LOT of free options out there.

If you have a tight budget, or are just curious to learn some coding and don't know how serious you want to get, I'd recommend looking at freeCodeCamp. They are a non-profit organization with tons of free content. You can earn certifications by completing their projects paths. They cover everything from learning a specific programming language to interview preparation.

I could go on and on, but here are the links to online resources that I think are worth your time:

  • Introduction to Programming with Python at Udacity. That's a free course, and they have paid courses called Nanodegrees. I took one there for Full Stack Web Development;
  • Udemy has a lot of good content. There are lots of cheap or free courses there. Tip: consider the course review rating to get the best one;
  • Coursera gives you access to world class educators. You can even get a Master Degree there! But focus in the basics for now.

Recently I've come across this tweet from Andreas Mehlsen. He created the Web Skills page, which is a very comprehensive list of skills you can learn to code for the web. Highly recommend you to check it out!

And, as always, search engines (aka Google) are your friend. Just search by "free courses in software development" or any variation of it and you'll get something to start.

What working in tech is really like

Do you remember those movie scenes when a hacker is breaking into CIA database, typing very fast and getting the "ACCESS GRANTED" screen?

hacker invading system

Sorry to disappoint you, it's nothing like that. In my experience it's 50% communication and discussion with your team, users and stakeholders. 40% planning what to do and engineering the software. The remaining 10% are the actual code writing.

We are nerds, we enjoy coding for long sessions in a dark room at home. But don't be mistaken: if you need to work inside a company with more people than just yourself, you must communicate. It's very rare to work alone in a project. You got to collaborate with others in other to get the right thing done.

You'll battle against bugs, trying to figure out why the user X is facing an error while user Y is not. It's ok. The fun part is solving the problem and going home with the satisfaction of learning something new every day.

Some tips from my experience

Everything in life is relative. Whatever worked for me may not work for someone else. But here are some tips that may help you avoid some mistakes and can fast forward your career.

The most basic knowledge

When I first started coding as a weekend hobby, I did not understand how my code really worked inside a computer. I just typed some random Python code in a terminal and got a basic program running. I skipped an important part: understanding how a computer works.

You can become a programmer without knowing too much about paging, or even not fully understanding what computer networking is all about. That's ok. But you must have at least the basic knowledge on those topics (and the whole computer architecture) to become a professional software engineer.

Seek a mentor

IMHO, the easiest way to learn anything is by being mentored by someone good at the thing you're trying to learn.

A good example is my experience learning how to play the violin. Without my mentors and teachers, I would have struggled a lot to understand even the most basic techniques.

When I joined IBM, I rushed to find a mentor. He helped me to cut straight to what I had to do, helped me with my questions, and shared experiences from his own career. It's valuable knowledge that you won't find easily by just googling stuff.

Keep the momentum

Whatever path you take (college, bootcamp, self-taught) it's important that you keep practicing what you learn. Don't just watch tutorials or have a class and go home to watch a movie. You need to practice what you've just learned in different contexts.

Reinforcement is key for the learning process. Practice makes perfection. So, take some time to build something with what you learned. It can be anything: from a simple to-do app to a tic-tac-toe game. Practice, practice, practice.

Landing a job

OK, now you know what you should learn, where to learn it and more. Once you feel comfortable with it and think you're ready to try it for real, you got to apply for some junior positions (or even an internship).

Having your skills assessed by someone else is never easy. Facing a lot of behavioral and technical questions is not as easy as eating ice-cream. But hang in there, you've been preparing for that. Every experience counts towards the end goal: become a Software Engineer.

Create something you can show

You probably don't have a previous job experience in your Resume that relates to the position you are applying to. That's fine. A very good alternative is having some projects you have worked on (alone or not) that can showcase your skills.

It can be literally anything. From your own website, to an app that allows people to upload cooking recipes with a voting system. Anything that can show to the interviewer you know the basics and have applied it in something real.

I recommend making these projects open source on Github once it's easier for people to find you from there. I've received job offers that referred to projects I've published there.

Job search

This is the most annoying step for me, but necessary. You can use any jobs platform for that. From LinkedIn to Indeed. What it's really important is for you to know what to look for.

When reading a job posting, avoid focusing only in the "technical requirements". They are important and aligning your skills with them is key. But you also need to feel connected with the company. It doesn't need to be a soul mate kind of job, but remember: the first impression matters and working in a comfortable place is important to your mental health.

Seek information about the company on sites like Glassdoor. Read experience that others had while interviewing with them. If you cannot find the company in there, try to connect with some current/past employees from the company on LinkedIn and ask them how is the day to day like there. There's a pretty good chance you'll filter your options to the best matches.

Interview preparation

You've done your search. Applied to jobs and got some interviews. Now it's time to rehearse what you've studied and practiced.

Every single company has a different interview process, but they all share some common patterns. I'll cover here what I've seen in the interviews I've taken part. Your interview may vary, but it's up to you to ask the recruiter for details about what to expect from it.

Here are some of the things you should practice:

  • Algorithms and Data Structures: as mentioned before, this is the fundamentals of Computer Science. Understanding it is essential to produce good, performant and scalable software. You can start without it, but don't avoid it. freeCodeCamp has a great (and FREE!) course that will introduce you to algorithms and data structures, using Javascript to code the examples.
  • Systems Design: let's recall that you are possibly applying for a junior position or internship. Therefore, systems design questions are not so common, but can occur depending of the company. Systems design, in a nutshell, is the process that defines all elements, modules and architecture of a system. A dummy description would be: it's the set of rules and best practices to design a system that works. This repository has a comprehensive list of links you can use to prepare for these kind of questions.
  • How the Web works: most of today's software is deployed and available in the web. Understanding how the Internet works makes your life easier when developing software for it. This article from Mozilla is a good start point.
  • Testing best practices: although not very common, it's possible that interviewers will ask you some questions about how to test software. Probably they won't ask you to implement it, but be ready to do so if required. Try to implement some tests in the projects you have in your portfolio. Showing that you know how and when to write tests is a very good thing during an interview. It can differentiate you from other candidates.
  • Coding in a whiteboard: let's face it, it's scary to look at a blank whiteboard with the interviewer looking at you waiting for some solution to pop out from your mind. I've been through it. However, with practice and some deep breaths, you'll get through it. Some companies are ditching this kind of tests, but most companies I've interviewed with still use whiteboard coding to evaluate your coding skills. I recommend buying and digging into the Cracking the Code Interview book. It's well organized and will give you a good grasp of what you can face during a whiteboard code challenge.
  • Company's culture: this is basic, like any other interview in any other industry. Do a little research about the company you're applying to. Don't just arrive at the interview without even knowing what is the company business, who are their customers, etc. Be prepared to ask questions about the company. It's a good sign that you are really interested in working with them.

Conclusion

Working as a developer is exciting! I love doing it on a daily basis. I get tired, of course. But every day there is a new challenge, and I enjoy the dynamics of it. I hope this article gives you the basics to start and that you can find your way into Tech. It's never too late to start. Good luck and happy coding! ๐Ÿ˜„

Cover photo by Hack Capital.