In a nutshell, we can shallowly define software development as the process of designing, creating, documenting, and maintaining software applications.
In today’s world, software is literally everywhere. It encompasses everything from the programs you interact with on your computer to the software powering your home appliances. Fun fact, I bought an impact wrench a few months ago that connects to a mobile application to calibrate the torque settings.
Software helps to entertain us, solve our problems, and changes how we interact with the world around us. This is a crazy world these days and software is becoming more of a core component in our lives with every passing day.
Our society has an extremely high demand for software solutions and thus a high demand for professionals, entrepreneurs, and hobbyists alike to develop that software. The need for software development is not going to evaporate any time soon, so let’s explore.
Who develops software?
There are many roles that exist within the wide scope of developing software. The below list isn’t exhaustive but includes some common roles you will see at a software company.
Programmers/Developers – those that write the code for the software.
Project/Product Managers – leaders that help their teams complete projects on time with high quality.
Quality Assurance – those that test the software to ensure no major issues exist.
Stakeholders – the people who are directly affected by the project such as company executives and even end users at times.
That’s not to say that to create software that you must fall into one of the above roles. There are even independent developers and solopreneurs who wear the hat of every role on the above list.
Roles defined within the industry can get very creative and can be very different from one organization to the next.
How does software get developed?
Software Development Life Cycle
A phrase you will hear quite often especially when interviewing and/or working at a software development company is the Software Development Life Cycle (SDLC). You can think of this process as an iterative approach to developing high quality software.
Everything from the planning to the maintenance of the product is part of the SDLC. The below image is an example of what the SDLC may look like.
The example above consists of several connected nodes forming a loop. We start the SDLC process with planning and analysist and end at maintenance.
The cycle is an ongoing process that simply repeats itself for the life of the product. The cycle only ends when there is no longer any interest in the product.
Taking a deep dive into the software development lifecycle is out of scope for this article. For now, you should just be aware of what it is and why it exists. I will cover the SDLC a bit deeper in a future post.
Project Management Methodologies
It can very well be a difficult and time consuming series of tasks to design, implement, test, and deploy a quality software product. As such, most projects rely on an organized series of steps to managing all of the tasks required to get a new feature or product out the door. There are many different methods to manage the project based around specific design philosophies. In this post, we’re going to briefly discuss the Waterfall and Agile methodologies.
Let’s first take a look at the Waterfall methodology. Often referred to as the “traditional” methodology to developing software, the Waterfall method has been around for a long time. It describes a linear approach to developing software whereas each phase of the process must be complete before moving on to the next phase. Below is an example of what the Waterfall methodology looks like.
As we can see here, majority of the research and requirements gathering is done up front. Then we plan, implement, test, and maintain our product. The design philosophy around this method is akin to that of the “measure twice, cut once” philosophy.
While this method has done well for many projects over the years it has some drawbacks that may make this approach unsuitable for your project. The main issue with this methodology is going to be with its rigidity.
Since this approach is a linear progression, it is much more difficult to go back to a particular phase when requirements change. Resulting in a significant increase in the overall cost to implement the product as well as reduce the efficiency of the development process.
If you have looked up jobs in software development on any online job board in recent years, there is a huge buzzword that you’ll see on nearly every job post. Agile, it’s everywhere these days and for good reason.
In software development, requirements tend to change, sometimes quite frequently. In order to deliver high quality products to our consumers, we need an iterative approach so that we can adapt to the needs of our users and their requirements.
This is exactly what the Agile method encourages us to do. It allows us to react to new information making the process much more adaptable and less rigid. Take a look at the graphic below as compared to that of the waterfall method.
While the Agile approach is very popular and trending these days, that’s not to say that we should just arbitrarily apply Agile principles to our development process. The takeaway here is not that the Waterfall approach is inherently wrong and should be avoided, but rather that we have options when it comes to developing software.
Some projects may benefit from the rigidity and ‘due process’ approach that the Waterfall method provides. Other cases, we must be more flexible. We must always consider the needs of the project and let those needs guide our decisions when choosing a methodology.
Want to know more about being Agile? Check out the Agile Manifesto.
What is a software developer?
Individuals who write code can be referred to as many different job titles in the industry. For example, programmer, coder, developer, and engineer are just a few of these titles. While, sometimes these titles can actually differentiate between job responsibilities; more often than not, they tend to be used interchangeably to mostly refer to the same thing, as someone who develops software.
The term I prefer most is Software Developer as it better encompasses the responsibilities of the role. Software developers don’t just write code. Often the responsibilities of someone who develops software requires them to participate in all phases of the SDLC (remember this acronym from our conversation above?). We interact with stakeholders to gather requirements; we design, implement, test, and maintain code; it may even be our responsibility to deploy the software.
The point is that software developers typically require more skills than just the ability to write code. Let’s take a look at some of the technical and non-technical skills that a software developer likely have.
General computer science knowledge (such as data structures and algorithms)
Understand one or more programming languages
Technical and non-technical communication
These are just some of the skills that a software developer will possess. Over time, our skill set continues to expand as we learn new skills and new technology is at our disposal.
Who can become a software developer?
So let’s address the elephant in the room. Literally anyone can learn to develop software. This statement might spark heated debates, but I thoroughly believe that every skill required for software development can be obtained by anyone with enough desire and willpower to learn it.
While software development can require highly technical skillsets and focused soft skills, the information to learn these skills are widely available to anyone who wants to access it.
Let’s take a look at a couple paths that people often choose when taking the leap into a career in software development.
Computer Science/Engineering Degree
Getting a bachelor’s degree in Computer Science or related field is probably the most traditional way of entering the software development industry. This path offers a comprehensive study on software development (as well as many other related topics) and helps build the knowledge and skills required for an entry level position upon graduation.
A computer science or engineering degree is typically achieved in about 4 years; which is a reasonably short period of time. This is arguably one of the best approaches to starting a career in software development.
However, a degree in Computer Science can be very expensive. Even more so, if you need accommodations for room and board. Not everyone may be in a position to go this route and having a degree does not guarantee a job after graduation. It is up to the student to ensure that they comprehend and can utilize the information provided throughout their college education.
Another viable route is that of the self-taught developer. Information has never been more accessible than it is today and there is a plethora of resources that we can use to help us learn to become software developers.
There are free resources such as YouTube channels, websites, and online courses as well as affordable paid resources consisting of entire learning paths to help direct our learning. But don’t get me wrong, being a self-taught developer is hard work.
You must be motivated and disciplined enough to learn the material. While this route is much more affordable than a college degree, there is no one holding yourself accountable for your actions but you.
So tread lightly.
A career in software development is both a challenging and rewarding path. It is one of the few industries where opportunities exist for nearly any background. One where in many cases capability outweighs economic advantage.
What are you thoughts on software development? Let me know in the comments. If you enjoyed this article feel free to show the love and subscribe to our news letter.
Until next time.