For several years, Alfresco has been an excellent document management system. It is written in Java, and uses many standard enterprise Java libraries. (Spring, Hibernate, Lucene, etc). A couple of years ago, web content management was also added, allowing websites and web content to be managed inside the repository. The Alfresco repository has a web client, that allows you to browse the repository and do searches. There is a remote API that lets you access the repository's functionality via web services.
If you wanted to extend the capabilities of Alfresco, the way to do it was to use server-side Java and a template (usually in FreeMarker). People did this to create all kinds of modules.
Web Scripts: Lightweight Development
While Alfresco was doing well in the marketplace, it was clear that the method to create new functionality or integrate it with other tools was too difficult and time-consuming. Developers liked the model you have in a CMS like Drupal, where you can create a module just by creating a directory, a descriptor, and then write some PHP files to do what you want that call event handlers and layout code. Drupal has hundreds and hundreds of excellent modules written by all levels of developers. The question people had was: 'Why can't Alfresco make this easier?'
The Alfresco team then delivered something amazing: Web Scripting
Surf: Bringing scripting to the next level
While web scripting has a lot of power, there isn't a lot of built-in support for the things you want to do. The Alfresco team created a framework to make this happen called Surf. While the framework actually isn't specific to Alfresco (you can use it stand-alone for other kinds of repositories) most people will use it to talk to Alfresco.
Surf adds support for many of the common things you would want to do with your webscripts. Once you use Surf, you won't want to go back to just doing web scripts without them. But of course, you don't have to use Surf to do web scripts. Note: in subversion, the project is actually called 'web framework' and the war it builds is alfwf.war
Share: Collaboration Application using Surf
If you want to see an example of what can be done with Surf, look no further than Share - a collaboration tool written with Surf and web scripts that leverages your Alfresco repository. Share is currently in beta, but you can check it out if you download Alfresco labs. It's a separate war file (share.war) though it's actually called 'slingshot' in the subversion repository and builds share.war
Share is an amazing application. But what you need to know is that it's a Surf application. It's a good idea to get to know Surf first, so when you look at the Share code, you'll be able to separate what Surf does from what Share does.
There is a lot more to Alfresco than what was mentioned here (such as CMIS, Microsoft Office and SharePoint, for example.) But the majority of developers now looking at Alfresco are doing so because of all the exciting stuff coming in the 3.0 release. Understanding the repository, web scripting, Surf, and Share is going to be the best way to figure out 'what's happening' in Alfresco and what everyone is so excited about. Overview