We have completed our three-day intensive RDBMS/SQL course at MIT. The feedback from students so far is that they thought that it was more effective per hour of their time than struggling through problems at home. This makes a lot of sense to me since anyone learning a new set of tools can get stuck for hours on something trivial, e.g., not knowing the right keyboard commands or not knowing how to find the error log or not knowing how to invoke or quit the debugger. In a shared lab with other students and TAs, there is a much greater chance of a student getting unstuck before wasting a lot of time.
Students liked using Google Docs and they liked having their own VM.
We were concerned that the Android application development portion of the class would be seen as pointless and far too confusing with the mixture of tools required and the three .java files in Eclipse necessary to do even the most trivial thing (grab XML page from server and display values on the Android screen; if programming is like this, no wonder that all of the smart people in the U.S. go to med school and Wall Street). However, the way that we set it up so that we told them exactly which files to touch and how they ended up liking it. Now they can see all of the moving parts in a collaborative server/db-backed Android application. (We could not do the same thing for iPhone because the development environment runs only on Macintosh, which just a handful of students had, and because none of us knows how to use a Mac!) We spent about 1.5 hours on Android development and the overall structure of DBMS, HTTPD, firewall, XML transport, XML parsing, display.
People came to the course with varying levels of experience, which resulted in some people falling behind. By the time that 70 percent of the class had solved the problem, we had to move on to discuss the solution. It is incredibly efficient to be in one room together, but at the same time the only way to train everyone to proficiency would be to have all the learning be self-paced. I don’t have a good solution to this. We probably could have done better with an “extra credit” harder problem following every standard problem. That way the quicker students would have something to do other than catch up on email while the struggling folks were still working on the basics.
The students didn’t do much with PHP, but it proved inoffensive and didn’t waste anyone’s time. Now that MySQL is 16 years old, I was surprised at the things that they’ve yet to accomplish. For example, the C in ACID is “Consistency”, i.e., being able to enforce rules in the SQL data model and using the RDBMS as a last line of defense against programmer mistakes. Yet MySQL silently fails to enforce any CHECK constraint. Similarly, when students would GROUP BY column_a and then SELECT column_b (where column_b had multiple values within each group), instead of raising an error as Oracle, Postgres, or SQL Server would, MySQL happily picks a column_b value at random and includes it. I don’t understand why people use it. Is MySQL/InnoDB faster than PostgreSQL? If so, and if people don’t need such things as CHECK constraints, why not simply use a NoSQL system?
One sober reflection upon MySQL’s capabilities was captured during an instant message exchange among course instructors while developing the problem sets:
- I’m too old to look shit up in the MySQL manual
- fuck these people
- making something that sucks ass compared to Oracle
- and then making us learn all of the differences
I agree, the lack of CHECK support can be annoying.
The GROUP BY behaviour can be changed by setting the ONLY_FULL_GROUP_BY SQL mode.
People use it because historically, MySQL was significantly faster than Postgres. Now that Postgres performance is comparable, people don’t switch because MySQL is what they’re familiar with, and it’s good enough.
Though, I don’t get why the instructors were complaining – all DB servers are slightly different, of course one is going to do something in a different way to what you’re used to in another. If they’re too old to be looking shit up, perhaps they should consider a career in a field where tools don’t evolve at a rapid pace?
Why do I use MySQL?
1. It’s already installed on every shared hosting or VPS out there.
2. It functions well at a basic level. I think I understand your points about CHECK constraints, but I doubt it’s something I would be bothered by in real life.
3. It’s what WordPress (and lots of other web tools) run on. So most people are already only running MySQL in order to run something else. If the something else runs OK, they’re not worried about the shortcomings in MySQL that the writers of the something else had to contend with.
Will any additional course material be made available online? It sounds like it would have been a fun course to take.
John: I guess we will probably package up the course material for other universities and companies that want to use it. A lot of it doesn’t make sense without teachers in the room giving 5- or 10-minute explanatory talks to the group and/or running around the class. It would be a lot more work to develop a self-study curriculum.
Seriously, the web developers I’ve worked with haven’t tended to grasp why you’d ever want your DBMS to throw an error, they basically have preferred to treat the tables as excel-style tabular data & if they haven’t inserted or retrieved what they wanted or expected, they’ve tended to treat it as a “data problem” and, as such, have failed to code sensible failure mode for database errors. Serious relational database design is not something they’ve tended to think about a lot.
My guess is that your class would probably have done them all some good.
I should qualify by adding that I’m an Oracle guy, so I naturally understand the features, what you might use them for, and how you’d use them intelligently. I’m not terribly surprised that the “LAMP” or J2EE web app community hasn’t missed them, though. They probably would see them as just more unexplained error to track down in a messy development process.
Supermike is right.
It strikes me as odd that none of you knew how to use a mac. It is a unix box, right?
Finally, the fact that you’re doing php/mysql as opposed to python/postgresql strikes me as equally odd. Why teach them to struggle with a bunch of old problems (basis in C, and ACID problems, respectively) when they can learn a modern environment that solves all of the pedagogical problems that you presumably seek to solve and can be addressed or integrated trivially into your mobile->web->relational example using something like web2py?
I still find it amusing that virtually no one has figured out that the way to get things to blossom on these gigahertz mobiles is to make them first class environments for modern dynamic scripting languages. The power is there. I just don’t see why this hasn’t been addressed by google, apple, or microsoft in any significant (i.e. corporately funded, official, non-hack job) way. Sure, there are lots of independent open source efforts, but they appear to require rooting and being denied from various app stores.
It never fails to amaze me how primitive MySQL. Only in version 5 did MySQL offer triggers! The only time I use it is for my WordPress websites.
James Mitchell
The one disagreement I have with Phil about how he ran that the course — In my mind, systems adminstration should be kept separate from software development. I love software development but I find sys ad to be incredibly boring. Most people need not do hardly any sys ad at. The hosting company I use has Fantastico scripts for pretty much everything. Click a button and Linux, Apache, MySQL, WordPress or whatever application you want to run are installed in a few minutes. The default installation works for 99 percent of the users. That allows me to concentrate solely on software development. So I would argue for a class where the basic tools are already set up and installed so that one can spend their scare time and energy on what really matters, designing and developing applications. The reason God created system administrators is so that I don’t have to do it myself.
When I buy a PC, the Windows OS is already installed. And if was not, installing Windows on a PC is a lot easier than setting up MySQL.