Here's a "little" text that I wrote for someone for getting-started purposes:
First of all, getting to know at least the basics of the language is obviously useful before delving into the WoW API. There is a guide available
here. I didn't learn by it myself, so I can't say how good it is.
For hard facts there is the
reference manual. (note that not everything is available in WoW, namely file handling functionality)
You'll want to learn how to use variables, tables and functions and function arguments for starters. Also if-cases and loops.
There's a demo page
here where you can try stuff out. (hint: use the print() function to actually get something out of your code)
Events is a major concept and is the basis for most everything in the UI. Once you want to do things dynamically (as opposed to running the code once to remove some things, add some things, change some things) you're gonna have to deal with events. Absolutely everything that happens in the UI (except for certain animation-like things like cast bars) is driven by events. You've got events for chat messages coming in, spells being cast, items being looted, players joining your raid, everything. These are referred to simply as events. For the purposes of this conversation we can call them global events. They will always happen and nothing can change that. They also don't actually do anything by themselves. That's what the UI does. The UI (both the default and addons) listen for these events and act upon them. If nothing were to listen to these events, your UI would literally just be a picture. (note that the UI is distinct from the actual game world)
For a list of events, see
http://wowprogramming.com/docs/events
There's another type of events that aren't really referred to as events. Sometimes frame scripts, or possibly frame events. These are frame (frame is often used as a generic term to refer to any object type such as frame, button, message frame, scrollframe, etc) "events" such as OnClick, OnScroll, OnShow, OnEvent etc. The OnEvent is the frame script that fires when an event that you're listening to triggers, and indeed this means that listening to events requires a frame. The rest of the frame scripts are mostly relevant once you start making visible stuff. Frames by themselves are only objects and has no visible elements. Textures and font strings (these two are sometimes referred to as regions and must be attached to a frame, unlike frames which can be "independent") are the only visible elements; until you start adding those, there's no telling that a frame exists by looking at the screen.
Links to global WoW API and "frame API".
http://wowprogramming.com/docs/api_categories
http://wowprogramming.com/docs/widgets
Wowpedia also has some stuff, but it's not as neatly organised, imo.
http://wowpedia.org/Portal:Interface_customization
One thing I forgot to mention that you'll definitely want to do is extracting the default UI.
http://wowpedia.org/Viewing_Blizzard%27s_interface_code
This will let you see how the default UI is built. It's built in the same way as regular addons, only they have access to a few things related to spell casting and targeting. More importantly, it'll let you eventually figure out how to modify it as you desire. That being said, their code is no easier to understand and learn from than any regular semi advanced addon. Also note that they don't always code the "best" possible way, so you shouldn't go thinking that their code automatically is perfect. (although it's generally okay)