- There needs to be sufficient interest in the project/program to make it worth while.
- Time. Projects like this always require significant time investments. An issue if your working full-time already.
- Money. If you make and market a program like this all by yourself then money isn't such an issue - but money can be used to either get help or 'buy time'. For example funding would mean taking time off work (or quitting entirely to work on a project such as this.
- I tutor in real life.
- I tutor online.
- My M.Sc thesis proposes a novel programmer teaching technique.
- And finally, I write lots of little programs that are meant to help me become a better programmer.
With all that in mind I'm considering writing a comprehensive C-Sharp education tool (depending on how it's done it could also teach other languages). There are several ways to do it:
Runtime Compilation of User Input
Any downsides to this one? Well yes... if your going to go to such great lengths to make a program that users can experiment with, why not just let them play in Visual Studio. Also, this method excludes all other languages.
I've not made something like this before, but here is the general idea: the program generates random code snippets, and the users are then asked to provide the final state of all the variables.
This one is nice and interactive, but it's also technically challenging (especially if we try to make it handle more than one language).
An easy alternative to the auto-generated code, would be to have several handmade levels. Now this would mean less variety, but it would also mean that the level creator can make syllabus and language specific questions/levels.
Partial Program / Skeleton Code
This particular technique is just a slightly extended version of giving students the skeleton of a particular problem and asking them to fill in the blanks - the difference is this our program would have many missing components of widely varying complexity and focus, and it would be able to provide interactive hints and explanations at runtime (provided the learner hasn't broken it).
In closing, there are many possible ways I could go about creating a comprehensive programming education system, what I want before I embark on any particular road, is feedback from readers about which one/s they would rather use and why.