Wannabe Software Developer

Short HOW TO for the ones that think IT might be their place

Posted by Mateusz Gepert on March 08, 2023 · 12 mins read

I’m a software engineer with over 10 years of experience. Clearly, I do research on StackOverflow, watch webinars on YouTube, and listen to podcasts on Spotify, so one can tell that I’m “in the business.” For some time now (2-3 years?), I’ve been flooded with different content about how to rebrand myself and start working as a Junior Software Engineer. It’s weird that Google cannot figure out that for most companies, I would be considered senior, maybe because I don’t have Facebook, but I still have a profile on LinkedIn… but anyway.

You might have heard from your friends or friends of friends that someone works in one of those unicorn companies as a full-stack engineer, earning 15k per month, working in a fancy office, having paid breakfasts and lunches, remote work possibilities, challenging problems, the newest MacBook, and all. This makes a lot of people think, “how about changing my life?”

That’s all true; I’ve worked in such companies for over ten years now. I use a MacBook, and I work remotely from two different places, depending on the season. I’ve worked on pretty impressive projects and had to do non-trivial integrations and solve complex business problems. You might say, “All right, shut up, and tell me how to get there!!!”

And now the story begins.

Being a software engineer is all about two things: sitting in front of a computer and searching… really nothing more. Expect to be frustrated, shouting in your head why something is not working and later investigating why it started working. You will feel bored when someone asks you to run a SQL query, call a REST endpoint, expose an API, or spawn a microservice that you’ve been doing for ages. You will feel powerless when your great ideas will be burdened with MVP and “we need to be more agile and pragmatic.” You will forget about your lunch, dinner, and keep cold coffee on your desk, realizing that you’re working already three hours after 4 PM investigating some weird bug in production. You will turn on your predator instinct once doing a code review, asking in your head, “What kind of person should you be to do so?” You will shamelessly forget that Git blame names you as the author of the above solution.

But on the other hand, it’s the best job ever. Truly… The satisfaction that you get when you find out what was not working after hours of looking will be unique. You will feel superhuman once you implement recursion for the first time. You will fall into that mystical flow that all Buddhists are talking about. You will be proud of solutions that you create that give businesses a lot of money.

If you feel that it’s for you, let me quickly give you some guidance. But remember, software engineering is all about learning and searching.

Specialisation

It is difficult to determine the best specialization, but there are a few main ones to consider, with web development being the easiest to start with:

  • Backend Engineer (responsible for everything that is not visible to the end user but makes the website work)
  • Frontend Engineer (responsible for everything that you see on the page and for making all the backenders crap readable to humans)
  • Fullstack Engineer (for me kinda Yeti no one sees - but they say is the one that combines two above))
  • Devops (the modern-day system administrator who ensures that all of the above is accessible to the end user)
  • Data Engineer (responsible for statistics, data analysis, and KPIs, graphs, prognosis, and all data-related tasks)
  • Security Engineer (responsible for ensuring that everything that the others do does not end up in a list of credit card numbers on a darkweb forum)

Consider the web pages that you visit - what do you find most interesting? Is it the visual aspect and how beautiful or ugly the pages are? Or is it how they automate complex processes and how it all works behind the scenes from both a business (backend) and infrastructure (devops) perspective? Perhaps you are interested in data and finding patterns, doing analysis? Or are you fascinated by Elliot or Mr. Anderson?

Whatever you feel resonates with you, you should focus on coding and learning it.

Programming

We’re software engineers but in essence we do coding. So you need to know all programming concepts, but it’s not much. Variables, methods, loops, conditionals, basic data structures. You don’t need much more. You might hear also Object-Oriented, functional etc. That’s true but for the sake of next few weeks forget. Focus on programming. Looking for language I would recommend python. From my experience once you create first hello world, jump straight to scripting. Learn how to run python from console (don’t know what console? surprise it’s all about searching and learning) and create some scripts that might automate your daily stuff on computer. Just to name a few - unify naming of all your movies, music? clean up documents folder with all data that was not used for last few months, games! Just play around explore I’m sure you had plenty of boring stuff that you need in your daily job that might be automated somehow. Once you will be comfortable with basics (I recommend Intro to CS by Udacity it’s in python covers all I said - you will do your own search engine with them)

Git

The next thing to do is learning version control system. Even if you plan to be devops, data or security it’s essential to know that tool. Most popular is git - period. Register on github.com and start with empty repository. Look for quick tutorial that will explain what is branch, commit, push, pull, merge and use that since the very first week. That will be your daily work companion. I would recommend using git on console which will be also natural way to familiarise you with black window

System

Start with some linux (could be as second system) it will force you to use console!!! Don’t wait use that from the very first week. Even if you had Windows it will be beneficial will get you closer to the operating system and how it works. Learn how to identify process, occupied ports - how to free them up. How to install necessary packages, libraries, etc. If you’re Windows lover it’s okay but learn those things on windows as well. You will need that sooner than you think

Next steps

Language

Okay now you had background for all roles (I expect it will be weeks) then you need to decide where to head next. Since I’m Backend Engineer by heart and experience I’ll give you some tips what’s next for backend role ;) From my perspective in eg Poland easiest would be as Backend Engineer with Java. Don’t be scared that python things you learned are similar. Again on that Udacity is pretty good introduction to java and to object-oriented programming. Python is good as well, but I think there are more offers for Java in EU If you’re from US I’m surprised how much offers are in node. Then javascript maybe? but still I find java or python easier

Database

SQL nothing else required imho - start with mysql. Learn basics of: select, count, where, grouping by, having. You don’t need to be an expert, but clearly you’ll need to know. You can install database on your computer or learn one new thing I recommend

Containers

That’s something that grew up very widely in last decade. When I started to learn there were only Virtual Machines. Learn basic of docker. Install docker on you computer and play around. Good exercise would be instead of installing mysql on computer spawn docker image with mysql. Learn how to run that image with identical access as hosted mysql.

Framework

Since you probably will end up in web development based company knowledge of web framework would be very important. For java learn Spring and some database integration framework (but just basics - spring has pretty good build in options). Billions of tutorials you will find good for free. Since you search from beginning I bet you can already filter crap from something valuable. If you still prefer python Django or Flask

Network

Web development is all about network. Learn basics of REST. Install some client or use curl ;) and play around with some API (don’t know what API is? google it!) Remember your scripting knowledge? Use REST as next level and create scripts that will interact with public APIs. I bet you already had plenty of ideas.

Portfolio

You know all you need now. You can code with basics of object-oriented. You know how to integrate with DB. You know web framework. You know how to interact with external systems. And have basics of containerisation. You can spawn your own apps. sky is the limit really. Look for ideas and copy them you can create next todo, timer, whatever. Just create. Want to be backender and worry about not knowing FE? no worries expose neat and elegant API to your app (you don’t need UI, but check for swagger instead ;)) Push all your code to well-structured git repo with public access, and you’re done!!!

Dream job

With 2-3 small projects or one bigger you’re ready to look for a job. Expect there will be a lot of CV sending. But be patient. If you get to that point I’m pretty sure someone will hire you. Start with bigger companies like Capgemini they often offer some internship vacancies. But don’t hesitate to write to small companies too (I got my first job in small company)!