For those of us taking on advice to build a portfolio, whats a good showcase of applications to have built?
1. Simple link shortener (no accounts/logins, just store the links and do 301s)
2. Simple blog with HTTP basic auth on the admin
3. Update blog to have comments & true user accounts/logins for admin
4. Update blog to allow image attachments with a post and include the link shortener code (so every post has a short url)
5. Update blog to allow commenting and email the admin when a comment is posted
6. Something different–probably a simple forum or classified/ecommerce site that just uses paypal
7. Something dealing with external data/APIs
[1] http://spanish.about.com/od/spanishvocabulary/a/ordinal.htm
1) hello world using MVC
2) gobble an RSS feed and make it pretty (learn about objects / data massaging)
3) pull data from a database and display
4) put / pull from database (CRUD)
5) some kind of basic auth
After that, a new world should have opened up. There's a lot you can do, mashup / small app-wise with just the above skills.
I would follow it up with:
6) REST / SOAP and intro to some popular APIs e.g. Twitter / Facebook / Gmaps
7) Performance tuning / Profiling (slow query log, denormalization, caching etc)
8) Front end stuff (jquery / ajax / visualisations, graphs etc)
Therefore, I'd start with a blog platform. Doesn't need to be "full-featured" in any sense of the term, just as long as there's a reasonable (explainable is close enough) way for me to write posts (doesn't have to be part of the frontend), and the frontend is usable (there should be some kind of indexed archives). Comments would be nice, not necessary (no login system for commenting required, saving an email or some kind of identifier for the commenter is enough).
What's important is that the final application is robust and at least mostly secure. It's almost impressive how few "web programmers" can't put together a complete webapp without gaping holes (security, functionality, or otherwise). Lots of points would be determined by maintainability of the code, that is: was it well thought-out from the start? has the code been sufficiently refactored instead of just copied/pasted everywhere? are templates being used properly?
If someone implemented it cleanly without javascript (that is, when I click a link, even though it just fetches a new static page, it "feels" ajaxy, in the sense that large bits of UI don't change underneath). With javascript would just be sugar on top.
Beyond this, for adventurous students or those with lots of extra time on their hands, I'd ask for a simple facebook-style application. Something where I can log in (remember your security, folks!), form relationships with peers, and post some kind of content (either broadcast or directed at one user) is enough. Here I would expect some javascript as needed to make the UI feel snappier, though if the student could do without and still impress me, I'd be happy. Of course, javascript is a big part of webapps, so this "bonus project" would be a good place to demonstrate that.
Going farther, real-time chat would be my next task, but I really wouldn't expect undergraduates to be able to bring that to fruition in a semester.
If you want to build up a portfolio, I'd go with real-time collaboration a la Etherpad. Make it clean, and make the UI pretty. If you came to me with something like that I could play with for half an hour without finding any obvious bugs, I'd be extremely impressed.
First, writing games is fun. Even the most boring programming task can be enjoyed if it's in the context of writing a game.
Second, RPG / adventure games are inherently stateful which makes using REST / MVC non-trivial. Still, most real world applications are stateful one way or another so it's a good way to get familiarized with these concepts (as well as related ones such as continuations) and the underlying problems.
Third, if you allow interaction between players they can gain some familiarity with social software.
http://www.dcs.bbk.ac.uk/~ptw/teaching/IWT/coursework/cw.htm...
It turned out that most of the class found this pretty challenging, and whilst it didn't include server side stuff which I thought should have been covered I also thought it wasn't a bad exercise given the time expectation associated with it (no more than 8 hours is expected for a piece of coursework like that).
My answer to that coursework is online still: http://www.dcs.bbk.ac.uk/~dkitch01/IWT/
As to what I would teach, I would do it in this order:
1) CGI (Server side responding to requests and basic HTTP)
2) PHP (Scripting on the server)
3) Java (Compiled code on the server)
4) HTML
5) JavaScript Validation (Reading the DOM, editing existing elements)
6) JavaScript Manipulation (Writing DOM)
7) AJAX (Conversing with web services)
It should be incremental and accumulative.
Given a query term, execute a web search against several engines, parse the results into one data structure, deduplicate and display.
This covers a lot of ground including regular expressions, parallelism, text parsing, etc.
Anyway my point is, start simple but not too simple. A challenge is good. A blog system is a pretty good start, since it introduces the mainstays of web programming (databases, forms, comments, etc.). Instant gratification is good. Then let your students find something they want to build.
Project 1
html5 local storage /sqldb using javascript for the front end.
This is a standalone web app that supports touch interfaces and manages sql of the students choice in the browser storage. ie.. inventory db, profile db, tweet db something crud.
Project 2
Now build a server that supports basic user authentication and get ready to store your data from Project 1 in a sql db.
Project 3
Build Registration/authentication into Project 1 and support online/offline sql db w/ sync via web api
Project 4 SSL and encrypted data
move to comments. create a gallery, let them use a lightbox(instill in them the idea that they don't have to do everything from scratch, and that it is in fact stupid)
go from there.
Intermediate: Image host w/ resizing & cropping.
Advanced: Classfieds site that isn't vulnerable to SQL or XSS injections. Allows image and videos to be attached to a post.
Expert - Social network w/ image/video/wall/message/friend functionality.