I'm an iPhone app developer. I want to get into iOS gaming. The question is-should I start with learning 2D like Cocos 2D or Corona SDK before learning 3D gaming like Unity? I'm more interested in 3D gaming, but do you think that knowing 2D gaming is a prerequisite to learning 3D development?
It depends on how strong you are with mathematics, and 3D game programming concepts.
2D you can get by using only concepts of x,y positions and velocities (and adding and subtracting them - basically vectors) and 2D box collision.
In 3D, you have to worry about a lot more math: projection matrices, viewing matrices, frusta..
In addition, you have to interact with a much richer set of functions from the drawing API you're using, (just by virtue of the fact that you're doing 3D, so you have to learn a lot more functions that deal with 3D).
Microsoft XNA has excellent support for starting out in 2D, and makes rendering easy using SpriteBatch. As soon as you venture into 3D, you automatically have to learn VertexBuffer, or Model, and then comes ModelBones and everything else that goes with it.
You're best off starting 2D just because the concepts you need to grasp is less (2D sprites? A cakewalk!). After you have some experience under your belt, then you should be fine doing 3D.
The only fundamental difference between 2D and 3D game development is whether or not you use the 3rd axis. If you're using an engine like Unity you can just as easily make 2D games as 3D games by simply using an orthographic camera projection and sprites instead of models.
That being said, if you're not using an engine that does a lot of the 3D heavy lifting for you, it is a lot harder. See the answer to this question: What to consider when deciding on 2D vs 3D for a game?
What you should do is decide what game you want to make and the art and design will tell you if it needs to be 2D or 3D.
I agree with Tetrad that you should think about the art and design and that will lead you if it needs to be 2D or 3D. I also will say that it may be a good idea to create a 2D game first so that you won't have to think about the harder things that come along with 3D games. Also, one thing to realize is that the brain will process less information with 2D games which is what you want for a more casual experience.
If you look at most of the successful indie games over the passed 3 years, many of them were 2D.
So a company can be successful making just 2D games. The success of games comes from game mechanics, story, aesthetics, and technology. Otherwise known as the tetrad. I'm getting off topic so I digress.
Keep in mind, it will be simpler for you to get 2D art assets to practice with. So while I don't think learning 2D game development is a prerequisite to learning 3D game development (either way the game code on top of the graphics code is pretty much the same) I would still recommend most beginners start with 2D games unless you already have a solid resource for 3D graphics (eg. you'll be learning alongside a buddy who is a 3D artist).
Code-wise, the difficulty depends on what you are trying to learn and what engine you will be using (and in particular if you will be writing your own engine). Low-level 3D graphics code is much more complicated than low-level 2D graphics code, but if you will be using an engine like Unity then you won't be writing low-level graphics code. The code for a 3D game built in that engine is no more complicated than the code for a 2D game. Indeed, it may be considerably less complicated, depending again on the specific engine you are talking about.