First thing, i find open source example or libraries and modify them. Often, the modifications are pointless (how do I move this button) or not very useful (what if I wanted to rearrange things to do this one thing asyncronously), but the process of reading the code and digging through it to figure out how to do it is helpful. In theory, if something is open source, a new developer could sit down and try to pick a few things off the bug tracker, but every time I've tried this it hasn't worked out, usually you need to know a lot of context about a project before you can fix the bugs usefully. Longstanding, low-priority bugs are often unfixed for a reason. I still learned a lot trying this.
The nice thing about this is I can spend as much or as little time on it as I need. Even figuring out how to set up and build a project in a new language or environment can teach you a lot. Often my first step is to jump in and change a bit of text, since that's usually easy to find (grep). Sometimes even this simple of a change will open up a can of worms (in other words, a path to great learning).
Then, I come up with a simple project and build it. Often, I will use a new technology when prototyping.
But be careful, there's a big gap between getting to the point where you can get something to work with a bit of persistence, versus knowing the "right" way to do it in that language or api.
You say you could probably learn to build an ios app in a week or two given your background, and you're probably right. I have a similar background and it took me about six weeks, working on evenings and weekends, to put together my first iOS app from not knowing any Obj-C. But now I've been building iOS apps for years, and when I looked back on that first app I cringed. I've actually rewritten most of it by now.
The nice thing about this is I can spend as much or as little time on it as I need. Even figuring out how to set up and build a project in a new language or environment can teach you a lot. Often my first step is to jump in and change a bit of text, since that's usually easy to find (grep). Sometimes even this simple of a change will open up a can of worms (in other words, a path to great learning).
Then, I come up with a simple project and build it. Often, I will use a new technology when prototyping.
But be careful, there's a big gap between getting to the point where you can get something to work with a bit of persistence, versus knowing the "right" way to do it in that language or api.
You say you could probably learn to build an ios app in a week or two given your background, and you're probably right. I have a similar background and it took me about six weeks, working on evenings and weekends, to put together my first iOS app from not knowing any Obj-C. But now I've been building iOS apps for years, and when I looked back on that first app I cringed. I've actually rewritten most of it by now.