Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror
×
Education The Internet

Suggested Curriculum for 'Complex Websites' Class? 85

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?"
This discussion has been archived. No new comments can be posted.

Suggested Curriculum for 'Complex Websites' Class?

Comments Filter:
  • Less is More (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.

    • I agree, don't drown them in buzzwords. That said, it's not entirely clear to me what is meant by 'complex website'. Are you limiting yourself to web applications on dynamic sites? Are you concerned mainly with the presentation aspects of those web apps? Do you cover navigational and other non-app issues? Do you deal with the complexities of the configuration and management of the web sites (DMZ, load balancing, etc.)? Do you talk about application servers? Non-database back ends? Covering all these aspects

      • It seem to me it is a course for future PHBs. Noone else would have the guts of "teaching" "complex website technologies" in three months to people with no previous exposure to *anything* programing related.

        So, they probably only want to learn the buzzwords so they (as always) *seem* to know what they are talking about and then have the real techies clean the mess when the shit they spit reaches the fan.

        So I tell you mates, don't tell him even a single a word; to the enemy, not even water!

  • I'd strongly recommend Ruby-on-Rails [rubyonrails.com] in addition to or even instead of PHP. Although there is a lot of PHP out there, I can't think of a reason to use it for a new project if you knew both PHP and Ruby, or if you knew neither and had to learn one or the other.

    And I can think of a few strong reason to use Ruby: tainting, true object orrientation, no overflows,..

    --MarkusQ

    • I good way to prepair students for the unemployment line.
      • by sheldon ( 2322 )
        My ex-girlfriend decided when she moved to this country that she should prepare for a job in IT. So she went to this school that promised to train her.

        For two years she had beat into her head "Microsoft sucks. Everybody uses Linux. blah blah blah"

        Fortunately she was able to get a job as a staff Accountant entering in invoices.
  • Several ideas (Score:3, Informative)

    by Lomby ( 147071 ) <andrea&lombardoni,ch> on Wednesday June 01, 2005 @05:02PM (#12698406) Homepage
    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 [webml.org] and WebRatio [webratio.com]

    Additionally (shameless plug), you could introduce some special cases of web design such as the one described here [acm.org] and implemented here [sourceforge.net].
    • Lomby, is right on. Teach them about project specification and requirements gathering, system design and architecture. Additionally I recommend any information you can provide about MVC design.

      It's important to understand at a high level, how applications work. Since these people are in grad school and probably in a management track (or at least not looking for jobs as web application developers), they will need more familiarity with system design and what's possible with existing technology and developmen
  • I would walk the class through the planning, implementation, customization, and maintainence, of an existing PHP/MySQL CMS. PHPNuke, Mambo, and Drupal come to mind as good bases. The advantage to using an existing CMS as a platform is that students would be able to focus on adding additional custom functionality instead of the base which might involve concepts they should already be familiar with. Hacking existing code gives you a a good look at what the developers have done right and what the student mi
    • I hate it when I hit "submit" instead of "Preview". That should have been broken into paragraphs...sorry for the decreased lifespan to your eyes.

      I was also going to add that I wouldn't focus too much XHTML, sophisticated CSS, or JavaScript. Using HTML will give them a base for XHTML, should they decide to pursue it, the CSS they pick up from a CMS is a good introduction, and the concepts behind Javascript can be learned through most scripting languages, and since PHP is a required component of the curri

  • Only teach javascript if you can teach good, practical javascript, and especially, when not to use javascript.

    When used well, it can enhance usability, but it shouldn't ever be used just for the sake of it.
  • by mrighi ( 855168 ) on Wednesday June 01, 2005 @05:29PM (#12698784) Homepage
    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
  • Design Patterns (Score:3, Insightful)

    by the eric conspiracy ( 20178 ) on Wednesday June 01, 2005 @05:37PM (#12698875)
    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.

  • with HCI "experts" not knowing how to program. It all too often occurs that you have a quack expert insiting that the program/website do something from a usability prespective thats just not possible. Anyone who is specializing in HCI should have a strong background in programming and computer technology, ESPECIALLY at the graduate level.
    • I disagree with the fact that you think it's the HCI expert that should also have a strong background in programming to know what is and isn't possible. I agree they need to be informed about technolgoies but they are HCI experts and not programmers. If they need to focus on improving interactions with computers they shouldn't be considering at the programming level what is and isn't possible, it can hurt HCI innovation. That's why you have a team of poeple and a design process.
      • If they need to focus on improving interactions with computers they shouldn't be considering at the programming level what is and isn't possible, it can hurt HCI innovation.

        Agreed! Also, painters should know very little about the paint or canvas they use. Poets should ideally be semi-literate or non-native speakers and just describe to somebody else the effect they want to create.

        The best interface designers I know all have a solid understanding of the medium they work in. They may not be the best progra
    • actualyl its best if they dont, they should be thinking only about end result not implimentation, if programmers designed everything we would never go anywhere because we would rule out all the hard stuff first.
      • HCI: Let's put the file uploads on the same page as everything else.

        Programmer: HTTP multipart forms makes that awkward...

        HCI: I don't care if your life is a living hell, do it!

        Programmer: I quit.
        • Programmer: I think everything should be done in green monospaced letters on a black background and commands typed in.

          HCI: We should use a gui which actually uses the principles of the lovely art of typography established over hundreds of years and and a mouse.

          Programmer: What's this mouse thing you talk about? And typo schmypo. Just use Arial or Courier.

          HCI: A mouse is something that the users can use to change their presentation by pointing to the part that needs to be changed.

          Programmer: No, they sho
  • What's the purpose of this class? The idea of "complex website" is not well defined.

    I would think a discussion of complex websites would first start with a discussion of n-tier development... seperation of business tier from data tier and UI tier. Those are the issues that most web teams deal with at corporate levels.

    Transaction management, state management... other issues like this with web development.

    These are all concepts, not technologies. Certainly there are some technology directions for say U
    • Exactly! The main complaint i have about "complex websites" is that (in it's most common use) it is used to refer to a complex application that pushes its UI over the web instead of code excecuted on the end users machine. If more thought went in to the concepts I expect we'd see better results...

      My 2 cents

    • Agreed. (Part of his Requirements are probably about money.) I would define "complex" (for a start) as one where the set of rules on the server-side necessitated a seperate tier between the web server and the DB server. That would be one where the tools used are almost irrelevant to the depth and breadth of business rules necessary to accomplish the needs of the customer. Indeed, the question of whether to use client-server or a web server or a combo of both to what degree then also become some questions to
  • Forget about code semantics, focus instead on application development theory and techniques, application frameworks, design patterns, etc.

    I personally develop in both ColdFusion [macromedia.com] and PHP [php.net] along with the Fusebox [fusebox.org] framework, and have just started using the fantastic FuseBuilder [fusebuilder.net] tool for the design stage. The using the Fusebox Lifecycle Process (FLiP) [bjork.net] and a design tool that works with it (FuseBuilder) ensure that clients get what they want, no hassle, no "but it should be blue with green buttons". I can't prom
  • by Unknown Relic ( 544714 ) on Wednesday June 01, 2005 @05:56PM (#12699070) Homepage
    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.
    • These are grad students. If they would have opted to take a job instead of continuing their education, they would be required to learn new languages all of the time (some of them nasty in-house ones), just like the rest of us.

      Teach the concepts like the parent post said... and let the students decide which tools are right for the job. They will need to know how to do this after they graduate anyway. These guys should already know the basics of webservices and SOAP by the time they reach you (although my
    • If you're going to skip over CSS why not send them to look at http://www.csszengarden.com/ [csszengarden.com] for homework. It illustrates well the separation of the interface from the engine ... a good point in a HCI class.
  • Why not teach them about /. and more specifically SLASHcode? That has most of what you want, just have them create the site in PHP with mysql.

    I think by taking an example like this one, you'll end up with people that can make as complex as you need. Gods know, even Taco can't keep up with the code here anymore ;)
  • firefox.exe weights in 39,856 Kb of memory on Windows (after openning a few tabs), sure feels like a fat client to me.
  • I am no expert on complex website, but I do have a good suggestion:

    If you're planning on teaching any programming, check out Python, it's very clean, clear, small and easy and has lot's of inroads into the subjects you want to treat.
    Stuff like a functional SOAP Webservice can be done in under 10 lines of code. There's basic XML/HTML/CSS SQL too.
    After introduction of the basic concept you can then continue with some PHP and MySQL.

    Please try to learn them something about user interface design too. Stuff lik
    • Python is the new C++. It's easier than its predecessors, is not too adventurous or different, and has a lot of power and features. However, for web work it may be slightly out of its element. Yes, Zope and PEAK are cool tools, but they fill a niche that very few web applications fit well into.

      If you need a small, fast, or medium sized webapp, no one challenges Ruby On Rails right now. Where that framework fails, Java based solutions start to shine. Subway might be able to get Python into that arena in the
  • I'm a somehwat experienced developer specializing mostly in web related things. In the past year, I took two classes at Ohio State that are related to what you describe. One was a design class (think print design) using the web as the medium. The other was a usability class geared towards engineers (Industrial, Cognitive) which revolved largely around a data driven web project. The engineers all had taken some kind of freshman class where they wrote "hello world" in C.

    My first bit of advice is that f
  • First, as one poster pointed out, I would provide an overview of technologies out there (languages, databases, operating systems). The mantra of a good programmer is to use whatever tool is best for the job; so make sure they know what their choices are.

    Second, maybe a brief discussion on hardware. Specifically different ways to assemble a server farm. Do you need one single machine, a db and a webserver, or thousands of servers all running in parallel. This would presumably cover load balancing, datab
  • by Glonoinha ( 587375 ) on Wednesday June 01, 2005 @07:23PM (#12699876) Journal
    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.
  • It's not clear to me exactly what the requirements for this course are. Some more information about the context would be useful.

    As a personal example, not long ago some colleagues and I reworked a reasonably complex web site (say 20-30 major pages with unique content and design, backed by a few hundred minor pages). The aim of the reworking was partly to improve the appearance and usability of the site, and partly to increase the range of content. Some of the bigger design/UI issues we touched on during t

  • 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 avoide
  • I posted a similar question [slashdot.org] on teaching web development to non-developer types here a few weeks back that may be of interest. I particularly liked a suggestion that I pair my class with a CS class to help broaden the exposure to topics and issues while also making it more likely that the class will get a real-world experience out of the work.

    I've come to the conclusion that with non-CS students it doesn't really make sense to try to teach development in the coding sense, but it does make sense to try t

  • Consider mentioning multiple servers and networks as part of the complexity. I find one thing the developers in my group overlook is how a site will behave after all the pieces move to their proper place in a production environment.

    In a complex site, you may end up with something like this:

    User -> Load Balancer -> Web Server -> Gateway Server -> Application Server -> Database Server

    Where there may be multiple branches past the load balancer for any one request. This chaining can lead

  • It's best to just let them loose on /.
  • I'd start with a one-week brief blitz of typesetting concepts (how text can be aligned so as to draw the eye, etc), formatting, design/graphics, and overall layout, with a description of some common layouts in use on large sites. This would be a nice way to kick things off -- show them how to make a site that isn't hideous.

    Then, I'd spend a couple of weeks on sound HTML, how to integrate scriptlets properly, how to handle server-side includes and CSS so your code is cross-browser, how to limit your table u
  • I'd at least introduce them to Macromedia's Coldfusion. I know it's become synonymous with Flash, but I see more and more sites popping up with the .cfm extension. It's becoming a standard for business/database/web-based designing.
  • Dare I say it -- have a look at Phillip and Alex's Guide to Web Publishing [greenspun.com]. The basic concepts of what makes a good web service were pretty much laid out here. It's all still as relevent as when it was written. This is the important part. The rest is just a technical exercise.
  • PHP and MySQL are two pillars of open source, there are a lot of resources on them. I would choose a CMS/app framework using PHP/MySQL and build the class around accomplishing tasks in that framework, where each student ends up with a complex website. The framework code can serve as a corpus of examples/best practices and illustrate app design, while the coursework focuses more on user interface, content design, and data management.

    A fairly complete list of frameworks can be found at http://www.opensourc [opensourcecms.com]

  • Actually, I am not aware of any high-level "curriculum" of the /concepts/ per-se, except maybe something like J2EE design patterns or something (which willl no doubt describe the concepts and also be applicable to languages like PHP, etc.).

    The thing to nail home is:

    * impedence mismatch between display (usually HTML + CSS, perhaps originating from serverside XML+XSLT), transport (HTTP, blocking/synchronous protocol), business logic (typically some general purpose language like Java), and database (e.g. SQL
  • Teach them how to hold usability tests in a cost effective fashion, covering both the math/statistics side as well as methodologies. This is essential to the success of any complex website.

    Have them learn to look at the features of the available technologies and weigh how their strengths and weaknesses apply to the end user interface (this is mostly going to be looking at cost, development time, maintainability, and reliability).

    This class should really focus on the life cycle of evaluating a websites ef
  • Take a look to Ajax [informationweek.com] and Aardvark [sourceforge.net] [link 2] [sourceforge.net] [link 3] [dei.uc.pt] [link 4] [mikebird.co.uk].

A morsel of genuine history is a thing so rare as to be always valuable. -- Thomas Jefferson

Working...