Group B - November 8 - Introduction to Software Development

This is the first Group B meeting of Woodlands Computer Science club!

Overview

What is Software Development?

Software development is the process of designing, programming, documenting, and testing software.

Software is a set of instructions that determines what your computer hardware executes. All of the programs you use are software. Your web browser, games, applications, and even operating system are all software! Software developers created all of these tools that we use every day.

Software is typically written in a programming language. Over the past three weeks, we’ve introduced you to one example of a high-level programming language, Python.

Software development is more than just programming. It is also necessary to plan out and design your application before writing any code. This might involve talking with the end user or the customer. In group settings, it’s also necessary to work with and communicate with team members on what specifically needs to be done.

There’s also a continuous process of building and testing that goes on through this development phase. After software is deployed and made available to customers, it will then have to be maintained by the developers, who are also responsible for any bug fixes.

You can see that there’s a lot more to software development than just writing lines of code! That’s why software project management and good development practices are so important.

Development Practices

There are many development practices programmers tend to follow when working on software projects. These practices strive to improve efficiency when working and allow for easier, quicker communication.

In the real world, large companies might have to organize hundreds or thousands of developers to work on the same application. In this case, having effective and consistent development practices is essential for progress.

The process of building a software project is sometimes called the system development life cycle or SDLC.

The SDLC is often described as having seven stages.

  1. Planning Stage
  2. Analysis Stage
  3. Design/Prototyping Stage
  4. Development Stage
  5. Testing Stage
  6. Implementation/Integration Stage
  7. Maintenance Stage

(Pictured is an alternate version without an Integration Stage and with a few different names)

Each one of these stages is vital to the process of creating software. Because the “life cycle” of software is so important, different methodologies and practices have been introduced to make this cycle more efficient.

Some of these practices may seem confusing or abstract to people who haven’t worked on large projects before. Don’t worry if you don’t have any experience with software development. Group B will start the year off with a somewhat large project you can follow along with that is totally beginner-friendly.

Agile Practices

Agile software development was created in reaction to the popular development method of the 90s, the waterfall model. The waterfall model was criticized for being overly planned and micromanaged.

In 2001, a group of programmers wrote The Manifesto for Agile Software Development, including 12 principles for software development.

  1. Customer satisfaction by early and continuous delivery of valuable software.
  2. Welcome changing requirements, even in late development.
  3. Deliver working software frequently (weeks rather than months)
  4. Close, daily cooperation between business people and developers
  5. Projects are built around motivated individuals, who should be trusted
  6. Face-to-face conversation is the best form of communication (co-location)
  7. Working software is the primary measure of progress
  8. Sustainable development, able to maintain a constant pace
  9. Continuous attention to technical excellence and good design
  10. Simplicity—the art of maximizing the amount of work not done—is essential
  11. Best architectures, requirements, and designs emerge from self-organizing teams
  12. Regularly, the team reflects on how to become more effective, and adjusts accordingly

The methodology was comparatively less rigid and more iterative than the Waterfall method, focusing on quick development loops or sprints. The practices are adaptive, not requiring heavy planning or perfect adherence to each stage of the SDLC.

The SDLC stages don’t have to happen in perfect order.

Scrum is a closely related framework for teams of ten or fewer members. Work is broken up into short-term goals, completed within sprints of one or two weeks. Progress is assessed daily in short meetings called “scrums”. At the end of each sprint, review is conducted. For example, there could be a two week sprint with daily scrums of fifteen minutes, then a longer two-hour review after the two weeks.

DevOps

DevOps is a set of practices complementary to Agile software development. DevOps combines software development (Dev) with IT operations (Ops) in an attempt to shorten the system development life cycle. The DevOps movement began sometime around 2007.

The following is a common explaination of DevOps:

Under a DevOps model, development and operations teams are no longer “siloed.” Sometimes, these two teams are merged into a single team where the engineers work across the entire application lifecycle, from development and test to deployment to operations, and develop a range of skills not limited to a single function.

In some DevOps models, quality assurance and security teams may also become more tightly integrated with development and operations and throughout the application lifecycle. When security is the focus of everyone on a DevOps team, this is sometimes referred to as DevSecOps.

These teams use practices to automate processes that historically have been manual and slow. They use a technology stack and tooling which help them operate and evolve applications quickly and reliably. These tools also help engineers independently accomplish tasks (for example, deploying code or provisioning infrastructure) that normally would have required help from other teams, and this further increases a team’s velocity.

Group B Plans

Development practices are meant to help developers make real software, so let’s work on some!

Over the next five Group B meetings (before winter break), we’ll be developing a Discord bot using the language Go.

The plan for Group B is as follows:

  1. Development Practices <– You are here
  2. Intro to Web Development
  3. Introduction, planning, development cycle
  4. First bit of code; creating core functionality
  5. Connecting bits and first complete iteration
  6. Deployment and things to iterate and improve on

We hope to see you back for next week’s meeting as we continue our journey through software development!