views:

634

answers:

17

I am the lead instructor of web & internet related courses on a private post high-school institution. My current classes include introductions to HTTP, TCP/IP, (X)HTML/CSS/JavaScript and generic SQL. Next year we will deal mostly with PHP / Java. What, in your opinion, are the most important aspects of web development in contrast and relation to traditional development and what should be the main focus of my lectures?

Of course there is a curriculum I will follow but I would really like to enhance it with everything there is time for, from hypes and semantics to oldschool hardcore scripting.

Keep in mind that I am fortunate enough to deal with highly talented and moderately motivated individuals. :P

Clarifications:

  1. The school is a technical education institution, which in Greece means the third grade of post-high school education.
  2. My main course is an IT course, requiring two years and its viciously titled "Internet Technology Technician".
  3. I also teach web dev skills on Network Administration related courses, so you can safely assume that all my students have at least six months of formal IT training before meeting me.
  4. I don't teach Web Design or anything as artistic.
  5. My (so far fav) nickname is "The Terminator".
+12  A: 

In my opinion, the most important thing is to teach the difference between server and client programming, and when you would use one over the other. I am so surprised at the number of new graduates that don't understand the difference.

AaronS
So true and so disturbing.
McWafflestix
A: 

Teaching web development (like GUI builder in the old age) has the risk of focusing too much on the front-end and not enough on the back-end. It is too easy to fall into the trap of getting the students to think too much about superficial visual issues (e.g., how to align these two things) rather than core things (how to we effectively compute, calculate, store, etc.).

In addition, many web-development languages are not hallmarks of good programming practices since they tend to be on the dirtier scripting side.

These two factors together, to me, are why languages like PHP often get a bad rep.

If you were teaching people who were actually going to be practicing developers, I would focus separately on the model and on the view, and show how to tie them. But in a high school environment, it's possible that the parents just want their kids to demonstrate some publicly visible stuff for their college applications.

If they are truly talented and motivated, teach them real programming with some web manifestations (e.g., use Java servlets), and leave all the scripting for them to learn in their spare time. A good teacher is invaluable for building good engineering skills, so use your time where it matters.

Uri
I take some offense in the equivalence of Web Dev to a GUI Builder. I may need to clarify that Web Design is not part of my topics, and my students are being taught how to be Web Developers. Furthermore I disagree on the point that good programming practices have anything to do with the dev environment and one of the first thing I teach is that tendencies are choices of the developer and have nothing to do with the tools. In a personal note, I enjoy the easiness of the Web both in practicing and in teaching and I have found scripting to be the best practice in a number of occasions.
Yannis Rizos
Yannis, I meant no offense. There are different forms of web development and different forms of GUI development. Just like there's a difference between a sophisticated real-time Swing application and GUI engine, and some VB-style GUIs one get out of a scripting book. In the same way, web development can be very simple or very sophisticated.
Uri
I personally feel that PHP is not as good a language for learning good programming skills as one of the C-style language.
Uri
Ok, I wasn't so serious. :)
Yannis Rizos
+4  A: 

For front-end web development ((X)HTML/CSS/JavaScript), try the Opera Web Standards Curriculum which:

takes students from complete beginner to having a solid grounding in standards-based Web design, including HTML, CSS, and JavaScript development.

Jon Cram
That's cool but IMHO insufficient.
Yannis Rizos
Absolutely, I couldn't agree more. I wasn't suggesting it as the singular teaching solution, but merely one valid suggestion amongst many.
Jon Cram
A: 

Focusing on "Next year we will deal mostly with PHP / Java". I'll focus on Java, since I don't know much about PHP.

  1. Get the model right. Design a model, use the ORM, get this to work sensibly. This is highly reusable stuff. It's the backbone of the application. If this isn't right, the rest will rapidly become a mess.

  2. Get the template presentation right. JSP's shouldn't do too much (they can, but shouldn't). This should have any fancy processing -- that's either a model problem or an action class problem.

  3. Knit these together with Struts action classes and Java Beans that make sense in the domain you're building a solution for.

  4. Add CSS/JavaScript and what-not after it all -- essentially -- works. No amount of JavaScript can fix a fundamentally flawed model.

Core Technology issues (XML, HTML, SQL, etc.) are important, but not central. It's hard to skip around, but you have to skip around.

SQL, ORM, Java first.

HTML, JSP, more Java next.

Struts, Action Classes, etc. and more Java next.

I think that much of the core skills issues need to be covered in a Just-in-Time manner. If you spend too much time on fundamentals of HTML, CSS and SQL, no one's building anything useful.

S.Lott
Non important detail: I don't favour Java for web development. That's a question of personal taste and the only reason I am not accepting this answer as the definitive is that Struts gives me a headache. :)
Yannis Rizos
A: 

