What is software development?
At the most basic level, software development is telling a computer what to do. Solving a problem using technology. Sometimes that problem is managing a million accounts, sometimes the problem is creating a way for people to be entertained. When the problem changes, you have the opportunity to find a new solution.
In the abstract, it is as if a magic genie had granted a wish of absolute control over the digital world. As technology rushes in to every aspect of our lives, this broadens the reach that programmers have and places they can influence.
The thing I love the most about writing code, is knowing that when I have done it right, something I created can be used by myself and others, even when I’m not around (or for that matter, when no one is around, running automatically). Or that I have created something that makes someone else’s life easier, or more entertaining. My goal is never to “replace” a person, but to free up time for more complicated or interesting tasks.
In a short amount of time, programming has resulted in a huge shift of what is possible. Ideas can be shared instantaneously, people can share their creativity to a worldwide audience, and so many barriers have been taken down.
A computer can do a lot of things very well, but the human brain can do so much more when it isn’t worried about small details, or keeping track of mundane tasks. If I am doing the laundry, I can concentrate on something else if I set an alarm, rather than constantly checking the time. If the washing machine was network enabled and connected with my mobile device, perhaps there would be an app that told me when the washing cycle was done, so I wouldn’t even have to remember to set an alarm.
As an analogy, using a computer is like reading, and software development is like writing. The difference between going to a concert or sporting event, and actually being on stage or in the game.
What does a software developer/programmer do?
The software development industry has a huge range of options. If you watch a movie, at the end there is what seems like an endless list of the people that contributed to make the movie. (some of those people are programmers!) Development is very much like that. In general, the SDLC (“Software Development Life Cycle”: Wiki) goes something like this:
0.) Someone has an idea
1.) Gather requirements, what are the details about what it is that should be accomplished?
2.) Figure out what technologies will be used, and what skills are needed, try to estimate how much time will be needed.
3.) Create the thing! Create documentation for users, and for the programmers that come along later.
4.) Run tests, to make sure that all the pieces work like you want them to.
5.) Send the thing out to be used (this is called a release).
6.) Think of new features to add, starting the process over.
This process has many variations. And different types of programmers are needed in all of the steps.
1.) Certain types of people with development experience help guide the process of gathering requirements, to make sure the idea someone has, can be accomplished.
2.) Someone with a broad range of technology experience is critical here, for making sure the right pieces are used, and realistic deadlines are created.
3.) We will come back to this one.
4.) There is a whole specialized industry of software developers, who create applications that ONLY make sure that other people’s applications work the right way. They figure out ways to test every piece, over and over again, very quickly to look for problems.
5.) If you think about the latest app you downloaded to your mobile device or computer… How did it get there? By another program whose job is to deliver applications. Supporting different distribution channels can affect how you create an application.
6.) Both in tracking new ideas, as well as managing the whole project, is yet another specialized industry of content management.
What about #3 you ask….
This is where the majority of software developers are hanging out. But even in here, there is a huge range of possibilities:
- Front End: Web
- Front End: Desktop
- Front End: Mobile
- Front End: Graphics such as 2D, 3D, and VR
- Back End: To all those front ends above
- Back End: Database, storing and retrieving information (with many variations based on size and purpose of the database)
- Back End: Integration (connecting different applications)
- Back End: Networking (connecting different computers)
- Reporting: Organizing vast amounts of data in useful ways
- Data Protection: Saving information long term in case of catastrophe
- Data Protection: Securing information, so only the right people can access the right things
- Localization: Making software work seamlessly for people who speak different languages
- User Experience: Making sure an application works in an easy to use way
- Efficiency: Making sure things run as quickly as possible
- Project Management: Someone who understands the challenges, and can organize work more effectively
- Technical Documentation: Those who understand the low levels of an application, and can translate that to human language
- So many more that could be listed, with deep specializations in every area…
It is exceptionally rare for a project to only have one person doing all of these tasks. Usually in that case, there are some aspects they are weak in. The end result might not look very good, or it might run slowly. Having a team with diverse skills is important.
What isn’t software development?
If you hear, “You should become a programmer because there are a lot of openings, and you’ll make lots of money!” and suddenly you are interested, it is very unlikely you will be happy in the long term. While there is a shortage of talent in some places, the type of concentration and continuous learning that is required to keep up with this career is not for everyone. Just like if I said, “There are a lot of openings in the construction industry!”, and you don’t like being outside, you probably wouldn’t pursue a career in construction, despite the number of openings/pay rate.
While you certainly can be successful as a programmer even without a passion for the subject, it might be worth the time to explore other areas that interest you more.
Also, programming is not about sitting in a corner worrying about complex math. One of the most common things I hear is, “But I’m not good at math!” There are some places that math is critical, but those are places like very specialized pieces of 3D graphics, or complex simulations (like simulating physics problems). Average software developers rarely have to use very much math. Basic logic and math is more than enough.
Give it a try! You might like it. At the very least, you may gain a whole new respect and insight to all those applications you use every day, and the work that went in to making them working every day.
Follow along as we explore new things to play with.