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?"
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.
Re:Less is More (Score:2)
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
Re:Less is More (Score:1)
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!
Re:Um (Score:1)
Paper mockups and pseudocode for code.
Re:Um (Score:2)
One great book on the topic is Paper Prototyping [paperprototyping.com]. The shopping list alone is worth the price of the book.
Rails -- in addition to or instead of PHP (Score:2)
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
Re:Rails -- in addition to or instead of PHP (Score:2)
I didn't miss it, I challenged it. Just because someone says "I'd like to cut wood with a rusty axe--what's the best way to do it?" doesn't mean I'm under some obligation to suspend all judgement in answering. I'm perfectly free to advise him to use a different tool, even when he says the rusty axe is a "requirement."
He is of course free to disregard my
Re:Rails -- in addition to or instead of PHP (Score:1)
I find that complex websites will have a mix of all sorts of languages, and all sorts of persistence methodologies (cookies, url-based, session, data (dare I?: beans)
Also, it will mist likely involve filesystem muckery, apache
I say what woul
Re:Rails -- in addition to or instead of PHP (Score:2)
Sounds just like the application we just got back from India.
Agreed. (Score:1)
Re:Rails -- in addition to or instead of PHP (Score:1)
Ahh (Score:2)
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)
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].
and additionally... (Score:1)
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
Use a CMS as a Platform (Score:1)
Re:Use a CMS as a Platform (Score:1)
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
Re:Get them started right... (Score:1)
That will prepare them for the real world, where you are swallowed up in mindless minutiae, your stuff won't work well: just barely enough, you'll
Re:Get them started right... (Score:1)
> application wished they had been blueprinted from a webapp
> instead of a hastily-drawn diagram on a white-board in the
> conference room.
that is how my current employment is, once in awhile I get to re-architect(which is fun then back to the bore.. I'm cutting down hours because I find it so boring.. possibly leave the programming field all together who knows, it's too grating. switching languages would help wake my interest for a bit til I
Javascript (Score:1)
When used well, it can enhance usability, but it shouldn't ever be used just for the sake of it.
Compare & Contrast Various Technologies (Score:3, Insightful)
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
Re:Compare & Contrast Various Technologies (Score:2)
Sybase (powerful, free if run on Linux on a single CPU machine with 2G or less RAM and total database size of 5G or less.)
Re:Compare & Contrast Various Technologies (Score:1)
Re:Compare & Contrast Various Technologies (Score:2)
Re:Compare & Contrast Various Technologies (Score:2)
And lets not forget that an SQL database is only one way to store your data, from files to LDAP and beyond. Many important networked applications don't use SQL databases, and with good reason.
Re:Compare & Contrast Various Technologies (Score:1)
Re:Compare & Contrast Various Technologies (Score:1)
Design Patterns (Score:3, Insightful)
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.
I think that there is a problem... (Score:1)
Re:I think that there is a problem... (Score:2)
Re:I think that there is a problem...Niche thinkin (Score:2)
I wasn't however trying to say that HCI experts can't be good programmers as your first link argues. My reply was to the first post stating that they should have a "strong background in programming" to perform their duties.
Re:I think that there is a problem... (Score:2)
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
Re:I think that there is a problem... (Score:2)
Re:I think that there is a problem... (Score:2)
Re:I think that there is a problem... (Score:1)
Programmer: HTTP multipart forms makes that awkward...
HCI: I don't care if your life is a living hell, do it!
Programmer: I quit.
Re:I think that there is a problem... (Score:2)
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
Concepts not technologies (Score:2)
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
Re:Concepts not technologies (Score:1)
My 2 cents
Re:Concepts not technologies (Score:1)
Focus on app development techniques, not code (Score:2)
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
Teach Concepts, not Language (Score:3, Interesting)
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.
Re:Teach Concepts, not Language (Score:2)
Re:Teach Concepts, not Language (Score:2)
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
Re:Teach Concepts ... CSS (Score:2)
Ummm... how about this one? (Score:2)
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
weight in 39,856 Kb (Score:2)
If it's complex websites you want... (Score:1)
Python (Score:2)
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
But for the Web? (Score:2)
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
Re:But for the Web? (Score:2)
Access/MSDE, DB_DataObject, HTML_QuickForm (Score:1, Offtopic)
My first bit of advice is that f
My suggestions..and poor grammar! (Score:2)
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
Honest opinion - don't teach them code at all. (Score:3, Insightful)
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.
A practical example (Score:2)
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
What I Wish My College Had Taught Me... (Score:2, Insightful)
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
A related question from a few weeks back (Score:1)
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
Probably a tangent, but . . . (Score:2)
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
Three months won't cover it (Score:1)
Re:Three months won't cover it (Score:2, Funny)
Yeah, let's leave them to loathe the world and get fat off of twinkies and coke.
Here's what I would go for: (Score:2)
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
ColdFusion (Score:1)
Dare I say it -- "Phillip and Alex" again... (Score:2)
Re:Dare I say it -- "Phillip and Alex" again... (Score:2)
I worked at Ars Digita in the mid-early days, and I won't give Phillip the $$$.
Choose a framework as the basis for the curriculum (Score:2)
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]
No curriculum (Score:2)
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
Focus on Design and Testing (Score:2)
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
Ajax and Aardvark (Score:1)