You generally don't need to do any programming at all. There are effectively two primary ways in which you would interact with an automation system (of the sort that allows you customization of the interface.) One is to create user logic, and the other is to create the user interface. In both those cases CQC really doesn't require any programming. The user interface designer is a fully object oriented system in which the same logic creation interface is used to create interactions between the 'widgets' on the interface as is used to create user automation logic (and hence they can be very much intertwined where needed.
The logic creation interface is consistent and used all over the system. Effectively you always are doing two things, you are selecting a source for some 'action' and you are then creating that action. The source can be an IR remote sending a command, a button press on an interface, a scheduled time, some change in a device under CQC's control, a standard event trigger like motion occuring or a lighting load going on or off or a button on some panel, etc... You are always effectively associating an action with some source that makes it happen. The creation of the action itself is always done via the same consistent interface, which is almost totally point and click. You do have to type something occasionally, if you need to give something a name, or something like that. But, otherwise, it's all point and click.
Since the interface design tool is completely integrated into the system, you have full access to everything from within it. It's not like some programs where you have to copy and paste commands from one place to another. You have access to everything from within everything, because CQC is a fully integrated suite of applications, designed to work in a multi-user, client/server sort of way.
If you do want to do some programming, e.g. write your own drivers or perhaps do some advanced user logic, you would use our CML language. It's very C++/C#/Java like, with some Modula2 features thrown in. It's single threaded, single inheritance. It's designed for a high level of robustness, not the ability to hack code quickly. It has a lot of features designed to help in the automation process as well. And, the IDE is fully integrated into the system just like everything else.
If you want to get a feel for it, watch the tutorial videos on the web site. They will give you a good idea of how it works.