The same applies to game mods (minecraft now, warcraft3 years ago) where people love playing a game, get introduced to mods, and then make one for themselves. Each modding community has a field of experts with the same passion for the game as noobs. The experts produce documentation and sample code for the noobs.
The noobs have a "sandbox" to play in by modifying the game. First they follow tutorials or copy/paste code into patches. But eventually something remarkable happens when they start to modify that logic to accomplish their own goals. It's at that moment a programmer is born.
How many people started programming by modding games in a hex editor?
How about installing phpBB mods on a forum for your favorite game? That's how I got started.
How about editing jailbreak themes or tweaks?
Or running some metasploit module against your printer?
Or setting up your arduino to run Xbmc?
The common thread is that these are all sandbox environments; games, pluggable open source software, jailbroken phones, emulators, arduinos. Every sandbox also has a community of experts backing it and providing an invaluable service to noobs. These communities serve as an entry point for self-selecting, motivated autodidacts to gain exposure to programming. These are likely the people who become the most prolific, or at least passionate, programmers later in their career.
This is almost exactly my first programming experience.
I discovered GORILLAS.BAS [0] on our family computer and, after playing it for awhile, discovered that I could change things about the game by modifying the strange text on the screen. First I was changing colors. Then simple drawing changes. Eventually, I had a version that replaced the buildings with mountains and the gorillas with artillery guns. Gave it out on floppies to a few friends with simple instructions on how to play it.
It was at that moment that I realized I had created something pretty awesome. Never forgotten how that felt.
I had a similar experience. I was an junior accountant at my first job - I was tasked with combining a bunch of timesheets for several manufacturing facilities into one large timesheet to calculate payroll weekly.
I quickly grew bored of this and learned a bit of VBA to do automate the process, started learning RoR, Django, and moved on to technical jobs at other companies.
Funny thing about those first scripts I wrote - although they were relatively bugfree, they didn't account for having been run more than once per week. So one week when I was out of the office (and had run payroll remotely) a colleague ran the scripts and everyone was paid double. I left the company shortly after.
In my job after a period of learning and implementing the current processes, I wanted to make it better and my job easier. I did some Powershell scripting to begin with. Then I needed more so I started building C# WPF applications to manage and automate these processes. When I began developing it started out as merely a front end to some CSVs. Since then more and more people started using it and giving feedback and suggestions. It became a passion for me. I hit so many walls along the way and overcame them with internet resources and tutorials. Sometimes I would work weekends on this project. After many feature versions, bug fixes, and refactoring to address maintainability, unit testing and administrative/logging, it grew in complexity and users.
Didn't Access have a 20-or-so-simultaneous connections limitation? I guess it depends on how old the version. Yes, I tried using Access on a website once (Lowers head in shame).
I started my "real" development career (I'd played around a little before then) while employed as an Admin Assistant at a company that used an Excel spreadsheet to track work coming in and out. Every task had to be repeated 4 or 5 times, as the company needed different views for different managers. Oh, and of course, only one person could use the spreadsheet at a time.
After a few months of typing this in over and over I got sick of it, and fired up Access. In the spare time I had here and there I put together a database everyone could use at once, input once, then open up appropriate views for different managers. I did a lot of this with the Access visual query creator tool. My manager was blown away when he saw it and gave me permission to keep building the feature set out - I'll be forever thankful for that, because many in the company resisted.
I added and added to that database, learning VBA for the more advanced stuff, until Access became too limiting (I honestly can't remember why now). We didn't have admin access on our machines so I couldn't install Visual Studio Express, but I could install SharpDevelop. So I did, and created an alternative front-end in VB.NET using the same Access database, eventually graduating to SQL Server (again, I forget why, but I think regular backups were one particular reason. I remember a phone call with a very confused rep from our outsourced IT provider wondering why an Admin Assistant wanted a SQL Server database).
Nowadays I work in Node, create iOS apps, all sorts - I've left that original environment far behind. But I wouldn't be anywhere near where I am today without those sandbox environments that let me learn and grow very quickly. People are quick to dismiss Access, VBA and all that, but they shouldn't be.