Suggested Curriculum for 'Complex Websites' Class?
StudMuffin asks: "I teach graduate computer science courses at a Big 10 university to grad students, who have never programmed before and are studying Human-Computer Interaction or other Information Science specialties. These courses are usually their first dip into the programming pool, so we have tons to cover in three months. This fall, I have been asked to take over and redesign our 'Complex Website' course, which is getting a bit long in the tooth. This course has traditionally been about database backed websites with server-side scripting. My only requirements are that there be coverage of PHP and that we have basic instruction about persistence using a database (which must be MySQL). However, I believe that the nature of 'complex' websites has changed, with XHTML, CSS, Javascript, web services, and so on. Sites like Google Maps make the browser feel like a fat client and are making the web browser a true window onto enormous data sets, and take into consideration the MoRAS of small views on large worlds. What do Slashdot readers consider a reasonable curriculum would be for a redesigned course like this?"
I think any course on complex websites at a university level should focus more on best practices rather than a specific language or platform. Yes, use PHP and MySQL to teach the concepts, but make sure your course teaches concepts, not the language. I've worked with far too many people who "know" a language but have no idea of how to write a good web application. What they learn in this course should help them regardless of if they end up developing in PHP, .NET or Java.
Things to be sure to include:
A basic overview of the language; you can't escape doing this. Don't cover the basic syntax for variables, loops, etc. (they should be able to learn this stuff on their own) but its nuances and the way it approaches web development. Discuss the $_SESSION array and how it works in PHP, as well as the $_POST, $_REQUEST, $_GET and especially $_SERVER super variables. Mention how PHP turns a form element into an array if the html element has [] at the end of its name. If possible don't even bother with HTML, and I wouldn't worry too much about CSS either. Mention it briefly and explain why it's of benefit, but don't actually teach it. Often times a programmer won't even be the one writing HTML or CSS.
Good architecture: separation of code from content - especially in languages such as ASP and PHP. Discuss what works and what doesn't work for scalability. Bring up different architectures which are used and discuss the pros and cons of each. Potential things to cover in this section could be 3-tier architectures, front controllers, ORM frameworks, etc. You may also want to briefly mention different ways a web application may be scaled including techniques for load balancing and how this affects the design of web application.
Caching of output: far too many web sites and applications hit the database twenty times for a single page view. Hammer in the importance of caching, and introduce different techniques for doing so (full page caching, caching of specific database results, etc.)
Security issues: This is a major one. Proper escaping of input, session hijacking, cross-site scripting, etc. Be sure that people are educated on how easy it is to forge data that is submitted by get or post so they don't have URLs like view_billing_information.php?AcountID=512 where changing the URL allows you to view someone else's personal information. Yes this type of thing should be obvious but people don't always thing of it. Don't forget about cookies and the dangers of storing sensitive information in them.
Near the end of the course briefly cover things such as xml-http requests and SOAP but make the focus more of "these things exist" rather than detailed information on how to use them. Bring up JavaScript and client side code, but only after they have a solid grounding on the server-side of things.