Want to learn how to get started with programming, or want to learn a new language? My tip: build a shopping list.
Why a shopping list?
When you want to learn something new, it's good to focus on the subject you want to know. A shopping list allows you to focus on just that: the project is clear-cut, which means you do not have to spend much thought on essential features.
A simple case
The simplest of shopping lists can be built without a database, as you can hardcode the list in HTML (when you're learning new front-end skills). However, if you want to up your back-end skills, that's when the application starts to shine.
Functionally, a shopping list would contain at least this:
List - id - name ListItem - id - list_id (references List.id) - product_name - amount
Alternatively, normalized, with the product as a separate entity:
Product - id - name List - id - name ListItem - id - list_id (references List.id) - product_id (references Product.id) - amount
As you can see, you have a small and simple data model, which still offers a bit of practice material in terms of relationships. You can later expand the data model to add more functionality; we will get back to that.
Both data models work when you're just going to build a shopping list. I recommend using the latter data model, as it allows you to add new features later.
There are a few things to do before you get started, most notably picking your "weapons of choice."
Think of which programming language and (optionally a) framework you want to use. Make sure to follow a framework tutorial before you start on your project. It doesn't matter which you pick because there is much overlap between languages and how you think about code.
You also need a code editor, or IDE, to write code. Pick whichever application works best for you, or try different ones. If you are using a Unix-based operating system (Linux, Mac), you'll also have access to powerful command-line tools. Windows also provides tools, but those tend to be less covered by tutorials and frameworks.
After you've set up your workspace, it's best to go ahead and build. Don't be afraid to make mistakes, as you can always throw away your database or code and start over.
Want to expand on the shopping list? Here's some inspiration:
Build a front-end:
Group products by category/type/aisle and slap a label on it. Some inspiration: "Vegetables", "Dairy", "Meat", "Cleaning supplies", "Cat stuff". Add a color field while you're at it.
Use name or title fields as a base to create slugs: URI-friendly versions of the field's contents. Use these in your URIs instead of IDs to make your paths just a bit nicer.
Make it an inventory list:
If your dataset contains separate ListItem and Product models, you can use those products to create an inventory list. Add a check to each product, which shows whether the product is in stock.
Add authentication to protect your lists from unwanted visitors. Create a link between the models
User and List (where
List contains a reference to
User), so each user can have their lists.
Build an API
Build an Application Programming Interface (API) to expose your data to the outside world. Not only can you use this API to separate your front-end from the back-end fully, but you can reuse the data endpoints in other applications.