Be ready to think differently, because this is a new way to build pages.
There’s a significant reduction in the number of requests required to render the page, only those files which are required are loaded. To see the difference, comment out the async:true and use the FireBug Net tab to see the number of files loaded.
It’s well worth reading these references carefully.
The define is defining an anonymous module that requires dojo/dom and executes after dojo/domReady. It creates a module with one function - init. app.init() is called from the HTML. Note that the name app.init is file independent, so all the pages can have an init modules and the HTML can call app.init() regardless of which page is being initialized.
This is just the tip of the iceberg. Explore. Enjoy.
For production code, be sure to use a build.