Notice that of 4K of RAM, a whole 512 bytes was used as a buffer for the
tape drive. Only with careful programming could you actually run code there.
Among the cartridge expansions, there was RAM (even a stunning 32K ! Just think what you could do with that) and a combined RAM + graphic_commands_for_BASIC which allowed you to paint circles and lines and rectangles at a resolution which was something like 180x200. On the typical TV we were using as a monitor, that made for really big pixels.
The Commodore Basic language and the crampedness of the RAM gave me bad programming habits which took me years to get rid of.
I also remember a cartridge game called Radar Rat Race, which I played with guilt because I knew that I should be programming instead of running around a maze.
Another memory of those years was reading all of the monitor program source in one afternoon (6502 assembler, of course), and constant squabbles with my father that wanted (rightly) to watch the RAI TV news, while I wanted to keep using the VIC 20.