The premise is this: I've just started development on a new open-source project (SmartPOS). SmartPOS is still in the early design stages, so I thought that this would be the perfect time to start something of a project log - with a twist. If there are enough interested parties, I'll document every step of the development, from design to release, in beginners terms - making this more of a tutorial than a project log. I'll assume no prior knowledge of programming, and explain every concept and decision in the simplest possible terms for the benefit of anyone with even no programming experience - and if there's something you don't understand, or would just like more info on, feel free to ask! It'll be a good way to pick up C++, as well as general software engineering skills, and learn about good programming practice.. C++ is the language used to write most Windows games, as well as the language behind Opera, Google Earth and the KDE desktop environment for Linux.
Of course, being an open source project, everyone is free and encouraged to help out in any way they choose. And there's far more to development than just programming - as the project progresses, we'll need testers, documentation writers, release engineers, etc. Even if you just throw some ideas around, that will be a big help and be greatly appreciated. And what do you get if you help out? Good karma, bragging rights, and your name in the credits .
Most importantly, I will make some stupid mistakes as development progresses. I'm hoping that you can spot them, point them out, and save me from my own stupidity .
With that out of the way, I'll start at the beginning: the inception of the project.
The Problem
Every software project starts out with a problem - the problem that you're going to try to solve with your software. In this case, the problem is that current POS (Point-of-Sale) systems are generally very poor, a pain to use, and the market for these systems is dominated by a few big industry players.
For those of you not familiar with POS systems, those are the software packages that you see running at the tills in Pick 'n Pay, and on computers at restaurants. For the purposes of this project, we're going to focus specifically on restaurant systems.
Anybody who's ever worked as a waiter (and I'm ashamed to admit that I have too ) will already be intimately familiar with POS systems - most probably PilotPOS, since that seems to be used at almost all coffee shops and restaurants these days. You'll immediately know what I mean when I say that the system is flawed, too: dockets mysteriously don't print, if you change an order you have to go running to the kitchen to let the chef know, specials aren't handled by the system automatically, etc. etc.
In fact, if you're a waiter - or have worked as a waiter - this is your perfect chance to help out. What do you hate most about the POS system you work with? What could be improved to make your life easier? Point them out here, and we can try to work them into SmartPOS.
The Program:
So, enter SmartPOS. The aim of this project is to create a POS system that doesn't have all of those little irritations, and has a bunch of innovative new features thrown in to boot. The software will have to be stable, of course, and it will be absolutely free of charge.
SmartPOS is going to be written in C++, and use the state-of-the-art Qt4 framework. For those of you not familiar with frameworks, it's basically a library of highly useful code that you can use in your program. They make your life as a programmer a lot easier! The reason for choosing Qt in particular is that it is cross-platform compatible - so the system will build and run on Linux, Windows, OS X, and any other platform that supports Qt.
My reasons for choosing C++ are a little more selfish: it's the language that I prefer, and that I am the most familiar with. The important features of C++ are high performace, good stability (if used properly), and compiling to native binaries - ie. the resulting programs are directly executable files (.exe files in Windows).
The Design and Development Process: An Overview
Generally, when designing software, you start out with the with the problem as a simple whole, and then gradually break it down into smaller and smaller levels of complexity. In programming terms, you would call that moving from the high-level to the low-level.
These are the general steps that any sizeable project goes through:
- Problem definition: Specifying the problem that you're trying to solve.
- Requirements: Explaining, in general terms and plain English, how you're going to go about solving it.
- Architecture: Using the requirements to start putting together a picture of how all of the bits and pieces of the program fit together.
- Construction: This is the actual programming part, writing the code for the system.
- Testing: Testing actually overlaps with construction, because you should be testing at every step of the way.
- Release: Releasing the program to the general public. Work doesn't stop here though, because you need to keep on adding features and fixing bugs!
At the moment, the project is somewhere between the Requirements and the Architecture stages - there's still quite a bit of work to do before coding can begin!
So, that about wraps it up for today. If you would be interested in following the development of the project, speak up! If there's enough interest, we can move on to the next step: Requirements.
As previously mentioned, questions are welcome!
PS: Anybody who makes a contribution to the project, however small - even just a good design suggestion, or feature suggestions - will be listed in the program's credits for their help .
Made Sticky - Kronos