NOTE: this answer pertains to the 401 (configuration-based) exam, not the 501 (coding-based) exam
I passed the DEV 401 exam prior to actually being an SF developer/admin, purely through self-study (though I did fail my first attempt.
As you probably know, the 401 exam doesn't test Apex/Visualforce development skills, but rather the declarative programming tools provided by Salesforce - in other words, all the stuff you find on the Setup page's side bar.
My recommendation, in addition to those already posted: get yourself a dev account, and design a custom product from scratch. For example, I created an SF app to track and manage my job applications when I was trying to become an Admin.
It started out simple, with a few custom objects and fields, but I kept adding functionality as I came up with ideas, and started incorporating workflows, campaigns, even security controls (I imagined I was sharing this app with other applicants, and wanted to keep our data separate).
Importantly, when I came up with ideas for things I wanted to implement, I specifically avoided workarounds and easier solutions. Those are good things to know about and have at your disposal, but for the sake of learning you want to learn all the ways to solve a problem, and all of the natural limitations of Salesforce (many exam questions related to what Salesforce can and can't do with its default functionality).