Wizbang is a visual code editor developed by Alex Kharbush, Chad Bibler, and myself for our Software Development Practices (COM S 309) course. Many developers are familiar with the concept of an IDE, but many IDEs are too advanced for most grade school children. Wizbang reduces the learning curve of the IDE by allowing children to construct executable programs through drag-n-drop operations using UML style block diagrams. Children can subsequently convert those block diagarms to source code in a procedural language.
Building any IDE is a major undertaking and our group had one semester to implement it. Therefore, we chose to rely on the QT C++ Framework because one team member had prior experience, it supported drag-n-drop out of the box, and it supported advanced graphics animation out of the box. These elements were required for us to build an application effective at enticing children to learn procedural programming.
It was also important to design the graphics that would represent the UML block diagram elements so that they were sensible and memorable. Each element was called a Wizzy and each Wizzy represented a control construct in procedural programming, a variable, or an operation. The Wizzys were connected together by associative lines to represent the program flow. The Wizzys were also configurable so that children could modify the properties, re-run the program, and see the new results.
Finally, the IDE had to allow children to save and load the programs they built. This required determining a protocol to save and load the necessary program data. Once loaded the IDE also had to reconstruct each Wizzy in the graphical display along with the association lines. XML was the ideal candidate to describe the program's structure and data, and it was portable enough to be saved and loaded on any system.
This project was my first major team project at ISU. It taught me a lot about my own management and teamwork style. We spent long hours discussing the pros and cons of design choices, but through it all I learned a lot about the nuances of system design. To complete the project on time required me to resolve issues under pressure and to effectively delegate tasks. It also taught me the danger of not managing risk. An example was the issue of preventing infinite recursion during execution of a child's program. Progress could not proceed until that feature was implemented. Luckily, we were able to resolve the issue, but it consumed valuable time that could have been devoted to other tasks. For being my first foray into software engineering I feel it was a valuable experience.
The project is currently being managed soley by Chad Bibler. Detailed specifications can be found here.