First experiences with Drupal
I've played with Drupal for a few days now, and while I don't have a public site up yet, I'm starting to get my bearings. So I thought I'd write a little bit about my initial Drupal experience while it's still fresh in my head.
Positives first, just to start on the right foot:
1) The handbook (and the comments on it) are a wonderful resource. Even better, the search box _actually_ works. This is one of the first sites I've hit where the internal search works better than searching using 'site:' on Google.
2) Forums are great, searchable, and integrate nicely with the other parts of the site. Response to my first post was prompt, helpful, and by active developers who knew what they were talking about.
3) Install was remarkably easy and well documented. Downloaded it, read the well-written directions, and it was running!
That's when the going got a bit rougher. It's up and working, but how do I translate my mental model of the site I think I want to Drupal's reality? Now, I don't think I'm an idiot, especially when it comes to computers. I'm a UNIX native, I understand HTTP, I've written Apache modules, heck I've even written web servers. But trying to figure out how to actually build a site with Drupal I hit a wall. Not an insurmountable one, but that took several hours before I was even sure there was a solution.
Now, I know what a taxonomy is (although I was confused when it was called a 'vocabulary'), and the instructions for creating one are pretty clear, but I still don't know why I would want one. I think the answer is that since primary content is going to be created by me (with the users supplying comments and posts) that I don't want one. Instead, if I want to present a series of pages in a prespecified order, I want to using the 'book module'. But it took me a long time to figure this out, since all the documentation refers to this primarily as a means of allowing users to collaboratively write a book, which I am not doing.
My next problem was that I knew I needed some custom database interaction, but I had no idea how to achieve it: was there some way to write CGI that I could include into Drupal pages? write PHP that would be included into a page? write a custom modulet that would do what I want? It turned out that creating a custom node type with 'Flexinode' and then adding 'Node Relativity' will meet most of my needs, but it took me quite a while to figure out that these even existed. And since what I wanted to do (have one node contain another) seemed very basic, I was very confused that neither is part of the core system.
I think most of my problems had to do with mental models: when it comes to Drupal, I don't have one. The layer of documentation that was lacking for me was the layer that explained the Drupal mindset: a whitepaper, and architectural overview, some sort of rationale for how it all fits together. It took a lot longer to start to 'get it' than I would have hoped. Even at a basic level, I thought I knew what a 'node' was, but apparently I didn't. Oddly, the piece that helped it click together was a piece explaining how a node might be redefined in the future: http://jonbob.drupaldevs.org/cck/overview
Overall, I am excited by Drupal. I think it's going to work for what I want to do. Things I thought would be complex (forums, comments, user registration) are turning out to be incredibly easy, but I constantly feel like doing many simple things (putting two pages in order) is incredibly hard. Looking at the Roadmap (http://drupal.org/node/11512) it looks like some of this should be improving soon (particularly with CCK).
Anyway, that's enough for now. Back to trying to figure out how the pieces fit together.
Nathan Kurz