

Ask HN: Thoughts on idea to help novice developers bridge the learning chasm? - sga

Background: In learning to program well and step beyond a beginner or novice level I think there exists a chasm.  The web is filled with great resources for learning new languages but moving past the initial level that these resources help you achieve is tough.  I see two current methods for self improvement:<p>(1) work with others who are more experienced and through osmosis you begin to pick up aspects of their developmental style and process i.e. how to approach a project and ultimately implement a solution (this is not possible for those that don't program for a living);<p>(2) hack on your own and through trial and error eventually find your way (good but perhaps not the best or only alternative).<p>Concept: 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.  Even better I'd love to see two developers independently approach a set of small to medium sized projects, detail their thoughts along the way, and see how their development process and their implementations differ.<p>What do you think?  Valuable?  Does it exist?  Worth creating?
======
camperman
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.

------
japherwocky
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!

------
daviding
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?

~~~
driznar
"Have you seen books like <http://railstutorial.org/book> and similar? Is this
sort of what you mean?"

Is there something like this for python?

~~~
sga
The best thing I've come across django related is the "Django from the Ground
Up" tutorials: <http://showmedo.com/videotutorials/series?name=PPN7NA155>

------
grandalf
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.

------
MarinaMartin
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.

------
zugumzug
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.

------
tjpick
> 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?

------
catlike
_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

~~~
daviding
It's a classic book, but I'm in two minds if it actually helps or hinders new
developers.

(Hear me out on this sacrilegious statement! :) It's just that some of the
design patterns are really low-level and often described in terms that modern
frameworks reuse with different names. Now this isn't the GoF's fault but it
does get confusing for people. I'd pitch the book at someone with a bit more
experience as I think 'getting patterns' helps when you've gone off the rails
a bit and can see the benefit a bit more - otherwise they just seem too
abstract and a bit arbitrary IMHO.

~~~
catlike
Good point, and of course it is sacrilege to dismiss the book. Maybe GoF
addresses another chasm that comes later in the learning process.

