RDBMS Course update
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
