Sooner or later he'll discover that he's getting to the point where he needs to provide solutions for problems that are already solved by a variety of well-maintained toolsets, and the lack of abstraction will make his projects hard to develop further.
These terms are not well defined (AFAIK) but often a framework implies that you have something “already running” which you customize by providing callbacks, delegates, and similar.
With a library you have a set of reusable functions and data types (classes).
I think an Apple engineer referred to frameworks as “the hollywood model: don’t call us, we call you”.
For PHP programmers that dislike the framework model, have a look at http://flourishlib.com/ — been mentioned on HN before but I hadn’t seen it before this week. In philosophy this is exactly how I prefer a good library of re-usable code: lots of self-contained functions and data structures which each solve a problem, and you decide when to use what.
Libraries, OTOH, don't presume anything about taking control. You're still the driver, they just have a lot of things that can make your life easier if you choose to use them.
The funny thing is that it was the SQL Server stored procedures that generated the HTML, not ASP. I couldn't figure out if it was genius or insane.
Really, I'm sure no one remembers CakePHP back then (they had not the pretty site yet) but was pretty much this.