As a software developer, you’re the person in the house who’s supposed to know how every technological gadget works.
Microwave’s broken? Juliette will fix it. Wi-fi is flaky? Juliette will know.
Truth is, software developers don’t usually deal with fixing machines or setting up routers. In short, we build and maintain the applications you use every day, whether it be for your browser, your phone, or even a Tesla.
In Engineering, we like to think of coding as providing the most efficient solutions to your favorite problems.
In an era where bots, services, and platforms are working for you while you’re asleep, it’s not surprising that code is one of the best types of leverage we can have.
As long as the instructions are well-explained and clearly scoped, a computer, your brain, and wi-fi can make a product that is global, scalable, flexible, customizable, and delivered to your screen in seconds.
To give you some context, applications will consist of 3 main parts: databases, front-end, and back-end.
Databases are how we keep your data persistent. Storing your data in a database is what allows your information to live, way after you've closed the app or lost your phone. You can imagine this to be like an Excel sheet on steroids.
Front-end is what you see. It's the typography, the color scheme, the style, and the layout of the application. As a user, this is all you know and experience.
But behind the screen, in the depths only developers will go, lies the back-end: the unspoken real mastermind connecting it all.
Back-end is the kid in charge of grabbing the data from the database, performing some (often crazy) actions with it, and then sending it back to the front-end so the user can interact with it. It’s the cool kid on the block with algorithmic super-powers.
In fact, playing with algorithms is a huge chunk of what developers do on a daily basis.
You can think of algorithms as an instruction set we give the computer so it does what we want based on the data provided. That’s why having structured, quality data is so relevant. The data we have directly impacts the outcomes we’ll receive.
The other big chunks of the job are debugging (finding and fixing errors) and acting as technical translators between humans and machines.
Although stereo-typically math-y, software development is as much a communication job as any other.
The better I can communicate to computers what I want, the less buggy my code will be. The clearest I can communicate the complexities to the client, the more respectful and aligned our relationship will be. The more explicitly can I explain the features to my developers, the cleaner and better quality the end result will be.
Debugging and technical translations are often intertwined because a lot of our job is to describe real-life objects, in the most detailed way, so a computer can now play with them in a virtual manner and bring solutions to life. And when that doesn’t happen, it usually means we’re full of bugs, like a dirty house that hasn’t been well-maintained.
“One man’s magic is another man’s engineering”. — Robert Heinlein said.
This is what makes the career so exciting: being a magician requires huge amounts of creativity, curiosity, and inescapably, research-skills. Half of it is what you know, the other half is what you can figure out.
Technology changes so fast, Software Engineers have to be fast learners, early adopters, and fearless experimenters. We question and test hypotheses until we reach the origin of bugs and construct innovative, performant solutions. We work with data types and error messages, consoles and browsers, Google Google Google, and Stack Overflow.
So.. What exactly is it that Software Engineers do?
Well, we solve problems. We build and design creative solutions to previously unsolvable issues through software. And to quote Robert Heinlen, we often do magic as well.