Hello To-do

Check List
Check List

Hello To-do

Intro

“Hello World” for many is synonymous with their introduction to a new programming language or technology. The simplicity and ease of implementing Hello World make it a great starting point for getting a program to execute one of its most basic actions: visually outputting a simple text message.

Once a bit of programming experience has been acquired, Hello World slowly becomes less and less useful as an intro to new languages or technology. For that reason, I would like to suggest what I think is the next step beyond “Hello World” for getting started with a new programming language, technology, or concept; the humble to-do list.

Why the To-do List

So why would the to-do list make for an excellent replacement to Hello World for more experienced developers?

Five reasons are:

  • Hello World is too simple
  • Familiarity
  • Functionality
  • Extensible
  • Up and running fast

Hello World is too simple

Once someone has gained programming experience, creating a Hello World application becomes less helpful in understanding a new language or technology. On the other hand, a to-do list allows for several fundamental application features to be implemented, including CRUD operations and primary navigation. Because a to-do list implements standard functionality found in most real-world applications, it allows a developer to utilize more of a language or technology, resulting in a deeper understanding.

Familiarity

The concept of to-do lists is very well known, so it presents a familiar application idea for people to understand. And for those unfamiliar with to-do lists, it is simple enough to grasp the concept in a short amount of time as the nature of to-do lists is intuitive to understand.

Because a to-do list’s basic functionality is simplistic, implementing a to-do list allows a developer to focus less on what a to-do list does and more on how to build out that functionality. For this reason, a to-do list makes for a great application to build when exploring new languages or technologies. The website TodoMVC is a collection of JavaScript technologies that all implement a simple to-do list.

TodoMVC Logo
TodoMVC Logo

TodoMVC is a perfect example of showcasing how a to-do list is helpful when experimenting with various technologies and languages to build the same application ultimately.

Functionality

So, what does a to-do list do that makes it a great learning tool? It has to do with to-do lists implementing the core functionality that most applications, business or otherwise, possess.

The core UI functionality includes the following:

  • CRUD Operations - To-do lists perfectly align to exercising Create, Read, Update and Delete operations given their intrinsic nature. By having an application that makes implementing CRUD operations seamless to the function of the application, a developer can focus on advanced scenarios that build on top of existing functionality which might provide more value than rehashing typical implementations.

  • Data / State manipulation - A to-do list can be implemented to utilize several methods to persist data. The simplest method is to hold the to-do items in memory which allows for demonstrating the to-do list functionality without the long-term storage of to-do items via CRUD operations. The Extensibility section discusses more data storage options that could be used to store to-do items and more between app usage.

  • Navigation - Although limited, a to-do list in its most basic form allows for simple navigation between two of the most popular views used in applications, a Master View and a Detail View.

    • Master View - This view is a collection of items, usually in a list or table format. Items in the Master view can represent every item in a system or a paged/filtered subset of items a user can select to navigate to a Detailed view of that selected item.
    • Detailed View - When an item is selected from a Master view or directly navigated to, that single item and its information, when displayed, is considered a Detailed view. A Detailed view usually offers the ability to utilize all four CRUD operations and perform backward navigation to the Master view.

Extensible

Things get interesting when using a to-do list as the base application for development experimentation when it comes to going beyond the core functionality of the to-do list.

A simple to-do list can easily be used to experiment with more advanced application ideas and technologies. Introducing new technologies and complexity is not further complicated by the to-do list itself because, conceptually and feature-wise, a to-do list is well understood. For this reason, a to-do list allows developers to focus where it is most impactful on new languages, technologies, ideas, and techniques. Below are a few areas that can be expanded in a to-do app, including some exciting technologies.

User Management and Roles

Because a to-do list can have multiple views to navigate to and user actions to execute, authentication and authorization can be utilized to restrict navigation and limit functionality on a user by user basic when implemented.

Examples:

Database interactions

A common practice for storing structured data is to insert it into a database. A to-do list makes for a straightforward application to utilize a database with a very simplistic initial implementation. Because of the data’s simplicity needed for a to-do list, experimenting with local or cloud databases can be the main focus.

Examples:

Web API

Implementing Web APIs to provide stored data to requesting clients often goes hand in hand with database interactions. Instead of storing to-do list data locally, it can be saved and retrieved remotely using Web APIs.

Examples:

File

A to-do list item in its most basic form is a title and a true/false value indicating if the item has been completed. Sometimes some additional details need to be included with a to-do item, and adding a description property can hold more text-based data. However, adding the ability to save binary files with a to-do list item can improve the task’s clarity and give more in-depth details that text can’t always convey. Saving binary files can be accomplished in several ways, either locally on a device or in the cloud, using the following technologies:

Examples:

State management

State in an application is the current data, configuration, and status of objects at any time. Consistently fetching and modifying state objects in an application allows fine-grain control that can be very helpful as applications become more complicated over time. Many state management libraries are available, and a to-do list would serve as a great application to implement state management, given the familiar and well-defined nature of to-do items and their interactions in an application.

Examples:

Testing UI Libraries and components

Because to-do lists require a few basic application features to be implemented, they can be an excellent application for becoming familiar with unit testing or end-to-end testing.

Examples:

To-do lists can be a great starting point for experimenting and testing various additional technologies and concepts. It is a case of the sky or your imagination being the limit.

Up and running fast

Writer’s block isn’t just a phenomenon that impacts students writing term papers or authors trying to meet deadlines. Developers looking to build apps for learning purposes or demos/examples may experience writer’s block when deciding the type of application to create. Instead of brainstorming the perfect application idea, developers should utilize the idea of having a go-to app to streamline the creative process. In this case, the go-to app would be a to-do list as it allows for demonstrating core application functionality and lending itself to being extended. By immediately referencing a to-do list app, developers can focus on what they are trying to demonstrate or learn and quickly gauge if the to-do list is even the appropriate application for their needs. Being able to “Fail fast and fail often” allows for quick iterations and progress as you don’t waste time dealing with analysis paralysis.

As Henry Ford said:

“You can’t build a reputation on what you are going to do.”

So the to-do is an excellent concept for getting up and running fast without spending much time contemplating what to build.

What To-do lists mean to me

A to-do list is a tool that I use every day to organize and track my many activities and tasks. So, a to-do list is a vital and familiar tool I use daily.

Regarding software development, I use the to-do list to simplify and shorten the thought process of creating example apps in my work. When it came to experimenting with Xamarin.Forms Shell, I didn’t spend much time thinking about what would be a great app to build; I just went with a to-do list. This helped me focus on evaluating the new functionality the Xamarin.Forms Shell provided and how I could utilize it in my work.

Example: Update an Existing Xamarin.Forms App to use Shell

Outie

The humble to-do app has a lot going for it once you look past its simple exterior and realize its potential. Because a to-do list is a very familiar concept, it allows for a great deal of extensibility and creativity when it comes to implementation possibilities. Due to these factors, a to-do list app can be an excellent tool for learning a new language, a go-to demo app idea, or a platform for experimenting with more advancing programming concepts or new technologies. Don’t sleep on the To-Do app!

Resources

A personal blog by Jason Hill about coding, technology, hobbies, and much more
Copyright © 2022 Jason Hill Rocks. All Rights Reserved.