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?"
There are so many buzzwords that *each* take weeks to learn that there must be a way to boil it down to core concepts. For example, SQL has always be there and useful, for example, and will probably be around long after all the object-oriented xml fashion show has ended.
It's okay to spend 95% of the class using PHP, but be sure to include a discussion of how PHP compares to alternative technologies. Knowing how to use a technology can be equally important as knowing where the technology fits into the "big picture."
Explain things like:
Database Options
- MySQL (open source, usually free)
- Oracle (powerful, but expensive)
- SQL Server (buggy, less expensive)
Server Side Scripting- PHP
- Java Server Pages (Requires J2EE)
- Active Server Pages (Requires
.NET)
Server Side FrameworksRegardless of what language you choose you need to cover the concepts of design patterns, antipatterns and try to instill some architectural sensitivty - maintanability, data hiding, modularity, testability, flexibility etc. into your students. I have seen Way WAY W*A*Y too many php hacks obviously written by inexperienced self-taught web programmers that are just flatout nightmarish.
Be sure to emphasize the truth of the matter - most programming is maintaining existing code, and if you don't lay a decent foundation you are doomed to endless torment in spaghetti code hell.
If this is a class for 'Human Computer Interface' students, particularly students at the graduate level that have never programmed ... perhaps give a little thought to how they came to be graduate students in HCI that have never programmed.
Maybe it is because there is a world of difference between programming and human-computer interface design, just as there is a world of difference between chemical engineering and industrial structure painting. Paint is made of chemicals, but chemical engineers suck at painting houses - and although a light understanding of chemistry helps the painter, it doesn't take a chemical engineer to paint a wall.
Want to know what your focus should be, for developing a curriculum to describe to HCI students good complex web-site design? Crayons. And maybe a web browser to go look at web sites that suck and look at some good web sites in order to start the discussion about why some suck and why some are good. Have them map out the individual page interfaces in crayon and then have them draw the relationships between their pages and the environment (user, firewall, Internet in general, server farm, load balancer, database back end, other systems, etc.) in crayon. If they can't express and design human-computer interface concepts using a crayon, it isn't going to get expressed.
Even the best SQL mastery isn't going to help create a complex web site that feels 'natural' / isn't 'painful' to use, nor is PHP or Ruby or any other language. Those are implementation details, and if you wait until implementation to work through your complex user interface design decisions I can assure you : your web site will suck.
Graduate level studies are about theory, concepts, and developing an understanding for the underlying driving factors at the core behind the technology. If you have them coding in any language, hooking little web pages they hacked together with their new-found programming skills to a MySQL database then you have effectively robbed them of the very education you intended to provide.
Glonoinha the MebiByte Slayer
I work as a PHP developer right now, working on the internal company website and several websites for customers. I did take some web classes in college, but there are things that they taught me that weren't useful and some things that I wish they had taught.
What They Didn't Tell Me But Should Have:
Design / Usability. What layouts work? What don't? Which are best suited for a particular need?
How can I determine if my site is usable by people? How can I make it easier to use? What practices should be avoided?
Serving Paradigms. One Page Serves All vs. Each Page Serves Itself. What are the benefits and drawbacks of each approach?
Overview of old and currently available technologies. What is out there right now? What is being phased out of use, and why?
Templating. There are some nice templating engines out there for just about every langauge... Why was this NEVER MENTIONED in school?
Load Balancing / Server Farms.
JavaScript / ActiveX. When is client side technology appropriate and how can it be USEFUL instead of HARMFUL?
What I Wish They Would Have Stayed Away From:
GIF vs JPEG. Come on...
Deprecation of the BLINK tag. Are you serious?
HTML. Do you really need to spend time teaching CS folk HTML? If they can't learn it on their own they deserve to fail...
JavaScript (the language). See comment about HTML.
ie - Teach me theory, stay away from implementation. Heck, leave all implementation details up to them if you can. They should be able to use whatever technology they want (PHP/mySQL, Ruby/Postgres, ASP/Access with an ODBC connection to an Excel Spreadsheet, Perl/flat files, Assembler/Vulcan Mind Meld, etc) as long as they can show you they they understand the theory.
I can't believe that I wasted my time in a class entitled "Advanced Dynamic Websites" to be talked at about HTML and GIF vs JPEG.
Love sees no species.