I'm aware that there are several posts about how a Todo list can be demotivating, however I think they still have their place. There are several reasons developers choose to develop a Todo list, especially when learning a new language or learning to code. The main reason is that it's simple yet complex enough to explore most features of a language, which is great for beginners and experienced developers.
For a beginner it can be a daunting experience trying to choose the perfect project. A Todo list can be broken down easily and implemented as several separate components, which makes a perfect first project. It allows for faster results and reduces the feedback loop. There is nothing more motivating than seeing results quickly, especially for a beginner.
For more experienced developers trying their hand at a new language, it is complex enough that it will really allow you to explore the full range of features a language offers. The list itself will get you thinking about data structures and it's items about data types and object orientation. Creativity is the only boundary and this is still true for a Todo list.
So what components can we break a Todo list down in to. The most obvious starting point is the list itself and this should get us thinking about what data structure to use. I'd tend to go with the simplest of structures first which would be an array. Then if we think about data types, an item could initially be a string. Without a list, we can't implement the other components:
- Adding an item
- Removing an item
- Displaying items
- Ordering items
Future changes such as setting "done by" dates might force us to change the data type of an item. I'll avoid going into more detail about software design at this point, but for more experienced developers this could be another consideration.
There are examples of Todo lists in every single language and this is great help especially for beginners. Being able to implement something and then look at how others have done so is a great way to learn.
So to wrap up, I still think there are major benefits from a traditional Todo list project. It might not be the most exciting of projects but it really does allow you to explore a language and for me this is the most exciting thing.
If you feel I've missed any important points or you disagree then feel free to leave a comment with what is missing or what you disagree with.