Software is everywhere these days: phones, TVs, cars, vending machines, coffee makers, and pet toys all offer some software driven features. All of these products have been created by groups of people that have organized with the goal of making electronic signals behave in a desirable pattern. In short, software development is the overall process involved when taking a software project from conception to production delivery.
This process encompases the design, documentation, programming, testing and ongoing maintenance of a software deliverable. These various aspects are used to create a workflow pipeline, a sequence of steps that when followed produce high quality software deliverables. This pipeline is known as the Software Development Lifecycle.
The art of software development has many deep schools of thought. The following discussion is not a comprehensive guide, but a overview of the most recognized techniques. Software development today is generally executed with a complementary agile project management process. This process is in-effect during steps 3 and 4 from the Software Development Lifecycle.
A regular planning period is conducted in which expectations are set, dependencies are addressed and tasks defined. The tasks are executed and adjusted during a sprint period. During the sprint period these tasks are updated as they progress to completion. Specialized organizational software for task tracking, like Jira, is used to monitor the state of individual task within a holistic sprint view.
Software development has a surprisingly rich history. The next section is a brief timeline showcasing the evolution of software development methods through the ages.
In 1936 Alan Turing invented the Turing Machine. A device which has two primary components: a strip of tape divided into cells and a head which points to the tape cells. The device can read or write to the tape cells and move the head to the next or previous cell. Turing later published a paper: “On Computable Numbers, with an application to the, which became the foundation of computer science. In the paper Turing presented that a Turing machine could solve any problem that could be described by simple instructions encoded on a paper tape. One Turing Machine could calculate square roots, whilst another might solve Sudoku puzzles.
The 1990s saw rise in management quality initiatives. Continuous Improvement methodologies like Six Sigma encouraged strict guidelines for quality assurance. TQM (Total Quality Management) and Capability Maturity Model are methods under the Six Sigma management.
The 90s saw the dawn of open source software. The GNU/Linux project brought about completely disruptive distributed team workflows and methodologies. Git was created to help manage these new distributed projects. Asynchronous communication over email and IRC.
In 2001 a group of software developers frustrated with the existing cumbersome management system, gathered and published the the agile manifesto. The ‘Agile’ method is a largely popular modern software development paradigm. Agile arose out of frustration for the ‘monumental’ methodologies of the past. Methodologies like Waterfall and TQM were born in the slower moving, less forgiving industries of physical goods manufacturing.
Software is a much more forgiving and fluid end product than manufacturing. Agile takes advantages of these properties and provides a complementary management methodology. Agile has been the driving force for development of the previously discussed features like CI/CD, Feature flags, and Microservices.
Adoption of Agile development practices has given rise to new disciplines of software development. DevOps is a modern field of software development which focuses on support and automation for supplementary software development tasks. DevOps teams are primarily tasked to support and improve software developer efficiency. DevOps teams build tools to automate and maintain mundane software development chores like infrastructure maintenance.
Agile has been fantastic at optimising the development process. It has been so successful that Agile ideas and culture are continuing to expand to other areas of business like design and product development.
Learning software development can be a great exercise to open up new avenues for career growth. Being able to identify and discuss technical software development topics can improve your toolset in a software development organization.
A basic knowledge of software development is becoming more and more valuable. Understanding the design and implementation of how software works can help an individual operate more efficiently in personal and work life. Most modern business operations have some level of human-computer interaction.
One of the best exercises for getting started is to observe, or participate in, a successful open source project, such as Git. These projects maybe identified from software you already use and enjoy. They will have guidelines to contributing and have open message forums to follow along with discussion and execution. Additionally, reading this document is already indication that you are ready to take the first steps and get started!
Software development is a technical craft with a steep learning curve and deep history. It can be intimidating for outsiders and newcomers to approach. Don’t let this deter you from learning either the basics and/or higher level topics—there are many resources online that offer guides on learning Agile development.