Will learning a more "full-featured" framework like rails or django provide a lot less general knowledge than a minimalist one like sinatra or flask?

Flask/Express/Sinatra are not "less productive". A better way to differentiate them is that they require a lot more general proficiency to use, but give you maximum flexibility in return.

Something like Rails (my first real foray into webdev) requires less general understanding, but it comes at the expense of needing (superficial) Rails understanding.

For example, when using Rails, you're more likely to be searching for plugins that do things for you, almost as if your were browsing for vBulletin plugins. Getting user avatar uploads working is just a gem install and a few lines of config code. You might not even understand how it works.

Meanwhile with Express you're going to be searching for libraries that you can integrate into your project. Getting user uploads working is more likely to involve using, say, hooking up ImageMagick and the AWS SDK to get your images processed and saved somewhere.

It's really hard to say which is more productive, at the end of the day. Rails helped me understand web applications from a high level and comes with things like its Asset Pipeline and database migrations (things I rarely setup on my microframework projects).

But these days I use microframeworks like Express since, over the years, I've come to prefer seeing the glue code in each project. I've become more experienced, I prefer fewer abstractions as I've discovered how unproductive it can be when you're wrestling with higher level framework abstractions. But I'm not sure if I could make a blanket statement that I'm more productive than otherwise.

So I'd say use whatever makes the most sense to you right now. After a year, you'll be at a good position to evaluate its strengths/weaknesses, and you'll be a much better developer because of that insight.

I don't think any of these paths prevent you from learning how things work. I think a shallow jump into 10 different concepts at once vs a deep jump into 1 concept at a time both lead to the same destination. Everything kinda bleeds into one another.

Good luck.

/r/webdev Thread