Historically, programming could be described as labor intensive, time consuming, error prone – and delivering projects late with defects and incomplete features. The failed Cover Oregon health exchange project suggests this is still a mostly accurate description 🙂
I have long been interested in software development improvement strategies. Back in MBA school, we were taught process improvement strategies used in manufacturing, and I saw the possibilities for software. Simultaneously, others saw this too and they invented the agile methodology.
New methods like Test Driven Development came along. Tools like JUnit and NUnit made TDD practical.
New programming systems like Scratch (Scratch – Imagine, Program, Share) and App Inventor provide quick-to-learn, quick-to-build and generally easy systems for defining user interfaces and program behavior. But these are oriented towards teaching children to program, using graphical programming systems. Lego Mindstorms is another example, for constructing educational robots programmed in ROBOLAB. (ROBOLAB is built in LabView. LabView is a graphical data flow programming language used for professional applications, especially those involving control systems, such as running lab equipment or manufacturing systems.)
Some, like App Inventor, are reaching the point where they are quite usable for creating real-world apps – not just games and toy apps for educational examples. We are seeing good progress towards better tools for different types of developers, ranging from children through adult learners to professional developers.