Slashdot Mirror


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?"

8 of 85 comments (clear)

  1. Less is More by ignorant_coward · · Score: 2, Insightful


    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.

  2. Several ideas by Lomby · · Score: 2, Informative

    Given the level of your school, I think you should introduce the students to some (semi-) formal methods of designing web sites beside introducing the technologies (DB, CSS, ...).

    My suggestions are:
    WebML and WebRatio

    Additionally (shameless plug), you could introduce some special cases of web design such as the one described here and implemented here.

  3. Compare & Contrast Various Technologies by mrighi · · Score: 3, Insightful
    I'm a corporate trainer who teaches a lot of server-side Java classes (Servlets/JSP/EJB/etc). I've found it necessary to spend a little bit of time comparing Java and the J2EE platform to "competing" technologies such as .NET, PHP, Ruby on Rails, etc.

    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 Frameworks
    • Rails
    • J2EE
    • .NET
  4. Design Patterns by the+eric+conspiracy · · Score: 2, Insightful

    Regardless 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.

  5. Teach Concepts, not Language by Unknown+Relic · · Score: 2, Interesting

    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.

  6. Honest opinion - don't teach them code at all. by Glonoinha · · Score: 2, Insightful

    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
  7. What I Wish My College Had Taught Me... by KermodeBear · · Score: 2, Insightful

    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.
  8. Re:Three months won't cover it by ignorant_coward · · Score: 2, Funny

    It's best to just let them loose on /.

    Yeah, let's leave them to loathe the world and get fat off of twinkies and coke.