Kids can start programming a lot earlier if their introductory experience really minimizes frustration and time to gratification. Python is probably a good starting language for teenagers, but for pre-teens, who are much less cognitively mature, you'll have a lot more luck sooner if you introduce them to an IDE with great code completion and the power to make a GUI. Obvious candidates are Visual C# and Visual Basic, but I would strongly consider Adobe Flash as well. Children love making animations with Flash, and Flash's scripting language, ActionScript, has all of the features of a full-fledged programming language.
You can start even younger with HTML. HTML isn't programming, but it's relevant training for a developing brain. Balancing brackets, thinking logically, paying attention to detail, and the "write, run, debug" routine are all present when writing HTML.
My path to programming started when I discovered a copy of FrontPage Express (an old WYSIWYG HTML editor) installed on my computer. I quickly went from FrontPage, to HTML, to Flash/ActionScript, to Visual Basic, to C++. Obviously, that isn't the logical way for a teenager or an adult to learn programming, but for a child, it was incredibly natural.