Five Things About Software Engineering I Wish I Knew When I Started
Recently I was interviewed for a video where I talked about how fulfilling being a software engineer is. Since that video has been released, I’ve been contacted by many aspiring developers with questions on how to be a Software Engineer (or a software developer, or a programmer, whichever you prefer). Most of them are classic questions, like which languages to learn first, which books to read, how to land an interview and so forth. You get the idea.
However, as informative as answers to these questions can be, they don’t paint the full picture. There are some insight about software engineering that I think gets overlooked - which are more important than what your first programming language is.
Here are some of those insights I have gathered over the years. Nobody told me these when I’ve first started programming, but I wish they had. They are more suited for students and junior developers, but hopefully more experienced programmers will also find something worthwhile here.
Your Biggest Skill Is the Ability To Learn Fast
As a software engineer, your job is to solve problems. It isn’t to write Java, or Python, or any other language. It is to solve problems. If solving that problem requires you to learn a new language, framework or library, then you should be able to do so in a fast and efficient manner. Do not let your tech stack rule over you. Some tools are better suited for some jobs then others. You wouldn’t use a fork to hammer a nail, and you wouldn’t use a hammer to eat pasta.
This is the single best skill a programmer can have, and the best way to get better at this is to learn new technologies as much as possible. You do not have to be a pro at each one. Work on them in your free time, or even better, try to incorporate some in your work. Curious about functional programming? Check out that Haskell tutorial after lunch break. Want to learn more about Django? Create a website for your cat. Over time, just like a muscle that is being exercised, you will get better and better at learning.
Programming Is the Easiest Part of Software Engineering
If you’ve become a software engineer just so you won’t have to deal with people, boy have I got some bad news for you. You will have to deal with people constantly. You will deal with your boss about estimates. You will deal with product managers about which features to add or remove. Most importantly, you will deal with your colleagues. Software development is a team effort. If each programmer is a gear in an engine, then good communication is the lube between the gears, keeping the engine clean and running at optimum efficiency. Programming itself - that is the easy part.
You need to be able to communicate efficiently, and you need to be approachable and sociable. This will also help you during job interviews. Computers may be deterministic and logical - but unfortunately, people aren’t.
Your First Job Is Very Important
There is a moment in every programmers life when they open their first big project in their first job. It is overwhelming. It is completely different from the small personal projects they did. It contains tons of classes. It uses libraries they have never heard of. It is like a jungle- a vast, confusing landscape, hard to navigate even with a map, with parts that have not been touched for a long time.
This moment I’ve described is the first pivotal point in your career. It is your transition from amateur to professional. It is one of the many learning moments you have in your first job. In a good first job, you will be learning every day, many of them you just can’t learn over the internet.
The first two years of your career are therefore very important. Make sure you get into a good with a team that takes pride in their work. Optimally, you should be the least knowledgeable person there. I personally was very fortunate to start my career in an amazing company with some of the best programmers I have ever met. Those first two years at said company shaped my entire career.
Do Not Get Comfortable
You cannot get comfortable in this business. The software industry is moving at a break-neck speed. Every day, some piece of information you know becomes obsolete, and every day a million more libraries and frameworks get released. New trends and technologies arise and fall monthly. Five years is a crazy long time in software engineering- who even talked about machine learning five years ago? Or the blockchain? Or IoT? The people who made the time investment to learn them back then are now reaping the benefits, since they have five more years of experience than you.
Furthermore, if you’re a front-end developer - Talos help you, because it is ten times worse there. Libraries get deprecated faster than you can read their Getting Started tutorials.
Spend an hour every day reading news and articles. Keep up to date on new technologies. /r/programming and Hacker News are good for this. The fact that it is so easy for your skills to be out-of-date is one of the biggest reasons for programmers burning out. Which bring us to our last point;
You Will Never Learn Everything There Is To Know, So Don’t Bother
You will get overwhelmed from time to time.. And that is fine. Nobody knows every small thing that happens from when you press the power button on your PC to you typing “funny cat videos” on YouTube. There are just so many complex components involved that it’s impossible to learn them all. And if you think we have it bad, this is just the beginning. We are still in the infancy of software engineering. There is so much more to come.
You will have to come to terms with this fact. Don’t stress about it. Don’t try to learn everything. Do try to learn as much as possible. Focus on stuff that you enjoy learning. Give yourself a break once in a while- don’t touch a computer for a week. Most importantly, try to have fun. It is much easier to be a software engineer when you’re actually enjoying your work.