I honestly do not believe you can do well with web development without having a good background with general software development. If one doesn't pay attention to that he/she will end as a mundane scripter or something.

Would be a good idea if you told us what kind of people with what background you get.

If you got some financial academy graduates, it is not clear what kind of motivation will they have towards any kind of development. If these are engineers or some creative field like design, decorations etc. it will be a different story.

Try to gather a little bit of best-practices from various aspects of development. A little from testing and quality control, a bit from project management, a few things about dealing with customers, security for publicly-exposed software, legal aspects. Not too much, just to paint a big picture.

User
I made some clarifications in the original question.
Yannis Rizos
+7  A: 

IMHO, the most difficult concept in Web development is that of state and how to maintain it.

If I were designing a Web programming course I think I would get the students to design a simple application framework that attempted to address transparent state maintenance. Dividing them into groups, you could have them take different approaches (server-side, client-side, database supported etc.) approaches to this. And at the end of it I believe that they would have learned a lot more about Web architectures than if you had focussed on producing an actual application.

anon
It is one of the most difficult concepts in the human history as well, not just in web development.
User
Well we have already discussed the stateless nature of HTTP and the maintenance of state in a web environment, so in theory we have covered the topic.
Yannis Rizos
In theory, perhaps, but in practice? As I said, this is a very difficult concept and embraces issues of security, client/server architectures and database persistence that others have mentioned.
anon
A: 

I would start with introduction to web standards carriculum by Opera. I think it would give a good understanding of some of the basic concepts in web development

Amit
+3  A: 

I believe a lot in inspiration. As a new web developer I found it really difficult to make my websites usable, appealing, and well coded. I found inspiration in outside resources such as Nettuts and Smashing Magazine. These websites really opened my mind to all of the features I really could learn and use in my designs/coding.

Cris McLaughlin
+3  A: 

Well if you are asking for opinion....

Please teach them:

  1. self documenting code.
  2. the difference between client and server
  3. data checking
  4. security

If they have a good understanding of the programming language (which it sounds like they will get with your curriculum) the things that I have listed will be a great improvement.

Mark
+3  A: 

I also believe that web development can only be taught after first learning a little bit about software engineering. I think agile processes is the best route for teaching students software engineering. It's lightweight and not quite as document driven.

After that I would teach them the basics of client server programming, the http protocol and some basic web programming (PHP and javascript would be sufficient). If there is enough time I would show them the basics of Java EE programming and the differences between that and PHP.

Also cover some of the more advanced materials such as MVC for the web (using JSF) and javascript libraries (JQuery). I would also teach them data access objects and persistent objects.

For my senior research this year I came up with some materials for an upper level college course that requires web programming, web design, and software engineering background. You may look at the basic materials here to get a basic idea of what I thought of a course for an advanced web application development course. I know this may be out of your scope, but it might be a start.

scheibk
A: 

For the programming portion, I would suggest you start with the lowest level / most basic concept you can come up with. The first thing that jumps to my mind is HTML. You could make sure the students understand HTML (and markup in general) and its basic syntax. I think that starting with hand-coded HTML will also give them a greater appreciation for some of the great tools out there that help you generate HTML or other code.

After that, you can get into some tools and technologies surrounding HTML like CSS, JavaScript, and AJAX.

Once the client-side is covered and those concepts are concrete in their minds, you can move onto server side scripting / programming. Most of the languages on the server side simply emit HTML, CSS, JavaScript, etc. to the browser, so understanding those things first is essential.

Finally, start talking about using their new found knowledge to create apps that talk to other systems (databases, web services, etc.). Once all of those basics are in place, you'll probably be done with the class, but then they'll be ready for the 200 level, right?

Jason Williams
+1  A: 

Keep in mind that web programming is a mess and it is your job to provide not just light at the end of the tunnel, but the tunnel itself. I would expand on AaronS's answer:

  • The difference between client and server.
  • Web applications run over a network, with all that implies.
  • There is more than one way to do it. Squared.

In the end you will have to choose what not to teach to actually get somewhere.

Glenn
A: 

I like the answer about the difference between client side and server side programming. Since you teach talented/motivated students, I think that some theoretical discussion of the MVC (Model View Controller) architecture might be in order. How it was originally devised for desktop applications, and in that case it was necessary to implement a system that listened for events, so as to be able to keep all facets of the view synchronized with the state of the model as it was modified. But that, under the web paradigm, the listener code is given to you for free in the form of the web server, and the request is the event. And therefore MVC for the web, at least as regards interaction between client and server, should be less complex, with the controller merely mediating between the client and server.

