In software, as in most things, most of learning is done by doing. Creating a clone of something from scratch is a really useful learning technique and has the benefit of a defined specification.<p>It doesn't even really matter if the job is even completed or if the program is ever used. The important part is the doing, not the result.<p>I confess we did similar things at uni 30 years ago, although we mostly re-implemented arcade games, not sql databases. Databases are likely more useful to understand.<p>All programmers have to go through 3 stages;<p>A) I program to prove to myself I can<p>B) I program to prove to others I can<p>C) I know I can write this, you know I can write this, but its cheaper and easier to use this existing, available, code to do the job.<p>I like c) programmers in business because they understand that the goal of the business is making money not generating code. A guy who -could- write SQLite, but then understands why -using- SQLite would be better, is enormously valuable.<p>(Not to mention his SQL chops are probably pretty good by then)