Words from the wise...
I've recently been asked to give some direction on what makes a good web programmer. Here is my response, recorded for blogging prosperity.
There are many things that I would consider  essential for someone to become proficient in the art of web programming, some  more obvious than others.
 First, the primary function of a web site is  to deliver content.  While it is perfectly possible to produce a site entirely  composed of static pages, maintenance of such sites becomes a big issue,  especially if changes need to be applied to several places at once.  Hence,  dynamic sites ( i.e. sites that make pages to order, using a back-end data  source )  gained primacy very quickly.  As a consequence, I think it is very  important that web programmers have a solid appreciation of database  technology.  There are plenty of open source relational database management  systems available.   MySQL is very popular, but I would recommend PostgreSQL, as  it has the longest history of supporting referential integrity.  This simply  allows database designers to make sure that you can't delete a row if other rows  depend on it.  It's an important concept that is worth learning  early.
 Object orientation is a key component of a  web programmer's skillset, and is another essential.  The practice allows  programmers to create objects that know how to look after themselves, and can be  combined to create much larger systems.  One of the things I try to instill in  the programmers at Mandogroup is that every single requirement we fulfil begins  its life in the real world, modelling a real life thing.  Object orientation  allows those requirements to be compartmentalised in a natural way that maps  neatly to those requirements.  Generally, it allows a programmer to create  something that models the exact thing that the requirement  specifies.
 This may seem obvious, but it's also  incredibly important for a web programmer to have a proper grasp of XHTML and a  decent knowledge of Web standards.  This is ultimately the final output to the  browser, and as such, deserves a great deal of consideration.  A basic knowledge  of CSS is also recommended.
 Javascript is an essential component of any  modern web page.  The number of people that use web browsers without the  technology involved is dwindling, although I would advocate a lot of focus being  put onto the concept of degradable implementation.  This simply means that the  site will still work if Javascript is not available, if only in a limited form.   It is also a key component of the AJAX framework, which essentially uses  Javascript to make background calls to a service, before rendering the content  on the page ( again using Javascript ).  Javascript can also be used to validate  form controls on the client, meaning that the web server has to do less work.   As such an important piece of enabling technology, I would consider it an  essential part of any curriculum aimed at producing solid web developers.
  
 PHP, .NET and Java are all server-side  frameworks.  PHP is an easy language to get into, but encourages a lot of bad  practice, as it is very easy to hack stuff together.  Ruby on Rails is  a better starting point for beginners, as it introduces some solid  object-orientation and reinforces some of the lessons about good database  design.  It also has a great error reporting system that will teach students as  they go.
 Java and .NET are largely similar in nature,  both being enterprise level server-side solutions produced by large  corporations.  They are type-safe, meaning that they won't let programmers do  silly things like stuff letters into places which are only supposed to hold  numbers.
 As they both perform similar functions, it  is not worth learning both of them, and choosing between the two, I would  recommend the .NET Framework over Java.  Java has the advantage of being a more  mature technology, but this is not without its share of problems.  Critics,  including myself, argue that Java has become too unwieldy over the years, making  it almost impossible for someone to learn the full extent of the language.
  
 Java is also a language in its own right,  whereas .NET is a Framework for development in a number of languages.  You can  only write a Java app in the Java language, whereas you can write a .NET  application in a number of different languages, including C#, Visual Basic and  even older languages like COBOL.  This means that programmers can find the  language that suits them best, yet still get the benefit of the Framework, which  handles a lot of common tasks ( such as mail sending, network tasks, etc ) which  is available for all of them.  In terms of the implementation language I would  actually recommend for .NET, I would go for C#.  It is elegant, concise and  allows solutions to be coded very productively.
 The only caveat I would place on my  recommendation for .NET is the use of the Web Controls that come with ASP .NET.   We do not use them at Mandogroup, as they produce markup which is ugly, non-SEO  friendly and heavy ( meaning pages take longer to load ).  We prefer to use all  of the backend stuff, but come up with our own solutions for rendering.  The  only MS controls we use are the Repeater, the Literal and the Xml  control.
 To summarise, this would be the focus of a  curriculum for a web programmer, from my point of view :-
 - Database design
- Object-orientation
- Standards-based markup such as XHTML with use of CSS
- Javascript
- Ruby on Rails ( beginner programming )
- .NET with C# ( advanced )