That is, of course, until the advent of Ajax. When now it is appropriate to implement listener code on the client side with Javascript, so as to be able to keep widgets in synch.

I am an MVC junkie so take whats useful from this. Your mileage may vary, but I do think material on MVC is certainly warranted.

Good luck

George Jempty
Yes, but isn't the MVC just a horrible name?The pattern pre-exists its fame and I will probably let them discover the ugly truth themselves.The front controller will have to do. Not the same thing, but pretty straight forward, and yet actually the same thing.
Yannis Rizos
If you explore PHP whatsoever you might consider showing off my miniature MVC framework: http://code.google.com/p/barebonesmvc-php/Its just 60 lines and that counted for a lot on a recent project where I was developing the web UI for an embedded consumer device. I guess that is something else to teach: don't assume you will always have unlimited CPU/Disk/Memory
George Jempty
+10  A: 

Most important aspects of web development:

  • Where is this code running? (Client vs Server programming - as many have said)
  • Who is going to use this? (Know your audience - why are they on your site/app)
  • How to play nice (copyright, standards, borrowing ideas vs stealing stuff)
  • How to be resourceful (code libraries, google search and stackoverflow)

Main Focus of lectures

I am a strong believer in contextual learning. Let them choose a project with boundaries and guidelines that will employ the concepts you want to get across. One can spend all day learning syntax and concepts, but real learning is done when you are trying to solve a problem. They will also have more fun.

Summary

Lecture on the How (XHTML,CSS, JS, etc) but only in the context of Who, What and Why.

Jeff Hall
Simple, elegant and right to the point. Thanks!Accepted answer, just for the "real learning is done when you are trying to solve a problem" quote. I am going to use that!
Yannis Rizos
I especially like the "who" part. Too often web or software development is very focused on the technical part and the actual user gets forgotten. It's easy to use your site/app when you're the one who designed it. Developers don't need to become graphic designers or UX experts but it doesn't hurt to know what the other side of the team is thinking (and how). And it's only when you have real users when things start to go wrong with the back end.
Matti
A: 

This is very front-end focused as well... but I thought it was a great post.

http://veerle.duoh.com/blog/comments/teach_the_web_right/

[Edit] She mentions the Opera Web Standards Curriculum as has been mentioned in previous posts, but she also mentions WaSP InterAct Curriculum. That seems like it's still very much in progress, but already has some great resources and links.

meh
A: 

Since you're getting into the server-side stuff, I would highly recommend going over some basic application security. From keeping applications (Wordpress, PHPBB, etc) up to date and patched, to actual attacks like SQL Injection and Cross-site scripting.

Since it sounds like you're teaching them from the ground up, you have a great opportunity to impress upon them the importance of input filtering and output escaping, legitimate user authentication, and other best practices.

Jacob Hume
+1  A: 

If you have a group of motivated people then I will suggest to focus on creating a full web application from scratch, I mean, from requirements elicitation itself.

You could start with a brainstorming session where you get some of your students to take the role of the clients from different perspectives (you will need to came up with the base problem itself) and then another group of students who try to get the "clients" group to express their needs and propose solutions to those problems using via a web application. This will help them to learn one of the biggest problems of development in general which is the interaction with clients and how to get the most information out of them overcoming the usual communication problems. Actually if you can get other non-technical people to act as the clients it will be even better.

Then you can introduce then to a methodology like extreme programming or any other you like. I would suggest an agile one because it will provide faster results and won't get boring that fast, besides, the market appears to be shifting in favor of them.

Now, regarding web development itself, it is really important to get people to understand the need for web standards and how wrong things can go when they are not followed (IE6)

After all this is clear, it will be time for them to realize that in web development most of the time you just have to deal with the differences in platforms in which their applications will be displayed and teach them actual techniques to do so like unobtrusive javascript and progressive enhancement.

Regarding the server side of the equation, I believe it is important to enforce the use of patterns (MVC is a must), code re-use, and all the usual development practices. And be sure they understand that HTTP itself is a stateless protocol and how it is important to handle cookies and sessions in a responsible fashion, here it is important to make sure they understand the differences between the server and the client side.

Also, covering the OWASP top 10 (at least) is a must, the last version is available at: http://www.owasp.org/index.php/Top_10_2007

Some links: http://www.quirksmode.org/blog/archives/2005/06/three_javascrip_1.html http://dowebsitesneedtolookexactlythesameineverybrowser.com/ http://forabeautifulweb.com/blog http://www.alistapart.com/ http://www.owasp.org/index.php/Top_10_2007

Javier