I have recently came across a very interesting view on our programming activity. It describes the use of Domain Specific Languages. These languages are small programming languages that are particularized to a specific problem at hand. Say instead of using big xml files for configuration we could define a small programming language to do the job.
This introduces a lot of advantages if you know when to use it. There are tools that can help us build programming languages very quickly. These tools are called language workbenches. It’s a different perspective than yacc and bison due to the fact that you describe your language using the abstract concepts and not syntax. The syntax is then generated to suit the abstract concepts. Thus you can quickly create very powerful and customized programming languages for each particular problem.
This can take application building and the customer closer together and reduce the number of programmers needed to build and maintain an application.