At Gunner Technology, we think software development is the best. But that doesn’t mean there isn’t a whole lot of “worst” when it comes to being a software developer.
One of the best things about software development is that you can see a finished product almost instantly and people can start using it right away.
It’s not like building a cathedral where it might take a hundred years. Or even like building a house where it might take six months. You can start a project in the morning and have it ready by dinnertime for people to try out, which is pretty incredible.
You might think going back and looking at old code that you’re written would be a chore.
(You might even think it would be an embarrassing nightmare seeing how bad the code you used to write is.)
But one of the best things you get to do as a software developer is to refactor your code.
Because you get to see just how far you’ve come and how much you’ve learned in the time that’s passed since you initially wrote that code.
When refactoring old code and realizing that you’ve internalized new, better ways of doing certain things, you’ll start to appreciate just how much you’ve learned.
It’s tangible growth, and it’s incredibly motivating.
And it keeps you going long-term, because stuff that would have taken days to figure out will now only take you a matter of hours. That frees up a lot of time to learn even more, and the cycle continues on.
One of the best aspects of software development is you only need a laptop and an internet connection.
Grab your MacBook Air and tether it to your iPhone and all of a sudden you can work from anywhere on the planet with a data connection.
It’s honestly one of the greatest things about being a software developer.
There are going to be days when you don’t want to go into an office. You’d much rather work from home. As a software developer, you have that luxury (assuming your company allows it).
You can work from a sports bar. You can work at a music festival. You can work on the beach. You can work practically anywhere in the world.
That’s a huge luxury.
If you’re a sucker for novelty like us, this is a huge plus.
As more and more expertise is outsourced to third parties, a la AWS handling pretty much every level of SysAdmin responsibilities for you, you then get to spend that freed up time investigating new tools and technologies to use to improve your day-to-day workflow.
Instead of worrying about setting up and managing your own servers, you get to offload that responsibility onto someone else and leverage their wealth of expertise. (They’re going to do it better than you ever could because that is all they do – they spend all their time thinking about it.)
So you get to experiment with different frameworks, for example, or try out different programming languages.
There’s a ton of time devoted to just trying stuff out and figuring out what the best solution is.
But that’s not all sunshine and roses, as it turns out.
There is a well known paradox with choice. As the number of choices increases, the anxiety faced while making that choice also increases.
(This was highlighted by psychologist Barry Schwartz in his book The Paradox of Choice.)
So there is, in fact, a paralyzing effect when faced with dozens of technology choices.
All too often, software developers have a dozen (or two or three dozen) options to go with when deciding what technology to use for a given project.
It’s easy to get overwhelmed by that.
The best solution is to take a meta approach and come up with a list of attributes that a given technology has to meet. Then simply grade your options, choose a couple of the best, write some code with them, and see which one your prefer.
There’s probably no wrong option (unless you’re choosing a technology that has a realistic chance of disappearing in the near future), so you might as well pick something and go with it.
Better to do that than to freeze up in order to avoid making a decision.
One thing that adds to the struggle to choose a technology is the lack of objective opinions about different options.
Not only are there no objective opinions, but there are subjective opinions about technologies held with a religious fervor.
Good luck having a calm, rational discussion about technology options.
If you want to know whether MySQL or PostgreSQL is better, be prepared to hear that MySQL is a “steaming pile of garbage” or that PostgreSQL is for “complete idiots who should probably be flipping burgers instead of writing code”.
That’s the level of discourse you get when talking about technology.
So, again, you’re sort of on your own when it comes to making a decision. Choose a couple really good options, try stuff out, and pick the one that seems to work best. That’s all you can do.
One major headache you’ll deal with with software development is so-called “purists” who feel that there is only right way to do things and that anything that doesn’t do it their way needs to be fixed.
They’re sort of the Spanish Inquisition of the software development world and they’re frustratingly abundant.
And the worst part is, they prioritize correctness (as they define it) over stability.
They will happily make sweeping changes to an open-source codebase that you’re using that completely breaks your application in order to have the code meet their absurd standards of perfectionist quality.
They don’t care about your code. They only care about their (insane) ideals.
And it’s not just code.
So many software developers who use particular project management methodologies follow those methodologies to the letter even when certain practices are inefficient or don’t actually work in their particular situation.
They take the sets of rules as gospel and follow along with them unquestioningly.
You can’t say, “I know it says to do this, but we’ve seen no tangible benefit from doing it and it takes up fifteen minutes every single day.” That’s blasphemy!
They’re purists through and through, and all that matters is their dogmatic obedience to doing things “the right way”.
Hardware is a nightmare.
First off, there are so many devices out there today. So. Many. Devices.
And as a software developer, you’re expected to support every single one without fail.
It’s an absolute impossible demand, but you’ll face it anytime you build something.
Secondly, your individual hardware is going to frequently break, often at the worst times.
You’ll have a demo in fifteen minutes and your MacBook will hard lock, which means you’ll need to reset the PRAM, which means it won’t boot back up for another half an hour. That kind of thing happens all the time.
(And it’s not really the device’s fault – as much as you’ll use your hardware, of course it’s going to break down, but that doesn’t make it any less infuriating.)
Finally, as a software developer, you’ll be expected to be a pseudo-Geek Squad of one.
Everyone and their mother (and your mother) will ask you to fix their stuff.
If they can’t figure out how to put their cell phone into low battery mode, they’ll come to you.
If their email stops syncing to Outlook for some reason, they’ll come to you.
If their latest Windows update is frozen (which happens approximately 110% of the time), they’ll come to you.
Just prepare yourself to pretend to be a hardware expert, because that’s what everyone will imagine you are.