So I have actually been teaching a class to a dozen beginners, taking them from HTML/CSS -> python/javascript and deploying apps on the web.
What seems to work best, is to get them building anything, and then critiquing as we go. So, they're all hacking on personal projects, and all kind of making the same mistakes, and we go over what they've written and then move on to the next step.
As they run into various hurdles, it opens up lots of discussions on some of the finer parts of things, which would have made no freaking sense to them earlier.
I know you're talking about a slightly more advanced level, but I'd say the technique still stands: Keep hacking on your own (as this is kind of the most important), but put your code out where someone can make fun of it, get it reviewed and critiqued, learn to anticipate criticisms, and you'll be a great developer in no time!
Many of the more modern programming books deal with the process of creating the software rather than the abstract bits that make up the individual steps.
Have you seen books like http://railstutorial.org/book and similar? Is this sort of what you mean?
I suggest implementing the same system using a variety of languages. Each language and system of libraries has some abstractions that can result in the novice having a very incomplete or incorrect mental model of what is actually happening.
In using a variety of frameworks/languages, the learner gets more adept each time since lots of the abstractions are the same, but really jumps forward in the areas where the abstractions are different enough to create some food for thought.
It is that sort of thinking that helps differentiate the designed aspects of a program from the ones that are implementation specific consequences of the design.
Reading The Pragmatic Programmer helped me a lot with the problem-approaching aspect of things, but then I didn't pick it up until I was moderately comfortable with PHP. (I'm not a FT programmer so my learning process tends to be s-l-o-w w/o many opportunities for practice.)
I'd definitely be interested to see two different programmers write up their approach to a given problem. Something like this would be an excellent monthly blog post.
I'm in a very similar position working with Ruby/Rails, and I struggled for a while trying to figure out what to do. The approach I settled on was to work through another tutorial, but try to add features and much better design. In other (more Halloween appropriate) words, to really flesh out the skeleton that the tutorial gives you.
> I'm proposing a third option or hoping if it already exists. I would find it incredibly helpful if there were a resource that detailed the thought process and implementation steps that an experienced developer took in approaching a set of problems or projects
tertiary education?
Design Patterns: Elements of Reusable Object-Oriented Software
What do you think?: Good Idea
Valuable?: Yes, worth $34.59 according to Amazon
Does it exist?: Yes, see above
Worth creating?: Yes, if you can do it better than GoF
This is one of the most extraordinary things in Norvig's Paradigms of Artificial Intelligence Programming (commonly abbreviated to PAIP on the Web) and it's a book full of extraordinary things. When he develops something, like his Othello-playing program in chapter 18 for instance, he starts off simple, develops as he goes along (with an eye for the overall design), makes mistakes and then fixes them - all the while telling you what he was thinking.
I found it really encouraging. Here's this godlike coder who works at Google just doing incremental development until he has a really good finished product. At the end of it, you can't help thinking "but I could have done that!" In fact that was his overall purpose. In http://norvig.com/Lisp-retro.html he says 'The main object of this book is to cause the reader to say to him or herself "I could have written that"'
So yes, your option 3 is a great idea.