Hi Paul,
Alfresco WCM can be split into two separate areas; content creation and content delivery. Firstly there is the content creation side i.e. the editorial activity where content authors create content ready for web publication. This typically is handled by Alfresco WCM core product which is a Java based application, so modifying and extending Alfresco (if this is required) would require Java knowledge.
Once the content has been created, delivery of the content to the website is the second stage. Alfresco WCM provides a lot of options in this area. For example, you can completely de-couple the delivery side meaning that Alfresco produces content e.g html and xml content items, and then these are pushed to the delivery servers (using Alfresco's in-built deployment tools). Then, the method with which these content items are delivered is entirely up to you. For example, if you are storing your content items as XML, then any programming language that can process XML can be used e.g. JSP/Java, PHP, Ruby etc etc. This method allows you to build a dynamic web application using whichever platform you are happy with.
Alfresco also provides a REST based interface using "Web Scripts". Web scripts allow you to interact with the repository using HTTP, running server side Java Script. So again, any web application which can make HTTP requests can access these dynamic Web Script requests.
Regards, Ben.