Some important, everyday things to know about a job in Software Development:
- To be a good developer, you need to love learning new things, almost constantly. Many trades don’t change much from year to year, but in development there are so many new things. There are new technologies to build things for, like desktop software, mobile software, web-based applications, software for embedded and smart devices, gaming consoles, virtual reality — the list of things out there that needs software to run grows every day. Also, even if you change companies to a job doing almost the exact same thing, the other company will probably use different tools and methods that you’ll have to get up to speed on. So, loving to learn is one of the most important everyday skills for a developer to have.
- Software development can be hard on your body. Sitting still at a computer for hours and hours, making small repetitive movements with your hands, and staring into a bright screen is not good for you. I was lucky and had an early wake up call — before I graduated college, I’d typed so much that my hands were in constant pain. I couldn’t even grab a steering wheel! These days I have found a keyboard that works well for me, work at a sit/stand desk, and take breaks to move, stretch and exercise through the day.
- Software development seems like a pretty solitary task, but it’s actually almost always done in teams and groups. Communication skills are some of the most important for Developers to have. This shows up in so many ways — writing down plans and designs, putting comments in your code so others understand what’s happening (and your future self), working through conflicting ideas between you and other people on your team, and communicating about your work to people who are less technical.
Here are a few of the things that surprised me the most when making the jump from technical support engineer to software engineer.
We discuss everything. Creating on my own I never had to hash out the reasons why I did something a certain way or justify spending time on some portion of a project to another engineer. Even in support, you were mostly on your own and drove your tickets to resolution without much outside input. It took me a while to get used to having these conversations, but now I notice more when we don't discuss things than when we do.
The amount of code you right is often far less than you would expect. My day often includes a large number of tasks, and only one of them is writing code. As a software engineer I get to help plan projects, manage stories, setup tests, build out infrastructure, consult with sales, help technical support with tickets, give presentations, run demos, and even create posts like this one. Sure, some days I write a ton of code, but many days (or even weeks) I will not write a single line. For me this was a surprise that turned into one of the best parts of my job, I get to work on some many different things, it almost impossible for things to get dull.
Sometimes you have to step away. I have found that when I am truly stuck on a problem, it is probably time to either bring in other engineers or step away and doing something else unrelated. More often than not having a new perspective can make things much clearer. I cannot count the number of times I left for the day completely stuck and the next day found a path forward within hours of walking in.
- Go slow to go fast. Take your time with things and take care in how you do them. Write your tests cases and your documentation. An hour spent on that now will save you (or someone else) days in the future.
- Speaking of "someone else"s, you're going to be working as part of a team, always. Even if you're working on your own right now, chances are that someone else will be looking after your code in future.
- Look after yourself. This job will take can take its toll on your physical and mental health if you let it. Get away from your desk, get some exercise, do something else :)
- You're going to be a lifelong learner. Keep reading, keep learning, keep experimenting. The people I know who have stopped doing that have also stopped progressing in their careers and are stuck in roles they no longer enjoy, and their livelihoods are more and more bound to the one job they have, so if it goes away they're in trouble. They've lost their mobility.
*You will constantly need to adapt/learn new technologies. As mentioned many times by the other people, our field changes constantly. Especially in the world of Software-as-a-Service (SaaS), sometimes you aren't writing code in a language you are familiar with. I often have to write code in languages that the SaaS companies made up for themselves. I can't count on my hands how many languages I've written in thus far.
*You will be frustrated. There can be stretch of days when your life is going to be difficult. Just remember you are not alone and there is a whole community to help. Whether it is your co-workers or just the rest of the world. We all have those bad days, we just have to get through them.
*As mentioned by others; keep your own well-being in check. I workout with some co-workers during lunch to keep our physical well-being up. I also make sure I take vacation when I can and practice mindful meditation; to keep my mental well-being up.
Eventually, you'll get good at not just doing things, but learning to do new things. The idea of jumping in head first to a new language or framework won't be daunting.
At that point, the challenge shifts, and you end up having to interact with other people and teams more often to get your work done. It's not enough to simply be good at building things, you need to be able to argue your viewpoint successfully.
Software development is changing really, really fast. I would suggest you think about what aspect of software engineering interests you. For instances, web site design and how to make them better is an example. Another, very different, is software the runs a mechanical product (think of a robot).