Databases....most people don't really think about them. Most programmers don't really think about them that much. I mean, most programmers probably have to do SQL queries or otherwise do work to interface with a database, but, eh, its a thing to do right? SQL is etched in stone. What other RDB is there but SQL? It must be the way to do it?
Of course this comes from the casual acceptance that most programmers have towards things in general. It is computer science, in the worst possible sense of the phrase. Preceding work is, in fact, the Universe to be Studied. Databases are awful. Quite frankly, I might leave programming because databases are awful, and more so because no one cares about how much this hurts me.
Wait, what? Why are databases awful? Surely you have a need to store your data, right? And anything on top of that, well, that's just nice.
Let's take a step back and figure out how you'd want to store your data. What are the requirements for a good database?
I want a good deployment story: There is software, X. Installation should be, a two step process: 1. Get X on your machine; 2. Run X. This assumes X is an application. If not, omit step 2. For a complete deployment story, there is a configuration step in between 1 and 2 where you setup X for your needs. But not only should this be optional, it should also be straight-forward. No jumping through hoops! Programmers that jump through hoops create users who jump through hoops. Is this your goal? In python, this process is as such:
easy_install X my-X-script
Download other libraries? Fuck with system packages? No sir! Not on my watch.
If you don't think this is important, consider Firefox. Why does Firefox use (a modified version of) sqlite versus a more performant SQL version such as MySQL or PostgreSQL? Imagine if you tried to download a browser and the process was as follows. I'm choosing MySQL because it is much easier than sostgres. As far as I can tell, there is no way in general to setup a postgres database since it has a very complex authentication scheme.
The process:
1. Download App 2. Run App-MySQLWizzarrdd 3. Is MySQL installed in a way usable to Firefox? If not "I'm sorry, you don't seem to have MySQL installed :(" 4. Is the MySQL daemon running? If not "I'm sorry, please start running MySQL. I can't store your data without it!!!" 5. Create a new database. Of course, you *can't* just do that. After all, MySQL isn't just a database (server), it is an authentication agent! So in the likely case you can't because the MySQL daemon doesn't let just anyone create a database... 6. "Enter your (root) MySQL credentials. This has to be a MySQL user that can create databases". Um, what? As a user that, wait, let's go back to what a database does, just wants the app to be able to store my data, what the hell does this mean?!? Who is this mysterious MySQL user? And where the hell do I find his/her password?!? Is it my root account? That might work....or it might now. 7. Oh thank god! The database setup worked! 8. "You can now run this app. Goodbye!"
Step 9 is of course rm App.
Many/most/all? programmers make the excuse that "well, yeah, you don't want to do that to a user....but we should put up with it :/"
How do you make a filesystem a viable database?