technicalcreative

Wednesday, November 29, 2006

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 )

New stuff by me and Mando

Three sites all recently launched, with yours truly as lead programmer.



All very different. All rather nice, in their own way. A warm introduction to Col, our newest designer, who did a great job on Pssst and Biennial in particular.