In this project we are going to implement a counter with various front-ends and back-ends.

The simpler version of the counter script handles a single counter. Every time we run the counter it will fetch the latest value from the "back-end", increment it by one, display the new value, and save the new value back to the "back-end". An interaction might look like this:

$ count
$ count
$ count

The slightly more complex version will receive a string as an input and for each string it will maintain a separate counter. So an interaction might look like this:

$ count foo
  foo: 1
$ count foo
  foo: 2
$ count bar
  bar: 1
$ count foo
  foo: 3

The front-end can be command line, or web, or maybe some other GUI.

The back-end is some kind of a "database". It can be a plain text file, some data serialization format, a relational database, a NoSQL database and who knows what else.

This is going to be a long project, but it might help understand various techniques for data serialization.